首先感谢aqxgm的WIFI时钟例子:
http://bbs.mydigit.cn/read.php?tid=2283077 在复刻了这个版本的同时,加入光感应亮度调节,最重要是通过建立TCP服务器,与时钟可以进行双向通讯,从而可以很方便地通过手机进行控制点钟时钟,修改包括SSID,时区,SNTP服务器在内的各项参数,具备了通用性,且扩展性强。在这个基础上,
使得这个点阵时钟从个人DIY到具备商品化的可能。 基本工作流程逻辑为:1. 时钟启动,读取set.log配置文件中的SSID名和密码,连接WIFI网络
2. 如果连接成功,则通过SNTP服务器获取时间。
3. 如果连接失败,则自动重启,然后创立一个热点。
4. 使用手机连接热点,使用手机端的app,或者任意tcp客户端工具,可以连接到时钟的TCP服务器,更新set.log配置文件内的ssid来连接WIFI网络。
5. 时钟重启,连接wifi,获取网络时间,此时手机端的app同样也可连接到时钟建立的TCP服务器,来修改配置文件。
惯例先上几张图: 网络拓扑和通信简图:
使用APP控制时钟的视频(目前可以修改SSID名字,密码,时区以及SNTP服务器):
flash: http://player.youku.com/player.php/sid/XMzMzMjc5NTU4NA==/v.swf 附上Lua TCP服务器的脚本。根据需要可以自行添加更多命令。ESP8266使用“set.log"保存各项配置,通过与TCP服务器通讯可以对配置文件进行更新。
- srv=net.createServer(net.TCP, 30)
- srv:listen(8080,function(conn)
-
- conn:on("receive",function(conn,payload)
- if (payload == "cmd|restart") then
- conn:send("OK|system will restart")
- node.restart() --restart system
- elseif (string.sub(payload,1,11) == "cmd|acquire") then
- if file.open("set.log", "r") then
- set = string.gsub(file.read(),string.char(10),"")
- end
- conn:send(set)
- elseif (string.sub(payload,1,7) == "cmd|set") then
- file.open("set.log", "w+")
- file.writeline(string.sub(payload,9,-1))
- file.close()
- conn:send("OK|setting stored")
- message = 2
- tmr.alarm(3, 3000, tmr.ALARM_SINGLE, function()
- wifi.setmode(wifi.STATION)
- node.restart()
- end)
- else
- conn:send("OK|client time is|"..rtctime.get())
- end
- end)
-
- conn:on("disconnection",function(c)
- -- uart.on("data")
- end)
- end)
待继续更新。。。
[ 此帖被ppxiaop在2018-01-19 17:30重新编辑 ]