1. Cài đặt ESP8266 Add-on vào Arduino IDE
Bước 1: Mở Arduino IDE, vào File> Preferences
Bước 2: Copy http://arduino.esp8266.com/stable/package_esp8266com_index.json and past vào “Additional Boards Manager URLs” click “OK”
Bước 3: Mở Boards Manager. Đến Tools > Board > Boards Manager…
Bước 4: Search ESP8266 và nhấn nút install “ESP8266 by ESP8266 Community“
Bước 5: Chờ package esp8266 được cài đặt hoàn thành
2. Lựa chọn Target để lặp trình:
Ở đây tôi sử dụng board ESP8266 NodeMcu:
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.h và WiFiClient.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");
}
}