Wifi модуль esp8266 подключение к php. WiFi ESP8266 - новый шаг в проектировании домашних устройств с беспроводным интерфейсом. Сферы применения модуля ESP8266

Была тепло встречена хабра-сообществом. Не смотря на то, что содержала мало конкретной информации. Тому была веская причина - NDA, подписанное нами для получения SDK от производителя решения, компании Espressif . Именно поэтому мы просто рассказали, «вот, есть такое решение». Чтобы заинтересованные имели возможность обратить внимание.

На днях мы (проект COOLRF, не забудьте подписаться на наше ВКонтакт-сообщество , если вы еще не состоите в нём) получили разрешение производителя чипа на публикацию в наших статьях информации, ранее попадавшей под условия соглашения о неразглашении. Всех, кого интересовали подробности - welcome под кат.

Типовые сценарии использования

ESP8266 создан для использования в умных розетках, mesh-сетях, IP-камерах, беспроводных сенсорах, носимой электронике и так далее. Одним словом, ESP8266 появился на свет, чтобы стать мозгом грядущего «Интернета вещей».

Предусмотрено два варианта использования чипа: 1) в виде моста UART-WIFI, когда модуль на базе ESP8266 подключается к существующему решению на базе любого другого микроконтроллера и управляется AT-командами, обеспечивая связь решения с инфраструктурой Wi-Fi; 2) реализуя новое решение, использующее сам чип ESP8266 в качестве управляющего микроконтроллера.

Первый сценарий был кратко описан в нашей прошлой статье. Реализуется он с помощью любого из недорогих китайских ESP8266-модулей. Хорошо подходит любителям ардуино и тем, у кого уже есть в руках готовая схематика и отлаженная прошивка на базе чего-то своего, горячо любимого.

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

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

Ключевые характеристики

Чип ESP8266 является одним из самых высокоинтегрированных решений для работы с WiFi. Внутри чипа уместилась куча всего того, что в конкурирующих решениях часто является частью внешней обвязки:

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

Управляет всем этим интегрированным хозяйством расширенная версия 32-битного процессора Tensilica’s L106 Diamond series. Что же интересного внутри?

  • 802.11 b/g/n protocol
  • Wi-Fi Direct (P2P), soft-AP
  • Integrated TCP/IP protocol stack
  • Integrated TR switch, balun, LNA, power amplifier and matching network
  • Integrated PLL, regulators, and power management units
  • +20.5dBm output power in 802.11b mode
  • Supports antenna diversity
  • Power down leakage current of < 10uA
  • SDIO 2.0, SPI, UART
  • STBC, 1x1 MIMO, 2x1 MIMO
  • A-MPDU & A-MSDU aggregation & 0.4μs guard interval
  • Wake up and transmit packets in < 22ms
  • Standby power consumption of < 1.0mW (DTIM3)

Ultra Low Power Technology

Энергопотребление - одна из самых важных характеристик решения, претендующего стать мозгом миллиардов устройств Интернета вещей. С чем связана популярность BLE и различных собственных реализаций радиоинтерфейсов? Ведь в конечном счете все устройства на базе этих реализаций все равно стремятся попасть в обычный Wi-Fi с помощью специальных устройств-мостов.

Секрет прост - сложно создать устройство, подключенное к WiFi, достаточное время работающее на автономном питании. Потребители не готовы менять батареи в датчиках каждые два-три месяца. Поэтому «выход в сеть» приходилось обеспечивать мостами, подключенным к постоянному электричеству. ESP8266 должен решить эту проблему. Теперь Wi-Fi можно использовать даже в автономных датчиках, работающих на небольших батареях. Благодаря использованию продвинутых механизмов управления энергопотреблением решения.

Если бегло посмотреть на характеристики потребления чипа, можно остаться в неведении. 215mA в режиме передачи - ничего особенного? Да, но стоит вчитаться в даташит и начинаешь понимать перспективы решения. ESP8266 потребляет около 60uA в режиме глубокого сна (с работающими часами реального времени) и меньше 1.0mA (DTIM=3) или меньше 0.5mA (DTIM=10) в режиме поддержания связи с точкой доступа Wi-Fi.

Модуль на чипсете ESP8266 - это простой и дешёвый способ добавить в своё устройство функции беспроводной связи через Wi-Fi.

