Альтернативная прошивка для sonoff и управления Livolo

  • Цена: $4.85 + Доставка $4.61

 

Update: Добавлено видео

Рассказывать подробно о самом решении для управления силовой нагрузкой от 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++.

Исправленная прошивка с добавлением команды Livolo.


























































































































































































































































































































































































































































































































































































































































































































































































Прошиваем и публикуем запись на MQTT сервере в топик cmnd/sonoff/LIVOLO с данными

RemoteID:23801,KeyCode:8

RF433 передатчик, должен передать идентификатор и код по радиоканалу, можно подключать множество устройств меняя значения RemoteID и KeyCode.

Заключение

Устройство у Itead получилось интересное и достаточно простое в использовании, к тому же в сообществах развиваются различные доработки и альтернативные прошивки

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *