吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3701|回复: 14
收起左侧

[C&C++ 原创] 智能控制内嵌网页WIFI重置密码及指令调试【原创】

[复制链接]
X5ZJ 发表于 2020-8-9 17:52
好久没发布了,一直忙不停,测试了很久,功能不断完善,测试已经稳定!
故今天写个帖子以分享!高手手下留情,不喜勿喷!违规则删!谢谢指导!
以前都是DIY别人的,由于各种原因,决定全套自力更生!!!纯属自学研究!
准备
1、智能网络模块(WIFI模块ESP8266-12S/12F)见底图
2、Arduino IDE 最新版 (1.8.13)

目的
1、通过固件访问内置网页可以进行重置WIFI密码 (见底图)
2、通过固件内嵌网页可以进行指令测试(通过网页模拟串口发送指令)


展示核心代码分享
[C++] 纯文本查看 复制代码
void HandleVal()
{
    handlenum++;
    if(handlenum>1)handlenum=-1;
    if(handlenum==0||handlenum==2)return;
    
    String wifis = server.arg("ssid"); //wifi名称
    String wifip = server.arg("password"); //wifi密码
    String testcmd=server.arg("cmd"); //命令测试
        
    wifis.trim();
    if(wifis!=""&&handlenum==1)
    {      
      Serial.println("Received webServer Config info:");Serial.println(wifis); Serial.println(wifip);
      WiFi.mode(WIFI_STA);
      WiFi.begin(wifis,wifip);//连接成功自动保存
      if((WiFi.status()== WL_CONNECTED))
      {
        strcpy(wifi_ssd,wifis.c_str());//名称复制 wifis       WiFi.SSID().c_str()
        strcpy(wifi_psw,wifip.c_str());//密码复制 wifip        WiFi.psk().c_str()
        rom_save();//保存wifi及模式参数 到EEPROM 断电记忆
        //ESP.reset();//重启
      }
    }
    
    testcmd.trim();//去掉前后空格
    if(testcmd!=""&&handlenum==1)
    {
      Serial.print("Recv Web Commond:");Serial.println(testcmd);
      doAction_local(testcmd);//与串口一致的执行函数(本地,网络,串口等统一到此中执行减少代码量)
      testcmd="";      
    }
}
/*****************************************************
 * 函数名称:handleNotFound()
 * 函数说明:响应失败函数
 * 参数说明:无
******************************************************/
void handleNotFound() {
    digitalWrite(led_PIN, 0);//指示灯LED_BUILTIN
    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);
    led2(500,8);//0.3s-3次循环-余1灭    
}
/*****************************************************
 * 函数名称:htmlConfig() 
 * 函数说明:web配置WiFi函数  (当智能配网失败时调用)
 * 参数说明:无
 * 调用方法 [b]setup[/b]()中进行初始化
******************************************************/
void htmlConfig()
{
    WiFi.mode(WIFI_AP_STA);//设置模式为AP+STA双模式
    digitalWrite(led_PIN, LOW);
    //IPAddress softLocal(192,168,128,1);
    //IPAddress softGateway(192,168,128,1);
    //IPAddress softSubnet(255,255,255,0);
    //WiFi.softAPConfig(softLocal, softGateway, softSubnet);
    String apName = ("9I"+(String)ESP.getChipId());  // 2 设置WIFI名称
    //const char *softAPName = apName.c_str();
    apssid= apName.c_str();
    WiFi.softAP(apssid, appassword);                  //账号密码123456
    //WiFi.softAP(ssid, passphrase, channel, ssid_hidden, max_connection)
    IPAddress myIP = WiFi.softAPIP();
    //Serial.print("AP Server IP:");Serial.println(myIP);
    if (MDNS.begin("esp8266")) {//hostString=esp8266
      Serial.println("web open url:esp8266.local or 192.168.4.1");
    }  
    server.on("/", handleRoot);                   //回调 html,请求
    server.on("/HandleVal", HTTP_GET, HandleVal); //连接
    server.onNotFound(handleNotFound);            //请求失败回调函数  (可选)
    server.begin();//开启服务器
    Serial.println("HTTP server started");
}


Loop()中循环监听
server.handleClient();//监听
(此模块本身可以实现AP配网,建议airkiss、esptouch配网,不推荐的暂不讲解)


内嵌网页代码(注意格式 文本较长,耐心修改 调试好后压缩代码注意引号处理)
[C++] 纯文本查看 复制代码
//写入内置网页配网专用(AP热点配网并保存EEPROM)超长字符串写法
String htmlstr = String("") +
"<!DOCTYPE html><html><head><meta charset=\"UTF-8\"><meta name=\"viewport\"content=\"width=device-width, initial-scale=1.0\"><meta http-equiv=\"X-UA-Compatible\"content=\"ie=edge\"><title>久爱物联智能配网</title>"+
"<style>body{background-color:#111;color: #fff;font-size:12px;padding:4px;marign:2px;text-align:center;}form{line-height:35px;min-height:200px;width:100%}.red{color:#f00} .grv{color:#ddd} ul li{text-align:left;line-height:25px;color:#aaa} ul{margin-top:30px} h2{margin-top:15%}  .btn{background-color:#0099CC;color:#fff;height:30px;padding:2px 4px;margin:2px;border:0}  fieldset{border:1px solid #afafaf} .btn2{background-color: #FF9900;color: #FFFFFF;height:30px;padding:2px 4px;margin:2px;border:0;width:60px}</style></head>"+
"<body><h2><span class=\"red\">重置WIFI密码</span>及<i>指令测试</i></h2><form name=\"my\" method=\"get\"><b>WiFi名称</b>: <input type=\"text\" name=\"s\" placeholder=\"输入您WiFi的名称\" id=\"wssid\"><br><b>WiFi密码</b>: <input type=\"text\" name=\"p\" placeholder=\"请输入您WiFi的密码\" id=\"wpwd\"><br><input type=\"button\" class=\"btn\" value=\"连接WIFI\" onclick=\"submitwifi();\"><br><span class=\"red\" id=\"tip\"></span>"+
"<fieldset><legend>模块内置指令测试</legend>指令:<input type=\"input\" name=\"txtcmd\" value=\"55 AA AA AA AA 81 BA 01\" id=\"cmd\"> <input type=\"button\" value=\"发送\" class=\"btn\" onclick=\"testcmd();\">"+
"</form><br><button type=\"button\" class=\"btn2\" value=\"55 AA AA AA AA 81 BA 01\" onclick=\"tov(this.value);\">一路</button><button type=\"button\" class=\"btn2\" value=\"55 AA AA AA AA 81 BA 02\" onclick=\"tov(this.value);\">二路</button>"+
"<button type=\"button\" class=\"btn2\" value=\"55 AA AA AA AA 81 BA 03\" onclick=\"tov(this.value);\">三路</button><button type=\"button\" class=\"btn2\" value=\"55 AA AA AA AA 81 BA 04\" onclick=\"tov(this.value);\">四路</button><br><span class=\"red\" id=\"cmdtip\">请输入模块指令</span></fieldset>"+
"<script language=\"javascript\">var xmlhttp=null;if (window.XMLHttpRequest){xmlhttp=new XMLHttpRequest();}else if (window.ActiveXObject){xmlhttp=new ActiveXObject(\"Microsoft.XMLHTTP\");}\r\nfunction submitwifi(){var ssid=document.getElementById(\"wssid\").value;var password=document.getElementById(\"wpwd\").value;if(ssid==''||password==''){document.getElementById('tip').innerHTML='账号和密码均不能为空!';return;}if (xmlhttp!=null){xmlhttp.open(\"GET\",\"/HandleVal?ssid=\"+ssid+\"&password=\"+password,true);xmlhttp.send(null);xmlhttp.onreadystatechange=state_Change;document.getElementById('tip').innerHTML='提交成功,模块自动连接';}}\r\nfunction state_Change(){if (xmlhttp.readyState==4){if (xmlhttp.status==200){document.getElementById('tip').innerHTML='OK';}else{document.getElementById('tip').innerHTML='SORRY...';}}}"+
"\r\nfunction testcmd(){var txtcmd=document.getElementById(\"cmd\").value;if(txtcmd==\"\"){document.getElementById(\"cmdtip\").innerHTML=\"测试指令不能为空!\";return;}if (xmlhttp!=null){xmlhttp.open(\"GET\",\"/HandleVal?cmd=\"+txtcmd,true);xmlhttp.send(null);document.getElementById('cmdtip').innerHTML='指令发送成功';}}"+
"function tov(v){document.getElementById(\"cmd\").value=v;document.getElementById('cmdtip').innerHTML='点击发送按钮';}</script>"+
"<ul><li>手机/电脑连接您的WIFI</li><li>手机/电脑浏览器输入模块IP地址</li><li>输入您的WIFI账号密码点击连接</li><li>连接成功后可以测试内部指令</li></ul>"+
"<div style=\"color:#ddd;text-align:center;width:100%;posiation:absolute;bottom:5px\">&#169; JIUAI 2020</div></body></html>";


