Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带BlueHost的ESP8266 WebSocket_Websocket_Esp8266 - Fatal编程技术网

带BlueHost的ESP8266 WebSocket

带BlueHost的ESP8266 WebSocket,websocket,esp8266,Websocket,Esp8266,在过去的18个月里,我成功地开发了一个空气质量监测系统,可以控制我家的空气净化器,我还使用Blynk平台进行远程监测和控制。现在,我想把这个项目迁移到我自己的网站上,我有自己的网站,我现在使用标准的HTTP命令将所有数据记录到数据库中,并随时间绘制数据图 我想要完全双向数据传输,即从远程传感器到网站的日志数据,并控制从网站到空气净化器的空气净化器设置。这样做的一种方法是使用webSocket,我与BlueHost有一个共享托管计划,因此我现在为传入和传出连接购买了一个专用ip地址和一个开放的端口

在过去的18个月里,我成功地开发了一个空气质量监测系统,可以控制我家的空气净化器,我还使用Blynk平台进行远程监测和控制。现在,我想把这个项目迁移到我自己的网站上,我有自己的网站,我现在使用标准的HTTP命令将所有数据记录到数据库中,并随时间绘制数据图

我想要完全双向数据传输,即从远程传感器到网站的日志数据,并控制从网站到空气净化器的空气净化器设置。这样做的一种方法是使用webSocket,我与BlueHost有一个共享托管计划,因此我现在为传入和传出连接购买了一个专用ip地址和一个开放的端口

在互联网和许多论坛上搜寻了好几个小时之后,我正在努力寻找一个如何实现这个webSocket系统的例子。所有的例子似乎都是针对本地服务器的,我找不到任何东西显示需要在网站端包含哪些内容才能获得成功的连接

如果有人对WebSocket和BlueHost有任何经验,我将感谢您的帮助


Richard

这取决于您将使用何种语言作为后端来实现websocket连接,无论您选择何种主机

如果您想使用PHP,这是非常简单的,因为在这种情况下,websocket协议的ontop没有特定的覆盖,这与NodeJ和其他协议的socketio不同。可以帮你开始我在5分钟的搜索中找到的。如果您对websocket的实现感到困惑,那么最好首先通过简单的示例进行尝试

如果您想使用NodeJS,可能需要使用现有的库

对于Java,SockJS通常作为客户机的标准库使用。所以,如果你有足够的技能,或者尝试配置简单的WebSoSt连接,就必须找到或制作类似的东西,或者为C++配置简单的WebSoC连接。 我使用该库与ESP8266进行双向通信,因为它对于小项目来说非常简单和免费。这种方法的主要好处是,您不需要维护后端,因为您已经配置了连接和业务逻辑,所以它可以全天候工作。可能如果您需要某种管理界面,还可以在Firebase云上托管静态页面。Heroku托管对于小型项目也是免费的。

@mr.boris

非常感谢您的快速回复和帮助。 我一直在使用几个例子,比如你建议的第一个例子,问题总是在于我无法通过“握手”程序

Arduino IDE串行监视器输出

连接到XXXXXXXX . 无线上网 IP地址: 192.168.0.110 有联系的 等待。。。 等待。。。 等待。。。 等待。。。 等待。。。 等待。。。 等待。。。 握手失败

BlueHost打开的端口是1025,这可能是问题所在吗

我已将esp8266程序减到最低限度

#include <ESP8266WiFi.h>
#include <WebSocketClient.h>

char* WEBSOCKET_PATH = "/webSocket_02.php";
char* WEBSOCKET_HOST = "xxx.com";
char* WIFI_SSID      = "xxxxxxxxx";
char* WIFI_PASSWORD  = "xxxxxxxxxx";

WebSocketClient webSocketClient;
WiFiClient client;

void setup() {
  Serial.begin(115200);
  delay(10);
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(WIFI_SSID);
  WiFi.mode(WIFI_STA);
  WiFi.begin(WIFI_SSID, WIFI_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(WEBSOCKET_HOST,80)) {
    Serial.println("Connected");
  }
  else {
    Serial.println("Connection failed.");
  }
  webSocketClient.path = WEBSOCKET_PATH;
  webSocketClient.host = WEBSOCKET_HOST;
  if (webSocketClient.handshake(client)) {
    Serial.println("Handshake successful");
  }
  else {
    Serial.println("Handshake failed.");
  }
}
void loop() {
}
#包括
#包括
char*WEBSOCKET_PATH=“/WEBSOCKET_02.php”;
char*WEBSOCKET\u HOST=“xxx.com”;
char*WIFI_SSID=“xxxxxxxxx”;
char*WIFI_PASSWORD=“xxxxxxxxx”;
WebSocketClient WebSocketClient;
无线客户端;
无效设置(){
序列号开始(115200);
延迟(10);
Serial.println();
Serial.println();
串行打印(“连接到”);
Serial.println(WIFI_SSID);
WiFi.模式(WiFi_STA);
WiFi.begin(WiFi\u SSID、WiFi\u密码);
while(WiFi.status()!=WL_已连接){
延迟(500);
连续打印(“.”);
}
Serial.println(“”);
Serial.println(“WiFi连接”);
Serial.println(“IP地址:”);
Serial.println(WiFi.localIP());
延迟(5000);
if(client.connect(WEBSOCKET_主机,80)){
Serial.println(“已连接”);
}
否则{
Serial.println(“连接失败”);
}
webSocketClient.path=WEBSOCKET\u路径;
webSocketClient.host=WEBSOCKET\u主机;
if(webSocketClient.handshake(客户端)){
Serial.println(“握手成功”);
}
否则{
Serial.println(“握手失败”);
}
}
void循环(){
}
这里的端口号是80(WEBSOCKET_主机,80),如果我将其更改为1025,则根本不会得到任何结果