Это продолжение моей первой статьи на смарт цоколь Redmond. В этой статье речь пойдет о другом девайсе компании Redmond — Cмарт розетка REDMOND SkyPort 100S. Данное устройство тоже базируется на чипе nRF51822 и как говорится тут сам бог велел попробовать. Итак, была куплена данная розетка. Корпус разбирается так же легко как и цоколь, доступ к порту программирования еще удобнее. Но забегая вперед скажу что все немного сложнее, чем мне показалось сначала. Схему данной розетки не стал прозванивать, т.к. уже существует куча обзоров по модернизации и модификации данных розеток.
В одном из обзоров нашел схему, этим и ограничился. Из схемы понятно что задействованы так же как и в смарт цоколе всего 4 пина на модуле nRF51822. На устройстве присутствует тактовая кнопка подключенная к пину p0.00, два светодиода, красный подключен к пину p0.01, зеленый подключен к пину p0.02. Электромагнитное реле на 10A подключено к пину p0.03. Итак запускаем Arduino IDE и начинаем накидывать экземпл:
#define BUTTON_PIN 0
#define RED_LED_PIN 1
#define GREEN_LED_PIN 2
#define RELAY_PIN 3
boolean iswitch = 0;
boolean flag_button = 0;
static uint32_t previousMillis;
//#define MY_DEBUG
#define MY_DISABLED_SERIAL
#define MY_RADIO_NRF5_ESB
//#define MY_NRF5_ESB_PA_LEVEL (NRF5_PA_LOW)
#define MY_NRF5_ESB_PA_LEVEL (NRF5_PA_MAX)
//#define MY_PASSIVE_NODE
#define MY_NODE_ID 201
#define MY_PARENT_NODE_ID 0
#define MY_PARENT_NODE_IS_STATIC
#define MY_TRANSPORT_UPLINK_CHECK_DISABLED
#define RELAY_ID 1
#include <MySensors.h>
MyMessage lMsg(RELAY_ID, V_STATUS);
void preHwInit() {
pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(RED_LED_PIN, OUTPUT);
pinMode(GREEN_LED_PIN, OUTPUT);
pinMode(RELAY_PIN, OUTPUT);
}
void before()
{
digitalWrite(RED_LED_PIN, HIGH);
}
void presentation()
{
sendSketchInfo("REDMOND R nRF51", "1.0");
wait(300);
present(RELAY_ID, S_BINARY, "RELAY SWITCH");
wait(300);
}
void setup()
{
digitalWrite(RED_LED_PIN, LOW);
wait(300);
digitalWrite(GREEN_LED_PIN, HIGH);
wait(200);
digitalWrite(GREEN_LED_PIN, LOW);
wait(200);
digitalWrite(GREEN_LED_PIN, HIGH);
wait(200);
digitalWrite(GREEN_LED_PIN, LOW);
wait(200);
digitalWrite(GREEN_LED_PIN, HIGH);
wait(200);
digitalWrite(GREEN_LED_PIN, LOW);
wait(500);
send(lMsg.set(iswitch));
wait(500);
}
void loop()
{
if (digitalRead(BUTTON_PIN) == LOW && flag_button == 0) {
flag_button = 1;
previousMillis = millis();
wait(20);
}
if (digitalRead(BUTTON_PIN) == LOW && flag_button == 1) {
//что нибудь потом добавить, может быть
}
if (digitalRead(BUTTON_PIN) == HIGH && flag_button == 1) {
if ((millis() - previousMillis > 0) && (millis() - previousMillis <= 3000)) {
if (iswitch == 0) {
digitalWrite(GREEN_LED_PIN, HIGH);
wait(10);
} else if (iswitch == 1) {
digitalWrite(GREEN_LED_PIN, LOW);
wait(10);
}
flag_button = 0;
iswitch = !iswitch;
digitalWrite(RELAY_PIN, iswitch);
wait(1500);
send(lMsg.set(iswitch));
}
if (millis() - previousMillis > 3000)
{
flag_button = 0;
}
}
}
void receive(const MyMessage & message) {
if (message.type == V_STATUS) {
if (message.sensor == RELAY_ID) {
if (mGetCommand(message) == 1) {
if (message.isAck()) {
//AckG = 1;
} else {
wait(50);
if (iswitch == 0) {
digitalWrite(GREEN_LED_PIN, HIGH);
}else
if (iswitch == 1) {
digitalWrite(GREEN_LED_PIN, LOW);
}
iswitch = !iswitch;
wait(10);
digitalWrite(RELAY_PIN, iswitch);
wait(1500);
send(lMsg.set(iswitch));
}
}
if (mGetCommand(message) == 2) {
}
}
}
}
Как видите код небольшой и достаточно простой, спасибо за это сообществу Mysensors.
Как с кодом было закончено, подключил программатор к устройству и перепрошил. Подключение программатора к розетке делается очень просто, в моем случае я взял два обычных выводных резистора, откусил кусачками проволоку, из проволоки сделал крючки, согнув ее, вставил эти крючки в провода программатора и "подцепился" к розетке, на видео видно как я это делаю.Пришло время тестировать то что получилось. Вставил смарт розетку в розетку :), открыл Мажордомо, все нормально, розетка уже присутствовала в сети Майсенсорс. Отправляю первую команду на включение и… ребут :)… неожиданный поворот. Первое что пришло в голову, просадка по питанию во время включения реле. Сел переделал программу, убрал включение светодиода при включении реле, что бы снизить потребление. И это сработало, розетка перестала перезагружаться при выключении реле.… Но не надолго :). И так стало понятно что модулю не хватает питания. Схема бестрансформаторного блока питания рассчитана так, что бы хватало только на работу в режиме BLE. В Mysensors же используется другой режим радиомодуля 2.4 Ггц (совместимость с RF24 — ANT). Итак имеем дефицит примерно 10мА. Обсудив проблемку в нашем чате Mysensors остановился на решении добавить балластный конденсатор, так как это очень простая манипуляция, то что нужно для повторения. Вот что получилось:
Собрав снова розетку, немного взволнованно приступил к тестам. Отработка теперь шла превосходно. Переписал логику работы программы обратно, добавил еще #define MY_NRF5_ESB_PA_LEVEL (NRF5_PA_MAX), то есть "врубил" радио на полную мощность(да с Mysensors это очень просто).… Работает. Без ошибок. Без перезагрузок. Это победа :)
А есть же еще у этого производителя другие устройства на nRF51822 — датчик дыма, датчик движения, датчик газа, тепловые конвертеры, вентиляторы, увлажнители, очистители, чайники… ;)
Телеграмм чат нашего сообщества, где всегда помогут установить библиотеки, поддержку плат, объяснят как за полчаса собрать на ардуинках сеть сенсоров без головной боли — https://t.me/mysensors_rus
Комментарии (11)
BurlakovSG
08.05.2019 08:42А что за протокол обмена данными? Как обстоят дела с защитой данных?
Berkseo Автор
08.05.2019 10:43
clawham
Не ESP8266/esp32? Нет замера напряжения и тока? Нет внешнего разьема для подключения ds18b20 или прочих? Питание баластником? Зачем оно вообще существует?
Berkseo Автор
оно просто существует )) не всё через вайфай роутеры в этом мире работает, температуру с камня буду брать, с остальным согасен…
clawham
Но это же ну как-то фу… надо телефоном быть в метре от неё… надо прогу на телефон… зачем? вайфай и из любой точки мира. ну удобно же… да и производительности у есп намного больше и готовых проектов больше и… ну… блин я повторяюсь… не ну… стоило бы оно 100 рублей… то может и да… но так-то это ж чистейшее зло… ощущение проплаченной рекламы зашкаливает просто.
Berkseo Автор
при чем сдесь телефоны, открывайте доступ контролеру УД в инет и рулите откуда хотите. Вы не внимательно читали статью. Я вообще за то что бы ни через телефон ни еще как не щелкать исполнителем. Это детский сад а не умный дом. Всем должны рулить сценарии опираясь на данные нужных датчиков в сети
clawham
а зачем мне в этой схеме лишние шестеренки? когда точно такое же устройство с точно такой же схемотехникой но с другой платкой модуля — уже самостоятельно может все это делать. дак ещё и жрет меньше!
Я уже не говорю о 160 мегагерцах 4 мегабайтах флеша и 80 килобайтах озу!
Berkseo Автор
Вы про контролеры УД с OC vs ESP8266/32 уже? Ну так требования к контролерам УД у всех разные, это уже другая тема,… интересная. Кому то БЛИНК с облаком, кому то Линукс
Berkseo Автор
Сам свои я делаю примерно так, там все вышеописанное есть и даже больше — www.openhardware.io/view/565/Safe-relay-node
yvm
Не находите, что БП на каждый одноканальный выключатель — оверхед. Как и esp. Учитывая, что модуль рассчитан на установку в щиток. Вот если сделать «пассивные» дочерние…
Berkseo Автор
Там же в описании я писал что это линейка, 1din, 2 din, 4din. Иварианты тогоже всего без БП. А выбор уже по месту, кому сколько надо