О чем эта статья


Продолжаем цикл статей о ShIoTiny — визуально программируемом контроллере на базе чипа ESP8266.

В этой статье рассказано о том, что изменилось со времени предыдущей прошивки ShIoTiny: как изменился интерфейс пользователя; как переназначить «ножки» и другие менее важные, но не менее долгожданные вещи.

Статья представляет что-то вроде "информационного листка" о состоянии дел на поприще разработки прошивки ShIoTiny. Те, кто не заинтересовался этой моей разработкой могут со спокойной совестью эту статью пропустить.

Те, кто не знает о чем речь, но хотят узнать — могут прочитать мои предыдущие статьи о прошивке ShIoTiny или обратится к документации.

Сайт проекта ShIoTiny

Онлайн-версия редактораElDraw — точно такая же как в прошивке, для ознакомления.

Ссылки на схемы, прошивку и прочее — на сайте ShIoTiny в разделе документация.

Предыдущие статьи о ShIoTiny и другие мои статьи

Вступление для успокоения почтенной публики


Так уж сложилось, что, четвертый квартал — это перманентный аврал. Поэтому некоторые товарищи уже начали хоронить проект ShIoTiny и писать мне на почту, дескать — «эй, автор, ты где?! чего не пишешь?! мы тут твою прошивку используем! а ты ни одной новой статьи!»
Разумеется, что это было в вежливой форме, но по смыслу именно так. Некоторые наоборот, писали предложения и замечания, чем очень помогали в ловле программных блох. Спасибо вам, ребята. Всегда приятно, что не варишься в собственном соку, а имеешь единомышленников.

Друзья! Я напоминаю, что проект мой — хобби и кроме него у меня есть работа, жена и детишки. Так что прошу вас: будьте снисходительны! Автор пишет как умеет и может:)

Спешу всех успокоить: проект не умер! Я выловил довольно много блох из кода и кроме того переделал сайт проекта (правда ещё не до конца — набиваю сайт контентом).

С точки зрения большинства философских учений в мире нет ничего постоянного. Даже наша вселенная эволюционирует. Что уж говорить о прошивке микроконтроллера или сайте проекта?

Ключевые изменения в прошивке ShIoTiny коснулись прежде всего двух вещей: возможности переопределения ножек и страницы состояния контроллера. О них мы и поговорим. Что касается нового дизайна сайта проекта — то я его тут касаться не буду: кому любопытно — зайдут, посмотрят и покритикуют.

Переопределение «ножек» ESP8266


Итак, ножки или они же — GPIO. Изначально, ножки микроконтроллера ESP866 переопределять не предполагалось. Они были жестко прибиты к входам и выходам платы ESP-07 (кому интересно — о ней все есть на сайте проекта).

Но внезапно обнаружилось, что моя прошивка безо всякой переделки идет не только на модуле ESP-07 с 1Мб FLASH, но и на ESP-01, ESP-12 и даже на ESP-8285!

Справедливо встал вопрос о том, что одному нужно 5 входов и один выход, другому — 6 выходов и ни одного входа, третьему — три термометра одновременно.

Волна писем от негодующей общественности чуть не помрачила остатки моего разума! Жена уже готовилась вызвать мне санитаров со смертельной рубашкой… Но я оказался крепким орешком!
Стиснув зубы и выпив литра три кофе, я собрал остатки мозга, по случайности не пропитые в студенчестве и придумал — как реализовать фокус с переопределением ножек, чтобы всем стало хорошо.

Я не буду утомлять читателя внутренней кухней программы. С точки зрения пользователя все выглядит предельно просто: он тыкает мышкой на узел, который связан с какой-либо ножкой GPIO модуля и выбирает из списка одну ножку из возможных. Примерно так, как показано на рисунке ниже.



N/A — означает, что ножка не выбрана.
Если в схеме есть узел с не выбранной ножкой N/A, то такую схему загрузить в устройство нельзя — не позволит редактор ElDraw. Но такую схему можно выгрузить на диск, чтобы продолжить ее редактирование «когда-нибудь потом».

Все очень просто, но есть нюансы.

Во-первых, что очень на мой взгляд удобно, в списке отображаются только неиспользуемые ножки. То есть два раза выбрать одну ножку — невозможно.

Во-вторых, ножка GPIO15 — зарезервирована под кнопку AP и её нельзя использовать для других целей. Простите, но иначе — никак…

Во-третьих — ножку GPIO16 нельзя использовать как обычный бинарный вход (узел Input).

В-четвертых — ножки GPIO9 и GPIO10 можно использовать только на модуле ESP-8285. На других модулях результат будет плачевный — полный зависон и бесконечный перезагрузон!

Последний пункт — зависание некоторых модулей при выборе ножек GPIO9 и GPIO10 заставил меня крепко задуматься. Ведь не хочется каждый раз перешивать контроллер, если неверно выбраны ножки! И я придумал модифицированный, новый способ перехода в режим конфигурации.

Новый способ перехода в режим конфигурации


Если кто читал мои предыдущие статьи, то помнит, что режим конфигурации прошивки ShIoTiny — это режим, когда чип ESP8266 становится открытой точкой доступа, а схема-программа после перезагрузки не запускается автоматически. А раз не запускается — то и не зависнет при выборе каких угодно ножек GPIO.

То есть в режиме конфигурации можно изменить проблемные ножки GPIO9 и GPIO10 на другие. Но вот беда — попасть в режим конфигурации можно было только удерживая кнопку AP примерно 4 секунды! А за это время контроллер успеет начать выполнять «кривую» схему-программу и зависнуть!

Для разрешения этой проблемы, я придумал ввести полусекундный защитный интервал после перезагрузки контроллера. Если в течении 0.5 сек после перезагрузки контроллера будет нажата кнопка AP, то контроллер немедленно перезагрузится в режиме конфигурации. При этом в течении полусекундного защитного интервала схема-программа не запускается. А значит и не может повиснуть.

Минусы очевидны — программа стартует не сразу, а на полсекунды позже. Плюсы куда солиднее — если выбраны «не те ножки» или схема-программа по каким-то иным причинам зависает, то всегда можно перейти в режим конфигурации и исправить ситуацию без перепрошивки контроллера.

На практике все выглядит проще пареной репы: давим кнопку Reset и, отпустив кнопку Reset тут же, не мешкая, давим кнопку AP. Сразу примерно на полсекунды загорается синий светодиод STATUS (если вы его, конечно, припаяли к GPIO0) и контроллер перезагрузится в режиме конфигурации.

Если схема-программа работает нормально — то можно всегда перейти в режим конфигурации «старым» способом — нажав и удерживая кнопку AP примерно 4 секунды (пока не загорится синий светодиод STATUS).

Страница состояния ShIoTiny


Возможность подключения ножек по воле пользователя привела к пересмотру главной информационной страницы прошивки ShIoTiny.

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

То, что у меня получилось показано на рисунке ниже.



На главной информационной странице два раздела: Info — общая информация и Used GPIOs — информация о использовании ножек ввода-вывода. Рассмотрим их подробнее.

Раздел Info


Name: esp_8266_155da4 — уникальное имя устройства. Оно генерируется автоматически и изменить его нельзя.

Ver: 2019-10-22 22:54:51 +0700 6b5ee82 clean — версия прошивки (дата сборки и идентификатор коммита).

MQTT: Connected to: 192.168.1.2:21064, SSL — соединение с сервером MQTT. показан IP-адрес или URL сервера, порт сервера и режим SSL, если используется защищенное соединение. Помните, что если в схеме-программе нет узлов работы с MQTT — то и соединение устанавливаться никогда не будет!

WiFi: STA ip: 192.168.1.134. — режим работы WiFi ESP8266: STA — станция, AP — точка доступа. Могут быть одновременно выбраны оба режима с различными IP-адресами.

Now: Wed Oct 30 2019 21:49:28 GMT+0700 — текущее время. Показано только есть время установлено узлом Set Time! Иначе будет указано, что время не синхронизировано и не установлено.

Раздел Used GPIOs


В этом разделе показаны все используемые в схеме-программе ножки модуля и их текущее состояние.

Формат вывода очевиден: GPIO <номер ножки> (функция): состояние
Номер ножки — число или, для АЦП — вместо номера будет надпись adc.
Функция: Input — бинарный вход; Relay — бинарный выход; ADC — АЦП или тип датчика: DS182x или DHTxx.

Поле «состояние» — зависит от назначения ножки.
Для бинарных входов и выходов — 0 или 1.
Для датчиков — температура, влажность.
Для АЦП — его показания, пересчитанные по заданной формуле (смотрите описание работы с АЦП в инструкции).

На мой взгляд главная страница содержит всю необходимую информацию о работе контроллера.

Заключение


Вот, собственно, и все главные изменения в прошивке на сегодняшний день. Кроме этих новшеств было исправлено ещё десятков пять мелких ошибок.

Как обычно — подробная инструкция на сайте ShIoTiny в разделе документация или тут.

Предложения, пожелания, критику, деньги, подарки и так далее — присылайте мне в комментарии или на почту: shiotiny@yandex.ru.

Жду отзывов и предложений.

Комментарии (7)


  1. sterr
    30.10.2019 21:57

    Вот теперь можно нормально работать. Вроде всего хватает. Не хватает только энергосбережения, но это критично только для автономных проектов. Ну и PWM.


  1. clawham
    30.10.2019 22:49

    Отличная новость СПАСИБО!
    будем развиваться в дальнейшем применении вашего контроллера.
    ещё интересует в каком формате ваша поделка принимает пакеты по UDP?
    суть в том что недостающие входы-выходы/термодатчики/барометры и прочее можно передавать/получать через вашу систему обмена данных… но реверсинженерить её как-то не хочется — можете на эту тему статейку написать а я поделюсь тем что к этому протоколу прикручу!


  1. shiotiny Автор
    31.10.2019 05:43

    ещё интересует в каком формате ваша поделка принимает пакеты по UDP?
    суть в том что недостающие входы-выходы/термодатчики/барометры и прочее можно передавать/получать через вашу систему обмена данных…


    Формат простейший: в UDP передается пакет-JSON.
    {
    "d": "имя устройства",
    "p": "название параметра",
    "v":  значение параметра число или <b>inf</b> или <b>nan</b>
    }


  1. Gargo
    31.10.2019 12:05

    главный вопрос — почему именно esp8266, а не например, более современная esp32?


    1. shiotiny Автор
      31.10.2019 12:28

      главный вопрос — почему именно esp8266, а не например, более современная esp32?


      Так исторически сложилось. Возможно, потом займусь портированием на ESP32 и STM, например.


  1. Balanda911
    02.11.2019 07:40

    Отличная работа. Спасибо. А можно допилить возможность соединения с mqtt сервером через ssl сертификаты? Хотелось бы отправлять данные прямиком в yandex iot.


    1. shiotiny Автор
      02.11.2019 07:42

      А можно допилить возможность соединения с mqtt сервером через ssl сертификаты? Хотелось бы отправлять данные прямиком в yandex iot.


      А тот SSL, что у меня уже есть — не работает с yandex iot? MQTT-сервер mosquitto прекрасно работает через SSL с shiotiny — это проверено. С yandex iot я не проверял.