Esp 12e подключить к wifi

Обновлено: 05.07.2024

Есть ESP 12e на ней стоит моя прошивка (среда Arduino IDE).
Логика программы на контроллере:
1. Программа смотрит конфиг на flash, читает параметры моей wifi сети (sidd,pass), далее осуществляет подключение к моей wifi точке.
2. Если в контроллере не заданы первичные настройки моей точке (sidd,pass) или он не может подключиться к заданной wifi точке (моя wifi точка отключена или неправленые данные подключения), контроллер автоматически переходит в режим собственной wifi точки.

Суть вопроса: Как сделать проверку на появление заданной сети (sidd,pass) и в случае ее появления отключить собственную wifi точку и подключится к ней. Вообще вроде можно работать в двух режимах (где то читал об этом). Понятно, что можно по таймеру (каждые 5-10 мин) делать попытки переподключения, но мне этот вариант не очень нравится.

Пример:
Мой контроллер подключен к моей wifi точке, я отключаю свою wifi точку , контроллер переходит в режим собственной wifi точки, включаю свою wifi точку, контроллер автоматически отключает свою wifi точку и подключается к майей wifi точке . Надеюсь понятно написал.

New member

Всем доброго времени суток!

Есть ESP 12e на ней стоит моя прошивка (среда Arduino IDE).
Логика программы на контроллере:
1. Программа смотрит конфиг на flash, читает параметры моей wifi сети (sidd,pass), далее осуществляет подключение к моей wifi точке.
2. Если в контроллере не заданы первичные настройки моей точке (sidd,pass) или он не может подключиться к заданной wifi точке (моя wifi точка отключена или неправленые данные подключения), контроллер автоматически переходит в режим собственной wifi точки.

Суть вопроса: Как сделать проверку на появление заданной сети (sidd,pass) и в случае ее появления отключить собственную wifi точку и подключится к ней. Вообще вроде можно работать в двух режимах (где то читал об этом). Понятно, что можно по таймеру (каждые 5-10 мин) делать попытки переподключения, но мне этот вариант не очень нравится.

Пример:
Мой контроллер подключен к моей wifi точке, я отключаю свою wifi точку , контроллер переходит в режим собственной wifi точки, включаю свою wifi точку, контроллер автоматически отключает свою wifi точку и подключается к майей wifi точке . Надеюсь понятно написал.

А чем, собственно таймер плох?
Хотя проще другой вариант - поставить в loop инкрементальный счетчик. Прошло, скажем 1000 или 10000 циклов loop - пару раз (цикл с настраиваемым числом ) проверили доступность wifi.
"Как сделать проверку на появление заданной сети (sidd,pass)?" - абсолютно так же как уже сделано в setup - попытка подключения и проверка успешности подключения.
Единственный нюанс, после обнаружения успешного подключения к wifi - в первую очередь собственную точку закрыть, что-то типа "server.close". Точную команду на память не помню. Посмотрите в примерах.
ЗЫ. Не забыть сделать флаг, что-бы после перехода в режим станции больше не проверять "появления сети"

CodeNameHawk

Moderator
"Как сделать проверку на появление заданной сети (sidd,pass)?" - абсолютно так же как уже сделано в setup - попытка подключения и проверка успешности подключения.

Есть сканирование сети, нет необходимости отключаться от текущей сети, если искомая сеть недоступна.

Понятно, что можно по таймеру (каждые 5-10 мин) делать попытки переподключения, но мне этот вариант не очень нравится.

А другого варианта и нет, сканируете и если сеть доступна подключаетесь.

Очень часто менять сети не стоит, вроде каждый раз(sidd,pass) записывается в память, затрется до дыр.

New member
Есть сканирование сети, нет необходимости отключаться от текущей сети, если искомая сеть недоступна. Согласен, не учел, что для попытки переподключения надо сменить режим wifi, и, следовательно, закрыть текущее соединение. Действительно необходимо использовать сканирование.

DanSV

New member

Есть сканирование сети, нет необходимости отключаться от текущей сети, если искомая сеть недоступна.


А другого варианта и нет, сканируете и если сеть доступна подключаетесь.

Очень часто менять сети не стоит, вроде каждый раз(sidd,pass) записывается в память, затрется до дыр.

DanSV

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

DanSV

New member

DanSV

