Миниатюрные WiFi модули ESP8266 довольно привлекательны для систем умного дома и домашней автоматизации. Их еще называют «убийцами NRF24L01».
Я себе заказал продвинутые модификации ESP07 и ESP12, которые отличаются меньшими размерами и большим числом выведенных GPIO, что не требует «хаков» для использования в них дополнительных портов ввода/вывода.
Данный модули разработаны китайской компанией Espressif System
Технические характеристики:
- WI-FI: 802.11 b/g/n с WEP, WPA, WPA2.
- Режимы работы: Клиент (STA), Точка доступа (AP), Клиент+Точка доступа (STA+AP).
- Напряжение питания 1.7..3.6 В.
- Потребляемый ток: до 215мА в зависимости от режима работы.
- Количество GPIO: 16.
- Flash память размером 512кб.
- RAM данных 80 кб
- RAM инструкций — 32 кб.
Прикупить ESP8266 ES07 с платками по $2.18 сейчас можно на АЛИ
Про модификации модулей ESP8266 можно прочитать здесь
ESP07 (слева) отличается от ESP12 (справа) интегрированной керамической антенной и гнездом под внешнюю антенну
По распиновке контактов модули абсолютно идентичны
Размеры модуля очень маленькие
Оживление модуля заняло довольно много времени
Для этого нужно подать на него 3.3В. Причем стабилизаторы у преобразователей USB/UART не тянут данный модуль по току, поэтому питание нужно внешнее.
Далее нужно посадить GPIO15 на землю, а CH_PD и GPIO0 подтянуть к VCC через резистор. В некоторых источниках еще указывается, что нужно подтянуть к VCC и GPIO2, но у меня все заработало и без этого.
RXD, TXD и GND подсоединяются через переходник USB/UART к компьютеру.
В результате собрал на макетке такую схему
Здесь сразу столкнулся со следующей сложностью — шаг дырочек у ESP07 — 2мм, а не 2.5 как у штырьковых разъемов, применяемых в Ардуино и прочих местах. Пришлось к макетке паять на проволочках
Получилась такая платка
Сразу забегая вперед, скажу, что в дальнейшем для этих модулей прикупил платок-адаптеров.
После сборки запустил программу CollTerm и на скорости 9600 получил приглашение модуля.
Команда AT+GMR выдала 0020000904 (Версия SDK — 0020, в версия AT — 0903)
Далее побаловавшись с AT командами запустил модуль как точку доступа и подключился к своей.
Далее интересно было попробовать модуль в режиме самостоятельного контроля. Для этого решил прошить его NodeMCU со встроенным интерпретатором LUA.
Я загрузил ModeMCU с GITHUB вместе с примерами и модулями на LUA
Прошивку делал утилитой XTCOM_UTIL. Так как данная программа работает только с COM1-COM6, пришлось в диспетчере устройств изменить свой COM33 от USB/UART конвертера на COM6.
Далее прошивка не представляет труда: открываем порт и коннектимся. Скорость выбирается автоматически. Главное, не забыть посадить GPIO0 на землю (у меня для этого есть специальная перемычка). Скорость выбирается автоматически. Иногда коннект не устанавливался. Помогало нажатие кнопки RESET во время коннекта.
Теперь можно подключиться к модулю при помощи ESPlorer
В данной программе можно загружать в ESP файлы для интерпретатора LUA, выполнять как одиночные команды так и скрипты этого интерпретатора.
У меня получилось запустить модуль давления/температуры BMP180, подключенный к GPIO2 и GPIO0
Для этого я загрузил файл bmp180.lua из готовых модулей, идущих вместе с прошивкой с GITHUB
И затем файл init.lau, выполняемый при загрузке ESP8266
tmr.alarm(1, 5000, 1, function()
print('ip: ',wifi.sta.getip())
bmp180 = require("bmp180")
bmp180.init(4, 3)
tmr.stop(1) -- alarm stop
end)
Запуск программы без задержки таймера приводил к неизменной ошибке.
После рестарата, код
123456789 <span class="pln">bmp180</span><span class="pun">.</span><span class="pln">read</span><span class="pun">(</span><span class="pln">OSS</span><span class="pun">)</span><span class="pln">t </span><span class="pun">=</span><span class="pln"> bmp180</span><span class="pun">.</span><span class="pln">getTemperature</span><span class="pun">()</span><span class="pln">p </span><span class="pun">=</span><span class="pln"> bmp180</span><span class="pun">.</span><span class="pln">getPressure</span><span class="pun">()</span><span class="pun">--</span><span class="pln"> temperature </span><span class="kwd">in</span><span class="pln"> degrees </span><span class="typ">Celsius</span><span class="pln"> </span><span class="kwd">and</span> <span class="typ">Farenheit</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"Temperature: "</span><span class="pun">..(</span><span class="pln">t</span><span class="pun">/</span><span class="lit">10</span><span class="pun">).</span><span class="pln">.</span><span class="str">" C"</span><span class="pun">)</span><span class="pun">--</span><span class="pln"> pressure </span><span class="kwd">in</span><span class="pln"> differents units</span><span class="kwd">print</span><span class="pun">(</span><span class="str">"Pressure: "</span><span class="pun">..(</span><span class="pln">p </span><span class="pun">*</span> <span class="lit">75</span> <span class="pun">/</span> <span class="lit">10000</span><span class="pun">).</span><span class="pln">.</span><span class="str">" mmHg"</span><span class="pun">)</span>
1 2 3 4 |
<span class="pun"> Выдавал в консоль текущее давление и температуру. </span> |
А вот запустить выдачу данных параметров в режиме веб-сервера мне не удалось. Все дело в нехватки памяти. Отдельно веб сервер и BMP180 работали, а вместе вываливались в
123 <span class="pln">PANIC</span><span class="pun">:</span><span class="pln"> unprotected error </span><span class="kwd">in</span><span class="pln"> call to </span><span class="typ">Lua</span><span class="pln"> API </span><span class="pun">(</span><span class="pln">error loading </span><span class="kwd">module</span> <span class="str">'bmp180'</span> <span class="kwd">from</span><span class="pln"> file </span><span class="str">'bmp180.lua'</span><span class="pun">:</span> <span class="kwd">not</span><span class="pln"> enough memory</span><span class="pun">)</span>
Или просто на консоль валились обрывки кода LUA.
Модернизировать свою домашнюю метеостанцию с ходу не получилось.
Дальнейший мой путь был, собирать свою прошивку на фирменном SDK, как написано в этой статье . Но это уже другая история. Скажу только, что прошивки собираются без проблем, а вот запустить злополучный BMP180 так и не удалось.
Выводы
- Модули ESP8266 — это очень дешевое решения для построение сети умного дома и прочей домашней автоматизации с использованием WiFi
- Данные модули вполне годятся для замены NRF24L01+ в связке с Arduino и прочими «народными» контроллерами.
- Для работы в качестве самостоятельного контроллера ESP8266 имеет маловато ресурсов и довольно сырые прошивки
- Программирование ESP-модулей довольно трудоемкий процесс, который может отпугнуть новичков
- В целом ESP8266 имеют большие перспективы. Буду ждать развитие прошивок и средств разработки, а пока, буду применять их в связке с другими контроллерами (кроме проектов с WiFi розетками и выключателями )))
Полезные ссылки и литература
- Описание ESP8266 на сайте производителя
- Сайт esp8266.ru
- Цикл статей на geektimes.ru и на habrahabr.ru
- Англоязычный форум esp8266.com
- Обсуждение ESP8266 на форуме arduino.ru
Кот попался, пока возился с макрофотографиями
> А вот запустить выдачу данных параметров в режиме веб-сервера мне не удалось. Все дело в нехватки памяти.
Всё очень просто. Необходимо скомпилировать bmp085.lua в bmp085.lc, а lua-файл удалить. Памяти хватает, всё работает.
Может и так. Сейчас перешел на программирование через Arduino IDE на Си++. Понравилось гораздо больше чем медленный интерпретатор Lua
Коту зачет.
Кот запылился