Используйте ESP8266, чтобы управлять своим устройством дистанционно или чтобы снимать показания с сенсоров через интернет. Подключите свой гаджет к социальным сетям или реагируйте на данные, которые получаете через API от веб-сервисов.

В семействе модулей ESP8266 есть много разновидностей. Представленный модуль - ESP-01. У него антенна WiFi встроена на плату, а на ножки дополнительно выведены 2 GPIO-порта свободного назначения.

Взаимодействие

Управляющее устройство общается с ESP8266 через UART (Serial-порт) с помощью набора AT-команд . Поэтому работа с модулем тривиальна для любой платы с UART-интерфейсом: используйте Arduino , Raspberry Pi , что душе угодно.

Работа над приёмом и передачей данных выглядит, как взаимодействие с сырым TCP-сокетом или с serial-портом компьютера.

Более того, модуль можно перепрошивать. Программировать и загружать прошивки можно через Arduino IDE, точно так же, как при работе с Arduino. Реакция на AT-команды - это просто функция штатной прошивки, устанавливаемой на заводе. А вы можете написать свою собственную, если того требует проект. Поскольку на модуле есть 2 порта ввода-вывода общего назначения, вы можете обойтись вовсе без управляющей платы: просто подключите периферию непосредственно к ним.

Для того, чтобы среда Arduino IDE научилась прошивать ESP8266 достаточно добавить директорию с конфигурацией платформы в папку со своими скетчами.

Для физического соединения при прошивке вам понадобится USB-UART преобразователь или плата Arduino/Iskra, настроенная в режим USB-моста.

Питание

Родное напряжение модуля - 3,3 вольта. Его пины не толерантны к 5 вольтам . Если вы подадите напряжение выше, чем 3,3 вольта на пин питания, коммуникации или ввода-вывода, модуль выйдет из строя.

Поэтому для передачи данных на модуль с 5-вольтовых управляющих плат используйте , чтобы перевести напряжение в допустимый диапазон. Делитель из двух резисторов одинакового номинала (например, 10 кОм) подойдёт.

Никаких посредников для приёма данных не нужно. Сигнал в 3,3 В как есть будет воспринят управляющей платой, как логическая единица.

Питайте модуль ровными 3,3 вольтами. Их можно получить с отдельного регулятора напряжения .

Модуль потребляет в пике 220 мА. Регулятора напряжения, используемого на пятивольтовых платах Arduino для пина 3.3V, может оказаться недостаточно. Обратите внимание на характеристики своей платы. Например, Arduino Uno и Arduino Leonardo могут выдать не более 50 мА с пина 3.3V, поэтому с ними нужно обязательно использовать внешний регулятор; а Iskra Neo может выдать до 800 мА, поэтому с ней можно питать ESP8266 прямо от платы.

Распиновка

Из-за расположения ножек вплотную в 2 ряда, модуль нельзя установить на breadboard’е. Используйте макетную плату под пайку или провода с разъёмами «мама» для подключения к пинам модуля.

На сегодняшний день стоимость Wi-Fi модулей стремится к копейкам благодаря разработке . Это позволяет разрабатывать домашние устройства на уровне технологии Wi-Fi. А что это нам дает? На самом деле очень многое – практически тоже, что и сама сеть интернет в дополнение ко всему. Таким образом, делая какое либо устройство, теперь оно будет иметь выход в сеть и интернет (если в сети он присутствует), а значит устройство теоретически доступно и любому другому устройству, находящемуся в сети или подключенному к интернету. Еще лет пять назад нам с вами и мечтать не приходилось о таком уровне домашних устройств.

Решил сделать устройство, которое бы отправляло данные датчиков в интернет, благодаря чему можно было бы контролировать показания из любой точки города, страны, земли через интернет.

Так вот, при выборе модуля WiFi ESP8266 выбор склонился к модели ESP-07 с возможностью подключения внешней антенны для получения лучшего сигнала приобретенной в китайском интернет-магазине GearBest. В таком случае нам понадобится сама антенна (я не стал мелочиться, но подойдет любая другая с разъемом RP-SMA на WiFi частоты), коннектор для подключения антенны к модулю и при необходимости удлинитель для антенны. Плюс необходимые датчики.

Для работы с модулем ESP-07 была изготовлена печатная плата по схеме:

