Пишем свою прошивку для модулей Sonoff TH10/16

logo4

Недавно на Geektimes был обзор про модули ITEAD TH10. Хочу поделиться опытом разработки собственной прошивки для этих устройств.

SONOFF — серия выключателей, розеток и других приборов категории «Интернета вещей» от компании ITEAD. Их характеризует довольно низкая цена, использование «народного WiFi модуля» ESP8266 и работа в собственном сервисе, расположенном в облаке Amazon AWS global server.

Для этих модулей есть сторонние прошивки. Например, MQTT OTA, собираемой с ESP SDK илитоже самое но в среде Arduino IDE

Я хочу поделиться опытом создания собственной прошивки на Sonoff TH10 в среде Ardiono IDE.

Модули Sonoff мне понравились сразу. Начиная от упаковки:

000

Внешнего вида:

101

100

Качественной сборки и пайки:

102 104

И заканчивая проработанной схемотехникой, в которой явно не пожалели транзисторов для управления нагрузкой, подтягивающих и согласующих резисторов и кондеров.

page1 page2

Поддержкой же и документацией своих устройств компания ITEAD может заткнуть за пояс многих именитых производителей, не утруждающих себя публикацией технических подробностей на свои железки. Да и список продуктов компании ITEAD вполне впечатляет

По сути своей Sonoof TH10/16 — это ESP8266 с сетевым блоком питания, периферией в виде реле, светодиодов, датчиков температуры и влажности, с колодкой подключения и в приличном корпусе.

300

Я опущу описание, как подключить Sonoff к облачному сервису и управлять приложением eWeLink на смартфоне. На мой взгляд, полностью неприменимо, когда управление контроллерами зависит от интернета и учетной записи в каком то облаке, пусть и на амазоновских серверах. Поэтому оставим приложение eWeLink для демонстрации возможности Sonoff и напишем свою управляющую программу.

Для этого нужно впаять 4-х штырьковый разъем для подключение к USB/TTL конвертеру.

103

Имея негативный опыт перепрошивки Sonoff POW, очень рекомендую все работы по программированию проводить с отключенной силовой частью Sonoff и питанием через штырек 3.3В.

Последний USB/TTL у меня героически погиб вместе с модулем Sonoff POW, поэтому использую для подключения Arduino UNO с RESETот подтянутым к земле. 3.3-вольтовый стабилизатор Уны отлично справляется с нагрузкой в виде ESP8266 и всей периферии модуля.

200

Как среду разработки буду использовать Arduino IDE и за легкости установки и обилия готовых библиотек и примеров, хотя как программист со стажем по прежнему считаю, что для разработки программ любой сложности вполне достаточно VI и make ))).

Как устанавливать ESP8266 Core for Arduiono IDE я уже писал. От себя хочу рекомендовать версию Arduino IDE 1.6.5, как имеющую меньше всего глюков при работе с ESP.

arduino-ide-1

 

Так как на плате установлена микросхема памяти на 1Мбайт, выбираем соответствующую конфигурацию при загрузке в Board Manager:

arduino-ide-4

Теперь достаточно нажать кнопку контроллера Sonoff и передернуть питание, устройство переходит в режим загрузки прошивки.

arduino-ide-5

Для того чтобы самому программировать контроллер, нужно понимать, к каким портам что подключено. Для этого можно воспользоваться схемой на сайте ITEAD, ссылку на которую я приводил выше и тестером.

Итак, что мы имеем:

GPIO0 — кнопка (это понятно, когда мы включали бутлоадер)
GPIO12 — красный светодиод и реле
GPIO13 — синий светодиод
GPIO14 и GPIO4 выведены на разъем подключения датчиков.

Причем оба датчика однопроводные и используют GPIO14. GPIO4 еще нужно включить перемычкой на плате.

Да. Не густо, хотя и больше чем у ESP01.

GPIO2 и GPIO15 имеют подтягивающие резисторы на плате, можно подпаяться к ним. GPIO5 и ADC вообще никуда не распаяны и нужно подключаться прямо к микросхеме ESP. Оставим эти четыре вывода в покое и приступим к программированию.

Скетч мигания светодиодами Sonoff

Светодиоды работают в противофазе. Синий загорается, когда на нем низкий уровень. Реле срабатывать не должно из за отсутствия питания 5В. В дальнейшем я буду использовать синий светодиод для отображения различных режимов. Подробно про это я написал в этой статье

На кнопке я подробно останавливаться не буду. Да управления кнопками я написал удобную библиотеку, которая отлавливает длинное и короткое нажатие, автоповторение при длинном нажатии и давит дребезг контактов. Все это я подробно описал в своем блоге.

Теперь сенсоры. Мне прислали датчик температуры/влажности AM2301 и датчик температуры DS18B20 в водонепроницаемом исполнении.

301

AM2301 совместим с сенсором DHT21. Для его работы нужна библиотека DHT. Форков библиотеки DHT существует великое множество, я рекомендую брать версию от Adafruit в которой есть автонастройка на частоту контроллера и которая корректно работает на ESP8266.

