- PVSM.RU - https://www.pvsm.ru -
Впервые про данную розетку я узнал из статьи Умная розетка Redmond SkyPlug RSP-100S Анализ конструкции и схемы электрической принципиальной. Выявление недостатков [1]. Помню, что прочитав ее, в первую очередь заинтересовался схемой бестрансформаторного источника питания и тем, насколько компактно размещены элементы в корпусе розетки при том, что внутри полноценное реле, а не, скажем, симистор.
О каких-то попытках перепрограммировать Bluetooth-модуль и речи не было, тк программирование BLE устройств исторически было делом очень непростым. Вот пример: Разработка IoT устройств с использованием Bluetooth LE [2], явно не DIY уровень.
Однако, за прошедший год ситуация кардинальным образом изменилась…
Началось все с того, что индийский программист Sandeep Mistry (на фото)…
...портировал [3] Wiring, он же Arduino framework, он же просто «ардуино» на чипы Nordic Semiconductor nRF51822 и nRF52832, написав до кучи еще и библиотеку BLEPeripheral [4] для создания на вышеупомянутых чипах периферийных устройств с поддержкой BLE4.x
Потом компания Arduino AG (ex-arduino.org) вступила в коллаборацию с Nordic и выпустила плату Arduino Primo [5]…
… основанную на чипе nrf52832. Интересно, как быстро вы найдете на плате собственно nRF52832 (подсказка: большой слева — это не он). Для совместимости с Ардуино плата использует код [6], созданный Сандипом, а самого его приняли в штат. Повторяется история с espressif, esp8266 и Иваном Грохотковым (igrr), где все так же начиналось с «народных» наработок.
Adafruit и Sparkfun вскоре тоже отметились выпуском плат на nRF52.
В общем, похоже, что семейство nRF5 (nRF51822 и nRF52832) сейчас самый «модный» чип среди всех мейджоров, которые определяют электронный DIY-рынок. Под «мейджорами» я имею в виду Arduino, Adafruit и Sparkfun. Азиаты в лице ITEAD или SEEED пока отстают, но, думаю, это ненадолго. По крайней мере, noname китайцы с Али вовсю штампуют модули на этих чипах, причем, если модули на nRF51822 были довольно несуразными, то модули на nRF52832 отличные.
Что же за чип такой примечательный и почему, судя по всему, у него есть большие шансы наконец-то заменить собой знаменитую atmega328 в DIY-поделках?
nRF52832 [7] — новая мощная, малопотребляющая и гибкая «система на кристалле» с поддержкой протоколов Bluetooth Smart, ANT и проприетарных стеков собственной разработки пользователя в частотном диапазоне 2.4GHz.
nRF52832 построен на 32-разрядном процессорном ядре ARM Cortex-M4F с 512kB Flash и 64kB RAM памяти. По протоколу работы nRF52832 полностью совместим с предыдущими сериями nRF51, nRF24L и nRF24AP производства Nordic Semiconductor.
Вот это тоже очень важно, например, у меня вся домашняя автоматизация сделана на nRF24L01 и такая обратная совместимость позволяет легко заменить комбинацию atmega328+nRf24 на один nRF5
nRF52832 содержит мощное процессорное ядро ARM Cortex-M4F, соответствующее требованиям многих требовательных к вычислительной производительности, но при этом компактных приложений, способных работать на одном кристалле. Ядро способно решать задачи цифровой обработки сигналов, выполнять операции с плавающей точкой, выполнять операции с мультиплексированием и накоплением в пределах одного рабочего цикла, аппаратно поддерживает энергетически эффективно реализованную операцию деления в вещественной и комплексной формах.
Радиочасть 2.4 ГГц совместима со стеками протоколов Bluetooth Smart, ANT и любыми проприетарными стеками. Радио имеет встроенный регистр RSSI высокого разрешения с возможностью автоматической работы в режиме EasyDMA для прямого доступа к памяти в момент приема и передачи данных по радиоканалу. Nordic предоставляет стеки протоколов Bluetooth Smart, ANT и Gazel (2.4GHz) в качестве загружаемого контента на своем официальном веб-сайте.
Стек Bluetooth в версии Nordic называется SoftDevice, запомните это слово, оно нам сегодня еще встретится.
nRF52832 является сверхмалопотребляющей системой на кристалле, способной использовать питание в диапазоне от 1.7В до 3.6В. Вся периферия и тактовые генераторы могут оперативно отключаться в автоматическом режиме с целью сведения энергопотребления до минимального уровня. Встроенное процессорное ядро имеет автоматизированную адаптивную систему управления энергопотреблением. Энергопотребление автоматически регулируется в зависимости от операций, выполняемых в данный момент процессорным ядром при обращении к периферийным устройствам таким образом, чтобы работали только те составные части системы, которые необходимы для выполнения текущей задачи.
Добавлю: возможность переназначения пинов, поддержка до 8 прерываний и прочая, прочая, прочая. Практически идеальный чип :)
Но вернемся к нашей розетке. Как выяснилось, она идеально приспособлена для DIY, не хуже, чем культовые модули Sonoff от ITEAD. Разъем для программирования любезно вынесен и обозначен как XP1:
Порядок пинов, естественно не подписан, но это не беда, ведь у нас есть схема [8]. В ней есть одна маленькая неточность, правильный порядок пинов такой (слева направо):
Отладочный интерфейс — SWD. Итак, поехали:
Либо через скачивание [4] и добавление через Add .zip library
// LED pin
#define LED_PIN 3
#define ON_PIN 2
#define AUTH_PIN 1
BLEPeripheral blePeripheral = BLEPeripheral();
BLEService ledService = BLEService(«19b10000e8f2537e4f6cd104768a1214»);
BLECharCharacteristic switchCharacteristic = BLECharCharacteristic(«19b10001e8f2537e4f6cd104768a1214», BLERead | BLEWrite);
void setup() {
// set LED pin to output mode
pinMode(LED_PIN, OUTPUT);
//pinMode(ON_PIN, OUTPUT);
//pinMode(AUTH_PIN, OUTPUT);
//pinMode(0, INPUT_PULLUP);
blePeripheral.setLocalName(«LED»);
blePeripheral.setAdvertisedServiceUuid(ledService.uuid());
blePeripheral.addAttribute(ledService);
blePeripheral.addAttribute(switchCharacteristic);
blePeripheral.begin();
}
void loop() {
BLECentral central = blePeripheral.central();
if (central) {
while (central.connected()) {
if (switchCharacteristic.written()) {
// central wrote new value to characteristic, update LED
if (switchCharacteristic.value()) {
// Serial.println(F(«LED on»));
digitalWrite(LED_PIN, HIGH);
//digitalWrite(ON_PIN, HIGH);
//digitalWrite(AUTH_PIN, HIGH);
}
else {
//Serial.println(F(«LED off»));
digitalWrite(LED_PIN, LOW);
//digitalWrite(ON_PIN, LOW);
//digitalWrite(AUTH_PIN, LOW);
}
}
}
}
}
Используя любой программатор с поддержкой SWD, например, SEGGER J-Link. Я использовал J-Link, встроенный в отладочную плату nrf52 Development Kit, он позволяет прошивать не только сам development kit, но и внешние платы.
На этом программирование собственно розетки можно считать законченным и она УЖЕ работает. Как это проверить?
→ Ссылка для iOS: [10]
→ Ссылка для Android [11]
К сожалению, пока не существует общедоступного способа прикрутить поддержку Homekit к BLE устройству напрямую. Это требует сертификации от Apple по программе Mfi, поэтому поддержка возможна только через прокладку в виде Homekit-сервер'a, самым известным из которых является Homebridge.
Устанавливаем сам homebridge
У меня успешно работает homebridge на Raspberry pi 2, но для целей данной публикации, я поставил еще один на Raspberry Pi Zero W (в подробности вдаваться не буду, если интересно, готов ответить на вопросы в комментариях)
sudo apt-get install npm
sudo npm install -g --unsafe-perm homebridge node-gyp
Устанавливаем BLE плагин
1) Ставим javascript библиотеку NOBLE [12]от уже известного нам Сандипа Мистри, он и тут отметился:
sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev
sudo npm install -g noble
2) Ставим собственно плагин
sudo npm install -g homebridge-bluetooth
Конфигурируем Homebridge
Редактируем config.json в папке .homebridge. Если у вас Raspberry Pi 2, то она находится в домашней директории /home/pi
nano /home/pi/.homebridge/config.json
И заменяем его содержимое на
Запускаем homebridge в отладочном режиме (ключ -D, буква ПРОПИСНАЯ):
sudo homebridge -D
внимательно следим за сообщениями. Находим строчку “LED — Ignored” и выписываем оттуда BLE адрес нашей розетки (аналог MAC-адреса).
Альтернативный вариант: запускаем hcitool (утилита для работы с BLE-устройствами)
sudo hcitool lescan
и находим адрес в списке устройств.
Выходим, нажимая Ctrl-C. Меняем адрес в config.json на корректный:
nano /home/pi/.homebridge/config.json
Снова запускаем homebridge. В этот раз все должно быть ОК, и Homebridge с радостью распознает нашу розетку.
Писать, как добавить новое устройство в Homekit, думаю, смысла, нет, об этом написано много, включая информацию на сайте самой Apple. Скажу только, что для этого удобнее пользоваться программой Elgato Eve [13], а не нативным приложением Home.
Автор: Денис Михальский
Источник [16]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/raspberry-pi/266987
Ссылки в тексте:
[1] Умная розетка Redmond SkyPlug RSP-100S Анализ конструкции и схемы электрической принципиальной. Выявление недостатков: https://geektimes.ru/post/278262/
[2] Разработка IoT устройств с использованием Bluetooth LE: https://geektimes.ru/post/276558/
[3] портировал: https://github.com/sandeepmistry/arduino-nRF5
[4] BLEPeripheral: https://github.com/sandeepmistry/arduino-BLEPeripheral
[5] Arduino Primo: https://store.arduino.cc/usa/arduino-primo
[6] код: https://github.com/arduino-org/arduino-core-nrf52
[7] nRF52832: https://www.nordicsemi.com/Products/nRF52-Series-SoC
[8] схема: https://habrastorage.org/files/2e9/76f/0b3/2e976f0b321e470a8d44a37717bc7098.jpg
[9] sandeepmistry.github.io/arduino-nRF5/package_nRF5_boards_index.json: https://sandeepmistry.github.io/arduino-nRF5/package_nRF5_boards_index.json
[10] Ссылка для iOS: : https://itunes.apple.com/us/app/ble-scanner-4-0/id1221763603?mt=8
[11] Ссылка для Android: https://play.google.com/store/apps/details?id=com.macdom.ble.blescanner&hl=ru
[12] NOBLE : https://github.com/sandeepmistry/noble
[13] Elgato Eve: https://itunes.apple.com/ru/app/elgato-eve/id917695792?mt=8
[14] homebridge-bluetooth plugin: https://github.com/vojtamolda/homebridge-bluetooth
[15] Решение nRF52832 Bluetooth smart: http://ultran.ru/reshenie-nrf52832-bluetooth-smart
[16] Источник: https://geektimes.ru/post/294695/
Нажмите здесь для печати.