ESP8266 网状网络
ESP8266 Mesh Network
我正在使用 ESP8266 创建网状网络,这里我使用两个 ESP-01 作为客户端,nodemcu 作为服务器。
我正在使用 painlessMesh 库。它工作正常,我将值作为 JSON 获取到服务器。但问题是现在我必须连接到本地 WiFi 连接,以 post 将此数据传输到 nodered。 painless mesh 可以创建一个 mqtt 桥来将此数据传输到 mqtt 客户端,但它必须与 WiFi 路由器处于同一通道。
我试过了,但是好像有点复杂。
有什么方法可以终止上述网格任务并使用 Arduino 的 WiFi 库连接到互联网。
// Prototype for the msg received from other nodes
void receivedCallback( uint32_t from, String &msg );
// create a task instance to send msg to client nodes
Task logServerTask(10000, TASK_FOREVER, []() {
DynamicJsonBuffer jsonBuffer;
JsonObject& msg = jsonBuffer.createObject();
msg["server"] = "logServer";
msg["nodeId"] = mesh.getNodeId();
String str;
msg.printTo(str);
mesh.sendBroadcast(str);
Serial.printf("\n");
});
void setup() {
Serial.begin(115200);
mesh.setDebugMsgTypes( ERROR | CONNECTION | S_TIME ); // set before
init()
//initialise the mesh
mesh.init( MESH_PREFIX, MESH_PASSWORD, &userScheduler, MESH_PORT,
WIFI_AP_STA, 6 );
mesh.onReceive(&receivedCallback);
mesh.stationManual(STATION_SSID, STATION_PASSWORD);
mesh.setHostname(HOSTNAME);
client.setClient(wifiClient);
client.setServer(mqtt_server,1883);
mesh.onNewConnection([](size_t nodeId) {
Serial.printf("New Connection %u\n", nodeId);
});
mesh.onDroppedConnection([](size_t nodeId) {
Serial.printf("Dropped Connection %u\n", nodeId);
});
// Add the task to the your scheduler
userScheduler.addTask(logServerTask);
logServerTask.enable();
}
void loop() {
userScheduler.execute(); // it will run mesh scheduler as well
mesh.update();
client.loop();
while(!client.connected()){
if(client.connect("ESP8266Client123456789")){
client.subscribe("thermalValues");
client.subscribe("thermalValues1");
}
else{
Serial.print("failed,rc=");
Serial.println(client.state());
delay(500);
}
}
}
//callback to the received messages from different nodes
void receivedCallback( uint32_t from, String &msg ) {
//callback received
}
最后,我没有使用任何串行 UART 就做到了。全无线。因此,我的架构由 3 个 ESP-01 和 1 个 NodeMcu ESP 12E 组成。其中 2 ESP-01 作为客户端。一个 ESP01 作为主持人,NodeMcu 作为服务器。我做了以下处理-
- 客户端将首先向主持人发送包含传感器数据的消息作为 JSON
- 版主将收到来自客户的这些消息。他们可以是 n 个客户。然后主持人会将这些消息发送到充当服务器的NodeMcu
- 服务器只会接收版主广播的消息。然后服务器将解析从主持人收到的 JSON 并提取所有传感器数据
- 你可以一次完成这个操作loop.and下面的部分在另一个循环中完成
- 连接到 WiFi 和 post 数据到云端
你可以参考这个LINK
我正在使用 ESP8266 创建网状网络,这里我使用两个 ESP-01 作为客户端,nodemcu 作为服务器。
我正在使用 painlessMesh 库。它工作正常,我将值作为 JSON 获取到服务器。但问题是现在我必须连接到本地 WiFi 连接,以 post 将此数据传输到 nodered。 painless mesh 可以创建一个 mqtt 桥来将此数据传输到 mqtt 客户端,但它必须与 WiFi 路由器处于同一通道。 我试过了,但是好像有点复杂。
有什么方法可以终止上述网格任务并使用 Arduino 的 WiFi 库连接到互联网。
// Prototype for the msg received from other nodes
void receivedCallback( uint32_t from, String &msg );
// create a task instance to send msg to client nodes
Task logServerTask(10000, TASK_FOREVER, []() {
DynamicJsonBuffer jsonBuffer;
JsonObject& msg = jsonBuffer.createObject();
msg["server"] = "logServer";
msg["nodeId"] = mesh.getNodeId();
String str;
msg.printTo(str);
mesh.sendBroadcast(str);
Serial.printf("\n");
});
void setup() {
Serial.begin(115200);
mesh.setDebugMsgTypes( ERROR | CONNECTION | S_TIME ); // set before
init()
//initialise the mesh
mesh.init( MESH_PREFIX, MESH_PASSWORD, &userScheduler, MESH_PORT,
WIFI_AP_STA, 6 );
mesh.onReceive(&receivedCallback);
mesh.stationManual(STATION_SSID, STATION_PASSWORD);
mesh.setHostname(HOSTNAME);
client.setClient(wifiClient);
client.setServer(mqtt_server,1883);
mesh.onNewConnection([](size_t nodeId) {
Serial.printf("New Connection %u\n", nodeId);
});
mesh.onDroppedConnection([](size_t nodeId) {
Serial.printf("Dropped Connection %u\n", nodeId);
});
// Add the task to the your scheduler
userScheduler.addTask(logServerTask);
logServerTask.enable();
}
void loop() {
userScheduler.execute(); // it will run mesh scheduler as well
mesh.update();
client.loop();
while(!client.connected()){
if(client.connect("ESP8266Client123456789")){
client.subscribe("thermalValues");
client.subscribe("thermalValues1");
}
else{
Serial.print("failed,rc=");
Serial.println(client.state());
delay(500);
}
}
}
//callback to the received messages from different nodes
void receivedCallback( uint32_t from, String &msg ) {
//callback received
}
最后,我没有使用任何串行 UART 就做到了。全无线。因此,我的架构由 3 个 ESP-01 和 1 个 NodeMcu ESP 12E 组成。其中 2 ESP-01 作为客户端。一个 ESP01 作为主持人,NodeMcu 作为服务器。我做了以下处理-
- 客户端将首先向主持人发送包含传感器数据的消息作为 JSON
- 版主将收到来自客户的这些消息。他们可以是 n 个客户。然后主持人会将这些消息发送到充当服务器的NodeMcu
- 服务器只会接收版主广播的消息。然后服务器将解析从主持人收到的 JSON 并提取所有传感器数据
- 你可以一次完成这个操作loop.and下面的部分在另一个循环中完成
- 连接到 WiFi 和 post 数据到云端
你可以参考这个LINK