Arduino USB seri çevirici olarak kullanmak ve ESP8266-01 programlamak.

Bu yazımda, uzun zamandır denemek istediğim bir çalışmanın sonucunu aktarmaya çalışacağım.
Birçok Arduino kullanan kişi belki de bunu biliyordur. Ben uzun zamandır FT232RL kullanıyorum. Uzun zamandır da ESP8266-01 modülünü FT232RL ile programlıyordum.

XP kullandığımdan dolayı yeni sürümler sorun yarattığı için bir türlü deneyememiştim.
Şimdi ise sürümleri XP ye göre ayarladığım için bunu başarabildim.
Sizler yeni versiyon windows kullanıyorsanız sadece sürücüleri güncelle demeniz yeterlidir.
Aşağıdaki resimlerde göreceğiniz gibi XP için ESP kütüphanesi 2.5.0 kullanabildim. Yüksek versiyonlarda PTYHON hatası veriyor. 

Öncelikle anlatmak istediğim konu Arduino kartımızın nasıl FT232RL gibi USB seri çevirici olarak kullanılabileceğidir.

Bunun için yapmanız gereken ilk hareket, Arduino kartının RESET ucunu GND ucuna bağlamanızdır. Bu bağlantı Arduino kartındaki mikrokontrol entegresini devre dışı bırakarak USB seri çevirici entegresinin uçlarına direkt ulaşmanızı sağlar.

Burada bir sorun sizi bekliyor olacaktır. Kartın üzerinde Tx yazan yer ve Rx yazan yer  aslında, USB seri çevirici kullanırken TERS olarak kullanılması gerekir. Bunu  nedenini ise aşağıdaki resimde Kırmızı ve Mavi çizgileri takip ederek görebilirsiniz. USB seri çevirici entegrenin Tx ucunu sona kadar takip ettiğinizde, entegreye uğradığını ve sonra çıkışa gittiğini göreceksiniz. Bilgiler normal çalışmada, Entegrenin RX girişine gittiği için Entegrenin Rx ucuna göre pimlere yazılmıştır. Fakat USB seri çeviriciden gelen uç Tx ucudur. Şayet mikrokontrol entegresini RESET bağlantısıyla etkisiz hale getirirseniz, Rx yazılan yeri Tx ucu olarak kullanırsınız. Detaylı bilgi için aşağıdaki resimlere dikkat edin.  

Normalde arduinoya yükleme yaparken, şayet Tx ve Rx uçlarında bir devre bağlıysa, yükleme hatası verir. Sebebi ise entegrenin uçlarıyla, ch340 usb seri çevirici entegresinin uçlarının, devredeki bağlantılarla çakışmasıdır. Bu durumda Tx ve Rx uçlarındaki bağlantıyı söküp yükleme yaparız ve başarılı şekilde yüklendikten sonra Bu uçların devre bağlantısını yaparız. 


