网络服务器
一、建立基本网络服务器
使用ESP8266WebServer库进行创建WeServer
#include<ESP8266WiFi.h>
#include<ESP8266WiFiMulti.h>
#include<ESP8266WebServer.h>
ESP8266WiFiMulti wifiMulti;//创建ESP8266WiFiMulti对象
ESP8266WebServer esp8266_server(80);//创建ESP8266WebServer对象,80为端口号。网络服务器标准http端口号为80,所以使用80端口号
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);//启动串口通讯
wifiMulti.addAP("TestWiFi", "66668888");
wifiMulti.addAP("TestWiFi1", "66668888");
int i = 0;
while (wifiMulti.run() != WL_CONNECTED)
{
delay(1000);
Serial.print(i++); Serial.print(" ");
}
//WiFi连接成功后通过串口监视器输出连接成功信息
Serial.println("");
Serial.print("Connect to ");
Serial.println(WiFi.SSID());
Serial.print("IP Address:\t");
Serial.println(WiFi.localIP());
//-------------"启动网络服务器功能" 程序部分开始-----------------//
esp8266_server.begin();//启动服务器
esp8266_server.on("/", handleRoot); //访问首页时调用 handleRoot 函数
esp8266_server.onNotFound(handleNotFound);//访问首页失败时,调用 handleNotFound 函数
Serial.println("HTTP esp8266_server Started");
}
void loop() {
// put your main code here, to run repeatedly:
esp8266_server.handleClient();//处理Http服务器访问
}
// 处理网站根目录 “/”的访问请求
void handleRoot()
{
Serial.println("handleRoot");
esp8266_server.send(200, "text/plain", "Hello From ESP8266");
}
//处理404情况的函数
void handleNotFound()
{
Serial.println("handleNotFound");
esp8266_server.send(404, "text/plain", "404 ESP8266 Seerver Not Found");
}
二、通过网络服务实现NodeMCU开发板的基本控制
/*========================================
使用NodeMCU建立基本服务器。用户可通过浏览器使用ESP8266的IP地址
访问ESP8266建立的基本网页并通过该页面点亮/熄灭NodeMCU的内置LED
=========================================*/
#include<ESP8266WiFi.h>
#include<ESP8266WiFiMulti.h>
#include<ESP8266WebServer.h>
ESP8266WiFiMulti wifiMulti;
ESP8266WebServer espWebServer(80);
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(LED_BUILTIN, OUTPUT);
wifiMulti.addAP("TestWiFi", "66668888");
int i = 0;
while (wifiMulti.run() != WL_CONNECTED) {
delay(1000);
Serial.println(i++);
}
//连接WiFi成功
Serial.print("Connected to:");
Serial.println(WiFi.SSID());
Serial.print("IP address:");
Serial.println(WiFi.localIP());
//=========="网络服务器代码"================
espWebServer.begin();
espWebServer.on("/", HTTP_GET, handleRoot);
espWebServer.on("/LED", HTTP_POST, handleLED);
espWebServer.onNotFound(hanandleNotFound);
}
void loop() {
// put your main code here, to run repeatedly:
espWebServer.handleClient();// 检查http服务器访问
}
void handleRoot()
{
espWebServer.send(200, "text/html", "<form action=\"/LED\" method=\"POST\"><input type=\"submit\" value=\"Toggle LED\"></form>");
}
void handleLED()
{
//espWebServer.send(200, "text/plain", "Click LED Button");
digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); // 改变LED的点亮或者熄灭状态
espWebServer.sendHeader("Location", "/"); // 跳转回页面根目录
espWebServer.send(303); // 发送Http相应代码303 跳转
}
void hanandleNotFound()
{
espWebServer.send(404, "text/plain", "404 Connect to ESP8266 Fail");
}
html代码绘制Tooggle按钮
三、通过网络服务将开发板引脚状态显示在网页中
/*========================================
使用NodeMCU建立基本服务器。用户可通过浏览器使用ESP8266的IP地址
访问ESP8266建立的基本网页并在该网页展示D3引脚状态
=========================================*/
#include<ESP8266WiFi.h>
#include<ESP8266WiFiMulti.h>
#include<ESP8266WebServer.h>
#define buttonPin D3//按钮引脚D3
ESP8266WiFiMulti wifiMulti;
ESP8266WebServer espWebServer(80);
bool pinState;//存储引脚状态变量
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(buttonPin, INPUT_PULLUP);
wifiMulti.addAP("3106", "Li18656509193");
int i = 0;
while (wifiMulti.run() != WL_CONNECTED) {
delay(1000);
Serial.println(i++);
}
//连接WiFi成功
Serial.print("Connected to:");
Serial.println(WiFi.SSID());
Serial.print("IP address:");
Serial.println(WiFi.localIP());
//=========="网络服务器代码"================
espWebServer.begin();
espWebServer.on("/", HTTP_GET, handleRoot);
espWebServer.onNotFound(hanandleNotFound);
}
void loop() {
// put your main code here, to run repeatedly:
pinState = digitalRead(buttonPin);//获取引脚状态
espWebServer.handleClient();// 检查http服务器访问
}
void handleRoot()
{
String displayStateString;
if (pinState == HIGH)
{
displayStateString = "Button State:HIGH";
}
else
{
displayStateString = "Button State:LOW";
}
espWebServer.send(200, "text/text", displayStateString);
}
void hanandleNotFound()
{
espWebServer.send(404, "text/plain", "404 Connect to ESP8266 Fail");
}