В этом уроке вы узнаете, как настроить ESP8266 NodeMCU в качестве точки доступа (Access Point, AP) с помощью Arduino IDE. Это позволит вам напрямую подключаться к ESP8266 через Wi-Fi без беспроводного маршрутизатора.
Станция и точка доступа ESP8266
В большинстве проектов веб-сервера ESP8266 NodeMCU мы подключаем ESP8266 к беспроводному маршрутизатору. В этой конфигурации мы можем получить доступ к ESP8266 через локальную сеть.
В этом сценарии маршрутизатор действует как точка доступа, а ESP8266 устанавливается как станция. Таким образом, вам необходимо подключиться к маршрутизатору (локальной сети), чтобы управлять ESP8266.
В некоторых случаях это может быть не самой лучшей конфигурацией (когда поблизости нет маршрутизатора). Но если вы установите ESP8266 в качестве точки доступа (hotspot), вы сможете подключиться к ESP8266 с помощью любого устройства с возможностями Wi-Fi без необходимости подключения к маршрутизатору.
Проще говоря, когда вы настраиваете ESP8266 в качестве точки доступа, вы создаете собственную сеть Wi-Fi, к которой могут подключаться находящиеся поблизости устройства Wi-Fi (станции) (например, ваш смартфон или компьютер).
В этом уроке мы покажем вам, как настроить ESP8266 в качестве точки доступа в ваших проектах веб-сервера. Таким образом, вам не нужно будет подключаться к маршрутизатору, чтобы управлять вашим ESP8266.
Поскольку ESP8266 не подключается далее к проводной сети (например, к маршрутизатору), его называют программной точкой доступа (soft-AP).
Это означает, что если вы попытаетесь загрузить библиотеки или использовать прошивку из интернета, это не сработает. Это также не сработает, если вы попытаетесь сделать HTTP-запросы к сервисам в интернете, например, опубликовать показания датчиков в облаке.
Установка библиотеки DHT для ESP8266
В этом примере мы будем использовать проект веб-сервера, который отображает показания датчика DHT.
Имея плату ESP8266, установленную в Arduino IDE, для считывания с датчика DHT мы будем использовать библиотеку DHT от Adafruit. Для использования этой библиотеки вам также необходимо установить библиотеку Adafruit Unified Sensor .
Чтобы установить эти две библиотеки, выполните следующие шаги:
1. Откройте Arduino IDE и перейдите в Sketch > Include Library > Manage Libraries . Должен открыться менеджер библиотек.
2. Введите «DHT» в поле поиска и установите библиотеку DHT от Adafruit.
3. После установки библиотеки DHT от Adafruit введите в поле поиска «Adafruit Unified Sensor». Прокрутите страницу до конца, чтобы найти библиотеку и установить ее.
После установки библиотек перезапустите Arduino IDE.
Точка доступа ESP8266 NodeMCU (AP)
В этом примере за основу мы возьмем проект веб-сервера температуры и влажности ESP8266 DHT11/DHT22 с Arduino IDE и добавим в него возможности точки доступа.
То, что мы вам здесь покажем, можно использовать с любым примером веб-сервера ESP8266.
Загрузите скетч, представленный ниже, чтобы настроить ESP8266 в качестве точки доступа.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 |
/********* Rui Santos Complete project details at https://randomnerdtutorials.com/esp8266-nodemcu-access-point-ap-web-server/ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files. The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. *********/ // Import required libraries #include <Arduino.h> #include <ESP8266WiFi.h> #include <Hash.h> #include <ESPAsyncTCP.h> #include <ESPAsyncWebServer.h> #include <Adafruit_Sensor.h> #include <DHT.h> const char* ssid = "ESP8266-Access-Point"; const char* password = "123456789"; #define DHTPIN 5 // Digital pin connected to the DHT sensor // Uncomment the type of sensor in use: //#define DHTTYPE DHT11 // DHT 11 #define DHTTYPE DHT22 // DHT 22 (AM2302) //#define DHTTYPE DHT21 // DHT 21 (AM2301) DHT dht(DHTPIN, DHTTYPE); // current temperature & humidity, updated in loop() float t = 0.0; float h = 0.0; // Create AsyncWebServer object on port 80 AsyncWebServer server(80); // Generally, you should use "unsigned long" for variables that hold time // The value will quickly become too large for an int to store unsigned long previousMillis = 0; // will store last time DHT was updated // Updates DHT readings every 10 seconds const long interval = 10000; const char index_html[] PROGMEM = R"rawliteral( <!DOCTYPE HTML><html> <head> <meta name="viewport" content="width=device-width, initial-scale=1"> <style> html { font-family: Arial; display: inline-block; margin: 0px auto; text-align: center; } h2 { font-size: 3.0rem; } p { font-size: 3.0rem; } .units { font-size: 1.2rem; } .dht-labels{ font-size: 1.5rem; vertical-align:middle; padding-bottom: 15px; } </style> </head> <body> <h2>ESP8266 DHT Server</h2> <p> <span class="dht-labels">Temperature</span> <span id="temperature">%TEMPERATURE%</span> <sup class="units">°C</sup> </p> <p> <span class="dht-labels">Humidity</span> <span id="humidity">%HUMIDITY%</span> <sup class="units">%</sup> </p> </body> <script> setInterval(function ( ) { var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { document.getElementById("temperature").innerHTML = this.responseText; } }; xhttp.open("GET", "/temperature", true); xhttp.send(); }, 10000 ) ; setInterval(function ( ) { var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() { if (this.readyState == 4 && this.status == 200) { document.getElementById("humidity").innerHTML = this.responseText; } }; xhttp.open("GET", "/humidity", true); xhttp.send(); }, 10000 ) ; </script> </html>)rawliteral"; // Replaces placeholder with DHT values String processor(const String& var){ //Serial.println(var); if(var == "TEMPERATURE"){ return String(t); } else if(var == "HUMIDITY"){ return String(h); } return String(); } void setup(){ // Serial port for debugging purposes Serial.begin(115200); dht.begin(); Serial.print("Setting AP (Access Point)…"); // Remove the password parameter, if you want the AP (Access Point) to be open WiFi.softAP(ssid, password); IPAddress IP = WiFi.softAPIP(); Serial.print("AP IP address: "); Serial.println(IP); // Print ESP8266 Local IP Address Serial.println(WiFi.localIP()); // Route for root / web page server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){ request->send_P(200, "text/html", index_html, processor); }); server.on("/temperature", HTTP_GET, [](AsyncWebServerRequest *request){ request->send_P(200, "text/plain", String(t).c_str()); }); server.on("/humidity", HTTP_GET, [](AsyncWebServerRequest *request){ request->send_P(200, "text/plain", String(h).c_str()); }); // Start server server.begin(); } void loop(){ unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { // save the last time you updated the DHT values previousMillis = currentMillis; // Read temperature as Celsius (the default) float newT = dht.readTemperature(); // Read temperature as Fahrenheit (isFahrenheit = true) //float newT = dht.readTemperature(true); // if temperature read failed, don't change t value if (isnan(newT)) { Serial.println("Failed to read from DHT sensor!"); } else { t = newT; Serial.println(t); } // Read Humidity float newH = dht.readHumidity(); // if humidity read failed, don't change h value if (isnan(newH)) { Serial.println("Failed to read from DHT sensor!"); } else { h = newH; Serial.println(h); } } } |
Настройте SSID и пароль
Вам необходимо определить имя SSID и пароль для доступа к ESP8266. В этом примере мы устанавливаем имя SSID ESP8266 на ESP8266-Access-Point, но вы можете изменить имя на любое другое, которое вы хотите. Пароль -123456789, но вы также можете его изменить.
Настройка ESP8266 в качестве точки доступа (AP)
В функции setup() мы настраиваем ESP8266 как точку доступа с помощью метода softAP().
1 |
WiFi.softAP(ssid, password); |
Существуют также другие необязательные параметры, которые вы можете передать методу softAP(). Вот все его параметры:
1 |
.softAP(const char* ssid, const char* password, int channel, int ssid_hidden, int max_connection) |
- ssid (определено ранее): максимум 31 символ.
- password (пароль, определено ранее): минимум 8 символов. Если не указано, точка доступа будет открыта (максимум 63 символа).
- channel (канал): Номер канала Wi-Fi (1-13). По умолчанию 1.
- ssid_hidden (скрытый ssid): если установлено значение true, SSID будет скрыт.
- max_connection: максимальное количество одновременно подключенных станций - от 0 до 8.
Далее получите IP-адрес точки доступа с помощью метода softAPIP() и распечатайте его в последовательном мониторе.
1 2 3 |
IPAddress IP = WiFi.softAPIP(); Serial.print("AP IP address: "); Serial.println(IP); |
Примечание: по умолчанию IP-адрес точки доступа — 192.168.4.1.
Это фрагменты кода, которые необходимо включить в скетч веб-сервера, чтобы настроить ESP8266 в качестве программной точки доступа.
Необходимые компоненты
- NodeMCU ESP8266 (купить на AliExpress).
- Датчик температуры и влажности DHT11/DHT22 (купить на AliExpress).
- Резистор 4,7 кОм (купить на AliExpress).
- Макетная плата.
- Соединительные провода.
Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158
Схема проекта
Схема проекта для демонстрации использования ESP8266 NodeMCU в качестве точки доступа (AP) представлена на следующем рисунке.
Подключение к точке доступа ESP8266
Запустив скетч на ESP8266, откройте на смартфоне настройки Wi-Fi и выберите сеть ESP8266-Access-Point:
Введите пароль, который вы определили ранее.
Откройте веб-браузер и введите IP-адрес http://192.168.4.1. Должна загрузиться страница веб-сервера:
Этот веб-сервер отображает два значка рядом с температурой и влажностью. Эти значки загружаются с веб-сайта Font Awesome. Однако, поскольку ESP8266 действует как мягкая/программная (soft) точка доступа (он не подключен к Интернету), мы не можем загрузить эти значки.
Подведение итогов
В этом уроке вы узнали, как настроить ESP8266 в качестве программной точки доступа. Это позволяет вам подключаться к веб-серверу ESP8266 напрямую через Wi-Fi без необходимости подключения к маршрутизатору.
Однако следует отметить, что ESP8266 не подключен к Интернету, поэтому вы не можете отправлять HTTP-запросы другим службам для публикации данных датчиков или получения данных из Интернета (например, для загрузки значков).
109 просмотров