学习和使用ESP8266,在ardoinoIDE写程序一个多月了。

刚开始看代码时,由于水平比较低,

分析代码比较难,

所以,在一边学习时,一边用思维导图去分析代码。

分析完,感觉思路有些清晰,

希望这个思维导图对一些初学者有些参考意义。

#include <ESP8266WiFi.h>
#include <DNSServer.h>
#include <ESP8266WebServer.h>const char* AP_NAME = "qyz-SET-WIFI";//写入自己设计的wifi名字
//暂时存储wifi账号密码
char sta_ssid[32] = {0};
char sta_password[64] = {0};//配网页面代码
const char* page_html = "\
<!DOCTYPE html>\r\n\
<html lang='en'>\r\n\
<head>\r\n\<meta charset='UTF-8'>\r\n\<meta name='viewport' content='width=device-width, initial-scale=1.0'>\r\n\<title>Document</title>\r\n\
</head>\r\n\
<body>\r\n\<form name='input' action='/' method='POST'>\r\n\qyz设计测试: <br>\r\n\ wifi名称: <br>\r\n\<input type='text' name='ssid'><br>\r\n\wifi密码:<br>\r\n\<input type='text' name='password'><br>\r\n\<input type='submit' value='保存'>\r\n\</form>\r\n\
</body>\r\n\
</html>\r\n\
";const byte DNS_PORT = 53;//DNS端口号
IPAddress apIP(192, 168, 4, 1);//esp8266-AP-IP地址
DNSServer dnsServer;//创建dnsServer实例
ESP8266WebServer server(80);//创建WebServervoid handleRoot() {//访问主页回调函数server.send(200, "text/html", page_html);
}void handleRootPost() {//Post回调函数Serial.println("handleRootPost");if (server.hasArg("ssid")) {//判断是否有账号参数Serial.print("got ssid:");strcpy(sta_ssid, server.arg("ssid").c_str());//将账号参数拷贝到sta_ssid中Serial.println(sta_ssid);} else {//没有参数Serial.println("error, not found ssid");server.send(200, "text/html", "<meta charset='UTF-8'>没有输入1error, not found ssid");//返回错误页面return;}//密码与账号同理if (server.hasArg("password")) {Serial.print("got password:");strcpy(sta_password, server.arg("password").c_str());Serial.println(sta_password);} else {Serial.println("error, not found password");server.send(200, "text/html", "<meta charset='UTF-8'>没有输入2error, not found password");return;}server.send(200, "text/html", "<meta charset='UTF-8'>保存成功");//返回保存成功页面delay(2000);//连接wificonnectNewWifi();
}void initBasic(void){//初始化基础Serial.begin(115200);WiFi.hostname("Smart-ESP8266");//设置ESP8266设备名
}void initSoftAP(void){//初始化AP模式WiFi.mode(WIFI_AP);WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0));if(WiFi.softAP(AP_NAME)){Serial.println("ESP8266 SoftAP is right");}
}void initWebServer(void){//初始化WebServer//server.on("/",handleRoot);//上面那行必须以下面这种格式去写否则无法强制门户server.on("/", HTTP_GET, handleRoot);//设置主页回调函数server.onNotFound(handleRoot);//设置无法响应的http请求的回调函数server.on("/", HTTP_POST, handleRootPost);//设置Post请求回调函数server.begin();//启动WebServerSerial.println("WebServer started!");
}void initDNS(void){//初始化DNS服务器if(dnsServer.start(DNS_PORT, "*", apIP)){//判断将所有地址映射到esp8266的ip上是否成功Serial.println("start dnsserver success.");}else Serial.println("start dnsserver failed.");
}void connectNewWifi(void){WiFi.mode(WIFI_STA);//切换为STA模式WiFi.setAutoConnect(true);//设置自动连接WiFi.begin();//连接上一次连接成功的wifiSerial.println("");Serial.print("Connect to wifi");int count = 0;while (WiFi.status() != WL_CONNECTED) {delay(500);count++;if(count > 10){//如果5秒内没有连上,就开启Web配网 可适当调整这个时间initSoftAP();initWebServer();initDNS();break;//跳出 防止无限初始化}Serial.print(".");}Serial.println("");if(WiFi.status() == WL_CONNECTED){//如果连接上 就输出IP信息 防止未连接上break后会误输出Serial.println("WIFI Connected!");Serial.print("IP address: ");Serial.println(WiFi.localIP());//打印esp8266的IP地址server.stop();}
}void setup() {initBasic();connectNewWifi();
}void loop() {server.handleClient();dnsServer.processNextRequest();
}

用思维导图分析代码(arduino用WEB网页-输入WIFI名与密码 )让初学者轻松搞懂程序的运作流程。相关推荐

  1. ce 扫雷实验报告,棋盘布局,雷数,笑脸,计时器内存地址,思维导图分析

    ce 扫雷实验报告,棋盘布局,雷数,笑脸,计时器内存地址,思维导图分析.. 如果有帮到大家,哥哥姐姐不要吝啬点个关注呗!后续会更新更多其他有关汇编,逆向和web的实操超详细解析.谢谢大家! 目录 一. ...

  2. 思维导图分析http之前端组成

    思维导图分析http前端组成 全文总览 本文分为三个部分:前端组成,http协议,http服务器应用程序.http的应用按照我自己的理解分为前端应用以及后端应用,所以我分别写了前端组成以及http服务 ...

  3. sql 百分号_SQL思维导图和代码分享

    本人SQL新手,五一期间自学了<SQL必知必会>一书,在此简要分享学习心得,若有差错,请各位大佬们多多指教呀! 本人的SQL学习计划是先根据<SQL必知必会>一书入门,了解SQ ...

  4. 如何通过思维导图分析问题的6款优秀模板鉴赏

    "创新从模仿开始",要画好思维导图,就要多赏析模仿一些优秀的思维导图模板.接下来列举了一些我在日常工作生活中经常使用的优秀思维导图模板,大家一起来模仿学习吧! 1.六顶思考帽 从名 ...

  5. MySQL基础 笔记、思维导图、代码

    MySQL登录方式 2种 : 1.自带的客户端登录 2.使用命令行语句登录 cmd 以管理员方式打开 输入命令如下: mysql [-h 127.0.0.1] [-P 3306] -u root -p ...

  6. 【精益生产】用思维导图分析精益生产体系,完整科学

    精益生产的实质是管理过程,包括人事组织管理的优化,大力精简中间管理层,进行组织扁平化改革,减少非直接生产人员:推进行生产均衡化同步化,实现零库存与柔性生产:推行全生产过程(包括整个供应链)的质量保证体 ...

  7. xdeepfm算法思维导图与代码

    代码

  8. wide_and_deep 思维导图和代码

    代码下载

  9. deepfm算法思维导图和代码

    代码下载

最新文章

  1. 二叉搜索树的第k个节点java_剑指Offer62:二叉搜索树的第k个结点(Java)
  2. python程序设计报告-20192116 实验一《Python程序设计》实验报告
  3. [算法]——归并排序(Merge Sort)
  4. xml python gb2312_使用Python处理XML格式数据的方法介绍
  5. boost::fusion::unfused_typed用法的测试程序
  6. 必须理解的分布式系统中雷同的集群技术及原理
  7. mac抹掉磁盘重装系统未能与服务器取得联系_【工具】mac笔记本rm -rf 后 如何恢复删除的文件...
  8. html用dom显示xml,html DOM文件引用一个XML文件将不会在浏览器中打印
  9. 局域网linux唤醒windows,局域网唤醒 (WOL - Wake on LAN) | 远程启动计算机- ManageEngine OpUtils...
  10. win10安装python3_win10 64位肿么安装python3.x
  11. Jquery获取列表中的值和input单选、多选框控制选中与取消
  12. Mac系统升级后导致AS不能使用SVN
  13. 解决Flutter出现Warning: Mapping new ns http://schemas.android.com/repository/android/common/02 to 问题
  14. 微信小程序学习笔记(二)模板与配置
  15. 相关性 与 相干性 那些事
  16. sled11下cscope工具用于阅读内核源码
  17. 三极管简介及其使用注意事项
  18. others_shellcode
  19. 金立手机官网已无法访问 正式进入破产程序
  20. FT2000盒子运行ubuntu20.04系统

热门文章

  1. 神经网络(深度学习)----MLPClassifier库的初尝试
  2. 强大的万年历微信小程序源码下载支持多做流量主模式
  3. 数商云家电商城系统解决方案,优化电器商城采购供应链管理,减低库存提升资金利用率
  4. 曼彻斯特编码|查分曼彻斯特编码|不归零码
  5. 【转载】----Mysql日志解析
  6. JAVA智慧公寓系统演示录屏2021计算机毕业设计Mybatis+系统+数据库+调试部署
  7. braintree支付开发整合paypal
  8. 下班后四小时,决定你的精神颜值
  9. EMMC TLC MLC 的区别
  10. Appium+python自动化(六)- 连接模拟器并启动淘宝APP(超详解)