- Подключение к WiFi с использованием микроконтроллера ESP8266 NodeMCU
- Задачи работы
- Инструменты для выполения работы
- Теоретическая часть
- Выполнение работы
- Добавление поддержки микроконтроллера NodeMCU на базе WiFi-модуля ESP8266
- Разработка скетча для подключения к WiFi сети и передачи данных по беспроводному каналу связи.
- NodeMCU (Lua) — Wi-Fi
- Клиент
- Точка доступа
- Совмещенный режим
- События
- Поиск сетей
Подключение к WiFi с использованием микроконтроллера ESP8266 NodeMCU
Научиться подключаться к WiFi сети с микроконтроллера Arduino и передавать данные по WiFi.
Задачи работы
- Добавить поддержку микроконтроллера NodeMCU на базе WiFi-модуля ESP8266
- Разработать скетч для подключения к WiFi сети и передачи данных по беспроводному каналу связи.
Инструменты для выполения работы
- Компьютер с подключением к сети Internet
- Микроконтроллер NodeMCU V3 на базе EPS8266-12E
Теоретическая часть
Плата NodeMCU построена на базе модуля WiFi ESP8266.
Распиновка платы:
Для работы с этой платой была добавлена поддержка среды разработки Arduino IDE. Практически все библиотеки для обычной Arduino так же работают и для этой платы, однако ее распиновка отличается от распиновки плат Arduino. Так, на плате есть один аналоговый вход (A0), на котором работает 10-битный АЦП. Цифровым пинам 0-15 Arduino соответствуют выходы, обозначенные GPIO1-GPIO16. Например, если в Arduino IDE используется пин 12, ему будет соответствовать контакт, обозначенный на плате как D6 (GPIO12). Пины GPIO1 — GPIO5, GPIO10, GPIO12-GPIO15 поддерживают ШИМ.
Характеристики платы:
поддержка WiFi протоколов 802.11 b/g/n
Wi-Fi Direct (P2P), soft-AP
встроенный стек TCP/IP
SDIO 2.0, SPI, UART
встроенный PLL, регуляторы, и система управления питанием
Номинальное напряжение: 3,3 В
Входное напряжение: 3,7–20 В
Максимальный потребляемый ток: 220 мА
D9, D10 — UART
D1, D2 — I²C (D1 — SCL(SCK), D2 — SDA)
D5–D8 — SPI
Выполнение работы
Добавление поддержки микроконтроллера NodeMCU на базе WiFi-модуля ESP8266
Для добавления поддержки NodeMCU в среду Arduino IDE нужно выполнить следующие шаги:
- Открываем настройки (Файл -> Настройки)
- Находим дополнительные ссылки для менеджера плат и нажимаем справа кнопку редактирования (выделена на скриншоте)
- Добавляем URL: http://arduino.esp8266.com/stable/package_esp8266com_index.json
- Сохраняем и заходим в менеджер плат (Инструменты -> Плата: -> Менеджер плат)
- Вводим в поиск «esp8266» и устанавливаем пакет esp8266
- Создаем новый скетч и сохраняем его как Esp8266Test.
- Выбираем плату «NodeMCU 1.0 (ESP-12E Module)» (Инструменты -> Плата:). Ниже в меню «Инструменты» вводим настройки для CPU Frequency, Flash Size и Upload Speed как показано на скриншоте (скорее всего, будут стоять именно такие, если плата отличается от изображенной выше, настройки могут отличаться).
- Выбираем нужный порт.
Разработка скетча для подключения к WiFi сети и передачи данных по беспроводному каналу связи.
Скетч для работы с WiFi используем библиотеки, аналогичные стандартной библиотеке WiFi для обычных Arduino. При работе с обычной Arduino и каким-либо WiFi шилдом будут подключаться аналогичные заголовочные файлы, только без префикса «ESP8266».
Подключаем заголовочные файлы
WIFI_ESSID и WIFI_KEY заменяем на имя и пароль используемой WiFi сети.
В функции setup() запускаем Serial и подключаемся к WiFi
Serial.begin(9600);
WiFi.begin(essid,key);
while(WiFi.status() != WL_CONNECTED)
delay(500);
Serial.print(«.»);
>
Serial.println(«WiFi connected»);
В функции loop выполняем GET запрос на WEB-страницу удаленного сервера. Для этого подключаемся к серверу
WiFiClient client;
if(!client.connect(«wl.unn.ru»,80))
Serial.println(«connection failed»);
return;
>
unsigned long timeout = millis();
while(client.available()==0)
if(millis()-timeout>5000)
Serial.println(«>>> Client Timeout !»);
client.stop();
return;
>
>
while(client.available())
String line=client.readStringUntil(‘\r’);
Serial.print(line);
>
delay(10000);
Загружаем скетч на плату и открываем менеджер порта. Там раз в десять секунд должен появляться код веб-страницы, пришедший в ответ от сервера wl.unn.ru.
NodeMCU (Lua) — Wi-Fi
Начиная свое знакомство с микроконтроллером ESP8266, первым делом захочется подключиться к Wi-Fi и попробовать сетевые возможности данного микроконтроллера. Для работы с Wi-Fi в NodeMCU существует специальный модуль, который так и называется WiFi module. Данный модуль позволяет устанавливать различные режимы работы и настраивать подключения к Wi-Fi сети.
Существует три режима работы Wi-Fi в ESP8266
- Клиент. (STA)
- Точка доступа. (AP)
- Совмещенный режим. (STA + AP)
- Wi-Fi выключен.
Клиент
Один из самых часто используемый режимов работы это режим клиента. Для того чтобы подключиться достаточно несколько строк кода, где нужно указать SSID и пароль вашей Wi-Fi сети.
cfg = > cfg.ssid = "MY-NET" -- SSID cfg.pwd = "myPassword" -- пароль cfg.save = false -- не сохранять настройки (по умолчанию true) wifi.setmode(wifi.STATION) -- выбор режима wifi.sta.config(cfg) -- установка настроек и подключения к Wi-Fi
Точка доступа
В режиме точки доступа, ESP8266 создает свою собственную сеть, к которой могут присоединиться другие устройства (телефон, ПК и т.д). Максимальное количество устройств, которые могут быть одновременно подключены — пять. Данный режим часто используется как промежуточный этап перед подключением ESP8266 к WiFi в режиме клиента. Например, для первоначальной настройки.
cfg= ssid="NODE-XXXXXX", pwd="password" > wifi.setmode(wifi.SOFTAP) wifi.ap.config(cfg)
Если пароль не указывать, то будет создана открытая точка. При подключении, ESP8266 по умолчании выдается ip адрес 192.168.4.1, а клиенту 192.168.4.2
Совмещенный режим
Совмешенный режим Station + AP, когда ESP8266 создает свою собственную сеть и одновременно подключается к другой сети.
. Имейте ввиду что при использовании совмещенного режима используется один и тот же канал для обеих сетей, поскольку ESP8266 может прослушивать только один канал.
cfg_ap= ssid="NODE-XXXXXX", pwd="password" > cfg_sta= ssid="NET", pwd="password" > wifi.setmode(wifi.STATIONAP) wifi.ap.config(cfg_ap) wifi.sta.config(cfg_sta)
События
Для отслеживания различных событий существую функция callback на которую можно подписаться.
wifi.eventmon.register(wifi.eventmon.STA_CONNECTED, function(T) print("STA_CONNECTED") -- вызовется при подключении к сети dofile('my_script.lua') end) wifi.eventmon.register(wifi.eventmon.STA_DISCONNECTED, function(T) print("STA_DISCONNECTED") -- вызовется при отключении от сети end
Например, если ваш скрипт передает данные на сервер, то пока подключение с сетью не будет установлено, нет смысла запускать ваш скрипт раньше.
Событие вызывается каждый раз при подключении или отключении от сети (в зависимости на какое событие вы подписались), это нужно учитывать в вашем коде.
Поиск сетей
Чтобы иметь возможность сканировать доступные сети, в модули существует функция wifi.sta.getap(), но доступ к этой функция есть только в режиме клиента или совмещенный. При попытки запустить ее из режима точки доступа, выдаст ошибку с предупреждением.
function listap(t) -- callback функция for k,v in pairs(t) do -- разбираем таблицу print(k.." : "..v) -- выводим значения в консоль end end wifi.sta.getap(1, listap) -- 1 это формат данных возвращаемой таблицы
Сегодня я постарался написать об основных функциях которые потребуются для работы ESP8266 с Wi-Fi сетями, о других возможностях Wi-Fi модуля можно узнать если внимательно изучить документацию.