NodeMCU ‘yu Arduino IDE ile Programlamak

Bu yazıda LoLin klonu bir NodeMCU‘ya (ESP-12E) ESP8266 bellenimi (NodeMCU bellenimi değil) yüklenerek Arduino IDE ile nasıl programlanacağına yer vereceğim. Kullanacağımız kart “new NodeMCU v3” etiketli kart. İşlemlerimiz NodeMCU’ya bootloader yazmak ve Arduino IDE’yi NodeMCU kartını programlamak için hazırlama adımlarından oluşacak.

Bir NodeMCU kartı, içinde yüklü olarak NodeMCU bellenimi ile birlikte gelir. NodeMCU bellenimi, Lua programlama dilini temel alan açık kaynaklı kodlu bir bellenim (firmware) yazılımıdır. Sadeliği ve kullanım kolaylığı ile bilinir ve yeni başlayanlar ile hızlı bir şekilde prototip projeleri yapmak isteyenler için popüler bir seçimdir. NodeMCU bellenimi Lua dilinde yazılmış program kodlarının ESP üzerinde çalıştırılmasını sağlar. Lua dilinde yazılan program kodları Node.JS diline çok benzer. NodeMCU programları hem asenkron hem de olay temelli bir yapıdadırlar (örnek kodlar için web sitesini incelyemenizi tavsiye ederim). Lua dili ve dolayısıyla NodeMCU tarafından sağlanan bu imkan diğer hiçbir MCU tabanlı geliştirme kartlarında yoktur. Bu nokta NodeMCU bellenimini diğerlerinden ayıran en büyük özelliğidir.

1 – NodeMCU’ya ESP8266 Bootloader’ını yüklemek

NodeMCU ana kartının üzerinde Espressif firmasının ESP-12E adlı bir yavru kartı yer almakta. ESP-12E, ESP8266EX SoC çipini kullanmakta olan bir Wi-Fi kartı. Aşağıdaki adımları yerine getirdiğinizde NodeMCU’ya yeni bir bootloader (açılış yükleyicisi) ile birlikte AT komutları ile çalışan bir servis bellenimi yüklenecektir. İşlemin sonunda yüklemenin başarılı şekilde gerçekleşip gerçekleşmediğini anlamak için birkaç AT komutu ile NodeMCU’yu sorgulayacağız. Açılış yükleyicisinin ne olduğunu ve görevini daha önce yazdığım şu yazıdan okuyabilirsiniz.

ADIM 1: Bellenimi yazmak için buradaki sayfadan “Flash Download Tools” ‘u indirin.

ADIM 2: Buraya tıklayarak “ESP8266_NONOS_SDK_V1.4.0” dosyasını bilgisayarınıza indirerek arşivi genişletin. Arşiv içindeki aşağıdaki dosyalaları ESP8266 flaş belleğinin ilgili ofset adreslerine yazdıracağız:

Dosya adıBaşlangıç Ofseti
bin\boot_v1.4.bin0x00000
bin\at\512+512\user1.1024.new.2.bin0x01000
bin\at\512+512\user2.1024.new.2.bin0x81000
bin\blank.bin0x3FB000
bin\esp_init_data_default.bin0x3FC000
bin\blank.bin0x3FE000

Not1: ESP8266_NONOS_SDK_V1.4.0 eski bir bellenim ve Espressif’in sitesinde artık yayınlamıyor. Halihazırda yayınlanan NonOS bellenimleri sayfanın başındaki görselde gözüken klon NodeMCU da çalışmıyor. Çalışmamasının nedenini ESP-12E’de kullanılmış olan çipin muhtemelen kötü bir klon olmasından kaynaklandığını düşünüyorum. Çinliler popüler çiplerin klonlarını üretiyorlar.

Not2: Tabloda adı geçen bellenim dosyaları 6 farklı oturumda ESP’nin flaş belleğine yazılacak. Bu nedenle dosyaları ofset adreslerine göre küçükten büyüğe doğru sıralamak oldukça önemli. Aksi takdirde diğer oturumlar mevcut bellenimindeki dosyaların üzerine yazarak bozulmaları neden olacaktır.

ADIM 3:NodeMCU’yu kaliteli bir kablo ile bilgisayara bağlayın. NodeMCU’yu bellenim yükleme modunda başlatmak için NodeMCU üzerindeki Flash butonuna basılı tutarken, Reset butonuna basıp bırakın. Ardından Flash butonunu da bırakabilirsiniz. Böylece ESP çipi bellenim yükleme kipinde başlayarak yeni bellenimin yüklenmesini bekleyecektir.

