ESP8266 làm WebSocket client

Trong bài này chúng ta sẽ dùng Node Wifi làm client kết nối đến một WebSocket server.

Chúng ta sẽ dùng một WebSocket server miễn phí đó là ws://echo.websocket.org

Thiết bị cần chuẩn bị

  • 1 x Node WiFi

Chương Trình

Bạn hãy tải thư viện arduinoWebSockets tại đây và cài đặt nếu chưa có.

Để cài đặt thư viện arduinoWebSockets cho Arduino IDE, bạn vào menu Sketch > Include Library > Add .ZIP Library… và chọn file đã tải về ở trên.

Khai báo các thư viện cần thiết:

#include <ESP8266WiFi.h>                // Thư viện dùng để kết nối WiFi của ESP8266
#include <WebSocketsClient.h>           // Thư viện WebSocketsServer

Để sử dụng thư viện WebSocketsClient ta cần khởi tạo một đối tượng tên là là webSocket.

WebSocketsClient webSocket;

Khai báo hàm dùng để kết nối và xử lý các sự kiện của WebSocket

void connectWebSocket() {
  webSocket.begin("echo.websocket.org", 80, "/");          // Địa chỉ websocket server, port và URL
  webSocket.onEvent(webSocketEvent);

  // webSocket.setAuthorization("user", "password");        // Sử dụng thông tin chứng thực nếu cần

  webSocket.setReconnectInterval(5000);                     // Thử lại sau 5s nếu kết nối không thành công
}

Cuối cùng chúng ta cần gọi phương thức webSocket.loop() trong vòng lặp chính để kiểm tra khi có sự kiện WebSocket xảy ra.

void loop() {
  webSocket.loop();
}

Bạn dùng Arduino IDE để nạp chương trình sau:

#include <ESP8266WiFi.h>                // Thư viện dùng để kết nối WiFi của ESP8266
#include <WebSocketsClient.h>           // Thư viện WebSocketsClient

const char* ssid = "Blocky AP";         // Tên của mạng WiFi mà bạn muốn kết nối đến
const char* password = "password_ap";   // Mật khẩu của mạng WiFi

const int led = 15;                      // Đèn led ở chân GPIO2

WebSocketsClient webSocket;

void setup() {
  Serial.begin(115200);                 // Khởi tạo kết nối Serial để truyền dữ liệu đến máy tính

  pinMode(led, OUTPUT);

  startWiFi();

  connectWebSocket();

}

void loop() {
  webSocket.loop();
}

void startWiFi() {
  WiFi.begin(ssid, password);           // Kết nối vào mạng WiFi
  Serial.print("Connecting to ");
  Serial.print(ssid);
  // Chờ kết nối WiFi được thiết lập
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }
  Serial.println("\n");
  Serial.println("Connection established!");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());       // Gởi địa chỉ IP đến máy tinh
}

void connectWebSocket() {
  webSocket.begin("echo.websocket.org", 80, "/");          // Địa chỉ websocket server, port và URL
  webSocket.onEvent(webSocketEvent);

  // webSocket.setAuthorization("user", "password");        // Sử dụng thông tin chứng thực nếu cần

  webSocket.setReconnectInterval(5000);                     // Thử lại sau 5s nếu kết nối không thành công
}

void webSocketEvent(WStype_t type, uint8_t * payload, size_t length) {

  switch (type) {
    case WStype_DISCONNECTED:                         // Sự kiện khi client ngắt kết nối
      Serial.printf("[WSc] Disconnected!\n");
      break;
    case WStype_CONNECTED:                            // Sự kiện khi client kết nối
      Serial.printf("[WSc] Connected to url: %s\n", payload);

      webSocket.sendTXT("Connected");          // Thông báo kết nối thành công
      break;
    case WStype_TEXT:                                 // Sự kiện khi nhận được thông điệp dạng TEXT
      Serial.printf("[WSc] get text: %s\n", payload);

      webSocket.sendTXT("Hi Server!");               // Gởi thông điệp đến server
      break;
    case WStype_BIN:                                  // Sự kiện khi nhận được thông điệp dạng BINARY
      Serial.printf("[WSc] get binary length: %u\n", length);
      hexdump(payload, length);

      // webSocket.sendBIN(payload, length);
      break;
  }
}

Sau khi nạp code thành công, bạn mở Serial Monitor để kiểm tra kết nối WebSocket thành công.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Fill out this field
Fill out this field
Vui lòng nhập địa chỉ email hợp lệ.
You need to agree with the terms to proceed

1 Bình luận.

  • Đây là khóa học IoT với Arduino phần nâng cao, giúp các bạn làm quen với các khái niệm về phần truyền và nhận dữ liệu lên Internet thông qua kết nối WiFi và nhiều phương thức (protocol) khác nhau.

Menu