ESP8266 IoT Mikrodenetleyiciler ve Geliştirme Ortamı Kurulumu
Merhaba arkadaşlar ben Murat. Bu yazımızda artık günümüzde kullanımı çoğalan IEEE 802.11 Wi-Fi modülleri ele alacağız. Bu modüller ARM veya RISC tabanlı mimarisine sahip 32 bit mikrodenetleyici bulunduran ve kendi içerisinde bulunan TCP/IP stackleri sayesinde Wi-Fi üzerinden internet bağlantısı kurabilen modüllerdir.
IoT, Nesnelerin İnterneti anlamına gelmektedir ve IoT elektronik sistemlerin bir şekilde internete çıkarak birbiriyle iletişim kurduğu bir düzendir. Günümüzde her akıllı cihaz neredeyse internete çıkabilmektedir. İşte burda bu akıllı cihazların akıllı olmasının bir nedeni de internete bağlanabilmeleridir. Bu cihazların internete çıkabilmeleri sayesinde de bu akıllı cihazlar birbirleri ile konuşabilmekte ve birbirlerini kontrol edebilmektedir.
Örnek verir isek yakın bir zamanda kendi arabanızla evinize geldiğinizde, akıllı telefonunuz GPS koordinatına göre eve geldiğinizi anlayıp Makineler Arası Haberleşme Protokolü olan MQTT ile garaj kapınızı kontrol eden kontrol kartına veri yollayıp garaj kapısını açtırabilecektir.
Tüm bu akıllı cihazlara internet bağlantısı özelliğini kazandıran cihazlar bu modüllerdir.Bu modüller şu anda kullandığımız Android veya IOS akıllı telefonlarımızın içinde de bulunmaktadır. Örneğin aşağıdaki Wi-Fi modülü olan MediaTek MT7601 Wi-Fi entegresi ucuz olması nedeniyle neredeyse piyasadaki tabletlerin %55-%60’ında bulunmaktadır.
Bu modüllerin ortak özelliği ise düşük fiyatları ile elektronik projelerin bir şekilde dışarıya açılmasını sağlamaktadır. Bu modüller bağlı bulunduğu sisteme ait verileri, Wi-Fi vasıtası ile TCP/UDP gibi haberleşme protokollerini kullandırarak dış dünyaya açmaktadır. Aynı şekilde de dışarıdan komut veya veri almaya da yardımcı olmaktadır.
Bu modüller arasında ucuzluğu ve kolay programlanabilirliği nedeniyle en fazla kullanılan Şangay merkezli Espressif adlı firmanın ESP serisi IoT modülleridir. Aynı şekilde TI ve Realtek firmalarının aynı işi yapan daha güçlü Wi-Fi modülleri mevcuttur. Lakin fiyat/performans bakımından ESP8266 Modüller piyasada en yaygındır.
Aynı şekilde bu modüller gömülü linux sistemlerde, bu modülleri kullandırabilecek driverlerin güncel Linux çekirdeğinde bulunması nedeniyle kullanımı yaygındır. Bu sayede kullanıcı Wi-Fi entegresi için herhangi fazladan kod yazmadan, bu entegreyi SPI veya UART üzerinden sisteme bağlatıp bu modülü device olarak göstererek gömülü linux sistemi internete çıkartabilmektedir. Örneğin aşağıda Arietta marka gömülü linux platformuna takılı olan bir Wi-Fi Modül görülmektedir.
Aşağıdaki bölümde ESP-12E modülü tanıtılıcaktır. ESP-12E modülü şu ana kadar Espressif firmasının çıkartmış olduğu en kararlı IoT modüldür. Özellikleri aşağıda sıralanmaktadır.
Model:ESP8266-12
- 802.11 b/g/n
- Wi-Fi Direct (P2P), soft-AP
- Integrated TCP/IP protocol stack
- Integrated TR switch, balun, LNA, power amplifier and matching network
- Integrated PLLs, regulators, DCXO and power management units
- +19.5dBm output power in 802.11b mode
- Power down leakage current of <10uA
- Integrated low power 32-bit CPU could be used as application processor
- SDIO 1.1/2.0, SPI, UART
- STBC, 1×1 MIMO, 2×1 MIMO
- A-MPDU & A-MSDU aggregation & 0.4μs guard interval
- Wake up and transmit packets in < 2ms
- Standby power consumption of < 1.0mW (DTIM3)
- Identical to adafruit item 2491
ESP8266 TCP/IP yığınına sahip, düşük maliyetli bir Mikro Kontrol Ünitesidir (MCU). Şanghay merkezli Espressif Systems firması tarafından üretilmektedir.
Üçüncü parti AI-Thinker firması tarafından Ağustos 2014 yılında üretilen ESP-01 modülü batılı üreticilerin dikkatini ilk defa çekmiştir. Bu modül sayesinde Wi-Fi şebekesine bağlanarak Hayes stili komutlar ile TCP/IP bağlantılar gerçekleştirilebilmektedir. Modülün yayınlandığı tarihte çip ile ilgili neredeyse hiç İngilizce kaynak bulunmuyordu. Çok düşük fiyatlı olması, az miktarda dış komponent ile düşük boyutlu cihazların üretilebilmesi geliştiricilerin çip, üzerindeki yazılım ve hatta Çince dökümanları üzerinde çalışmalarını ateşlemiştir.
Aşağıdaki video ile ESP8266’nın bir demo örneğini görebilirsiniz.
ESP8285 bir adet ESP8266 ve 1 MB lık dahili flaş bellekten oluşan tek çip ile Wi-Fi bağlantısı oluşturmaya olanak sağlamaktadır. ESP8266 modülünün gelişmiş versiyonu ESP32 modülüdür.
ESP12E modül kendi üzerindeki SPI Flash sayesinde 4MB Flash barındırmaktadır. Burda 3 MB program dosyası 1 MB ise dosya sistemi olarak kullanılabilir veya bunun tam terside mümkündür. Uzaktan yazılımı güncelleştirilebilir. ESP’nin kendi RTOS veya NON-OS SDK’ları vasıtası ile C ile de programlanabileceği gibi, Arduino desteği ile C++ ve LUA gibi dillerle de programlanabilir. Her 3 dilde ESP üzerinde Multi-Threading yapmaya olanak sağlamaktadır.
Bu yazıda ESP8266 geliştirme kartı olarak NodeMCU V1.0 şeçilmiştir ve bu modülü programlamak için Visual Studio üzerinde Visual Micro eklentisi kullanılıcaktır. Öncelikle Arduino programı, arduino.cc sitesinden indirilir, kurulur ve aşağıda Arduino çekirdeği ile bu sistemi programlayabilmek için gereken platform dosyaları indirilir.
Arduino.cc sitesinde işletim sisteminize uygun Arduino core bileşenlerinizi sisteminize yükleyin ve kurun. Kurulum aşamasında birden fazla driver yüklemek için sisteminiz izin isteyebilir. Bu izinleri de verdikten sonra kurulum sonlandırılır.
Normalde Arduino IDE’si kod tamamlamaya izin vermemektedir. Buda bizim aslında kör gibi kod yazmamıza sebeb olur ve aynı şekilde GDB debug methodlarına izin vermez. Eğer profesyonel bir programlama yapılacak ise profesyonel bir geliştirme programı kullanılmalıdır. Ben 2015 yılından beri ESP serisi Wi-Fi modülleri Visual Studio ile programlamaktayım. Bu programlamayı bir eklenti vasıtası ile yapmaktayım. Bu eklenti Visual Micro’dur.
Visual Micro, 100 üzerinde geliştirme kartını ve 1000 üzerinde kütüphaneyi desteklemektedir. Bu eklenti ile profesyonel bir şekilde Arduino AVR bile programlanabilir. Biz bu eklentiyi ESP8266 programlamak için kullanacağız. Eklenti bu linkten indirilir ve kurulur. Tabi bu eklentinin çalışması için Visual Studio’nun C++ desteği ile birlikte kurulması lazım. Eğer değilse microsoft sitesinden tüm kuralları kabul ederek Visual Studio’nun community edition’u ile başlayabilirsiniz. Ardından Visual Micro’yu indirip kurun.
ESP8266’yı Visual Studio üzerinde programlayabilmek için ESP Arduino Çekirdeğinin indirilmesi gerekmektedir. Bu ise aşağıdaki adımlarda anlatılmaktadır. Arduino IDE açılır. Bu programda bu kütüphaneyi ve desteklenen geliştirme kartlarının bilgileri indirilecektir.
Dosya->Tercihler kısmına tıklanır. Bu kısımda ESP8266 Arduino uyumlu kütüphanenin indririlebilmesi için link girilicektir.
Ekstra kartların indirilebilmesi için aşağıda belirtilen kutucuğa bu çekirdek kütüphanelerin github üzerindeki bilgilerinin yer aldığı adres girilir.
http://arduino.esp8266.com/stable/package_esp8266com_index.json
Ardından tamam diyerek bu kutucuk kapatılır.
Ardından ise Arduino programı üzerinden Araçlar>Kart>Kart Yöneticisine tıklanır. Benim sistemimde bu kütüphaneler ve kartlar kurulu olduğu için Nodemcu yüklü. Sizde Kart kısmının altında NodeMCU gözükmeyecektir. Kart Yöneticisine tıklanır.
Açılan pencerede Arduino geliştirme kartları için yeni bir güncelleme olup olmadığını denetler. Aynı şekilde yeni bir geliştirme platformu eklendi ise onu bu sisteme entegre etmek için yardımcı olur. Bu listenin en sonunda ESP8266 by ESP Community yazan sekme bulunur ve en son geliştirme kütüphaneleri sisteme indirilir. İndirildikten sonra sisteminiz ESP8266 programlamaya hazırdır.
Ardından bu Arduino IDE’si kapatılır ve Visual Studio Açılır. Visual Studio’nun Visual C++ desteği ile kurulması gerekmektedir. Eğer kurulmadı ise Visual Studio Yöneticisinden tekrardan yüklemelisiniz.
Visual Studio açıldıktan sonra yeni bir proje oluşturulur. Eğer Visual Micro doğru bir şekilde kuruldu ise Visual C++ sekmesinde Arduino ile ilgili öğeler gözükecektir.
Visual C++ kısmından yeni bir Arduino Project şeçilir ve projenin adı, bulunduğu konum gibi ayarlar yapıldıktan sonra OK’a tıklanır.
Ardından ise yeni proje için yeni bir workspace açılacaktır. Bundan sonra geliştirme kartınızı bilgisayara USB kablo ile bağlayın. Driverleriniz yüklenecek.Bu driver USB-Serial çeviricinin sürücüsüdür. Espressif firması ESP mikrodenetleyicilerine kod yüklemeyi kolaylaştırmak için UART üzerinden program yüklenebilmesine olanak sağlayan bootloader önyükleyicisini üretim esnasında ESP modüllere yükler. Bu sayede bilindik JTAG, SWD gibi methodlarla başlangıç düzeyindeki kişiler için zor olan programlama kitlerinden kurtarmaktadır. Aynı şekilde de UART yani serial üzerinden GDB Stub ile debug yapılabilmektedir. NodeMCU geliştirme kartlarında bu işlemi gerçekleştiren driver Ch340 ve CPL21 serisi USB-Serial çeviricilerdir. Bu sürücü alttaki resimde karecik içine alınan bölümdür.USB üzerinden alınan veriler olduğu gibi ESP8266’ya gidecek şekilde sistem tasarlanmıştır. ESP’nin UART pinleri bu driverlerin RX-TX uçlarına çağraz bağlanmıştır. Bu sayede PC üzerinden gelen veriler doğrudan ESP8266’ya gider. Bu hattan programlama ve debug yapılabilmektedir. USB +5V ile çalışmaktadır lakin ESP8266’nın anladığı dil +3.3 Volttur. Bu yüzden bir adet voltaj regulatörüde ESP8266’nın yanında yer almaktadır. +5.0 Volt burdan +3.3 Volta düşürülür ve burdaki enerji direk ESP ve Ch340 driveri besler.
Eğer CH340G driver için hata alırsanız, büyük ihtimal Win7 kullanıyorsunuz veya Win10’da otomatik güncelleştirmeleri kapatmış olabilirsiniz. Win 10 ve Win 8.1 sistemlerde Driver Windows tarafından otomatik indirilir. Win7 kullanıyorsanız çok az bir google araştırması için Win7 Ch340 driverini indirebilirsiniz.
Win 7 CH340 USB-Serial Converter 32 Bit versiyonu indirmek için tıkla.
Win 7 CH340 USB-Serial Converter 64 Bit versiyonu indirmek için tıkla.
Ardından ise bu sürücünün aldığı com port numarası ve kartımız visual micro sistemine tanıtılır.
Aynı şekilde Visual Studio üzerinde vMicro sekmesi üzerinden de İşlemci hızı , Flash boyutu, Kart adı ve compiler ayarları yapılmaktadır. Aşağıdaki ayarların hepsi uygulanır.
Ardından ise sistem ESP8266 programlamaya hazırdır. Örnek bir program ile etraftaki Wi-Fi ağlarını sıralayalım. Bunun için aşağıdaki örnek program yeterli olacaktır.
Aşağıdaki kodlar yazılır ve Start butonu ile ESP8266’ya yüklenir. Visual Micro en son NodeMCU Firmware ile birlikte bütün program dosyalarını hedef ESP’nin ilgili flash bölgelerine otomatik olarak yükleyecektir.
/* * This sketch demonstrates how to scan WiFi networks. * The API is almost the same as with the WiFi Shield library, * the most obvious difference being the different file you need to include: */ #include "ESP8266WiFi.h" void setup() { Serial.begin(115200); // Set WiFi to station mode and disconnect from an AP if it was previously connected WiFi.mode(WIFI_STA); WiFi.disconnect(); delay(100); Serial.println("Setup done"); } void loop() { Serial.println("scan start"); // WiFi.scanNetworks will return the number of networks found int n = WiFi.scanNetworks(); Serial.println("scan done"); if (n == 0) Serial.println("no networks found"); else { Serial.print(n); Serial.println(" networks found"); for (int i = 0; i < n; ++i) { // Print SSID and RSSI for each network found Serial.print(i + 1); Serial.print(": "); Serial.print(WiFi.SSID(i)); Serial.print(" ("); Serial.print(WiFi.RSSI(i)); Serial.print(")"); Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE) ? " " : "*"); delay(10); } } Serial.println(""); // Wait a bit before scanning again delay(5000); }
Sorunsuz derlenilip yüklendiğinde program çıktıları şu şekilde olacaktır.
Bu aşamadan sonra ESP8266 kolaylıkla programlanabilir. Eğer aynı anda debug ta yapmak isterseniz vMicro sekmesinden aşağıdaki ayarlar yapılır ve program tekrar derlenir. Bu sefer VisualMicro bu programın Debug versiyonu karta yükleyecektir.
ve şonuç.
Bu aşamadan sonra isterseniz Arduino’nun hazır ESP fonksiyonları ile isterseniz ESP’nin sunduğu RTOS ile programlamaya devam edebilirsiniz.
Ekstra!!. ESP8266’nın Altium Kütüphanesi ve 3 Boyutlu PCB’sini bu linkte bulabilirsiniz.
Bir sonraki yazıda kablosuz bir ağa bağlanma, TCP server kurulumu ve Multi-Tasking anlatılıcaktır. Kolay Gelsin.
[contact-form][contact-field label=’İsim’ type=’name’ required=’1’/][contact-field label=’E-Posta’ type=’email’ required=’1’/][contact-field label=’Web Sitesi’ type=’url’/][contact-field label=’Yorum’ type=’textarea’ required=’1’/][/contact-form]
Geri bildirim: ESP8266 ile SPI Flash Dosya Sistemi, Multi-Tasking ve TCP Server Kullanımı – Gömülü Yazılım
Arduino IDE yerine neden Visual Studio kullanıyorsunuz ne gibi avantajları var paylaşır mısınız?
Bilgiler için teşekkürler.