New member
По первому вопросу, решил проверкой на конект if (WiFi.status() != WL_CONNECTED and millis() - OnTimecon > 10000) без таймера не обошлось , если условие верно подымаю WiFi точку в режиме WIFI_AP_STA и устанавливаю флаг, далее если связь с моим роутером восстанавливается и флаг на равен 1 делаю ребут контроллера для последующего переподключения только в режиме клиента.
Отрыл еще описание состояний подключения, может кому то будет полезно Arduino - WiFiStatus
New member
У меня в сети будет 3-5 контроллеров, как их можно находить не зная их IP (динамическое присвоение на уровне роутера).

Если речь пойдет об Arduino IDE и автоматическом появлении устройств и папке "Сеть" компьютера из локальной сети (и возможности увидеть динамический IP и войти на HTML-страницу устройства просто кликнув мышкой), то решение есть - использовать SSDP:

Текст скетча из примеров Arduino IDE - ESP - SSDP. С учетом замечания из приведенного поста.

Если разберётесь, как через SSDP найти устройство не "глазами", а в программе другой ESP - будет здорово!

Кстати, большинство IP роутеров позволяют несложным образом привязать статический IP адрес к МАС-адресу устройства.

DanSV

New member

Если речь пойдет об Arduino IDE и автоматическом появлении устройств и папке "Сеть" компьютера из локальной сети (и возможности увидеть динамический IP и войти на HTML-страницу устройства просто кликнув мышкой), то решение есть - использовать SSDP:

Текст скетча из примеров Arduino IDE - ESP - SSDP. С учетом замечания из приведенного поста.

Если разберётесь, как через SSDP найти устройство не "глазами", а в программе другой ESP - будет здорово!

Кстати, большинство IP роутеров позволяют несложным образом привязать статический IP адрес к МАС-адресу устройства.

DanSV

New member
Самые лучший примеры нашёл на сайте Программирование ESP8266 в среде Arduino IDE | ESP8266 самодостаточен. за что огромное спасибо автору данного сайта.

CodeNameHawk

Moderator
Проще всего назначить постоянный IP для каждой есп.

DanSV

New member
Проще всего назначить постоянный IP для каждой есп.

DanSV

New member

while (i<100) // This code goes in a method somewhere.
using (var deviceLocator = new SsdpDeviceLocator())
var foundDevices = await deviceLocator.SearchAsync("urn:schemas-upnp-org:device:BinaryLight:1"); // Can pass search arguments here (device type, uuid). No arguments means all devices.

foreach (var foundDevice in foundDevices)
// Device data returned only contains basic device details and location ]
// of full device description.

try
// Can retrieve the full device description easily though.
var fullDevice = await foundDevice.GetDeviceInfo();
String a = fullDevice.Manufacturer;
if (fullDevice.Manufacturer == "MY_ESP")
string name = fullDevice.FriendlyName;
string ip = foundDevice.DescriptionLocation.DnsSafeHost.ToString();
int flag = 0;
for (int sr = 0; sr < dataGridView1.RowCount; sr++)

if (dataGridView1.Rows[sr].Cells[1].Value.ToString().Contains(ip))
flag=1;
>

>
if (flag == 0) dataGridView1.Rows.Add(name, ip);

