![]() |
![]() |
||||||||||||
WiFi выключатель на модуле ESP8266 ESP-01
Автор: kostua123 Для реализации выключателя нам будет достаточно самого простого варианта устройства типа ESP8266 ESP-01. Модуль надежный и дешевый, позволяет реализовать WiFi интерфейс обмена с использованием самых низко производительных контроллеров. Мы же не собираемся для выключателя потратить целый RaspberryPi или другую плату на ARM, он нам в дальнейшем еще потребуется для более нетривиальных вещей :). Вот так выглядит сам модуль ESP8266: Параметры устройства: Назначение выводов : Сразу отметим, что модуль имеет достаточно приличное пиковое потребление поэтому рекомендуется использовать источник питания / стабилизатор 3.3В на ток не менее 250 -300мА. В противном случае неизбежны сбои в работе модуля – потеря связи / перезагрузка модуля и тп. неприятности. Схема подключения: Для работы с ESP8266 будем использовать популярный дешевый контроллер ATMega8 просто потому, что данный контроллер использую для многих подобных разработок и создания прототипов устройств. Программу с минимальными изменениями можно также портировать на контроллеры ATMega48/88/328 и др. На самом деле в данном случае можно использовать контроллер с меньшими ресурсами вплоть до Tiny13, производительности вполне хватит при обмене данными по последовательному порту с ESP8266. Схема подключения очень простая – TX выход контроллера ATMega8 подключается к RX входу ESP8266 и соответственно TX выход ESP8266 подключен к RX входу контроллера ATMega8. Питание контроллера ATMega8 и ESPЗ8266 от источника питания 3,3В. Если писать контроллер от источника 5В а модуль ESPЗ8266 от 3,3В потребуется делители на входах чтобы согласовать уровни напряжения. Напрямую подключать к питанию 5В модуль ESPЗ8266 нельзя – как правило, модуль не выходит из строя, но функционально работать все равно не будет. Поэтому удобнее всего питать всю схему от единого напряжения 3,3В. Для тактирования используем кварц 12Мгц, скорость обмена 115200 рассчитана исходя из этой частоты тактирования контроллера (для использования другой скорости обмена нужно изменить скорость работы модуля ESP 8266 AT + CIOBAUD и изменить параметры UART ATMega8, авто настройка скорости не поддерживается). Для питания от источника 12-5v вполне подойдет модуль регулятора питания типа AMS1117-3.3 LDO 800mA либо самостоятельно смонтировать на плату регулятор питания на основе AMS1117-3.3 или других подобных. Сигнал выключателя передается на ножку PORTC.0 (23 пин для корпуса TQFP megs8). Выход соединяется с обычным или твердотельным реле обычно через оптрон для гальванической развязки. Для тестов я подключал к выводу светодиод через сопротивление 470 ом. К выводу PORTC.1 можно опционально подключить индикатор состояния (светодиод) который будет показывать успешную отработку команд включения модуля. Все компоненты были собраны на специальной готовой плате под распайку контроллеров
“Универсальная плата-переходник для QFP/FQFP/TQFP32/44/64/80/100 LQFP” все необходимые соединения по питанию и сигнальным выводам выполнены перемычками что, учитывая простоту схемы, не занимает много времени. Разводка собственной печатной платы не производилась пока что, в дальнейшем выложу файлы печатной плату под данный модуль, чтобы было удобно изготовить данный модуль без пайки перемычек на макете. Отладка команд модуля ESP8266 Для отладки команд ESP8266 был также использован модуль переходника USB-COM(TTL). Если вы будете самостоятельно разрабатывать модули на основе ESP8266 то данное устройство вам, безусловно, будет полезно.
Как альтернативу для отладки вне разрабатываемого устройства можно использовать специализированный модуль USB-COM(TTL) с колодкой специально под ESP8266 напрмиер такой: Описание команд ESP8266 Управление модулем ESP8266 будем производить при помощи AT команд через стандартный последовательный интерфейс. · AT – Тестовая команда возвращает OK · AT + RST – Перезагрузка модуля. По завершению перезагрузки должны увидеть “ready” · AT + GMR -Проверка версии прошивки модуля · AT + CWMODE = <режим> – задает режим работы модуля mode: 1 – клиент, 2 – точка доступа, 3 – смешанный режим · AT + CWLAP – возвращает список WiFi точек доступа, к которым возможно подключение · AT + CWJAP = <имя>, <пароль> – Подключиться к точке доступа задав имя точки и пароль. Если подключение прошло успешно – команда выдаст OK. Модуль сохранит в памяти данные о точке и в дальнейшем самостоятельно будет к ней подключаться · AT + CWQAP – Отключиться от точки доступа · AT + CWSAP = <имя>, <пароль>, <канал>, <шифрования> – Создать свою точку доступа · AT + CWLIF – получить список подключенных устройств (если модуль работает как точка доступа) · AT + CIPSTATUS – Получить текущий статус TCP-соединений · AT + CIPSTART – Для одного соединения (+ CIPMUX = 0): · AT + CIPMODE = <режим> – установить режим передачи данных: · AT + CIPSEND – Отправить данные · AT + CIPCLOSE – Закрыть соединение. Параметр для многопоточного режима <ID> – идентификатор соединения. · AT + CIFSR – Получить IP-адрес модуля. Это возможно после подключения к WiFi точки. · AT + CIPMUX = <режим> – задает количество соединений. <Режим> = 0 для одного соединения, <режим> = 1 для многопоточного режима (до пяти подключений) · AT + CIPSERVER = <режим>, <порт> – Открыть порт. <Режим> – режим скрытности (0 – скрытый, 1 – открытый), <порт> – порт · AT + CIPSTO = <время> – установить время одного соединения в секундах (timeout) · AT + CIOBAUD = <скорость> – установить скорость UART порта. Работает для версий прошивки от 0.92. · Прием информации – данные приходят с пометкой + IPD, после которой идет информация о количестве принятых данных, а затем – сама информация. Программа. Последовательный интерфейс в программе настроен на скорость обмена 115200 (при частоте контроллера 12 Мгц) Для работы с выключателем установим следующий порядок команд AT + RST перезагружаем при старте модуль на всякий случай чтобы сбросить текущие выполняемые операции При успешной обработке команды модуль должен отвесить «ready» в терминале (также показываются служебные данные модуля). AT + CIPMODE = 0 <Режим> = 0 – not data mode (сервер может отправлять данные клиенту и может принимать данные от клиента) · AT + CIPMUX = 1 – задает количество соединений. <режим> = 1 для многопоточного режима (до пяти подключений) · AT + CIPSERVER = 1, 88 – Открыть порт. <Режим> – режим скрытности 1 – открытый, 88– порт. То есть адрес в браузере будем запрашивать http://адрес:88 · AT + CIPSTO = 5 – установить время одного соединения в секундах (timeout 5 секунд) При успешной обработке команд модуль должен ответить «OK» в терминале. Запрос от браузера будем определять по поступлению пакета +IPD Пример как выглядит в терминале запрос от браузера +IPD,1,412:GET / HTTP/1.1 Host: 192.168.4.1:88 Connection: keep-alive Cache-Control: max-age=0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36 Accept-Encoding: gzip, deflate, sdch Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4 1,CLOSED В прерывании ISR(USART_RXC_vect) проверяем наличие +IPD и ключей включения кнопок "/on" "/off" . После поступления IPD мы должны ответить браузеру используя AT+CIPSEND=…. после этого будет приглашение ввода данных OK > Данные которые мы будем передавать ответ браузеру (заголовки и тело пакета — иначе данные не будут корректно поняты браузером). USART_SendString — функция передачи данных в терминал. USART_SendString("HTTP/1.1 200 OKrn"); USART_SendString("Content-Type: text/html; charset=UTF-8rnrn"); USART_SendString("<html><head><title>ESP8266</title></head><body><button onclick="Check(1)">on</button> <button onclick="Check(0)">off</button><xyina> function Check(state){ var xhttp=new XMLHttpRequest();xhttp.open("GET",(state)?"/on":"/off",true);xhttp.send();}</xyina></body></html>rn"); При запросе адреса модуля в браузере видим такую страницу:
Загрузились данные страницы с кнопками выключателя. Страница полностью перегружается в браузере только в первый раз, при запросе адреса выключателя (когда в запросе нет команд управления) Далее данные команд будут передаваться асинхронно AJAX запросом на нажатие кнопок (on off). В противном случае перезагрузка страницы создает неприятный эффект длительного выполнения и будет видно что страница обновляется. Модуль получает пакеты запросов +IPD…. браузера, находит в них данные состояния и сразу меняет состояние вывода на плате, если запрос с командами, то данные шаблона страницы не передаются повторно браузеру (хотя можно асинхронно допустим запрашивать состояние и отображать его, также возможно дописать таймер в скрипт для периодического асинхронного запроса из браузера). Настройку fuse битов прошивки можно посмотреть для AVR здесь http://www.engbedded.com/fusecalc/ В данном случае мои настройки битов были такими
Ниже указаны ссылки на файлы проекта (WInAvr) и прошивка для устройства main.hex. репозиторий git https://github.com/KonstantinRubanov/esp8266_switch скачать с облака архивом https://cloud.mail.ru/public/3T1f/5b6BdcQ1y Использу проект вы можете изменить шаблон страницы html, также можно достаточно быстро переделать проект для запроса данных датчиков асинхронно и обновления этих данных в браузере (нужно будет принять ответ XMLHttpRequest и данные полученные отобразить в нужный элемент шаблона, сейчас ответ полученный через HttpRequest игнорируется)
Все вопросы в Форум.
Эти статьи вам тоже могут пригодиться: |
|
||||||||||||
![]() |
![]() |


![]() |
![]() |
|||
|
||||
![]() |
![]() |