ESP8266/ESP32 ile OTA Kullanımı
|Merhaba,
Bu konuda ESP8266′ yı bilgisayara kablo ile bağlamadan Wi-Fi üzerinden nasıl programlayacağımıza değineceğiz. OTA, açılımı Over The Air olan yani havadan yazılım yükleme sağlayan bir yapıdır. Bu Arduino IDE’ si ile programlanabilir ESP8266 vb kartlara yeni gelen bir özellik değil. Arduino IDE’ sine ekleneli bir kaç yıl oldu. Ancak ilk çıktığı zamanlarda kullanmaya çalıştığımda çok verimli sonuçlar elde edememiştim. Geçtiğimiz günlerde ihtiyaç duydum ve tekrar baktığımda oldukça stabil olduğunu gözlemledim. Çok kullanışlı bir özellik olması sebebi ile de projelerinize nasıl entegre edebileceğiniz hakkında bir yazı yazmak istedim. Özellikle ESP modülünüzü sürekli bilgisayara bağlamanız zor olan yada tasarladığınız sistemde sonradan bir değişiklik yapmak istediğiniz durumlarda oldukça kullanışlı bir yöntemdir. Burada anlatılan işlemler ESP8266 ve ESP32′ lerde kullanılabilir.
Flash Ayarları
Konunun başında belirtmek isterim. ESP8266′ ya OTA güncelleme yapmak ESP8266′ nın flash hafızasında yer kaplayacağı için kullandığınız ESP8266′ nın flash hafızasının en az 1MB olması gerekmektedir. Elinizdeki ESP8266′ nın flash hafıza boyutunu kontrol etmek için Arduino IDE’ sinde bulunan örnek yazılımı kullanabilirsiniz. Bu yazılımı yüklerken seçtiğiniz ESP8266 flash ayarı seçeneği doğru ise seri port ekranında “Flash Configuration OK” şeklinde bir ifade çıkacaktır. Yanlış ise doğruyu buluna kadar farklı seçenekleri seçmeniz gerekmektedir. Bu yazılıma Arduino IDE’ sinde kart olarak ESP8266 seçili iken aşağıdaki yoldan ulaşabilirsiniz.
File >> Examples >> ESP8266 >> ChechFlashConfig
Havadan yazılım yükleme için kullanılabilecek farklı yöntemler mevcuttur. Bunlar şu şekilde sıralanabilir.
- Arduino IDE’ si kullanarak
- Visual Code Kullanarak
- Web IDE kullanarak
- HTTP Server kullanarak
Bu yöntemlerin hepsini çok karmaşık olmayacak şekilde elimden geldiğince anlatmaya çalışacağım. Öncelikle en basit olan kullanım olarak Arduino IDE’ si ile OTA kullanımına bakalım. Her ne kadar bu konunun ana teması kablo kullanmadan havadan yazılım yükleme üzerine olsa da ESP8266′ ya yapacağımız ilk yükleme için kabloya ihtiyacımız olacak. Çünkü ESP8266′ yı OTA ile yazılım yüklenebilir getirebilmek için içerisinde sürekli çalışacak bir yazılım yüklememiz gerekli. OTA özelliği, ESP8266′ ya yüklenecek yazılımda bazı eklemeler yapılarak kazandırılabilir. Bunu örnek üzerinde anlattığımda anlaşılması daha kolay olacaktır. İlk yüklemeyi kablo ile yaptıktan sonra yazılımda yapılan değişiklikler için yazılım yüklemesini yine Arduino IDE’ si kullanarak kablosuz olarak gerçekleştirebileceğiz.
Arduino IDE
Arduino IDE’ si ile OTA kullanarak yükleme yaparken referans olarak verilen örneklerden birini kullanacağız. Bu örneğe, Arduino IDE’ sinde kart olarak ESP8266 seçili iken aşağıdaki şekilde ulaşabilirsiniz.
File >>Examples >> ArduinoOTA >> BasicOTA
Açılan örnek kodda Wi-Fi bilgilerini değiştirerek yükleme yapmanız yeterli. Böylece ESP8266 her güç verildiğinde Wi-Fi’ ye bağlanarak kablosuz olarak programlanmaya hazır gelecek. Şimdi bu yazılım içerisinde neler var onlara bir bakalım.
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.waitForConnectResult() != WL_CONNECTED) {
Serial.println("Connection Failed! Rebooting...");
delay(5000);
ESP.restart();
}
Yukarıdaki kısımlar Wi-Fi’ ye bağlantı için gerekli ilk ayarlamalar. Bu kısım Wi-Fi bağlantısını deneyip olmazsa ESP8266′ ya reset atıyor. Yani OTA ile ilgili bir kısım değil. OTA ile ilgili olmayan diğer kodların üzerinde bu konuda fazla durmayacağım. Önceki konularda zaten yeterince değindik.
// Port defaults to 8266
// ArduinoOTA.setPort(8266);
// Hostname defaults to esp8266-[ChipID]
// ArduinoOTA.setHostname("myesp8266");
// No authentication by default
// ArduinoOTA.setPassword("admin");
// Password can be set with it's md5 value as well
// MD5(admin) = 21232f297a57a5a743894a0e4a801fc3
// ArduinoOTA.setPasswordHash("21232f297a57a5a743894a0e4a801fc3");
Yapmak istediğiniz kablosuz yükleme işlemi için bazı temel ayarlamaları yukarıda görünen kodlar ile yapabilirsiniz. En üstte görülen internet bağlantı PORT’ u ayarı. Seri porttaki PORT değildir. Bu ayar internet üzerinden yüklemeyi gerçekleştireceğiniz PORT’ u seçmeye yarıyor. Default değeri 8266′ dır. O portu kullanan başka bir cihaz yoksa değişmenize gerek yoktur. Hemen altındaki host adı. Bu yükleme ekranında cihazın isminin nasıl görüneceğini belirlediğimiz kısım. Daha sonraki kısımlar ise güvenlik için gerekli kısımlar. Parola kısımlarını aktif edip ESP8266′ ya kablosuz olarak yükleme yaparken parola sormasını sağlayabilirsiniz. Böylece herkesin erişimine açık olan ağlarda cihazın izinsiz programlanmasını engelleyebilirsiniz. İki farklı parola yöntemi mevcut. İlki parolanın ASCII karakter ile saklanmasını sağlıyor ikincisi ise daha güvenli olan MD5 olarak paralanın saklanmasını sağlıyor. Parola koymaya ihtiyacınız varsa ikisinden birini aktif ederek kullanmalısınız.
Sonraki kısımlarda hiç değişiklik yapmadan yükleme yapmanız yeterli. Diğer ayarlar OTA ile yükleme sırasında meydana gelen olayları basitçe takip etmenizi sağlıyor. Tabi eğer ihtiyacınız varsa. Yani yükleme esnasında hata olursa şu olsun, yada yükleme sırasında şu olsun gibi özel durumlar belirlemek isterseniz, bunları kullanabilirsiniz. Bu kısımlarda hiç değişiklik yapmadan devam ediyoruz. Son olarak da loop kısmında bir fonksiyon çalışmakta.
ArduinoOTA.handle();
Bu kod Arduino’ nun ESP8266′ nın OTA üzerinden güncellenebilmesi için Wi-Fi üzerinden gelen isteklerin yakalanmasını sağlıyor. Eğer bir yazılım yükleme isteği elmişse diğer işlemlere geçmeyip yazılım yüklemeye başlıyor. İsteğin ne zaman geleceği bilinmediğinden OTA kullanırken yazılımı bloklayan yada yavaşlatan işlemler kullanılmamalıdır. Yani herhangi bir işleme gecikme vermek için “delay” gibi fonksiyonlar kullanılmamalıdır. Buna dikkat ederseniz OTA ile ilgili kolay kolay sorun yaşamazsınız. İlk yüklemeyi COM port üzerinden yaptıktan sonra ESP8266′ nın bilgisayar ile bağlantısını keserek dışarıdan güç verirseniz Arduino IDE’ sinin PORT seçim ekranında aşağıdaki şekilde ESP8266′ yı görebilirsiniz.
Bu ESP8266′ yı seçtikten sonra normal yükleme yapar gibi Arduino IDE’ sinde “Upload” butonuna basarak OTA ile yazılım yüklemeyi gerçekleştirebilirsiniz. Burada görünmüyorsa ESP8266′ ya kablo ile tekrar bağlanıp seri monitör erkanında bir sorun var mı diye kontrol etmenizi tavsiye ederim.
Peki biz gecikmeli işlemlere ihtiyaç duyuyorsak ne yapacağız. Bunun için timer yada millis kullanarak asenkron bekleme işlemleri oluşturmalısınız. Bunların kullanımı hakkındaki yazımıza bağlantıdan ulaşabilirsiniz. Biz burada örnek olması açısından millis ile basit bir örnek oluşturalım. Bunda belirli zaman aralıklarında LED yanıp sönsün.
unsigned long lastTime = 0;
void loop() {
ArduinoOTA.handle();
if(millis() - lastTime > 1000)
{
digitalWrite(2, !digitalRead(2));
lastTime = millis();
}
}
Bu kodda OTA’ dan gelecek event’ ler dinlenirken bir yandan da 1 saniye aralıklar ile ESP8266 üzerindeki LED yanıp sönmektedir. 5 yada 10ms gibi çok küçük gecikmeler çok sorun çıkarmasa da en iyisi hiç kullanmamaktır.
Visual Code
Visual Code kullanırken bunlara farklı bir işlem yapılmıyor aslında. Sadece yükleme için COM port seçimi yerine ESP8266′ nın IP’ sini giriyoruz ve Visual Code OTA üzerinden yüklemeyi kendisi yapabiliyor. Bunun için sadece Visual Code’ un Arduino eklentisini yüklemeniz yeterli. Eklentiler kısmında “vsciot-vscode.vscode-arduino” aratarak ilgili eklentiye ulaşabilirsiniz. Bu eklentiyi yükledikten sonra Vscode ile projeyi oluşturacağımız klasörü açıp “Ctrl + Shift + P” basıp “Arduino Initialize” seçmelisiniz. Böylece port seçimi yapabileceğiniz “arduino.json” isimli dosya oluşmuş olacaktır. Bu dosyanın içerisine aşağıdaki eklemeleri yapmalısınız.
{
"output": "./output",
"port": "192.168.1.28"
}
Port isminin sizin kullandığınız ESP8266′ nın IP’ si olması gerekiyor. Böylece Arduino’ ya yükle dediğinizde derleme işleminden sonra yüklemeyi OTA üzerinden gerçekleştirecektir. “output” yerini belirlemenizi de tavsiye ederim. Bu sayede derleme işleminiz biraz daha hızlı olacaktır. Şimdi sıra geldi 3. yöntem olan HTTP Server yöntemine.
HTTP Update
ESP8266′ yı HTTP Server ile güncellemek bir web sayfası üzerinden kod güncellemesi yapmak anlamına gelmektedir. Bu yüzden Web Update işlemi için oluşturulacak yazılım OTA ile Web Server’ ın bir karışımı olacaktır. Bu işlem için yine ESP8266′ nın örnek kodlarından birini kullanabilirsiniz.
File >> Examples >>ESP8266HttpUpdateServer >> WebUpdater
Buradaki yazılımı ESP8266′ ya yüklediğinizde tarayıcıya aşağıdaki adresi yazarak yükleme ekranın olduğu sayfaya görebilirsiniz. Tarayıcı üzerinden bu şekilde özel isimle ulaşabilme özelliğini yazılımda kullandığımız mDsn Server vermektedir. Bunun sadece iç ağ için geçerli olduğunu unutmayın. Dış ağdan bu şekilde erişim yapmazsınız.
http://esp8266-webupdate.local/update
Bunun yerine ESP8266′ nın IP adresi ile de bu sayfaya erişebilirsiniz. IP adresinin sonuna “/update” eklemeyi unutmamalısınız. Bu sayfada aşağıdaki resimde göründüğü gibi iki farklı dosya seçim aracı mevcut. Yeni yazılım yükleme işlemini “Firware” kısmından yapmalısınız. File System kısmı farklı işlemler için kullanılıyor.
Bu ekranda dosya seç butonuna bastığınızda sistem “.bin” uzantılı bir dosya isteyecek. Yani Http Server üzerinden yükleme yaparken “ino” dosyasını seçerek yükleme yapamazsınız. Hazırladığınız “.ino” uzantılı Arduino dosyasını Ide’ yi kullanarak derleyin. Derleme başarılı olması halinde Arduino IDE’ si size “.bin” uzantılı dosya oluşturacaktır. Bu dosya windows işletim sistemi için “Temp” klasorünün içerisinde tutulmaktadır. Buraya erişmek için ” Başlat >> Çalıştır >> %temp% ” yolunu izleyebilirsiniz. “Temp” klasörü açıldığında “arduino_build_* ” isimli dosyalar Arduino IDE’ si tarafından oluşturulan dosyalardır. Ancak “Temp” klasöründe aynı anda birden fazla Arduino dosyası olabilir. Doğru olanı seçtiğinize emin olmalısınız. Bunun için “sketch” klasörünün içerindeki “.cpp” uzantılı dosyaya bakarak hangi yazılım için oluşturulmuş klasör olduğunu anlayabilirsiniz. Daha kolay yöntem olarak ise yazılım dosyanıza isim verip bir yere kayıt edebilirsiniz. Böylece “arduino_build_* ” klasörü içerisinde oluşan dosyalar sizin belirlediğiniz isim ile oluşurlar.
HTTP Server ile yükleme yapmak için Arduino’ da verilen örnek yazılımı kullanmak ESP8266′ nın Arudino IDE’ si ile programlama özelliğini devre dışı bırakmaktadır. Arudino IDE’ si ile de programlanabilir olması için ilk başta verdiğimiz “Basic OTA” yazılımı ile son yazılımı birleştirmek gerekmekte. Bunu ben gerçekleştirdim ve Github üzerinde paylaştım. Konu uzun olmaması için burada tekrardan anlatmıyorum. Bağlantıdan ulaşabilirsiniz. Zaten üstte ne yapıldığını anlayan birisi için bunu gerçekleştirmek çok zor değil. Ancak ESP8266′ ya eklenen her şeyin hafızada yer kapladığını unutmayın. Duruma göre birinden vazgeçmez zorunda kalabilirsiniz.
HTTP Server ile OTA kullanımı biraz daha karmaşık görünse de işi daha profesyenel hale getirmenizi sağlar. Örneğin siz ESP8266 üzerinde yada Web tarayıcısında bir butona basarak ESP8266′ nın otomatik güncelleme yapmasını sağlayabilirsiniz. Bunun için derlenmiş yazılım dosyasını farklı bir Web sunucusuna yükleyip, ESP8266′ nın buraya istek atarak onu indirmesini sağlayabilirsiniz. Bu da OTA’ yı oldukça kullanışlı hale getirir.
Bunlara ek olarak ESP8266′ nın OTA ile ilgili kendi döküman sayfasına bağlantıdan ulaşabilirsiniz.
OTA ile anlatacaklarım bu kadardı. Umarım yardımcı olabilmişimdir.
İyi çalışmalar dilerim.