使用DHT22实施NodeMCU 8266时出错

发布于 2025-01-26 11:43:32 字数 3019 浏览 3 评论 0原文

我在带有MacOS Monterey的Mac中实现了一个带有温度传感器(DHT22)的API REST服务器,当我在简单的循环中阅读温度和湿度时,我没有任何问题,但是实现看起来像这样,

#include <DHT.h>
#include <DHT_U.h>
float hum, temp;

DHT dht(D1, DHT22);

void setup() {
    Serial.begin(115200);
    dht.begin();
}

void loop() {
    temp = dht.readTemperature();
    hum = dht.readHumidity();
    Serial.println("Temperatura: " + String(temp) + " humedad: " + String(hum));
}

但是当我实现了服务器API并尝试读取温度以返回该信息。IDE返回不可能读取错误的错误,

User exception (panic/abort/assert)
--------------- CUT HERE FOR EXCEPTION DECODER ---------------

Panic core_esp8266_main.cpp:137 __yield

>>>stack>>>

ctx: sys
sp: 3fffeab0 end: 3fffffb0 offset: 0000
3fffeab0:  5c93ba25 b85ced93 00000000 40102074  
3fffeac0:  000000fe 00000000 00000000 00000000  
3fffead0:  00000000 00000000 00000000 3ffeee38  
3fffeae0:  00000000 3ffe8a04 4bc6a7f0 3ffeec2c  
...
...
3fffffa0:  feefeffe feefeffe feefeffe 40207f46  
<<<stack<<<

--------------- CUT HERE FOR EXCEPTION DECODER ---------------

 ets Jan  8 2013,rst cause:2, boot mode:(3,7)

load 0x4010f000, len 3460, room 16 
tail 4
chksum 0xcc
load 0x3fff20b8, len 40, room 4 
tail 4
chksum 0xc9
csum 0xc9
v0004a0b0
~ld

的代码是

#include <DHT.h>
#include <DHT_U.h>
#include <ESP8266WiFi.h>
#include <ESPAsyncWebServer.h>
#include <FS.h>

const char* ssid = "xxxxxxx";
const char* password = "xxxxxxx";
float hum, temp;

DHT dht(D1, DHT22);

void getSensorInformation(AsyncWebServerRequest *request)
{
  Serial.println("2...");
  temp = dht.readTemperature();
  Serial.println("1...");
  hum = dht.readHumidity();
  String message = "Temperatura: " + String(temp) + " humedad: " + String(hum);
  Serial.println(message);
  request->send(200, "text/plain", message);
}

void getIpAddress(AsyncWebServerRequest *request) {
  String ip = WiFi.localIP().toString();
  
  String message = "ip: " + ip;
  Serial.println(message);
  request->send(200, "text/plain", message);
}

AsyncWebServer server(80);

void notFound(AsyncWebServerRequest *request) {
   request->send(404, "text/plain", "Not found");
}

void InitServer()
{
   server.on("/ip", HTTP_GET, getIpAddress);
   server.on("/info", HTTP_GET, getSensorInformation);
   
   server.onNotFound(notFound);

   server.begin();
   Serial.println("HTTP server started");
}

void ConnectWiFi_STA() {
  WiFi.begin(ssid, password);
  Serial.println("Connecting...");
  while(WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.print("Connected to WiFi network with IP Address: ");
  Serial.println(WiFi.localIP());
}

void setup() {
  Serial.begin(115200);
  ConnectWiFi_STA();

  dht.begin();

  InitServer();
}

void loop() {
}

创建两个方法,第一个getipAddress,它返回了我的计算机的IP和另一个返回传感器数据,第一种方法,但是第二个打印直到2 ...,所以我认为这行中的失败temp = dht.readTemperature();但是我不知道为什么

PS:对不起我的英语我的主要语言是西班牙语。

I implemented a nodemcu 8266 as a api rest server with a temperature sensor (DHT22) in a Mac with macOS Monterey, when I read the temperature and humidity in a simple loop I don't have any problem, the implementation looks like this

#include <DHT.h>
#include <DHT_U.h>
float hum, temp;

DHT dht(D1, DHT22);

void setup() {
    Serial.begin(115200);
    dht.begin();
}

void loop() {
    temp = dht.readTemperature();
    hum = dht.readHumidity();
    Serial.println("Temperatura: " + String(temp) + " humedad: " + String(hum));
}

but when I implement a server api and try to read temperature to return that information the IDE return an error impossible to read

like this

User exception (panic/abort/assert)
--------------- CUT HERE FOR EXCEPTION DECODER ---------------

Panic core_esp8266_main.cpp:137 __yield

>>>stack>>>

ctx: sys
sp: 3fffeab0 end: 3fffffb0 offset: 0000
3fffeab0:  5c93ba25 b85ced93 00000000 40102074  
3fffeac0:  000000fe 00000000 00000000 00000000  
3fffead0:  00000000 00000000 00000000 3ffeee38  
3fffeae0:  00000000 3ffe8a04 4bc6a7f0 3ffeec2c  
...
...
3fffffa0:  feefeffe feefeffe feefeffe 40207f46  
<<<stack<<<

--------------- CUT HERE FOR EXCEPTION DECODER ---------------

 ets Jan  8 2013,rst cause:2, boot mode:(3,7)

load 0x4010f000, len 3460, room 16 
tail 4
chksum 0xcc
load 0x3fff20b8, len 40, room 4 
tail 4
chksum 0xc9
csum 0xc9
v0004a0b0
~ld

My code is

#include <DHT.h>
#include <DHT_U.h>
#include <ESP8266WiFi.h>
#include <ESPAsyncWebServer.h>
#include <FS.h>

const char* ssid = "xxxxxxx";
const char* password = "xxxxxxx";
float hum, temp;

DHT dht(D1, DHT22);

void getSensorInformation(AsyncWebServerRequest *request)
{
  Serial.println("2...");
  temp = dht.readTemperature();
  Serial.println("1...");
  hum = dht.readHumidity();
  String message = "Temperatura: " + String(temp) + " humedad: " + String(hum);
  Serial.println(message);
  request->send(200, "text/plain", message);
}

void getIpAddress(AsyncWebServerRequest *request) {
  String ip = WiFi.localIP().toString();
  
  String message = "ip: " + ip;
  Serial.println(message);
  request->send(200, "text/plain", message);
}

AsyncWebServer server(80);

void notFound(AsyncWebServerRequest *request) {
   request->send(404, "text/plain", "Not found");
}

void InitServer()
{
   server.on("/ip", HTTP_GET, getIpAddress);
   server.on("/info", HTTP_GET, getSensorInformation);
   
   server.onNotFound(notFound);

   server.begin();
   Serial.println("HTTP server started");
}

void ConnectWiFi_STA() {
  WiFi.begin(ssid, password);
  Serial.println("Connecting...");
  while(WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.print("Connected to WiFi network with IP Address: ");
  Serial.println(WiFi.localIP());
}

void setup() {
  Serial.begin(115200);
  ConnectWiFi_STA();

  dht.begin();

  InitServer();
}

void loop() {
}

I create two methods, first getIpAddress that returns the IP of my computer and another that returns the sensor data, first method it works, but the second print until 2..., so I think it failure in this line temp = dht.readTemperature(); but I don't know why

PS: Sorry about my english my main language is spanish.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文