
13 Aralık 2020
ESP8266 ile Socket.IO kullanımı
GenelAdını iot ile andığımız bir wifi modülü beş parmağında onlarca marifet bulunan ESP8266 ile node.js sunucumuzda çalışan socket.io kütüphanesi sayesinde gerçek zamanlı olarak server-client arasında haberleşme nasıl yapılır üzerine düşünüp ilerleyeceğiz.
Aslında hata vermese çok basit bir kullanımı olan bir kütüphanesi var. Socket.io gördüğüm kadarı ile iot tarafında yeterince ilgi gösterilen bir konumda değil nedense. Arduino IDE ‘sini kulanarak derleme ve kodlama yapıyoruz. (ESP8266’nın native dili olan Lua ile de bir tutorial gelebilir yakında.) Hemen kodları inceleyelim ve başıma gelenlere bakalım.
#include <SocketIoClient.h> #include <Arduino.h> #include <ESP8266WiFi.h> SocketIoClient socketIO; void setup() { pinMode(BUILTIN_LED, OUTPUT); pinMode(2, OUTPUT); Serial.begin(115200); WiFi.begin("kodyazalim", "sifre"); Serial.print("Connecting"); while (WiFi.status() != WL_CONNECTED) { digitalWrite(2, LOW); delay(500); digitalWrite(2, HIGH); delay(500); Serial.println("Connecting..."); } Serial.println("Connected to wifi1!"); // server address, port and URL socketIO.begin("192.168.1.1", 3000,"/socket.io/?transport=websocket"); } void messageEventHandler(const char * payload, size_t length) { //Payload ekrana yazıdırıldı. Serial.printf("Server says: %s\n", payload); //Payload string bir a değişkenine çevrildi ve basit şekilde payload'a göre 1 ise BUILTIN_LED on konumuna getirildi. String a = String(payload); if(a=="1"){ digitalWrite(BUILTIN_LED, LOW); Serial.print("ledon!!"); }else if (a=="0"){ digitalWrite(BUILTIN_LED, HIGH); Serial.print("ledoff!!"); } } uint64_t messageTimestamp; void loop() { //socket yapısı için gereken loop socketIO.loop(); //sunucudan gelen event'leri dinlemek için messageEventHandler a başvuruluyor. socketIO.on("reply",messageEventHandler); uint64_t now = millis(); //Her 6 saniyede bir işlemi her şeyden bağımsız olarak gerçekleştirmek için millis yapısını kullanıyoruz. if(now - messageTimestamp > 6000) { messageTimestamp = now; // Message adında içerisinde string ifade yer alan bir event emitledik. socketIO.emit("message", "\"I am fine thanks and youu?\""); } }
Büyük ihtimalle yukarıdaki kod ssl hatası nedeniyle derleme hatası verecektir. Bunun için çözüm basit. Socket.io kütüphanesinden ilgili bölümü devre dışı bırakmak. SocketioClient.cpp dosyasını socketioclient kütüphanesinden buluyoruz.

Yukarıdaki görselde görünen beginSLL void’ini yok ediyoruz kafamız rahat oluyor ssl kullanmayacaksak. Tabi ssl kullanmanızı öneriyorum. Biz ssl yer alan fonksiyonu kullanmamamıza rağmen neden böyle bir derleme hatası aldığımızı anlayamadım.
Kodda yer alan tüm kütüphaneleri IDE’ye eklemenize rağmen derleme hatası alıyorsanız Chris Venter tarafından yazılmış arduinoWebSockets-master kütüphanesini de IDE’ye eklemeniz durumu çözebilir.
Bir cevap yazın