我试图制作一个无线温湿度阅读器和一个带有NEXTION显示器的连接网关,两者都带有Arduino esp8266。我从类似的项目中提取了代码。似乎在选择IP/网关地址配置时存在一些问题。网关串行监视器窗口(Arduino IDE)中没有出现温湿度值。
下面包括网关和传感器节点的代码。
网关代码:
#include <ESP8266WiFi.h>
float temps;
float hums;
String request;
String data;
char ssid[] = "my/net";
char pass[] = "my/pass";
WiFiServer server(80);
IPAddress ip(192, 168, 1, 29);
IPAddress gateway(192, 168, 1, 80);
IPAddress subnet(255, 255, 255, 0);
void setup() {
Serial.begin(115200);
WiFi.config(ip, gateway, subnet);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("Connected, IP address: ");
Serial.println(WiFi.localIP());
server.begin();
}
void loop() {
WiFiClient client = server.available();
if (client) {
if (client.connected()) {
request = client.readStringUntil('\r');
hums = request.toFloat();
client.flush();
request = client.readStringUntil('\r');
temps = request.toFloat();
client.flush();
}
client.stop();
NextionData();
}
}
void NextionData() {
data = "temps.txt=\"" + String(temps, 1) + "\"";
Serial.print(data);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
data = "hums.txt=\"" + String(hums, 1) + "\"";
Serial.print(data);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
}传感器节点代码:
#include "Wire.h"
#include "SparkFunBME280.h"
#include <ESP8266WiFi.h>
char ssid[] = "my/net";
char pass[] = "my/pass";
IPAddress server(192, 168, 1,28);
WiFiClient client;
BME280 mySensor;
float hums;
float temps;
void setup()
{
Serial.begin(115200);
Wire.begin();
Wire.setClock(400000);
mySensor.setI2CAddress(0x76);
mySensor.beginI2C();
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("Connected, IP address: ");
Serial.println(WiFi.localIP());
}
void loop(){
hums = mySensor.readFloatHumidity();
temps = mySensor.readTempC();
Serial.print("Humidity: ");
Serial.print(hums, 2);
Serial.print(" Temp: ");
Serial.print(temps, 2);
Serial.println();
client.connect(server, 29);
client.println(hums,2);
client.flush();
delay(500);
client.println(temps,2);
client.flush();
delay(2000);
}发布于 2022-07-11 08:38:45
我现在修好了。
我所做的改变是:
网关代码中的:
client.connect(server, 80);传感器节点代码中的:
IPAddress server(192, 168, 1,29);//IP address of the gateway from its serial monitor完整的工作守则:
网关代码:
#include <ESP8266WiFi.h>
float temps;
float hums;
String request;
String data;
char ssid[] = "my/net";
char pass[] = "my/pass";
WiFiServer server(80);
IPAddress ip(192, 168, 1, 29);
IPAddress gateway(192, 168, 1, 80);
IPAddress subnet(255, 255, 255, 0);
void setup() {
Serial.begin(115200);
WiFi.config(ip, gateway, subnet);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("Connected, IP address: ");
Serial.println(WiFi.localIP());
server.begin();
}
void loop() {
WiFiClient client = server.available();
if (client) {
if (client.connected()) {
request = client.readStringUntil('\r');
hums = request.toFloat();
client.flush();
request = client.readStringUntil('\r');
temps = request.toFloat();
client.flush();
}
client.stop();
NextionData();
}
}
void NextionData() {
data = "temps.txt=\"" + String(temps, 1) + "\"";
Serial.print(data);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
data = "hums.txt=\"" + String(hums, 1) + "\"";
Serial.print(data);
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);
}传感器节点代码:
#include "Wire.h"
#include "SparkFunBME280.h"
#include <ESP8266WiFi.h>
char ssid[] = "my/net";
char pass[] = "my/pass";
IPAddress server(192, 168, 1,29);//IP address of the gateway from its serial monitor
WiFiClient client;
BME280 mySensor;
float hums;
float temps;
void setup()
{
Serial.begin(115200);
Wire.begin();
Wire.setClock(400000);
mySensor.setI2CAddress(0x76);
mySensor.beginI2C();
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("Connected, IP address: ");
Serial.println(WiFi.localIP());
}
void loop(){
hums = mySensor.readFloatHumidity();
temps = mySensor.readTempC();
Serial.print("Humidity: ");
Serial.print(hums, 2);
Serial.print(" Temp: ");
Serial.print(temps, 2);
Serial.println();
client.connect(server, 80);
client.println(hums,2);
client.flush();
delay(500);
client.println(temps,2);
client.flush();
delay(2000);
}https://stackoverflow.com/questions/72934833
复制相似问题