ESP8266: Что внутри «народного wi-fi»? ESP8266 "Witty Cloud" - самый удачный на данный момент WiFi-модуль для самоделок и "умного дома"

14.05.2019

Была тепло встречена хабра-сообществом. Не смотря на то, что содержала мало конкретной информации. Тому была веская причина - 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’е. Используйте макетную плату под пайку или провода с разъёмами «мама» для подключения к пинам модуля.


Миниатюрные WiFi модули ESP8266 довольно привлекательны для систем умного дома и домашней автоматизации. Их еще называют «убийцами NRF24L01».
Я себе заказал более поздние модификации ESP07 и ESP12, которые отличаются меньшими размерами и большим числом выведенных GPIO, что не требует «хаков» для использования в них дополнительных портов ввода/вывода.

Данный модули разработаны китайской компанией

Технические характеристики:

  • 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

Заказывал я модули в январе.
Цена - $3.78, - $4.24. Покупал на премию за обзор статьи. Приехали за 31 день в запаянных пакетиках







ESP8266 ESP-07




ESP8266 ESP-12




Оживление модуля заняло довольно много времени
Для этого нужно подать на него 3.3В. Причем стабилизаторы у преобразователей USB/UART не тянут данный модуль по току, поэтому питание нужно внешнее.

RXD, TXD и GND подсоединяются через к компьютеру.

В результате собрал на макетке такую схему

Здесь сразу столкнулся со следующей сложностью - шаг дырочек у ESP07 - 2мм, а не 2.5 как у штырьковых разъемов, применяемых в Ардуино и прочих местах.
Пришлось к макетке паять на проволочках





Сразу вывел кнопку RESET и перемычку GPIO0 на землю, переводящую модуль в режим загрузки прошивки. А питание на модуль завел через

После этого запустил программу CollTerm и на скорости 9600 получил приглашение модуля.
Команда AT+GMR выдала 0020000904 (Версия SDK - 0020, в версия AT - 0904)


Для тех, кому лень, как мне, разбираться с АТ командами, есть , позволяющая все это настроить.

Прошивку делал . Так как данная программа работает только с COM1-COM6, пришлось в диспетчере устройств изменить свой COM33 от USB/UART конвертера на COM6.

Далее прошивка не представляет труда: открываем порт и коннектимся. Скорость выбирается автоматически. Главное, не забыть посадить GPIO0 на землю (у меня для этого есть специальная перемычка). Скорость выбирается автоматически. Иногда коннект не устанавливался. Помогало нажатие кнопки RESET во время коннекта.



Теперь можно подключиться к модулю
В данной программе можно загружать в 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)

Запуск программы без задержки таймера приводил к неизменной ошибке.
После рестарата, код
bmp180.read(OSS) t = bmp180.getTemperature() p = bmp180.getPressure() -- temperature in degrees Celsius and Farenheit print("Temperature: "..(t/10).." C") -- pressure in differents units print("Pressure: "..(p * 75 / 10000).." mmHg")

Выдавал в консоль текущее давление и температуру.

А вот запустить выдачу данных параметров в режиме веб-сервера мне не удалось. Все дело в нехватки памяти. Отдельно веб сервер и BMP180 работали, а вместе вываливались в
PANIC: unprotected error in call to Lua API (error loading module "bmp180" from file "bmp180.lua": not enough memory)
Или просто на консоль валились обрывки кода LUA.

Модернизировать с ходу не получилось.

Дальнейший мой путь был, собирать свою прошивку на фирменном SDK, как . Но это уже другая история. Скажу только, что прошивки собираются без проблем, а вот запустить злополучный BMP180 так и не удалось.

Выводы

  • Модули ESP8266 - это очень дешевое решения для построение сети умного дома и прочей домашней автоматизации с использованием WiFi
  • Данные модули вполне годятся для замены NRF24L01+ в связке с Arduino и прочими «народными» контроллерами.
  • Для работы в качестве самостоятельного контроллера ESP8266 имеет маловато ресурсов и довольно сырые прошивки
  • Программирование ESP-модулей довольно трудоемкий процесс, который может отпугнуть новичков
  • В целом ESP8266 имеют большие перспективы. Буду ждать развитие прошивок и средств разработки, а пока, буду применять их в связке с другими контроллерами (кроме )))

