Всем привет, сегодня рассмотрим отличный скетч для создания вебсервера на плате WeMos D1 R2 или ESP8266 с возможностью управлять любым устройством (реле, лампочка, светодиод и.т.д).
Данное устройство можно будет использовать для “умной wi-fi розетки” и управлять ей удаленно, хоть с компьютера, хоть с телефона через браузер. Скетч заливается через стандартную среду разработки Arduino.
/* * This sketch demonstrates how to set up a simple HTTP-like server. * The server will set a GPIO pin depending on the request * http://server_ip/gpio/0 will set the GPIO2 low, * http://server_ip/gpio/1 will set the GPIO2 high * server_ip is the IP address of the ESP8266 module, will be * printed to Serial when the module is connected. */ #include <ESP8266WiFi.h> const char* ssid = "********"; const char* password = "********"; // Create an instance of the server // specify the port to listen on as an argument WiFiServer server(80); void setup() { WiFi.persistent(false); Serial.begin(115200); delay(10); // prepare GPIO2 pinMode(2, OUTPUT); digitalWrite(2, 0); // Connect to WiFi network Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); // Start the server server.begin(); Serial.println("Server started"); // Print the IP address Serial.println(WiFi.localIP()); } void loop() { // Check if a client has connected WiFiClient client = server.available(); if (!client) { return; } // Wait until the client sends some data Serial.println("new client"); while(!client.available()){ delay(1); } // Read the first line of the request String req = client.readStringUntil('\r'); Serial.println(req); client.flush(); // Match the request int val; if (req.indexOf("/gpio/0") != -1) val = 0; else if (req.indexOf("/gpio/1") != -1) val = 1; else { Serial.println("invalid request"); client.stop(); return; } // Set GPIO2 according to the request digitalWrite(2, val); client.flush(); // Prepare the response String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nGPIO is now "; s += (val)?"high":"low"; s += "</html>\n"; // Send the response to the client client.print(s); delay(1); Serial.println("Client disonnected"); // The client will actually be disconnected // when the function returns and 'client' object is detroyed }
Для корректной компиляции вышеуказанного скетча, необходимо скачать и установить библиотеку ESP82266WIFI.h.
const char* ssid = "********"; const char* password = "********";
Далее вам необходимо подкорректировать скетч под себя. А именно в строках для подключения вемос к WI-FI, вам необходимо ввести данные вашей сети. После чего подключить устройство, которым вы хотите управлять, к выводу GPIO2 и GND.
Теперь откройте монитор порта, и посмотрите какой адрес получило ваше устройство, и введите его в строке поиска в браузере. Если все сделано правильно, должен открыться вебинтерфейс с которого можно удаленно управлять вашим устройством. Если у вас что-то не получилось, задавайте вопросы, мы с радостью на них ответим!
В связи с обращениями пользователей, у которых возникает ошибка:
Connecting to Lumia 640 LTE Dual SIM 1558 ……….. WiFi connected Server started 192.168.137.205 new client GET / HTTP/1.1 invalid request new client GET / HTTP/1.1 invalid request new client GET / HTTP/1.1 invalid request new client GET / HTTP/1.1 invalid request new client
Мы рекомендуем проверить следующий модифицированный скетч wi-fi веб-сервера, в котором немного изменен веб интерфейс и обращение к айпи адресу, должно проходить без ошибок.
#include <ESP8266WiFi.h> const char* ssid = "ssid name"; const char* password = "ssid password"; int ledPin = D5; WiFiServer server(80); void setup() { Serial.begin(115200); delay(10); pinMode(ledPin, OUTPUT); digitalWrite(ledPin, LOW); // Connect to WiFi network Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); // Start the server server.begin(); Serial.println("Server started"); // Print the IP address Serial.print("Use this URL : "); Serial.print("http://"); Serial.print(WiFi.localIP()); Serial.println("/"); } void loop() { // Check if a client has connected WiFiClient client = server.available(); if (!client) { return; } // Wait until the client sends some data Serial.println("new client"); while(!client.available()){ delay(1); } // Read the first line of the request String request = client.readStringUntil('\r'); Serial.println(request); client.flush(); // Match the request int value = LOW; if (request.indexOf("/LED=ON") != -1) { digitalWrite(ledPin, HIGH); value = HIGH; } if (request.indexOf("/LED=OFF") != -1){ digitalWrite(ledPin, LOW); value = LOW; } // Return the response client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println(""); // do not forget this one client.println("<!DOCTYPE HTML>"); client.println("<html>"); client.print("Led pin is now: "); if(value == HIGH) { client.print("On"); } else { client.print("Off"); } client.println("<br><br>"); client.println("Click <a href=\"/LED=ON\">here</a> turn the LED on pin 5 ON<br>"); client.println("Click <a href=\"/LED=OFF\">here</a> turn the LED on pin 5 OFF<br>"); client.println("</html>"); delay(1); Serial.println("Client disconnected"); Serial.println(""); }
После того как зальете скетч, в мониторе порта посмотрите ваш айпи адрес и обратитесь к нему:
Connecting to .. WiFi connected Server started Use this URL : http://192.168.1.106/
Привожу скриншот:
На этом всё. Хороших вам работающих проектов.
27 февраля 2021 в 18:12
Сколько esp 8266 можно подключить к этому серверу?
Можно ли wemos d1 создать как сервер и подключить к нему esp 8266?