Arduino nano ESP32 崩溃原因不明

问题描述 投票:0回答:1

第一次发帖,总体来说我对编码也很陌生。

问题就在这里。我为 Arduino uno R4 编写了一些代码,每分钟向 4 个 Arduino Nano esp32-s3 发送一个 UDP 数据包。 Nanos 应返回 UDP 请求,其中包含包含从传感器读取的温度和湿度的数据包。代码在前 13 分钟左右运行良好,然后 Nano 冻结。

Arduino Uno R4 每分钟向 Nano 发送一个数据包。数据包的全部内容是“Temp?”。 我注意到一些奇怪的事情是冻结经常发生在 UDP 请求之间。这让我认为无论问题是什么,UPD 数据包的处理都不会发生。

我已经检查过的事情。

  • 内存泄漏。每次发送 UDP 请求并且没有更改请求时都会打印出可用的堆栈和堆。
  • 网络问题。确认 UDP 请求仍在通过我的路由器发送。串行打印输出也不会冻结。
  • 设备故障。已验证其他 Nano 上也出现同样的问题。

我有点陷入困境,所以任何帮助将不胜感激。


#include <DHT11.h>
#include <SPI.h>
#include <WiFi.h>
#include <WiFiUdp.h>


int CNT = 0;
int ID = 2;
DHT11 dht11(2);
char SSID[] = "IOT";
char pass[] = "SSN690am!";
unsigned int localPort = 2390; 
char packetBuffer[255];
char qryTemp[] = "Temp?";
WiFiUDP Udp;


void setup() {
    // Initialize serial communication to allow debugging and data readout.
    // Using a baud rate of 9600 bps.
    Serial.begin(9600);
    // Connect to WPA/WPA2 network:
    WiFi.begin(SSID, pass);
    Udp.begin(localPort);
}

void loop() {
    int temp = 0;
    int humidity = 0;
    int result = dht11.readTemperatureHumidity(temp, humidity);
    

  int packetSize = Udp.parsePacket();
  Serial.print(packetSize);

  if (packetSize) {
    Serial.printf("\nStack:%d,Heap:%lu\n", uxTaskGetStackHighWaterMark(NULL), (unsigned long)ESP.getFreeHeap());

    Serial.print("MSG COUNT:");
    Serial.println(CNT);
    CNT++;

    Serial.print("Received packet of size ");

    Serial.println(packetSize);

    Serial.print("From ");

    Serial.print(Udp.remoteIP());

    Serial.print(", port ");

    Serial.println(Udp.remotePort());

    // read the packet into packetBufffer

    int len = Udp.read(packetBuffer, 255);

    if (len > 0) {

      packetBuffer[len] = 0;

    }

    Serial.println("Contents:");

    Serial.println(packetBuffer);

    if(int(packetBuffer[0]) == 84 and int(packetBuffer[1]) == 101 and int(packetBuffer[2]) == 109 and int(packetBuffer[3]) == 112 and int(packetBuffer[4]) == 63){

    // send a reply, to the IP address and port that sent us the packet we received

    Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());

    Udp.write(char(ID));
    Udp.write(char(temp));
    Udp.write(char(humidity));

    Udp.endPacket();
    Udp.flush();
    }
  }

}
arduino udp esp32 freeze arduino-c++
1个回答
0
投票

问题解决了!!

每次循环查询 Dht11 传感器的温度和湿度值都会导致冻结。我猜测它使 I2C 总线过载并导致崩溃。

无论哪种方式,当代码更改为仅在收到 UDP 请求时查询传感器时,都解决了问题。

© www.soinside.com 2019 - 2024. All rights reserved.