Авторизация
Зарегистрироваться

Смарт цоколь для лампы REDMOND - добавляем в умный дом

В этом обзоре речь пойдет об смарт цоколе бренда REDMOND — SkySocket 202S. Попалась как то мне на глаза статья об схемотехнике данного цоколя, почитав обратил внимание что мозгами данного девайса является чип от компании Nordic Semiconductor 51 серии (nRF51822).

Основным моим хобби на данный момент является посторение умного дома. Строю потихоньку радиосеть из устройств на протоколе MySensors. Если коротко о данном протоколе, то пожалуй можно сказать что это очень простой и удобный протокол на основе которого за один час в Ardunno IDE можно собрать пару устройств из ардуино модулей и запустить свою первую радиосеть датчиков. В последнее время делаю девайсы для своей сети MySensors на радиомодулях nRF51822 и nRF52832, поэтому и обратил внимание на этот цоколь.




Купив его в интернет магазине (за вполне себе небольшие деньги в районе 700 рублей) и разобрав увидел что на плате удобно выведены 4 контакта для програмирования. Недолго думая достал свой китайский программатор ST-LINK и мультметр и занялся прозвонкой платы что бы набросать схему устройства. В процессе составления схемы устройства стало ясно что используются всего 4 пина на модуле, кнопка на пине p0.27, биззер на пине p0.26, семисторное реле на пине p0.16 и схема детектора ноля на пине p0.00. За 20 минут набросал програмку в Arduino IDE ( писал выше с MySensors это очень просто и быстро), подключил програматор ST-LINK и о чудо компиляция, загрузка, програматор перестал помигивать и загорелся зеленым цветом, значит прошивка загрузилась. Сразу же открыл браузер, открыл Мажордомо, в модуле MySensors уже отображался новый девайс в сети — REDMOND nRF51 1.0. Осталось только создать объекты, сделать кнопки, что сразу же и сделал. И того через полтора часа уже управлял лампочкой в данном цоколе по протоколу MySensors.



Схема:


Код Программы для Arduino IDE

#define BUTTON_PIN 27
#define BIZZER_PIN 26
#define ZERO_CROSS_PIN 0
#define RELAY_PIN 16

boolean iswitch = 1;
boolean flag_button = 0;
static uint32_t previousMillis;

//#define MY_DEBUG
#define MY_DISABLED_SERIAL
#define MY_RADIO_NRF5_ESB
//#define MY_PASSIVE_NODE
#define MY_NODE_ID 200
#define MY_PARENT_NODE_ID 0
#define MY_PARENT_NODE_IS_STATIC
//#define MY_TRANSPORT_UPLINK_CHECK_DISABLED
#define MY_REPEATER_FEATURE

#define RELAY_ID 1

#include <MySensors.h>

MyMessage lMsg(RELAY_ID, V_STATUS);

void preHwInit() {
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  pinMode(BIZZER_PIN, OUTPUT);
  pinMode(ZERO_CROSS_PIN, INPUT);
  pinMode(RELAY_PIN, OUTPUT);
}

void before()
{
  //delay(2000);
  while (digitalRead(ZERO_CROSS_PIN) != 0) {
    //digitalWrite(RELAY_PIN, iswitch);
    //wait(200);
  }
  digitalWrite(RELAY_PIN, iswitch);
}

void presentation()
{
  sendSketchInfo("REDMOND nRF51", "1.0");
  wait(100);
  present(RELAY_ID, S_BINARY, "LIGHT SWITCH");
}

void setup()
{
  myTone(800, 50);
  delay(70);
  myTone(1500, 150);
  delay(30);
  wait(500);
  send(lMsg.set(iswitch));
  wait(100);
}


void loop()
{
  if (digitalRead(BUTTON_PIN) == LOW && flag_button == 0) {
    flag_button = 1;
    previousMillis = millis();
    wait(20);
    myTone(800, 50);
    delay(100);
    //myTone(1500, 200);
    //delay(30);
  }

  if (digitalRead(BUTTON_PIN) == LOW && flag_button == 1) {

  }
  if (digitalRead(BUTTON_PIN) == HIGH && flag_button == 1) {

    if ((millis() - previousMillis > 0) && (millis() - previousMillis <= 3000)) {
      flag_button = 0;
      myTone(800, 50);
      delay(70);
      myTone(1500, 150);
      delay(30);
      iswitch = !iswitch;
      while (digitalRead(ZERO_CROSS_PIN) != 0) {
        //iswitch = !iswitch;
      }
      digitalWrite(RELAY_PIN, iswitch);
      myTone(1500, 150);
      delay(30);
      wait(100);
      send(lMsg.set(iswitch));
      wait(300);
    }
    if (millis() - previousMillis > 3000)
    {
      flag_button = 0;
      wait(100);
    }
  }
}

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 {
          //
          iswitch = !iswitch;
          while (digitalRead(ZERO_CROSS_PIN) != 0) {
            //iswitch = !iswitch;
          }
          digitalWrite(RELAY_PIN, iswitch);
          wait(200);
          myTone(800, 50);
          delay(70);
          myTone(1500, 150);
          delay(30);
          wait(100);
          send(lMsg.set(iswitch));
          wait(1000);
        }
      }
      if (mGetCommand(message) == 2) {

      }
    }
  }



  /*
    if (message.isAck()) {
    (message.sensor == LIGHT_SENS_ID) {

    }
    (message.sensor == TEMP_INT_ID) {

    }
    }
  */
}