Микросхема ESP8266 – один из самых популярных инструментов для организации беспроводной связи в проектах умного дома. С помощью беспроводного контроллера можно организовывать связь по интерфейсу WiFi, обеспечивая проектам Arduino выход в интернет и возможность дистанционного управления и сбора данных. На основе ESP8266 созданы такие популярные платы как WeMos и NodeMcu, а также огромное количество самодельных проектов. В этой статье, мы узнаем, что из себя представляет ESP82266, какие бывают ее разновидности, как работать с ESP8266 в среде Arduino IDE.

ESP8266 – микроконтроллер с интерфейсом WiFi, который имеет возможность исполнять программы из флеш-памяти. Устройство было выпущено в 2014 году китайской фирмой Espressif и практически сразу же стало популярным.

Контроллер недорогой, обладает небольшим количеством внешних элементов и имеет следующие технические параметры:

  • Поддерживает Wi-Fi протоколы 802.11 b/g/n с WEP, WPA, WPA2;
  • Обладает 14 портами ввода и вывода, SPI, I2C, UART, 10-бит АЦП;
  • Поддерживает внешнюю память до 16 МБ;
  • Необходимое питание от 2,2 до 3,6 В, потребляемый ток до 300 мА в зависимости от выбранного режима.

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

Особенности платы ESP8266:

  • Удобное подключение к компьютеру – через USB кабель, питание от него же;
  • Наличие встроенного преобразователя напряжения 3,3В;
  • Наличие 4 Мб флеш-памяти;
  • Встроенные кнопки для перезагрузки и перепрошивки;
  • Все порты выведены на плату на две гребенки с шагом 2,5 мм.

Сферы применения модуля ESP8266

  • Автоматизация;
  • Различные системы для умного дома: Беспроводное управление, беспроводные розетки, управление температурой, дополнение к сигнализационным системам;
  • Мобильная электроника;
  • ID метки;
  • Детские игрушки;
  • Mesh-сети.

Распиновка esp8266

Существует огромное количество разновидностей модуля ESP8266. На рисунке представлены некоторые из них. Наиболее популярным вариантом является ESP 01.

Исполнение программы требуется задавать состоянием портов GPIO0, GPIO2 и GPIO15, когда заканчивается подача питания. Можно выделить 2 важных режима – когда код исполняется из UART (GPIO0 = 0, GPIO2 = 1 и GPIO15 = 0) для перепрошивки флеш-карты и когда исполняется из внешней ПЗУ (GPIO0 = 1, GPIO2 = 1 и GPIO15 = 0) в штатном режиме.

Распиновка для ESP01 изображена на картинке.

Описание контактов:

  • 1 – земля, 8 – питание. По документации напряжение подается до 3,6 В – это важно учесть при работе с Ардуино, на которую обычно подают 5 В.
  • 6 – RST, нужна для перезагрузки микроконтроллера при подаче на него низкого логического уровня.
  • 4 – CP_PD, также используется для перевода устройства в энергосберегающий режим.
  • 7 и 0 – RXD0 и TXD0, это аппаратный UART, необходимый для перепрошивки модуля.
  • 2 – TXD0, к этому контакту подключается светодиод, который загорается при низком логическом уровне на GPIO1 и при передаче данных по UART.
  • 5 – GPIO0, порт ввода и вывода, также позволяет перевести устройство в режим программирования (при подключении порта к низкому логическому уровню и подачи напряжения) .
  • 3 – GPIO2, порт ввода и вывода.

Распиновка ESP-12

