玩转单片机!基于ESP8266模块的WIFI点阵时钟制作
用ESP8266模块制作的网络授时点阵时钟
美图镇楼
楼主是一名业余的单片机爱好者,做过许多各种各样的时钟,能看过眼去的都发在了本版,还蒙版主厚爱给过精华。可是至今也没有做出一个十分满意的“作品”来。因为做的每个时钟都有这样那样的缺点, DS1302并不太准确;DS3231要好一点但还是有误差(其实也够用了);GPS授时倒是准了,但是要拖一根GPS天线到室外,不够整洁。一直想DIY一个准确、简洁的时钟治愈我的“强迫症”,苦于一直没有找到好的方案。
在一个月黑风高的晚上我偶然地发现了物联网模块ESP8266,能连接WIFI,竟然还集成了32位的单片机,关键还是白菜价,简直就是神器啊!就想着用它来做一个从网络获取时间的时钟,这样只要有网络,时间就准确无误,再也不用纠结了。
1: 认识ESP8266
ESP8266是上海乐鑫(ESPRESSIF)生产的WI-FI低功耗芯片,是业内集成度最高的 Wi-Fi 芯片,封装尺寸仅为 5mm x 5mm。 ESP8266EX 高度集成了天线开关、射频 balun、功率放大器、低噪放大器、过滤器和电源管理模块,仅需很少的外围电路,可将所占 PCB 空间降到最低。ESP8266EX 内置 Tensilica L106 32 位微型控制器 (MCU),具有超低功耗和 16 位RSIC,时钟速度最高可达 160 MHz。支持实时操作系统 (RTOS),目前 Wi-Fi 协议栈只用了 20% 的 MIPS,其他均可用于用户编程和开发。ESP8266EX 专为移动设备、可穿戴电子产品和物联网应用而设计,通过多项专有技术实现了最低功耗。ESP8266EX 有三种运行模式:激活模式、睡眠模式和深度睡眠模式,能够延长电池寿命。(PS:这段是抄的)
当然了,只有芯片是没法玩的,网上有和外围电路一起封装好的模块。还有基于这些模块的开发板,板载USB转串口电路,只要用MicroUSB线(安卓手机数据线)连接电脑就可以调试了。方便好用价格也不贵。
Esp8266模块
Esp8266开发板
为便于理解,我们可以把ESP8266模块看作一个可以连接WIFI的单片机。但是要玩转这片小小的板子,却没有想像中那么简单。模块的编程和51单片机有很大的区别,需要从头开始学起,没有找到系统的教程,只好从网络上多如牛毛的信息中提取所需要的知识点,用蚂蚁啃骨头的精神,一点点攻克难关,终于实现了想要的功能。在这里分享一下个人的一些不成熟经验,有兴趣的同好可以参考一下。
2:流行的几种开发方式
AT指令:模块通过串口与上位机连接,上位机发出指令,模块收到指令后做出响应。可以用PC端的串口助手调试。当然也可以用另一片单片机做上位机,不过放着模块集成的32位MCU不用,再用51之类的8位单片机驱动的话就有点小马拉大车了。
NodeMCU:运行于ESP8266模块上的一种固件,该固件提供一些封装好的模块(API),直接调用就可以了。使用LUA语言编程。
Arduino:模块可以在Arduino环境下调试,有基础的同学可以使用此方式。本菜鸟没玩过Arduino,只是按教程简单试了一下,发现编译下载好慢。
几种方法都试了试,发现最适合自己的是NodeMCU。LUA语言与C有共通之处,很快就能适应了。还有现成的API,一些复杂的功能用几行代码就能实现。
3:刷NodeMCU固件
买来模块后需要刷入NodeMCU固件,NodeMCU的源代码发布在Github网站,但是要编译成可刷入模块的bin固件,需要在陌生的Linux环境下,没有Linux基础貌似玩不转。
好在像作者这样的菜鸟可以在线订制固件,打开http://nodemcu-build.com/,留下自己的Email,根据自己的需要选择相应的模块和版本。等会就收到订制好的固件了。
刷入固件用的工具从这里下载https://github.com/nodemcu,按住Flash键不放,把模块接入USB,选好COM口和要刷入的固件,速度不要选的太高,可能会刷入失败,用哪个波特率自己多试几次就好。
固件刷好后,就可以开心的玩了。开发软件个人建议使用Esplorer,此软件需要安装JAVA。试一下第一句程序:print(“Hello NodeMCU!”),模块正常的话会显示Hello NodeMCU!
试试node.restart(),重新启动一下模块,会显示当前固件的版本、生成时间、包含模块等信息。
最新的NODEMCU固件支持可变波特率,不再局限于9600bps。比如可以在Esplorer里把波特率改为57600。如下图:
至此开发环境搭建完毕,可以试着先把模块连接到家里的WIFI,网上有例程,把SSID和密码改成自己的,运行一下就能连接了。
4:从Internet获取时间
关于从网络获取标准时间,先试了试获取百度网站返回的HTTP头,里面包含当前的日期时间等数据,提取一下就好,但是有网友说这个时间也不是十分的准确。
后来发现NodeMCU包含SNTP模块,是专门干校准时间这活的。并且操作也非常的简单,就决定了采用这种方式。
SNTP简介:
SNTP,即简单网络时间协议(Simple Network Time Protocol),主要被用来同步因特网上计算机的时间。SNTP协议采用客户端/服务器的工作方式。SNTP服务器通过接收GPS信号或自带的原子钟作为系统的时间基准。SNTP客户端通过定期访问SNTP服务器获得准确的时间信息,用于调整客户端自身所在系统的时间,达到同步时间的目的。
上网找到国内常用的NTP服务器,用PC端的Ping命令简单的测试了一下,结果如下。
NodeMCU固件sntp模块用法很简单,本制作只使用其中的sntp.sync()函数。
语法:sntp.sync({ server1, server2, .. }, [callback], [errcallback], [autorepeat])。
各参数解释:
1. Server1,server2,..:指定要使用的一个或多个ntp服务器
2. Callback:同步成功回调,不需要在这里显式的调用rtctime.set(),该模块在内部自动执行此操作,以获得最佳的准确性。
3.Errcallback:失败回调,返回失败的原因。
1:DNS查找失败
2:内存分配失败
3:UDP发送失败
4:超时,不接收NTP响应
4. autorepeat:如果是非零值,那么每1000秒同步将发生一次,每次同步操作后都会调用回调。
找来例程试一下
sntp.sync("202.120.2.101",
function(sec, usec, server, info)
print('sync', sec, usec, server)
end,
function()
print('failed!')
end)
运行结果:sync 1497432519 920178 202.120.2.101
结果显示同步成功,并返回了1970/01/01到现在的UNIX时间戳和同步服务器。SNTP每次成功同步后会自动更新ESP8266模块的实时时钟,也就是自动调用rtctime.set()函数。所以要使用sntp授时需要rtctime模块的支持,定制固件时不要落下。需要说明的是,成功同步后会自动更新MCU内部的RTC。
当然那一大串UNIX时间戳我们人类是不太能看懂的,还要转为我们习惯使用的日期和时间,这就要用到rtctime模块中的rtctime.epoch2cal()函数,语法为rtctime.epoch2cal(timestamp)。函数成功运行后返回一个数组,数组包括:
year 1970年 ~ 2038年
mon 1 ~ 12月
day 1 ~ 31 日
hour 小时
min 分钟
sec 秒
yday 当前是一年中的第1 ~ 366天
wday 星期 (星期天是1)
例程:
tm = rtctime.epoch2cal(rtctime.get()) --获取当前日期时间并转换
print(string.format("%04d/%02d/%02d %02d:%02d:%02d",
tm["year"], tm["mon"], tm["day"],
tm["hour"], tm["min"], tm["sec"]))
运行结果:2017/07/08 09:48:04
5:显示标准时间
标准时间有了,下一步的工作就是怎样显示出来的问题,总不能开着电脑用串口助手看时间吧。家里用的话1602或12864液晶字太小,远了就看不清楚;数码管做的太多,都审美疲劳了;最后决定用点阵,但是ESP8266模块的GPIO太少,不够用来直驱点阵,为解决这个问题,特地从淘宝上淘了基于MAX7219的点阵模块,4个MAX7219驱动4片8*8点阵。使用SPI串口通讯,还可以多片级联,只要用3个GPIO就能驱动若干片8*8点阵。
MAX7219简介(来自百度百科)
MAX7219是一种集成化的串行输入/输出共阴极显示驱动器,它连接微处理器与8位数字的7段数字LED显示,也可以连接64个独立的LED。其上包括一个片上的B型BCD编码器、多路扫描回路,段字驱动器,而且还有一个8*8的静态RAM用来存储每一个数据。 只有一个外部寄存器用来设置各个LED的段电流。 MAX7221与SPI™、 QSPI™以及 MICROWIRE™相兼容,同时它有限制回转电流的段驱动来减少EMI(电磁干扰)。 一个方便的四线串行接口可以联接所有通用的微处理器。 每个数据可以寻址在更新时不需要改写所有的显示。MAX7219允许用户对每一个数据选择编码或者不编码。 整个设备包含一个150μA的低功耗关闭模式,模拟和数字亮度控制,一个扫描限制寄存器允许用户显示1-8位数据,还有一个让所有LED发光的检测模式。
第一次玩MAX7219,由于LUA语言用的不顺手,调试起来有点麻烦。先用熟悉的51来点亮点阵,调试通过后再一点一点地移植到ESP8266。买的点阵是32*8,即使用不美观的4*8字体,时分秒也无法全部显示,更不用说标准的5*8的字体了。最后决定只用3片点阵,使用5*8字体,只显示小时和分钟,但也不够用,折衷一下:0-19时用24小时制,20-23时用12小时制。
成功点亮后的点阵,私人订制的字体,还是很漂亮的。
6:开始制作:
硬件很简单,就是一个ESP8266模块, 5V转3.3V的电路和几个阻容。用洞洞板很快就搞定了。
用茶色亚克力做面板,可以增强点阵的可读性。插上电源,模块尝试连接WIFI,蓝色LED亮起,成功连接后该LED熄灭,稍等就会显示当前准确的时间了。如果WIFI断线,模块会尝试自动重连,LED会指示当前的WIFI连接状态。
在每次上电后自动同步时间,然后每隔一个小时与NTP服务器同步一下。这样只要有网络,本时钟显示的时间就是准确的。
功耗也不大,白天正常亮度,不到100ma。21:30后降低亮度,避免影响睡觉。
再来几张美图
7:后记
对于一个仅仅靠兴趣驱动的爱好者来说,做这么一个小玩意遇到的困难太多了,身边没有谁可以请教,只能在网上一点一点的找答案,好在还算是成功的实现了自己想要的功能。现在已经正常的运行了一个多月,时间与GPS几乎一秒不差。
不足的地方就是本时钟只能在一个WIFI环境下使用。其实NodeMCU也提供了通过浏览器设定模块的SSID和密码的功能,但试了几次发现不太稳定,再说换了WIFI只要简单的改改程序就好,也不算麻烦。决定不再折腾,能做到这样就很满意了。
-----官方NodeMCU文档,请移步http://nodemcu.readthedocs.io/en/master/en/
还有调试中的一张图,用液晶屏显示,一起发上来
谢谢观看!
浏览更多精彩内容请登录数码之家网站
技术交流请联系原作者
作者:qxgm
本文来源:数码之家
小米手环团队专访:把产品做小,把蛋糕做大
雷军说,杀鸡就要用牛刀,于是黄汪就来做手环了。
你可能不知道黄汪是谁,但是你有可能听说过“智器”,中国最早进入平板电脑市场的硬件厂商。智器发布第一款产品Q5的时候,平板电脑还不叫平板电脑,叫拗口的MID。“Mobile Internet Device”,这是英特尔2008年提出的概念。彼时iPad还没有发布,MID的定位是比智能手机大一点又比上网本小一点的设备。
智器去年年底接受了小米的战略投资,全新的华米科技今年年初成立。星期三,上地五彩城,小米总部办公楼12层的会议室里,华米科技CEO黄汪和小米生态链产品总监夏勇峰接受了36氪的采访。
小米手环是一款非常简单的硬件
从平板做到手环,黄汪觉得技术上毫无压力。“从Linux嵌入式开发做起,后来先后做了平板电脑和智能手表上的Android开发,现在做手环,就是一个8位的单片机”,黄汪说,“但是从产品的角度来讲,其实是变复杂了”。
说复杂,是因为小米手环虽然拥有的功能不多,放弃的功能却很多。产品的核心定位就是用户身份的ID。小米手环中集成了一颗蓝牙芯片和一颗三轴加速度芯片。前者用于测距和确定用户身份,后者用于记计步和监控睡眠。
就这么简单。没有屏幕,没有外放,也没有脉搏监测。“手环不是手表,任何和‘用户ID’这个定位有冲突的功能我们都会砍掉 ”,黄汪和夏勇峰一前一后地说着,“我们希望用户可以24小时都戴着它”。当“米粒”(手环的功能部分)从腕带中取出来之后,你能感受到这颗胶囊的简单。
在Misfit Shine之前,很多人吐槽各种奇形怪状的手环应该被称之为不可穿戴设备。小米的解决方案是把这颗胶囊从手环中被剥离出来。扣在皮带上,挂在脖子上都没有问题。甚至可以在腕带上增加一块小屏幕。
“如果你觉得多彩的腕带不符合你的审美,你想换成真皮的、豹纹的都可以。79元只是标准版的价格,各种各样的配饰我们也快马加鞭地赶制。等到手环正式上线你们就可以看到”,夏勇峰告诉36氪。
5g、8mm、79元
一款简单的硬件卖79元,本不应该是一个问题,但是小米手环刚发布的时候引起了巨大的争议。用户们一直以为智能手环是100美元的产品。创业公司在面向资本市场也是这样讲的。Bong手环一代价格690元,二代价格99元。五个月的时间里发生了什么?嗯,你猜对了。
小米手环的成本到底有多少?夏勇峰不愿意直接回答这个问题,“39元是不可能的,但是我可以告诉你,79的价格就是按照成本来定的。”“两块芯片的功耗都是业界最低的,价格是对手的三倍”,黄汪很有信心。夏勇峰在知乎上也和别人争论过ADI的这块加速度芯片到底是不是功耗最低的。谁也没能说服谁,因为对手举不出反例但是夏勇峰手上的数据也有限。
“电池容量41mAh,最开始设计的时候希望续航100天,加入各种模块后发现做不到。最后续航30天是个保守估计”,对于Bong2的一年续航,黄汪觉得不好评价。“一个年抛的产品,不能充电,会简单一些”,夏勇峰还是没忍住补了一刀。Bong2手环续航一年,但是更换电池需要拆机。
虽然很廉价,但是小米的产品团队并不希望产品让用户感到很廉价。在36氪看来,小米手环是小米第一款可以让人可以聊聊设计的产品 (小米4可以让人聊聊别人家的设计)。把一块电池、两颗芯片、三个指示灯做到这个5g重,8mm宽的胶囊里。小米的产品团队花了很大的精力。
因为又要防水,又要金属的质感,还要让指示灯透亮出来,于是就只好用激光微穿孔技术,每个指示灯的地方要打90多个孔。“这不是谁想做就能做的”,夏勇峰很喜欢提这个细节,“以前只有Macbook的键盘灯用了这个工艺”。
手环是鸡肋?放在整个小米的生态中看看
简单的好处是便宜,坏处就是功能少。黄汪是这么看这个问题的:“先把现有的功能做到极致,让用户对它产生黏性”。“手环不是小米的主营业务,所以我们做减法,别人家做加法”,夏勇峰认为小米手环的思路还是要做单款爆品,功能是不是鸡肋要放在小米的生态系统中来看。
从目前来看,小米手环可以用来记录睡眠和运动情况并上传到App,可以社交网络,也可以查看自己朋友圈的排行。不增加新的传感器,未来还有什么玩法?可以通过升级固件监测更多样的运动方式,比如游泳,比如网球羽毛球挥拍,还会引入机器学习的算法为用户提供个性化的指引。以上这些这也是的Bong2,或者Smash这样的专业运动手环正在做的。
即使没有这些,夏勇峰觉得这个“用户ID”的定位已经有很大的想象力了。本来蓝牙芯片是不能做室内定位的,但是如果家中有了其他智能设备就可以利用蓝牙测距做室内定位。想象一下,以后你走进电视,电视知道是你,马上从云端同步你喜欢的电视节目。早上手环没有叫醒你,告诉旁边的手机发出更大的声音和振动。
官方宣传小米手环仅支持米3和米4。其实只要是搭载Android 4.4的手机都可以通过小米计步与监测睡眠。“只是初期发货量本来就少,我们还是希望用户使用小米手机来获得完整的体验”。不过华米科技现在正在拉勾网上招募iOS工程师,小米手环很快就会支持iPhone 。夏勇峰告诉36氪,今年小米手环的供应量超过100万没什么问题。
小米进来是要把蛋糕做大
黄汪选择和小米站在一起,小米生态链产品总监孙鹏功不可没。孙鹏和黄汪是中科大的校友,不过孙鹏入学的时候黄汪正好毕业。黄汪说华米现在70多名员工,技术人员清一色的(中)科大出身。
雷军笑称“孙鹏去年在全国跑了32家创业公司”。接受小米的投资的有华米、做移动电源的紫米、还有做耳机的加一联创。这三家是雷军在发布会上披露的,还有他没有披露的,比如和龙旗合资的创米,有消息称创米是做智能插座的。小米的既定策略是,除了终端、路由器和电视,其他所有的硬件让别人来做 ,小米投资。
“小米投资华米,智器占大股,我们占小股”,夏勇峰说,“黄汪有绝对自主权,他以后想去做宇宙飞船都没问题”。但是黄汪已经在雷军的建议下,把智器之前的产品线都逐渐砍掉,智器的平板上次更新还是2012年底的U7。去年开始做的智能手表Zwatch短时间内也不会有升级款了。
让36氪有些意外的是,小米手环的软件、硬件和云端的数据都是华米自己的,只是用了米MiCloud的云服务。当年的智器就不只是一个纯粹的硬件厂商,推出过智器阅读客户端,甚至还有自己的杂志商城。
黄汪认为小米对自己最大的帮助是有更多靠谱的技术和产品人员和自己一起思考。但是更多的厂商看重的是小米提供的曝光度以及产品销售渠道。比如Boardlink,BoardLink没能获得小米商城的推荐位,却拿到了京东和360的战略投资。这家曾经为小米路由器提供过智能遥控器的创业公司最近在媒体上抨击小米“去一行毁一行”。
但是夏勇峰觉得小米手环帮了其他的手环厂商。“小米盒子出来之后,深圳有的电视盒子厂商的出货量增长了百倍。他们以前叫硬盘播放器,用户都不知道这是什么”,夏勇峰说,“如果小米都做不好手环,其他人还是不要进来了 ”。在小米看来首先要考虑的是把这个市场做大,做大的前提是价格降下来。然后各种手环再找准自己的定位,或者做大而全,或者深挖垂直领域。
“以后的智能手环该怎么玩儿?”,36氪抛出了最后一个问题。
“可以跟施华洛世奇合作推出定制款吧!”
除非注明,本站文章均为原创或编译,转载请注明: 文章来自 36氪
36氪官方iOS应用正式上线,支持『一键下载36氪报道的移动App』和『离线阅读』立即下载!
相关问答
enc28j60怎么通过 单片机上网 ?ENC28J60提供了物理层和MAC层,它的接口是SPI的,单片机通过SPI控制ENC28J60收发数据包就行了,这个数据包是原始的以太网数据包,上面的协议栈要在单片机内软件...
什么是 单片机 应用系统?1单片机:单片机就是将CPU、存储器、定时计数器、I/O接口电路等集成在一个芯片。也叫单片微型计算机。2单片机系统:以单片机为核心的控制系统。3单片机应...
树莓派和 单片机 的区别 - 红网问答区别:树莓派只有一个PWM;单片机可以有十几路PWM;树莓派是微型卡片计算机,单片机是单芯片计算机。电脑使用技巧:1、电脑经常会出现“此windows副本...
怎样使串口WIFI模块无线 上网 ?像WiFi模块、BLE蓝牙模块都是属于无线串口模块,串口WiFi模块一般会集成射频电路、MAC地址、WIFI驱动和协议、无线安全协议等。利用串口WiFi模块,用户可以实现...
怎么实现 单片机 传输数据给计算机的串口通信?-ZOL问答必须在单片机上编写程序,程序的功能是将从键盘的获取到的数据通过串口发送出去。单片机串口参数(如波特率、数据位、停止位、奇偶校验位等)须与电脑设置一致。...
树莓派和 单片机 的区别 - Aiyanna大阳?? 的回答 - 懂得区别:树莓派只有一个PWM;单片机可以有十几路PWM;树莓派是微型卡片计算机,单片机是单芯片计算机。电脑使用技巧:1、电脑经常会出现“此windows副本不...
单片机 驱动LED发光二极管-ZOL问答可以,现在51单片机开发板中P1口都是这么接的!电流几毫安,可以!有用(0)回复...笔记本电脑可以连接到无线网络,但是显示无Internet,插网线也没办法上网1.2万...
单片机 没接底座可不可以烧录程序?-ZOL问答不明白的问的,对于简单的51单片机,最起码要有一个晶振电路才可以烧录程序。你说的底座不知道是不是IC插槽?那个是方便单片机的装卸。只要有单片机,其对应脚有...
什么是 单片机 封装-ZOL问答4条回答:【推荐答案】封装通俗的说就是一个东西焊的形状,大小。不是说单片机封...笔记本电脑可以连接到无线网络,但是显示无Internet,插网线也没办法上网1.2万...
51 单片机 的下载线要买哪些?-ZOL问答我这有根两头都是USB插头中间一条线接的下载线,这是不是啊?还有我win7那要看你的单片机是什么下载方式的了,如果是89S系列的就需要用到的下载器,你...