Mr.Monologue. 2021-03-31 21:12 采纳率: 0%
浏览 101

arduino+websocket+esp8266:为什么beginSSL会报错?

源代码:(引用的别人的)

#include <ESP8266WiFi.h>
#include <SocketIoClient.h>

const char* ssid = "tju2106";
const char* pwd = "tju21062106";
const char* HOST = "39.105.118.119";  // 請改成你的電腦IP位址
const int   PORT = 5438;             // 請改成你的Node.js設定的埠號

unsigned long previousMillis = 0; 
long interval = 5000;                // 間隔時間,5秒。

SocketIoClient socket;

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, pwd);   // 連接Wi-Fi無線網路
  Serial.println();
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }

  // 連線到伺服器時,顯示“Connected to server.”。
  socket.on("connect", [](const char * payload, size_t len) {
    Serial.println("Connected to server.");
  });
  // 收到“atime”事件時,顯示收到的資料。
  socket.on("atime", [](const char * payload, size_t len) {
    Serial.printf("got message: %s\n", payload);
});
  socket.begin(HOST, PORT);  // 連線到Node.js的伺服器
}

void loop() {
  socket.loop();

  unsigned long currentMillis = millis();
  
  // 每隔5秒送出“atime”事件,
  // 以及 {"msg":"Time please?"} 資料。
  if (currentMillis - previousMillis > interval) {
    previousMillis = currentMillis; 
    socket.emit("atime", "{\"msg\":\"Time please?\"}");
  }
}

报错::

Arduino:1.8.13 (Windows Store 1.8.42.0) (Windows 10), 开发板:"Generic ESP8266 Module, 80 MHz, Flash, Disabled, All SSL ciphers (most compatible), ck, 26 MHz, 40MHz, DOUT (compatible), 512K (no SPIFFS), 2, nonos-sdk 2.2.1 (legacy), v2 Lower Memory, Disabled, None, Only Sketch, 115200"
C:\Users\pingp\Documents\Arduino\libraries\SocketIoClient\SocketIoClient.cpp: In member function 'void SocketIoClient::beginSSL(const char*, int, const char*, const char*)':
C:\Users\pingp\Documents\Arduino\libraries\SocketIoClient\SocketIoClient.cpp:47:50: error: invalid conversion from 'const char*' to 'const uint8_t* {aka const unsigned char*}' [-fpermissive]
  _webSocket.beginSSL(host, port, url, fingerprint);
                                                  ^
In file included from C:\Users\pingp\Documents\Arduino\libraries\SocketIoClient/SocketIoClient.h:7:0,
                 from C:\Users\pingp\Documents\Arduino\libraries\SocketIoClient\SocketIoClient.cpp:1:
C:\Users\pingp\Documents\Arduino\libraries\WebSockets\src/WebSocketsClient.h:50:10: error:   initializing argument 4 of 'void WebSocketsClient::beginSSL(const char*, uint16_t, const char*, const uint8_t*, const char*)' [-fpermissive]
     void beginSSL(const char * host, uint16_t port, const char * url = "/", const uint8_t * fingerprint = NULL, const char * protocol = "arduino");
          ^
exit status 1
为开发板 Generic ESP8266 Module 编译时出错。


 

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-23 19:15
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在使用Arduino和ESP8266进行WebSocket通信时,出现error: invalid conversion from 'const char*' to 'const uint8_t* {aka const unsigned char*}'错误的原因可能是因为你在开始SSL连接时传递了一个字符串参数。为了修复这个问题,你需要确保你正在调用beginSSL()函数来设置SSL选项,并且传递的是一个指针数组,而不是一个字符串。

    以下是修改后的代码示例:

    #include <ESP8266WiFi.h>
    #include <SocketIoClient.h>
    #include <WebSocketsClient.h>
    
    const char* ssid = "tju2106";
    const char* pwd = "tju21062106";
    const char* HOST = "39.105.118.119"; // 請改成你的電腦IP位址
    const int PORT = 5438; // 請改成你的Node.js設定的埠號
    
    const char* protocol = "ws";
    const char* path = "/api/socket.io";
    
    SocketIoClient socket;
    WebSocketsClient ws;
    
    void setup() {
      Serial.begin(115200);
      WiFi.begin(ssid, pwd);
      Serial.println();
      while (WiFi.status() != WL_CONNECTED) {
        Serial.print(".");
        delay(500);
      }
      socket.on("connect", [](const char * payload, size_t len) {
        Serial.println("Connected to server.");
      });
      socket.on("atime", [](const char * payload, size_t len) {
        Serial.printf("got message: %s\n", payload);
      });
      ws.on("connect", [](const char * payload, size_t len) {
        Serial.println("Connected to server.");
      });
      ws.on("atime", [](const char * payload, size_t len) {
        Serial.printf("got message: %s\n", payload);
      });
      ws.begin(protocol, HOST, PORT);
    }
    
    void loop() {
      ws.loop();
      unsigned long currentMillis = millis();
    
      if (currentMillis - previousMillis > interval) {
        previousMillis = currentMillis;
        socket.emit("atime", "{\"msg\":\"Time please?\"}");
      }
    }
    

    在这个例子中,我将beginSSL()函数替换为begin()函数,同时将传入的参数从字符串更改为指针数组。这样,就可以避免error: invalid conversion错误了。

    评论

报告相同问题?

悬赏问题

  • ¥15 esp32驱动GC9A01循环播放视频
  • ¥15 惠普360g9的最新bios
  • ¥15 配置hadoop时start-all.sh老是启动失败
  • ¥30 这个功能用什么软件发合适?
  • ¥60 微信小程序,取消订单,偶尔订单没有改变状态
  • ¥15 用pytorch实现PPO算法
  • ¥15 关于调制信号的星座图?
  • ¥30 前端传参时,后端接收不到参数
  • ¥15 这是有什么问题吗,我检查许可证了但是显示有呢
  • ¥15 机器学习预测遇到的目标函数问题