写了一下详细教程
时钟还是用51单片机的定时器,esp8266只是用来实现校时的
所以需要先实现一个51单片机的本地时钟
然后添加网络校时功能就行了
开始之前先介绍一下ESP8266
ESP8266是由乐鑫公司出品的一款物联网芯片,因为价格较低,性能稳定等收到很大关注。ESP8266模块支持STA/AP/STA+AP 三种工作模式。
也可以自己烧写固件,在esp8266里面编程,但是我们这个小项目就没有必要了,我们使用STA工作模式就行了.
STA 模式就是ESP8266模块通过路由器连接互联网,能连接互联网就可以用好的操作了.
我们与特定的服务器建立TCP/IP连接,就可以传输数据了
建立tcp/ip连接需要地址与端口.需要有公网ip的服务器,如果不是特定端口还需要写端口监听程序,所以我们就不用自己服务器了.
我们使用别人已经搭建好的接口就行了.
我用的就是这个网站
api接口网站
这个api通过80端口访问
这是基础知识
下面才是具体的做法
先是esp8266与单片机的连接
我是通过串口连接的(单片机的晶振请使用11.0592MHZ)
然后做一个时钟,用单片机定时器计时的
因为太简单,我就不写了
这个是我写的你们可以参考一下
然后就是写esp8266的部分了
先是8266的初始化
void ESP8266_Cmd_Init() //esp8266 配置信息
{
Uart_Send_Data("AT+CWMODE=1\r\n",sizeof("AT+CWMODE=1\r\n")); //esp8266重启指令
Delay_ms(3000);
Uart_Send_Data("AT+RST\r\n",sizeof("AT+RST\r\n")); //设置工作模式 1 station模式 2 ap模式 3 station+ap模式
Delay_ms(2000);
Uart_Send_Data("AT+CWJAP=\"4X\",\"cxs5120cxs\"\r\n",sizeof("AT+CWJAP=\"mys\",\"12345678\"\r\n"));//输入路由器的账 号密码
Delay_ms(5000);
Uart_Send_Data("AT+CIPMUX=0\r\n",sizeof("AT+CIPMUX=0\r\n")); //设置单链接模式
Delay_ms(1000);
Uart_Send_Data("AT+CIPSTART=\"TCP\",\"api.k780.com\",80\r\n",sizeof("AT+CIPSTART=\"TCP\",\"api.k780.com\",80\r\n")); //建立TCP服务器
Delay_ms(1000);
Uart_Send_Data("AT+CIPMODE=1\r\n",sizeof("AT+CIPMODE=1\r\n")); //设置透传模式
Delay_ms(1000);
Uart_Send_Data("AT+CIPSEND\r\n",sizeof("AT+CIPSEND\r\n")); //进入透传模式
}
后面都是有注释的
实现的就是重启esp8266
连接wifi
连接服务器
进入透传
这个你们不懂可以看看官方手册
接下来就是请求数据了
Delay_ms(300);
Uart_Send_Data("GET http://api.k780.com:88/?app=life.time&appkey=41104&sign=eab9cc1798bfccdf31be1f974970459d&format=json HTTP/1.0\r\n\r\n",sizeof("GET http://api.k780.com:88/?app=life.time&appkey=41104&sign=eab9cc1798bfccdf31be1f974970459d&format=json HTTP/1.0\r\n\r\n"));//获取时间
Delay_ms(1000);
因为是用的80端口
80端口就是http协议,http协议里面的请求就是这样写的
不懂可以去搜索tcp/ip与http协议
请求完数据,esp8266会返回一串数据
我们用串口接收,然后存到一个数组里面
然后选出其中有用的字段就行了
比如我得到的是data1[26],data1[27]是小时,所以把他赋值到小时变量里面
但是这里有个小bug,串口里面的是数的ASCll码,需要减30h,才是真正的数字
分钟,秒也类似赋值
这样时间就变成了网络时间了,校时也就成功了