Подключение к 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".
Подключаем заголовочные файлы
#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.
| |
//Подключаем заголовочные файлы
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
//Указываем параметры WiFi сети
const char *essid="wwf";
const char *key="geox98wf";
//В функции setup() запускаем Serial и подключаемся к WiFi
void setup()
{
Serial.begin(9600);
WiFi.begin(essid,key);
while(WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("WiFi connected");
} //end setup
//В функции loop выполняем GET запрос на
//WEB-страницу удаленного сервера. Для этого подключаемся к серверу
void loop() {
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); //3000
} //END loop
|
| |
HTTP/1.1 400 Bad Request
Date: Mon, 02 Jul 2018 09:21:03 GMT
Server: Apache/2.4.7 (Mageia) OpenSSL/1.0.1k SVN/1.8.11 mod_wsgi/3.5 Python/2.7.6 PHP/5.5.21 mod_perl/2.0.8-dev Perl/v5.18.1
Vary: accept-language,accept-charset
Accept-Ranges: bytes
Connection: close
Content-Type: text/html; charset=utf-8
Content-Language: en
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>Bad request!</title>
<link rev="made" href="mailto:root@localhost" />
<style type="text/css"><!--/*--><![CDATA[/*><!--*/
body { color: #000000; background-color: #FFFFFF; }
a:link { color: #0000CC; }
p, address {margin-left: 3em;}
span {font-size: smaller;}
/*]]>*/--></style>
</head>
<body>
<h1>Bad request!</h1>
<p>
Your browser (or proxy) sent a request that
this server could not understand.
</p>
<p>
If you think this is a server error, please contact
the <a href="mailto:root@localhost">webmaster</a>.
</p>
<h2>Error 400</h2>
<address>
<a href="/">192.168.1.35</a><br />
<span>Apache/2.4.7 (Mageia) OpenSSL/1.0.1k SVN/1.8.11 mod_wsgi/3.5 Python/2.7.6 PHP/5.5.21 mod_perl/2.0.8-dev Perl/v5.18.1</span>
</address>
</body>
</html>
|