• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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;
  }
}
Так разобраться в нём будет сложно, но главное, что при первой отправке всё идёт как надо, а при точно такой же второй, всё ломается
 
Последнее редактирование:
Сверху Снизу