在过去的18个月里,我成功地开发了一个空气质量监测系统,可以控制家里的空气净化器,我还使用Blynk平台进行远程监测和控制。现在,我想将这个项目迁移到我自己的网站上,我有自己的网站,使用标准的HTTP命令,我现在将所有数据记录到数据库中,并绘制随时间变化的数据。
我想要全双向的数据传输,即从远程传感器到网站的日志数据,并控制空气净化器设置从网站到空气净化器。似乎这样做的一种方式是通过使用webSocket,我有一个与BlueHost共享主机计划,所以我现在已经购买了一个专用的ip地址和一个开放的端口,用于传入和传出连接。
在互联网和许多论坛上搜索了几个小时后,我努力寻找一个如何实现这个webSocket系统的例子。所有的例子似乎都是针对本地服务器的,我找不到任何显示需要在网站端包含什么才能获得成功连接的内容。
如果任何人有使用webSockets和BlueHost的经验,我将非常感谢您的帮助。
理查德
发布于 2019-10-14 16:15:18
它依赖于你将使用什么语言作为后端来实现websocket连接,无论你选择什么托管。
如果你想使用PHP,它是非常简单的,因为在这种情况下,没有特定的覆盖在websocket协议之上,不像NodeJS和其他的套接字。This example可能会帮助你开始,这是我在5分钟内搜索到的。如果你对websocket的实现感到困惑,首先通过简单的例子来尝试websocket for web是一个好主意。
如果你想使用NodeJS,你可能想要使用现有的库something like this。
在Java的情况下,SockJS通常开箱即用,作为客户端的标准库。因此,如果您有足够的技能或尝试配置简单的websocket连接,那么您必须找到或制作类似的东西,但对于C++。
我曾使用Firebase库与ESP8266进行双向通信,因为它对于小项目来说非常简单且免费。这种方法的主要好处是你不需要维护你的后端,因为你已经配置了连接和业务逻辑,所以它可以全天候工作。可能是this is what are you looking for。此外,如果你需要一种管理界面,你也可以在Firebase云上托管静态页面。Heroku托管对于小项目也是免费的。
发布于 2019-10-14 17:58:16
@mr.boris
非常感谢您的快速回复和帮助。我已经使用了几个例子,就像你建议的第一个例子,问题总是在于我无法通过“握手”例程。
Arduino IDE串行监视器输出
正在连接到XXXXXXXX。WiFi已连接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() {
}这里的端口号是80 (WEBSOCKET_HOST,80),如果我将其更改为1025,则根本得不到任何结果。
https://stackoverflow.com/questions/58371942
复制相似问题