- Цена: $4.85 + Доставка $4.61
Рассказывать подробно о самом решении для управления силовой нагрузкой от Ited под названием Sonoff RF, я не вижу смысла, так как на mysku уже существует подобный обзор от пользователя spc. В данном обзоре, мне бы хотелось затронуть практическую сторону на примере реализации управления выключателем Livolo. Если кому-то интересна подобная тематика, прошу под кат.
Хотелось бы сразу отметить, что, не смотря на очевидные плюсы sonoff, типа готового аппаратно-программного решения в корпусе и народного Wifi модуля ESP8266 внутри, есть очень жирный минус — это закрытая прошивка и привязка к облачным сервисам Itead. Не нужно быть специалистом в области информационной безопасности, чтобы осознать какие могут возникнуть риски. Чтобы не изобретать велосипед и упростить выполнение поставленной задачи, было решено использовать прошивку с открытым исходным кодом от Theo Arends — Sonoff-MQTT-OTA-Arduino.
Что нам потребуется
+ Itead Sonoff;
± Любой USB-UART переходник FTDI32RL, Cp2102 и т.д.*;
+ Wifi роутер в режиме точки доступа;
+ Локальный или облачный MQTT сервер;
± Паяльник, припой, флюс, штырьковый разъем и некоторые навыки пайки*.
* Можно использовать Веб-сервер и прошивку по воздуху (OTA: Over-the-air)
Подключаем sonoff через USB-UART
Для прошивки по USB-UART припаиваем штырьки
Внимание! Перед прошивкой по USB-UART отключите AC питания sonoff
У меня в наличии есть только переходник, основанный на микросхеме CP2102 от SILICON LABS, обзор на который уже были на mysku.
Sonoff RX -> TX UART
Sonoff TX -> RX UART
Sonoff VCC -> 3.3V UART
Sonoff GND -> GND UART
Установка и настройка ESP8266 Arduino IDE
Внимание!!! Возможны проблемы при компилации скетчей на Windows XP единственное известное мне, работающее решение — это использование Portable версии Arduino IDE.
Пример ошибки
c:\documents and settings\USERNAME\local settings\application data\arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\1.20.0-26-gb404fb9-2\xtensa-lx106-elf\include\c++\4.8.2\bits\stl_algobase.h:59:28: fatal error: bits/c++config.h: No such file or directory
#include <bits/c++config.h>
compilation terminated.
exit status 1
Порядок действий
1. Скачиваем архив с Arduino 1.6.8+ с официального веб-сайта
2. Распаковываем архив в папку, например ESP8266_Arduino
3. Создаем в папке ESP8266_Arduino, папку Portable
4. Запускаем Arduino и открываем окно с настройками Файл->Настройки (File->Preferences);
5. Вводим arduino.esp8266.com/stable/package_esp8266com_index.json в Дополнительные ссылки для менеджера плат (Additional Board Manager URLs field).
Вы можете использовать несколько URL’ов, разделенных запятыми;
6. Окрываем окно с менеджером плат Иструменты->Плата:*->Менеджер плат (Tools->Board:*->Board Manager) и устанавливаем платформу esp8266
7. Копируем директорию sonoff в Ваш sketchfolder посмотреть путь можно в Файл->Настройки->Размещение папки скетчей (File->Preferences)
8. Скачиваем и распаковываем pubsubclient MQTT library в директорию portable\sketchbook\libraries. Переименовываем pubsubclient-master в pubsubclient и редактируем следующий файл pubsubclient\src\PubSubClient.h
Изменяем MQTT_MAX_PACKET_SIZE с 128 на 1024
Изменяем MQTT_KEEPALIVE с 15 на 120
Компиляция и загрузка прошивки
Для sonoff выбираем Инструменты->Плата:*->Generic ESP8266 Module (Tools->Board:*->Generic ESP8266 Module) и устанавливаем следующие настройки:
Flash Mode: QIO
Flash Frequency: 40MHz
Upload Using: Serial
CPU Frequency: 80MHz
Flash Size: 1M (64K SPIFFS)
Debug Port: Disabled
Debug Level: None
Reset Method: ck
Upload Speed: 115200
Port: Ваш COM-порт к которому подключен sonoff
Открываем sonoff.ino и изменяем параметры подключения к Wifi и MQTT серверу.
Название вашего проекта, если планируется использовать множество sonoff устройств, то меняем, например на sonoff1, sonoff2… sonoffx
#define PROJECT "sonoff"
…
Задаем имя и пароль от вашего Wifi-роутреа\точки, к которой sonoff будет подключаться.
// Wifi
#define STA_SSID ""
#define STA_PASS ""
Вывод полезной для отладки информации в SERIAL
#define SERIAL_LOG_LEVEL LOG_LEVEL_DEBUG_MORE
«Прошивка по воздуху» меняем адрес на свой HTTP сервер и копируем файлы, если не требуется можно оставить, как есть по умолчанию.
// Ota
#if (ARDUINO >= 168)
#define OTA_URL "https://192.168.0.102:80/api/arduino/"PROJECT".ino.bin"
#else
#define OTA_URL "https://192.168.0.102:80/api/arduino/"PROJECT".cpp.bin"
#endif
Адрес MQTT сервера и порт
// MQTT
#define MQTT_HOST "192.168.0.102"
#define MQTT_PORT 1883
...
Пользователь и пароль для подключения к MQTT серверу
#define MQTT_USER ""
#define MQTT_PASS ""
Перед подключением USB-UART к порту компьютера, зажмите и удерживайте кнопку на sonoff, после подключения нажмите кнопку Загрузка в Arduino IDE, когда на экране появится сообщение о прошивке и появится прогресс бар, кнопку можно отпускать.
Использование
Проверим работоспособность, кратковременно нажимаем кнопку на sonoff, светодиод должен моргнуть дважды и устройство отправит сообщение «on» в топик stat/sonoff/POWER
Открываем монитор порта
RTC: sntp 0, Thu Jan 01 00:00:00 1970
APP: Multipress 1
MQTT: sonoff/LIGHT = 2
MQTT: Receive topic cmnd/sonoff/LIGHT, data 2
MQTT: DataCb Topic sonoff, Group 0, Type LIGHT, data 2 (2)
MQTT: sonoff/LIGHT = On
Config: Saved configuration to flash at F9 and count 38
Проверим работу sonoff с MQTT сервером, запускаем любой mqtt клиент на компьютере (MQTT Spy) или мобильном телефоне (MyMQTT), подключаемся и публикуем запись off в топик cmnd/sonoff/LIGHT
В Мониторе COM-порта:
Wifi: Check connection
MQTT: Receive topic cmnd/sonoff/LIGHT, data off
MQTT: DataCb Topic sonoff, Group 0, Type LIGHT, data off (OFF)
MQTT: sonoff/LIGHT = Off
RTC: sntp 0, Thu Jan 01 00:00:00 1970
В топике stat/sonoff/LIGHT должно появится сообщение с контентом Off.
Полный список команд, которые поддерживает данная прошивка, можно найти на странице проекта в Github
Доработка
У ESP8266 в sonoff есть свободные GPIO, которые можно использовать для подключения дополнительных модулей (Радиопередатчик, различные датчики и.т.д.).
В качестве примера подключим радиопередатчик RF433 и добавим в прошивку, новую команду LIVOLO для управления выключателями.
Список свободных и легкодоступных GPIO:
— GPIO1 — TX UART
— GPIO3 — RX UART
— GPIO12 — Красный светодиод
— GPIO13 — Зелёный светодиод, смело можно подключить второе реле
— GPIO14 — Пятый вывод возле UART (Только в новых ревизиях платы)
У моей sonoff, есть выведенный GPIO14, поэтому я буду подключать к нему. Очень интересный вариант, использовать отверстия под радиоприемник для подключения радиопередатчика, кому будет интересно оставляю ссылку.
Для отправки команд выключателям Livolo воспользуемся соответствующей библиотекой. Скачиваем и копируем папку в libraries.
Внимание код представлен для ознакомления и очень далек от идеала, например вместо substring, лучше использовать строковые функции C++.
Прошиваем и публикуем запись на MQTT сервере в топик cmnd/sonoff/LIVOLO с данными
RemoteID:23801,KeyCode:8
RF433 передатчик, должен передать идентификатор и код по радиоканалу, можно подключать множество устройств меняя значения RemoteID и KeyCode.