Cмарт розетка REDMOND SkyPort 100S

    Это продолжение моей первой статьи на смарт цоколь 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

    Поделиться публикацией

    Похожие публикации

    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

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

      0
      Не ESP8266/esp32? Нет замера напряжения и тока? Нет внешнего разьема для подключения ds18b20 или прочих? Питание баластником? Зачем оно вообще существует?
        0
        оно просто существует )) не всё через вайфай роутеры в этом мире работает, температуру с камня буду брать, с остальным согасен…
          0
          Но это же ну как-то фу… надо телефоном быть в метре от неё… надо прогу на телефон… зачем? вайфай и из любой точки мира. ну удобно же… да и производительности у есп намного больше и готовых проектов больше и… ну… блин я повторяюсь… не ну… стоило бы оно 100 рублей… то может и да… но так-то это ж чистейшее зло… ощущение проплаченной рекламы зашкаливает просто.
            0
            при чем сдесь телефоны, открывайте доступ контролеру УД в инет и рулите откуда хотите. Вы не внимательно читали статью. Я вообще за то что бы ни через телефон ни еще как не щелкать исполнителем. Это детский сад а не умный дом. Всем должны рулить сценарии опираясь на данные нужных датчиков в сети
              0
              а зачем мне в этой схеме лишние шестеренки? когда точно такое же устройство с точно такой же схемотехникой но с другой платкой модуля — уже самостоятельно может все это делать. дак ещё и жрет меньше!
              Я уже не говорю о 160 мегагерцах 4 мегабайтах флеша и 80 килобайтах озу!
                0
                Вы про контролеры УД с OC vs ESP8266/32 уже? Ну так требования к контролерам УД у всех разные, это уже другая тема,… интересная. Кому то БЛИНК с облаком, кому то Линукс
          0
          Сам свои я делаю примерно так, там все вышеописанное есть и даже больше — www.openhardware.io/view/565/Safe-relay-node
            0
            Не находите, что БП на каждый одноканальный выключатель — оверхед. Как и esp. Учитывая, что модуль рассчитан на установку в щиток. Вот если сделать «пассивные» дочерние…
              0
              Там же в описании я писал что это линейка, 1din, 2 din, 4din. Иварианты тогоже всего без БП. А выбор уже по месту, кому сколько надо
          0
          А что за протокол обмена данными? Как обстоят дела с защитой данных?

        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

        Самое читаемое