Friday, August 28, 2020

ESP8266 giao tiếp thông qua TCP Socket với Arduino IDE

 1. Cài đặt ESP8266 Add-on vào Arduino IDE

    Bước 1: Mở Arduino IDE, vào File> Preferences

Install ESP8266 Board add-on in Arduino IDE open preferences

Bước 2: Copy http://arduino.esp8266.com/stable/package_esp8266com_index.json and past vào “Additional Boards Manager URLs” click  “OK” 

Install ESP8266 Board add-on in Arduino IDE enter URL

Bước 3: Mở Boards Manager. Đến Tools > Board > Boards Manager…

Install ESP8266 Board add-on in Arduino IDE Open boards manager

Bước 4: Search ESP8266 và nhấn nút install  “ESP8266 by ESP8266 Community“

Install ESP8266 Board add-on in Arduino IDE search ESP8266

Bước 5: Chờ package esp8266 được cài đặt hoàn thành

ESP8266 Board add-on in Arduino IDE installed


2. Lựa chọn Target để lặp trình:

    Ở đây tôi sử dụng board ESP8266 NodeMcu:

    Install ESP8266 Board add-on in Arduino IDE select board

3. Code

    3.1. Kết nối wifi

        Tham khảo file ESP8266WiFi.h và ESP8266WiFi.cpp trong folder:

C:\Users\maitr\Documents\ArduinoData\packages\esp8266\hardware\esp8266\2.7.2\libraries\ESP8266WiFi\src


        ESP8266WiFiClass Wifi_client; //Tạo mới đối tượng Wifi_client trong class ESP8266WiFiClass

        Wifi_client.mode(WIFI_STA); //Set mode cho wifi là station mode ( ESP sẽ kết nối đến router)

                                                           // Ngoài ra wifi còn Access Point mode (ESP sẽ phát wifi)

        Wifi_client.begin(SSID, PASS);//Set SSID và PASSWORD muốn kết nối


       3.2. Tạo TCP Socket hoạt động ở chế độ Client

        Tham khảo file: WiFiClient.hWiFiClient.cpp trong folder:

C:\Users\maitr\Documents\ArduinoData\packages\esp8266\hardware\esp8266\2.7.2\libraries\ESP8266WiFi\src

        WiFiClient Sock_TCP_Client; //Tạo client TCP socket

        Sock_TCP_Client.connect(host, port); // connect tới server với địa chỉ IP và Port 

        //để gửi dữ liệu lên server chúng ta sử dụng phương thức:

        // + printf: để gửi dữ liệu theo format. Giống với hàm printf trong C để in lên console

        // + println: đối số truyền vào là một đối tượng String và thêm ký tự \r\n

        //Để kiểm tra có dữ liệu được gửi từ server chúng ta sử dụng phương thức available()

        //Để nhận dữ liệu từ server chúng ta sử dụng phương thức:

        // + readStringUntil


       3.3. Full code

#include "WiFiClient.h"

#include "esp8266_peri.h"

#include "ESP8266WiFi.h"


HardwareSerial Log(UART0);

ESP8266WiFiClass Wifi_client;

WiFiClient Sock_TCP_Client;

const char* SSID = "YOUR SSID";

const char* PASS = "YOUR PASSWORD";

const char* host = "192.168.0.129";

uint16_t port = 2505;


void setup()

{

  pinMode(2, OUTPUT);

  Log.begin(9600);

  Wifi_client.mode(WIFI_STA);

  Wifi_client.begin(SSID, PASS);

  Log.printf("Connect to WiFi: %s\r\n", SSID);

  while (!Wifi_client.isConnected())

  {

    Log.print(".");

    delay(1000);

  }

  Log.printf("Write in Arduino IDE\r\n");

  Log.printf("Wifi connected\r\n");

  Log.print("ESP IP: "); Log.println(Wifi_client.localIP().toString());

  //Sock_TCP_Client.keepAlive();

  Sock_TCP_Client.connect(host, port);

  Log.printf("Connect to : %s\r\n", host);

  while (!Sock_TCP_Client.connected())

  {

    Log.print(".");

    delay(1000);

  }

  Log.println("TCP socket connected");

  Sock_TCP_Client.println("This is message from ESP8266");

  

}


void loop()

{

  String data_recv;

  String on_msg = "ON";

  String off_msg = "OFF";

  while (!Sock_TCP_Client.available()) ;

  data_recv = Sock_TCP_Client.readStringUntil(0x0d);

  

  Log.println(data_recv);

  if (data_recv == on_msg)

  {

    Log.println("[MESSAGE]: ON");

    digitalWrite(2, 0);

    Sock_TCP_Client.println("LED is power on");

  }

  else if (data_recv == off_msg)

  {

    Log.println("[MESSAGE]: OFF");

    digitalWrite(2, 1);

    Sock_TCP_Client.println("LED is power off");

  }

  else

  {

    Log.println("[MESSAGE]: Unknow");

    Sock_TCP_Client.println("The command is incorrect");

  } 

}

    4. Tạo server
    Sử dụng hercules để tạo server