Теперь о проблемах:
По п.1 вроде идеальное решение .
По п.2 поиск идет долго, с первого раза не все устройства находятся, специально запускал 5 контроллеров одновременно, приходится ставить в цикл (while (i<100) и обработчик ошибок, так как они возникают %( ), в течение 2-3 минут все контроллеры находятся. Я планирую вынести данную процедуру в отдельный процесс и обновлять список в фоне.
Также для использования в VS данного кода необходимо ставить библиотеку "Rssdp" залить ее можно с сайта Rssdp 3.5.6 (для установки нужно ставить плагин NuGET Package Мenager - с того же сайта).
Если кто-то сможет оптимизировать процесс поиска или будут дельные предложения пишите.

Плата ESP8266 ESP-12 ESP-12E UART Wi-Fi устанавливается сверху на плату Arduino UNO R3 и позволяет получать доступ к управлению и состоянием Arduino из интернет. И я заставил этот слоеный пирог заработать.


Компоненты Arduino для работы покупал в магазине All Electronics Trading Company.

Все быстро пришло. Почти все из того что заказал в этом магазине было отличного качества.

Платы, которые использовались при написании статьи:

Закачал пустой скетч в Arduino U3.

void setup () <
// поместите здесь свой установочный код, чтобы запустить его один раз:
>
void loop () // поместите ваш основной код здесь для повторного запуска:
>

Действуя по инструкции 1 я ничего не достиг. Все комбинации перепробовал.

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

На момент прошивки нужен отдельный источник питания. Заподозрил что у меня именно эта ситуация.

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" принимается как в верхнем, так и в нижнем регистре. Остальные команды только в верхнем.

Дальше действовал по инструкции 1.


Небольшой трудностью на этом этапе было привязать статичный IP адрес - пришлось выяснять пароль от модема ZyXel Keenetic 4G II.

И все заработало.

Теперь можно было с Web-страницы при помощи кнопки управлять светодиодом, подключенным к Arduino UNO R3, и видеть его состояние.

Материалы со страницы "Инструкция 1".

Почему бы не использовать совмещенную плату UNO+ESP8266?

Есть в природе плата, аналогичная вроде-бы двум описываемым выше.

UNO + WiFi R3 ATmega328P + ESP8266 (32 Мб памяти), USB-TTL CH340G. Совместимость Uno, NodeMCU, WeMos ESP8266.

Последние пару лет практически все прототипирование несложных IoT-устройств я делаю на NodeMCU, хотя зачастую она и великовата по размеру, и дороговата, и избыточна по функционалу. А все потому, что имела неудачный опыт с ESP-01, которая совершенно не поддавалась прошивке. Сейчас пришло время преодолеть этот барьер и освоить другие железки, от которых мне нужно следующее - Wi-Fi и пины для подключения периферии.

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


Несколько представленных в статье модулей (ESP-01, ESP-07, ESP-12E, ESP-12F) и плат (Goouuu Mini-S1, WeMos D1 mini и NodeMCU V2) базируются на контроллере ESP8266, использование которого позволяет простым и дешевым способом добавить в своё устройство беспроводную связь через Wi-Fi.

Так выглядит модельный ряд модулей на базе чипа ESP8266.


Последняя плата из тех, о которых я расскажу (ESP32 WROOM DevKit v1), построена на контроллере семейства ESP32 - более продвинутой по своим возможностям версии ESP8266.

Все представленные модели можно программировать и загружать прошивки через Arduino IDE точно так же, как при работе с Arduino.

Настройка среды программирования Arduino IDE

По умолчанию среда IDE настроена только на AVR-платы. Для платформ, представленных ниже, необходимо добавить в менеджере плат дополнительную поддержку.

1) Открываем среду программирования Arduino IDE.


4) В пункте меню Tools (Инструменты) -> Board (Плата) выбираем Boards manager (Менеджер плат).

Находим в списке платформы на ESP8266 и нажимаем на кнопку Install (Установить).


6) Надпись INSTALLED сообщает, что дополнения успешно установлены.


7) Аналогичным образом устанавливаем дополнение для ESP32.


8) Теперь нам доступны к программированию платформы с модулем ESP8266 и ESP32.



Примечание - Также для работы с платами понадобится установить драйверы CH340 (WeMos и Goouuu) и CP2102 (для остальных). Их отсутствие повлияет на то, найдет ли Arduino IDE COM-порт, к которому подключена плата.

Код прошивки

Для прошивки всех используемых ниже модулей используем один и тот же код.

Установка Wi-Fi соединения

Подключение к объекту на платформе Rightech IoT Cloud по протоколу MQTT

Отправка рандомных значений по температуре ("base/state/temperature") и влажности ("base/state/humidity") каждые 5 секунд (PUB_DELAY)

Работоспособность кода будем проверять на платформе Rightech IoT Cloud, именно поэтому в качестве адреса MQTT-брокера указан dev.rightech.io. Идентификаторами клиентов служат идентификаторы объектов, созданных на платформе. Под каждую проверку я завела на платформе отдельный объект, именно поэтому во всех скринах кодов, которые будут далее представлены, отличается только строка <ric-mqtt-client-id>.

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

Модули на базе ESP8266

Для работы с модулями на базе ESP8266 есть два варианта:

Работа с AT командами (в стандартной прошивке Wi-Fi модуль общается с управляющей платой через «AT-команды» по протоколу UART);

