Websockets ESP8266

时间:2015-12-02 18:32:46

标签: websocket at-command esp8266

我正在尝试使用ESP8266中的websocket将数据发送到服务器,但握手不起作用。

我发送以下AT命令序列:

AT+RST
AT+CWMODE=1
AT+CIPMODE=0
AT+CIPMUX=1
AT+CWJAP="ssid_my_network","password"
AT+CIPSTART=4,"TCP","ip_server",port
AT+CIPSEND=4,data_lenght

在这一刻,我发送标题:

GET ws:ip_server HTTP/1.1\r\n
Host: ip_server\r\n
Upgrade: websocket\r\n
Connection: Upgrade\r\n
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\n
Sec-WebSocket-Version: 13\r\n

但是,我没有收到服务器的回复。我做错了什么?

3 个答案:

答案 0 :(得分:1)

HTTP标头必须以空行结尾。您需要发送另一个\r\n

GET ws:ip_server HTTP/1.1\r\n
Host: ip_server\r\n
Upgrade: websocket\r\n
Connection: Upgrade\r\n
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\n
Sec-WebSocket-Version: 13\r\n
\r\n

答案 1 :(得分:1)

我认为您可以尝试使用WiFiClient而不是WebSocket(如this

上面链接中的一些代码发送了一个http GET请求:

// Perform an HTTP GET request to a remote page
bool getPage() {

// Attempt to make a connection to the remote server
  if ( !client.connect(http_site, http_port) ) {
    return false;
  }

  // Make an HTTP GET request
  client.println("GET /index.html HTTP/1.1");
  client.print("Host: ");
  client.println(http_site);
  client.println("Connection: close");
  client.println();

  return true;
}

答案 2 :(得分:1)

尝试在握手GET请求后删除ws uri。如果您没有路径,请将其设为“/”。此外,如果您的websocket服务器没有从80服务,您需要在主机属性后的标题中表示它。

我们可能会说同伴之间可能存在版本不匹配,但没有答案。所以我们有一个很小的隐藏问题,如代理等。