Сброс WDT на ESP32
У меня есть проект, в котором используются GY-53 BMP180 и ESP32.
Каждый раз, когда я подключаю ESP32 к USB после загрузки, я получаю эту ошибку:
22:27:27.352 -> rst:0x8 (TG1WDT_SYS_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
22:27:27.394 -> configsip: 0, SPIWP:0xee
22:27:27.394 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
22:27:27.394 -> mode:DIO, clock div:1
22:27:27.394 -> load:0x3fff0030,len:4688
22:27:27.394 -> load:0x40078000,len:15460
22:27:27.394 -> ho 0 tail 12 room 4
22:27:27.394 -> load:0x40080400,len:4
22:27:27.394 -> load:0x40080404,len:3196
22:27:27.394 -> entry 0x400805a4
Это мой код:
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP085_U.h>
#define pwm 2
#define ledPin 5
#define buttonPin 4
#define ledPin3 8
int dastresi = 0;
int buttonState = 0;
int def = 0;
float distance = 0;
float a = 0;
int wap = 0;
int rap = 0;
int vaz = 0;
int vaz2 = 0;
int ekhtelaf = 0;
int b = 0;
int cy = 1;
int c = 0;
int r = 0;
int w = 0;
int d = 0;
int value = 0;
int rate_p = 0;
int vaz_rate = 0;
float rate = 0;
int comp = 0;
Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(10085);
void setup() {
pinMode(pwm, INPUT);
pinMode(ledPin, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(buttonPin, INPUT);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin, LOW);
Serial.begin(115200);
bmp.begin();
}
void loop() {
sensors_event_t event;
bmp.getEvent(&event);
distance = pulseIn(pwm, HIGH) / 10;
ekhtelaf = def - distance;
if (ekhtelaf >= 3) {
comp++;
//dastresi = 1;
}/* else if(ekhtelaf*-1>=3) {
}*/
buttonState = digitalRead(buttonPin);
while (Serial.available()) {
value = Serial.read();
if (value == '1') {
w = r = rap = wap = comp = dastresi = 0;
}
}
if (b == 0) {
a = event.pressure;
b = 1;
}
String output = "";
if (buttonState == HIGH) {
output += "A";
} else {
output += "a";
}
output += "I";
if (distance <= 120 && distance > 95) {
output += "B";
if (c == 1) {
r++;
c = 0;
}
} else {
output += "b";
}
output += "I";
if (distance <= 90) {
output += "C";
if (d == 1) {
w++;
d = 0;
}
} else {
output += "c";
}
output += "I";
if (distance > 130) {
c = 1;
d = 1;
}
if (event.pressure < a + 1) {
vaz = vaz2 = 0;
}
if (event.pressure > a + 2) {
if (event.pressure < a + 5.5) {
output += "D";
if (vaz == 0) {
rap++;
vaz = 1;
}
} else {
output += "d";
}
}else {
output += "d";
}
output += "I";
if (event.pressure > a + 5.5) {
output += "E";
if (vaz2 == 0) {
wap++;
vaz2 = 1;
}
} else {
output += "e";}
output += "I";
output += String(int(r*1.12))+ "I";
output += String(w) + "I";
output += String(rap - wap) + "I";
output += String(wap) + "I";
output += String(distance) + "I";
output += String(event.pressure - a) + "I";
output += String(int(comp*1.2)) + "I";
Serial.println(output);
def = distance;
delay(50);
}
@Amirali Benvidi, 👍-1
Обсуждение1 ответ
Судя по вашему коду, этого было достаточно, чтобы вызвать rst:0x8 (TG1WDT_SYS_RESET)
#define ledPin3 8
void setup() {
pinMode(ledPin3, OUTPUT);
}
void loop() {}
В < a href="https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/peripherals/gpio.html">документации GPIO показано:
| GPIO | Аналоговая функция | RTC GPIO | Комментарии |
|---|---|---|---|
| GPIO8 | SPI0/1 |
ниже которого (выделено мной):
SPI0/1: GPIO6-11 и GPIO16-17 обычно подключаются к флэш-памяти SPI и PSRAM, интегрированным в модуль, и поэтому не должны использоваться для других целей.
Вам нужно выбрать другой вывод, избегая выводов SPI0/1 и, возможно, выводов обвязки. Всё это упомянуто по ссылке выше. Прочитайте комментарии к таблице и примечания под ней.
TG1WDT_SYS_RESET сообщает, что сброс был вызван тайм-аутом сторожевого таймера. Короче говоря, вмешательство в работу контакта ввода-вывода флэш-памяти помешало чипу выполнить код, который должен был и должен был обслуживать сторожевой таймер.
- Контакты ESP32 не помещаются в беспаянную макетную плату
- После восстановления смещения BNO055 на датчике все значения калибровки равны 0.
- Увеличить частоту дискретизации на плате ESP32
- Adafruit esp32 Feather не удалось скомпилировать
- Значения кватернионов из BNO055 недоступны.
- Ошибка при компиляции программы для esp32 с Preferences.h
- Одинаковый вывод на дисплеях с разными I2C-адресами (библиотека AdaFruit, ESP32)
- Соединение MQTT не распознается в void loop()
какой у вас конкретный вопрос?, @jsotola
Почему вы считаете, что это ошибка? Мне кажется, это ожидаемый результат., @InBedded16
Похоже, в функции цикла есть блокирующий код, который задерживает обновление таймера WDT. Насколько я понимаю, проблема возникает из-за while(Serial.available()) ., @Vaibhav