Основные отличия Ардуино от ESP8266

  • ESP8266 имеет больший объем флеш-памяти, при этом у ESP8266 отсутствует энергонезависимая память;
  • Процессор ESP8266 быстрее, чем у Ардуино;
  • Наличие Wi-Fi у ESP8266;
  • ESP8266 потребляеn больше тока, чем для Ардуино;

Программирование ESP8266 в Arduino IDE

Программный комплект разработчика esp8266 включает в себя:

  • Компилятор из пакета GNU Compiler Collection.
  • Библиотеки, стеки протоколов WiFi, TCP/IP.
  • Средство загрузки информации в программу контроллера.
  • Операционная IDE.

Изначально модули ESP8266 поставляются с прошивкой от фирмы-изготовителя. С ее помощью можно управлять модулем с внешнего микроконтроллера, реализовывать работу с Wi-Fi как с модемом. Также существует множество других готовых прошивок. Некоторые из них позволяют настраивать работу модуля при помощи WEB-интерфейса.

Можно программировать из среды Arduino IDE. При ее помощи можно легко писать скетчи и загружать их в ESP8266, прошивать ESP8266, при этом не требуется сама плата Ардуино. Arduino IDE поддерживает все виды модулей ESP8266.

В настоящий момент для ESP8266 можно реализовать следующие функции:

  • Основные функции языка Wiring. Управлять портами GPIO можно точно так же, как и пинами на плате Ардуино: pinMode, digitalRead, digitalWrite, analogWrite. Команда analogRead(А0) позволяет считать значения АЦП. При помощи команды analogWrite (pin, value) можно подключить ШИМ на нужном выходе GPIO. При value=0 ШИМ отключается, максимальное значение достигает константы, равной 1023.С помощью функций attachInterrupt, detachInterrupt можно выполнять прерывание на любом порте GPIO, кроме 16.
  • Тайминг и delay. Используя команды millis и micros можно вернуть мс и мкс, которые прошли с момента старта. Delay позволяет приостановить исполнение программы на нужное время. Также функция delay(…) позволяет поддерживать нормальную работу Wi-Fi, если в скетче присутствуют большие элементы, которые выполняются более 50 мс. Yield() – аналог функции delay(0).
  • Serial и Serial1 (UART0 и UART1). Работа Serial на ESP8266 аналогична работе на ардуино. Запись и чтение данных блокируют исполнение кода, если FIFO на 128 байт и программный буфер на 256 байт заполнены. Объект Serial пользуется аппаратным UART0, для него можно задать пины GPIO15 (TX) и GPIO13 (RX) вместо GPIO1(TX) и GPIO3(RX). Для этого после функции Serial.begin(); нужно вызвать Serial.swap();. Аналогично Serial1 использует UART1, который работает на передачу. Необходимый пин для этого GPIO2.
  • Макрос PROGMEM. Его работа аналогична работе в Ардуино. Позволяет перемещать данные read only и строковые постоянные во flash-память. При этом в ESP8266 не сохраняются одинаковые константы, что приводит к дополнительной трате флеш-памяти.
  • I2C. Перед началом работы с шиной I2C выбираются шины с помощью функции Wire.pins(int sda, int scl).
  • SPI, OneWire – поддерживаются полностью.

Использование esp8266 для связи Ардуино по WiFi

Перед подключением к Ардуино важно помнить, что у ESP8266 напряжение питания не может быть выше 3,6, в то время как на пате Ардуино напряжение равно 5 В. Соединять 2 микроконтроллера нужно с помощью резистивных делителей. Перед подключением модуля нужно ознакомиться с распиновкой выбранного ESP8266. Схема подключения для ESP8266-01 представлена на рисунке.

3,3 В с Ардуино – на Vcc&CH_PD на модуле ESP8266, Земля с Ардуино – к земле с ESP8266, 0 – TX, 1 – RX.

Для поддержки стабильной работы ESP8266 необходим источник постоянного напряжения на 3,3 В и максимальный ток 250 мА. Если питание происходит от конвертера USB-TTL, могут происходить неполадки и сбои в работе.