Схема состоит из трех основных блоков: стабилизатор напряжения на 3,3 вольта VR1 с необходимыми элементами (регулируемый вариант стабилизатора можно заменить на ams1117 3v3 с исключением резисторов R1 и R3), блок, необходимый для программирования модуля WiFi изготовлен на основе преобразователя интерфейсов USB-UART CH340G с необходимой обвязкой микросхемы (CH340G можно заменить на любые другие микросхемы соответствующего функционала с изменением обвязки для заменяемой микросхемы), непосредственно сам модуль WiFi так же с необходимыми элементами для его функционирования и программирования. Для входа в режим программирования необходимо нажать кнопку S2 Prog и перезагрузить модуль или выключить и включить питания с нажатой кнопкой S2 Prog. Далее при помощи софта на ПК загрузить прошивку в модуль WiFi. По окончании прошивки снова перезагрузить модуль, но без нажатой кнопки S2 Prog – так модуль будет работать в основном режиме. При применении внешней антенны плата предусматривает место для крепления кронштейна антенны. Сам кронштейн может быть самой простой конфигурации. Для подключения к компьютеру используется разъем mini-USB.

Для подключения антенны к ESP-07 используется кабель IPX to RP-SMA. Так как антенну я выбрал для себя на 18 дБ GDI-8218, устройство в сборе с датчиками выглядит достаточно угрожающе. Конечно, при использовании нескольких датчиков приходится соединять все на макетной плате, если использовать для контроля за погодными параметрами всего один датчик BMP280 (измеряет температуру, давление и влажность), то схема выглядит более красиво. Кроме того, плата для ESP8266 делалась как универсальный инструмент, поэтому если ее отредактировать, предусмотрев установку датчиков прямо на плате, то схема приобретет более компактный и эстетический вид.

Использование антенны в таком виде не всегда удобно, поэтому для удобства можно использовать удлинитель RP-SMA male to female для антенны для того, чтобы закрепить ее в удобном месте или же просто вынести ее относительно всей схемы.

Альтернативой такой плате могут быть заводские nodemcu платы или платы переходники на PLS/PBS контакты. Последние имеют лишь пару резисторов, необходимых для включения модуля и место для стабилизатора напряжения (нет в комплекте). Из-за своей совсем минимальности такие платы мне использовать было не удобно (если только не в составе другого устройства, оборудованного разъемом для такой платы).

Для подключения к модулю датчиков можно использовать все свободные GPIO модуля. Для получения показаний необходимых нам параметров датчики можно использовать любые в любой конфигурации, о чем пойдет речь ниже. Мною были использованы датчики DS18B20 в формате метрового зонда (удобно контролировать температуру на улице либо какой-нибудь жидкости, так как он считается водонепроницаемым), BMP180 для контроля атмосферного давления и AM2302 для контроля влажности в помещении. Не забывайте про необходимую обвязку датчиков, если используете их не в виде модулей со всем необходимым: DS18B20 подключается с подтягивающим резистором к плюсу питания (резистор 10 кОм между выводом 1-wire и плюсом питания), аналогично для AM2302 (DHT22), датчики, работающие по шине I 2 C тоже должны иметь подтягивающие резисторы на контактах SCL и SDA.

Однако для достижения результата необходимо написать прошивку, что бы устройство работало именно так, как нам необходимо. С заготовленными идеями при поиске SDK для ESP8266 был найден онлайн конструктор прошивок (или онлайн компилятор) , причем не требующий знаний в программировании (в своем большинстве функций)! Для получения доступа к сборке прошивок необходима регистрация, иначе это меню отсутствует вовсе. Без регистрации можно скачать только прошивки "быстрого старта".

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

Далее прошить модуль при помощи программы nodemcu-flasher (настройки программы ниже на скриншотах) (подключаем устройство по USB к ПК). При прошивке ничего не должно быть подключено к выводам UART модуля (GPIO1, GPIO3), иначе модуль может не прошиться. Если же к этим выводам что-то планируется подключать, то на время прошивки стоит это отключить. После прошивки перезагружаем модуль или выключаем и включаем питание – в зависимости от настроек модуль подключится к сети или создаст свою точку доступа. Устройство готово к настройкам и использованию!

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

Установить настройки для модуля ESP-07 (как показывает практика установка размера флэш памяти не влияет на используемый образец, видимо, верное значение устанавливается автоматически):

Указать путь к файлу прошивки:

