采用stm32f10制作了一個網絡授時時鐘,通過連接esp8266獲得網絡上的北京時間,使用www點k780點com提供的免費api,有興趣的小伙伴們,可以去官方研究下。這里簡要的說一下制作這個網絡授時時鐘的思路,大概就是先使用串口調試助手調試好esp8266的波特率、工作模式等,然后將其連接入家庭的路由器,或者開啟手機熱點讓esp8266連接進去。我這里設置其波特率為115200,工作模式為AP模式。設置好這些基本的參數之后,就是開啟單連接模式,連接入遠程的tcp服務器,開啟透傳模式,發送get+數據商提供的key,獲得北京時間的JSON信息,然后采用cJSON庫進行,json的數據解析工作,可以解析出北京時間,然后再將得到的時間更新給DS1302模塊,之后就開始不停的從DS1302模塊里面獲取時間了。當然大家感興趣的。還可以獲取天氣等信息呢。
制作出來的實物圖如下:
IMG_20190508_140450.jpg (2.9 MB, 下載次數: 100)
下載附件
OLED顯示屏顯示時間
2019-5-8 14:10 上傳
IMG_20190508_140438.jpg (3.06 MB, 下載次數: 82)
下載附件
整體圖
2019-5-8 14:10 上傳
IMG_20190508_140504.jpg (2.85 MB, 下載次數: 90)
下載附件
wifi模塊
2019-5-8 14:11 上傳
IMG_20190508_140456.jpg (2.99 MB, 下載次數: 89)
下載附件
DS1302
2019-5-8 14:10 上傳
單片機源程序如下:
- #include "sys.h"
- #include "delay.h"
- #include "usart.h"
- #include "led.h"
- #include "key.h"
- #include "malloc.h"
- #include "usart3.h"
- #include "wifista.h"
- #include "weather.h"
- #include "cJSON.h"
- #include "ds1302.h"
- #include "oled12864.h"
- void show_time(void);
- u8 IntegralPointFlag = 0;
- int main(void)
- {
- u8 key;
- u16 t=0;
- u8 constate=0; // 連接狀態
- delay_init(); // 延時函數初始化
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 設置中斷優先級分組為組2:2位搶占優先級,2位響應優先級
- uart_init(115200); // 串口初始化為115200
-
- LED_Init(); //初始化與LED連接的硬件接口
-
- KEY_Init(); //初始化按鍵
- usart3_init(115200); //初始化串口3
- DS1302_Init();
-
- OLED_Init();
- // Step_Num
- OLED_P8x16Num(0,0,1); // 顯示屏初始化
- OLED_P8x16Num(8,0,9);
- OLED_P8x16Str(16,0,"-");
- OLED_P8x16Num(24,0,0);
- OLED_P8x16Num(32,0,5);
- OLED_P8x16Str(40,0,"-");
- OLED_P8x16Num(48,0,0);
- OLED_P8x16Num(56,0,7);
- OLED_P8x16Num(64,2,2);
- OLED_P8x16Num(72,2,2);
- OLED_P8x16Str(80,2,":");
- OLED_P8x16Num(88,2,2);
- OLED_P8x16Num(96,2,9);
- OLED_P8x16Str(104,2,":");
- OLED_P8x16Num(112,2,1);
- OLED_P8x16Num(120,2,9);
-
- delay_ms(200);
- atk_8266_wifista_config();
-
- printf("wifi init ok!");
-
- delay_ms(1000);
- get_beijing_time();
-
- delay_ms(1000);
- delay_ms(1000);
-
- get_beijing_time();
- delay_ms(1000);
-
- printf("Time: %d-%d-%d %d:%d:%d\r\n",nwt.year,nwt.month,nwt.date,nwt.hour,nwt.min,nwt.sec);
- DS1302_Write_Time();
-
- while(1)
- {
- // DS1302_Get_Time(time);
-
- key = KEY_Scan(0);
- if(key==WKUP_PRES)
- {
- get_beijing_time();
- printf("Time: %d-%d-%d %d:%d:%d\r\n",nwt.year,nwt.month,nwt.date,nwt.hour,nwt.min,nwt.sec);
- DS1302_Write_Time();
- }
- delay_ms(10);
- t++;
- if(t==1000)
- {
- constate=atk_8266_consta_check();//得到連接狀態
- t=0;
- }
- else if((t%100)==0)
- {
- LED1 = !LED1;
- show_time();
- }
- atk_8266_at_response(1);
- }
- }
- void show_time(void)
- {
- // DS1302_Read_Time();
- // printf("%d-%d-%d %d:%d:%d\r\n",nwt.year,nwt.month,nwt.date,nwt.hour,nwt.min,nwt.sec);
- u8 time[15];
- DS1302_Get_Time(time);
- // printf("%d%d%d%d年%d%d月%d%d日 ", time[0],time[1],time[2],time[3],time[4],time[5],time[6],time[7]);
- // printf("%d%d時%d%d分%d%d秒 星期%d\n", time[9],time[10],time[11],time[12],time[13],time[14],time[8]);
- OLED_P8x16Num(0,0,time[2]);
- OLED_P8x16Num(8,0,time[3]);
- OLED_P8x16Num(24,0,time[4]);
- OLED_P8x16Num(32,0,time[5]);
- OLED_P8x16Num(48,0,time[6]);
- OLED_P8x16Num(56,0,time[7]);
-
- OLED_P8x16Num(64,2,time[9]);
- OLED_P8x16Num(72,2,time[10]);
-
- OLED_P8x16Num(88,2,time[11]);
- OLED_P8x16Num(96,2,time[12]);
-
- OLED_P8x16Num(112,2,time[13]);
- OLED_P8x16Num(120,2,time[14]);
- // 判斷分鐘為0 秒 小于等于 3 則可以判斷 當前時間為整點 啟動報時
- if(time[11] == 0 && time[12] == 0 && time[13] == 0 && time[14] <= 1)
- {
-
-
-
- }
- }
復制代碼
所有資料51hei提供下載:
ESP8266.7z
(474.02 KB, 下載次數: 204)
2019-5-8 22:44 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|