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. 










  


 








No comments:

Post a Comment