看了很多的wifi时钟,于是就做了一个掌上的mini时钟,我没有安装esp8266的库文件和板级支持包,所以就打算直接用at指令来访问服务器,并从接收到的数据中获取当前时间。经测量大概3天误差在±10毫秒以内,然后系统每24小时自动进行校准时间,减少误差。最终效果还算理想。
硬件部分:
- arduino nano :体型较小,比较便宜
- esp8266_01s :01s相对于01在接线上可以不用把EN接高电平
- TM1637 :与其它四位数码管相比使用I2c接口,所需引脚大量减少
- usb转ttl:用于wifi模块的调试
软件:
1.arduino IDE
2.需要安装TM1637库文件
3.我并未安装arduino上的esp8266库文件,因此wifi模块使用at指令来进行调试的,具体操作在下面展示
库安装
打开arduino IDE再按快捷键 Crtrl + Shift + I 调出库管理,再
在输入栏上写上TM1637,点击安装。
连线部分
esp8266_01s | arduino |
---|---|
3.3v | 3.3v |
GND | GND |
RX | TX |
TX | RX |
TM1637 | arduino |
---|---|
3.3v | 3.3v |
GND | GND |
CLK | 11 |
DIO | 12 |
AT指令调试:
wifi模块接上usb转ttl,打开串口调试助手输入:
AT 若返回“ok”则表示能正常通讯,然后依次输入以下代码
(输出时在最后加上回车换行):
AT+CWMODE=3 配置成 AP+STA模式
AT+RST 重启生效
AT+CIFSR 查询设备IP
AT+CWJAP=“ssid”,“password” 连接你手机的热点“ssid”为热点的名称,"password"为密码。
AT+CIPSTART=“TCP”,“183.230.40.33”,80l连接的服务器ip 183.230.40.33/80
AT+CIPMODE=1开启透传模式
AT+CIPSEND开始透传
现在wifi模块就已经连上服务端了,这时我们在串口随便发送任意字符,都会收到服务器返回给我们的信息,这时只要把里面的时间给读取出来就行了。
这里我发送了一个’A’,服务器给我返回了带有时间的消息包。但这里的时间是美国时间,所以需要在小时上加个8小时的时差就行了。
wifi模块上电自动连接到服务器
如果我们想把wifi模块给配置好
AT+SAVETRANSLINK=1,“183.230.40.33”,80,“TCP”,100开机自动连接并进入透传。
输入这行命令这样就不用每次上电都重新发送AT指令了。
esp8266_01s获取时间
String receive = ""; //读取串口收到的字符
char info[380] = {
0}; //char* 类型临时接收缓冲区
int hour_shi;
int hour_ge;
int min_shi;
int min_ge;
int sec_shi;
int sec_ge;
void setup() {
Serial.begin(115200); //初始化WIFI串口
Serial.print("a");
delay(1000);//等待连接
while (Serial.available() > 0)
{