Продолжаем работать с платой 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 );
}

Вот наверное и все. Успехов.
можно ли сделать как-то так, чтобы если вдруг при запуске нет связи с роутером, то после 15 попыток девайс приступал к исполнению кода и периодически пытался подключиться к серверу?
Почему нет. Подключение напишите в отдельной функции которая будет возвращать удачно или нет. В основном коде просто вызывайте ее для попытки подключения.
void connect()
{
WiFi.begin(ssid, password);
for (int i=0 ; i < 15 ; i++)
{
delay(100);
if ( WiFi.status() == WL_CONNECTED) { return 1; }
}
return 0;
}
Оба примера не компилируются. Исправьте ошибки, пожалуйста.
Какие именно примеры ? Все скетчи из статьи рабочие, статья писалась с реального устройства на котором все это делалось. Напишите вашу ошибку, возможно у вас проблема с библиотекой или т.д. а не кодом .
возможно:
+ …. Спс
но разве таи не handleClient();
даже гугл это показывает и Arduino выделяет
Исправил , спасибо. Действительно server.handleClient();
Мои извинения , действительно есть опечатки . Спасибо ИииИ за помощь. Скетч исправлен.
С первым скетчем в монитор порта ничего не выводится. С чем это может быть связано?
Всё, разобрался, надо было просто reset после заливки скетча нажать, но есть другая проблема в монитор порта выводится абракадабра, как если бы перепутались скорости, которые в бод, однако изменил
Serial.begin(115200); на Serial.begin(300); и все работает адекватно
В мониторе порта скорость стоит как и в скетче в обоих случаях (в первый раз 115200, во второй 300).
Может кто знает, с чем может быть это связано?
Ведь всё хочется сделать правильно, а не от балды.