Как построить схему управления на arduino и esp8266 с настраиваемыми таймерами, контролируемую через wi-fi

Содержание

Введение

Успех ESP8266 от Espressif Systems неоспорим. Это мощный микроконтроллер обладает встроенным Wi-Fi модулем и легко адаптируется к множеству применений в быстро растущей отрасли IoT (Internet of Things, интернет вещей). Одной из немногих трудностей использования этой микросхемы стало обновление прошивки в тысячах и тысячах отладочных модулей, которые проникли на рынок. Для предыдущей статьи были выявлены некоторые исправления и улучшения, и представление этой информации является целью данной статьи.

В частности, будут рассмотрены следующие улучшения:

  • лучшая схема прошивки;
  • более простая в использовании программа терминала;
  • обновленный инструмент прошивки Flash Download Tool и обновленная прошивка ESP8266 SDK v2.0.0.

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

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

Вспоминаем биты и байты

Объем EEPROM в модуле ESP8266 (например, ESP-01) является очень важным фактором для выполнения процесса прошивки. Это количество EEPROM может быть выражено в различных единицах измерения, а используемые единицы варьируются в документации от места к месту, что может внести некоторую путаницу. Ключевые моменты и таблица, приведенные ниже, включены в качестве справочной информации, чтобы свести эту путаницу к минимуму.

Обозначение для бита b, а для байта – B.
В одном байте (B) содержится восемь бит (b).
Обозначения для килобита Kb, а для килобайта – KB. Аналогично, мегабит обозначается Mb, а мегабайт – MB

И так далее.
Также хорошо бы обратить внимание, что большинство (возможно, все) модули ESP-01 на черных печатных платах содержат 1 MB EEPROM.

Единица измерения Байт (B) Килобайт (KB) Мегабайт (MB) Гигабайт (GB)  Терабайт (TB)
Количество байт 1 1 024 1 048 576 1 073 741 824 1 099 511 627 776

Сборка макетной платы ESP8266

ESP8266 – недорогой SoC-чип со встроенным микроконтроллером и полным стеком протоколов TCP/IP, что означает, что он может напрямую обращаться к вашей Wi-Fi сети.

Поскольку у этого чипа есть свой микроконтроллер, вы можете поместить в него код своего приложения или можете использовать модуль просто как Wi-Fi приемопередатчик, что мы и собираемся сделать в данном проекте. Более эффективно было бы использовать этот модуль и как приемопередатчик, и как контроллер, но в целях обучения мы будем взаимодействовать с модулем, используя Arduino.

Чип ESP8266 поставляется в разных модулях. Мы будем использовать модуль ESP-01. Конечно, вы можете использовать любой другой модуль.

Во-первых, вы должны знать, что модуль работает с напряжением 3,3 В, и напряжение высокого логического уровня от Arduino должно быть таким же, чтобы не повредить наш модуль. Для этого требуется преобразователь уровня напряжения между платой Arduino (которая работает на 5 В) и модулем. Хорошей новостью является то, что в преобразователе будет нуждаться только вывод для передачи на Arduino, поскольку приемный вывод обычно распознает логические сигналы с напряжением 3,3 В от ESP8266.

Одним из простейших способов выполнения этого преобразования является схема от Sparkfun. Вы можете заказать готовый модуль.

Преобразователь уровня 5В → 3,3В

На рисунке ниже показана распиновка нашего модуля на ESP8266:

Распиновка Wi-Fi модуля ESP8266 (вид сверху, не в масштабе)

Вывод Назначение
UTXD Передача данных через UART
URXD Прием данных через UART. Выход, к которому он подключается, должен быть 3,3 В.
CH_PD Выключение: низкий уровень на входе выключает чип, высокий уровень на входе включает его; для нормальной работы модуля необходимо подтянуть его к линии питания.
GPIO0 При загрузке: должен быть высокий уровень, чтобы входить в нормальный режим загрузки; низкий уровень вводит в специальные режимы загрузки.
GPIO2 При загрузке: низкий уровень заставляет загрузчик войти в режим загрузки флеш-памяти; высокий уровень вызывает нормальный режим загрузки.
RST Сброс; активный уровень – низкий.
GND Земля.
VCC Питание/3,3В.

