物联网ESP8266学习笔记(三)-- 网络服务器

odin_zou 2022-09-10 23:15:02

一、建立网络服务器

参考太极创客网站:http://www.taichi-maker.com/homepage/esp8266-nodemcu-iot/iot-c/esp8266-nodemcu-web-server/web-server/

*注意烧录程序后打开串口监视器后要按一次复位键才会开始运行程序。

其示例程序中:

1.

ESP8266WebServer esp8266_server(80);// 建立ESP8266WebServer对象,对象名称为esp8266_server
                                    // 括号中的数字是网路服务器响应http请求的端口号
                                    // 网络服务器标准http端口号为80,因此这里使用80为端口号

*浏览器软件访问网站使默认通过服务器的80端口获取网页信息,不同端口号对应服务器的功能可能不同。

2.

//--------"启动网络服务功能"程序部分开始-------- // 
  esp8266_server.begin();                   //启动网络服务器,通过前文的80端口提供网站服务
  esp8266_server.on("/", handleRoot);       //"/"指访问的为网站的首页,即网站的根目录
                                            //"handleRoot"函数负责提供首页信息
                                            //"on"的作用为当浏览器访问首页时通过调用"handleRoot"函数提供首页信息
  esp8266_server.onNotFound(handleNotFound);//"onNotFound"指当浏览器找不到页面时调用"handleNotFound"函数进行处理      
//--------"启动网络服务功能"程序部分结束--------//

3.

void handleRoot() {   //处理网站根目录“/”的访问请求 
  esp8266_server.send(200, "text/plain", "Hello from ESP8266"); //"esp8266_server.send"通过ESP8266网络服务器发送
                                                                //"200"是服务器响应状态码
                                                                //"text/plain"是网页发送的数据响应类型信息,此处代表为纯文本信息
                                                                // "Hello from ESP8266"为发送信息内容,此处网站将以纯文本形式显示该信息
}

4.

// 设置处理404情况的函数'handleNotFound'
void handleNotFound(){                                        // 当浏览器请求的网络资源无法在服务器找到时,
  esp8266_server.send(404, "text/plain", "404: Not found");   // NodeMCU将调用此函数,内容同上
}

5.

void loop(void){
  esp8266_server.handleClient();     //处理http服务器访问
                                     //"handleClient"每次调用时都会检查现在是否有浏览器请求网页信息
}

二、通过网络服务控制开发板

参考太极创客网站:http://www.taichi-maker.com/homepage/esp8266-nodemcu-iot/iot-c/esp8266-nodemcu-web-server/pin-control/

其示例程序中:

1.

void handleRoot() {       
  esp8266_server.send(200, "text/html", "<form action=\"/LED\" method=\"POST\"><input type=\"submit\" value=\"Toggle LED\"></form>");
}

“html”指的是超文本标记语言(普通文本只具有可读作用,而超文本则可以与之互动)(“标记”则指该语言由各类标签组成)

<form action=\"/LED\" method=\"POST\">//“form”是一种标签,自本行开始结束于</form>处,指表单。“action”的作用是当对form中的内容(此处指第二行按钮定义)执行动作时,请求LED页面。“method”则为数据传输的请求方法。

*其中“\”是用来说明在该代码中的" "哪些隶属html,哪些不是。一般格式为:\"...\"作用是防止编译器错乱,无法分清" "的开始和结束部分,类似中文中双引号和单引号的用法,即双引号中的引号用单引号,程序中"..."中的引号用 \"...\"

       <input type=\"submit\" value=\"Toggle LED\">//此行为用户所需提交信息的内容,定义了一个按钮。

</form>

整段代码的意思是,定义了一个按钮名为“Toggle LED”,当按下改按钮时,浏览器将向服务器发送一个请求,请求页面为LED,请求方法为post。

2.

void handleLED() {                          
  digitalWrite(LED_BUILTIN,!digitalRead(LED_BUILTIN));// 改变LED的点亮或者熄灭状态
  esp8266_server.sendHeader("Location","/");          // 跳转回页面根目录
  esp8266_server.send(303);                           // 发送Http相应代码303 跳转  
}

“digitalRead”为读取目前开发板引脚的状态。

三、通过网络服务显示开发板引脚状态

参考太极创客网站:http://www.taichi-maker.com/homepage/esp8266-nodemcu-iot/iot-c/esp8266-nodemcu-web-server/pin-state/

*注意,其中第一个示例程序要一直按着flash按钮刷新界面才会显示low状态,不然都是high。

...全文
199 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN-Ada助手 2023-01-13
  • 打赏
  • 举报
回复
您可以前往 CSDN问答-运维 发布问题, 以便更快地解决您的疑问

177

社区成员

发帖
与我相关
我的任务
社区管理员
  • c_university_2801
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