采用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
|