Получение ошибки 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);

  }
}`

, 👍2

Обсуждение

Видите ли вы серийные отпечатки на своем серийном мониторе? где они останавливаются?, @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


3 ответа


2

причина 4 сброшена сторожевым псом. сторожевой пес сбрасывает ваш esp, потому что он не выходит из цикла. длительная задержка-ваша проблема. выполните синхронизацию с помощью millis (), чтобы выполнить действия через некоторый интервал.

,

delay() не должна быть проблемой - она вызывает функцию (ы) " yield ()", необходимую для поддержания работоспособности сторожевого пса., @Majenko

Итак, как мне вызвать эту функцию и где я могу поместить ее в свой код, @Touseef ahmed


2

Ваш 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


3

Нашел возможное решение. Я столкнулся с той же проблемой. По-видимому, это сторожевой пес с переполнением стека оборудования, предотвращающий неисправность. Это может относиться не ко всем возможным сценариям, но я обнаружил, что выделенный контакт на самой плате неверен. То, что имеет номер 03, на самом деле, например, D15. Таким образом, назначение контакта D15 сработало, но 3 привело к этой ошибке. Я надеюсь, что это поможет другим.

,

Также был настроен неправильный контакт :-), @meelow

ТО ЖЕ САМОЕ! Проверьте свои назначения контактов, так как это может привести к этой ошибке! Общее утверждение "pinMode(ledPin, ВЫВОД);" вызвало ту же ошибку, что и операция на моем ESP8266, когда я ошибочно ввел значение "6" для "ledPin". Поскольку контакта "6" на моей плате не существует, arduino разбился., @dogatonic