|
采用stm32f103c8t6制作了一個(gè)網(wǎng)絡(luò)時(shí)鐘,通過連接esp8266獲得網(wǎng)絡(luò)上的北京時(shí)間。這里提供一個(gè)數(shù)據(jù)的接口地址,如果大家有興趣學(xué)習(xí)一下的話,可以打開這個(gè)地址注冊一下申請一個(gè)接口:nowapicom/api
這里簡要的說一下制作這個(gè)網(wǎng)絡(luò)授時(shí)時(shí)鐘的思路,大概就是先使用串口調(diào)試助手調(diào)試好esp8266的波特率、工作模式等,然后將其連接入家庭的路由器,或者開啟手機(jī)熱點(diǎn)讓esp8266連接進(jìn)去。我這里設(shè)置其波特率為115200,工作模式為AP模式。設(shè)置好這些基本的參數(shù)之后,就是開啟單連接模式,連接入遠(yuǎn)程的tcp服務(wù)器,開啟透傳模式,發(fā)送get+數(shù)據(jù)商提供的key,獲得北京時(shí)間的信息,通過串口接收再數(shù)據(jù)處理獲得準(zhǔn)確的北京時(shí)間。之后通過stm32自帶的rtc時(shí)鐘進(jìn)行走時(shí),不需要實(shí)時(shí)接收,只需要在開機(jī)的時(shí)候接收即可。
網(wǎng)絡(luò)時(shí)鐘不帶天氣預(yù)報(bào).jpg (103.66 KB, 下載次數(shù): 134)
下載附件
2018-3-11 17:47 上傳
注意:程序中使用了中文的顯示,可能oled也和各位的不匹配,如有用到的麻煩自己進(jìn)行修改調(diào)試。同時(shí)注意供電的穩(wěn)定!
stm32單片機(jī)源程序如下:
- #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(); //延時(shí)函數(shù)初始化
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 設(shè)置中斷優(yōu)先級(jí)分組2
- uart_init(115200); //串口初始化為9600
- OLED_Init(); //初始化液晶
- LED_Init(); //LED初始化
- KEY_Init(); //按鍵初始化
- mem_init(); //初始化內(nèi)存池
- 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);//時(shí)
- 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;
- }
- }
復(fù)制代碼
由于某些原因附件中的程序源碼已經(jīng)刪掉部分內(nèi)容,不能直接使用,僅供學(xué)習(xí)參考:
代碼片段下載:
程序源碼.rar
(373.47 KB, 下載次數(shù): 513)
2018-3-11 17:50 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|