Wi-Fi модуль как самостоятельный контроллер (все представленные модули очень умные: внутри чипа прячется целый микроконтроллер, который можно программировать на языке C++ через Arduino IDE).

В статье будем рассматривать второй вариант - прошивка модулей в виде самостоятельного полноценного устройства. Здесь также есть два варианта прошивки с точки зрения железа:

Через плату Arduino;

Через USB-Serial адаптер.

1. ESP-01

ESP-01 - самый популярный модуль на ESP8266. PCB антенна обеспечивает дальность до 400 м на открытом пространстве.

Внешний вид


Питание

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

Интернет вещей (IoT) является одной из самых популярных областей в мире технологий. Физические объекты и цифровой мир связаны сейчас как никогда. Помня об этом, компания Espressif Systems (шанхайская компания по производству полупроводниковых устройств) выпустила крутой микроконтроллер с поддержкой Wi-Fi, ESP8266, по невероятной цене! С помощью него менее чем за 3 доллара можно контролировать и управлять устройством из любой точки мира – идеально подходит практически для любого проекта IoT.


Характеристики платы NodeMCU ESP8266 и ее использование в Arduino IDE

Модуль ESP-12E

Отладочная плата оснащена модулем ESP-12E, содержащим микросхему ESP8266 с RISC микропроцессором Tensilica Xtensa® 32-bit LX106, который работает с регулируемой тактовой частотой от 80 до 160 МГц и поддерживает RTOS.

Характеристики ESP-12E

  • 32-разрядный LX106 от Tensilica Xtensa®
  • Тактовая частота от 80 до 160 МГц
  • 128 КБ встроенной оперативной памяти
  • 4 МБ внешней внешней флеш-памяти
  • Приемопередатчик Wi-Fi 802.11b/g/n

ESP8266 содержит встроенный приемопередатчик Wi-Fi 802.11b/g/n HT40, поэтому он может не только подключаться к сети Wi-Fi и взаимодействовать с интернетом, но и устанавливать собственную сеть, позволяя другим устройствам подключаться напрямую к нему. Это делает ESP8266 NodeMCU еще более универсальным.

Требования к питанию

Поскольку диапазон рабочего напряжения ESP8266 составляет от 3 В до 3,6 В, данная плата для поддержания постоянного напряжения на уровне 3,3 В поставляется с LDO стабилизатором напряжения. Он может надежно обеспечивать ток до 600 мА, чего должно быть более чем достаточно, поскольку ESP8266 во время радиочастотных передач потребляет до 80 мА. Выход стабилизатора также выводится на выводы на сторонах платы и обозначен как 3V3. Эти выводы можно использовать для подачи питания на внешние компоненты.

Требования к питанию

Питание к ESP8266 NodeMCU подается через встроенный USB-разъем MicroB. В качестве альтернативы, если у вас есть стабилизированный источник напряжения 5 В, можно использовать вывод VIN для непосредственного питания ESP8266 и его периферии.

Предупреждение

ESP8266 требует 3,3 В для питания и логические уровни 3,3 В для связи. Контакты GPIO не допускают напряжение 5 В! Если вы хотите соединить плату со схемами 5 В (или выше), то необходимо реализовать согласование логических уровней.

Периферия и ввод/вывод

ESP8266 NodeMCU имеет в общей сложности 17 выводов GPIO, выведенных на разъемы с обеих сторон отладочной платы. Эти выводы могут использоваться для выполнения различных периферийных задач, в том числе:

  • вход АЦП – канал 10-разрядного АЦП;
  • интерфейс UART – интерфейс UART используется для загрузки кода по последовательной связи;
  • выходы ШИМ – выводы ШИМ могут использоваться для регулировки яркости светодиодов или управления двигателями;
  • интерфейсы SPI, I2C – интерфейсы используются SPI и I2C для подключения всевозможных датчиков и периферийных устройств;
  • интерфейс I2S – интерфейс I2S используется для цифровой передачи звука.

Мультиплексируемые выводы ввода/вывода

В ESP8266 используется функция мультиплексирования выводов (несколько периферийных устройств мультиплексируются на один вывод GPIO). Это означает, что один вывод GPIO может действовать как PWM/UART/SPI.

Кнопки и светодиодный индикатор на плате

