Вы можете столкнуться с какими-то странными проблемами, когда начинаете делать свои датчики. Мы попытались здесь привести список распространенных проблем.
- Используете ли вы последнюю стабильную версию MySensors для датчика и шлюза? Соответствует ли версия плагина контроллера версии библиотеки?
- Вы действительно используете настоящий nRF24L01+? Иногда продавцы ebay отправляют не лицензионную версию или клон HopeRF RFM73.
- Три раза проверьте подключение радио.
Проверьте питание радиомодуля. Он требует стабильного источника питания 3,3 В. Попробуйте добавить развязывающий конденсатор на контакты к 3.3V и GND, чтобы свести к минимуму пульсации. Выберите конденсатор около 47 мкФ с низким последовательным сопротивлением(ESR), если это возможно. Проверьте полярность конденсатора. Или возьмите керамический.
- Попробуйте взять другой источник питания. Некоторые дешевые зарядные USB устройства дают очень плохой выход.
- Ваш сенсор питается от USB компьютера? Удостоверьтесь, что он даёт достаточный ток. Особенно при использовании радиоприемника с усилителем.
- Провода между Arduino и радио должны быть короткие. Если есть возможность, возьмите провод как можно короче для плат прототипирования.
- Если вы используете расширенную версию чипа NRF24L01+ (с внешней антенной) и испытываете проблемы с коммуникацией, у вас может возникнуть проблема с подачей питания достаточной мощности. Попробуйте не использовать регулятор напряжения Arduino, подавая напряжение питания непосредственно от источника 3,3 В. Также вы можете попробовать изменить (понизить) уровень мощности. Это делается путем добавления параметров к методу begin() или в MyConfig.h перед загрузкой эскиза для проблемного датчика. Обратите внимание, что уровень мощности не влияет на чувствительность приема. Дополнительную информацию см. В библиотеке API MySensors.
- Иногда качество сигнала зависит он положения радио в пространстве.
Включение отладки и мониторинга логов
Чтобы включить отладочные сообщения, вам нужно просто добавить #define MY_DEBUG в эскиз, перед MySensors.h
После включения отладки подключите свой узел или шлюз к USB компьютера (также как вы загружаете эскиз). В среде IDE Arduino выберите нужный порт в меню «Инструменты», затем откройте «Монитор порта», чтобы просмотреть отладочные сообщения. Примечание: по умолчанию скорость обмена для MySensors равна 115200
Сенсорный узел будет выводить сообщения отладки при отправке и получении данных по радиосети. Это очень полезная информация для диагностики проблемы в вашей сборке.
В итоге:
- Скомпилируйте и загрузите эскиз с указанным выше флагом отладки в MyConfig.h.
- Не отключайте датчик от компьютера и включите Serial Monitor в Arduino IDE. Инструменты> Монитор порта.
- Установите скорость в 115200 бод.
Формат отладочного сообщения
Отладочные сообщения будут выглядеть следующим образом:
1 2 3 4 5 6 7 8 9 10 11 |
0;255;3;0;9;MCO:BGN:INIT GW,CP=RNNGA--,VER=2.0.1-beta 0;255;3;0;9;TSM:INIT 0;255;3;0;9;TSM:INIT:TSP OK 0;255;3;0;9;TSM:INIT:GW MODE 0;255;3;0;9;TSM:READY IP: 192.168.10.80 0;255;3;0;9;MCO:REG:NOT NEEDED 0;255;3;0;9;MCO:BGN:STP 0;255;3;0;9;MCO:BGN:INIT OK,ID=0,PAR=0,DIS=0,REG=1 0;255;3;0;9;TSF:MSG:READ,12-4-0,s=18,c=1,t=16,pt=1,l=1,sg=0:1 0;255;3;0;9;TSF:MSG:READ,12-4-0,s=31,c=1,t=16,pt=1,l=1,sg=0:1 |
Вы можете использовать наш онлайн-анализатор логов для интерпретации содержимого.
Последовательный протокол, используемый между шлюзом и контроллером, представляет собой простой список значений, разделенных точкой с запятой. Последняя часть каждой «команды» — это область данных. Все команды заканчиваются символом новой строки. Последовательные команды имеют следующий формат (см. Документацию по протоколу Serial Protocol для получения дополнительной информации):
1 |
node-id ; child-sensor-id ; message-type ; ack ; sub-type ; payload \n |
0; 0; 3; 0; 9 означает: узел 0, датчик 0, внутреннее сообщение (3), подтверждение (0), сообщение лога (9). Это означает, что шлюз выводит эту информацию как лог, полученный от узла.
Транспортные сообщения (TSM и TSF) описаны здесь.
Сообщения библиотеки MySensors (MCO) описаны здесь
Вот как интерпретировать буквенно-цифровые коды в конце отправленных / полученных сообщений. Например: s = 31, c = 1, t = 16, pt = 1, l = 1, sg = 0: 1
S = идентификатор датчика
C = тип сообщения 0-4: презентация, данные, запрос, системные или поток. См. Ссылку
T = тип значения: S_VALUE во время презентации или V_VALUE во время данных / запроса
Pt = тип данных: string, byte, int и т. Д. См. Ссылку
L = длина сообщения
Sg = подписанное или неподписанное сообщение: 0 = false или 1 = true
Очистка EEPROM
Ваши датчики имеют небольшую статическую память (EEPROM). Она будет содержать информацию об уникальном идентификаторе вашего сенсора и информацию о маршрутизации. В редких случаях вам может потребоваться очистить эту память до заводского значения (по умолчанию).
Чтобы очистить память EEPROM, загрузите следующий эскиз в датчик или шлюз (и подождите 20 секунд).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
/* * The MySensors Arduino library handles the wireless radio link and protocol * between your home built sensors/actuators and HA controller of choice. * The sensors forms a self healing radio network with optional repeaters. Each * repeater and gateway builds a routing tables in EEPROM which keeps track of the * network topology allowing messages to be routed to nodes. * * Created by Henrik Ekblad <henrik.ekblad@mysensors.org> * Copyright (C) 2013-2019 Sensnology AB * Full contributor list: https://github.com/mysensors/MySensors/graphs/contributors * * Documentation: http://www.mysensors.org * Support Forum: http://forum.mysensors.org * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * version 2 as published by the Free Software Foundation. * ******************************* * * DESCRIPTION * * This sketch clears radioId, relayId and other routing information in EEPROM back to factory default * */ // load core modules only #define MY_CORE_ONLY #include <MySensors.h> void setup() { Serial.begin(MY_BAUD_RATE); Serial.println("Started clearing. Please wait..."); for (uint16_t i=0; i<EEPROM_LOCAL_CONFIG_ADDRESS; i++) { hwWriteConfig(i,0xFF); } Serial.println("Clearing done."); } void loop() { // Nothing to do here... } |
Дополнительные советы по устранению неполадок
Вы можете получить больше советов по устранению неполадок здесь или просмотрев следующий видеоролик.