首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有BlueHost的ESP8266 WebSocket

带有BlueHost的ESP8266 WebSocket
EN

Stack Overflow用户
提问于 2019-10-14 15:28:54
回答 2查看 213关注 0票数 0

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

我想要全双向的数据传输,即从远程传感器到网站的日志数据,并控制空气净化器设置从网站到空气净化器。似乎这样做的一种方式是通过使用webSocket,我有一个与BlueHost共享主机计划,所以我现在已经购买了一个专用的ip地址和一个开放的端口,用于传入和传出连接。

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

如果任何人有使用webSockets和BlueHost的经验,我将非常感谢您的帮助。

理查德

EN

回答 2

Stack Overflow用户

发布于 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托管对于小项目也是免费的。

票数 0
EN

Stack Overflow用户

发布于 2019-10-14 17:58:16

@mr.boris

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

Arduino IDE串行监视器输出

正在连接到XXXXXXXX。WiFi已连接IP地址: 192.168.0.110已连接等待...等待..。等待..。等待..。等待..。等待..。等待..。握手失败。

BlueHost打开的端口是1025,这会是问题所在吗?

我已经把esp8266程序减到了最低限度

代码语言:javascript
复制
#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,则根本得不到任何结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58371942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档