Network Configuration¶
Functions below provide IP and MAC address of ESP8266’s soft-AP.
softAPIP¶
Return IP address of the soft access point’s network interface.
WiFi.softAPIP()
Returned value is of
IPAddress
type.
Example code:
Serial.print(“Soft-AP IP address = “); Serial.println(WiFi.softAPIP());
Example output:
Soft-AP IP address = 192.168.4.1
softAPmacAddress¶
Return MAC address of soft access point. This function comes in two versions, which differ in type of returned values. First returns a pointer, the second a
String
.
Pointer to MAC¶
WiFi.softAPmacAddress(mac)
Function accepts one parameter
mac
that is a pointer to memory location (an
uint8_t
array the size of 6 elements) to save the mac address. The same pointer value is returned by the function itself.
Example code:
uint8_t macAddr[6]; WiFi.softAPmacAddress(macAddr); Serial.printf(“MAC address = %02x:%02x:%02x:%02x:%02x:%02x\n”, macAddr[0], macAddr[1], macAddr[2], macAddr[3], macAddr[4], macAddr[5]);
Example output:
MAC address = 5e:cf:7f:8b:10:13
MAC as a String¶
Optionally you can use function without any parameters that returns a
String
type value.
WiFi.softAPmacAddress()
Example code:
Serial.printf(“MAC address = %s\n”, WiFi.softAPmacAddress().c_str());
Example output:
MAC address = 5E:CF:7F:8B:10:13
For code samples please refer to separate section with examples dedicated specifically to the Soft Access Point Class.
Với việc bổ sung trình quản lý WiFi với thư viện ESPAsyncWebServer, chúng tôi không còn phải cung cấp riêng SSID và mật khẩu của mạng cục bộ trong bản phác thảo Arduino của chúng tôi. Không cần mã hóa cứng. Chúng tôi sẽ có thể tự động kết nối qua các mạng khác (Điểm truy cập) với bảng ESP8266 của mình mà không gặp bất kỳ rắc rối nào khi nhập thủ công thông tin đăng nhập mạng mỗi lần. Nhiều kết nối SSID, cũng như các biến tùy chỉnh bổ sung, cũng có thể được thực hiện thông qua điều này.
Ban đầu, ESP8266 của chúng tôi sẽ được thiết lập làm Điểm truy cập khi khởi động. Điều này là do bảng ESP8266 bắt đầu bằng việc đọc các tệp ssid.txt, pass.txt và ip.txt. Những thứ này sẽ trống rỗng vào lúc này.
Tiếp theo, để kết nối với bo mạch ESP8266 hoạt động như một AP, chúng tôi sẽ kết nối với “ESP8266-WiFi-Manager” trên điện thoại thông minh của mình. Tại thời điểm này, điểm truy cập sẽ được đặt.
Chúng tôi sẽ đi đến địa chỉ IP 192.168.4.1. Trang web trình quản lý WiFi ESP8266 sẽ mở ra. Ở đây chúng tôi sẽ cung cấp SSID, mật khẩu và địa chỉ IP có sẵn để kết nối. Chúng sẽ được lưu trong các tệp tương ứng của chúng: ssid.txt, pass.txt và ip.txt. Các cài đặt này sẽ được định cấu hình khi chúng tôi nhấn nút ‘Gửi’.
Các thông tin đăng nhập mạng này của mạng mà chúng tôi đã chọn, sẽ được lưu trong ESP8266 của chúng tôi.
ESP8266 sẽ khởi động lại và bây giờ sẽ có thể kết nối với mạng chúng tôi đã chọn vì các tệp hiện chứa các tham số cần thiết để kết nối với chế độ trạm. Trong giai đoạn này, bảng ESP8266 hiện hoạt động ở chế độ Trạm.
Bây giờ chúng ta sẽ nhập địa chỉ IP mà chúng ta vừa đặt trong một trang web mới và Máy chủ web Đầu ra GPIO Kiểm soát ESP8266 sẽ mở ra. Điều này sẽ cho phép chúng tôi điều khiển đèn LED trên bo mạch của bảng ESP8266 bằng cách nhấp vào hai nút BẬT và TẮT.
Tuy nhiên, nếu kết nối không được thiết lập thành công, thì bo mạch ESP8266 lại chuyển sang chế độ AP và người dùng sẽ phải nhập lại các tham số mạng trên trang web ESP8266 WiFi Manager được truy cập tại địa chỉ IP 192.168.4.1.
Trình quản lý WiFi này có thể được thiết lập với bất kỳ dự án máy chủ Web ESP8266 có liên quan nào mà chúng tôi đã tạo. Vì mục đích đơn giản, chúng tôi đã chọn một máy chủ web kiểm soát một đầu ra GPIO duy nhất.
Để theo dõi dự án máy chủ web trình quản lý WiFi dựa trên LittleFS này, hãy đảm bảo rằng bạn đã cài đặt phiên bản Arduino IDE mới nhất và tiện ích bổ sung ESP8266 trên Arduino IDE của mình. Nếu bạn chưa cài đặt nó trước khi bạn có thể làm theo hướng dẫn này:
Ngoài ra, bạn sẽ phải tải xuống và cài đặt Plugin tải lên hệ thống tệp ESP8266 NodeMCU trong Arduino IDE của mình để bạn có thể tải lên các tệp LittleFS trên bảng NodeMCU ESP8266 của mình. Nếu chưa, bạn có thể làm theo hướng dẫn sau:
Chúng tôi sẽ cần hai thư viện bổ sung để xây dựng máy chủ web của chúng tôi. Thư viện ESPAsyncWebServer sẽ giúp chúng tôi tạo máy chủ web của mình một cách dễ dàng. Với thư viện này, chúng tôi sẽ thiết lập một máy chủ HTTP không đồng bộ. ESPAsyncTCP là một thư viện khác mà chúng tôi sẽ kết hợp vì nó là một phụ thuộc cho thư viện ESPAsyncWebServer. Cả hai thư viện này đều không có sẵn trong trình quản lý thư viện Arduino, vì vậy chúng tôi sẽ phải tự tải xuống và tải chúng trong bảng NodeMCU ESP8266 của mình.
Để cài đặt miễn phí thư viện ESPAsyncWebServer Bạn sẽ tải xuống thư viện dưới dạng thư mục .zip mà bạn sẽ giải nén và đổi tên thành ‘ESPAsyncWebServer.’ Sau đó, chuyển thư mục này vào thư mục thư viện cài đặt trong Arduino IDE của bạn.
Để cài đặt thư viện ESPAsyncTCP miễn phí. Bạn sẽ tải xuống thư viện dưới dạng thư mục .zip mà bạn sẽ giải nén và đổi tên thành ‘ESPAsyncTCP.’ Sau đó, chuyển thư mục này vào thư mục thư viện cài đặt trong Arduino IDE của bạn.
Tương tự như vậy, bạn cũng có thể vào Sketch > Include Library > Add .zip Library bên trong IDE để thêm các thư viện. Sau khi cài đặt các thư viện, hãy khởi động lại IDE của bạn.
Để xây dựng máy chủ web trình quản lý WiFi ESP8266 của chúng tôi bằng LittleFS, chúng tôi sẽ tạo bốn tệp khác nhau: hai tệp HTML (chỉ mục.html cho trang web sẽ kiểm soát đèn LED và wifimanager tích hợp.html cho trang web trình quản lý WiFi khi ESP8266 của chúng tôi sẽ ở chế độ AP), bản phác thảo CSS và Arduino và sắp xếp chúng trong một thư mục dự án như hình dưới đây:
Lưu ý: Bạn nên đặt các tệp HTML và CSS bên trong thư mục dữ liệu. Nếu không, thư viện LittleFS sẽ không thể đọc các tệp này.
Như đã đề cập trước khi dự án của chúng tôi bao gồm hai tệp HTML: index.html và wifimanager.html. Một người sẽ chịu trách nhiệm xây dựng máy chủ web ESP8266 điều khiển đèn LED tích hợp và người kia sẽ chịu trách nhiệm xây dựng trang web trình quản lý WiFi.
Bên trong tệp chỉ mục.html của chúng tôi, chúng tôi sẽ bao gồm tiêu đề, một đoạn văn cho trạng thái GPIO và hai nút bật / tắt.
Bây giờ, hãy tạo một tệp chỉ mục.html và sao chép mã được cung cấp bên dưới trong tệp đó.
ESP8266 WEB SERVER
integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">
Các phiên bản phổ biến của ESP8266 trên thị trường
Board | Mua hàng |
ESP-01 | Shopee |
ESP-12E | Shopee |
ESP8266 NodeMCU | Shopee |
Wemos D1 Mini | Shopee |
NodeMCU ESP32 | Shopee |
ESP8266 WIFI ESP-01
ESP8266 ESP-01 là một module IoT được thiết kế dựa trên vi điều khiển ESP8266 của công ty Espressif Systems. Đây là phiên bản module nhỏ gọn nhất trong các phiên bản của ESP8266 với kích thước chỉ 24mm x 14mm.
ESP-01 có tích hợp sẵn một bộ phát WiFi, đủ để kết nối với mạng internet và truyền dữ liệu. Module này còn được tích hợp một cổng giao tiếp chuẩn UART, cho phép truyền dữ liệu giữa ESP8266 và các thiết bị khác như Arduino, Raspberry Pi, hoặc máy tính thông qua cổng COM. ESP8266 01 cũng có khả năng lập trình và nạp firmware thông qua cổng UART, giúp cho việc phát triển ứng dụng IoT trở nên đơn giản hơn.
Thông số kỹ thuật của Module Wifi ESP8266 ESP-01:
- Chip Wi-Fi: ESP8266EX
- Nguồn cấp: 3.0V ~ 3.6V DC
-
Tiêu thụ dòng điện:
- Chế độ hoạt động: 80mA ~ 170mA
- Chế độ chờ: < 1.0mA
- Chuẩn giao tiếp: Wi-Fi 802.11 b/g/n
- Tốc độ truyền dữ liệu: 110 ~ 460800bps (tùy chọn)
- Điện áp: 3.3V DC
- Kích thước: 24mm x 14mm x 3mm
- Anten: PCB Anten hoặc IPEX anten ngoài (tùy chọn)
Sơ đồ chân ESP8266 ESP-01
ESP8266 WIFI ESP-12E
ESP-12E là một trong những phiên bản nâng cấp của ESP8266, có tích hợp thêm bộ khuếch đại công suất (PA) và bộ lọc tín hiệu RF (LNA), giúp tăng cường khả năng thu phát sóng Wi-Fi. Ngoài ra, ESP-12E còn tích hợp nhiều chân IO (Input/Output) và hỗ trợ giao tiếp SPI, I2C, UART, ADC, PWM và các tính năng GPIO. Với các tính năng này, ESP8266 12E rất phổ biến trong các ứng dụng IoT và các dự án điện tử thông minh.
Thông số kỹ thuật của Module Wifi ESP-12E
- SoC: ESP8266EX
- CPU: Tensilica L106 32-bit RISC
- Tần số hoạt động: 80 MHz
- Điện áp hoạt động: 3.0 – 3.6 V
- Flash: 4 MB
- SRAM: 80 KB
- WiFi: 802.11 b/g/n 2.4 GHz, hỗ trợ WPA/WPA2
- Anten: PCB anten tích hợp
- GPIO: 16 GPIO được gán số, hỗ trợ chức năng GPIO, PWM, I2C, SPI, ADC
- Kích thước: 24.8 x 14.3 x 3mm
Sơ đồ chân Module Wifi ESP8266-12E
ESP8266 WIFI NodeMCU
ESP8266 NodeMCU là một nền tảng IoT mã nguồn mở, được phát triển bởi một nhóm kỹ sư tại Trung Quốc. Nền tảng này được xây dựng trên ESP8266, một vi điều khiển Wi-Fi SoC (System on a Chip) được sản xuất bởi Espressif Systems. NodeMCU cung cấp một bộ SDK để lập trình cho ESP8266 bằng ngôn ngữ Lua hoặc C++. Với các tính năng như Wi-Fi, GPIO, ADC, I2C, SPI, PWM và một số tính năng khác, NodeMCU ESP 8266 được sử dụng rộng rãi trong các ứng dụng IoT như kiểm soát thiết bị, thu thập dữ liệu và giao tiếp với các thiết bị khác.
Thông số kỹ thuật của NodeMCU
- Microcontroller: ESP8266EX
- Điện áp hoạt động: 3.3V DC
- Số chân I/O: 17 chân GPIO
- Kết nối mạng: WiFi 802.11 b/g/n
- Giao diện mạng: TCP/IP
- Đồng hồ thời gian thực (RTC): không tích hợp
- Bộ nhớ trong: 4MB
- RAM: 80KB
- Cổng nạp: Micro-USB
- Hỗ trợ các giao thức: MQTT, CoAP, HTTP/HTTPS
- Kích thước: 49 x 24.5 x 13mm
Sơ đồ chân ESP8266 NodeMCU
Xem ngay: Sơ đồ chân ESP8266 NodeMCU
Wemos D1 Mini
Wemos D1 Mini là một board phát triển IoT nhỏ gọn, dựa trên module wifi ESP8266EX. Nó được thiết kế để dễ dàng sử dụng và lập trình thông qua cổng micro USB và trình biên dịch Arduino IDE. Wemos D1 Mini có đầy đủ các tính năng cần thiết cho các ứng dụng IoT, bao gồm kết nối wifi, GPIO, ADC, SPI, I2C…, và rất thích hợp cho các dự án DIY IoT.
Thông số kỹ thuật của Wemos D1 Mini:
- MCU: ESP8266EX
- Kích thước: 34.2mm x 25.6mm
- Điện áp hoạt động: 3.3V
- Pin đầu vào tối đa: 3.3V
- Điện áp USB: 5V DC
- Pin đầu ra tối đa: 3.3V/1A
- GPIO: 11 GPIO (đều hỗ trợ PWM, I2C, 1-Wire)
- ADC: 1 (10 bit)
- Tốc độ xung nhịp: 80MHz/160MHz
- Bộ nhớ trong: 4MB
- Wi-Fi: IEEE 802.11 b/g/n
- Kết nối USB: Micro-USB
- Hỗ trợ OTA (Over The Air) để nạp chương trình không cần dây cáp.
Sơ đồ chân Wemos D1 Mini
NodeMCU ESP32
NodeMCU ESP32 là một module IoT (Internet of Things) với khả năng kết nối Wi-Fi và Bluetooth. Nó là phiên bản nâng cấp của ESP8266 với nhiều tính năng mới và cải tiến, bao gồm hai nhân xử lý Tensilica Xtensa LX6, bộ nhớ Flash lên đến 4MB, RAM lên đến 520KB, tốc độ xử lý lên đến 240 MHz và hỗ trợ nhiều giao tiếp như SPI, I2C, UART, CAN và Ethernet. ESP32 được sử dụng rộng rãi trong các ứng dụng IoT, bao gồm điều khiển thiết bị, cảm biến, hệ thống đo lường và giám sát.
Thông số kỹ thuật của NodeMCU ESP32:
- Vi xử lý: Tensilica Xtensa LX6, hai nhân, lên đến 240 MHz
- Bộ nhớ trong: 520 KB SRAM
- Bộ nhớ ngoài: 4MB Flash Memory
- Wi-Fi: 802.11 b/g/n/e/i (2,4 GHz)
- Bluetooth: v4.2 BR/EDR và BLE
- GPIO: 36
- UART, SPI, I2C, I2S, DAC, ADC, PWM, GPIO
- Cổng kết nối: micro USB
- Nguồn điện: 2.2V – 3.6V DC
- Kích thước: 18 x 25.5 mm
Sơ đồ chân của NodeMCU ESP32
Connecting to the ESP8266 Access Point
Having the ESP8266 running the sketch, in your smartphone open your Wi-Fi settings and tap the ESP8266-Access-Point network:
Enter the password you’ve defined earlier.
Open your web browser and type the IP address http://192.168.4.1. The web server page should load:
The web server page is a bit different from the original web server. That web server displays two icons next to the temperature and humidity. Those icons are loaded from the Font Awesome website. However, because the ESP8266 acts a soft access point (it is not connected to the internet) we cannot load those icons.
Wrapping Up
In this tutorial you’ve learned how to set the ESP8266 as a soft access point. This allows you to connect to the ESP8266 web server directly via Wi-Fi without the need to connect to a router.
However, note that the ESP8266 is not connected to the internet, so you can’t make HTTP requests to other services to publish sensor data or to get data from the internet (like loading the icons).
You may also like reading:
- ESP8266 Web Server Control Outputs
- ESP8266 Web Server using SPIFFS (SPI Flash File System) – NodeMCU
- Visualize Your Sensor Readings from Anywhere in the World (ESP32/ESP8266 + MySQL + PHP)
- Home Automation using ESP8266 (course)
Thanks for reading.
Soft Access Point¶
Example below presents how to configure ESP8266 to run in soft access point mode so Wi-Fi stations can connect to it. The Wi-Fi network established by the soft-AP will be identified with the SSID set during configuration. The network may be protected with a password. The network may be also open, if no password is set during configuration.
Table of Contents¶
Code
To configure the ESP8266 NodeMCU as an access point, we will use the SoftAp class included in the ESP8266WiFi.h library. To configure a Wifi access point you just have to give it a name
WiFi.softAP(ssid)
Other parameters, such as the password or the number of connection limits can be defined.
- ssid network identifier (max. 31 characters)
- password network password (max. 63 characters) (Optional).
- Network channel between 1 and 13. Default value 1 (Optional).
- hidden hides the SSID if true (Optional).
- max_connection number of simultaneous connections allowed from 0 to 8. Default value 4. (Optional).
#include
const char *ssid = "AC-ESP8266"; const char *password = "987654321"; IPAddress local_IP(192,168,4,22); IPAddress gateway(192,168,4,9); IPAddress subnet(255,255,255,0); void setup() { Serial.begin(115200); Serial.println(); Serial.print("Setting soft-AP configuration ... "); Serial.println(WiFi.softAPConfig(local_IP, gateway, subnet) ? "Ready" : "Failed!"); Serial.print("Setting soft-AP ... "); Serial.println(WiFi.softAP(ssid,password) ? "Ready" : "Failed!"); //WiFi.softAP(ssid); //WiFi.softAP(ssid, password, channel, hidden, max_connection) Serial.print("Soft-AP IP address = "); Serial.println(WiFi.softAPIP()); } void loop() { Serial.print("[Server Connected] "); Serial.println(WiFi.softAPIP()); delay(500); }
Note: If the assigned password is shorter than 8 characters, the SSID will be ignored. If you want to change the SSID, make sure the password is longer than 8 characters or there is no password.
If you do not call the softApConfig function to set the IP addresses, the network will use default addresses.
Can we Make it Simpler?¶
Can we make this sketch even simpler? Yes, we can! We can do it by using alternate
if - else
statement as below:
WiFi.softAP("ESPsoftAP_01", "pass-to-soft-AP") ? "Ready" : "Failed!"
Such statement will return either
Ready
or
Failed!
depending on result of
WiFi.softAP(...)
. This way we can considerably shorten our sketch without any changes to functionality:
#include
void setup() { Serial.begin(115200); Serial.println(); Serial.print("Setting soft-AP ... "); Serial.println(WiFi.softAP("ESPsoftAP_01", "pass-to-soft-AP") ? "Ready" : "Failed!"); } void loop() { Serial.printf("Stations connected = %d\n", WiFi.softAPgetStationNum()); delay(3000); }
I believe this is very neat piece of code. If
? :
conditional operator is new to you, I recommend to start using it and make your code shorter and more elegant.
Manage Network¶
Once soft-AP is established you may check the number of stations connected, or shut it down, using the following functions.
softAPgetStationNum¶
Get the count of the stations that are connected to the soft-AP interface.
WiFi.softAPgetStationNum()
Example code:
Serial.printf("Stations connected to soft-AP = %d\n", WiFi.softAPgetStationNum());
Example output:
Stations connected to soft-AP = 2
Note: the maximum number of stations that may be connected to ESP8266 soft-AP is 4 by default. This can be changed from 0 to 8 via the
max_connection
argument of the softAP method.
softAPdisconnect¶
Disconnect stations from the network established by the soft-AP.
WiFi.softAPdisconnect(wifioff)
Function will set currently configured SSID and pre-shared key of the soft-AP to null values. The parameter
wifioff
is optional. If set to
true
it will switch the soft-AP mode off.
Function will return
true
if operation was successful or
false
if otherwise.
Kết luận
Như vậy, thông qua bài viết trên, các bạn đã hiểu rõ hơn ESP8266 là gì? và esp8266 dùng để làm gì? – nó một module esp8266 mạnh mẽ và được sử dụng rộng rãi trong các ứng dụng IoT. Bên cạnh đó, chúng ta cũng đã được hướng dẫn chi tiết về cách lập trình ESP8266 bằng Arduino IDE, từ cách cài đặt thư viện, đến cách kết nối và nạp code esp8266 nodemcu. Hy vọng những thông tin này sẽ giúp các bạn có thể bắt đầu tìm hiểu và sử dụng ESP8266 cho các dự án của mình một cách dễ dàng và hiệu quả.
Soft Access Point Class¶
Section below is ESP8266 specific as Arduino WiFi library documentation does not cover soft access point. The API description is broken down into three short chapters. They cover how to setup soft-AP, manage connection, and obtain information on soft-AP interface configuration.
Table of Contents¶
Set up Network¶
This section describes functions to set up and configure ESP8266 in the soft access point (soft-AP) mode.
softAP¶
Set up a soft access point to establish a Wi-Fi network.
The simplest version (an overload in C++ terms) of this function requires only one parameter and is used to set up an open Wi-Fi network.
WiFi.softAP(ssid)
To set up pre-shared key protected network, or to configure additional network parameters, use the following overload:
WiFi.softAP(ssid, psk, channel, hidden, max_connection)
The first parameter of this function is required, remaining four are optional.
Meaning of all parameters is as follows:
-
ssid
- character string containing network SSID (max. 32 characters) -
psk
- optional character string with a pre-shared key. For WPA2-PSK network it should be minimum 8 characters long and not longer than 64 characters. If not specified, the access point will be open for anybody to connect. -
channel
- optional parameter to set Wi-Fi channel, from 1 to 13. Default channel = 1. -
hidden
- optional parameter, if set to
true
will hide SSID. -
max_connection
- optional parameter to set max simultaneous connected stations, from 0 to 8. Defaults to 4. Once the max number has been reached, any other station that wants to connect will be forced to wait until an already connected station disconnects.
Function will return
true
or
false
depending on result of setting the soft-AP.
Notes:
-
The network established by softAP will have default IP address of 192.168.4.1. This address may be changed using
softAPConfig
(see below). -
Even though ESP8266 can operate in soft-AP + station mode, it actually has only one hardware channel. Therefore in soft-AP + station mode, the soft-AP channel will default to the number used by station. For more information how this may affect operation of stations connected to ESP8266’s soft-AP, please check this FAQ entry on Espressif forum.
softAPConfig¶
Configure the soft access point’s network interface.
softAPConfig (local_ip, gateway, subnet)
All parameters are the type of
IPAddress
and defined as follows:
-
local_ip
- IP address of the soft access point -
gateway
- gateway IP address -
subnet
- subnet mask
Function will return
true
or
false
depending on result of changing the configuration.
Example code:
#include
IPAddress local_IP(192,168,4,22); IPAddress gateway(192,168,4,9); IPAddress subnet(255,255,255,0); void setup() { Serial.begin(115200); Serial.println(); Serial.print("Setting soft-AP configuration ... "); Serial.println(WiFi.softAPConfig(local_IP, gateway, subnet) ? "Ready" : "Failed!"); Serial.print("Setting soft-AP ... "); Serial.println(WiFi.softAP("ESPsoftAP_01") ? "Ready" : "Failed!"); Serial.print("Soft-AP IP address = "); Serial.println(WiFi.softAPIP()); } void loop() {}
Example output:
Setting soft-AP configuration ... Ready Setting soft-AP ... Ready Soft-AP IP address = 192.168.4.22
ESP8266 Station and Access Point
In most of our ESP8266 NodeMCU web server projects, we connect the ESP8266 to a wireless router. In this configuration, we can access the ESP8266 through the local network.
In this scenario, the router acts as an access point and the ESP8266 is set as a station. So, you need to be connected to your router (local network) to control the ESP8266.
In some cases, this might not be the best configuration (when you don’t have a router nearby). But if you set the ESP8266 as an access point (hotspot), you can be connected to the ESP8266 using any device with Wi-Fi capabilities without the need to connect to your router.
In simple words, when you set the ESP8266 as an access point you create its own Wi‑Fi network and nearby Wi-Fi devices (stations) can connect to it (like your smartphone or your computer).
In this tutorial, we’ll show you how to set the ESP8266 as an access point in your web server projects. This way, you don’t need to be connected to a router to control your ESP8266.
Because the ESP8266 doesn’t connect further to a wired network (like your router), it is called soft-AP (soft Access Point).
This means that if you try to load libraries or use firmware from the internet, it will not work. It also doesn’t work if you try to make HTTP requests to services on the internet like publishing sensor readings to the cloud.
ESP8266 WEB SERVER
GPIO2
GPIO state:
%GPIO_STATE%
Trang web trình quản lý WiFi bao gồm một máy chủ web không đồng bộ cho phép chúng tôi nhập các loại dữ liệu của ‘chuỗi’ thông qua các trường đầu vào. Bên trong trang web, sẽ có tiêu đề ‘Trình quản lý WiFi ESP8266’. Bên dưới nó, sẽ có ba trường đầu vào để người dùng nhập và lưu các giá trị và nút ‘Gửi’. Trường đầu vào đầu tiên sẽ lấy tên SSID, trường nhập thứ hai sẽ lấy mật khẩu và trường thứ ba sẽ lấy địa chỉ IP. Sau khi bạn nhấp vào nút gửi, các giá trị tương ứng sẽ được lưu trong các biến mà chúng tôi sẽ xác định trong mã chương trình Arduino.
ESP8266 Wi-Fi Manager
ESP8266 Wi-Fi Manager
Bên dưới tiêu đề, chúng tôi sẽ thêm các đầu vào của người dùng cần được điền. Đây sẽ là loại ‘hình thức.’ Chúng tôi sẽ định nghĩa hành động của nó là “/ POST” có nghĩa là một yêu cầu HTTP POST sẽ được gửi khi người dùng nhập các trường và nhấn nút gửi. Vì chúng tôi đang hiển thị ba trường đầu vào trên trang web của mình, do đó, chúng tôi sẽ xác định các nhãn và id riêng biệt cho chúng. Hộp nhập liệu đầu tiên lưu giá trị cho “ssid” và thuộc loại văn bản. Hộp nhập liệu thứ hai lưu giá trị cho “pass” và cũng thuộc loại văn bản. Cuối cùng, hộp nhập liệu thứ ba lưu giá trị cho “ip” và cũng là loại văn bản.
Về cơ bản, chúng tôi có ba trường đầu vào, mỗi loại văn bản cập nhật các biến tương ứng của chúng bất cứ khi nào một giá trị hợp lệ được nhập vào hộp và nút gửi được nhấn.
Chúng tôi có một bài viết chuyên dụng, nơi chúng tôi đã thảo luận sâu về cách xây dựng một trang web với các trường đầu vào. Bạn có thể tham khảo bài viết từ đây
Tiếp theo, tạo một tệp khác “kiểu.css” trong cùng thư mục với các tệp HTML và sao chép mã được cung cấp bên dưới trong tệp đó.
html {
font-family: Arial, Helvetica, sans-serif;
display: inline-block;
text-align: center;
h1 {
font-size: 1.8rem;
color: #070812;
p {
font-size: 1.4rem;
body {
margin: 0;
.content {
padding: 5%;
.card-grid {
max-width: 800px;
margin: 0 auto;
display: grid;
grid-gap: 2rem;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
.card {
background-color: white;
box-shadow: 2px 2px 12px 1px rgba(140,140,140,.5);
input[type=submit] {
border: none;
color: #FEFCFB;
background-color: #fa0505;
padding: 15px 15px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 16px;
width: 100px;
margin-right: 10px;
border-radius: 4px;
transition-duration: 0.4s;
input[type=text], input[type=number], select {
width: 50%;
padding: 12px 20px;
margin: 18px;
display: inline-block;
border: 1px solid #ccc;
border-radius: 4px;
box-sizing: border-box;
label {
font-size: 1.2rem;
.value{
font-size: 1.2rem;
color: #1282A2;
.button {
display: inline-block;
background-color: #b30000; //red color
border: none;
border-radius: 4px;
color: white;
padding: 16px 40px;
text-decoration: none;
font-size: 30px;
margin: 2px;
cursor: pointer;
.button2 {
background-color: #364cf4; //blue color
Bên trong tệp CSS của chúng tôi sẽ được sử dụng để cung cấp các kiểu cho trang web của chúng tôi, chúng tôi sẽ chỉ định các loại phông chữ, kích thước và màu sắc của các tiêu đề, đoạn văn và các nút. Chúng tôi sẽ đặt văn bản hiển thị thành loại phông chữ Arial và căn chỉnh nó ở giữa trang web.
Để hiểu thêm về kiểu dáng CSS, hãy tham khảo các bài viết trước đây của chúng tôi về Máy chủ web ESP.
Arduino Sketch ESP8266 Trình quản lý WiFi Máy chủ Web
Cuối cùng, chúng tôi sẽ tạo một tệp mới và lưu nó dưới dạng ESP_Wi-Fi_Manager_Web_Server. Sao chép mã được cung cấp bên dưới trong tệp đó.
#include
#include
#include
#include
#include "LittleFS.h"
AsyncWebServer server(80);
const char* input_parameter1 = "ssid";
const char* input_parameter2 = "pass";
const char* input_parameter3 = "ip";
//Variables to save values from HTML form
String ssid;
String pass;
String ip;
// File paths to save input values permanently
const char* SSID_path = "/ssid.txt";
const char* Password_path = "/pass.txt";
const char* IP_path = "/ip.txt";
boolean restart = false;
IPAddress localIP;
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 0, 0);
unsigned long previous_time = 0;
const long Delay = 10000;
const int ledPin = 2;
String ledState;
// Read File from LittleFS
String readFile(fs::FS &fs, const char * path){
Serial.printf("Reading file: %s\r\n", path);
File file = fs.open(path,"r");
if(!file || file.isDirectory()){
Serial.println("- failed to open file for reading");
return String();
String fileContent;
while(file.available()){
fileContent = file.readStringUntil('\n');
break;
file.close();
return fileContent;
// Write file to LittleFS
void writeFile(fs::FS &fs, const char * path, const char * message){
Serial.printf("Writing file: %s\r\n", path);
File file = fs.open(path,"w");
if(!file){
Serial.println("- failed to open file for writing");
return;
if(file.print(message)){
Serial.println("- file written");
} else {
Serial.println("- frite failed");
// Initialize WiFi
bool initialize_Wifi() {
if(ssid=="" || ip==""){
Serial.println("Undefined SSID or IP address.");
return false;
WiFi.mode(WIFI_STA);
localIP.fromString(ip.c_str());
if (!WiFi.config(localIP, gateway, subnet)){
Serial.println("STA Failed to configure");
return false;
WiFi.begin(ssid.c_str(), pass.c_str());
Serial.println("Connecting to WiFi...");
delay(20000);
if(WiFi.status() != WL_CONNECTED) {
Serial.println("Failed to connect.");
return false;
Serial.println(WiFi.localIP());
return true;
// Replaces placeholder with LED state value
String processor(const String& var) {
if(var == "GPIO_STATE") {
if(digitalRead(ledPin)) {
ledState = "OFF";
else {
ledState = "ON";
return ledState;
return String();
void setup() {
Serial.begin(115200);
if (!LittleFS.begin()) {
Serial.println("An error has occurred while mounting LittleFS");
else{
Serial.println("LittleFS mounted successfully");
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, HIGH); // Initially ESP8266 onboard LED OFF
ssid = readFile(LittleFS, SSID_path);
pass = readFile(LittleFS, Password_path);
ip = readFile(LittleFS, IP_path);
Serial.println(ssid);
Serial.println(pass);
Serial.println(ip);
if(initialize_Wifi()) {
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) {
request->send(LittleFS, "/index.html", "text/html", false, processor);
});
server.serveStatic("/", LittleFS, "/");
server.on("/led2on", HTTP_GET, [](AsyncWebServerRequest *request) {
digitalWrite(ledPin, LOW);
request->send(LittleFS, "/index.html", "text/html", false, processor);
});
server.on("/led2off", HTTP_GET, [](AsyncWebServerRequest *request) {
digitalWrite(ledPin, HIGH);
request->send(LittleFS, "/index.html", "text/html", false, processor);
});
server.begin();
else {
Serial.println("Setting Access Point");
WiFi.softAP("ESP8266-WIFI-MANAGER", NULL);
IPAddress IP = WiFi.softAPIP();
Serial.print("AP IP address: ");
Serial.println(IP);
// Web Server Root URL
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
request->send(LittleFS, "/wifimanager.html", "text/html");
});
server.serveStatic("/", LittleFS, "/");
server.on("/", HTTP_POST, [](AsyncWebServerRequest *request) {
int params = request->params();
for(int i=0;i
AsyncWebParameter* p = request->getParam(i);
if(p->isPost()){
// HTTP POST ssid value
if (p->name() == input_parameter1) {
ssid = p->value().c_str();
Serial.print("SSID set to: ");
Serial.println(ssid);
// Write file to save value
writeFile(LittleFS, SSID_path, ssid.c_str());
// HTTP POST pass value
if (p->name() == input_parameter2) {
pass = p->value().c_str();
Serial.print("Password set to: ");
Serial.println(pass);
// Write file to save value
writeFile(LittleFS, Password_path, pass.c_str());
// HTTP POST ip value
if (p->name() == input_parameter3) {
ip = p->value().c_str();
Serial.print("IP Address set to: ");
Serial.println(ip);
// Write file to save value
writeFile(LittleFS, IP_path, ip.c_str());
restart = true;
request->send(200, "text/plain", "Success. ESP8266 will now restart. Connect to your router and go to IP address: " + ip);
});
server.begin();
void loop() {
if (restart){
delay(5000);
ESP.restart();
Chúng tôi sẽ bắt đầu bằng cách bao gồm các thư viện có liên quan cần thiết cho dự án này. Vì chúng tôi phải kết nối ESP8266 của mình với mạng không dây, chúng tôi cần thư viện ESP8266WiFi.h cho mục đích đó. Các thư viện ESPAsyncWebServer và ESPAsyncTCP là những thư viện mà chúng tôi đã tải xuống gần đây và sẽ được yêu cầu xây dựng máy chủ web HTTP không đồng bộ. Ngoài ra, thư viện LittleFS sẽ cho phép chúng tôi truy cập hệ thống tệp bộ nhớ flash của lõi ESP8266 của chúng tôi.
#include
#include
#include
#include
#include "LittleFS.h"
Đối tượng AsyncWebServer sẽ được sử dụng để thiết lập máy chủ web ESP8266. Chúng ta sẽ truyền cổng HTTP mặc định là 80, làm đầu vào cho hàm xây dựng. Đây sẽ là cổng nơi máy chủ sẽ lắng nghe các yêu cầu HTTP đến.
AsyncWebServer server(80);
Bây giờ, chúng ta sẽ tạo ba biến toàn cục cho mỗi trường đầu vào. Chúng sẽ được sử dụng để theo dõi nếu nhận được yêu cầu HTTP POST từ các trường đầu vào. Nếu đúng như vậy thì các giá trị cập nhật mới sẽ được lưu trong mỗi biến tương ứng. Đầu tiên là input_parameter1 với giá trị ‘ssid’ được lưu. Biến thứ hai được input_parameter2 với giá trị ‘vượt qua’ được lưu. Cuối cùng, cái thứ ba được input_parameter3 với giá trị ‘ip’ được lưu. Các biến này sẽ được cập nhật bất cứ khi nào người dùng nhập giá trị vào trường nhập tương ứng và nhấn nút gửi trên máy chủ web trình quản lý WiFi.
const char* input_parameter1 = "ssid";
const char* input_parameter2 = "pass";
const char* input_parameter3 = "ip";
Tiếp theo, chúng tôi sẽ xác định ba biến chuỗi sẽ giữ các giá trị cho SSID, mật khẩu và địa chỉ IP do người dùng nhập vào biểu mẫu.
String ssid;
String pass;
String ip;
Ba biến toàn cục tiếp theo sẽ giữ đường dẫn cho các tệp .txt địa chỉ SSID, mật khẩu và địa chỉ IP trong hệ thống tệp ESP8266.
const char* SSID_path = "/ssid.txt";
const char* Password_path = "/pass.txt";
const char* IP_path = "/ip.txt";
Các dòng mã sau đây sẽ xác định cổng và địa chỉ IP mạng con.
IPAddress localIP;
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 0, 0);
Tiếp theo, xác định ledPin biến để đặt tên tượng trưng cho chân GPIO2 mà qua đó đèn LED trên bo mạch sẽ được kết nối. Biến ledState sẽ được sử dụng để lưu trữ trạng thái LED hiện tại sẽ được sử dụng sau này trong mã chương trình.
const int ledPin = 2;
String ledState;
Các hàm readFile() và writeFile() sau đây sẽ được sử dụng để đọc và ghi các tập tin vào LittleFS.
// Read File from LittleFS
String readFile(fs::FS &fs, const char * path){
Serial.printf("Reading file: %s\r\n", path);
File file = fs.open(path,"r");
if(!file || file.isDirectory()){
Serial.println("- failed to open file for reading");
return String();
String fileContent;
while(file.available()){
fileContent = file.readStringUntil('\n');
break;
file.close();
return fileContent;
// Write file to LittleFS
void writeFile(fs::FS &fs, const char * path, const char * message){
Serial.printf("Writing file: %s\r\n", path);
File file = fs.open(path,"w");
if(!file){
Serial.println("- failed to open file for writing");
return;
if(file.print(message)){
Serial.println("- file written");
} else {
Serial.println("- frite failed");
initialize_Wifi()
Chức năng sau sẽ khởi tạo WiFi. Nó sẽ thiết lập bảng ESP8266 ở chế độ trạm và kết nối bảng với thông tin đăng nhập mạng (ssid và pass) do người dùng nhập trên biểu mẫu. Điều này đạt được bằng cách sử dụng hàm WiFi.begin() và truyền ssid.c_str() và pass.c_str() làm tham số bên trong nó. Sau khi bo mạch ESP8266 kết nối thành công với các tham số mạng, địa chỉ IP sẽ được hiển thị trong màn hình Nối tiếp. Lưu ý rằng nó sẽ là cùng một địa chỉ IP mà người dùng sẽ nhập vào biểu mẫu. Hàm initialize_Wifi() sẽ cho biết mô-đun ESP8266 có thể kết nối thành công với mạng hay không.
// Initialize WiFi
bool initialize_Wifi() {
if(ssid=="" || ip==""){
Serial.println("Undefined SSID or IP address.");
return false;
WiFi.mode(WIFI_STA);
localIP.fromString(ip.c_str());
if (!WiFi.config(localIP, gateway, subnet)){
Serial.println("STA Failed to configure");
return false;
WiFi.begin(ssid.c_str(), pass.c_str());
Serial.println("Connecting to WiFi...");
delay(20000);
if(WiFi.status() != WL_CONNECTED) {
Serial.println("Failed to connect.");
return false;
Serial.println(WiFi.localIP());
return true;
Bên trong hàm processor(), chúng ta sẽ thay thế chỗ dành sẵn %GPIO_STATE% bằng trạng thái LED (1 hoặc 0). Một loạt các câu lệnh if-else sẽ kiểm tra xem trình giữ chỗ có thực sự là trình giữ chỗ mà chúng ta đã tạo trong tệp HTML của mình hay không. Nếu có, sau đó nó sẽ kiểm tra các ledPin biến đổi trong đó chỉ định GPIO2 kết nối với đèn LED trên tàu. Nếu trạng thái là 1 (CAO) thì biến ledState sẽ được lưu dưới dạng ‘TẮT’ nếu không nó sẽ được lưu dưới dạng ‘BẬT.’ Do đó, biến này sẽ được trả về và sẽ thay thế GPIO_STATE bằng giá trị ledState.
Lưu ý: Đối với ESP8266, đèn LED tích hợp hoạt động theo logic ngược lại so với ESP32. Để BẬT đèn LED trên bo mạch, một tín hiệu thấp sẽ được gửi đi và để TẮT nó, một tín hiệu cao sẽ được gửi đi. Điều này ngược lại trong trường hợp của ESP32.
// Replaces placeholder with LED state value
String processor(const String& var) {
if(var == "GPIO_STATE") {
if(digitalRead(ledPin)) {
ledState = "OFF";
else {
ledState = "ON";
return ledState;
return String();
Bên trong hàm setup(), chúng ta sẽ mở một kết nối nối tiếp với tốc độ truyền là 115200. Bằng cách sử dụng hàm pinMode (), ledPin sẽ được truyền dưới dạng tham số bên trong hàm sẽ được định cấu hình làm chân đầu ra.
Serial.begin(115200);
pinMode(ledPin, OUTPUT);
Những dòng mã này sẽ khởi tạo LittleFS.
if (!LittleFS.begin()) {
Serial.println("An error has occurred while mounting LittleFS");
else{
Serial.println("LittleFS mounted successfully");
Ngoài ra, hãy đặt trạng thái ledPin thành CAO để ban đầu đèn LED trên bo mạch sẽ TẮT.
digitalWrite(ledPin, HIGH); // Initially ESP8266 onboard LED OFF
SSID, mật khẩu và địa chỉ IP sẽ được đọc từ các tệp tương ứng của chúng trong LittleFS và được lưu trong chuỗi varaibles ‘ssid, “pass’ và ‘ip.’ Ngoài ra, ba tham số này cũng sẽ được in trong màn hình nối tiếp.
ssid = readFile(LittleFS, SSID_path);
pass = readFile(LittleFS, Password_path);
ip = readFile(LittleFS, IP_path);
Serial.println(ssid);
Serial.println(pass);
Serial.println(ip);
Nếu hàm initialize_Wifi() trả về đúng nghĩa là ESP8266 hiện đã được kết nối ở chế độ trạm thì chúng ta sẽ xử lý các yêu cầu http nhận được từ máy khách. Chúng tôi có thể định cấu hình Máy chủ web Async để lắng nghe các yêu cầu HTTP cụ thể dựa trên các tuyến được định cấu hình và thực thi chức năng cụ thể bất cứ khi nào nhận được yêu cầu HTTP trên tuyến đường đó.
Chúng ta sẽ sử dụng phương thức on() trên đối tượng server để lắng nghe các HTTP request đến và thực thi các hàm cho phù hợp.
Phương thức send() sử dụng để trả về phản hồi HTTP. File index.html sẽ gửi đến client, bất cứ khi nào server sẽ nhận được request trên URL “/”. Chúng ta sẽ thay thế chỗ dành sẵn bằng giá trị được lưu trong biến ledState vì chúng ta sẽ sử dụng processor làm đối số cuối cùng của hàm send().
Như bạn đã biết, khi người dùng nhấp vào nút BẬT / TẮT, trang web sẽ chuyển hướng đến URL / led2on hoặc / led2off. Do đó, phần mã này đề cập đến những gì xảy ra khi một trong hai nút được nhấp vào.
Bất cứ khi nào yêu cầu HTTP POST được thực hiện trên một trong hai / led2on hoặc / led2off, đèn LED tích hợp của mô-đun ESP8266 sẽ BẬT hoặc TẮT và trang HTML sẽ được gửi để phản hồi cho máy khách.
if(initialize_Wifi()) {
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) {
request->send(LittleFS, "/index.html", "text/html", false, processor);
});
server.serveStatic("/", LittleFS, "/");
server.on("/led2on", HTTP_GET, [](AsyncWebServerRequest *request) {
digitalWrite(ledPin, LOW);
request->send(LittleFS, "/index.html", "text/html", false, processor);
});
server.on("/led2off", HTTP_GET, [](AsyncWebServerRequest *request) {
digitalWrite(ledPin, HIGH);
request->send(LittleFS, "/index.html", "text/html", false, processor);
});
server.begin();
Nếu bo mạch ESP8266 không kết nối với mạng ở chế độ trạm thì nó sẽ được thiết lập ở chế độ AP.
else {
Serial.println("Setting Access Point");
WiFi.softAP("ESP8266-WIFI-MANAGER", NULL);
IPAddress IP = WiFi.softAPIP();
Serial.print("AP IP address: ");
Serial.println(IP);
// Web Server Root URL
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
request->send(LittleFS, "/wifimanager.html", "text/html");
});
server.serveStatic("/", LittleFS, "/");
server.on("/", HTTP_POST, [](AsyncWebServerRequest *request) {
int params = request->params();
for(int i=0;i
AsyncWebParameter* p = request->getParam(i);
if(p->isPost()){
// HTTP POST ssid value
if (p->name() == input_parameter1) {
ssid = p->value().c_str();
Serial.print("SSID set to: ");
Serial.println(ssid);
// Write file to save value
writeFile(LittleFS, SSID_path, ssid.c_str());
// HTTP POST pass value
if (p->name() == input_parameter2) {
pass = p->value().c_str();
Serial.print("Password set to: ");
Serial.println(pass);
// Write file to save value
writeFile(LittleFS, Password_path, pass.c_str());
// HTTP POST ip value
if (p->name() == input_parameter3) {
ip = p->value().c_str();
Serial.print("IP Address set to: ");
Serial.println(ip);
// Write file to save value
writeFile(LittleFS, IP_path, ip.c_str());
restart = true;
request->send(200, "text/plain", "Success. ESP8266 will now restart. Connect to your router and go to IP address: " + ip);
});
server.begin();
Chức năng WiFi.softAP (“ESP8266-WIFI-MANAGER”, NULL) tạo một điểm truy cập mở có tên “ESP8266-WIFI_Manager.” Chức năng WiFi.softAPIP() được sử dụng để lấy địa chỉ IP của ESP8266 mà qua đó chúng ta sẽ truy cập vào máy chủ web. Dòng này lưu giá trị địa chỉ IP trong một biến ‘IP’. Sau đó, hàm Serial.print() in giá trị IP của địa chỉ trong màn hình nối tiếp.
Serial.println("Setting Access Point");
WiFi.softAP("ESP8266-WIFI-MANAGER", NULL);
IPAddress IP = WiFi.softAPIP();
Serial.print("AP IP address: ");
Serial.println(IP);
Sau khi bảng ESP8266 được thiết lập ở chế độ AP, chúng tôi sẽ mở trang web trình quản lý WiFi. Điều này sẽ được truy cập từ điểm truy cập. Tệp .html wifimanager sẽ được gửi dưới dạng phản hồi.
Bất cứ khi nào người dùng nhập dữ liệu vào các trường đầu vào và nhấn nút gửi, một yêu cầu HTTP POST sẽ được gửi trên URL tuyến đường. Các giá trị SSID, mật khẩu và địa chỉ IP do người dùng nhập sẽ được lưu trong các biến tương ứng của họ. Sau đó, các giá trị sẽ được ghi vào các tệp tương ứng trên LittleFS.
// Web Server Root URL
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
request->send(LittleFS, "/wifimanager.html", "text/html");
});
server.serveStatic("/", LittleFS, "/");
server.on("/", HTTP_POST, [](AsyncWebServerRequest *request) {
int params = request->params();
for(int i=0;i
AsyncWebParameter* p = request->getParam(i);
if(p->isPost()){
// HTTP POST ssid value
if (p->name() == input_parameter1) {
ssid = p->value().c_str();
Serial.print("SSID set to: ");
Serial.println(ssid);
// Write file to save value
writeFile(LittleFS, SSID_path, ssid.c_str());
// HTTP POST pass value
if (p->name() == input_parameter2) {
pass = p->value().c_str();
Serial.print("Password set to: ");
Serial.println(pass);
// Write file to save value
writeFile(LittleFS, Password_path, pass.c_str());
// HTTP POST ip value
if (p->name() == input_parameter3) {
ip = p->value().c_str();
Serial.print("IP Address set to: ");
Serial.println(ip);
// Write file to save value
writeFile(LittleFS, IP_path, ip.c_str());
restart = true;
request->send(200, "text/plain", "Success. ESP8266 will now restart. Connect to your router and go to IP address: " + ip);
});
server.begin();
Khi người dùng nhấp vào nút submit thì phương thức send() sẽ được sử dụng để trả về phản hồi HTTP. Nó có ba tham số. Tham số đầu tiên là mã phản hồi mà chúng ta sẽ chỉ định là 200. Nó là mã phản hồi HTTP cho ok. Tham số thứ hai là kiểu nội dung của phản hồi mà chúng ta sẽ chỉ định là “text / html” và tham số thứ ba là thông báo thực tế sẽ được gửi dưới dạng phản hồi HTTP. Điều này được đặt là “Thành công. ESP8266 bây giờ sẽ khởi động lại. Kết nối với bộ định tuyến của bạn và đi đến địa chỉ IP: “+ ip”. Toán tử mũi tên sẽ được sử dụng để gọi phương thức gửi trên đối tượng AsyncWebServerRequest.
request->send(200, "text/plain", "Success. ESP32 will now restart. Connect to your router and go to IP address: " + ip);
Hơn nữa, biến boolean, ‘khởi động lại’ sẽ được đặt thành true.
restart = true;
Để start server, chúng ta sẽ gọi begin() trên đối tượng server của chúng ta.
server.begin();
Bên trong hàm loop() chúng ta sẽ kiểm tra xem biến khởi động lại có đúng hay không. Nếu đúng như vậy thì sau khi trì hoãn 5 giây, chúng tôi sẽ khởi động lại ESP8266 của mình.
void loop() {
if (restart){
delay(5000);
ESP.restart();
Sau khi bạn đã lưu tất cả các tệp, hãy chuyển đến Sketch > Show Sketch Folder và tạo một thư mục mới. Đặt cả tệp HTML và CSS bên trong thư mục đó và lưu thư mục dưới dạng ‘dữ liệu’.
Đảm bảo rằng bạn chọn đúng bảng và cổng COM trước khi tải mã của mình lên bảng. Đi tới Bảng > Công cụ và chọn NodeMCU1.0.
Tiếp theo, đi tới Công cụ > Cổng và chọn cổng thích hợp mà qua đó bảng của bạn được kết nối.
Bây giờ, chúng tôi sẽ tải các tệp lên bảng ESP8266 của chúng tôi. Đi tới Công cụ > Tải lên dữ liệu ESP8266 LittleFS. Sau một lúc, các tệp sẽ được tải lên.
Tiếp theo, nhấp vào nút tải lên để tải mã lên bảng phát triển ESP8266.
Sau khi bạn đã tải mã của mình và các tệp lên bảng phát triển ESP8266, hãy nhấn nút RST của nó.
Trong Arduino IDE của bạn, hãy mở màn hình nối tiếp và bạn sẽ có thể thấy rằng điểm truy cập đã được đặt. Điều này là do các tệp chưa được tạo.
Bây giờ để kết nối điểm truy cập, hãy mở tùy chọn WiFi trên thiết bị di động của bạn và tìm kiếm các mạng WiFi khả dụng. Bạn sẽ thấy tên “ESP8266-WIFI-Manager”.
Khi chúng tôi định cấu hình nó như một điểm truy cập mở để bạn có thể kết nối với nó mà không cần bất kỳ mật khẩu nào.
Bây giờ hãy truy cập trình duyệt web của thiết bị di động của bạn và tìm kiếm với địa chỉ IP được hiển thị trong màn hình nối tiếp. Trang web trình quản lý WiFi sẽ mở ra.
Bây giờ chỉ định SSID và mật khẩu của mạng của bạn cùng với một địa chỉ IP có sẵn và nhấn nút Gửi. Trang web sau đây sẽ mở ra cho biết thành công.
Bây giờ bảng ESP8266 khởi động lại và bạn có thể xem nó trong Màn hình nối tiếp. Các tệp được đọc lại và cả ba tham số được chỉ định trong màn hình nối tiếp. Ngoài ra, ESP8266 hiện kết nối với địa chỉ IP do người dùng gửi và chuyển sang chế độ trạm.
Bây giờ hãy mở một trang web mới và nhập địa chỉ IP vào thanh tìm kiếm và nhấn enter. Máy chủ web ESP8266 mở ra cho phép người dùng điều khiển đèn LED tích hợp trên bo mạch của họ.
Bây giờ, hãy nhấn các nút BẬT và TẮT và đèn LED trên bo mạch sẽ bật và tắt tương ứng. Trạng thái GPIO trên máy chủ web cũng sẽ thay đổi và được cập nhật.
Bằng cách sử dụng trình quản lý WiFi, chúng tôi không phải mã hóa cứng thông tin đăng nhập mạng của mình trong tập lệnh Arduino của chúng tôi. WiFi-Manager đặt ESP8266 ở chế độ điểm truy cập mềm và cho phép người dùng chỉ định SSID, mật khẩu và địa chỉ IP khả dụng. Khi bo mạch ESP8266 của bạn được kết nối với mạng, nó sẽ tự động hoạt động ở chế độ trạm.
>>> 100+ Mã Sản Phẩm Dây Rút: https://mecsu.vn/san-pham/day-rut-nhua.5op
>>> 1000+ Mã Sản Phẩm Đầu Cosse: https://mecsu.vn/san-pham/dau-cosse.Q1j
Sources
We are sorry that this post was not useful for you!
Let us improve this post!
Tell us how we can improve this post?
ESP8266 là gì? Hướng dẫn lập trình ESP8266 bằng Arduino IDE
ESP8266 là gì?, ESP Wifi là gì? và ESP8266 dùng để làm gì? là những câu hỏi được rất nhiều bạn mới tiếp cận với ESP8266 hỏi mình, để giải thích cho những câu hỏi trên. Trong bài viết ngày hôm nay, hãy cùng tìm mình hiểu về ESP8266 và hướng dẫn cách lập trình bằng Arduino IDE. Nếu bạn đang quan tâm đến việc phát triển các ứng dụng IoT, đây chắc chắn là một bài viết bạn không nên bỏ qua!
ESP8266 – WiFi Access Point
ESP8266 hoạt động ở chế độ Access Point
ESP8266 có khả năng cho phép các thiết bị khác (Station – STA) truy cập vào và hoạt động như là 1 Access Point, có thể tự thiết lập 1 mạng WiFi nội bộ, với khả năng khởi động DHCP Client và cung cấp được IP cho các Client kết nối tới. Do giới hạn về RAM, nên số lượng tối đa các STA có thể kết nối đến một ESP8266 hiện tại là 5.
Khởi tạo mạng
Đầu tiên bạn cần include , thư viện này chứa hàm
softAP
dùng để cấu hình Access Point mềm (soft AP) để khởi tạo một mạng WiFi.
Một mạng WiFi đơn giản nhất chỉ cần cung cấp tên SSID và không mật khẩu
WiFi.softAP(ssid)
. Phức tạp hơn, bạn cung cấp mật khẩu cho mạng WiFi
WiFi.softAP(ssid, password)
, hoặc chi tiết
WiFi.softAP(ssid, password, channel, hidden)
khi cung cấp chính xác kênh truyền (1..13), mặc định 1 và ẩn nó đi, không hiển thị ra khi
hidden = true
Nhớ rằng
ssid
sử dụng chuỗi ký tự không quá 63, và mật khẩu (có thể không cần) với tối thiểu 8 ký tự cho mạng WPA2-PSK
Hàm
softAP
sẽ trả về
true
nếu khởi tạo thành công mạng WiFi
Lưu ý rằng, mạng WiFi khởi tạo bởi hàm |
WiFi.softAPConfig (local_ip, gateway, subnet)
dùng để cấu hình IP cho Access Point
192.168.4.22
IPAddress local_IP(192,168,4,22); IPAddress gateway(192,168,4,9); IPAddress subnet(255,255,255,0); WiFi.softAPConfig(local_IP, gateway, subnet)
WiFi.softAPgetStationNum()
sẽ trả về số lượng client đang kết nối tới Access Point
Khởi tạo mạng WiFi sử dụng ESP8266
Với đoạn code này, bạn có thể tạo ra một mạng WiFi cục bộ có SSID là
AP-XXXXXX
và có thể dùng máy tính để kết nối trực tiếp vào với password là
password
#include
const char *password = "password"; void setup() { Serial.begin(115200); Serial.print("Configuring access point..."); char ssid[64]; sprintf(ssid, "AP-%06X", ESP.getChipId()); WiFi.softAP(ssid, password); IPAddress myIP = WiFi.softAPIP(); Serial.print("AP IP address: "); Serial.println(myIP); } void loop() { Serial.printf("Stations connected = %d\n", WiFi.softAPgetStationNum()); delay(3000); }
Nạp chương trình cho board NodeMCU và xem kết quả hiển trị trên màn hình Monitor. Lúc này, bạn có thể tìm thấy SSID do board NodeMCU phát ra bằng bất kỳ thiết bị có thể kết nối Internet nào.
In this tutorial, you’ll learn how to set your ESP8266 NodeMCU as an Access Point (AP) using Arduino IDE. This allows you to connect directly to your ESP8266 via Wi-Fi without a wireless router.
To set the ESP8266 as an Access Point use WiFi.softAP(ssid, password);
ESP8266 NodeMCU Access Point (AP)
In this example, we’ll modify the ESP8266 Web Server from a previous tutorial to add access point capabilities. Here’s the project example we’ll use: ESP8266 DHT11/DHT22 Temperature and Humidity Web Server with Arduino IDE.
What we’ll show you here can be used with any ESP8266 web server example.
Upload the sketch provided below to set the ESP8266 as an access point.
/********* 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
#include
#include
#include
#include
#include
#include
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(
Installing the DHT Library for ESP8266
For this example, we’ll use a previous web server project that displays sensor readings from a DHT sensor.
Having the ESP8266 Board installed in Arduino IDE, to read from the DHT sensor, we’ll use the DHT library from Adafruit. To use this library you also need to install the Adafruit Unified Sensor library.
Follow the next steps to install those two libraries:
1. Open your Arduino IDE and go to Sketch > Include Library > Manage Libraries. The Library Manager should open.
2. Search for “DHT” on the Search box and install the DHT library from Adafruit.
3. After installing the DHT library from Adafruit, type “Adafruit Unified Sensor” in the search box. Scroll all the way down to find the library and install it.
After installing the libraries, restart your Arduino IDE.
The Sketch¶
Setting up soft-AP with ESP8266 can be done with just couple lines of code.
#include
void setup() { Serial.begin(115200); Serial.println(); Serial.print("Setting soft-AP ... "); boolean result = WiFi.softAP("ESPsoftAP_01", "pass-to-soft-AP"); if(result == true) { Serial.println("Ready"); } else { Serial.println("Failed!"); } } void loop() { Serial.printf("Stations connected = %d\n", WiFi.softAPgetStationNum()); delay(3000); }
Hướng dẫn nạp code cho ESP8266 NodeMCU
Để có thể nạp code cho ESP8266 NodeMCU bạn cần tải phần mềm Arduino IDE về. Thông thường phần mềm mới tải về thì chưa có board esp822 nên các bạn cần làm theo các bước dưới đây.
Bước 1: Mở Arduino IDE lên, click vào File trên thanh công cụ chọn Preferences(Ctrl+Comma).
Bước 2: Copy đường Link bên dưới bỏ vào ô tô màu vàng và nhấn OK là xong.
- Copy Link tại đây: http://arduino.esp8266.com/stable/package_esp8266com_index.json
Bước 3: Vào Tools > Board > Boards Manager
Bước 4: Cửa sổ mở lên ta Seach “Esp8266” để tải danh mục của các Board về. Nhấn Install để tiến hành cài đặt.
Như vậy, là mình vừa xong phần thiết lập cho board, bây giờ các bạn chỉ cần viết code và nhấn Upload chương trình xuống là xong.
Lưu ý: Chọn đúng PORT và Board nhé, ở đây mình dùng ESP822 NodeMCU 1.0 (ESP-12E Module)
ESP8266 là gì?
ESP8266 là một module Wi-Fi với khả năng kết nối Internet và được tích hợp sẵn trên một số board nhúng như NodeMCU, Wemos, và ESP-01. ESP8266 có thể hoạt động như một điểm truy cập (access point), một client kết nối đến một điểm truy cập khác, hoặc cả hai đều được. Nó được sử dụng rộng rãi trong các ứng dụng IoT (Internet of Things) như cảm biến thông minh, hệ thống kiểm soát thiết bị, hoặc các ứng dụng điều khiển từ xa. Module này có giá thành rẻ và rất dễ sử dụng, cùng với đó là khả năng tương thích với nhiều loại vi điều khiển khác nhau.
Parts Required
To proceed with this tutorial, you need the following parts:
- ESP8266 development board (read ESP8266 development boards comparison)
- DHT22 or DHT11 Temperature and Humidity Sensor
- 4.7k Ohm Resistor
- Breadboard
- Jumper wires
You can use the preceding links or go directly to MakerAdvisor.com/tools to find all the parts for your projects at the best price!
ESP8266 DHT Server
Temperature
%TEMPERATURE%
°C
Humidity
%HUMIDITY%
)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); } } }
Customize the SSID and Password
You need to define a SSID name and a password to access the ESP8266. In this example we’re setting the ESP8266 SSID name to ESP8266-Access-Point, but you can modify the name to whatever you want. The password is 123456789, but you can also modify it.
const char* ssid = "ESP8266-Access-Point"; const char* password = "123456789";
Setting the ESP8266 as an Access Point (AP)
There’s a section in the setup() to set the ESP8266 as an access point using the softAP() method:
WiFi.softAP(ssid, password);
There are also other optional parameters you can pass to the softAP() method. Here’s all the parameters:
.softAP(const char* ssid, const char* password, int channel, int ssid_hidden, int max_connection)
- ssid (defined earlier): maximum of 31 characters
- password (defined earlier): minimum of 8 characters. If not specified, the access point will be open (maximum 63 characters)
- channel: Wi-Fi channel number (1-13). Default is 1
- ssid_hidden: if set to true will hide SSID
- max_connection: max simultaneous connected stations, from 0 to 8
Next, get the access point IP address using the softAPIP() method and print it in the Serial Monitor.
IPAddress IP = WiFi.softAPIP(); Serial.print("AP IP address: "); Serial.println(IP);
Note: by default, the access point IP address is 192.168.4.1
These are the snippets of code you need to include in your web server sketches to set the ESP8266 as a soft access point.
To learn how the full web server code works, read: ESP8266 NodeMCU DHT11/DHT22 Temperature and Humidity Web Server with Arduino IDE.
How Does it Work?¶
Sketch is small so analysis shouldn’t be difficult. In first line we are including
ESP8266WiFi
library:
#include
Setting up of the access point
ESPsoftAP_01
is done by executing:
cpp boolean result = WiFi.softAP("ESPsoftAP_01", "pass-to-soft-AP");
If this operation is successful then
result
will be
true
or
false
if otherwise. Basing on that either
Ready
or
Failed!
will be printed out by the following
if - else
conditional statement.
Conclusion¶
ESP8266WiFi library makes it easy to turn ESP8266 into soft access point.
Once you try above sketch check out WiFiAccessPoint.ino as a next step. It demonstrates how to access ESP operating in soft-AP mode from a web browser.
For the list of functions to manage ESP module in soft-AP mode please refer to the Soft Access Point Class documentation.
The esp8266 microcontroller can be configured as an access point (AP) and generate its own wifi network with ssid and password. This method is useful when you do not have access to a wifi network or if you want to work on a network specific to the microcontroller.
How to Use It?¶
In line
boolean result = WiFi.softAP("ESPsoftAP_01", "pass-to-soft-AP")
change
pass-to-soft-AP
to some meaningful password and upload sketch. Open serial monitor and you should see:
Setting soft-AP … Ready Stations connected = 0 Stations connected = 0 …
Then take your mobile phone or a PC, open the list of available access points, find
ESPsoftAP_01
and connect to it. This should be reflected on serial monitor as a new station connected:
Stations connected = 1 Stations connected = 1 …
If you have another Wi-Fi station available then connect it as well. Check serial monitor again where you should now see two stations reported.
Thư viện ESP8266
ESP8266 arduino là một vi điều khiển phổ biến trong các ứng dụng IoT, nó hỗ trợ Wi-Fi và có thể được lập trình để kết nối với các thiết bị trên internet. Các thư viện ESP8266 cung cấp các hàm để thực hiện các chức năng liên quan đến Wi-Fi, TCP/IP, MQTT và nhiều chức năng khác.
Dưới đây là các thư viện phổ biến cho ESP8266 bao gồm:
- ESP8266WiFi: Thư viện này cung cấp các chức năng để kết nối với mạng Wi-Fi và thực hiện các hoạt động như phát hiện mạng, kết nối đến mạng, ngắt kết nối và kiểm tra kết nối.
- ESP8266HTTPClient: Thư viện này cung cấp các chức năng để thực hiện các yêu cầu HTTP, bao gồm cả GET, POST, PUT, DELETE và PATCH.
- PubSubClient: Thư viện này cung cấp các chức năng để kết nối và giao tiếp với một máy chủ MQTT, cho phép truyền tải dữ liệu giữa ESP8266 và máy chủ.
- ESPAsyncWebServer: Thư viện này cung cấp các chức năng để tạo và quản lý một máy chủ web, cho phép truy cập và điều khiển ESP8266 thông qua trình duyệt web.
- ArduinoJson: Thư viện này cung cấp các chức năng để xử lý JSON, cho phép ESP8266 đọc và ghi dữ liệu dưới định dạng JSON.
- Adafruit MQTT Library: Thư viện này cung cấp các chức năng để kết nối và giao tiếp với một máy chủ MQTT, cho phép truyền tải dữ liệu giữa ESP8266 và máy chủ.
Result
Once the access point is configured and the code is uploaded to the card, we can see in the available networks a new network appearing. We check that it has the SSID defined in the code.
Once the NodeMCU ESP8266 is configured as an access point, the network, thus generated, can be used like any other Wifi network. Other devices can connect and communicate via this network.
Keywords searched by users: esp8266 arduino access point
Categories: Sưu tầm 50 Esp8266 Arduino Access Point
See more here: kientrucannam.vn
See more: https://kientrucannam.vn/vn/