• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь ESP8266 + NRF24L01 странно работают вместе

zanosarit

New member
Создавая интернет шлюз из esp + nrf24lo1, столкнулся с такой проблемной: при запуске esp-шка спокойно отправляет запрос на ардуину и получает от неё ответ, после ждёт 10 секунд и повторяет это действие, но зависает на этом моменте и срабатывает watch dog
Код:
    Serial.println("sent");
    radio.write(&sent, sizeof(sent));
    Serial.println("sented");
А вот, как это выглядит в Serial порте:
Код:
stopListening
transmit_flag = 1
sent
sented
startListening
prinato
0k
stopListening
И второй запрос через 10 секунд:
Код:
transmit_flag = 1
sent

Soft WDT reset

ctx: cont
sp: 3fff2840 end: 3fff2af0 offset: 01b0

>>>stack>>>
3fff29f0: 0000003f 000000a1 3fff2a1a 4020bd30
3fff2a00: 401071c4 3fff1820 00000000 4020bd80
3fff2a10: 00000000 3fff1820 3fff1744 4020bd30
3fff2a20: 00000001 000000ff 3fff1744 4020bd6c
3fff2a30: 00000001 000000ff 3fff1744 4020bfc7
3fff2a40: 00000001 00000030 3fff1744 4020c020
3fff2a50: 3ffe91d4 00000030 3fff1744 4020c13e
3fff2a60: 4022683a 3fff1a00 3ffe8353 4020c183
3fff2a70: 40227687 3fff1a00 3ffe8353 40203588
3fff2a80: 3fff3574 40204d24 00000000 3fff1abc
3fff2a90: 3fffdad0 3fff0d38 3fff1780 4020370f
3fff2aa0: 00000000 00000000 00000000 40202f8d
3fff2ab0: 3ffea000 0800a8c0 00000000 feefeffe
3fff2ac0: 00000000 00000000 00000001 3fff1abc
3fff2ad0: 3fffdad0 00000000 3fff1ab4 4020e214
3fff2ae0: feefeffe feefeffe 3fff1ad0 40100718
<<<stack<<<

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

load 0x4010f000, len 1384, room 16
tail 8
chksum 0x2d
csum 0x2d
v60000318
~ld
И вот ещё что интересно: пока esp висит на команде radio.write, арудина ничего не принимает, но как только срабатывает WDT, данные на ардуину сразу же приходят!
 
Последнее редактирование:

=AK=

New member
Приведите полный код, по отрывкам ничего сказать нельзя. И подробнее про то, что куда подключено: ESP, nRF, Ардуино.
 

zanosarit

New member
Приведите полный код, по отрывкам ничего сказать нельзя. И подробнее про то, что куда подключено: ESP, nRF, Ардуино.
Есть 2 устройства, одно на esp, другое на урдуине. К ним обоим подключены nrf24lo1. ESP отправляет запрос, и начинает слушать радиоканал, а арудуина после получения запроса отправляет ответ на esp, а она же в свою очередь после этого прекращает слушать радиоканал и начинает ждать 10 секунд, что бы повторить эту операцию снова.
Вот код, отвечающий за nrf24l01:
Код:
void radio_nrf() {
  if ((mqtt_update == 1 || millis() - last_update_data > 10000) && transmit_flag == 0) {
    transmit_flag = 1;
    Serial.println("transmit_flag = 1");
    Serial.println(mqtt_update);
    Serial.println(millis() - last_update_data);
  }
  if (set_radio_mode == 1) {
    radio.stopListening();
    Serial.println("stopListening");
    radio_mode = 1;
    set_radio_mode = 2;
  } else if (set_radio_mode == 0) {
    Serial.println("startListening");
    radio.startListening();
    start_listening = millis();
    radio_mode = 0;
    set_radio_mode = 2;
  }
  if (radio_mode == 0) {
    if (millis() - start_listening > 550) {
      set_radio_mode = 1;
      start_listening = millis();
      radio_try++;
      Serial.println("try++");
      if (radio_try > 10) {
        old_data_update = 1;
        radio_try = 0;
        set_radio_mode = 1;
      }
    }
    if ( radio.available(&pipeNo)) {
      radio.read( &recieved_data, sizeof(recieved_data) );
      if (recieved_data[0] == 3 && recieved_data[1] == 1) {
        Serial.println("prinato");
        Serial.println(recieved_data[2]);
        //temp[1] = float(recieved_data[2] + float((recieved_data[3] / 10 * 4) / 100.0));
        //if (recieved_data[3] - recieved_data[3] / 10 * 10 == 1) {
        //  temp[1] = temp[1] * -1;
        //}
        set_radio_mode = 1;
        radio_try = 0;
        transmit_flag = 0;
        last_update_data = millis();
      }
    }
  } else if (radio_mode == 1 && transmit_flag == 1) {
    Serial.println("sent");
    radio.write(&sent, sizeof(sent));
    Serial.println("sented");
    delay(10);
    set_radio_mode = 0;
  }
}
Так разобраться в нём будет сложно, но главное, что при первой отправке всё идёт как надо, а при точно такой же второй, всё ломается
 
Последнее редактирование:
Сверху Снизу