ADIM 4: Flash Download Tools arşivini genişleterek içindeki flash_download_tool_x.x.x.exe dosyasını çalıştırın. İkinci adımda belirtilen dosyaları (1) aşağıdaki görseldeki gibi flash_download_tool programı üzerinden göstererek ofset adreslerini (2) ayarlarlayın. İşaret kutularını seçmeyi unutmayın (3). COM listesinden NodeMCU’nun bilgisayara bağlı olduğu seri port numarasını seçin (4). Port numarasını bilgisayarınızın aygıt yöneticisinden öğrenebilirsiniz. Bellenim yüklemeyi başlatmak için Start (5) düğmesine tıklatın.

Not: Yükleme hatası almamak için Arduino IDE’nin ilgili COM portunu kullanmadığından emin olmak için Seri konsol açıksa kapatın. Kablonuzun kalitesine göre yükleme hızını (BAUD) artırabilirsiniz.

ADIM 5: Yükleme işlemi tamamlandıktan sonra Reset düğmesine basarak NodeMCU’yu yeni bellenimi ile başlatın. Bellenimin doğru şekilde yüklenip yüklenmediğini anlamak için Arduino IDE’nin seri konsolunu açarak AT+GMR komutu gönderin. Bu komut hali hazırda ESP’nin flaş belleğinin user_space‘inde çalışan NonOS AT programının (bellenim) sürüm bilgilerini aşağıdaki görselde gözüktüğü gibi döndürecektir.

2 – NodeMCU’yu Arduino ile programlamak

Orjinal NodeMCU bellenimi LUA programlama dili kullanılarak programlanabiliyor. Önceki adımda yüklediğimiz bellenim ise Espressif firmasının ESP8266’lar için ürettiği ve AT komutları ile kontrol edilebilen bir servis programı. Birazdan Arduino IDE ile kendi kodumuzu attığımızda ESP flaş belleğinin user_space’ine yazmış olacağımızdan AT servis programı silinecek ve yerine kendi programımız yerleşecek. Eski bellenimden ise geriye işimize yarayan tek şey olan boot_v1.4.bin içindeki açılış yükleyecisi olacak.

Aşağıdaki adımları sırasıyla gerçekleştirerek NodeMCU’yu Arduino dili ile programlamak için hazır hale getirelim.

ADIM 1: Güncel bir Arduino IDE’yi indirerek çalıştırın ve “File > Preferences…” yolunu takip ederek “Additional boards manager URLSs” kutusuna “http://arduino.esp8266.com/stable/package_esp8266com_index.json” adresini yapıştırın (tırnaklar hariç).

ADIM 2: “Tools > Board > Board Managers…” yolunu takip ederek arama kutusuna esp8266 yazın ve aşağıdaki ekran görüntüsünde yer aldığı gibi “Version 2.5.0” sürümünü yükleyin. Güncel sürümler bu klon kart ile çalışmamakta.

ADIM 3: Arduino IDE’nin “Tools > Board > esp8266” menüsünden “NodeMCU 1.0 (ESP-12E Module)” isimli kartı seçin. Hızlı yükleme için “Tools > Upload Speed” menü seçeneğinde yüksek bir hız seçebilirsiniz.

ADIM 4: Denemek için “File > Examples > ESP8266WiFi” menüsünden “WiFiAccessPoint” programını seçin. Modülün port numarasını “Tools > Port” menüsünü takip ederek seçin ve programı yükleyin.

Bu program NodeMCU’yu bir kablosuz erişim noktasına dönüştürecek ve üzerinde bir web sunucusu başlatacak. Yükleme işleminin ardından Seri monitör ekranında web sunucunun başladığını ve IP adresini görüntüleyen mesajı aşağıdaki görseldeki gibi görebilirsiniz:

Daha sonra telefonunuzun WiFi ağları kısmına giderek “ESPap” adında bir kablosuz erişim noktasının gözüktüğünü teyit edin. Eğer gözüküyorsa “thereisnospoon” şifresi ile bağlanın. Ardından bir web tarayıcı açarak “http://192.168.4.1” sayfasını ziyaret edin. Aşağıdaki gibi bir web sayfası sizi karşılayacak. Bundan sonra Examples altındaki örnekleri inceleyerek ve kendi kodlarınızı yazarak çalışmaya devam edebilirsiniz.

NonOS At bellenimi hakkında birkaç kelam

Bellenim yükleme sırasında ESP’nin user space adı verilen bellek alanına yüklediğimiz program AT komutları ile birçok görevi yerine getirebilen çok işlevli bir servis programıdır. Servis programının desteklediği komutları ve işlevleri pdf dosyasından inceleyebilirsiniz. Arduino ile yazdığınız bir programı yüklediğinizde user space’de yer alan bu programın doğal olarak yok olduğunu farketmişsinizdir. Peki bu program bu haliyle hangi işler için kullanılabilir? ESP’ye kendi programımızı yazmasak da bunu kullansak nasıl olur? Yanıtlamaya çalışayım:

