ESP8266WebServer库
用于HTTP协议通讯。可使用ESP8266开发板建立网络服务器,以达到其他设备(物联网设备和网络设备)通过HTTP协议进行通讯
应用一
代码(建立基础网络服务器)
#include <ESP8266WiFi.h> // 使用 ESP8266WiFi库
#include <ESP8266WiFiMulti.h> // ESP8266WiFiMulti库
#include <ESP8266WebServer.h> // ESP8266WebServer库
ESP8266WiFiMulti wifiMulti; // 建立ESP8266WiFiMulti对象,对象名称是'wifiMulti'
ESP8266WebServer esp8266_server(80);// 建立ESP8266WebServer对象,对象名称为esp8266_server
// 括号中的数字是网路服务器响应http请求的端口号
// 网络服务器标准http端口号为80,因此这里使用80为端口号
void setup(void){
Serial.begin(9600); // 启动串口通讯
//通过addAp函数存储 WiFi名称 WiFi密码
// 这三条语句通过调用函数addAP来记录3个不同的WiFi网络信息。
wifiMulti.addAP("WIFI1名称", "WIFI1密码");
wifiMulti.addAP("WIFI2名称", "WIFI2密码");
wifiMulti.addAP("WIFI3名称", "WIFI3密码");
int i = 0;
// 环境中搜索addAP函数所存储的WiFi。如果搜到多个存储的WiFi那么NodeMCU 将会连接信号最强的那一个WiFi信号。
// 一旦连接WiFI成功,wifiMulti.run()将会返回“WL_CONNECTED”
while (wifiMulti.run() != WL_CONNECTED) {
delay(1000);
Serial.print(i++); Serial.print(' ');
}
// WiFi连接成功后将通过串口监视器输出连接成功信息
Serial.println('\n'); // WiFi连接成功后
Serial.print("Connected to "); // NodeMCU将通过串口监视器输出。
Serial.println(WiFi.SSID()); // 连接的WiFI名称
Serial.print("IP address:\t"); // 以及
Serial.println(WiFi.localIP()); // NodeMCU的IP地址
//--------"启动网络服务功能"程序部分开始--------
esp8266_server.begin();
esp8266_server.on("/", handleRoot);//访问网站的根目录 执行handleRoot函数
esp8266_server.onNotFound(handleNotFound); //当请求服务器找不到时,执行handleNotFound函数
//--------"启动网络服务功能"程序部分结束--------
Serial.println("HTTP esp8266_server started");// 告知用户ESP8266网络服务功能已经启动
}
/* 以下函数语句为本示例程序重点3*/
void loop(void){
esp8266_server.handleClient(); // 处理http服务器访问
}
void handleRoot() { //处理网站根目录“/”的访问请求
esp8266_server.send(200, "text/plain", "Hello from ESP8266");
//访问成功返回200状态码,返回信息类型text/plain(表示纯文本信息),内容为Hello from...
}
// 设置处理404情况的函数'handleNotFound'
void handleNotFound(){
// 当浏览器请求的网络资源无法在服务器找到时,返回404状态码,和提升信息类型和内容
esp8266_server.send(404, "text/plain", "404: Not found");
}
编译后写入板子
上传后,打开串口面板,此时按一下板子的RST复位键,即可在串口栏看到输出的信息。
显示已经连接到到MERCURY WIFI,且IP地址为192.168.0.104,此时打开浏览器输入该IP地址即可访问
当访问其他路径时,会提示404页面
应用二
网络实现控制开发板LED
#include <ESP8266WiFi.h> // ESP8266WiFi库
#include <ESP8266WiFiMulti.h> // ESP8266WiFiMulti库
#include <ESP8266WebServer.h> // ESP8266WebServer库
ESP8266WiFiMulti wifiMulti; // 建立ESP8266WiFiMulti对象,对象名称是'wifiMulti'
ESP8266WebServer esp8266_server(80);// 建立ESP8266WebServer对象,对象名称为esp8266_server
// 括号中的数字是网路服务器响应http请求的端口号
// 网络服务器标准http端口号为80,因此这里使用80为端口号
void setup(void){
Serial.begin(9600); // 启动串口通讯
pinMode(LED_BUILTIN, OUTPUT); //设置内置LED引脚为输出模式以便控制LED
//通过addAp函数存储 WiFi名称 WiFi密码
wifiMulti.addAP("WIFI1名称", "WIFI1密码"); // 这三条语句通过调用函数addAP来记录3个不同的WiFi网络信息。
wifiMulti.addAP("WIFI2名称", "WIFI2密码");
wifiMulti.addAP("WIFI3名称", "WIFI3密码");
int i = 0;
while (wifiMulti.run() != WL_CONNECTED) { // 此处的wifiMulti.run()是重点。通过wifiMulti.run(),NodeMCU将会在当前
delay(1000); // 环境中搜索addAP函数所存储的WiFi。如果搜到多个存储的WiFi那么NodeMCU
Serial.print(i++); Serial.print(' '); // 将会连接信号最强的那一个WiFi信号。
} // 一旦连接WiFI成功,wifiMulti.run()将会返回“WL_CONNECTED”。这也是
// 此处while循环判断是否跳出循环的条件。
// WiFi连接成功后将通过串口监视器输出连接成功信息
Serial.println('\n'); // WiFi连接成功后
Serial.print("Connected to "); // NodeMCU将通过串口监视器输出。
Serial.println(WiFi.SSID()); // 连接的WiFI名称
Serial.print("IP address:\t"); // 以及
Serial.println(WiFi.localIP()); // NodeMCU的IP地址
//--------"启动网络服务功能"程序部分开始--------
esp8266_server.begin();
esp8266_server.on("/",HTTP_GET,handleRoot);//访问网站的根目录 处理GET请求 执行handleRoot函数
esp8266_server.on("/LED",HTTP_POST,handleLED); //设置处理LED控制请求函数 处理POST请求
esp8266_server.onNotFound(handleNotFound); //当请求服务器找不到时,执行handleNotFound函数
//--------"启动网络服务功能"程序部分结束--------
Serial.println("HTTP esp8266_server started");// 告知用户ESP8266网络服务功能已经启动
}
void loop(void){
esp8266_server.handleClient(); // 处理http服务器访问
}
void handleRoot() { //处理网站根目录“/”的访问请求
esp8266_server.send(200, "text/html", "<form action=\"/LED\" method=\"POST\"><input type=\"submit\" value=\"Toggle LED\"></form>"); // NodeMCU将调用此函数。访问成功返回200状态码,返回信息类型text/html
}
// 设置处理404情况的函数'handleNotFound'
void handleNotFound(){ // 当浏览器请求的网络资源无法在服务器找到时,返回404状态码,和提升信息类型和内容
esp8266_server.send(404, "text/plain", "404: Not found"); // NodeMCU将调用此函数。
}
void handleLED(){
digitalWrite(LED_BUILTIN,!digitalRead(LED_BUILTIN));// 改变LED的点亮或者熄灭状态
esp8266_server.sendHeader("Location","/"); // 跳转回页面根目录
esp8266_server.send(303); // 发送Http相应代码303 跳转
}
结果
点击按钮即可点亮或者关闭LED灯