技术文档

gps单片机程序 玩转单片机!基于ESP8266模块的WIFI点阵时钟制作

小编 2025-09-14 技术文档 23 0

玩转单片机!基于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

本文来源:数码之家

单片机原理和应用

单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。

单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。

硬件特性

1、主流单片机包括CPU、4KB容量的RAM、128 KB容量的ROM、 2个16位定时/计数器、4个8位并行口、全双工串口行口、ADC/DAC、SPI、I2C、ISP、IAP。

2、系统结构简单,使用方便,实现模块化;

3、单片机可靠性高,可工作到10^6 ~10^7小时无故障;

4、处理功能强,速度快。

5、低电压,低功耗,便于生产便携式产品

6、控制功能强

7、环境适应能力强。

单片机原理

单片机主要由运算器、控制器和寄存器三大部分构成。其中,运算器由算术逻辑单元(ALU)、累加器、寄存器等构成,首先累加器和寄存器向ALU输入两个8位源数据,其次ALU完成源数据的逻辑运算,最后将运算结果存入寄存器中;控制器由程序计数器、指令寄存器、指令译码器、时序发生器和操作控制器等构成,是一个下达命令的“组织”,用于协调整个系统各部分之间的运作;寄存器主要有累加器A、数据寄存器DR、指令寄存器IR、指令译码器ID、程序计数器PC、地址寄存器AR等。

在微处理器内部运算器、控制器、寄存器之间是相互连接的,由控制器向各部分发布操作命令,运算器接到命令后进行相应运算,并将运算后结果存入相应的寄存器中。

单片机现已渗透到我们日常生活中的各个领域,小到家用电器、仪器仪表,大到医疗器械、航空航天,无不存在着单片机的身影。一旦在某种产品上添加了单片机,便使得原产品向互联网靠拢,获得了“智能型”的前缀。单片机具体在各个领域的应用如下:

1)在仪器仪表领域,一旦采用单片机对其进行控制,便使得仪器仪表变得数字化、智能化、微型化,且其功能更加强大;

2)在家用电器领域,已广泛实现了家用电器的单片机控制,如电饭煲、电冰箱、空调、彩电、音响等等;

3)在网络通信领域,手机、小型程控交换机、楼宇自动通信呼叫系统等等都已实现了单片机控制,且单片机普遍具备通信接口,使得通信设备可以方便地与计算机之间进行数据通信;

4)在工业控制领域,可以使用单片机构成多种多样的控制系统,如工厂流水线的智能化管理、电梯智能化控制、各种报警系统、与计算机联网构成二级控制系统等;

5)在医疗设备领域,单片机也极大的实现了它的价值,已广泛应用于各种分析仪、监护仪、病床呼叫系统、医用呼吸机等医疗设备中;

6)在模块化系统中,可利用单片机实现特定功能,进行模块化应用,而不要求操作人员了解其内部结构,这样做大大地缩小了体积、简化了电路,也降低了损坏率、错误率;

7)在汽车电子领域,单片机已广泛应用于发动机控制器、GPS导航系统、ABS防抱死系统、制动系统中;

8)除上述应用外,单片机在工商、金融、教育、物流等领域都或多或少的发挥了其本身的作用

相关问答

单片机 是什么意思?

[回答]单片机定义单片机是指一个集成在一块芯片上的完整计算机系统。尽管他的大部分功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大部分部...

51 单片机 存储器的扩展方法?

MCS~51单片机对数据存储器的扩展通常采用数据总线和地址总线,即P013和P213来完成,最大寻址空间可达64KB.随着单片机应用领域的推广和不断扩大,特别是在GPS数...

royaltek rta 1000 gps 天线怎么用

一、想用D600导航吗?如果想,先做准备:1、买个GPS蓝牙模块,淘宝上大把,400元左右的就是超级实用啦,200多的当然也能解决问题,不过一分价钱一分货嘛。...

土地面积测量仪如何使用?- 一起装修网

[回答]其实它主要就是利用gps卫星*系统,来进行*的采集,计算,一般应用于农机作业收费、农田承包测量、企业用地征税、林业湖泊等规则或不规则地域的面积测...

物联网如何打造智慧城市?

什么是智慧城市?借助数字技术和大数据致力于改善人民生活的城市是智慧城市。一个智慧城市是城市地区使用不同类型的电子的传感器来收集数据,然后使用从中获得...

今日头条科技领域,垂直内容有哪些方向?

还可以分享各种编程语言的咨询,对比各种编程语言的优势缺点,不同的语言适合的应用场景还可以分享单片机或者嵌入式程序的设计,分享一些小设计,解决人们日常...

51 单片机 开发板有什么用,对初学 单片机 有什么帮助?

51单片机开发板对初学单片机的帮助,就像学步车对于刚学走路的儿童一样,可以帮助它少摔跤,快速学会走路。一、单片机学习板的重要性单片机的学习,包含两大方...

考场网络校时电子钟或者 GPS 校时电子钟哪里有做?

[回答]不必单片机,那就要用计数器,无法用触发器。要用触发器自己装配计数器是很麻烦的,有现成的集成电路计数器:74LS160,就是十进制的计数器,可以计一位十...

哪位知道车载 GPS 价位多少?教期待大神解答

[回答]不同设备,不同安装方法,不能一概而论,参考说明书。车辆GPS的安装分为两种,一种是有线GPS的安装,一种是无线GPS的安装。1)硬件设备:GPS模块、GSM模...

交通运输智能研究生就业前景

就业前景比较好。交通运输智能技术主要包括:道路交通控制技术、GPS原理与应用、监控系统集成与维护、交通工程设计、道路交通安全管理、地理信息(GIS)系统、...

猜你喜欢