ESP32를 웹소켓 클라이언트로 구동시키기 위해서는 웹소켓 서버 프로그래밍에 쓰인 ESP8266 용 웹소켓 라이브러리가 필요합니다.

이전 포스팅에서 해당 라이브러리 설치 방법을 확인하시면 됩니다.

 

[ESP32/라즈베리파이] 웹소켓 프로그래밍으로 라즈베리파이와 통신하기 – (1) Server 구현하기

 

라이브러리 설치가 완료되면 아래의 코드를 구현합니다.

< ESP32 – Client >

#include <WiFi.h>
#include <WebSocketClient.h>

const char* ssid     = "USER_SSID";
const char* password = "PASSWORD";

WebSocketClient webSocketClient;
WiFiClient client;

char path[] = "/";
char host[] = "192.168.219.107";

void setup() {
    Serial.begin(115200);
    delay(10);
    
    Serial.println();
    Serial.println();
    Serial.print("Connecting to ");
    Serial.println(ssid);

    WiFi.begin(ssid, password);

    // 와이파이망에 연결
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }

    Serial.println("");
    Serial.println("WiFi connected");
    Serial.println("IP address: ");
    Serial.println(WiFi.localIP());  
    delay(5000);

    // 서버에 연결
    if (client.connect(host, 80)) {
        Serial.println("Connected");
    } else {
        Serial.println("Connection failed.");
    }
    delay(1000); 

    // 핸드셰이크
    // 이 과정에서 에러가 발생할 경우 연결되지 않음
    webSocketClient.path = path;
    webSocketClient.host = host;
    if (webSocketClient.handshake(client)) {
        Serial.println("Handshake successful");
    } else {
        Serial.println("Handshake failed.");
    }
}

void loop() {
  String data;
 
  if (client.connected()) {
    // 데이터 전송
    webSocketClient.sendData("Info to be echoed back");
    // 데이터 수신
    webSocketClient.getData(data);
    if (data.length() > 0) {
      Serial.print("Received data: ");
      Serial.println(data);
    }
 
  } else {
    Serial.println("Client disconnected.");
  }
 
  delay(3000);
}