Работа с библиотекой Wi-Fi для ESP8266 схожа с библиотекой для обыкновенного шилда. Имеется несколько особенностей:

  • mode(m) – для выбора одного из трех режимов: клиент, точка доступа или оба режима единовременно.
  • softAP(ssid) – нужен для создания открытой точки доступа.
  • softAP(ssid, password) – создает точку доступа с паролем, который должен состоять не менее чем из 8 знаков.
  • WiFi.macAddress(mac) и WiFi.softAPmacAddress(mac)– определяет МАС адрес.
  • WiFi.localIP() и WiFi.softAPIP() – определение IP адреса.
  • printDiag(Serial); – позволят узнать данные о диагностике.
  • WiFiUDP – поддержка передачи и приема multicast пакета в режиме клиента.

Работа выполняется по следующему алгоритму:

  • Подключение USB-TTL к USB и к ESP.
  • Запуск Arduino IDE.
  • Выбрать в меню инструменты нужный порт, плату, частоту и размер flash-памяти.
  • Файл - Примеры - ESP8266WiFi - WiFiWebServer.
  • Записать в скетче SSID и пароль сети Wi-Fi.
  • Начать компиляцию и загрузку кода.
  • Дождаться окончания процесса прошивки, отсоединить GPIO0 от земли.
  • Поставить скорость 115200.
  • Произойдет подключение, будет записан адрес IP.
  • Открыть браузер, ввести в адресной строке номер IP/gpio/1
  • Посмотреть монитор порта, если к выходу GPIO2 подключен светодиод, он должен загореться.

NodeMCU на базе esp8266

NodeMCU – это платформа, основанная на базе модуля esp8266. Используется для управления схемой на расстоянии при помощи интернета через Wi-Fi. Плата малогабаритная, компактная, стоит дешево, на лицевой стороне имеется разъем для USB. Рядом кнопки для отладки и перезагрузки микроконтроллера. Также установлен чип ESP8266. Напряжение питания – от 5 до 12 В, желательно подавать более 10 В.

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

  • D1 и D2 – для интерфейса I2C/ TWI;
  • D5-D8- для интерфейса SPI;
  • D9, D10 – для UART;
  • D1-D10 – могут работать как ШИМ.

Платформа имеет современное API для аппаратного ввода и вывода. Это позволяет сократить количество действий во время работы с оборудованием и при его настройке. С помощью прошивки NodeMCU можно задействовать весь рабочий потенциал для быстрой разработки устройства.

WeMos на базе esp8266

WeMos – еще один вид платформы, основанный на базе микроконтроллера esp8266. Соответственно, имеется Wi-Fi модуль, поддерживается Arduino IDE, имеется разъем для внешней антенны. Плата имеет 11 цифровых входов/выходов, которые (кроме D0) поддерживают interrupt/pwm/I2C/one-wire. Максимальное напряжение питания достигает 3,3 В. Также на платформе присутствует USB разъем. Аналоговый вход 1 с максимальным напряжением 3,2В.

Для работы с модулем нужно установить драйвер CH340 и настроить Ардуино IDE под ESP8266. Для этого нужно в меню настройки в строке «дополнительная ссылка для менеджера плат» добавить адрес http://arduino.esp8266.com/stable/package_esp8266com_index.json.

После этого требуется найти пакет esp8266 by ESP8266 и установить его. Затем нужно выбрать в меню инструменты микроконтроллер Wemos D1 R2 и записать нужный скетч.

Выводы по ESP8266

С помощью плат на основе микросхемы ESP8266 вы можете добавить в свои проекты возможности “большого интернета”, сделав их гораздо более интеллектуальными. Дистанционное управление, сбор и анализ данных на сервере, обработка голоса и работа с изображением – все это становится доступным, когда мы подключаем наш проект по WiFi к интернету. В следующих статьях мы подробно рассмотрим то, как можно программировать устройства на базе esp8266, а также уделим внимание таким популярным платам как WeMos и NodeMcu.

На сегодняшний день стоимость 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 танталовый
Похожие статьи