Thursday, February 19, 2015

TCP Socket Connection On MBED, NODEMCU




Son zamanlarda IoT ve M2M  ile ilgili birçok gelişme, yaşanıyor.  IoT ve M2M ile ilgili sayfalarca tanıtım vs yapılabiliriz. Elektronik ve Bilişim sektörü IoT ve M2M üzerinde çok fazla büyüyecek ..

Bir önceki yazımda, ESP8622 ile yapılmış, NodeMCU platformunu incelemiştim. 

Bu yazıda ise , NodeMCU platformuna , AT komutların çalışması için gerekli Firmware dosyasını yükleyeceğim ve NodeMCU ve Mbed  ile bir TCP soket bağlantısı gerçekleştireceğim. 

Kısaca MBED hakkında biraz bilgilendirme yapmam gerekirse,  MBED , ARM tarafından geliştirilen ve Mikroişlemciler ve benzeri  platformlarda yazılım geliştirme işlemlerini kolaylaştıran ve bir çok geliştiricinin bilgilerini ve kütüphanelerini paylaştığı bir ekosistem.

Mbed biraz Arduino’ya benziyor, fakat daha esnek bir mimarisi var. 
Her firma kendi mimarisini ekleyebilmesi için tasarlanmış. ARM mimarisini kullanmak kaydıyla.

MBED bir diğer yanı ise, Geliştirme ortamının online olması. Yazdığınız kodlar ve tüm veriler cloud üzerinde hesabınızda duruyor ve istediğiniz zaman erişime ve geliştirme yapabilirsiniz. Online compiler , çok esnek ve hızlı değil. İsterseniz çeşitli  profesyonel  geliştirme ortamlarına da projenizi export edebiliyorsunuz. ( KEIL , IAR, CooCOX, GCC vsvs )
MBED için bir kullanıcı hesabı açmanız gerekli.

Detaylı bilgileri aşağıdaki siteden inceleyebilirsiniz.


Projenin kaynak dosyalarıda aşağıdan indirebilirsiniz.



İlk işlem olarak ESP8622 entegresine Modem Firmware dosyasını yüklemek . AT komutları kullandığı için Modem firmware dedim.
Firmware yükleme işlemini yapmadan önce , “Makefile” dosyasındaki COM parametresini kontrol ediniz.
Firmware işlemine başlamadan önce, Nodemcu üzerindeki Firmware butonuna basılı tutunuz. Firmware başladıktan sonra bırakabilirsiniz.





Bunun için Yapmamız gereken ,  Eclipse IDE açıp, workspace’den  “at_v0.20_on_SDKv0.9.4” projesini seçmek.


Proje ile ilgili güncel verileri aşağıdaki paylaşacağım linklerden takip edebilirsiniz.
Notice: AT v0.20 is based on SDK v0.9.4.

Git repo
https://github.com/espressif/esp8266_at

Patch SDK v0.9.4
https://github.com/vowstar/esp8266_at/commit/366a8a5e1c6c273bafdf555b85c34dcde5d7d508

ESP8266 AT Instruction Set v0.20 28.11.2014
http://esp8266.ru/download/esp8266-doc/4A-AT-Espressif%20AT%20Instruction%20Set_020.pdf

ESP8266 AT Command Examples v0.3 28.11.2014
http://esp8266.ru/download/esp8266-doc/4B-AT-Espressif%20AT%20Command%20Examples_v0.3.pdf



Modem Firmware dosyasını başarılı bir şekilde yükledikden sonra, yapmanız gereken  Bir terminal programı ile Modemi kontrol etmek ,
Bunun için TeraTerm kullanıyorum. Hyper terminal , Putty ve benzeri programlarda işinizi görecektir.



Modem firmware dosyası düzgün bir şekilde yüklendi ise,
AT Komutuna , OK diye cevap dönecektir.
AT+GMR komutuna ise versiyon ve tarih bilgisini döner. Bu verileri, “at_v0.20_on_SDKv0.9.4”  projesi içerisinden değiştirebilirsiniz.
Bu adıma kadar geldiysek WIFI modemimiz hazır demektir.


