Получение ошибки ets 8 января 2013,rst cause:4,boot mode(1,6) wdt reset
Я работаю над проектом по отправке данных ультразвуковых датчиков на мой сервер. Для этого я использую модуль Wi-Fi ESP8266, микросхему регулятора 3,3 В, подав входное напряжение 5 В от aduino uno.
Я успешно загрузил код, но в последовательном мониторе я получил ошибку
ets jan 8 2013,rst cause:4,boot mode(1,6) wdt reset.
Пожалуйста, скажите, что это значит?
Вот мой код. Направь меня, если я что-то сделал не так. Заранее спасибо.
Примечание: Перед отправкой значений датчиков я успешно отправляю необработанные данные вручную на веб-сервер, т. е. строковые данные, но когда я пытаюсь отправить значения датчиков, я получил ошибку.
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
const char* ssid = "VENTURE 11";
const char* pass = "12345678";
WiFiClient clientx;
const int trigPin = 8; //Digital port D5
const int echoPin = 9; //Digital port D6
long duration;
float distance;
float Mdistance;
float MAX_HEIGHT = 0;
void setup() {
Serial.begin(115200); //Serial connection
pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
pinMode(echoPin, INPUT);
WiFi.begin("VENTURE 11", "12345678"); //WiFi connection
Serial.println("Setup iniated");
while (WiFi.status() != 3) { //Wait for the WiFI connection completion
delay(500);
Serial.println("Waiting for connection");
Serial.print("WIFI STATUS : ");
Serial.println(String(WiFi.status()));
}
Serial.println(String(WiFi.status()));
}
void loop() {
Serial.println(String(WiFi.status()));
if (WiFi.status() != 3)
{
WiFi.begin("VENTURE", "12345678"); //WiFi connection
while (WiFi.status() != 3)
{
Serial.println("Waiting for connection");
}
}
else
{
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);
// Calculating the distance
distance = (duration * 0.034) / 2;
if (MAX_HEIGHT == 0) {
//MAX_HEIGHT = distance;
Serial.print("Max height has been set to ");
//Serial.print(distance);
Serial.println(" cm");
Serial.println("Waiting for 5 seconds...");
delay(5000);
} else {
Serial.print("Distance:\n");
Serial.print(distance);
Serial.print("cm\n");
Serial.print("Distance:\n");
Serial.print(distance / 100);
Serial.print("m\n");
delay(1000);
}
HTTPClient http;
String Data = "x=" + (String)distance + "&y=" + (String)MAX_HEIGHT + "&z=0";
//String Data = "x=Finally&y=Did&z=it;)";
http.begin("http://testingblahblah.000webhostapp.com/IOTCON.php");
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
int sent = http.POST(Data);
Serial.println(sent);
String httpPayload = http.getString();
Serial.println(httpPayload);
if (sent > 0)
{
Serial.println("Message has been sent");
} else {
Serial.println("unable to send data");
}
delay(20000);
}
}`
@Touseef ahmed, 👍2
Обсуждение3 ответа
причина 4 сброшена сторожевым псом. сторожевой пес сбрасывает ваш esp, потому что он не выходит из цикла. длительная задержка-ваша проблема. выполните синхронизацию с помощью millis (), чтобы выполнить действия через некоторый интервал.
delay()
не должна быть проблемой - она вызывает функцию (ы) " yield ()", необходимую для поддержания работоспособности сторожевого пса., @Majenko
Итак, как мне вызвать эту функцию и где я могу поместить ее в свой код, @Touseef ahmed
Ваш loop()
:
void loop() {
Serial.println(String(WiFi.status()));
if (WiFi.status() != 3)
{
WiFi.begin("VENTURE", "12345678"); //WiFi connection
while (WiFi.status() != 3)
{
Serial.println("Waiting for connection");
}
}
else
{
// Other code...
}
}
Во время ожидания соединения вы создаете строковые
объекты с очень высокой скоростью, так как ваша delay(20000)
указана в предложении else.
Это означает, что у вас, возможно, не хватает памяти, так как вы создаете строковые
объекты с каждой итерацией, которая находится в диапазоне мегагерц.
Вам, вероятно, не нужны обертки для строк (...)
, так как функция Serial.println()
может работать со строками в стиле C, возвращаемыми библиотекой Wi
-Fi. Затем ваша программа не будет выделять память для хранения результатов WiFi.status()
миллионы раз в секунду, которые вы не используете позже в своей программе.
ответ больше не действителен. начните с параметров const char* существует. но этот ответ никогда не был правильным ответом, @Juraj
Нашел возможное решение. Я столкнулся с той же проблемой. По-видимому, это сторожевой пес с переполнением стека оборудования, предотвращающий неисправность. Это может относиться не ко всем возможным сценариям, но я обнаружил, что выделенный контакт на самой плате неверен. То, что имеет номер 03, на самом деле, например, D15. Таким образом, назначение контакта D15 сработало, но 3 привело к этой ошибке. Я надеюсь, что это поможет другим.
Также был настроен неправильный контакт :-), @meelow
ТО ЖЕ САМОЕ! Проверьте свои назначения контактов, так как это может привести к этой ошибке! Общее утверждение "pinMode(ledPin, ВЫВОД);" вызвало ту же ошибку, что и операция на моем ESP8266, когда я ошибочно ввел значение "6" для "ledPin". Поскольку контакта "6" на моей плате не существует, arduino разбился., @dogatonic
- Данные DHT11 из Arduino UNO в Firebase через ESP8266
- Почему dtostrf() не работает для этого значения?
- Проблема «Не найдена плата PN53x» Считыватель карт Arduino NFC
- Как отправлять твиты с датчиком пламени и ESP8266?
- HTML-страница переменной ESP8266 Webserver ESP8266WebServer (не как один постоянный символ)
- ESP8266 Webserver ESP8266WebS сервер перемещает функцию обработчика в отдельный файл .h .c
- Wemos D1 mini зависает через несколько минут
- esp8266 WiFi не может подключиться к PHP- серверу
Видите ли вы серийные отпечатки на своем серийном мониторе? где они останавливаются?, @Mero55
также в строковых данных вы должны ввести строку(расстояние) и строку(MAX_HEIGHT) (парантезирование вокруг аргумента, а не функции), @Mero55
почему он сбрасывается в режим загрузчика (1, 6)?, @Juraj
Пожалуйста, проверьте SSID-имя Wi-Fi в коде., @AltAir
порт D6 не существует на большинстве плат esp8266, измените его на другой вывод, @Erez.Electronic.can
@Эрез.Electronic.can, D6 является меткой и константой на платах NodeMCU и Wemos и сопоставляется с io 12. но вы правы насчет неправильного контакта. **ввод-вывод с 6 по 10 используется для связи с флэш-памятью**, @Juraj