Это продолжение моей первой статьи на смарт цоколь 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 остановился на решении добавить балластный конденсатор, так как это очень простая манипуляция, то что нужно для повторения. Вот что получилось:


image


image


Собрав снова розетку, немного взволнованно приступил к тестам. Отработка теперь шла превосходно. Переписал логику работы программы обратно, добавил еще #define MY_NRF5_ESB_PA_LEVEL (NRF5_PA_MAX), то есть "врубил" радио на полную мощность(да с Mysensors это очень просто).… Работает. Без ошибок. Без перезагрузок. Это победа :)


image



А есть же еще у этого производителя другие устройства на nRF51822 — датчик дыма, датчик движения, датчик газа, тепловые конвертеры, вентиляторы, увлажнители, очистители, чайники… ;)


Телеграмм чат нашего сообщества, где всегда помогут установить библиотеки, поддержку плат, объяснят как за полчаса собрать на ардуинках сеть сенсоров без головной боли — https://t.me/mysensors_rus

Комментарии (11)


  1. clawham
    07.05.2019 15:29

    Не ESP8266/esp32? Нет замера напряжения и тока? Нет внешнего разьема для подключения ds18b20 или прочих? Питание баластником? Зачем оно вообще существует?


    1. Berkseo Автор
      07.05.2019 15:35

      оно просто существует )) не всё через вайфай роутеры в этом мире работает, температуру с камня буду брать, с остальным согасен…


      1. clawham
        07.05.2019 16:35

        Но это же ну как-то фу… надо телефоном быть в метре от неё… надо прогу на телефон… зачем? вайфай и из любой точки мира. ну удобно же… да и производительности у есп намного больше и готовых проектов больше и… ну… блин я повторяюсь… не ну… стоило бы оно 100 рублей… то может и да… но так-то это ж чистейшее зло… ощущение проплаченной рекламы зашкаливает просто.


        1. Berkseo Автор
          07.05.2019 16:45

          при чем сдесь телефоны, открывайте доступ контролеру УД в инет и рулите откуда хотите. Вы не внимательно читали статью. Я вообще за то что бы ни через телефон ни еще как не щелкать исполнителем. Это детский сад а не умный дом. Всем должны рулить сценарии опираясь на данные нужных датчиков в сети


          1. clawham
            07.05.2019 20:28

            а зачем мне в этой схеме лишние шестеренки? когда точно такое же устройство с точно такой же схемотехникой но с другой платкой модуля — уже самостоятельно может все это делать. дак ещё и жрет меньше!
            Я уже не говорю о 160 мегагерцах 4 мегабайтах флеша и 80 килобайтах озу!


            1. Berkseo Автор
              07.05.2019 20:32

              Вы про контролеры УД с OC vs ESP8266/32 уже? Ну так требования к контролерам УД у всех разные, это уже другая тема,… интересная. Кому то БЛИНК с облаком, кому то Линукс


    1. Berkseo Автор
      07.05.2019 16:27

      Сам свои я делаю примерно так, там все вышеописанное есть и даже больше — www.openhardware.io/view/565/Safe-relay-node


      1. yvm
        08.05.2019 09:46

        Не находите, что БП на каждый одноканальный выключатель — оверхед. Как и esp. Учитывая, что модуль рассчитан на установку в щиток. Вот если сделать «пассивные» дочерние…


        1. Berkseo Автор
          08.05.2019 10:39

          Там же в описании я писал что это линейка, 1din, 2 din, 4din. Иварианты тогоже всего без БП. А выбор уже по месту, кому сколько надо


  1. BurlakovSG
    08.05.2019 08:42

    А что за протокол обмена данными? Как обстоят дела с защитой данных?