На плате ESP8266 NodeMCU находятся две кнопки. Одна из них, помеченная как RST, расположенная в верхнем левом углу, представляет собой кнопку сброса, которая, конечно же, используется для сброса микросхемы ESP8266. Другая кнопка, FLASH, в левом нижнем углу – это кнопка загрузки, используемая при обновлении прошивки.

Кнопки и индикаторы

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

Последовательная связь

На плате установлен контроллер USB-UART CP2102 от Silicon Labs, который преобразует USB сигнал в сигнал последовательного порта и позволяет компьютеру программировать и взаимодействовать с микросхемой ESP8266.

Последовательная связь

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

Распиновка ESP8266 NodeMCU

С внешним миром ESP8266 NodeMCU соединяют всего 30 выводов. Ниже показана распиновка отладочной платы.

Рисунок 6 Распиновка ESP8266 NodeMCU

Рисунок 6 – Распиновка ESP8266 NodeMCU

Для простоты мы сгруппируем выводы с аналогичными функциями.

Выводы питания – на плате расположено четыре вывода питания, а именно: один вывод VIN и три вывода 3.3V. Если у вас есть стабилизированный источник напряжения 5 В, вывод VIN можно использовать для непосредственного питания ESP8266 и его периферии. Выводы 3.3V – это выходы встроенного стабилизатора напряжения. Эти выводы могут использоваться для подачи питания на внешние компоненты.

GND – это вывод земли отладочной платы ESP8266 NodeMCU.

Выводы I2C используются для подключения всех видов датчиков и периферийных устройств на шине I2C в вашем проекте. Поддерживаются и I2C Master, и I2C Slave. Работа интерфейса I2C может быть реализована программно, а тактовая частота составляет максимум 100 кГц. Следует отметить, что тактовая частота I2C должна быть выше самой низкой тактовой частоты из ведомых устройств.

Выводы GPIO На ESP8266 NodeMCU имеется 17 выводов GPIO, которые можно назначать программно на различные функции, такие как I2C, I2S, UART, PWM, дистанционное инфракрасное управление, светодиодный индикатор и кнопка. Каждый включенный вывод GPIO может быть настроен либо на внутреннюю подтяжку к земле или к шине питания, либо установлен на высокоимпедансное состояние. При конфигурировании на вход для генерирования прерываний процессора он может быть настроен на срабатывание либо по фронту, либо по спаду.

Вывод ADC подает сигнал на имеющийся в NodeMCU, встроенный 10-разрядный прецизионный аналого-цифровой преобразователь последовательного приближения (SAR ADC). С помощью этого АЦП могут быть реализованы две функции: проверка напряжения питания на выводе VDD3P3 и проверка входного напряжения на выводе TOUT (но не одновременно).

Выводы UART ESP8266 NodeMCU имеет 2 интерфейса UART, то есть UART0 и UART1, которые обеспечивают асинхронную связь (RS232 и RS485) и могут обмениваться данными со скоростью до 4,5 Мбит/с. Для связи можно использовать UART0 (выводы TXD0 , RXD0 , RST0 и CTS0 ), который поддерживает управление потоком. UART1 (вывод TXD1 ) поддерживает только сигнал передачи данных, поэтому он обычно используется для печати журнала событий.

Выводы SPI ESP8266 имеет два интерфейса SPI (SPI и HSPI), поддерживающих и ведомый (slave), и ведущий (master) режимы. Эти интерфейсы SPI также поддерживают следующие функции SPI:

  • 4 режима синхронизации передачи SPI;
  • до 80 МГц и тактовые частоты, полученные делением 80 МГц;
  • до 64 байт FIFO.

Выводы SDIO ESP8266 имеет защищенный цифровой интерфейс ввода/вывода (SDIO, Secure Digital Input/Output Interface), который используется для прямого подключения карт SD. Поддерживаются 4-битный 25 МГц SDIO v1.1 и 4-битный 50 МГц SDIO v2.0.

Выводы PWM На плате имеется 4 канала широтно-импульсной модуляции (PWM). Выход ШИМ может быть реализован программно и использован для управления двигателями и светодиодами. Частотный диапазон ШИМ регулируется от 1000 мкс до 10000 мкс, то есть от 100 Гц до 1 кГц.

