ESP32中的Websocket

ESP32中的Websocket

创建任务,需要分配足够大的栈空间,否则会溢出

xTaskCreatePinnedToCore(websocket_task, "websocket_task", 1024 * 32, NULL, 1,&websocket_task_handler, 1);

编写任务函数,webSocketEvent注册的回调函数

WebSocketsClient webSocket;

const char *url = "/ws_device/device_id";
const char *protocol = "websocket";

void websocket_task(void *pvParameters)
{
  (void)pvParameters;
  
  webSocket.begin(host, port, url, protocol);
  webSocket.onEvent(webSocketEvent);
  webSocket.setReconnectInterval(3000);

  while (1)
  {
    webSocket.loop();
  }
}

实现回调函数的任务


void webSocketEvent(WStype_t type, uint8_t *payload, size_t length)
{
  switch (type)
  {
  case WStype_DISCONNECTED:
  {
    USE_SERIAL.printf("[WSc] Disconnected!\n");
    break;
  }
  case WStype_CONNECTED:
  {
    USE_SERIAL.printf("[WSc] Connected to url: %s\n", payload);
    break;
  }
  case WStype_TEXT:
  {
    USE_SERIAL.printf("[WSc] get text: %s\n", payload);
    deserializeJson(doc, (char *)payload);
    String peripheral = doc["peripheral"];
    if (peripheral == "flash_light")
    {
      flash_brightness = doc["brightness"];
    }
    else if (peripheral == "led")
    {
      led_brightness = doc["brightness"];
    }
    else if (peripheral == "file")
    {
      String file_name = doc["file_name"];
      USE_SERIAL.println(file_name);
      wifi.getFile(file_name);
    }
    // USE_SERIAL.println((char*)payload);
    break;
  }

  case WStype_BIN:
  {
    USE_SERIAL.printf("[WSc] get binary length: %u\n", length);
    hexdump(payload, length);
    webSocket.sendBIN(payload, length);
  }
  break;
  case WStype_ERROR:
    break;
  case WStype_FRAGMENT_TEXT_START:
    break;
  case WStype_FRAGMENT_BIN_START:
    break;
  case WStype_FRAGMENT:
    break;
  case WStype_FRAGMENT_FIN:
    break;
  case WStype_PING:
    break;
  case WStype_PONG:
    break;
  }
}

注意:回调函数在这里被限制5ms为一个时间粒度,即最快200Hz,甚至有些延迟,服务器端需要做好速度匹配

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ESP32 IDF(ESP32 IoT Development Framework)是一款用于开发ESP32芯片的官方开发框架。它提供了丰富的功能和API,使开发者能够轻松地构建各种物联网应用。 WebSocket是一种在单个TCP连接上进行全双工通信的协议,它可以在客户端和服务器之间实现实时的双向通信。在ESP32 IDF,可以使用WebSocket协议来实现与远程服务器或其他设备之间的通信。 要在ESP32 IDF使用WebSocket,首先需要在项目配置启用WebSocket组件。然后,可以使用ESP-IDF提供的WebSocket API来创建WebSocket客户端或服务器。 对于WebSocket客户端,可以使用`esp_websocket_client.h`头文件的函数来创建和管理WebSocket连接。通过调用`esp_websocket_client_start()`函数,可以连接到指定的WebSocket服务器,并通过回调函数处理接收到的数据。 对于WebSocket服务器,可以使用`esp_websocket_server.h`头文件的函数来创建和管理WebSocket服务器。通过调用`esp_websocket_server_start()`函数,可以启动WebSocket服务器,并通过回调函数处理接收到的客户端请求。 在使用ESP32 IDF进行WebSocket开发时,需要注意以下几点: 1. 配置正确的网络连接参数,以确保ESP32能够连接到网络。 2. 在代码处理WebSocket连接的建立、关闭和数据传输等事件。 3. 根据具体需求,选择合适的数据格式和协议进行通信,例如JSON、XML或自定义协议。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值