İkinci adımımız ise MBED yazılım geliştirme ortamını hazırlamak,


MBED için elimde bulunan ST Nucleo F401RE kartını kullanacağım. ST geliştirdiği Nucleo boardları MBED uyumu ve aynı zamanda Arduino shieldler ile uyumu ile baya beğenimi topladı. Board üzerinde bulunan JTAG ile binary dosyayı karta yüklemek oldukça kolay. Keil , GCC benzeri IDE lerde JTAG olarak görüyor ve debug vb işlemleri yapmanıza izin veriyor.
MBED kartınızı USB ile bilgisayarınıza taktığınızda , aygıt yöneticisinde ST virtual COM driver aygıtının gelmesi gerekiyor.


ST virtual Com , MBED üzerinde yazılım geliştirirken çok işinize yarayacak bir aygıt.
Anladığım kadarı ile, JTAG ile ilişkili ve Mikroişlemcinizin herhangi bir COM portunu işgal etmiyor.  ARM çekirdeğinin desteklediği  “Serial Wire Debug”  özelliğini kullandırıyor.  Nucleo üzerinde bir JTAG olması, programlama , debug  ve geliştirme işlemleri için güzel bir avantaj.

ST JTAG  sürücüsü  ile cihazı programlamak ise oldukça kolay olmuş. Flash diske dosya kopyalamak kadar basit. 




Resimde de görüldüğü gibi 512KB bir hafızanız var. Bu aşan Nucleoda üzerindeki SMT32F401RET6 mikro işlemcisinin flash alanı.
Projenizi derlediğiniz zaman oluşacak BIN dosyasını buraya sürükle bırak yapmanız , cihazı programlamanızı sağlıyor.

Hafızanın ne kadarı dolu veya boş , yüklenen binary dosyayı geri almak için bir özellik yok.

Daha detaylı flash işlemleri için STM32 ST-LINK UTILITY programını kurmanız gerekiyor.




Projenizde, yazılım güncelleme , bootloader vb ihtiyaçlarınız olduğunda bu programa ihtiyacınız olacaktır.

Şimdilik Nucleo Drive’ı kullanacağım.

MBED ile ilgili bir diğer işlem MBED hesabı oluşturmak.
Bunun için " http://developer.mbed.org/ " sayfasına girip  login/signup yönergelerini tamamlamanız gerekli  

MBED hesabınızı oluşturduktan sonra,  sağ üst köşede bulunan Compiler linkini tıklayabilirsiniz.




Compiler linkine tıkladıktan sonra, karşınıza bir yazılım geliştirme ortamı gelecek. Eğer daha önceden tanımladığınız bir platform yok ise , yine sağ üstte bulunan platform ekle butonuna basabilirsiniz. Platform , elinizde bulunan yazılım geliştirme boardlarına verilen adlar. sitede , bir çok üreticinin geliştirdiği platformlar mevcut.







Daha önceden "ST Nucleo F401RE"  eklediğimden, ek son kullandığınız platform görünmekte.
Buradan karşınıza gelecek yönergeleri takip ederek platformu ekleme işlemini tamamlayabilirsiniz.

Platformu da ekledikten sonra, Bir "Hello World" örneğini çalıştırmamız doğru yolda olup olmadığımız hakkında bilgi verebilir.

Bunun için compiler üzerinde , new/ create new program seçeneğini açıyoruz ve karşımıza aşağıdaki aşağıdaki ekran geliyor.



Platform olarak, ST Nucleo F401RE seçtim.
Örnek Proje ise, bilgisayara UART üzerinden mesaj gönderen bir uygulama.
OK dediğimiz zaman, workspace alanımıza, seçtiğimiz proje ile ilgili dosyaları indirecek.
Dosyalar üzerinde herhangi bir değişiklik yapmadan "compile" butonuna bastığımızda, projemiz derlenecek ve ST Nucleo bordumuza kopyalayacağımız BIN dosyasını ise bilgisayarın ilgili download klasörüne indirecek.




