NodeMCU, подключение к WiFi,http сервер и т.д. в Arduino IDE.

Продолжаем работать с платой NodeMCU в Arduino IDE. Как там говориться , так привычнее и ближе к сердцу. Поехали…

Подключение к WiFi.

Для этого используем библиотеку ESP8266WiFi , у вас она уже должна стоять по умолчанию(вместе с поддержкой платы). Скетч достаточно простой с пояснениями :

#include <ESP8266WiFi.h>
void setup()
{
Serial.begin(115200);
const char* ssid = "Ваш ssid";
const char* password = "password";
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA); // Задаем режим работы WIFI_STA (клиент)
WiFi.begin(ssid, password); // Подключаемся
while (WiFi.status() != WL_CONNECTED) // Ждем пока статус не станет WL_CONNECTED
{
delay(500);
}
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP()); // показывает наше IP
void loop()
{}

Немного подробней о функциях. WiFi.status() возвращает статус подключения , может пригодиться :

  • WL_CONNECTED: если подключение выполнено успешно.
  • WL_IDLE_STATUS: когда WiFi-сеть переключается с одного статуса на другой.
  • WL_NO_SSID_AVAIL:если заданный SSID находится вне зоны доступа.
  • WL_CONNECT_FAILED: если неправильный пароль.
  • WL_DISCONNECTED: если модуль не находится в режиме станции.

Функция WiFi.mode()задает режим работы WiFi модуля :

  • WIFI_AP: точка доступа.
  •  WIFI_STA: клиент.
  •  WIFI_AP_STA: оба режима одновременно.

Добавим еще немного кода, думаю в комментариях все понятно :

Serial.print("Subnet mask: ");
// "Маска подсети: "
Serial.println(WiFi.subnetMask());
Serial.print("Gete: ");
// "Шлюз: "
Serial.println(WiFi.gatewayIP());
Serial.print("DNS 1: ");
// "DNS первый сервер: "
Serial.println(WiFi.dnsIP(0));
Serial.print("DNS 2: ");
// "DNS второй сервер: "
Serial.println(WiFi.dnsIP(1));

Включение HTTP сервера :

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

#include<ESP8266WebServer.h>
#include <ESP8266WiFi.h>
ESP8266WebServer server(80); // включение сервера на порту:80
const char* ssid = "Ваш ssid";
const char* password = "password";
void headroot(void) // Процедура обработки запроса GET , "/"
{
server.send(200, "text/plain" , "Hellow the Web Server");
// Ответ сервера 200 , text/plain значит текстовые данные (заголовок Content-Type)
}
void setup()
{
Serial.begin(115200);
const char* ssid = "Ваш ssid";
const char* password = "password";
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA); // Задаем режим работы WIFI_STA (клиент)
WiFi.begin(ssid, password); // Подключаемся
while (WiFi.status() != WL_CONNECTED) // Ждем пока статус не станет WL_CONNECTED
{
delay(500);
}
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP()); // показывает наше IP
server.on("/",headroot); // Ответ сервера на запрос главной страницы
server.begin(); //Запуск сервера
}
void loop()
{
server.hadleClient(); //обработка текущих входящих HTTP-запросов
delay(1);
}

Может немного изменить нашу функцию ответа сервера. Пусть будет html:

 void headroot(void)
{
String webPage = "<html> <body> <center> <h1> WiFI Web Server </h1> </center> </body> </html>
HTTP.send(200, "text/html" , webPage);
}

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

void headroot(void)
{
String web ="";
web += "Html текс";
web += WiFi.localIP().toString();
web += "my local IP";
server.send(200, "text/html" , web );
}

­Вот наверное и все. Успехов.