Содержание
- Материалы со страницы “Инструкция 1”.
- Почему бы не использовать совмещенную плату UNO+ESP8266?
- Заводим релейный модуль ESP8266 от LC TECHN с микроконтроллером STC15F104W для ESP-01S
- Прошиваем микроконтроллер STC15F104W
- Прошиваем Wi-Fi модуль ESP-01S специальной прошивкой
- Этой прошивкой можно управлять следующими устройствами:
- И напоследок…..
- Какую плату выбрать?
- Начинаем программирование
- INFO
В прошлой части я мучал модуль ESP-01 с AT-прошивкой. С тех пор прошло много времени, я успел заказать и получить более развитые модули ESP-12-E, о которых и пойдет речь в этот раз. Будем прошивать NodeMCU, подключать SD-карту, дисплей на SSD1306, энкодер (rotary encoder) и FM-модуль RDA5807. После соединения всех этих модулей между собой в правильном порядке проводочками и правильного расположения бесчисленного количества байтиков во флеше ESP-12 должно получиться радио. NodeMCU, стоит отметить, занятная штука! После прошивки в терминале доступно что-то типа командной строки языка Lua, где можно выполнять отдельные команды или целые скрипты, не компилируя каждый раз код и не перепрошивая модуль! От гавеного usb-ttl адаптера такой модуль уже не смог прошиться, один вечер я его уговаривал разными программами – безрезультатно. Общение идет, MAC выдается, но потом все помирает, прошивка даже не начинает заливаться. На следующий день я догадался измерить напругу на модуле, меньше 2В! Конечно нихрена не прошьется, нужно 3.3В. Адаптер в качестве питальника тут совсем не годится. Запитал модуль от 2 батареек AAA и наконец прошил NodeMCU. Использовал хорошую статью http://www.benlo.com/esp8266/esp8266QuickStart.html
Как подключить
По-моему самая годная схема подключения приведена в этой статье. Тут предусмотрено и использование режима сна (GPIO16 к ресету через 470R), и перемычка прошивки (Burn), и все нужные “подтяжки” – reset, gpio2, gpio0, gpio15, ch_pd (enable). Да уж, целая гора ног должна быть подтянута для старта железяки, я по незнанию боялся, что эти ноги не удастся использовать, однако напрасно – gpio 0, 2 и 15 доступны в приложении.
GPIO0 управляет режимом загрузки. Подтяжка к земле – режим программирования, заливки прошивки. Подтяжка к питанию – нормальная загрузка модуля GPIO2 – должно быть притянуто к питанию всегда. низкий уровень инициирует специальные режимы загрузки GPIO15 – должно быть притянуто к земле всегда. высокий уровень инициирует специальные режимы загрузки GPIO16 должно быть замкнуто с пином RESET, если планируется использовать спящий режим. иначе модуль из спячки не выйдет никогда. Вообще по вышеуказанной статье все намного лучше расписано. И вот еще интересная страничка http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family#esp-12-e_q Специальные режимы загрузки кратко описаны тут https://github.com/esp8266/esp8266-wiki/wiki/Boot-Process, есть даже загрузка с SD карты, во как.. Может быть для этого и выведены с торца модуля пины CS0, MISO, MOSI, SCLK?
Что имеется в распоряжении ESP?
Свободных GPIO – 9 ног: GPIO 0/2/4/5/12/13/14/15/16. Последний (GPIO16) ограничен в функционале. GPIO9 и 10 хоть и выведены, однако вообще не работают в модуле версии ESP-12-E (они только на ESP-12D, на али я такой не нашел, что интересно). Более того, попытка их использовать ведет к зависанию и ребуту по watchdog. Есть ADC – можно контроль разряда батареи сделать или опрос клавы, но только что-то одно. Т.е. модуль измеряет либо внутреннее напряжение vdd33, либо внешнее, подаваемое на ногу ADC. Выведены пины SPI, однако забудьте о них – в версии ESP-12-E они точно не пашут. Подключение SD карты делается через несколько GPIO и софтовый SPI, об этом позже. Ну и UART. Из железных возможностей это все. Остальное реализуется через GPIO, и, надо сказать, эти ноги очень быстро заканчиваются.
Где взять прошивку
Прошивал я программой ESP8266Flasher, в данном случае вариант первый – использовать прошивку NodeMCU, которая уже содержится в программе. Она не особо свежая, однако для “пощупать” и быстрого старта вполне годится. В качестве bin-файла указывается INTERNAL://NODEMCU, см. скрин. Способ второй, которым обычно и пользуюсь – пройти на сайт https://nodemcu-build.com/ и собрать себе бинарник со всеми нужными модулями. Через какое-то время (минуты 2-3) на почту придет ссылка для скачивания. Способ третий, хардкорный. Скачать исходники из репозитория https://github.com/nodemcu/nodemcu-firmware и безжалостно собрать их.
Вернемся к способу 2.
К великой радости поклонников NodeMCU прошивка оная обновила мажорную версию на 1 и уже обросла множеством вкусных модулей, в частности, наконец-то, поддержка SD-карт и файловой системы FatFS (я пробовал карту с FAT32 – работает)! Этого-то мне и не хватало для счастья, погнал на https://nodemcu-build.com/ собирать себе бинарник прошивки. Собрал один, другой, третий – ни один не пашет, модуль после прошивки бесконечно ребутается и выдает rf_cal[0] !=0x05,is 0xFF Нашел заметку, где описана эта проблема http://nodemcu.readthedocs.io/en/latest/en/flash/#sdk-init-data, нашел в инете пустой bin-файл на blank_1MB.bin (8MBit), залил его, потом снова прошивку, но даже это не помогло. т.е. после записи пустого бинарника выдалось esp_main.c, как положено, но после накатывания прошивки – опять та же фигня с ребутами. upd: так ведь модуль у меня 32Мбит, наверное надо было 4 раза его заливать с разными offset, теперь уже проверять лень В итоге я в очередной раз выбрал заливку собранного бинарника, но добавил еще заливку esp_init_data_default.bin в соответствии с рекомендацией. Адрес (оффсет) поначалу вписал 0xfc000 (т.к. чип при старте выдавал инфо 512+512кб), но в последний момент отчего-то решил сменить на 0x3fc000 (вариант для 32Мбитного флеша), и прокатило! Запускаю LuaLoader и вижу приветственное сообщение на скорости 115200 Chip info выдает NodeMCU version (1.5.4), chipid, flashid, flash size (4096!), flash mode, flash speed
Connect them all
Карта соответствия I/O индексов пинам GPIOx тут.
IO index | ESP8266 pin | IO index | ESP8266 pin |
---|---|---|---|
0 * | GPIO16 | 7 | GPIO13 |
1 | GPIO5 | 8 | GPIO15 |
2 | GPIO4 | 9 | GPIO3 |
3 | GPIO0 | 10 | GPIO1 |
4 | GPIO2 | 11 | GPIO9 |
5 | GPIO14 | 12 | GPIO10 |
6 | GPIO12 |
* D0(GPIO16) can only be used as gpio read/write. No support for open-drain/interrupt/pwm/i2c/ow. Первым делом втыкаем FM-модуль RDA5807 и OLED дисплей на SSD1306. Оба через интерфейс I2C. Я выбрал ноги GPIO4 и GPIO5. Требуется модуль i2c, а для дисплея еще u8g. Чтобы включить радио нужно выполнить такой скрипт Разумеется стоит оформить запись регистров в виде функций Для вывода чего-нибудь на дисплей простейший скрипт такой Более подробно о работе с FM-модулем и дисплеем – в следующей статье. Далее подключаем SD-карту. У меня был специальный китайский модуль для SD, см.фото. Требуется модуль spi. Линии подключения SD-карты описаны тут https://nodemcu.readthedocs.io/en/master/en/sdcard/#sd-card-connection Хорошая документация по всем модулям NodeMCU с примерами.
- CK, CLK, SCLK to pin5 / GPIO14
- DO, DAT0, MISO to pin 6 / GPIO12
- DI, CMD, MOSI to pin 7 / GPIO13
- CS, DAT3, SS to pin 8 / GPIO15 recommended
- VCC, VDD to 3V3 supply
- VSS, GND to common ground
Подключил, причем GPIO15 так и остался подтянут к земле через 1к2 (надо 10к, да, но их не было), загрузил ESP-12 – все ок. GPIO 12, 13, 14, 15 теперь заняты. Пробуем записать тестовый текстовый файл чтобы вернуться на внутреннюю память ESP выполняем file.chdir(“/FLASH”) а еще можно не меняя папки file.open(“/FLASH/file.txt”) или file.open(“/SD0/somefile.txt”) И последнее – подключаем энкодер. Требуется модуль rotary. У нас осталось 3 свободных ноги – GPIO16, 0 и 2. Но засада в том, что GPIO16 не годится ни на что, кроме как вручную выставить на этой ноге уровень или прочитать его. С этой ногой не работает ни один интерфейс, и прерывания тоже не работают. Так что, выходит, событие “нажатие на энкодер” не удастся подключить. Стартовый скрипт – простейший. Заняли оставшиеся 2 GPIO – 2 и 0. Да уж, после AVR Assembler тут все слишком легко, подключаешь – и все сразу работает, даже неинтересно. Правда с энкодером загвоздка вышла. При старте ESP он-таки влияет на пины GPIO0/2 и модуль не грузится как надо. Эту проблему я решил перестановкой – повесил I2C на пины GPIO0+2, а энкодер – на GPIO4+5, все нормально запускается и работает. Теперь можно все это запрограммировывать.
Немного замеров
Питание от литиевой батареи 3.7В формата 18650. Только что загруженная NodeMcu dev ветка – 3.12В, 77мА Дисплей OLED 128×64 при выводе изображения добавил еще 8мА. Проект ESP8266_MP3_DECODER: динамик 1Вт 8Ом подключен напрямую к ноге ESP-12E, измеряю ток мультиметром в разрыве питания – 131мА. Напряжение до тестера – 3.58В, после – 2.7В, вот уж не думал, что он такое влияние вносит! Напругу при включенном тестере измерял осциллографом.
Маленькое реле для подрозетника
Производитель QCSMART, модель RR300W
Ссылка на реле: https://aliexpress.com/item/32956975062.html
Ссылка на официальный магазин: https://www.aliexpress.com/store/4659052
Реле маленькое, размеры 60мм х 50мм, высота 25мм. В наши подрозетники входит без корпуса, об этом позже.
Приходит в аккуратной минималистичной коробке:
В комплекте, помимо инструкций, так же есть 2 луженых провода для подключения и маленькая крестовая отвертка:
Подключается реле через приложение Tuya Smart или Smart Life
Регистрируемся или входим в аккаунт, жмем + и выбираем «Переключатель», включаем в сеть наше реле и приложение его найдет. Тут ничего сложного:
После чего можно полноценно пользоваться реле — включать, выключать, настраивать таймеры и прочее:
Так же без проблем можно подключить это реле к голосовым помощникам, например Яндекс Алиса:
Выбираем Tuya Smart, авторизуемся и обновляем список устройств.
Тоже самое в Google Assistant:
Теперь посмотрим что внутри. Корпус легко вскрыть, поддев его отверткой или ножом для бумаги.
Все выглядит аккуратно. Видно реле на 15А и esp модуль TYWE2S:
Доступ к контактам свободный:
На самом модуле TYWE2S все пины подписаны:
Описание модуля TYWE2S и распиновка есть на официальном сайте Tuya
Все пины (I05, I00 и прочие) совпадают с нумерацией GPIO
Для перепрошивки нам понадобится любой USB to TTL адаптер. Подключение выглядит следующим образом:
Так же подключаем GPIO0 к GND на время прошивки
Желательно сделать бэкап оригинальной прошивки!
Теперь можно залить альтернативную прошивку. Вот конфиг для ESPHome:
Методом исключения я выяснил, что GPIO4 это светодиод, GPIO12 это реле, а GPIO13 это кнопка. И при этом в легкой доступности у нас все остальные пины, можно подключить что угодно.
Хотя в корпусе это реле не вставить в российский подрозетник из-за размеров, без корпуса все легко помещается, по крайней мере в глубокие:
Размер платы 55мм х 46мм. Если аккуратно обработать уголки платы, то в подрозетник она поместится не как на фото выше, а полностью будет прилегать ко дну, что сэкономит место внутри.
Лично мне очень понравилась простота перепрошивки и качество платы. Белый матовый корпус тоже выглядит круто. Куча свободных пинов. Если делать выключатель, по типу того, который я делал ранее и который у меня уже трудится не один год, я выберу эту плату за основу вместо NodeMCU- тут все готово и все качественно сделано.
И спасибо ребятам из QCSMART за реле для обзора.
Плата ESP8266 ESP-12 ESP-12E UART Wi-Fi устанавливается сверху на плату Arduino UNO R3 и позволяет получать доступ к управлению и состоянием Arduino из интернет. И я заставил этот слоеный пирог заработать.
Компоненты Arduino для работы покупал в магазине All Electronics Trading Company.
Все быстро пришло. Почти все из того что заказал в этом магазине было отличного качества.
Исключение составляла комбинированная плата с разными датчиками, светодиодами и кнопками s.click.aliexpress.com/e/ct9JuGza. Эта плата была какой-то ручной пайки, но полностью работала.
Платы, которые использовались при написании статьи:
ESP8266 ESP-12 ESP-12E UART Wifi Wireless Shield Development Board For Arduino Mega UNO R3 Module Mega 3.3V 5V TTL Interface one
и
Arduino UNO R3 из состава набора Upgraded Advanced Version Starter Kit the RFID learn Suite Kit LCD 1602 for Arduino UNO R3.
Несмотря на то что нашел исчерпывающую инструкцию по запуску платы ESP8266 ESP-12E (назовем ее Инструкция №1), получилось не сразу.
Скачал по ссылке со страницы инструкции 1 FLASH_DOWNLOAD_TOOLS_v2.4_150924 и прошивку Ai-Thinker_ESP8266_DOUT_32Mbit_v1.5.4.1-a AT Firmware.
Закачал пустой скетч в Arduino U3.
void setup () { // поместите здесь свой установочный код, чтобы запустить его один раз: } void loop () { // поместите ваш основной код здесь для повторного запуска: }
Действуя по инструкции 1 я ничего не достиг. Все комбинации перепробовал.
Раньше где-то слышал, что процедура прошивки требует намного большей мощности, чем штатная работа, и мощности питания от Arduino не всегда хватает.
На момент прошивки нужен отдельный источник питания. Заподозрил что у меня именно эта ситуация.
Помогла Инструкция №2 по подключению ESP8266 ESP-12E к UNO.
Esp8266 питается от 3.3V, а Uno использует 5V. В инструкции 1 написано, что 5V не трогаем. Автор инструкции 2 подключает на свой страх и риск (о чем говорит) плату Esp8266 к 5V выходу UNO R3. Я тоже так решил сделать, подключив все вот так.
Тут дело сдвинулось с мертвой точки, почти сразу же опять застопорившись.
Плата синхронизировалась, но как-то не до конца.
Содержимое окна FLASH_DOWNLOAD_TOOLS_v2.4_150924 было почти такое же, как в инструкции 1:
но у меня поле MAC adress заполнилось, а вот DETECTED IINFO оставалось пустым.
В логе содержалась фраза “error read crystal“. Подумал было что все-таки сжег плату, подав напряжение 5V на свой страх и риск.
Но нашел подобную проблему в ветке форума ERROR FLASHING FIRMWARE. Проблему решили, записав в Arduino U3 пустой скетч.
Да я же делал это в самом начале!
Снова записал пустой скетч и на этом этапе все заработало. А именно – содержимое окна FLASH_DOWNLOAD_TOOLS_v2.4_150924 стало таким же, как в инструкции 1.
И прошивка залилась в плату ESP8266 ESP-12 ESP-12E UART Wi-Fi.
Может, когда на первом этапе ничего не получалось, что-то залил в Arduino R3?
Начал дальше следовать инструкции 1, поместив плату ESP8266 на Arduino UNO R3 – и опять ничего не ладилось. Что бы не делал с переключателями Р1, Р2 – не проходили команды.
Снова обратился к инструкции 2.
Вернул подключение ESP8266 к UNO через Debug Port, но уже с использованием 3.3V – flash загрузчик уже не надо было использовать и решил не испытывать плату на прочность.
И отправил при таком подключении команду «AT+UART_DEF=9600,8,1,0,0». Вернуло ERROR.
Тут оказалось, что внимательно надо следить за регистрами и за отсутствием пробелов. Команды копировал с сайтов, а там были пробелы и поэтому возвращало ERROR.
Также нужно следить за регистрами. Команда “AT” принимается как в верхнем, так и в нижнем регистре. Остальные команды только в верхнем.
Решить эти проблемы помогла ветка https://esp8266.ru/forum/threads/error-oshibka-at-komand.126/.
Дальше действовал по инструкции 1.
Использовал немного модифицированную библиотеку WiFIESP и код Web-сервера со страницы инструкции 1.
Можно использовать и оригинальную библиотеку WiFIESP.
Небольшой трудностью на этом этапе было привязать статичный IP адрес – пришлось выяснять пароль от модема ZyXel Keenetic 4G II.
И все заработало.
Теперь можно было с Web-страницы при помощи кнопки управлять светодиодом, подключенным к Arduino UNO R3, и видеть его состояние.
Материалы со страницы “Инструкция 1”.
Файлы
На данный момент на странице инструкции 1 www.instructables.com/id/ESP8266-ESP-12E-UART-Wireless-WIFI-Shield-TTL-Conv/ такие версии используемых файлов:
code_web_server_shield_esp8266.zip
wifiesp-master-mod.zip
flash_download_tools_v2.4_150924.rar
ai-thinker_esp8266_dout_32mbit_v1.5.4.1-a_20171130.rar
Видео
Почему бы не использовать совмещенную плату UNO+ESP8266?
Есть в природе плата, аналогичная вроде-бы двум описываемым выше.
UNO + WiFi R3 ATmega328P + ESP8266 (32 Мб памяти), USB-TTL CH340G. Совместимость Uno, NodeMCU, WeMos ESP8266.
Продается по цене 360р:
http://s.click.aliexpress.com/e/bCHsJmh6
http://s.click.aliexpress.com/e/pq9qvHm
Получается дешевле на 100р, чем описываемые выше в паре.
UPD
Заказал и протестировал совмещенную плату UNO+WiFi.
С ней оказалось все немного по другому.
27 марта 2019, 10:45
Заводим релейный модуль ESP8266 от LC TECHN с микроконтроллером STC15F104W для ESP-01S
Когда я заказывал этот релейный модуль, я даже не думал, что у меня могут быть с ним какие-то проблемы…
Мои разочарования начались сразу после первого включения! Моргала лампочка и ничего более…
После разных попыток перепрошивки модуля, а также долгих поисков решения проблемы неработоспособности этого модуля, все-таки было найдено решение.
Заранее скажу, что в интернете, можно найти несколько способов заставить это китайское чудо работать, но эти способы сделаны кустарным методом, так как там предлагается выпаять сам микроконтроллер и впаять какие-то резисторы…
Поискав в интернете, я наткнулся на видео, в котором запускают такой же релейный модуль и там кроме моргания лампочки, еще и щелкает реле.
В непонимании всего происходящего, я начал изучать характеристики данного модуля и обнаружил, что модуль питается от 5В, но так как на нем стоит регулятор напряжения AMS1117, то фактически он поддерживает напряжение до 12В. Изучив плату, было обнаружено, что модуль GPIO-0 никуда не подключается!
Ну и наконец наткнувшийся на схему платы этого модуля, было выяснено, что реле управляется микроконтроллером STC15F104W с помощью TX/RX, а не GPIO-0, как ранее предполагалось. Собственно это и есть наша основная проблема.
Но кроме основной проблемы у меня еще и не щелкало реле. Изучив схему выше, оказалось, что проблема в том, что резистор R3 слишком большой. Ну что поделать… Мы же хотим заставить эту штуку работать, так что берем паяльник в руки, отпаиваем резистор на 10K и вместо него припаиваем на 4.7K. После этих манипуляции реле должна щелкать как в видео!
На всякий случай оставляю таблицу кодов и значений smd резисторов
Код Знач. Код Знач. 332 3.3kΩ 682 6.8kΩ 362 3.6kΩ 752 7.5kΩ 392 3.9kΩ 822 8.2kΩ 432 4.3kΩ 912 9.1kΩ 472 4.7kΩ 103 10kΩ 512 5.1kΩ 113 11kΩ 562 5.6kΩ 123 12kΩ 622 6.2kΩ 133 13kΩ
Собственно, почему так происходит и почему у всех по разному может быть? Я ответ и на эти вопросы нашел!
На сайте производителя www.chinalctech.com есть предупреждения, где говорится, что у этого релейного модуля есть некоторые подделки. Также говорится, что, если постоянно моргает светодиод на плате (D2), то это означает, что этот модуль не их производства.
Вроде уже более-менее все ясно, НО все-таки, как же заставить его работать?
Не буду томить, вся проблема в том, что микроконтроллер STC15F104W не запрограммирован!
Итак, читаем ПРЕДУПРЕЖДЕНИЕ! И поехали…
Всегда есть вероятность сделать какую-то ошибку и тем самым вывести из строя сам микроконтроллер, поэтому программирование/изменение кода будет делаться под вашу ответственность, на свой страх и риск!
Прошиваем микроконтроллер STC15F104W
- Качаем программу STC ISP для программирования микроконтроллера STC15F104W. Я брал последнюю 6.86.
- Скачиваем прошивку микроконтроллера.
- Ставим драйвера вашего TTL контролера, если еще не установлены.
- Подключаем TTL контролер к ПК
- Запускаем скачанную программу STC-ISP
- Указываем в MCU Type микроконтроллер STC15F104W
- Выбираем порт вашего TTL контролера в COM Port
- Нажимаем на кнопку Open Code File и выбираем файл ранее скачанной прошивки под названием ESP8266_Relay_9600_11mhz.hex.
- Снизу в разделе H/W Option устанавливаем тактовую частоту (Input IRC frequency) 11,0592 MHz
- Ну и в конце нажимаем на кнопку Download/Program
11. Теперь ОБЯЗЯТЕЛЬНО!
Отключаем Wi-Fi модуль ESP-01S от релейного модуля! Она не должна быть подключена во время прошивки!
Только после этого Подключаем TTL контролер к пинам GND, TX, RX, 5V на плате релейного модуля и ждем, пока передача данных не будет завершена.
Теперь протестируем прошивку и работоспособность релейного модуля.
- Для этого переходим на вкладку COM Helper, выбираем порт нашего TTL контролера и жмем на Open COM.
- Вводим в TX Buffer по очереди команды A0 01 01 A2 и A0 01 00 A1 в режиме HEX-Mode и жмем на кнопку Send Data.
Если все было сделано правильно, то загорится светодиод, а вместе с ним еще и защелкнет реле. Но если этого не произошло, то придется опять колдовать паяльником с резисторами R3 и R4. Ну а если все работает, как надо, то переходим к прошивке уже самого Wi-Fi модуля ESP-01S для работы с нашим модулем.
Прошиваем Wi-Fi модуль ESP-01S специальной прошивкой
Думал отдельную статью сделаю…, но ладно так уж и быть… распишу все тут.
Казалось бы столько манипуляции сделано, но неужели этот релейный модуль еще не готов к работе.
Ответ я думаю уже понятен – НЕТ! Релейный модуль управляется последовательной связью через микроконтроллер, то есть ESP передает команды Включить/Выключить через контакты RX/TX микроконтроллеру, а дальше уже микроконтроллер выполняет реальную работу. Чтобы оправить те самые команды для управления, нужен специальный плагин «Serial MCU controlled switch».
Как подключать TTL контролер к Wi-Fi модулю ESP-01S я рассказывать не буду, ибо много статей про это, а вот как прошить его, сейчас подробно разложу!
Скачаем архив с программатором ESPEasyFlasher последней версии и разархивируем его куда-нибудь в удобное место, после чего скачаем специальную версию прошивки и поместим в папку BIN.
Этой прошивкой можно управлять следующими устройствами:
- Tuya Wifi Touch wall switch
- Tuya Wifi Dimmer Switch
- Sonoff Dual (Поддерживается только V1)
- Релейные модули от LC TECH (Поддерживаются вплоть до 4 релейных модулей.)
Именно поэтому я и хотел вывести это в отдельную статью! Чтобы путаницы не было, распишу все поочередно:
- Подключаем Wi-Fi модуль ESP-01S к вашему ПК.
- Запускаем ESP.Easy.Flasher.exe и выбираем COM port
- В пункте Firmware выбираем blank_1MB.bin и жмем на кнопку Flash ESP Easy FW, тем самым прошиваемся на нулевую прошивку.
- После успешной прошивки, переподключаем ESP-01S модуль к ПК.
- Теперь в пункте Firmware выбираем прошивку ESPEasy_Mega_P165_1M_128kS_lwip20_PUYA.bin и опять жмем на кнопку Flash ESP Easy FW.
- Ждем, когда прошивка закончится, и переходим к следующему пункту.
Осталось самое малое…
Отключаем ESP-01S модуль от ПК, подключаем к релейному модулю и подаем питание.
Находим точку доступа ESP_Easy_0 и подключаемся.
Открываем адрес в браузере 192.168.4.1, выбираем вашу домашнюю сеть Wi-Fi, вводим пароль и жмем Connect.
После обратного отсчета должен высветиться IP адрес нашего ESP. Жмем на кнопку Proceed to main config и переподключаемся к домашней точке доступа. Так же IP адрес нашего ESP можно узнать такими способом найти IP адрес.
Переходим по IP адресу нашего ESP (Способы определения IP адреса) и настраиваем как указано ниже. Откроем раздел Devices, жмем на кнопку Edit, выбираем из списка пункт Serial MCU controlled swich.
В открывшихся пунктах вводим следующее.
- В поле Name вводим ESP01Relay
- Ставим галочку Enabled
- В поле Switch Type выбираем производителя нашего релейного модуля, то есть LC TECH
Жмем на кнопку Submit, после чего опять же появятся новые подпункты.
- Number of relays: здесь вводим количество реле на плате, в данном случае у нас 1.
- Serial speed: старые версии модуля работают со скоростью 9600, а новые на 115200!
Все элементарно просто – заходи в браузер и набираем HTTP команды:
Включаем реле №1: http://ESP_IP/control?cmd=relay,0,1 Выключаем реле №1: http://ESP_IP/control?cmd=relay,0,0 Включаем реле №2: http://ESP_IP/control?cmd=relay,1,1 Выключаем реле №2: http://ESP_IP/control?cmd=relay,1,0 Включаем реле №3: http://ESP_IP/control?cmd=relay,2,1 Выключаем реле №3: http://ESP_IP/control?cmd=relay,2,0 Включаем реле №4: http://ESP_IP/control?cmd=relay,3,1 Выключаем реле №4: http://ESP_IP/control?cmd=relay,3,0
И напоследок…..
Всем этим можно управлять как через OpenHAB MQTT, долгое время пытался решить этот вопрос, но пока безрезультатно. Как удастся решить этот вопрос, сразу обновлю статью… Ну, а если у кого-то получится сделать это раньше, обязательно отпишитесь в комментариях.
А на этом все, всем спасибо, ставьте лайки, пишите комментарии.
Интерес к интернету вещей растет с каждым днем, свои курсы по технологии IoT запустили и Cisco, и Samsung. Но большинство этих курсов базируются на собственном железе компаний, довольно дорогом, в то время как практически все то же самое можно сделать на гораздо более дешевом железе самостоятельно, получив при этом массу удовольствия и полезных навыков.
Какую плату выбрать?
Когда неофит от IoT полезет в интернет, одним из первых модулей, которые он найдет, будет ESP8266. И действительно, он обладает массой достоинств: дешевый, много различных плат на его основе, позволяющих использовать его как самостоятельное устройство и подключать к сложным Arduino-based проектам. Но ESP8266, выпущенный в 2014 году, довольно быстро перестал удовлетворять запросы пользователей, и в 2015 году компания-разработчик Espressif выпускает новый микроконтроллер — ESP32.
Точно так же, как и в случае с ESP8266, разработчики создали довольно много плат, базирующихся на новом микроконтроллере. В данной статье все примеры тестировались и проверялись на плате MH-ET LIVE ESP32 DevKit. Плата для обзора была любезно предоставлена интернет-магазином Amperkot.
Загрузка …
Начинаем программирование
Как и у любой платы, основанной на ESP32, у MH-ET LIVE ESP32 DevKit есть достаточно большой набор языков программирования. Во-первых, это Arduino C, во-вторых, Lua, а в-третьих и в-четвертых — MicroPython и Espruino. Про Espruino — сборку JS для программирования микроконтроллеров — уже рассказывалось в ][, но в той статье разбиралась работа только на плате Espruino Pico, заточенной под Espruino.
INFO
К сожалению, портирование Espruino на ESP32 еще не до конца завершено. Часть возможностей, например обновление по воздуху и Bluetooth, недоступна. Но так как Espruino — open source проект, любой может добавить свою функциональность.
Установка
-
Скачиваем на официальном сайте свежую сборку Espruino. А если не доверяешь готовым сборкам, то можно собрать прошивку самостоятельно:
# Get the Espruino source code git clone https://github.com/espruino/Espruino.git cd Espruino # Download and set up the toolchain ('source' is important here) source scripts/provision.sh ESP32 # Clean and rebuild make clean && BOARD=ESP32 make
-
Несмотря на то что мы будем программировать на JS, для установки все равно нужен Python, а конкретно
esptool.py
. Повторяя свою предыдущую статью, скажу, что для его установки, при условии, чтоPython
уже установлен, достаточно набрать в консоли/терминале:pip install esptool
. - В терминале перейти в папку с прошивкой. Кроме самого файла Espruino, здесь лежат файлы
bootloader.bin
иpartitions_espruino.bin
. Это необходимые компоненты, но в некоторых сборках их может не быть, тогда их придется скачать отсюда. -
Запускаем процесс прошивки, не забыв изменить порт, указанный в данном примере, на свой, а также при необходимости указать другое имя прошивки. Здесь она называется
espruino_esp32.bin
.esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 921600 --after hard_reset write_flash -z --flash_mode dio --flash_freq 40m --flash_size detect 0x1000 bootloader.bin 0x8000 partitions_espruino.bin 0x10000 espruino_esp32.bin
IDE
Разработчики Espruino создали свою IDE, Espruino Web IDE
. Эта программа распространяется через Chrome Web Store, также существуют нативные приложения для Windows (32 и 64).
Перед первым запуском нужно залезть в настройки, вкладка COMMUNICATIONS, и убедиться, что скорость общения выставлена на 115200, а также изменить поле Save on Send с No на Yes, иначе все программы после перезапуска слетят.
Теперь достаточно запустить IDE, подключиться к плате и набрать в консоли 1+2
: если ты получил 3
, значит, все настроено правильно и можно начинать полноценную работу.
Загрузка …
Hello world
Во всех языках программирования, предназначенных или модифицированных для программирования микроконтроллеров, самая простая программа — так называемый Blink
, мигание встроенным светодиодом. Но это как-то скучно. Поэтому нашей первой программой станет программа для управления светодиодом с помощью веб-страницы. И действительно, JS — это же язык веба.
var wifi = require("Wifi"); wifi.startAP('EspruinoAP', { password: '0123456789', authMode: 'wpa2' },function() { console.log(`AP started`); }); function onPageRequest(req, res) { var a = url.parse(req.url, true); if (a.pathname=="/") { res.writeHead(200, {'Content-Type': 'text/html'}); res.end("Hello, ][aker!
“); } else if (a.pathname==”/on”) { res.writeHead(200, {‘Content-Type’: ‘text/plain’}); res.end(“Enable”); digitalWrite(D2, false); } else if (a.pathname==”/off”) { res.writeHead(200, {‘Content-Type’: ‘text/plain’}); res.end(“Disable”); D2.write(true); } else { res.writeHead(404, {‘Content-Type’: ‘text/plain’}); res.end(“404: Page “+a.pathname+” not found”); } } require(“http”).createServer(onPageRequest).listen(80);
Можно заметить, что синтаксис практически ничем не отличается от обычного JS. Давай разбираться, что же происходит в этой программе.
var wifi = require("Wifi")
— для начала мы подгрузили необходимый нам модуль для работы с Wi-Fi. Логично будет задаться вопросом: а откуда мы его взяли? Допустим, есть встроенные в прошивку модули. А если нам нужно загрузить с какого-нибудь внешнего сайта? Функцияrequire
поддерживает синтаксис видаrequire("https://github.com/espruino/EspruinoDocs/blob/master/devices/PCD8544.js");
, а WebIDE для поиска модулей онлайн, по умолчанию используетсяhttps://www.espruino.com/modules
.- Следующий блок кода отвечает за поднятие точки доступа с именем EspruinoAP и паролем 0123456789. В случае успешного запуска в консоль выводится соответствующее сообщение.
- Функция
onPageRequest
— собственно сам веб-сервер. В этой функции разбирается адрес и проверяется, что нужно сделать, в зависимости от запроса:- если загружается первая страница —
/
, то вернуть 200-й заголовок и сообщение типаtext/html
«Hello, ][aker!», в обрамлении HTML-тегов; - если загружается страница включения —
/on
, то вернуть 200-й заголовок и сообщение Enable, а также включить светодиод. Заметим, что используется привычная Arduin’щикам функцияdigitalWrite(pin, value)
; - небольшое отличие в случае страницы выключения —
/off
, для выключения светодиода используется не функцияdigitalWrite(pin, value)
, а методwrite(value)
; - во всех остальных случаях возвращаем ошибку «404 — Page Not Found».
- если загружается первая страница —
- А последняя строка собственно поднимает сервер, с внутренней функцией
onPageRequest
, на 80-м порте.
Важно заметить, что мы можем возвращать различный контент: обычный текст, HTML, XML и так далее.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru» ← Ранее Конкурс по конкурентной разведке перед PHDays 2018 стартует сегодня Далее → Команда упасть. Эксплуатируем критическую уязвимость в почтовике Exim 4
ли со статьей или есть что добавить?