BIN dosyasını Nucleo Sürücüsüne yükledikten sonra yazılımımız otomatik olarak çalışmaya başlayacaktır.







Yazılımın doğru çalıştığını anlamak için, Tera TERM ile Nucleo virtual COM portumuza bağlanacağız. Terminal programınızda haberleşme hızını  9600 / 8n1 ayarlamanız gerekiyor.




Terminal ekranında görüldüğü gibi, Örnek kod her 1saniye'de programın ne kadar süredir çalıştığını yazmakta.

Yukarıdaki her iki adımı da tamamladıktan sonra, elimizde WIFI modemimiz ve ST geliştirme ortamımız hazır olarak bulunur durumda.

Bu iki karta ilave olarak , bir adet USB seri dönüştürücü daha kullanacağım. Toplamda 3 adet elektronik PCB birbirine bağlanacak. USB dönüştürücüyü kullanma nedenim Nodemcu ve Nucleo kartları arasındaki iletişimi dinlemek.

Maalesef  ST Nucleo boardumuza ,  NodeMCU kartını , Aurduino shield benzeri bir yöntemle üzerine takamıyoruz.  Bunun için kısa laboratuvar kablolarından kullanacağım.

Bağlantıyı aşağıdaki şemadaki gibi yapıyorum. 3.3V ve 5V bağlantılara dikkat edilmesi gerekiyor.

Nucleo boardumuzda , NodeMCU boardumuzda 3.3V ile çalışmakta. Olası bir 5V ile besleme yaparsak bozulma ihtimali oldukça yüksek. 

Ben Üç kartıda  bilgisayardan USB kabloları ile besledim. Besleme bağlantılarını birbirine taşımadım. 
Sadece kartların, GND'lerini ortak bağladım. 

Bağlantı şeması aşağıdaki gibi oldu.



USB seri dönüştürücünün RX pinini ,  MBED TX pinine bağlar iseniz, bu seferde , MBED gönderdiği komutları izleyebilirsiniz. Bu kartı kullanmayabilirsiniz de. 

Yazılımı MBED platformuna upload edeceğim. Kendi workspaceinize import edebilirsiniz. 



Yazılım ile ilgili ,

- AT komutlar ile TCP Socket bağlantısı kurup , veri gönderiyor. Her gönderimde bir sayaç değerini arttırıyor.

- NUCLEO ile ADC , button interrupt vb işlemlerde TCP soket üzerine gönderile bilinir.

- Button interruptı da ekledim ama LED1 yakıp söndürmekden başka fonksiyonu yok.

- MBED RTOS kullanılıyor.Main içerisinde iki thread açıyor. Bir thread WIFI bağlantılarını vs yapıp veri göndermeye başlıyor. Diğer Thread ise boş , içerisine ADC, Sensör okumaları vs ekleyebiliriz.






  Umarım , yardımcı olmuştur. 










  


 








Wednesday, February 11, 2015

NodeMCU , Open Source, Open Hardware Iinternet of Things Device

Merhaba ,
IoT ile ilgili her gün yeni bir cihaz, modül vb. donanım çıkıyor. Bunlardan biride NodeMCU platformu .

NodeMCU aslında bir ESP8622 SoC çipi kullanan bir WiFi modül. Tamamen açık kaynak ve açık donanım sahip, farklı firmware yüklemeleri ile farklı fonksiyonları sağlayabilen bir donanıma sahip oluyorsunuz. 

NodeMCU anasayfası,

Donanım ile ilgili tüm dökümanlar,

https://github.com/nodemcu/nodemcu-devkit


NodeMCU cihazınıza modem firmware dosyasını yüklediğiniz zaman , AT komutlar ile çalışan bir WIFI modülünüz oluyor.Bir  Web Server  firmware dosyası yüklediğiniz zaman, çok temel bir web sunucunuz oluyor.Açık kaynak kodlu bir projenin’de tüm güzelliklerini içeriyor. 