Выводы управления используются, как ни странно, для управления ESP8266. Эти выводы включают в себя вывод включения микросхемы EN , вывод сброса RST и вывод пробуждения WAKE .

  • Вывод EN – микросхема ESP8266 включена, когда на вывод EN подается высокий логический уровень. При низком логическом уровне микросхема работает на минимальной мощности.
  • Вывод RST используется для сброса микросхемы ESP8266.
  • Вывод WAKE используется для вывода чипа из глубокого сна.

Платформы разработки для ESP8266

Теперь перейдем к интересным вещам!

Существует множество платформ разработки, которые могут быть оснащены для программирования ESP8266. Вы можете использовать Espruino – JavaScript SDK и прошивка, эмулирующая Node.js, или использовать Mongoose OS – операционную систему для устройств IoT (рекомендуемая платформа от Espressif Systems и Google Cloud IoT), или использовать комплект разработки программного обеспечения (SDK), предоставляемый Espressif. или любую из платформ, перечисленных на Википедии.

К счастью, крутое сообщество ESP8266 сделало выбор IDE на шаг вперед, создав дополнение к Arduino IDE. Если вы только начинаете программировать для ESP8266, мы рекомендуем начать с этой среды разработки, и ее мы опишем в данном руководстве.

Это дополнение ESP8266 для Arduino IDE основано на работе Ивана Грохоткова и остальной части сообщества ESP8266. Для получения дополнительной информации смотрите репозиторий GitHub ESP8266 Arduino.

Установка ядра ESP8266 на ОС Windows

Давайте приступим к установке ядра ESP8266 Arduino.

Во-первых, на вашем компьютере должна быть установлена последняя версия Arduino IDE (Arduino 1.6.4 или выше). Если у вас ее нет, рекомендуем сейчас обновиться.

Для начала нам нужно обновить менеджер плат с помощью пользовательского URL. Откройте Arduino IDE и выберите Файл → Настройки. Затем скопируйте приведенный ниже URL в текстовое поле Дополнительные ссылки для менеджера плат, расположенное в нижней части окна:

Рисунок 7 Установка платы ESP8266 в Arduino IDE с помощью json URL

Рисунок 7 – Установка платы ESP8266 в Arduino IDE с помощью json URL

Отлично. Затем перейдите к Менеджеру плат, выбрав Инструменты → Платы → Менеджер плат. Там, в дополнение к стандартным платам Arduino, должна быть пара новых записей. Отфильтруйте результаты поиска, введя esp8266. Нажмите на эту запись и выберите Установить.

Рисунок 8 Установка ядра ESP8266 в менеджере плат Arduino IDE

Рисунок 8 – Установка ядра ESP8266 в менеджере плат Arduino IDE

Определения и инструменты для платы ESP8266 включают в себя полностью новый набор gcc, g++ и других достаточно больших скомпилированных двоичных файлов, поэтому загрузка и установка могут занять несколько минут (заархивированный файл весит

110 МБ). После завершения установки рядом с записью появится надпись INSTALLED. Теперь можно закрыть менеджер плат.

Пример Arduino: мигалка

Чтобы убедиться, что ядро ESP8266 Arduino и NodeMCU правильно настроены, мы загрузим самый простой скетч – The Blink!

Для этого теста мы будем использовать встроенный светодиод. Как упоминалось ранее в этом руководстве, вывод платы D0 подключен к встроенному синему светодиоду и программируется пользователем. Отлично!

Прежде чем мы перейдем к загрузке скетча и игре со светодиодом, мы должны убедиться, что в Arduino IDE выбрана правильная плата. Откройте Arduino IDE и выберите пункт NodeMCU 0.9 (ESP-12 Module) в меню Инструменты → Плата.

Рисунок 9 Выбор отладочного модуля NodeMCU в Arduino IDE

Рисунок 9 – Выбор отладочного модуля NodeMCU в Arduino IDE

Рисунок 10 Выбор COM порта в Arduino IDE

Рисунок 10 – Выбор COM порта в Arduino IDE

Предупреждение

Уделите больше внимания выбору платы, выбору COM порта и скорости загрузки. В случае некорректных настроек при загрузке новых скетчей вы можете получить ошибку espcomm_upload_mem.

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

После загрузки кода светодиод начнет мигать. Возможно, чтобы ваш ESP8266 начал работать со скетчем, вам придется нажать кнопку RST.

