标题:
使用stm32和esp8266制作一个网络授时的时钟
[打印本页]
作者:
QWER01234
时间:
2018-3-11 17:52
标题:
使用stm32和esp8266制作一个网络授时的时钟
采用stm32f103c8t6制作了一个网络时钟,通过连接esp8266获得网络上的北京时间。这里提供一个数据的接口地址,如果大家有兴趣学习一下的话,可以打开这个地址注册一下申请一个接口:nowapicom/api
这里简要的说一下制作这个网络授时时钟的思路,大概就是先使用串口调试助手调试好esp8266的波特率、工作模式等,然后将其连接入家庭的路由器,或者开启手机热点让esp8266连接进去。我这里设置其波特率为115200,工作模式为AP模式。设置好这些基本的参数之后,就是开启单连接模式,连接入远程的tcp服务器,开启透传模式,发送get+数据商提供的key,获得北京时间的信息,通过串口接收再数据处理获得准确的北京时间。之后通过stm32自带的rtc时钟进行走时,不需要实时接收,只需要在开机的时候接收即可。
网络时钟不带天气预报.jpg
(103.66 KB, 下载次数: 134)
下载附件
2018-3-11 17:47 上传
注意:程序中使用了中文的显示,可能oled也和各位的不匹配,如有用到的麻烦自己进行修改调试。同时注意供电的稳定!
stm32单片机源程序如下:
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "oled.h"
#include "key.h"
#include "flash.h"
#include "malloc.h"
#include "usart.h"
#include "text.h"
#include "esp8266.h"
#include "RTC.h"
extern _calendar_obj calendar;
void display_week(void);
int main(void)
{
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
uart_init(115200); //串口初始化为9600
OLED_Init(); //初始化液晶
LED_Init(); //LED初始化
KEY_Init(); //按键初始化
mem_init(); //初始化内存池
OLED_Init(); //初始化OLED
OLED_Clear();
esp8266_init();
esp8266_get_shijian();
esp8266_get_time();
dispose_time_data();
RTC_Init();
while(font_init()) //字体初始化
{
OLED_ShowString(0,0,"chinese init error!!",16);
}
Show_Str(32,0,"年",16,0);
Show_Str(64,0,"月",16,0);
Show_Str(96,0,"日",16,0);
Show_Str(0,2,"日一二三四五六",16,0);
Show_Str(16,4,": :",16,0);
display_week();
while(1)
{
OLED_ShowNum(0,0,calendar.w_year,4,16);//年
OLED_ShowNum(48,0,calendar.w_month,2,16);//月
OLED_ShowNum(80,0,calendar.w_date,2,16);//日
OLED_ShowNum(0,4,calendar.hour,2,16);//时
OLED_ShowNum(24,4,calendar.min,2,16);//分
OLED_ShowNum(48,4,calendar.sec,2,16);//秒
if((calendar.hour==0)&&(calendar.min==0)&&(calendar.sec==0))
{
calendar.week+=1;
if(calendar.week==8) calendar.week=1;
display_week();
}
}
}
void display_week(void)
{
switch(calendar.week)
{
case(1):Show_Str(16,2,"一",16,1);break;
case(2):Show_Str(32,2,"二",16,1);break;
case(3):Show_Str(48,2,"三",16,1);break;
case(4):Show_Str(64,2,"四",16,1);break;
case(5):Show_Str(80,2,"五",16,1);break;
case(6):Show_Str(96,2,"六",16,1);break;
case(7):Show_Str(0,2,"日",16,1);break;
}
}
复制代码
由于某些原因附件中的程序源码已经删掉部分内容,不能直接使用,仅供学习参考:
代码片段下载:
程序源码.rar
(373.47 KB, 下载次数: 513)
2018-3-11 17:50 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
huige@51
时间:
2018-3-27 16:55
好资料,51黑有你更精彩!!!
作者:
bbsbbc
时间:
2018-4-11 11:24
不错不错。。
作者:
51zhenhei08
时间:
2018-4-19 12:46
下载学习
作者:
wwj199409
时间:
2018-5-3 07:32
下载学习,谢谢分享
作者:
wwj199409
时间:
2018-5-3 07:33
谢谢分享
作者:
wenyuantc
时间:
2018-10-17 21:18
学习了
作者:
stkh
时间:
2018-10-18 21:14
网络受时没玩过。接口nowapi
作者:
mzbbzy
时间:
2018-10-24 11:17
赞!小白正在学习中......
作者:
woyuik56
时间:
2018-11-4 00:41
好东西 正在研究这方面 帮大忙了
作者:
netbeetle
时间:
2018-11-9 10:29
这只使用ESP8266就 可以解决了,用ESP-12E这样的模块,本身就可以通过I2C驱动OLED 了。
作者:
Zc陈小白
时间:
2018-11-20 19:35
谢谢分享
作者:
Mr丶朋
时间:
2018-11-20 21:06
谢谢分享
作者:
Mr丶朋
时间:
2018-11-20 21:07
大佬 膜拜
作者:
huanglang
时间:
2018-11-20 22:44
好东西
作者:
xdh5432
时间:
2018-11-25 15:33
学习学习,感谢分享
作者:
lmm0010
时间:
2019-1-7 10:56
不错不错
作者:
海嵌
时间:
2019-2-7 13:13
还是网络授时比较实际,GPS跟电波在室内都收不到信号
作者:
Tiansu_cxs
时间:
2019-2-8 18:03
感谢分享!
作者:
tanhailong
时间:
2019-2-25 10:02
感谢分享
作者:
YOOOOHOO
时间:
2019-3-17 22:20
谢谢分享
作者:
741582798
时间:
2019-4-7 09:56
下载学习,谢谢分享
作者:
icebergone
时间:
2019-4-29 16:32
好帖,学习一下。
作者:
QWE1QWE
时间:
2019-5-7 14:36
厉害,把最重要的源码部分给删去........
作者:
tarchen
时间:
2019-7-2 17:25
谢谢分享,学习学习。
作者:
bzx925
时间:
2019-7-11 21:40
谢谢分享
作者:
RyIIm
时间:
2019-7-18 15:57
很有用“!感谢楼主的无私贡献
作者:
小植物的51
时间:
2019-8-30 17:07
谢谢分享
作者:
1294081095
时间:
2019-9-2 16:37
学到了,谢谢分享
作者:
cuf_1798
时间:
2019-9-3 14:17
绝世好帖!!非常感谢楼主分享
作者:
kingbrother
时间:
2019-10-18 14:53
正是我想找的,参考下代码
作者:
小白1号伊伊
时间:
2019-11-1 18:48
不错,很好
作者:
阳ing
时间:
2019-11-5 16:09
有原理图吗
作者:
小分子
时间:
2019-11-16 20:50
真的很牛啊。板子都自己做了。
作者:
vvv64
时间:
2019-11-17 09:10
牛,很有用!感谢楼主的无私贡献
作者:
伪装灬铭记在心
时间:
2019-11-17 22:53
你的这个函数在哪里????esp8266_get_shijian();
作者:
466305213
时间:
2019-11-23 16:11
谢谢,学习了
作者:
小分子
时间:
2020-4-1 21:00
你这个是纯手工啊。电路板都是自蚀的。这个牛了。
作者:
小分子
时间:
2020-4-1 21:00
这个真是纯手工。电路板都是自己蚀的。
作者:
我学单片机
时间:
2020-8-26 17:07
esp8266_get_shijian();
没有这个函数文件。
作者:
ty417502873
时间:
2020-8-26 19:51
这个PCB厉害,还是双层的?怎么做的?是不是孔钻大点,两边加焊锡?
作者:
mvwtest
时间:
2020-8-27 08:47
樓主的是代碼片段,不應稱為源碼,源開與不開都值得尊重,誤導難免招怨。
作者:
sumingxing
时间:
2022-2-10 18:07
刚入门一个月,根据里面的天气函数,脑补了代码。原程序有一个bug,网络没有回应的话,会卡死,导致
void esp8266_get_shijian(void)
{
printf("GET http://apik780com:88/?app=life.time&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json&HTTP/1.1\r\n");
delay_ms(2000);
}
复制代码
RTC的时间也不显示。正在解决。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1