Geliştirme ortamı için birkaç kurulum birden yapmak lazım. Malesef tek bir program kurulumu ile geliştirmeye hazır durumu gelmiyor.

Öncelike NodeMCU kullanmak için bir adet Android telefonlar için olan standart USB data kablosuna ( (bendeki samsung) ve CH340 USB seri dönüştürücü sürücüsüne ihtiyacınız var.

Windows 8, FTDI entegrelerinde olduğu  gibi otomatik sürücüleri yüklemedi. Google'dan arayıp güvenilir bir siteden indirebilirsiniz.
Sürücü kurulumu başarılı olduktan sonra, aygıt yöneticisi altında COMX olarak karşınıza çıkacak. Programlamak içinde bu portu kullanacağız. Benim bilgisayarım COM29 olarak gördü.





NodeMCU  ile ilgili iki tip geliştirme ortamı söz konusu,


LUA script ve C,C++ .

LUA script,

Biraz arduino benzeri bir kullanım sağlıyor. LUA ile çalışabilmek için NodeMCU özel bir firmware yüklemeniz gerekiyor. Daha sonra LUA ile , bir script hazırlayıp cihaza yüklüyorsunuz.50 satır vs bir işleminiz var çok kolay ve hızlı bir şekilde bir IoT uygulaması geliştirmenizi sağlıyor. Ama kompleks projelerde işin içinden çıkmak zor olur diye düşünüyorum.  Lua ile herkes bir IoT uygulaması yapabilir gibi. Basit hızlı etkili daha ne olsun.

LUA ile ilgili örneğe başka bir yazıda değineceğim. 


C,C++ ,

ESP8266 ile ilgili tüm registerlara vs ulaşabilmeniz ve kendi firmware veya özel uygulamanızı yapabilmeniz için gerekli olan geliştirme ortamı.

Windows için IDE ve SDK kurulumu ile ilgili, Rus bir yazılımcının sitesindeki adımları takip ettim. Gayet hızlı ve hatasız kurulum gerçekleştirebildim.  
Adımlara gelince, translate ile çevirip burada paylaşıyorum. Rusça-İngilizce-Türkçe Çeviri hataları olabilir.  Temelde indir ve adım adım kur mantığı işe yaradı.

1. Ckachivaem (86Mb) Espressif-ESP8266-DevKit-v1.0.x-x86.exe 
2. 
Download the JRE kurulumu x86 , x64 işletim sisteminize göre seçin (jre-7uXX-windows-i586.exe) 
3. Download the  Eclipse Luna  IDE C ++  kurulumu,  (eclipse-cpp-luna-SR1-win32.zip). Zip dosyasını c’nin altına unzip yapabilirsiniz.
4. Download the and install MinGW. Run mingw-get-setup.exe, Windows için GNU ortamı, GCC derleyici vs içeriyor. C,C++ kodlarının derlenmesi için gerekli.
5. Download the (84Mb) MinGW kurulumunu otomatik hale getirilmiş bir paket. Ben dört adımı kurdukdan sonra bunuda kurdum. 4 kurmadan 5’i de kurabilirsiniz. 5’in içindeki bat dosyasını çalıştırmanız yeterli.

Eclipse IDE yi açtıktan sonra , workspace olarak ,  C: \ Espressif \ examples seçmeniz yeterli.
ESP8266 ile ilgili örnekler Eclipse IDE içerisinde görünecek.


Örnek Olarak ESPHTTPD uygulamasını kullanmak istedim,
Hem Web Server , Hemde Led örneğini içeriyor.
İlk yapmanız gereken projeyi açmak “build” yapmak. Eğer başarılı bir şekilde “build” yapabilirseniz. Yükleme adımlarını doğru bir şekilde yapmışsınızdır.



Daha sonra sağdaki “Make Target” Kısmından, “build” yaptığınız projeyi cihaza yükleyebilirsiniz.



Make target kısmında, birden çok seçenek söz konusu.
-      ALL ( projeyi build ediyor )
-      Clean ( Projede geçici dosyaları temizliyor / Bende bilmiyorum )
-      Flash ( Proje dosyasını Flash içerisine yüklüyor)
-      FlashoneFile ( Tek bir komut ile Hem proje hem HTML kısmını yüklüyor)
-      -htmlFlash ( WEB server içerisindeki HTML dosyalarını Flasha yüklüyor )

Projenizdeki Makefile dosyasında ESP port yazan kısma , USB seri dönüştürücünün aldığı COMXX değerini yazmanız lazım. Benim için bu değer COM29



İşin diğer püf noktası da, Flash yapabilmeniz için NodeMCU üzerindeki Flash Butonuna basılı tutmanız gerekliliği. İçerisindeki MCU bootloader modun da açılmasını sağlıyor. Diğer Türlü bir Flash update yapamıyorsunuz.
·         Butona basılı tutun.
·         Makefile / Flash başlatın.
·         Yükleme İşlemi Başladıktan sonra butonu bırakabilirsiniz.



Yukarıdaki adımları düzgün bir şekilde tamamlarsanız.
Bilgisayarınızda wireless ağları arattığınızda ESPXXX diye bir ağ göreceksiniz. Buda NodeMCU AP modunda çalıştığını göstermekte. Ben SSID ismini değiştirdiğimden farklı görünüyor.


Bundan sonra , hazır yazılım içerisinde bazı değişiklikler yaptım.
SSID ve Passoword değiştirme,

include/user_config.h altında,

#define WIFI_AP_NAME "Veysel_NODEMCU"
#define WIFI_AP_PASSWORD "123456789"


Açılış sayfasını vs değiştirmek için,
HTML klasörü içerinde , index.tpl dosyasında değişiklik yaptım.
FlashHTML ile bu klasör altındaki dosyalar, MCU hafızasına aktarılıyor. ( Normalde FTP ile yaptığımız işlem gibi ) Limitler vs hakkında bir bilgim yok. CCS ile style belirleniyor. Birden çok sayfa olabiliyor.
3 USD bir SoC için daha ne olsun.
Orjinlin de bir kedi resmi vardı. Onu değiştirdim ve bir banner ekledim.
HTML vs Web programcılığı bilgim pek yok. Çok daha etkileyici bir şeyler yapıla bilinir.


Bilgisayarınız ile NodeMCU bağlandığınız zaman,
Adres çubuğuna nodemcu IP adresini yazarsanız (192.168.4.1) karşınıza hazırladığınız index.tpl sayfası geliyor.





İkinci kısım , LED yakıp söndürme işlemi için ise ,

GPIO 2 portuna bir LED bağlamamız gerekiyor.  LED pozitif ucuna bir 120ohm seri direnç bağladım. Negatif ucu ise NodeMCU GND ucuna bağlı.






LED.tpl sayfasından , Butonlara basmanız ile LED durumunu değiştiğini gözlemleyebilirsiniz.




NodeMCU ile ilgili değerlendirmeme gelince,

Daha önceden benzer Wifi Modüller vardı. Fiyat olarak nodemcu maliyetini bir  10 ile çarpmamız gerekiyor. Tüm fonksiyonlar vs karşılaştırma yapmayacağım. SoC olması kendi projenize entegre ederken kolaylık sağlayabilir. İyi bir tekniker, SMD lehimlemesini büyüteç altında rahatlıkla yapabilir. Modül olarakda 3 USD ( Wifi Certificated ) üstelik.
IoT ve Wifi ile ilgili çalışacaksanız kesinlikle alıp denemenizi öneririm. NodeMCU hali ise 15 USD civarlarında.


Umarım faydalı olmuştur. Zaman ayırıp inceleyen herkese teşekkürler.