|
爱科技、爱创意、爱折腾、爱极致,我们都是技术控
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 28674500 于 2019-12-30 16:18 编辑
本人是一个完全不懂Arduino的人,为了使彩屏天气万年历时钟可以使用手机配网,足足问了度娘三天。。。
本程序仅做测试,有问题我也不会修复,目前自己测试正常。刷入后,手机会搜素到一个热点:TANG_CLOCK,密码:88888888
连接后自动弹出WiFi配网界面,选择第一个输入WiFi密码即可。
程序有BUG。刷完程序正常用手机配网,接收时间天气正常,如果重启家里WiFi,中间隔一段时间没有WiFi,程序会中断显示[HTTP] GET... failed, error: connection refused。重启WiFi模块,需要重新配网才正常。意思就是:重启自家WiFi需要重启彩屏天气万年历时钟并重新用手机配网。
。。。。。。。。。。。。哪位大神帮忙修改一下。。。。。。。。。。。
参考了以下几位大神的贴子:
[综合] 仿制坛友落叶风《自动授时128*64LED彩屏天气万年历时钟》(2月27日更新)
[STM] 制作自动授时128*64LED彩屏天气万年历时钟(最新版开源)
[STM] (2月26日再次更新)自动授时128*64LED彩屏天气万年历时钟主程序更新及制作...
英文地址:https://github.com/tzapu/WiFiManager/tree/development
翻译中文地址:https://www.kutu66.com//GitHub/article_126804
工作原理- 当ESP启动时,它将设置为站模式,并尝试连接到以前保存的访问点
- 如果( 或者未保存以前的网络) 不成功,它将ESP移动到接入点模式并启动一个DNS和服务器端( 默认 ip 192.168.4.1 )
- 在浏览器( 电脑,电话,平板电脑) 连接到新创建的访问点时使用任何启用的wifi设备
- 由于受住门户和DNS服务器,你可以获得'加入网络'类型的弹出式或者获取任何你尝试访问的域。
- 选择扫描点之一,输入密码,单击保存
- ESP将尝试连接。 如果成功,它将控制权放弃到你的应用程序。 如果没有,重新连接到AP并重新配置。
TANG_CLOCK.rar
(2.16 KB, 下载次数: 30)
以下是我修改的代码,需要安装WiFiManager库:
- #include <ESP8266WiFi.h>
- #include <DNSServer.h>
- #include <ESP8266WebServer.h>
- #include <WiFiManager.h>
- #include <ESP8266WiFiMulti.h>
- #include <ESP8266HTTPClient.h>
- #define USE_SERIAL Serial
- ESP8266WiFiMulti WiFiMulti;
- String stringOne, stringTwo, stringThree,stringnew;
- int jisu,congxindu;
- void setup() {
- USE_SERIAL.begin(115200);
- // USE_SERIAL.setDebugOutput(true);
- USE_SERIAL.println();
- USE_SERIAL.println();
- USE_SERIAL.println();
- for(uint8_t t = 4; t > 0; t--) {
- USE_SERIAL.printf("[SETUP] WAIT %d...\n", t);
- USE_SERIAL.flush();
- delay(1000);
- }
- WiFiManager wifiManager;
- wifiManager.autoConnect("TANG_CLOCK", "88888888");
- USE_SERIAL.println("connected...yeey :)");
- }
- void loop() {
- int i,lastStringLength;
- int ListItem,ListItemend;
- int ListItem2,ListItemend2;
- String string1="[Timetianqi1] 今天天气实况:";
- String string2,string3;
- // wait for WiFi connection
- jisu++;
- if(jisu>360)jisu=0;//天气每30分钟一次,时钟每5秒一次
- //USE_SERIAL.println(jisu);
- if((WiFiMulti.run() == WL_CONNECTED)) {
- HTTPClient http;
- USE_SERIAL.print("[HTTP] begin...\n");
- // configure traged server and url
- if(jisu==3 || congxindu==1)
- {//天气接收
- http.begin("http://i.tianqi.com/index.php?c=code&a=getcode&id=3&py=huidong1");
- }
- else
- {//提取时间
- if(jisu==2)
- {//用于提取当前天气参数
- http.begin("http://i.tianqi.com/index.php?c=code&a=getcode&id=102&py=huidong1");
- }
- else
- {
- http.begin("http://quan.suning.com/getSysTime.do");//苏宁的时间api
- }
- }
-
- USE_SERIAL.print("[HTTP] GET...\n");
- // start connection and send HTTP header
- int httpCode = http.GET();
- // httpCode will be negative on error
- if(httpCode > 0) {
- // HTTP header has been send and Server response header has been handled
- USE_SERIAL.printf("[HTTP] GET... code: %d\n", httpCode);
- // file found at server
- if(httpCode == HTTP_CODE_OK) {
- String payload = http.getString();
- //USE_SERIAL.println(payload);
-
- if(jisu==3 || congxindu==1)
- {//天气接收
- //以下为接收到的天气,进行组合文字,文字如下:今天天气实况:晴,最低温度:10℃,最高温度:20℃,气温:14℃;风向/风力:
- //西南风 1级;湿度:65%,紫外线强度:中等。明天:晴转多云,12℃/22℃。后天:多云,12℃/22℃。
- //USE_SERIAL.println(lastStringLength);
- lastStringLength=payload.length();
- if(lastStringLength>900)//字数需大于1000才行,如小于这值,报错
- {
- ListItem =0;
- ListItemend =0;
- ListItem = payload.indexOf("今天天气", ListItem + 1);
- ListItemend = payload.indexOf("</div>", ListItem + 1);
- ListItemend = payload.indexOf("</div>", ListItemend + 1);
- string2=payload.substring(ListItem, ListItemend);
- ListItem2= string2.indexOf(">", ListItem2 + 1);
- ListItem2= string2.indexOf(">", ListItem2 + 1);
- string3=string2.substring(ListItem2+1);
- string1=string1+string3+";风向/风力:";
- ListItem = payload.indexOf("<div class="wtwind"", ListItem + 1);
- ListItemend = payload.indexOf("</div>", ListItem + 1);
- string2=payload.substring(ListItem+20, ListItemend);
- string1=string1+string2+";最高温度:";
- ListItem = payload.indexOf("<div class="wttemp">", ListItem + 1);
- ListItemend = payload.indexOf("</div>", ListItem + 1);
- string2=payload.substring(ListItem+39, ListItemend);
- ListItemend2=string2.indexOf("<", 0);
- string3=string2.substring(0,ListItemend2);
- string1=string1+string3+";最低温度:";
- ListItem2= string2.indexOf(">",ListItemend2);
- ListItem2= string2.indexOf(">", ListItem2 + 1);
- ListItemend2=string2.indexOf("<", ListItem2+1);
- string3=string2.substring(ListItem2+1,ListItemend2);
- string1=string1+string3+";"+stringnew+" 明天:";
-
-
- //明天天气
- ListItem = payload.indexOf("明天天气", ListItem + 1);
- ListItemend = payload.indexOf("</div>", ListItem + 1);
- ListItemend = payload.indexOf("</div>", ListItemend + 1);
- string2=payload.substring(ListItem, ListItemend);
- ListItem2 =string2.indexOf("">", 0);
- string3=string2.substring(ListItem2+2);
- string1=string1+string3+",";
- ListItem = payload.indexOf("<div class="wtwind">", ListItem + 1);
- ListItemend = payload.indexOf("</div>", ListItem + 1);
- string2=payload.substring(ListItem+20, ListItemend);
- string1=string1+string2+",";
- ListItem = payload.indexOf("<div class="wttemp">", ListItem + 1);
- ListItemend = payload.indexOf("</div>", ListItem + 1);
- string2=payload.substring(ListItem+39, ListItemend);
- ListItem2= string2.indexOf("">",0);
- ListItemend2=string2.indexOf("</", ListItem2+1);
- string3=string2.substring(ListItem2+2,ListItemend2);
- string1=string1+string3+"/";
- ListItemend2=string2.indexOf("</", 0);
- string3=string2.substring(0,ListItemend2);
- string1=string1+string3+"。 后天:";
-
- //后天天气
- ListItem = payload.indexOf("后天天气", ListItem + 1);
- ListItemend = payload.indexOf("</div>", ListItem + 1);
- ListItemend = payload.indexOf("</div>", ListItemend + 1);
- string2=payload.substring(ListItem, ListItemend);
- ListItem2 =string2.indexOf("">", 0);
- string3=string2.substring(ListItem2+2);
- string1=string1+string3+",";
- ListItem = payload.indexOf("<div class="wtwind">", ListItem + 1);
- ListItemend = payload.indexOf("</div>", ListItem + 1);
- string2=payload.substring(ListItem+20, ListItemend);
- string1=string1+string2+",";
- ListItem = payload.indexOf("<div class="wttemp">", ListItem + 1);
- ListItemend = payload.indexOf("</div>", ListItem + 1);
- string2=payload.substring(ListItem+39, ListItemend);
- ListItem2= string2.indexOf("">",0);
- ListItemend2=string2.indexOf("</", ListItem2+1);
- string3=string2.substring(ListItem2+2,ListItemend2);
- string1=string1+string3+"/";
- ListItemend2=string2.indexOf("</", 0);
- string3=string2.substring(0,ListItemend2);
- string1=string1+string3+"。 **";
- USE_SERIAL.println(string1);//发送数据
- }
- else
- {
- string1="[Timetianqi1] 天气接收出错! **";
- USE_SERIAL.println(string1);//发送数据
- }
- congxindu=0;
- }
- else
- {
- if(jisu==2 )
- {//组合当前天气参数
- lastStringLength=payload.length();
- ListItem =0;
- ListItemend =0;
- ListItem = payload.indexOf("<h4><b>", ListItem + 1);
- ListItemend = payload.indexOf("</b><i>℃</i>", ListItemend + 1);
- string2="气温:"+payload.substring(ListItem+7, ListItemend)+"℃;";
- ListItem = payload.indexOf("相对湿度", ListItem + 1);
- ListItemend = payload.indexOf("%</em>", ListItemend + 1);
- string2=string2+payload.substring(ListItem, ListItemend)+"%;";
- ListItem = payload.indexOf("紫外线指数", ListItem + 1);
- ListItemend = payload.indexOf("</span>", ListItemend + 1);
- stringnew=string2+payload.substring(ListItem, ListItemend)+"。";
- }
- else
- {//组合时间
- ListItem2=0;
- ListItemend2=0;
- ListItem2 =payload.indexOf("sysTime1");
- string2=payload.substring(ListItem2);
- string3=string2.substring(11,15)+'-';//年
- string3=string3+string2.substring(15,17)+'-';//月
- string3=string3+string2.substring(17,19)+" 0 ";//日
- string3=string3+string2.substring(19,21)+":"+string2.substring(21,23)+":"+string2.substring(23,25)+"**";
- string3="[Timetianqi2] "+string3;
- USE_SERIAL.println(string3);
- }
-
- }
- }
-
- }
- else
- {
- USE_SERIAL.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
- if(jisu==3)
- {
- congxindu=1;
- }
- }
- http.end();
- }
- delay(5000);
-
- }
复制代码 以下是一些制作的图片
5元打回来的板,一共5张
脱焊
刚好发现S7的壳子很硬,用它做一个框框
12v转5V的充电板
环境亮度很足的时候测试0.7-0.8安左右
环境亮度不足的时候测试0.3-0.4安左右
温湿度传感器和光敏电阻
再发一个之前做的创意旋转时钟
end
补充内容 (2020-1-1 09:56):
楼下有更新代码 |
打赏
-
查看全部打赏
|