头文件引用及实例声明
#include <WiFiClient.h>
#include <ESP8266WebServer.h>


ESP8266WebServer server(80);//端口80


实践 效果展示:

手机访问内嵌网页

手机访问内嵌网页

点击 一路 发送(就模拟4个功能)

打开一路

打开一路


欢迎交流,已实现功能!有时间继续分享!

功能

功能

云监控

云监控

云监控(萤石云实时画面)

温湿度曲线

温湿度曲线

温湿度曲线图(背景随温度变化--自定义颜色,频率10秒)


客户端完全通过h5(websocket)集成到公众号里面进行访问
用户权限认证暂未开通(通过ajax---云服务器认证---取token认证---各种操作)
内部权限认证是有的(注册包和身份必须认证通过才能操作控制)

测试设备

测试设备

客户端可以跨平台,随意调用,有WEB经验的可以二次开发!
行业内很多功能的集合,真正可以DIY属于自己的东西!!!
后续固件(约410KB)会更新发布!



免费评分

参与人数 3吾爱币 +2 热心值 +3 收起 理由
w12138250 + 1 谢谢@Thanks!
jinyi207 + 1 + 1 真的很牛
murrin + 1 + 1 鼓励转贴优秀软件安全工具和文档!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| X5ZJ 发表于 2020-8-10 09:58
Monitor 发表于 2020-8-10 09:16
完整的代码能开源吗?

另外感觉类似这个的吧?https://github.com/bilibilifmk/wifi_link_tool

亲不是这个哦。完全不一样的东西。我这通过内置网页配网的账号密码先保存到闪存里面,掉电记忆。下次直接使用新密码;当然也可以设置提交后立即连接新网络 看怎么使用了。此部分代码已经发布了哦。
且我写的功能 应该找不到同类的,因为这是完全自己独立开发的,多种方法组合,非常方便,web目的,手机模拟直接串口调试发送各种预设的指令
 楼主| X5ZJ 发表于 2020-8-9 23:20
Sync 发表于 2020-8-9 20:15
其实没看懂啊 这个

物联网模块(WIFI模块)内嵌一个网页,通过网页可以配置WIFI账号密码以及通过网页内部的按钮可以实现一些开关控制(和自定义各种指令下发 和串口、网络一样实现的功能)
BEASTARS 发表于 2020-8-9 17:59
liujieboss 发表于 2020-8-9 18:11
以前自己就实现了一点网络协议,这里直接进行实物化,羡慕。
murrin 发表于 2020-8-9 18:11
不错不错,支持一下
零度的轻吻 发表于 2020-8-9 19:58
感觉很厉害的
大和的风 发表于 2020-8-9 20:15
支持一下
Sync 发表于 2020-8-9 20:15
其实没看懂啊 这个
lxzxcvbnmlx 发表于 2020-8-9 20:20
不错不错,支持一下
canttona 发表于 2020-8-9 21:28
有心了,谢谢分享!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 23:32

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表