首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无线温湿度阅读器和带有NEXTION显示器的连接网关,均配有Arduino esp8266

无线温湿度阅读器和带有NEXTION显示器的连接网关,均配有Arduino esp8266
EN

Stack Overflow用户
提问于 2022-07-11 07:02:45
回答 1查看 16关注 0票数 0

我试图制作一个无线温湿度阅读器和一个带有NEXTION显示器的连接网关,两者都带有Arduino esp8266。我从类似的项目中提取了代码。似乎在选择IP/网关地址配置时存在一些问题。网关串行监视器窗口(Arduino IDE)中没有出现温湿度值。

下面包括网关和传感器节点的代码。

网关代码:

代码语言:javascript
复制
#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);
}

传感器节点代码:

代码语言:javascript
复制
#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);
}
EN

回答 1

Stack Overflow用户

发布于 2022-07-11 08:38:45

我现在修好了。

我所做的改变是:

网关代码中的

代码语言:javascript
复制
client.connect(server, 80);

传感器节点代码中的

代码语言:javascript
复制
IPAddress server(192, 168, 1,29);//IP address of the gateway from its serial monitor

完整的工作守则:

网关代码:

代码语言:javascript
复制
#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);
}

传感器节点代码:

代码语言:javascript
复制
#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);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72934833

复制
相关文章

相似问题

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