ESP8266 — китайский микроконтроллер (далее МК) от производителя Espressif с поддержкой WiFi-интерфейса. Управлять всем этим можно не только с браузера, но и из приложений на Android/iOS/Desktop. Если МК будет применяться там, куда не достаёт WiFi-сеть, то ESP8266 может работать в режиме точки доступа.

Примечание В этой статье не будут рассмотрены практические примеры применения ESP8266. Речь пойдёт об основных преимуществах и возможностях этого МК.

Содержание:

Микроконтроллер ESP8266 работает с внешней flash-памятью по интерфейсу SPI. Её объём варьируется от 512 Кбайт до 4 Мбайт. При желании и умении микросхему памяти можно будет перепаять на версию до 32 Мбайт.

Разновидности МК серии ESP и их плат

Существует около полутора десятка версий МК серии ESP и огромное количество плат с ними. Рассмотрим самые популярные из них.

Микроконтроллеры ESP8266

ESP-01

Микроконтроллер ESP8266 версия ESP-01

  • Имеет 8 разведённых контактов (VCC, GND, UTXD, URXD, CH_PD, GPIO0, GPIO2, GPIO6) и PCB-антенну (печатный проводник на самой плате).
  • Из разведённых выводов тут присутствуют только 3 GPIO, но не стоит видеть в этом одни минусы. Если нужно будет управлять одним реле или получать данные с датчика температуры, вам не понадобятся все выводы МК, достаточно будет лишь пары. К тому же, существуют платы и шилды с возможностью простой коммутации именно к этой версии МК. Например такая:

Плата WiFi-реле для микроконтроллера ESP8266

ESP-03

Плата ESP-03

  • Здесь появляется керамическая антенна. Она считается немного эффективней своего печатного собрата.
  • Также на плате разведены все доступные выводы GPIO. В этой статье описана разница между типами антенн для микроконтроллеров ESP8266.

ESP-07

Плата ESP-07

  • В этой версии в глаза сразу бросается металлический экран (который перед этим появляется на ESP-06).
  • На борту керамическая антенна и разъём для внешней антенны.

ESP-12

Разные варианты микроконтроллера ESP-12

Разные варианты микроконтроллера ESP-12. Источник

В свою очередь, существует несколько вариантов этой версии: ESP-12S, ESP-12F, ESP-12E. Вторая и третья версии имеют на торце дополнительно 6 разведённых контактов.

Платы

WeMos D1 mini

Плата WeMos D1 mini

Плата WeMos D1 mini. Источник

  • Имеет распайку девяти GPIO-контактов.
  • На плате имеется небезызвестный мост CH34x (такие часто ставят на клоны Arduino).
  • Установлен МК с 4 Мбайт flash-памяти.
  • Недостаток для некоторых — придётся самому паять контакты на плату (идут в комплекте).
  • Конструкционно совместима с различными выпускаемыми шилдами реле/датчиками.

NodeMCU v0.9/v1

Плата NodeMCU v0.9

Плата NodeMCU v0.9. Источник

Первое поколение плат серии NodeMCU. На ней распаяны все 11 GPIO-портов. Некоторые из них обладают дополнительными функциями (UART, I2C, SPI, PWM, ADC). Хотя на плате впаяны контакты, она занимает всю ширину беспаечной макетной платы, что затрудняет работу на ней. МК имеет 4 Мбайт flash-памяти. Также имеется мост CH340.

NodeMCU v3

Плата NodeMCU v3

Плата NodeMCU v3. Источник

Финальная версия платы этой серии. Существует и v2 «Amica», которая меньше по габаритам. v3 носит название «LoLin» и отличается от предыдущей версии только размерами и незначительными деталями (например дополнительной распайкой шины питания). Кроме традиционного моста CH340/CH341 на платы ставят чип CP2102, так что внимательней с выбором драйвера на них.

Характеристики

Все эти (и не только эти) платы выполнены на чипсете микроконтроллера ESP8266EX, а следовательно, характеристики у них одинаковые:

Как работать с микроконтроллером ESP8266?

Есть два способа работы с ним:

  • управление через AT-команды и автономная работа со своей прошивкой. В первом случае ESP8266 работает только в паре с другими МК, во втором — может работать независимо (хотя никто не запрещает присоединить её к другому МК).
  • «Из коробки» МК поставляется с прошивкой для работы через AT-команды. Для этого ESP8266 подключается к любому другому МК по UART-интерфейсу. Для демонстрации работы AT-команд ESP8266 можно подключить к компьютеру через USB-UART переходник и запустить монитор последовательного порта (например из Arduino IDE). Про то, как работать с этими командами, можно прочитать в этой статье.

