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.handleClient(); //обработка текущих входящих 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 );
}

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

Ошибка в тексте? Выделите её и нажмите «Ctrl + Enter»

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

  1. можно ли сделать как-то так, чтобы если вдруг при запуске нет связи с роутером, то после 15 попыток девайс приступал к исполнению кода и периодически пытался подключиться к серверу?

  2. Почему нет. Подключение напишите в отдельной функции которая будет возвращать удачно или нет. В основном коде просто вызывайте ее для попытки подключения.

    void connect()

    {

    WiFi.begin(ssid, password);

    for (int i=0 ; i < 15 ; i++)

    {

    delay(100);

    if ( WiFi.status() == WL_CONNECTED) { return 1; }

    }

    return 0;

    }

    1. Какие именно примеры ? Все скетчи из статьи рабочие, статья писалась с реального устройства на котором все это делалось. Напишите вашу ошибку, возможно у вас проблема с библиотекой или т.д. а не кодом .

          1. Исправил , спасибо. Действительно server.handleClient();

    2. Мои извинения , действительно есть опечатки . Спасибо ИииИ за помощь. Скетч исправлен.

  3. С первым скетчем в монитор порта ничего не выводится. С чем это может быть связано?

    1. Всё, разобрался, надо было просто reset после заливки скетча нажать, но есть другая проблема в монитор порта выводится абракадабра, как если бы перепутались скорости, которые в бод, однако изменил
      Serial.begin(115200); на Serial.begin(300); и все работает адекватно
      В мониторе порта скорость стоит как и в скетче в обоих случаях (в первый раз 115200, во второй 300).
      Может кто знает, с чем может быть это связано?
      Ведь всё хочется сделать правильно, а не от балды.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *