ESP 01 Wemos D1 NodeMCU OTA HTTP get firmware Update - Seelenkind/ESP-8266-OTA GitHub Wiki
Cep telefonlarından alışkın olduğumuz bir olay, yeni bir firmware hazır olunca otomatik olarak cep telefonumuza indirilir, update yüklenir, ceptelefonu yeniden başlatılır ve yeni fonksiyonlar hazır olur, sorunlar giderilmiş olur. Arduino ve ESP'lerde biz bunu sıkça yapmak zorunda kalıyoruz. Kervan yolda dizilir misali başlıyoruz programlamaya ve değişiklikler kodladıkça takıyoruz PC'ye yüklüyoruz yeni kodu. ESP yanımızda olduğu müddetçe bu sorun değil. Hatta diğer anlatımda sürekli tak çıkar yapmamak için OTA üzeri kod güncellemeyi ele aldık ve oldukça zevkli bir deneyimdi. Ama ESP'nin bağlandığı WiFi'ye erişimimiz yoksa hatta ESP çok uzak bir yerde görev yapıyorsa ne yapmalıyız ? Bunun için ESP'nin internet üzerinden HTTP get komutu ile güncelleme yapmasını ele alacağız. Kullandığımız kod çok uzun gibi gözükse de güncellemeyi yapan aslında sadece bir satır. Diğer satırlar başka bir dosyada güncelleme var mı diye kontrol ediyor, güncelleme yapılırken hata oluşursa güncelleme iptal ediliyor ve ESP'nin donup kalmasına mani olunuyor. Fotoğrafta gördüğünüz #include <ESP8266httpUpdate.h> kütüphanesi ESP8266Wifi.h kütüphanesi ile birlikte kurulmuş oluyor. Eğer eksik ise bunu yüklemeniz gerekmektedir. İlk etapta kodu indirdikten sonra değiştirmemiz gereken versiyon numarası. Bu versiyon numarasını yüklemek istediğimiz update'ten önce +1 artırmamız gerekiyor. Çünkü kullandığımız kod update yapmadan önce internette firmware.version isimli dosyada saklı versiyon numarası ile karşılaştırılıyor. Eğer internetteki rakam kod içindeki rakamdan yüksekse yeni versiyon hazır olduğu kabul ediliyor ve yeni firmware indiriliyor. Biz henüz update yapmadığımız için kod içindeki versiyon numarası ve firmware.version dosyası içindeki sayı aynı olmalı.
İkinci olarak değiştirmemiz gereken konu, versiyon dosyasını sakladığımız adres ve firmware dosyasını sakladığımız adres. Bu adreslere password kullanmadan http ile erişim yapma imkanımız olmalı. Bunun için ücretli yada ücretsiz web hosting sağlayan bir servisten hizmet alıp ftp yada web upload ile dosya aktarabilme imkanımız olmalı. Ben güncelleme için zaten kullandığım internet sayfama www.hilmi-soenmez.com bir alt sayfa açıp ( /esp01 ) update dosyalarımı oraya yüklüyorum. Siz dosyaları dilediğiniz yere yükleyebilirsiniz. Yalnız örneğinde gözüktüğü gibi komple adresi ve dosya ismini internet tarayıcısına girip Enter'a bastığınızda sorunsuz erişebilmelisiniz.
Nasıl oluşturulacağını birazdan ele alacağımız bu iki dosya internete yükledikten sonra bu şekilde kontrol edilmeyi ve indirilmeyi bekliyor olacaklar.
Optomatik upload yapabilmek için bir kereliğine kodu usb port üzerinden yüklemeliyiz. Kodu ESP'ye yüklemeden önce anlatımı sonuna kadar okuyunuz çünkü oluşturulacak dosya isimleri kod içinde değiştirilmeli. Bu çok önemli. Kodu yüklemeden önce versiyon numarasını kaçtan başlatacaksanız değiştirin, sonra her değişiklikte +1 artırmak üzere aynı rakamı bir editör içine yazıp kodunuzun yanına kayıt edin. Kayıt ederken hangi ismi ve uzantıyı veriyorsanız bunu kod içinde de aynı şekilde web adresinin peşine eklemelisiniz. Kullandığımız kod bu dosyayı açacak ve içindeki versiyon numarasına bakacak. Eğer bulduğu sayı kod içindeki aktüel sayıdan büyük ise update işlemini başlatacak.
Kodumuzun aktüel halini PC'de bağlı iken yükle tuşuna basarak yüklüyorduk. Şimdi aktüel kodu *.bin uzantısı ile oluşturmak için Cntrl+ALT+S tuşlarına aynı anda basarak yada Menü çubuğundan Taslak/Derlenmiş binary'i çıkar seçenegi ile oluşturuyoruz.
Bu işlemi yaptıktan sonra seçtiğimiz board ismi kodumuzun dosya ismi peşine eklenerek bir .bin dosyası oluşturularak .ino dosyası yanına kayıt edilecektir.
Oluşturduğumuz firmware dosyasını ve versiyon dosyasını internete yükleyip adresini kodumuzda dosya ismi ile birlikte ekleyeceğiz. (Yukarıdan ikinci fotoğrafta gözüktüğü şekilde)
firmware.version ve .bin dosyalarını oluşturup internete yükledikten sonra kodumuzu ilk kez usb kablo ile ESP'ye yüklüyoruz. Kod yüklenip ESP yeniden başlatıldıktan sonraki işlemleri takip edeceğiz şimdi.
Benim versiyon dosyası şu adreste kayıtlı String fwVersionURL = "http://www.hilmi-soenmez.com/esp01/firmware.version"; aktüel firmware ise şu adreste String fwImageURL = "http://www.hilmi-soenmez.com/esp01/OTAESP8266_HTTP_get.ino.generic.bin";
ESP çalışmaya başladıktan sonra kodda ekli timer.h kütüphanesi sayesinde her 30 saniyede bir güncelleme var mı diye bakacaktır. Siz bu süreyi tabii ki günde bir yada 6 saate bir gibi hangi sıklıkta istiyorsanız farklı sürelere çıkartabilirsiniz. Süre dolunca checkForUpdates() fonsiyonu çağrılıcak ve update kontrol işlemi başlayacaktır. Eğer şimdiye dek her şeyi doğru yaptıysak fonksiyon internet üzerinden verdiğimiz adreste firmware.version dosyasını açacak içindeki sayıyı bir değişkene kayıt edecek. Sonra bu sayıyı kod içinde yazdığımız versiyon numarası ile karşılaştıracak. İki numarada aynı olacağından versiyon aktüel diye update işlemi yapmayacak ve bunu Serial monitör üzerinden gösterecek. Bu döngü her 30 saniyede bir tekrarlanacak, tabi bu arada ESP diğer görevlerini de yapmalı ve siz kodunuzu gerektiği yerlere eklemelisiniz.
Update nasıl olacak ? İlk önce kodumuzda gerekli değişiklikleri yaptıktan sonra kod içindeki versiyon numarasını ve bilgisayarımızda kayıtlı firmware.version içindeki numarayı bir artıracağız. Bilgisayarımızda kayıtlı .bin dosyasını karışıklık olmasın diye silebiliriz. Menüden Taslak/Derlenmiş binary'i çıkar metodu ile kodumuzun aktüel firmware'sinini oluşturup bu iki dosyayı web sayfasına yükleyeceğiz. Yükleme sırasında sorunlar oluşmaması açısından eski dosyaları web sayfasından da silmek en sağlıklısı. Bu iki dosya yüklendikten sonra bizim işimiz bitmiş olacaktır. Daha önceki kodda belirlediğimiz sürede ESP update var mı diye bakacak. firmware.version dosyası içindeki sayıyı halen çalışan kod içindeki sayı ile karşılaştıracak. Bir artırarak kayıt edip yüklediğimiz için yüklediğimiz .bin dosyasını indirip update yapacak.
Bir daha ki kontrolde intertteki version numarası aktüalize edilmiş kodun içindeki versiyon numarası ile aynı olacağı için ilk kez çalıştırdığımızdaki gibi update işlemi yapmayacak.
Bu yöntemle sadece bir kez aktüel firmware'i web sayfasına upload ederek yüzlerce / binlerce ESP'ye aktüel kod yüklemek mümkün olacaktır. Ayrıca siz Ankarada, ESP Hakkaride interte bağlı olarak çalışır durumda olduktan sonra güncelleme yapmanız sorun olmayacaktır çünkü ESP kodunu kendisi bulup kendi kendini güncelleyecektir.
Güncelleme yamadan önce elbette yakınınızda bir prototipte deneme yapmanız tavsiye edilir. ESP hangi görevi yapıyorsa güncelleme sırasında devre dışı olacak ve resetten sonra beklenmedik aktiviteler yapabilir. Bunun için gerekiyorsa önlemler alınmalı. Kodun içinde diğer projede olduğu gibi bir Telnet Server ekli. ESP'nizin İP numarasını örneğin Putty gibi uzaktan erişim programına girerek bağlantı kurabilirsiniz. Bu şekilde sanki PC'ye bağlıymış gibi TelnetMsg('text'); komutu ile ESP'nin işlemlerini protokol ettirebilirsiniz, aynı zamanda Putty aracılığı ile ESĞ'ye komut gönderip işlemlerde kullanmasını sağlayabilirsiniz. Yani WiFi üzeri Serial Monitör olarak kullanabilirsiniz.
Zevkli projeler.