WiFi-ESP8266入门开发(六)-路由系统
来源:互联网 发布:淘宝打印画骗局 编辑:程序博客网 时间:2024/05/22 16:44
个人认为,赋予ESP8266最强大的功能莫过于HTTP路由,HTTP路由,根据不同的url响应不同的任务。在这里就类似于node.js的路由。
在教程里边已经展示了基本路由系统的使用,在我们访问ip的时候引导到了handleRoot上进行处理。
而在之后获取svg图形的时候也通过路由引导到了drawGraph上返回由ESP8266“亲手”绘制的svg图形。
此外,路由系统还提供了NotFound处理,这个可以用来处理不在预设中的页面,用于引导到404页面或者内置的html页面上。
这就是handleMain中返回给浏览器的String了。
然后可以访问控制引脚的地址:
点亮led
熄灭led
分别访问这两个地址可以看到板载的led点亮和熄灭。这个就是绑定了/pin的功能起的作用了。注意,在这里只允许使用GET方式来进行请求,因为在绑定的时候多输入了一个HTTP_GET参数,这个参数是指明了只绑定GET请求,同理也可以绑定POST等请求。
之后就是随便打个地址比如:
就会出现Not Found信息,在未绑路由之外的地方进行的请求一律会跳转到onNotFound绑定的方法中。
有没有感受到这个路由系统的魅力?因为8266本身是单线程运行,在Socket请求中并没有任何优势,在多个客户端同时请求的时候会造成数据错位等原因,所以平时个人都是使用http的形式进行请求来做数据交互。
在教程里边已经展示了基本路由系统的使用,在我们访问ip的时候引导到了handleRoot上进行处理。
而在之后获取svg图形的时候也通过路由引导到了drawGraph上返回由ESP8266“亲手”绘制的svg图形。
此外,路由系统还提供了NotFound处理,这个可以用来处理不在预设中的页面,用于引导到404页面或者内置的html页面上。
本次教程的详细代码:
- #include <ESP8266WiFi.h>
- #include <ESP8266WebServer.h>
- ESP8266WebServer server ( 80 );
- String ssid = ""; // 需要连接的wifi热点名称
- String password = ""; // 需要连接的wifi热点密码
- /* NotFound处理
- * 用于处理没有注册的请求地址
- * 一般是处理一些页面请求
- */
- void handleNotFound() {
- String message = "File Not Found\n\n";
- message += "URI: ";
- message += server.uri();
- message += "\nMethod: ";
- message += ( server.method() == HTTP_GET ) ? "GET" : "POST";
- message += "\nArguments: ";
- message += server.args();
- message += "\n";
- for ( uint8_t i = 0; i < server.args(); i++ ) {
- message += " " + server.argName ( i ) + ": " + server.arg ( i ) + "\n";
- }
- server.send ( 404, "text/plain", message );
- }
- void handleMain() {
- /* 返回信息给浏览器(状态码,Content-type, 内容)
- * 这里是访问当前设备ip直接返回一个String
- */
- server.send ( 200, "text/html", "Hello, this is handleMain.");
- }
- /* 引脚更改处理
- * 访问地址为htp://192.162.xxx.xxx/pin?a=XXX的时候根据a的值来进行对应的处理
- */
- void handlePin() {
- if(server.hasArg("a")) { // 请求中是否包含有a的参数
- String action = server.arg("a"); // 获得a参数的值
- if(action == "on") { // a=on
- digitalWrite(2, LOW); // 点亮8266上的蓝色led,led是低电平驱动,需要拉低才能亮
- server.send ( 200, "text/html", "Pin 2 has turn on"); return; // 返回数据
- } else if(action == "off") { // a=off
- digitalWrite(2, HIGH); // 熄灭板载led
- server.send ( 200, "text/html", "Pin 2 has turn off"); return;
- }
- server.send ( 200, "text/html", "unknown action"); return;
- }
- server.send ( 200, "text/html", "action no found");
- }
- void setup() {
- // 日常初始化网络
- pinMode(2, OUTPUT);
- Serial.begin ( 115200 );
- int connectCount = 0;
- WiFi.begin ( ssid.c_str(), password.c_str() );
- while ( WiFi.status() != WL_CONNECTED ) {
- delay ( 1000 );
- Serial.print ( "." );
- if(connectCount > 30) {
- Serial.println( "Connect fail!" );
- break;
- }
- connectCount += 1;
- }
- if(WiFi.status() == WL_CONNECTED) {
- Serial.println ( "" );
- Serial.print ( "Connected to " );
- Serial.println ( ssid );
- Serial.print ( "IP address: " );
- Serial.println ( WiFi.localIP() );
- connectCount = 0;
- }
- server.on ("/", handleMain); // 绑定‘/’地址到handleMain方法处理
- server.on ("/pin", HTTP_GET, handlePin); // 绑定‘/pin’地址到handlePin方法处理
- server.onNotFound ( handleNotFound ); // NotFound处理
- server.begin();
- Serial.println ( "HTTP server started" );
- }
- void loop() {
- /* 循环处理,因为ESP8266的自带的中断已经被系统占用,
- * 只能用过循环的方式来处理网络请求
- */
- server.handleClient();
- }
消息,连接成功之后可以看到返回有一个ip地址,使用浏览器方位这个ip地址就可以看到这个消息:
这就是handleMain中返回给浏览器的String了。
然后可以访问控制引脚的地址:
点亮led
熄灭led
分别访问这两个地址可以看到板载的led点亮和熄灭。这个就是绑定了/pin的功能起的作用了。注意,在这里只允许使用GET方式来进行请求,因为在绑定的时候多输入了一个HTTP_GET参数,这个参数是指明了只绑定GET请求,同理也可以绑定POST等请求。
之后就是随便打个地址比如:
就会出现Not Found信息,在未绑路由之外的地方进行的请求一律会跳转到onNotFound绑定的方法中。
有没有感受到这个路由系统的魅力?因为8266本身是单线程运行,在Socket请求中并没有任何优势,在多个客户端同时请求的时候会造成数据错位等原因,所以平时个人都是使用http的形式进行请求来做数据交互。
阅读全文
1 0
- WiFi-ESP8266入门开发(六)-路由系统
- WiFi-ESP8266入门开发(三)-网页客户端
- WiFi-ESP8266入门开发(七)-文件系统
- WiFi-ESP8266入门开发(二)-连接WiFi网络
- WiFi-ESP8266入门开发(一)-Arduino环境搭建
- WiFi-ESP8266入门开发(四)-设置软热点
- WiFi-ESP8266入门开发(五)-HTTP客户端+Yeelink
- <WIFI>搭建ESP8266开发环境
- ESP8266 sdk开发入门
- ESP8266 WIFI模块开发笔记一 NONRTOS开发
- 一、ESP8266入门(基于LUA开发)
- 小e开发板(esp8266)连接Arduino实现WiFi扫描
- ESP8266 SDK开发篇(二)——连接wifi
- esp8266路由模式设置
- ESP8266 wifi模块使用
- <WIFI>初识ESP8266小黄板
- ESP8266 WIFI 模块使用说明
- ESP8266-WIFI之简介
- 利用幂等性区分HTTP的POST与PUT请求
- Linux eval
- qt用mingw编译时报错 multiple definition of
- DecimalFormat用法
- TD-SCDMA智能天线波束赋形能力的讨论
- WiFi-ESP8266入门开发(六)-路由系统
- 2017.7.3 校内赛 【模拟】 【贪心】 【??】
- CSS中link和import的加载顺序级别以及HTML加载顺序详解
- dotTrace性能分析之应用程序启动慢
- 安卓视频播放,部分手机不能快进
- Android Studio 代码混淆基本配置
- Error querying database. Cause:org.h2.jdbc.JdbcSQLException:Table “t_user" not found;SQL statement
- java网络编程详解(分层,TCP/IP,网络基础,协议)
- 练习赛qu(大根堆 STL)