void myTone(uint32_t j, uint32_t k) {
  j = 500000 / j;
  k += millis();
  while (k > millis()) {
    digitalWrite(BIZZER_PIN, HIGH); delayMicroseconds(j);
    digitalWrite(BIZZER_PIN, LOW ); delayMicroseconds(j);
  }
}

void playSound() {
}


Пролоджение — Смарт Розетка REDMOND
Добавить в избранное +33 +51
свернуть развернуть
Комментарии (13)
RSS
+
avatar
+1
Молодец. Когда руки и голова на своих местах)
+
avatar
  • berk
  • 05 мая 2019, 14:25
0
Телеграмм чат нашего сообщества mysensors, где все раскажут и помогут — t.me/mysensors_rus
+
avatar
  • sinobi
  • 05 мая 2019, 14:40
+1
Разве под дуино Stlink прогер? Или через менеджер плат добавили под STM?
+
avatar
  • berk
  • 05 мая 2019, 14:43
+2
щас стало намного проще, есть библа от сандип семистери, там порт сдк от нордика для нрф5 — - mysensors.ru/forum/viewtopic.php?f=5&t=362
+
avatar
  • Parsek
  • 05 мая 2019, 15:52
+1
Жаль я в Си не селён. Вещь интересная, но Мажардомо мне не потянуть.
Стоит дома PLC Loxone, управляет инженерией, но там все ясно и мало что прирукожопить стороннего можно.
Вам плюсую!
+
avatar
  • m13ale
  • 05 мая 2019, 16:05
+1
Так я ни пони, оно вроде не вайфайное… Там зигби или какой-то колхоз на 433мгц?
+
avatar
  • berk
  • 05 мая 2019, 16:11
+1
производитель использует бле стек под софтдевайсом, я использую esb( совместимость с нордик рф24), сам чип мультипротокольный, но не вайфая, не 433 там нет. есть еще нфс. В майсенсорс реализована полная поддержка чипов нрф51-52, шас даже нрф52840 запускали из под майсенсорс, велкам в группу t.me/mysensors_rus Мануальчики, скетчи, экземплы все есть, поможем, разжуем.
+
avatar
  • kirich
  • 05 мая 2019, 19:12
0
А в готовом виде это все как-то можно увидеть?
А то общий вид есть, схема есть, даже программа какая-то есть, а дальше обзор обрывается, ощущение будто черновик случайно выложили или рекламу канала делали.
+
avatar
  • berk
  • 05 мая 2019, 19:28
+2
А как в готовом? На видео готовый перепрошитый девайс и увидели, там я им из Мажордомо рулю через модуль Майсенсорс. Инструкция пошаговая за рамками этой статьи, Меня модератор заставил все ссылки поудалять из текста, даже на производителя чипов. Ссылка на ютуб дана на мой личный канал, там ни рекламы, ничего, просто выкладываю над чем в данный момент работаю. Канал с монетизацией у меня другой))) Нужен мануал, найти знаете где, да там и ничего сложного, вскрываем, поворачивая часть цоколя, подрубаем програматор, прошиваем и все, дальше уже это настройка сценариев и тп, но это уже в контролере,… Мажордомо, ИОБрокер, Опенхаб и тд и тп, Майсенсорс дружит практически со всеми контролерами умного дома. Готовыми перепрошитыми эти девайсы я не продаю.
+
avatar
  • m13ale
  • 05 мая 2019, 19:31
0
del
+
avatar
+1
Только сами цоколи у меня сгорели 2шт, качество изделия только на поигратьсч
+
avatar
  • berk
  • 06 мая 2019, 00:46
+1
Впринципе схема незамысловатая, хитро сделан только детектор ноля, гореть там особо нечему. Но конечно все дело в нюансах, какого качества компоненты использовались при сборке, ну и со стороны пользователя это небыло ли использования в нерекомендованных режимах, например лампочку накаливания на 75W ставим и уже могут быть проблемы. Своим я пока доволен, заказал еще 4. )))
+
avatar
  • IgrMax
  • 07 мая 2019, 10:31
-1
Покупал в связном за 1 руб., через примерно год тоже выгорело. Вернее не выгорело, а в выключенном состоянии начинало мигать.

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