Указать COM порт установленный при подключении для данного модуля и нажать кнопку Flash (если все сделано верно, то пойдет загрузка прошивки в модуль):

Дождаться завершения прошивки:

Перед компилирование прошивки удобно задать настройки по умолчанию на странице онлайн компилятора, где нужно ввести имя точки доступа и пароль WiFi роутера (раздел "Системные " в конце списка выбора функционала перед сборкой прошивки). Кроме этого можно задать статический IP адрес для устройства. Для этого в системных функциях необходимо поставить галку напротив «Настройки по умолчанию » и нажатием на шестеренку вызвать меню, куда и вносятся эти данные при необходимости. В таком случае после включения устройства WiFi оно автоматически подключится к роутеру. После включения открываем браузер и в строку адреса вписываем IP адрес устройства, по которому он зарегистрировался в сети. Попадаем в меню WiFi устройства, где можно не только в пределах сети наблюдать за параметрами датчиков, но и сконфигурировать остальные функции, которые выбрали перед сборкой прошивки.

Если же не произвести настройки по умолчанию перед сборкой прошивки, то при первом включении (после прошивки необходимо 3 раза с интервалом в 1 секунду нажать кнопку resrt на модуле) будет создана точка доступа hamessmart по адресу 192.168.4.1 . Используя телефон или ноутбук, необходимо подключиться подключиться к точке доступа и через браузер зайти на этот адрес, произвести настройки, перенастроить при необходимости в Station mode в настройках Main (логин для входа в меню , пароль 0000 ), так же введя имя точки доступа WiFi роутера и пароль.

Сначала нужно ввести настройки в меню Main (поле Config содержит ссылки для настроек и конфигурации выбранных функций).

Для входа в меню потребуется ввести логин и пароль 0000 . Здесь можно управлять настройками безопасности, времени, подключения к сети. Для сохранения введенных настроек нужно нажать кнопку Set .

Возвращаемся в главное меню и переходим по ссылке Hardware . Здесь включаем и конфигурируем датчики, которые будут подключены к модулю (наличие различных датчиков в этом меню обусловлено их выбором при сборке прошивки - если перед компилированием что-то не выбрать, эти функции не будут доступны в самой прошивке). Для датчиков, работающих по шине I2C нужно задать общие для всех устройств GPIO . Почему общих? По шине I2C можно подключить несколько устройств параллельно. Каждое такое устройство имеет свой адрес и как только ведущее устройство передает этот адрес, то ведомое устройство с этим адресом будет знать, что сейчас будет происходить обмен данными именно с ним, остальные устройства на шине при этом бездействуют. Для подключения датчиков влажности DHT11/22 используется отдельно отведенная ножка модуля, которая задается в настройках этого меню. Для включения датчика DS18B20 нужно так же задать отдельный вывод GPIO, далее, не забыв сохранить введенные настройки, перейти в главное меню и перейти по ссылке 1-wire.

В этом меню нажать Clear & Scan list , после чего должен появиться ID датчика DS18B20. И только после этого датчик температуры заработает.

Для подключения аналоговых датчиков можно использовать АЦП (единственный вывод ADC модуля WiFi). Это встроенный АЦП модуля разрядностью 10 бит (1023 отсчета) с опорным напряжением 1,024 В . Если датчик имеет на выходе уровень напряжения более этого значения, необходимо использовать делитель напряжения на резисторах с известным коэффициентом деления. Полученное значение от АЦП будет отличаться от действительного в этот коэффициент раз. Множество аналоговых датчиков есть в продаже в виде модулей на основе LM393. Принцип работы таких модулей заключается в том, что подстроечным резистором задается опорное напряжение для компаратора (LM393), а как только воздействие на датчик увеличит напряжение на входе компаратора, сделав его больше, чем опорное, то на выходе этого модуля будет сформирована логическая единица. Таким образом, можно регулировать порог срабатывания датчика (а точнее модуля этого датчика) и фиксировать достижение этого порога просто при помощи GPIO ESP8266, настроенных на вход. Для этого переходим в главное меню и нажимаем ссылку GPIO. В этом меню задаем номер вывода и режим работы для него, сохраняем. Показания будут типа "0 " или "1 " - порог достигнут или нет, действие произошло или нет.