Скетч работы с сенсором AM2301

302

Для подключения DS18B20 нужна библиотека OneWire. Полностью совместима с ESP мультиплатформенная версия этой библиотеки

Алгоритм опроса датчика берем из примера:

Скетч работы с сенсором DS18B20

  • 303

    Ну вот, периферия работает. Дальше я использую существующие свои наработки. Полностью всю прошивку можно взять отсюда

    Особенности прошивки:

    • Автоматическое определение сенсоров AM2301 и DS18B20
    • Длинное нажатие кнопки — вкл/откл режима точки доступа
    • Короткое нажатие кнопки — вкл/откл реле
    • Синий светодиод горит — соединение установлено, двойная вспышка — нет подключения, одинарное мигание — режим точки доступа
    • Локальный WEB-сервер в режиме точки доступа 192.168.4.1
    • при подключении к WiFi по тому IP адресу который настроен
    • Авторизация доступа по паролю. По умолчанию admin/12345
    • Сохранение параметров на сервер в интернете обычным HTTP запросом. Можно настроить любой сервер, например, народный мониторинг. А можно и локальный без всякого интернета.
    • Сохранение настроек в EEPROM
    • При подключении к интернету установка времени по NTP

    config root

    Итог

    SONOFF — это удобная платформа в первую очередь для тех, кто может самостоятельно разрабатывать и дорабатывать управляющие программы.

    Тем кто знаком с ESP8266 — Sonoff это экономия на сборке, пайке и деталях, при условии, что вам нужна именно такая конфигурация устройства, как заложена в конкретном модуле Sonoff.

    Самый большой недостаток данных модулей то, что часть GPIO не разведены на разъемы. Ну что стоит сделать компании ITEAD гребенку с 8 pin и завести туда все свободные GPIO от ESP. Я думаю, популярность бы таких модулей при существующей цене сильно бы выросла.

    Для себя я нашел такие сферы приложения данного проекта:

    Контроллер управление вентилятором в ванной. . Правда датчик освещенности придется заменить на цифровой с компаратором, а от дисплея отказаться.

  • Управление фитолампами по расписанию с мониторингом температуры, и датчиком влажности почвы, выдающим частоту на порт GPIO4
  • Сторожевой таймер для роутера DIR320, который я использую для подключения всех ESP у себя дома и который имеет неприятную особенность раз в месяц подвисать не зависимо от прошивки. Заодно мониторить температуру процесора этого роутера

c01

Вы можете оставить отзыв или трекбек со своего сайта.

8 комментариев на «Пишем свою прошивку для модулей Sonoff TH10/16»

  1. user:

    в исходниках по ссылке https://github.com/samopal-pro/custom_th10 похоже мелкая ошибка — в файле WC_HTTP.cpp строка 336 — должно быть примерно так
    if( server.hasArg(«HTTP_PASS») ){
    if( strcmp(server.arg(«HTTP_PASS»).c_str(),»*») != 0 ){
    strcpy(EC_Config.HTTP_PASS,server.arg(«HTTP_PASS»).c_str());
    }
    }

    а не
    if( server.hasArg(«HTTP_PASS») ){
    if( strcmp(server.arg(«HTTP_PASS»).c_str(),»*») != 0 ){
    strcpy(EC_Config.HTTP_PASS,server.arg(«WEB_PASS»).c_str());
    }
    }

    см WEB_PASS

  2. Андрей:

    День добрый.
    А что надо подправить, чтобы он всегда оставался точкой доступа и после пропадании/появлении напряжения реле включалось.
    з.ы. надо для перезагрузки роутера, чтоб ночью через всех не бегать.

  3. Никита:

    Добрый день! Подскажите, есть ли какая нибудь возможность управлять этим модулем с ПК, со стандартной прошивкой?

  4. Mihail:

    Подскажите пожалуйста для совсем тупых, как вашу готовую прошивку залить? Работа через облако это его самый большой минус конечно

    • Alexey Alexey:

      Поставить Arduino IDE 1.6.8
      Поставить ESP8266 2.3 подArduino IDE
      Подключить USB/UART ковертер как написано в статье, скомпилировать и загрузить прошивку в Ardiono IDE

      • Mihail:

        Спасибо, теперь по шагам всё ясно. Давно хотел освоить ардуино, вот и полезная задача нарисовалась 🙂

  5. Вася:

    Немного переделал Ваш скетч под себя, на sonoff th16 отлично работает, а вот на sonoff th10 ничего не происходит. Прошивка проходит удачно, но после нет никакой реакции. подскажите, что может быть?
    P.S. Раньше использовал другой скетч, там управление реле было возможно через ссылку типа http:\\ip_address\relay1\1 чтобы включить первое реле. Удобно это тем, чтобы в итоге использовать отдельный вебсервер с управлением всеми устройствами по http-запросам. Можно ли сделать что-то подобное используя ваш скетч?

Ваш отзыв