完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
原理
ESP8266 AP模式下的控制都是由server.on();来响应的 比如server.on("/", handleRoot);就是说当有客户端请求访问网站根目录,就调用handleRoot方法去响应请求 超链接 a标签实现的页面跳转,点击 Change LED 之后跳转到LED页面,但是这个页面其实不算是网页代码,只是执行某种请求之后然后在返回主页,然后重复载入整个主页 void handleLed(){ digitalWrite(D6,!digitalRead(D6)); server.sendHeader("Location","/"); //跳转到网站根目录,如果没有当前就会404 server.send(303); } void handleRoot() { server.send(200, "text/html", " Change LED"); } server.on("/LED", HTTP_POST,handleLed); //https://blog.csdn.net/weixin_43031092/article/details/106794102 表单 表单其实就是输入数据提交之后跳转后另一个网页,也就是访问网站下的某个文件,然后实现定义好的server.on("/LED", HTTP_POST,handleLed); 就会响应,如果不需要数据只有按钮,就保留按钮即可,但是这样子会有一个问题就是本质上是页面跳转,还是会存在重复刷新整个主页的问题 void handleRoot() { server.send(200, "text/html", " "); } //https://blog.csdn.net/weixin_43031092/article/details/106794102 js-location 这个js案例展示的是js实现页面跳转,其实存在的问题和上面一样 String sendHTML (){ String htmlCode = ""; htmlCode = htmlCode + ""; htmlCode = htmlCode + ""; htmlCode = htmlCode + ""; htmlCode = htmlCode + " "; htmlCode = htmlCode + ""; htmlCode = htmlCode + ""; htmlCode = htmlCode + ""; return htmlCode; } void handleRoot() { WebServer.send(200, "text/html",sendHTML()); } WebServer.on("/ahead", handleAhead); void handleAhead(){ digitalWrite(DcMottoLeft,1); digitalWrite(DcMottoRight,1); WebServer.sendHeader("Location","/"); WebServer.send(303); } 8266可以将前端文件代码全部存储在flash中的。。这里只是为了这么展示看的更清楚,不然前端代码多了放在arduino.ino不利于代码阅读 js-XMLHttpRequest XMLHttpRequest这玩意可不得了,可以在后台进行数据首发,简单的说就是不用再全部重新加载整个网页了,但是我在用8266进行这么做的时候,发现一个问题,就是不知道为什么会多次传输数据。。。。但是大佬和教程都显示这XMLHttpRequest的send就发送一次。。。迷 WebServer.on("/", handleRoot); WebServer.on("/setMotor", handleMotor); String sendHTML(){ String htmlCode = ""; htmlCode = htmlCode + ""; htmlCode = htmlCode + ""; htmlCode = htmlCode + ""; htmlCode = htmlCode + " "; htmlCode = htmlCode + ""; htmlCode = htmlCode + ""; htmlCode = htmlCode + ""; return htmlCode; } void handleRoot(){ Serial.println("index!"); WebServer.send(200, "text/html", sendHTML()); } void handleMotor(){ String MotorState = WebServer.arg("MotorState"); Serial.println(MotorState); if(MotorState == "0"){ digitalWrite(DcMottoLeft,0); digitalWrite(DcMottoRight,0); Serial.println("0"); } else if(MotorState == "1"){ //Left digitalWrite(DcMottoLeft,0); digitalWrite(DcMottoRight,1); } else if(MotorState == "2"){ //Right digitalWrite(DcMottoLeft,1); digitalWrite(DcMottoRight,0); } else if(MotorState == "3"){ //Ahead digitalWrite(DcMottoLeft,1); digitalWrite(DcMottoRight,1); } else { //Ahead Serial.print("Unknown state: "); Serial.println(MotorState); } } |
|
|
|
只有小组成员才能发言,加入小组>>
3314 浏览 9 评论
2995 浏览 16 评论
3494 浏览 1 评论
9059 浏览 16 评论
4088 浏览 18 评论
1179浏览 3评论
605浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
599浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2335浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1896浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 16:29 , Processed in 1.262380 second(s), Total 49, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号