Теперь, чтобы вывести показания датчиков в интернет, переходим по ссылке Servers или DDNS в зависимости от выбранного способа вывода в интернет. Изначально я планировал использовать для этой цели сервис narodmon.ru, который прямо на карте отображает показания датчиков всех пользователей, использующих этот сервис. Кроме этого, этот сервис имеет приложения и виджеты для мобильных устройств и ПК, что весьма удобно. Регистрируемся в этом сервисе (он полностью бесплатный) с использованием ID (смотри скриншот ниже - ссылка Servers поля Config ).

Сервис narodmon (народный мониторинг ) хранит показания датчиков до 1 года и позволяет составлять метрики датчиков за период помимо остального функционала.

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

Конечно, онлайн компилятор дает еще множество других функций: подключение различных дисплеев, отправка email или sms (необходим gsm модуль для отправки sms без интернет сервисов), выполнение настраиваемых логических операций, управление различной периферией с помощью GPIO и ШИМ, запись контролируемых параметров на SD карту памяти и многое другое. Если одного модуля мало, то можно сделать их несколько, работать будут они как одно целое в пределах общей сети благодаря функциям виртуальных датчиков и виртуальных GPIO (одно устройство получает показания датчиков от другого GET запросом). Если же просто не хватает портов ввода вывода, то есть функции подключения расширителей портов. Часть функционала доступна только в Pro режиме прошивки, который активируется на главной странице по ссылке GET PRO. Для активации необходимо ввести код, который не является бесплатным, но и стоит он лишь символическую сумму, который можно получить в личном кабинете сайта онлайн компилятора.

Для настроек важно не перепутать GPIO модуля (если ESP-07 припаян к плате, то обозначений выводов не видно) для нормального функционирования:

В дополнение ко всему но оставшиеся выводы модуля можно подключит дисплей, на который будем выводить значения погодных датчиков. Конструктор поддерживает дисплеи ILI9341 - TFT LCD 240х320, работающие по SPI интерфейсу.

При сборке прошивки задаем как каким GPIO будут подключаться выводы CS и DC дисплея (меню настроек вызывается на сайте конструктор при выборе функций нажатием шестеренки напротив нужной нам функции). Остальные вывод необходимо подключить следующим образом: MOSI - GPIO13, SCK - GPIO14, reset и LED подключаем к плюсу питания vcc, и соответственно vcc и gnd к плюсу и минусу источника питания (питание берем от модуля WiFi 3,3 вольта).

Здесь включаем TFT, при необходимости поворачиваем дисплей на 90 градусов и задаем в каких строках (Line 0, Line2... ) какую информацию будем выводить. С включенной функцией Время и NTP в системных функциях конструктора с NTP сервера берется информация о времени через интернет, что превращает наше устройство в точные часы, которые не нужно настраивать. Выводим текущее время на дисплей и еще несколько метео параметров для заполнения дисплея. Для этого в поле Select line выбираем строку, рядом выбираем параметр, который будем выводить на эту строку, ниже при необходимости выбираем центрирование данных, размер шрифта и цвет шрифта. Жмем Set и настройка сохраняется. Шрифт только типа simple font. Выбор заготовленных параметров достаточно невелик, но достаточен, но при помощи конструктора строк на дисплей можно выводить любые параметры в любой конфигурации.

К статье прилагается файл печатной платы для модуля ESP-07, прошивка с пустым бланком, прошивка с различным функционалом для ESP-07, некоторая документация, драйвер для программирования по USB для микросхемы CH340G, программа для прошивки ESP8266.

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
IC1 ESP8266 модуль ESP-07 1 В блокнот
IC2 ИС USB интерфейса CH340G 1 В блокнот
VR1 Линейный регулятор

AMS1117-ADJ

1 В блокнот
VD1 Диод Шоттки

1N5819

1 В блокнот
R1 Резистор

3 кОм

1 1206 В блокнот
R2, R7-R9 Резистор

10 кОм

4 0805 В блокнот
R3 Резистор

1.8 кОм

1 1206 В блокнот
R4 Резистор

1 кОм

1 0805 В блокнот
R5, R6 Резистор

390 Ом

2 0805 В блокнот
C1 Конденсатор 10 мкФ 1 на плате керамический 1206 В блокнот
C7 Конденсатор 22 мкФ 1 танталовый + 2,2 мкФ керамика 1206 В блокнот
C6 Конденсатор 100 мкФ 1 танталовый