Espressif’in ESP8266 ürün sayfasına gittiğinizde aşağıdaki gibi bir görsel sizi karşılıyor. Görsel’de yazan şu: “Kablosuza geçmeyi mi planlıyorsunuz? AT komut ürün yazılımı çözümümüzü kullanarak kablosuz bağlantı özelliklerini ürünlerinize kolay ve rahat bir şekilde entegre edin!

Yüklediğimiz bellenim, içerdiği Wi-Fi manager ile AP (Access Point) veya Station kiplerinde (softAP ile aynı anda iki kipte de çalışabilir) çalışarak DHCP veya statik IP yapılandırması ile ağ yapılandırmasını alır. TCP/UDP bağlantıları açarak veri transferi yapabilir. Taşıma katmanı güvenliğini (TLS) SSL ile sağlayabilir. Yani kısaca ikinci bir mikrodenetleyici ile kullanılarak ağ bağlantısı görevlerini yerine getiren bir internet/ağ modülü olarak çalışabilir.

Örneğin bu bellenime UART üzerinden;

AT+CWMODE_DEF=1 komutu gönderildiğinde kablosuz istemci (Station) modunda başlar.

AT+CWJAP_CUR=EvAgim,cokgizli007 komutu ile de EvAgim adlı kablosuz ağa (SSID) cokgizli007 parolası ile bağlanabilir. Görülebileceği gibi sadece adet AT komutu göndererek ESP’nin bir kablosuz ağa bağlanmasını ve IP yapılandırması almasını sağladık.

AT+CIPSTART=TCP,192.168.0.1,80,60 komutu ile de 192.168.0.1 adresli bilgisayarın 80. portuna 60sn süresince açık kalacak bir TCP bağlantısı açabiliriz.

AT+CIPSEND=9 komutu ile açılan TCP bağlantısı üzerinden 9 byte’lık bir veri göndereceğimizi söyledikten hemen sonra UART’a ozgurkoca verisini yazarak 192.168.0.1 adresli bilgisayarın 80. portunda açılan sokete bu veriyi gönderebiliriz.

Bellenimin desteklediği diğer komutlar için AT komut kümesinin detaylı açıklandığı şu kılavuza bakabilirsiniz. AT komutlarının nasıl kullanılacağını gösteren örnekler (examples) için de bu kılavuza bakabilirsiniz.

Flaş Belleğin Offset Adresleri Hakkında

Ofset adreslerini neye göre belirliyoruz bunu yanıtlamaya çalışalım. Bu yazıda bellenimin makine koduna çevrilmiş hallerini kullandık ve bellenimi oluşturan parçaların ESP8266’nın SDK‘sında tavsiye edildiği şekilde derlendiğini varsaydık. Aşağıda ilgili SDK da dökümante edilmiş adresler yer alıyor.

İlk bölümün 2. adımındaki dosyalara göz gezdirecek olursak açılışta ilk çalışması gereken kod parçası olan boot_bin’in flaş hafızanın ilk konumun olan 0x0000’a yerleşmesi gerekiyor. Boot_bin’in kaynak kodlarında belirtildiği üzere (ki bu programcı tarafından değiştirilebilir ama standart olanın dışına çıkılmış olunur) 0x3FC000 adresinden başlayan 128 byte’lık kısımda ön yükleme konfigürasyonu (initilization data) yer alıyor. Bu konfigürasyon ESP yongasının bileşenlerinin başlangıç yapılandırmasını içermekte. Boot_bin açılışı yaptıktan sonra çalışmayı user_space’de yer alan user1.bin ve user2.bin programlarına devrediyor. SDK’da user space programlarının 0x01000 ve 0x8100 ofset adreslerinden başladığı belirtilmiş. 4MB (4096KB) boyuta sahip 32MBit’lik bir flaş belleğe sahip olan ESP yongamızın dosya sistemini 512KB’lık iki bölüme ayırarak kullanmayı tercih ettik. 1MB’lık iki bölüme ayırmayı tercih etseydik “at/1024+1024” dizini içindeki servis programlarını ve ilgili ofsetlerini (user2.bin için 0x101000 ofseti) kullanacaktık. 512+512’lik bölümlemeyi tercih ettiğimiz için user2.bin için karşılık gelen 0x8100 ofsetini kullandık.

user1.bin ve user2.bin içinde kayıtlı bu programlar UART’tan gelen AT komutlarının dinleyerek, komutların emrettiği görevleri yerine getiren ve sonuçları da yine UART üzerinden döndüren sonsuz döngü içinde çalışan esas iş yapan programın parçaları. Tabi biz Arduino IDE kullanarak yüklediğimiz program neticesinde bu servis programını yok etmiş oluyoruz. Ama 0x0000’da kayıtlı açılış yükleyicimiz zarar görmüyor ve ESP’nin enerjilendiğinde düzgünce başlamasını sağlıyor.

Elginizi çekebilecek bir yazı:
Avrdude ile Arduino Klonlamak

Yazar: Özgür Koca

Yazar - Tankado.com

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.