Беда с зависанием простой ноды на NRF5
Добавлено: 04 дек 2019, 18:39
Итак, есть совсем простенькая нода на NRF52832 (Е73 от EBYTE), по команде с контроллера тыкает домофон (параллельно кнопке выхода) через оптрон. Питается от домофона же через DC DC (нормальный народный 5-24 в 3.3 от не самого дохлого бренда WAVGAT)
Работала без нареканий около 2х недель. Перестала подавать признаки жизни. Светодиоды не мигали, в контроллере "Offline". Передернул питание. Отработала еще 4 дня и опять. Думал попала влага или еще чего.... Снял, все проверил 10 раз , воткнул в скетч сторожевой таймер. Отработала еще 2 дня и повисла. Собака не спасла. Переткнул питание еще и снова 2 дня и зависон.
Куда рыть?
На всякий случай:
Корпус: распредкоробка 43х43 из Леруа
Компилировал и заливал в Visual Code for Visual Studio, через J-Link
Скетч скопипазжен со стандартного с незначительными изменениями:
Spoiler
Show
Код: Выделить всё
// Enable debug prints to serial monitor
//#define MY_DEBUG
//#define RF24_CHANNEL 76 //RF channel for the sensor net, 0-127
//#define RF24_DATARATE RF24_250KBPS //RF24_250KBPS for 250kbs, RF24_1MBPS for 1Mbps, or RF24_2MBPS for 2Mbps
//#define RF24_PA_LEVEL RF24_PA_LOW //Sensor PA Level == RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBM, and RF24_PA_MAX=0dBm
//#define RF24_PA_LEVEL_GW RF24_PA_LOW //Gateway PA Level, defaults to Sensor net PA Level. Tune here if using an amplified nRF2401+ in your gateway.
//#define BASE_RADIO_ID ((uint64_t)0xA8A8E1FC00LL) // This is also act as base value for sensor nodeId addresses. Change this (or channel) if you have more than one sensor network.
#define MY_NODE_ID 10
// Enable and select radio type attached
//#define MY_RADIO_RF24
#define MY_RADIO_NRF5_ESB
//#define MY_RADIO_RFM69
//#define MY_RADIO_RFM95
//#define MY_RF24_CE_PIN 10
//#define MY_RF24_CS_PIN 9
// Enable repeater functionality for this node
#define MY_REPEATER_FEATURE
//#define MY_WITH_LEDS_BLINKING_INVERSE
// Set blinking period
//#define MY_DEFAULT_LED_BLINK_PERIOD 300
// Flash leds on rx/tx/err
// Uncomment to override default HW configurations
#define MY_DEFAULT_ERR_LED_PIN 8 // Error led pin
#define MY_DEFAULT_RX_LED_PIN 5// Receive led pin
#define MY_DEFAULT_TX_LED_PIN 11// Transmit led pin
#include <MySensors.h>
#define RELAY_PIN 25 // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
#define RELAY_ON LOW // GPIO value to write to turn on attached relay
#define RELAY_OFF HIGH // GPIO value to write to turn off attached relay
#define CLICK_LONG 300 //ms
#define RELAY_AS_CHILD_SENSOR_ID 1
void setup()
{
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, RELAY_OFF);
}
void presentation()
{
sendSketchInfo("ClickRelayNRF5", "1.0");
present(RELAY_AS_CHILD_SENSOR_ID, S_BINARY, "Intercom relay");
wdt_enable(WDTO_4S);
}
void loop(){
wait(10000);
if (!sendHeartbeat(true)) {
digitalWrite(MY_DEFAULT_ERR_LED_PIN, LOW);
wait(1000);
digitalWrite(MY_DEFAULT_ERR_LED_PIN, HIGH);
}
}
void receive(const MyMessage& message)
{
// We only expect one type of message from controller. But we better check anyway.
if (message.type == V_STATUS && message.getBool()) {
// Change relay state
digitalWrite(RELAY_PIN, RELAY_ON);
CORE_DEBUG("Incoming change for sensor: %i\n", message.getBool());
wait(CLICK_LONG);
digitalWrite(RELAY_PIN, RELAY_OFF);
}
}
Куда рыть?
На всякий случай:
Фото готового устройства
Show
Опции здесь:
Show