Skip to content
Kod YazalımBir başka olmaya çabalayan yazılım sitesi
aeminkyr
13 Aralık 2020

ESP8266 ile Socket.IO kullanımı

Genel

Adı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.

Tags: arduino, arduinoide, esp8266, nodejs, nodemcu, socket.io, websockets

Bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Arşivler

  • Aralık 2020
  • Kasım 2020

Calendar

Aralık 2020
P S Ç P C C P
 123456
78910111213
14151617181920
21222324252627
28293031  
« Kas    

Kategoriler

  • Genel