ESP8266——入门:网络服务器(四)

ESP8266WebServer库

用于HTTP协议通讯。可使用ESP8266开发板建立网络服务器,以达到其他设备(物联网设备和网络设备)通过HTTP协议进行通讯

ESP866-web-Server-Library

应用一

代码(建立基础网络服务器)

#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复位键,即可在串口栏看到输出的信息。

2

显示已经连接到到MERCURY WIFI,且IP地址为192.168.0.104,此时打开浏览器输入该IP地址即可访问

1

当访问其他路径时,会提示404页面

image-20200722100527005

应用二

网络实现控制开发板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 跳转
}

结果

img

点击按钮即可点亮或者关闭LED灯

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值