Lab works 6: Підключення до WiFi з використанням мікроконтролера ESP8266 NodeMCU
Мета роботи
Навчитися підключатися до WiFi мережі з мікроконтролера Arduino і передавати дані по WiFi.
Завдання роботи
1Додати підтримку мікроконтролера NodeMCU на базі WiFi-модуля ESP8266
Інструменти для виконанню роботи
Теоретична частина
Плата 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
Основний сайт проекту: https://github.com/esp8266/Arduino
Виконання роботи
Додавання підтримки мікроконтролера NodeMCU на базі WiFi-модуля ESP8266
Для додавання підтримки NodeMCU в середу Arduino IDE потрібно виконати наступні кроки:
Розробка скетчу для підключення до WiFi мережі і передачі даних по бездротовому каналу зв'язку.
Скетч для роботи з WiFi використовуємо бібліотеки, аналогічні стандартної бібліотеці WiFi для звичайних Arduino. При роботі зі звичайною Arduino і будь-яким WiFi Шілд будуть підключатися аналогічні заголовки, тільки без префікса "ESP8266".
Підключаємо заголовки
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
Вказати параметри WiFi мережі
const char *essid="WIFI_ESSID";
const char *key="WIFI_KEY";
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;
}
Відправляємо з генерований вручну GET запит
client.print("GET /laboratory/?page=1 HTTP/1.1\r\nConnection: close\r\n\r\n");
Очікуємо відповідь від сервера:
unsigned long timeout = millis();
while(client.available()==0)
{
if(millis()-timeout>5000)
{
Serial.println(">>> Client Timeout !");
client.stop();
return;
}
}
Виводимо відповідь і спимо 10 секунд
while(client.available())
{
String line=client.readStringUntil('\r');
Serial.print(line);
}
delay(10000);
Завантажуємо скетч на плату і відкриваємо менеджер порту. Там раз в десять секунд повинен з'являтися код веб-сторінки, що прийшов у відповідь від сервера wl.unn.ru.
Додаткове завдання: розробити скетч для сканування доступних WiFi мереж