Я использовал LM317, настраиваемый линейный регулятор напряжения с выходным током до 1,5 А, для обеспечения модуля подходящим источником питания 3,3 В.

Примечание: Не используйте вывод 3,3 В от Arduino, так как стабилизатор напряжения 3,3 В на плате Arduino не может обеспечить необходимую для модуля величину тока, особенно при пиковом потреблении энергии во время передачи.

Принципиальная схема макетной платы ESP8266

Я использовал BS170 (вместо BSS138) для преобразователя логических уровней; оба работают хорошо.

Макетная плата ESP8266

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

Распиновка ESP8266 NodeMCU

С внешним миром ESP8266 NodeMCU соединяют всего 30 выводов. Ниже показана распиновка отладочной платы.

Рисунок 6 – Распиновка ESP8266 NodeMCU

Для простоты мы сгруппируем выводы с аналогичными функциями.

Выводы питания – на плате расположено четыре вывода питания, а именно: один вывод VIN и три вывода 3.3V. Если у вас есть стабилизированный источник напряжения 5 В, вывод VIN можно использовать для непосредственного питания ESP8266 и его периферии. Выводы 3.3V – это выходы встроенного стабилизатора напряжения. Эти выводы могут использоваться для подачи питания на внешние компоненты.

GND – это вывод земли отладочной платы ESP8266 NodeMCU.

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

Выводы GPIO На ESP8266 NodeMCU имеется 17 выводов GPIO, которые можно назначать программно на различные функции, такие как I2C, I2S, UART, PWM, дистанционное инфракрасное управление, светодиодный индикатор и кнопка. Каждый включенный вывод GPIO может быть настроен либо на внутреннюю подтяжку к земле или к шине питания, либо установлен на высокоимпедансное состояние. При конфигурировании на вход для генерирования прерываний процессора он может быть настроен на срабатывание либо по фронту, либо по спаду.

Вывод ADC подает сигнал на имеющийся в NodeMCU, встроенный 10-разрядный прецизионный аналого-цифровой преобразователь последовательного приближения (SAR ADC). С помощью этого АЦП могут быть реализованы две функции: проверка напряжения питания на выводе VDD3P3 и проверка входного напряжения на выводе TOUT (но не одновременно).

Выводы UART ESP8266 NodeMCU имеет 2 интерфейса UART, то есть UART0 и UART1, которые обеспечивают асинхронную связь (RS232 и RS485) и могут обмениваться данными со скоростью до 4,5 Мбит/с. Для связи можно использовать UART0 (выводы TXD0, RXD0, RST0 и CTS0), который поддерживает управление потоком. UART1 (вывод TXD1) поддерживает только сигнал передачи данных, поэтому он обычно используется для печати журнала событий.

Выводы SPI ESP8266 имеет два интерфейса SPI (SPI и HSPI), поддерживающих и ведомый (slave), и ведущий (master) режимы. Эти интерфейсы SPI также поддерживают следующие функции SPI:

  • 4 режима синхронизации передачи SPI;
  • до 80 МГц и тактовые частоты, полученные делением 80 МГц;
  • до 64 байт FIFO.

Выводы SDIO ESP8266 имеет защищенный цифровой интерфейс ввода/вывода (SDIO, Secure Digital Input/Output Interface), который используется для прямого подключения карт SD. Поддерживаются 4-битный 25 МГц SDIO v1.1 и 4-битный 50 МГц SDIO v2.0.

Выводы PWM На плате имеется 4 канала широтно-импульсной модуляции (PWM). Выход ШИМ может быть реализован программно и использован для управления двигателями и светодиодами. Частотный диапазон ШИМ регулируется от 1000 мкс до 10000 мкс, то есть от 100 Гц до 1 кГц.

Выводы управления используются, как ни странно, для управления ESP8266. Эти выводы включают в себя вывод включения микросхемы EN, вывод сброса RST и вывод пробуждения WAKE.

  • Вывод EN – микросхема ESP8266 включена, когда на вывод EN подается высокий логический уровень. При низком логическом уровне микросхема работает на минимальной мощности.
  • Вывод RST используется для сброса микросхемы ESP8266.
  • Вывод WAKE используется для вывода чипа из глубокого сна.

ESP-07

Особенности этого модуля — керамическая антенна и разъем для внешней антенны, металлический экран.

Подключение к IoT

Аппаратная часть

Работа с этим модулем, к сожалению, прошла не слишком гладко. Ни один из возможных вариантов подключения не сработал, и я, уже отчаявшись, решила удалять его описание из статьи. Но тут мне дали новый модуль и сказали попробовать еще раз — о чудо, он заработал с первого раза! В чем было дело и как сломался первый модуль, который я мучила, — неизвестно, но скорее всего он был убит нещадной статикой. Мораль этого лирического отступления такова — если у вас что-то не заработало по инструкции, написанной ниже, не вините инструкцию — сначала прозвоните и проверьте все контакты, а потом попробуйте на другом модуле.

1) Собираем схему

ESP-07

USB-Serial

VCC

VCC

CH_PD (рекомендуется через резистор)

VCC

TX

RX

RX

TX

GND

GND

GPIO 15 (рекомендуется через резистор)

GND

GPIO 0 — сначала не подключен, но будет использоваться для перевода в режим программирования далее, поэтому к нему уже подведен провод

все остальные контакты не подключены

RTS, CTS — не подключены

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

2) Переводим в режим программирования (необходимо каждый раз выполнять перед прошивкой модуля)

2.1) Отключаем питание от модуля2.2. Подключаем пин GPIO 0  к GND

2.2) Подключаем пин GPIO 0  к GND

ESP-07

USB-Serial

VCC

VCC

CH_PD

VCC

TX

RX

RX

TX

GND

GND

GPIO 15 

GND

GPIO 0

GND

все остальные контакты не подключены

RTS, CTS — не подключены

2.3) Подключаем модуль к питанию

2.4) Железо готово, приступаем к программной части.

Программная часть

1) Выбираем плату: Tools (Инструменты) -> Board(Плата) Generic ESP8266 Module.

2) Вставляем подготовленный код.

3) Задаем данные для подключения Wi-Fi и идентификатор своего объекта на платформе.

4) Компилируем и загружаем скетч на плату.

5) Для обычной работы модуля (не для режима прошивки) пин GPIO 0 должен быть свободен, поэтому отключаем его от GND.

6) Переподключаем питание ESP-07 (например, вытаскиваем и вставляем обратно адаптер).

7) Видим появление данных на платформе.

В Китае

Получаем VPS сервер бесплатно и навсегда

Здесь я не буду останавливаться подробно — Вы сможете без труда найти статьи как это сделать. Мне понравились VPS, которые предоставляет Oracle — они дают две виртуальных машины и у них 1Gb RAM в каждой, а для нашего проекта 512 может не хватить.

Активация аккаунта Oracle для получения бесплатной виртуальной машины требует международную карту Visa/MasterCard типа WORLD с балансом не менее 100 рублей (списанные средства будут возвращены, это необходимо для верификации карты и владельца). Проверить тип Вашей карты можно заранее на любом сервисе по BIN коду (первые 6 цифр карты), в строке Категория карты должно быть WORLD.

Могу сказать, что эта акция на бесплатные VPS действующая, я зарегистрировал такой аккаунт неделю назад (август 2020).

На этапе выбора образа для виртуалки выберите Ubuntu 20.04 или любой другой дистрибутив linux, если обоснованно считаете это необходимым.

На окончании этого шага Вы должны получить доступ по SSH к новой виртуалке и знать ее внешний (публичный) IP адрес (не пугайтесь, с настройками по умолчанию этот адрес не пингуется из интернета). Для новичков могу сообщить, что приватные (частные) IP адреса начинаются на 10. и выглядят, например, так 10.0.0.15 (есть и другие частные подсети, погуглите) Нам нужен не этот адрес, а другой, общедоступный IP-адрес.

Организация кода

Структура директорий

Файлы проекта распределены по директориям. В основной директории — конфигурационные файлы, необходимые для сборки. Их можно просто скопировать, и только в CMakeLists.txt изменить название проекта, если вы склонировали проект не в директорию kettle_example. Директория build генерируется при сборке и не содержит исходного кода

Основное внимание на директории main и components, которые содержат компоненты с исходным кодом. В директории components располагаются все сторонние компоненты/библиотеки

В main — написанный нами код, а именно файлы работы с Capabilities, файлы управления периферией и файл main.c с бизнес-логикой. Также в main есть файл CMakeLists.txt, необходимый для сборки проекта. Процесс сборки рассмотрим далее.

Отличие сборки проекта по сравнению с ESP8266

В примерах для ESP8266 используется система сборки Make. Для успешной сборки нужно иметь Makefile в директории проекта со следующим минимальным содержимым:

В сборке под ESP32 в дополнение используется CMake, который позволяет использовать и другие системы сборки помимо Make, например Ninja. 

В каждом проекте содержится один или несколько компонентов. Компонент — это директория, в которой есть файл CMakeLists.txt. Директория main — это особенный компонент, который содержит исходный код самого проекта. Поэтому помимо файла CMakeLists.txt в директории проекта, необходимо создать файл CMakeLists.txt в директории main. Содержимое этого файла можно скопировать с других примеров от SmartThings. В нашем примере CMakeLists.txt отличается лишь тем, что в idf_component_register, который регистрирует компонент, перечисляются не исходные файлы, а директории с исходными файлами. Для этого в idf_component_register используем не SRCS с перечислением файлов, а SRC_DIRS с перечислением директорий:

Подробнее о системах сборки ESP-проектов можно прочитать в соответствующих разделах документации для ESP32 и для ESP8266.

Подгрузка компонентов/библиотек для датчика температуры

У нас используется датчик температуры DS18B20, который работает по 1-Wire шине. В проекте используется 2 компонента, совместимых с ESP32: esp32-owb и esp32-ds18b20.

  • Компонент esp32-owb — это библиотека для работы с протоколом 1-Wire. 

  • Компонент esp32-ds18b20 — это библиотека, которая предоставляет удобное api для работы с датчиком температуры, без необходимости напрямую работать по 1-Wire протоколу.

В нашем гит-проекте эти компоненты используются как подмодули/submodules, и чтобы их подгрузить, при клонировании проекта нужно использовать флаг —recurse-submodules:

Подгрузить подмодули можно и после обычного клонирования без флага —recurse-submodules.  Для этого в основной директории проекта kettle_example инициализируем и обновляем подмодуль следующими командами:

Подробнее о подмодулях вы можете прочитать в соответствующей главе книги “Pro Git”.

Почему FreeRTOS и Arduino Core

На Arduino написаны куча библиотек, в частности тот же самый Blynk, поэтому от Arduino Core особо то и не уйдёшь.

FreeRTOS потому что позволяет организовать работу маленькой железки похожей на работу полноценного промышленного контроллера. Каждую задачу можно вынести в свою таску, останавливать её, запускать, создавать когда надо, удалять — всё это намного гибче, чем написание длинной портянки Arduino кода, когда в итоге всё выполняется по очереди в функции loop.

При использовании FreeRTOS каждый таск выполнится в строго заданное время, лишь бы хватило мощности процессора. Напротив, в Arduino весь код выполняется в одной функции, в одном потоке, если что то притормозило — остальные задачи выполнятся с задержкой. Особенно это заметно при управлении быстрыми процессами, в этом проекте это мигание фонарём и гудки сиреной, будут рассмотрены ниже.

Arduino IDE

Для использования совместно с ESP8266 рекомендуется использовать Arduino IDE версии 1.6.5. Если у вас более ранняя версия, то можете попробовать и её или обновить IDE до версии 1.6.5.

  • Как только у вас будет установлена подходящая версия Arduino IDE, запустите программу, перейдите в меню File (Файл) → Preferences (Настройки) и найдите в диалоговом окне поле ввода Additional Board Manager URLs (Дополнительные ссылки для Менеджера плат)

    http://arduino.esp8266.com/stable/package_esp8266com_index.json

    . Введите следующий URL точно, как он написан, и нажмите OK:

  • Затем нажмите Tools (Инструменты) → Board Manager (Менеджер плат) и прокрутите список вниз, чтобы найти «esp8266 by ESP8266 Community«. Выберите эту запись и нажмите кнопку Install (Установка); загрузка и установка начнутся и будут продолжаться несколько минут. Пока дополнение устанавливается, взгляните на поддерживаемые платформы. В дополнение к базовому модулю ESP826 обеспечивается поддержка NodeMCU, Huzzah и SweetPea. К тому моменту, когда вы будете читать данную статью, этот список возможно расширится.
  • Когда установка закончится, нажмите кнопку Close (Закрыть).
  • Теперь нажмите Tools (Инструменты), перейдите в список плат и выберите «Generic ESP8266 Module«.
  • Снова нажмите Tools (Инструменты) и убедитесь, что выбран Generic ESP8266 Module.
  • Нажмите File (Файл), Examples (Примеры) и прокрутите список вниз, пока не дойдете до ESP8266WiFi, а затем выберите WiFiScan. После этого должно будет открыться новое окно IDE со кодом примера WiFiScan.

Снова подключите схему к компьютеру и убедитесь, что на ESP-01 горит красный светодиод. Нажмите Tools (Инструменты), Port (Порт) и выберите порт, к которому подключен ESP-01. Наконец, вы готовы запрограммировать ESP-01.

Нажмите и удерживайте кнопку Reset, а затем нажмите и удерживайте кнопку Flash. Отпустите кнопку Reset и, удерживая нажатой кнопку Flash, нажмите кнопку со стрелкой Загрузка в Arduino IDE. Скетч должен скомпилироваться и загрузиться примерно за минуту, и когда компилирование будет завершено, отпустите кнопку Flash. Скомпилированный код будет отправлен в ESP-01; когда отправка будет завершена, на ESP-01 замигает синий светодиод.

Чтобы посмотреть результаты всех этих нажатий и выбираний, нажмите Tools (Инструменты), Serial Monitor (Монитор порта) и установите скорость передачи в правом нижнем углу окна монитора порта на 115200. Если у вас более ранняя версия ESP-01 (возможно на синей печатной плате), скорость передачи данных, скорее всего, равна 9600.

ESP-01 должен сканировать Wi-Fi сети и сообщать о результатах в окне монитора порта, как показано на примере ниже.

Результаты сканирования Wi-Fi сетей модулем ESP-01

Среди сообщений вы должны увидеть свою собственную сеть и все остальные сети, которые сумел поймать ESP-01

Числа в скобках показывают уровень сигнала сети (обратите внимание, что эти числа отрицательные; следовательно, уровень сигнала -41 выше, чем -92)

Подключение

Рисунок 1. Назначение контактов модуля ESP-01

Схема подключения для общения с модулем в режиме AT-команд (рисунок 2):

Рисунок 2. Схема подключения модуля ESP-01 к компьютеру по последовательному порту

Рисунок 3. Схема в сборе

Для отправки команд AT-команд в ОС Mac OS X можно использовать программу CoolTerm, в операционной системе Windows программу Termite. Узнать скорость COM-порта для соединения с модулем можно только экспериментально, для разных прошивок она может быть разной. Для моего модуля скорость оказалась равной 9600 бод. Кроме того установить обмен удалось только после отключения и повторного подключения к питанию вывода CH_PD. После подключения набираем в терминале AT и должны получить в ответ от модуля OK. Команда AT+GMR выдает номер версии прошивки модуля, команда AT+RST — перезагружает модуль (см. рис. 4). Список основных AT-команд можно посмотреть в этом документе (ESP8266ATCommandsSet.pdf).

Рисунок 4. Отправка AT-команд в модуль из программы Termite

Рисунок 5. Программа AppStack ESP8266 Config

Рисунок 6. Serial monitor программы AppStack ESP8266 Config

Как настроить ESP8266 в режим точки доступа

Модуль ESP8266 может не только подключаться к точкам доступа, но и сам быть точкой доступа. Это значит, что вы можете подключать устройства к ESP8266 безо всяких проводов. Это отлично подходит, к примеру, для создания локального приватного «drop box»

Модуль уже идет с заранее заданной точкой доступа (название сети будет «ESP_…», но вы можете указать и собственные данные:

AT+CWSAP="NoWorriESSID","password",3,0

Первый параметр – это SSID, второй – это пароль к SSID, третий – номер канала, а четвертый – тип шифрования. Цифра «0» в данном случае означает, что шифрование выключено, а пароль будет игнорироваться, но по-прежнему не должен быть пустым значением. У меня, правда, никогда не получалось настроить шифрование (я всегда создаю незашифрованную сеть), но вы, возможно, будете удачливей меня…

Чтобы создать сеть, вам нужно выставить WiFi-режим модуля либо в «AP» («2»; это значит «точка доступа»), либо в «Both» («3»; это значит «точка доступа + клиент»).

AT+CWMODE=3

Готово! Модуль ESP8266 стал точкой доступа. Теперь вы можете подключиться к нему с другого устройства (например, с ноутбука или телефона).

Кроме того, вы можете получить IP-адреса всех устройств, подключенных к ESP8266. Для этого впишите следующее:

AT+CWLIF

В ответ должно выдать примерно следующее:

192.168.4.100, ...

Теперь ESP8266 можно настроить на режим сервера (см. раздел выше). Имейте в виду, что в режиме точки доступа у ESP8266 всегда будет IP-адрес «192.168.4.1».

Шаг 6. Загрузите скетч в Arduino.

Скетч загружается в Arduino обычным способом. Однако из за того что модуль ESP8266 подключен к контактам 0 и 1, программирование становится невозможным. Компилятор будет показывать ошибку.

Перед программированием отсоедините провода идущие к ESP8266 от контактов 0 и 1. Произведите программирование. Затем верните контакты на место. Нажмите кнопку сброса Arduino.

Примечание: Первый признак того, что программирование прошло успешно, это мерцание синего светодиода на модуле ESP8266 в течении полсекунды сразу после сброса. Мерцание синего светодиода означает обмен данными между Arduino и ESP8266. В эти полсекунды Arduino производит настройку ESP8266 для работы в качестве точки доступа.

Установка Arduino IDE через Boards Manager

  1. Запустить Arduino IDE, далее Файл — Настройки — в поле Additional Boards Manager URLs вставить ссылку на стабильную версию
    http//arduino.esp8266.com/package_esp8266com_index.jsonили для nightly build
    http//arduino.esp8266.com/staging/package_esp8266com_index.json, нажать OK (В это поле вы можете вводить несколько ссылок, разделенных запятой)
  2. Инструменты — Плата — Boards Manager
  3. В Boards Manager в поле фильтра введите esp8266 или вручную пролистайте список и кликните на ESP8266 by ESP8266 Community Forum
  4. Кликните Install и дождитесь окончания загрузки (около 130 Мегабайт). Если загрузка произошла слишком быстро, возможно, что вы уже устанавливали Arduino IDE для ESP8266 и потребуется почистить кэш Boards Manager, иначе у вас останется установленной старая версия. Нужно сначала деинсталлировать старую версию, а потом необходимо удалить файлы кэша. Для Win7 x64 удалите файлы из папки C:\Users\Пользователь\AppData\Roaming\Arduino15 и повторите все, начиная с п.2
  5. Закройте Boards Manager и в меню Инструменты выберите Плата — Generic ESP8266
  6. Установите частоту вашего модуля 80 или 160Mhz, размер флеш памяти и выберите последовательный порт, к которому подключен ваш USB-TTL адаптер

Подключение через RaspberryPi

Если вы не располагаете вообще никакими USB-TTL конвертерами, то в таком случае можно использовать RaspberryPi. В данном случае для ESP8266 программирование и подключение осуществляется практически идентично, но при этом здесь все не так удобно, а дополнительно нужно будет использовать также стабилизатор питания на 3,3 вольта.

Для начала RX, TX и GND нашего устройства подключаем к ESP8266, а GND и VCC берем со рассчитанного на 3,3 вольта

Здесь отдельное внимание следует уделить тому, что нужно провести соединение всех GND устройств, то есть стабилизатора RaspberryPi и ESP8266. Если же встроенный в вашу модель устройства стабилизатор может выдерживать до 300 миллиампер дополнительной нагрузки, то в таком случае подключение ESP8266 осуществляется вполне нормально, но это все делается только на свой страх и риск

Схема прошивки

Улучшенная схема прошивки для модуля ESP-01 показана на следующей принципиальной схеме; в первоначальный дизайн было внесено несколько изменений:

  1. постоянное напряжение питания 3,3 В больше не снимается с преобразователя USB-TTL. Некоторые преобразователи не обеспечивают достаточный ток для надлежащей работы ESP8266, особенно когда он находится в режиме передачи Wi-Fi. Следует использовать отдельный, хорошо фильтруемый и стабилизированный источник питания 3,3 В постоянного напряжения, способный обеспечивать ток не менее 500 мА;
  2. конденсаторы C1 и C2 были добавлены для снижения уровня шума на шине питания. Они должны располагаться как можно ближе к выводам Gnd и Vcc ESP8266;
  3. R2 и R3 – это подтягивающие резисторы, которые были добавлены для того, чтобы выводы GPIO2 и GPIO0 ESP8266 никогда не «висели в воздухе».

Эти изменения не говорят, что исходная схема прошивки не работала; дело в том, что она действительно работала у автора статьи и многих других пользователей. Однако ее недостатки были такими, что схема могла и не работать у некоторых пользователей, по крайней мере, иногда. Эти сбои могут быть вызваны различными внешними факторами, качеством источника питания и допусками компонентов. Улучшенная схема должна устранить эти недостатки.

Схема программатора ESP8266

Улучшенная схема прошивки показана собранной на макетной плате на следующих фотографиях. Первая фотография показывает всю схему со вставленным модулем ESP-01; вторая фотография показывает схему без модуля ESP-01, чтобы показать места установки C2, R2 и R3

Обратите внимание, что цвета проводов на схеме соответствую обозначениям цветов на принципиальной схеме

Программатор, собранный на макетной плате, с установленным модулем ESP-01

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

Печатная плата в левом верхнем углу макета – это преобразователь USB-TTL. Как вы видите, он вставлен непосредственно в макетную плату с помощью 6-пинового разъема Dupont, который установлен на нижней стороне платы. Вы можете модифицировать свой USB-TTL конвертер для установки именно таким же способом, или вы можете использовать для соединений отдельные провода. Что бы вы ни выбрали, обязательно следуйте схеме при соединении выводов

Обратите внимание, что требуются только три линии: RxD от преобразователя до TxD на ESP-01, TxD от преобразователя до RxD на ESP-01, и общий корпус

Несмотря на то, что преобразователь USB-TTL не используется для питания ESP-01, убедитесь, что преобразователь настрое на работу с постоянным напряжение 3,3 В, чтобы уровний напряжений сигналов не превышали допустимые значения ESP8266. Любое напряжение выше 3,3 В, поданное на ESP8266, может привести к его повреждению.

Программатор, собранный на макетной плате, с изъятым модулем ESP-01

На фотографии, приведенной выше, модуль ESP-01 был изъят из макета, чтобы показать самодельный адаптер для ESP-01. На фотографии ниже слева показан почти такой же адаптер, а справа – адаптер от Addicore. Они работают одинаково и облегчают использование модуля ESP-01 на беспаечной макетной плате или любом подобном устройстве с разъемами с шагом 0,1 дюйма (2,54 мм).

Адаптеры для подключения ESP-01 к беспаечной макетной плате

Как только вы завершите сборку своего программатора, настанет время для тестирования. Но перед подключением USB кабеля или подачей питания перепроверьте разводку, особенно линии питания. Лучше потратить несколько дополнительных минут, чем повредить что-либо из-за неправильной разводки.

Сначала подключите USB кабель от компьютера к конвертеру USB-TTL. Положительным признаком является загорание красного светодиода в углу печатной платы, близкому к разъему USB, и распопознавание USB конвертера компьютером

На этом этапе обратите внимание на то, какой номер COM порта был назначен конвертеру. Как вы можете видеть на фотографиях, у меня преобразователю был назначен COM4

Затем подайте на программатор питание 3,3 В постоянного напряжения. Вы должны увидеть пару вспышек синего светодиода на модуле ESP-01, а красный светодиод на модуле должен гореть постоянно.

Теперь нажмите и отпустите SW1 (кнопка сброса); синий светодиод должен замигать. Затем нажмите и отпустите SW2 (кнопка программирования); не должно произойти ничего заметного.

Если всё идет по плану, ваша схема прошивки, вероятно, работает правильно. Настало время выполнить окончательную проверку: ответит ли ESP8266, когда вы обратитесь к нему?

Цели проекта

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

Прислушавшись к себе, я понял, что это жаба, которой не нравится, что пока меня нет дома (12-16 часов в сутки), отопление работает. А могло бы и не работатать, включаться только перед приходом, благо каркасник обладает небольшой инерционностью и позволяет быстро поднять температуру. Та же ситуация когда куда то надолго уехать из дома. Ну и вообще, бегать, крутить ручку котла при изменениях температуры на улице — как то не кошерно.

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

Собственно о требованиях:

  • управление температурой в доме по уставке
  • управление температурой теплоносителя в зависимости от температуры на улице или вручную
  • временные зоны с разными уставками, днём холоднее, ночью горячее
  • автоматический режим, с авто переходом день-ночь
  • ручной режим, без автопереходов, для выходных
  • режим без автоматики, где можно вручную задать любую температуру теплоносителя и включить/выключить котёл
  • управление отоплением локально, с кнопок и экрана и через сайт/мобильное приложение

Это было в начале, а потом меня понесло и добавились:

  • управление уличным фонарём (LED прожектором)
  • сигнализация на основе датчика движения, сирены и уличного фонаря
  • учёт энергии потреблённой котлом за день/месяц/год + за каждый месяц года
  • режим сигнализация только медленным миганием фонаря
  • режим сигнализации быстрым миганием фонаря и короткими гудками сирены
  • режим сигнализации быстрым миганием фонаря и постоянным воем сирены

Цель написания статьи — поделиться опытом, описать что то на русском, что я не смог найти в интернете. Думаю, статья будет полезна начинающим Arduino самодельщикам, которые уже немного знакомы с программированием, т.к. совсем уж базовые вещи я не описывал. Я старался писать код как можно более понятным, надеюсь это у меня получилось.