Прошивка

В большинстве случаев намного удобней прошивать МК и работать с ним со своей прошивкой. Однако тут тоже есть свои нюансы. Вот 3 варианта событий:

В чём прошивается?

Например NodeMCU Flasher (которая подходит не только для плат NodeMCU) или ESPTool (необходим Python).

Однако в этой статье работа с МК и процесс прошивки будут рассмотрены в Arduino IDE.

Потом открываем Инструменты → Плата → Менеджер плат и в открывшемся списке в самом низу находим плату «esp8266 by ESP8266 Community» (если с этим возникли трудности — используем поиск вверху окна). Устанавливаем последнюю версию платы (около 150 Мбайт).

Старт 22 ноября, 4 месяца, Онлайн, От 35 000 до 100 000 ₽

После установки в списке плат появится немалое количество плат. Если не нашли свою плату или не знаете её названия — выбирайте Generic ESP8266 Module. Теперь можно выбрать свой МК в списке COM-портов.

У ESP8266 две скорости передачи: основная — её вы указываете при инициализации последовательного порта, и скорость, на которой передаётся отладочная информация. Она передаётся сразу после подачи питания на МК. Обычно это скорости 115200 бод и 74800 бод 0 соответственно.

Основы

Если вы не владеете базовыми знаниями работы с платформой Arduino, наверстать упущенное можно в нашей статье про основы использования Arduino.

После скачивания платы ESP8266 с помощью менеджера, в примерах появится большое количество скетчей. Рассмотрим один из них (Файл → Примеры → ESP8266WebServer → HelloServer):

Что делает этот скетч? МК подключается к вашей WiFi-сети и запускает сервер. В монитор последовательного порта выведется локальный IP-адрес (к примеру, 192.168.0.105 ). Вбиваем этот IP в адресную строку браузера, после чего в нём должна отобразиться строка «Привет от ESP8266!». Таким же образом можно проверить адрес /inline .

Ознакомиться с API МК можно в их официальном репозитории.

Распределение памяти

Внешняя память распределена на следующие разделы:

  • скетчи (память для прошивки);
  • файловая система SPIFFS;
  • OTA-Update (прошивка, переданная «по воздуху»);
  • EEPROM (да-да, её у МК тоже нет, поэтому она имитируется на flash-памяти);
  • конфигурация WiFi.

Файловая система SPIFFS

Один из плюсов внешней flash-памяти — файловая система. В неё можно с лёгкостью записать файлы (веб-странички, медиа-файлы и прочее) на микроконтроллеры ESP8266. На аппаратном уровне это можно было бы реализовать подключив к МК модуль SD-карт. Однако это решение требует свободных портов.

Размер файловой системы (от 32 Кбайт до 15 Мбайт) зависит от самого объема flash-памяти и от конфигурации, выставленной в Инстурменты → Flash size. Например, конфигурация 4M (2M SPIFFS) предназначена для МК с общим объёмом flash-памяти 4 Мбайт, 2 Мбайт из которых будут выделены под файловую систему.

SPIFFS не работает с папками — она содержит только список файлов. Соответственно, если загрузить в неё папку style, в которой будет файл header.css, то в файловую систему систему запишется файл с именем /style/header.css. Об этом стоит помнить, потому что длина файлового имени не должна превышать 31 символ (читается 32, но символ с кодом 0 отведён под завершение строки).

Для загрузки файлов потребуется инструмент ESP8266FS, интегрирующийся в Arduino IDE. Инструкция по установке:

Как работать с SPIFFS и файлами в ней, можно узнать в этой статье.

Энергонезависимая память EEPROM

Работа с внешней памятью немного отличается от стандартной.

Прошивка «по воздуху» OTA-Update

Для этого вам потребуется установленный Python.

После этого достаточно в метод loop() добавить строку: ArduinoOTA.handle() .

Прошиваем МК по проводу. В случае успешной загрузки в списке портов появится новый хост с именем «esp8266-xxxxxx», где esp8266 — указанное выше имя хоста, а xxxxxx — локальный IP-адрес МК. Выбираем его.

Читайте также: