WiFi-ESP8266入门http(3-4)网页一键配网(1若为普通wifi直连 2若为西电网页认证自动网页post请求连接)+网页按钮灯控+MQTT通信...
网页一键配网(1若为普通wifi直连 2若为西电网页认证自动网页post请求连接)+网页按钮灯控+MQTT通信
工程连接:https://github.com/Dongvdong/ESP8266_HTTP_WEB_MQTT/tree/master/MQTT_http
主要目标
- 网页动态配网
- 网页认证模式的WIFI也能让ESP8266上网
未来完善:
1 加入网页判断,若为网页认证WIFI需要手动文本框输入 学号和密码(简单)
修改html加入两个文本框和一个判断,用于返回消息
2 现在固定测试的西电网页认证上网,其他的学校可能返回请求数据和http应该都不一样
http://10.255.44.33/srun_portal_pc.php?action=login&ac_id=1&user_ip=&nas_ip=&user_mac=&url=&username=+你的学号+&password=+你的密码;
蓝色是地址 红色是请求数据
这个数据是用电脑抓包软件得到的。
解决方法1: 每次有一个新的需要网页认证上网的WIFI,抓包分析,修改程序,新增网页请求
商用不可行---自己用随意
解决方法2: 远程OTA升级ESP8266程序固件
:商用也不可以,需要维护一个服务器,麻烦,总不能每次问下客户你要连的是哪个学校的,新增加这个学校的
解决方案3: 最好手机有个抓包软件,自动截取这些信息,网页返回给ESP8266构造新的HTTp请求。
前面蓝色地址,用户自己手机网页登陆认证上网成功后,网页框里就是这个地址,复制走就行了。
后面请求数据,鬼知道这些变量名都是什么。----暂时无解,先卡到这吧。有空在搞。
问题: 手机有个游览器,自动完成这些http请求和解析。 ESP8266只是一个10元的WIFI芯片,上面哪有游览器。
但是若是搞定了,10元就能拥有一个在wifi下随意部署的物联网节点。
(折腾这么多,还不如买个4g模块??? )
不,根据应用场景,选这个优势
1 价格便宜,且不用管电话卡短信月费
2 这本身就是个单片机,可以开发,还有WIFI,背后有arduino开源社区,各种现成的库调用,各种传感器模块对接教程。 4G模块只能转发给别的芯片来执行,然后又的对那个执行芯片(stm32等)开发写程序,研发成本高和时间长。
3 网络通信库强悍。 http,tcp/ip .mqtt,udp ,web 等网路通信库现成直接调用
4 懒,习惯了一个芯片,在满足需要求前提下,没那么多时间。
---------------------------------------------------------------------------------------------------------
构造这一样一个请求需要的数据
- /*网页认证上网post*/
- // String Referer="http://10.255.44.33/srun_portal_pc.php?ac_id=1&";
- // char* host = "10.255.44.33";
- // int httpPort = 80;
- // String host_ur = "srun_portal_pc.php";
- /*网页认证上网模式 */
- // String usr_name;//账号
- // String usr_pwd;//密码
- // String postDate = String("")+"action=login&ac_id=1&user_ip=&nas_ip=&user_mac=&url=&username=+"+usr_name+"&password="+usr_pwd;
------------------------------------------------------------------------------------------------------
实物测试:
1一块 esp8266 可供arduino开发的芯片,串口连接电脑
2 供测试的无线网络
一个普通的家庭路WIFI
wifiname: HUAWEI-H3VBKZ wifipwd: ************
一个网页认证模式上网的网络(网页输入学号和密码才能上网)
西电校园网:std-xdwlan
3 手机安装MQTT调试助手
4 一个部署在阿里云的MQTT服务器(主要用来测试ESP8266模块是否接正常入网络)
(显示屏和蜂鸣器没用)
程序和功能:
1 芯片上电,自动辐射WIFI
2 打开网页输入 IP 192.168.4.1 默认访问 / 请求
得到ESP8266返回的配网页面 index.html
这个配网网页 index.html 事先存在ESP8266的flash中,在工程同目录下 data文件夹
网页还有网页的其他布局信息 css 和 js
烧录程序后,需要单独上传到falsh中, 点击,上传时候板子的参数设置(根据版型选择,这里用的是
)
直接按钮,网页发送 “/pin”(网页写的功能,可修改)请求可以控制板载 D4口LED关和开。
根据前面设置,按钮请求 /pin 解析回调函数 handlepin()
灯的请求处理函数
3 一键配网
在下面输入要连接的wifi账号和密码
点击连接,网页 发出 “wifi/” 请求(网页功能,可修改html自定义功能)
触发回调函数handleWifi()
esp8266串口向电脑打印出信息
手机网页得到提示信息。
自动连接目标wifi,返回成功与否。
如果是普通家庭WIFI,直接连
如果是西电网页认证模式的WIFI(用西电测试,其余类似),再上一步基础上,自动额外发起网页认证。
前提: 有一个可以上网的学号和密码 (目前写死固定,后期做成网页文本框手动输入)
对应函数
void http_wifi(){// 西电网页认证上网信息 对应信息修改后,可连接别的类似网络http_request ruqest;ruqest.Referer="http://10.255.44.33/srun_portal_pc.php?ac_id=1&";ruqest.host = "10.255.44.33";ruqest.httpPort = 80;ruqest.host_ur = "srun_portal_pc.php";ruqest.usr_name="1601120383";//账号ruqest.usr_pwd="mimaHENFuzb";//密码 密码已修改 要-1ruqest.postDate = String("")+"action=login&ac_id=1&user_ip=&nas_ip=&user_mac=&url=&username=+"+ ruqest.usr_name+"&password="+ruqest.usr_pwd;if (hdulogin(ruqest) == 0) {Use_Serial.println("WEB Login Success!");}else {Use_Serial.println("WEB Login Fail!");}}
// 这个函数用来发起post请求 --可通用
int hdulogin(struct http_request ruqest) {WiFiClient client;if (!client.connect(ruqest.host, ruqest.httpPort)) {Use_Serial.println("connection failed");return 1;}delay(10);if (ruqest.postDate.length() && ruqest.postDate != "0") {String data = (String)ruqest.postDate;int length = data.length();String postRequest =(String)("POST ") + "/"+ruqest.host_ur+" HTTP/1.1\r\n" +"Host: " +ruqest.host + "\r\n" +"Connection: Keep Alive\r\n" +"Content-Length: " + length + "\r\n" +"Accept: */*\r\n" +"Origin: http://"+ruqest.host+"\r\n" +"Upgrade-Insecure-Requests: 1"+"\r\n" +"Content-Type: application/x-www-form-urlencoded;" + "\r\n" +"User-Agent: zyzandESP8266\r\n" +"Accept-Encoding: gzip, deflate"+"\r\n" +"Accept-Language: zh-CN,zh;q=0.9"+"\r\n" + "\r\n" +data + "\r\n";client.print(postRequest);delay(600);//处理返回信息String line = client.readStringUntil('\n');while (client.available() > 0) {line += "\r\n"+client.readStringUntil('\n');}Use_Serial.println(line);client.stop();if (line.indexOf("时间") != -1 || line.indexOf("登陆") != -1) { //认证成功return 0;Use_Serial.println("time ----------- find ");}else {return 2;}}client.stop();return 2;
}
4 连接WIFI成功后,直接自动连接MQTT服务器
这是一个部署在公网的mqtt服务器
订阅话题 “/test” 手机往这丢消息 ,esp8266从这拿消息。
esp8266只要一从这个话题上收到消息,就执行回掉函数
回电函数就干一件事,像电脑串口打印数据(里面可自定义功能)
拿起手机发消息往 "/test" 话题下丢消息
ESP8266收到后,串口打印出来(不支持中文打印,乱码)
转载于:https://www.cnblogs.com/kekeoutlook/p/9625374.html
WiFi-ESP8266入门http(3-4)网页一键配网(1若为普通wifi直连 2若为西电网页认证自动网页post请求连接)+网页按钮灯控+MQTT通信...相关推荐
- ESP8266开发、ESP8266连接阿里云物联网、天猫精灵控制esp8266、esp8266一键配网、智能家居
ESP8266开发.ESP8266连接阿里云物联网.天猫精灵控制esp8266.esp8266一键配网.智能家居 项目介绍 最近会 将arduino IDE开发ESP8266中一些值得记录得部分写下来 ...
- 物联网ESP8266 WIFI SoftAP模式一键配网,开源源码,测试OK可以直接使用
1.创作起因:网上找了很久,都没有关于ESP8266 WIFI通过softap方式配网开源例程,基本都是smartconfig airkiss方式一键配网,这种方式受手机.路由器等兼容性影响,配 ...
- esp8266 wifi模组手机一键配网,配置一次,下次重启设备后不需再进行配网
编写时间:2018年9月2日 #define ATCMDLEN 20 extern uint8_t usart3RecvEndFlag; extern UART_HandleTypeDef hu ...
- STM32+ESP8266+MQTT微信小程序SoftAP一键配网接入腾讯物联网平台
STM32+ESP8266+MQTT微信小程序SoftAP一键配网接入腾讯物联网平台 Wi-Fi 配网,指由外部向 Wi-Fi 设备提供 SSID 和密码(PSW),让 Wi-Fi 设备可以连接指 ...
- 【腾讯连连 腾讯物联网入门学习 第3篇】安信可IoT微信小程序全面开源,小程序上实现一键配网+控制+绑定!(源码开放)
文章目录 一.简介 二.开发指导 2.1 腾讯物联开发平台配置 2.2 微信小程序导入步骤 三.设备开发 3.1 AT直连对接 3.2 SDK二次开发 四.本人开源微信物联网控制 一览表 另外,不要把 ...
- ESP8266_21基于ESP8266的一键配网
ESP8266_01搭建开发环境 ESP8266_02程序的编译与下载 ESP8266_03SDK与Makefile的基本用法 ESP8266_04管脚控制与软件定时器 ESP8266_05 ESP8 ...
- Esp8266进阶之路17 esp8266自研的快速上电开关五次 (开-关为一次) ,无需按键触发则8266进去一键配网模式。(附带Demo)
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 序号 SDK版本 内容 链接 1 nonos2.0 搭建 ...
- 安信可分享 | 分享一个基于airkiss协议的配网小程序,实现小程序一键配网安信可ESP32C3\ESP8266\ESP32\ESP32S2系列的模组。(附带源码)
文章目录 一.关于 WeChatAirkiss 1.1 应用场景 二.airkiss 简介 三.开始使用 四.API说明 五.FAQ 六.开源微信物联网控制一览表 联系我们 一.关于 WeChatAi ...
- Esp8266学习之旅⑥ 了解SmartConfig与Airkiss一键配网,给8266一键配网上云端。(带Demo)
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 序号 SDK版本 内容 链接 1 nonos2.0 搭建 ...
最新文章
- php vendor 删除,yii2我删除了vendor目录,然后重新composer install composer update就不行了。。。...
- 院士论坛 | 郭毅可院士:人工智能的热望与冷思考
- 实时通信技术之websocket
- python 12 socket 编程
- Angular中调用css3动画实现侧边栏的显示与隐藏
- 六、WebApp 二手信息站点页面制作(IVX 快速开发教程)
- swagger内部类_API管理工具Swagger介绍及Springfox原理分析
- 斐波那契数列求解+尾递归
- eclipse启动速度等优化设置
- 搭建简单Django服务并通过HttpRequester实现GET/POST http请求提交表单
- Macbook pro wifi连接无线路由不稳定掉线的解决办法
- 澳门大学物联网设计方法研究获“973”立项
- 自定义线程池-c#的简单实现
- C++解析char *p与char p[]
- 什么是CSS网页切图
- RS导出Excel交叉表角对应的列占用多列问题
- 移动硬盘文件乱码是怎么回事?数据还能恢复吗
- 【RPA】UIpath Academy BA篇
- 第二章 第二课 Scratch作品:一闪一闪亮晶晶(自己画角色)
- Wi-Fi 安全协议
热门文章
- python学习之人民币兑美元之间的转换
- spring 配置context:component-scan base-package=” ”/
- 生鲜配送企业如何高效管理订单,为企业降本增效?
- 百万前端之js通过链接生成二维码可以保存下载复制
- 高质量前端快照方案:来自页面的「自拍」
- Elasticsearch Kibana Filebeat开启SSL通信
- iOS截屏后仿今日头条实现一键分享
- About 9.18 This Week
- 脉冲成形matlab代码,[转]MATLAB信号处理仿真-基带脉冲成形的数字滤波器
- win10系统如何设置局域网服务器,小编解决win10系统设置局域网的解决方法