Buraya kadar Arduino kartlarının nasıl USB / SERİ çevirici olarak kullandığımızı gördük. Şimdi ise Bu bağlantıyı kullanarak ESP8266-01 modülünü nasıl programlayabiliriz bunu göreceğiz.
Ben zaten AT komutları ile ESP kullanıyorum diyenler için küçük bir açıklama. 
Bu şekilde programlanan ESP8266-01 pcbleri programlandıktan sonra Arduinoya ihtiyacı olmadan kendi başına çalışırlar. Aynı Nodemcu program yüklenmiş ESP8266-01 pcbler gibi çalışır. AT komutlarına cevap vermezler.
Bundan dolayı şayet ESP AT komutlarını kullanmak isterseniz yeniden içerisine SDK programını yüklemeniz gerek. ( Bu dikkatli vereceğiniz bir karar. Fakat sorun olacak bir karar değil. ESP8266-01 modülünüzü, tekrar ilk alındığı haline getirebilirsiniz.
SDK programı yüklemek için bu linkten yardım alabilirsiniz.

ESP modülünü programlarken, Arduino İDE programında  Dosya menüsünde Tercihler kısmını seçerek ESP kartını kullanacağımızı bildirmek için aşağıdaki gibi kartımızı buraya yazmamız gerek.
Yazılması gereken satır : 
http://arduino.esp8266.com/stable/package_esp8266com_index.json

Bu satırı yazdıktan sonra, Araçlar / Kart seçimine gidip KART YÖNETİCİSİNİ seçmeniz gerek, yeni kartların kütüphanelerinin yüklenmesini sağlamalıyız. Aşağıdaki ekrandaki gibi XP için ben 2.5.0 olan versiyonu yükledim. Sizler yeni versiyon windows kullanıyorsanız son versiyonu seçip yükleyebilirsiniz.

Daha sonra ise Kart seçimini yine Araçlar / KART kısmından Generic ESP8266 Module’ü seçmeniz gerekir. Bunu da seçtikten sonra KART AYARLARINDA değişiklik yapmanız gerek. Bunun Flash mode ve RESET method kısmı önemli bunlar haberleşme ile ilgili. Resimdeki gibi değiştirmeniz gerekir.


ESP modülün hafıza kapasitesi nasıl bulunacak. Bu kısımda size yardımcı olacak bir program var. check_flash_config  Bu program ile kartınızın kapasitesini görebilirsiniz. Program kart ile haberleşerek gerekli bilgileri alır ve size gösterir. Normalde siyah pcb li ESP8266-01 modülü kullanıyorsanız 1Mbyte olarak seçebilirsiniz. Ne yazarsanız yazın bu programı kullandığınızda sizin doğru veya yanlış seçim yaptığınızı gösteriyor. Ayrıca seçmeniz gereken kısmı da size gösteriyor. SPIFFS ile hafıza kısmı ayrılıyor. Bu kısım biraz daha ilerlediğinizde gerekli olabilecektir. Çünkü ESP modülünüzde bulunan spi hafıza entegresinde dosya sistemi için bir yer ayrılmaktadır. Bu dosya sistemi ileride webserver gibi programlar yaparken lazım olacaktır. Mesela HTML dosyasını basit olarak program içerisine yazıyoruz. Bu şekilde hafızayı tüketmiş oluyoruz. Bunu yapmak yerine spi dosya sistemini kullanarak html sayfalarımızı dosya olarak oraya koyarız ve sadece program içerisinden çağırırız. Bu şekilde programlama hafızamız dolmayacaktır.
SPIFFS ( SPI FLASH FILE SYSTEM : SPI flash hafızada tutulan dosya sistemi )
Bu kısmı şimdilik benim seçtiğim gibi NO SPIFFS olarak seçebilirsiniz.
Buradaki linkten ayrıntılı bilgi alabilirsiniz.
https://tttapa.github.io/ESP8266/Chap11%20-%20SPIFFS.html

Buraya kadar her şeyi yaptıysanız check_flash_config  Programını IDE ye yükleyip ESP ye yollayabilirsiniz. Program çalıştığında seri monitörde gerekli bilgileri görebilirsiniz.
Düzeltmeleri yapıp tekrar kontrol edin. Artık sizin parametreleriniz bunlardır. Bir kopyasını alın derim.

/*
  ESP8266 CheckFlashConfig by Markus Sattler
  This sketch tests if the EEPROM settings of the IDE match to the Hardware
*/

void setup(void) {
  Serial.begin(115200);
}

void loop() {

  uint32_t realSize = ESP.getFlashChipRealSize();
  uint32_t ideSize = ESP.getFlashChipSize();
  FlashMode_t ideMode = ESP.getFlashChipMode();

  Serial.printf("Flash real id:   %08X\n", ESP.getFlashChipId());
  Serial.printf("Flash real size: %u bytes\n\n", realSize);

  Serial.printf("Flash ide  size: %u bytes\n", ideSize);
  Serial.printf("Flash ide speed: %u Hz\n", ESP.getFlashChipSpeed());
  Serial.printf("Flash ide mode:  %s\n", (ideMode == FM_QIO ? "QIO" : ideMode == FM_QOUT ? "QOUT" : ideMode == FM_DIO ? "DIO" : ideMode == FM_DOUT ? "DOUT" : "UNKNOWN"));

  if (ideSize != realSize) {
    Serial.println("Flash Chip configuration wrong!\n");
  } else {
    Serial.println("Flash Chip configuration ok.\n");
  }

  delay(5000);
}

 

Bu programdan sonra artık meşhur blink programını yükleyebiliriz. Tabii ki bu program arduino ledine göre yazıldığından ve ESP-01 modülünün böyle bir led’i olmadığından LED BUILTIN komutunu port numarasına göre değiştirmeniz gerekir. Benim modülde çalışabilecek tek led seri haberleşme ledidir. Bu da gpio -1 e bağlı olduğundan buraya eklediğim program seri port ledinin istediğimiz sürede yanıp sönmesini sağlayacaktır.
Programda Seri port satırları iptal edilmiştir. Çünkü benim modülde seri port ledinin yanıp sönmesi gerekiyordu. Seri port satırlarını açmış olduğumda çakışma söz konusu oluyordu. Sizin modülünüzde başka bir led varsa programınızı ona göre ayarlarsanız. Siz bu satırları açarsanız seri monitörde Ledin durumuyla senkronize olarak LED ON ve LED OFF kelimelerini göreceksiniz.

/*
 ESP8266 Blink by Simon Peter
 Blink the blue LED on the ESP-01 module
 This example code is in the public domain
 
 The blue LED on the ESP-01 module is connected to GPIO1 
 (which is also the TXD pin; so we cannot use Serial.print() at the same time)
 
 Note that this sketch uses LED_BUILTIN to find the pin with the internal LED
*/

void setup() {
  pinMode(1, OUTPUT);     // Initialize the LED_BUILTIN pin as an output
  //Serial.begin(115200);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(1, LOW);   // Turn the LED on (Note that LOW is the voltage level
                                    // but actually the LED is on; this is because 
                                    // it is acive low on the ESP-01)
  delay(3000);                      // Wait for a second
  //Serial.println("led off");
  delay(250);                      // Wait for one-quarter of second

  digitalWrite(1, HIGH);  // Turn the LED off by making the voltage HIGH
  delay(3000);                      // Wait for two seconds (to demonstrate the active low LED)
  //Serial.println("led on");
  delay(250);                      // Wait for one-quarter of second
}

 

Bu programları çalıştırarak denemeye başlamış olacaksınız. Burada şunu da söylemeliyim. Şayet herşey doğru bir şekilde gittiyse IDE ekranında programlarken bu şekilde bir görüntü çıkmalı. Buradaki yüzdeler programın ne kadarı ESP ye yollandı onu gösterir. Şayet bunu göremeden takılıyorsa hata vermiş olabilir ya da başka bir sorun olabilir. Şunu da söylemeliyim ki, Arduinoya göndermek kadar hızlı olmayacak. Biraz beklemeniz gerek hemen takıldığını düşünmeyin. 

Buraya kadar da arduino ile ESP programlamaya baktık. Peki ESP kartımızı nasıl arduinoya bağlayacağız. Bunu da resimlerde gördüğünüz gibi USB seri çevirici olarak bağlamanız gerek.
Arduino            ESP
3V3                  3V3 pim
GND                 GND pim
Tx ( dijital pin 0)  Rx pim
Rx (dijital pin 1)  Tx Pim.

Bu şekilde bağlamanız yeter. Fakat ESP nin kendi içinde de bağlamanız gereken uçlar var. Bunu da aşağıdaki şemadan görebilirsiniz. Fotoğraflarda gördüğünüz PCB nin devre şeması ve bağlantı şeması aşağıdadır.

Yukarıdaki resimde yeşil breadboard üzerinde 3.3V seviye dönüşümü için dirençler vardır. Bunun sebebi Arduino Tx çıkışı 5V tur. Bunun ESP ye direkt uygulanması sorunlara yol açabileceğinden Tx sinyalinin 3.3V seviyesine düşürülmesi gerekir. Aşağıda ise bu kısmın şeması bulunmaktadır. 2K yerine standart olan 2K2 kullanılabilir. 5V yazan yer Tx pimine bağlanacaktır. 3.3V yazan yer ise ESP modülün Rx pimine bağlanacaktır.

Şayet arduino ide kullanacaksanız ve Arduinonuzu kullanmak yerine FT232RL usb seri çeviriciyi kullanmak isterseniz yine arduino yerine bu modülü bağlayabilirsiniz. Tek fark edecek kısım Bendeki FT232RL modülü 3.3V jumper ile seçildiğinden aradaki seviye dönüşüm dirençlerini koymama gerek yok.
Aşağıda bağlantı şeklini görebilirsiniz.

Fotoğraflarda gördüğünüz pcb bu şekildedir. 

Yukarıdaki devrenin benim devremden farkı, gpio-0 ve GPIO-2 ye 10K PULL UP direnç bağlanmıştır. 5V powerbank tan beslediğim için 3V3 reg. entegresi kullanılmıştır.
Bunun dışında yukarıdaki ilk resimde PC GND diye bir ifade var. Bu aslında normal GND ucudur. Fakat bazen devreden PC ye bir akım akışı olabiliyor. Bunu engellemek için bir diyot ile normal GND ye bağlanmıştır. Bu hiç de akla yatkın olmasa da zaman içerisinde sinyallerde sorunlar yaşadığım için koydum. Kullanmayabilirsiniz ya da güvenli olsun diye kullanabilirsiniz. Şunu da unutmamak gerekir. Arduino ile bu pcb yi kullandığımda diyot üzerinde kalan gerilim sorun yarattığından, Arduino ile kullanıldığında normal GND uçlarını kullanmak zorunda kaldım. FT232RL kartında sorunsuz olarak PCGND ucu çalışmaktadır.

PCB de seviye dönüşüm yapılmadığından Arduino ile kullanıldığında Arduinonun TX ucundan çıkan sinyali 3V3 seviye dönüşümünden geçirmeniz gerekir. FT232RL modülü kullandığımdan ve 3V3 pcb üzerinde jumper ile ayrıldığından sorun teşkil etmedi.

Bunların dışında dikkat etmemiz gereken bağlantı ise arduino veya usb seri çevirici modülden alınan 3V3 gerilimdir. 3V3 gerilimin, ESP nin akımını karşılayamadığı ve bir süre sonra ESP nin RESET durumuna geçtiği görülmektedir. . Bunu engellemek için,  5V powerbank kullandım. Tabii ki GND si PCB GND si ile birleştirildiğinden sorun yaratmadı.

Son şemada NORMAL / FLASH anahtarı vardır. Arduinodan program yüklerken bu anahtar FLASH kısmında olacak. Program yükleme bitince bu anahtar açılıp NORMAL kısma alınacak. Her yüklemede bu işlem yapılacaktır. İlk yüklediğinizde FLASH konumundayken BLINK programının çalıştığını göreceksiniz. Bu ancak enerji kesilip tekrar verilesiye kadar geçerlidir. İlk enerji verdiğinizde FLASH konumundaysa sizden yükleme bekliyor demektir. Bundan dolayı da BLINK programını çalıştırmayacaktır. Unuttuğunuzda, Normal konuma almanız da yetmeyebilir. Normal konuma alıp RESET’e basmanız ya da enerjiyi kesmeniz gerekebilir.  

Her yüklemeden önce RESET butonuna bir kez basmanız iyi olacaktır. Bu konuda sorun yaşamadım ama bazı arkadaşlar yaşayabilir.

Tüm dosyalara buradan ulaşabilirsiniz. 

 

 

 

 

 

1 Comment

Kudret Uzuner için bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak.