SIM800C通過NTP同步本地時間
阿新 • • 發佈:2018-11-29
時間倉促,大概記錄一下,以後詳細貼上C程式
----------------------------------簡單查詢--------------------------------
AT+CSQ //檢視訊號質量
+CSQ: 25,0
OK
AT+CREG? //檢視GSM是否註冊成功
+CREG: 0,1
OK
AT+CGREG? //檢視GPRS是否註冊成功
+CGREG: 0,1
OK
AT+CGATT? //檢視GPRS附著狀態
+CGATT: 1
OK
----------------------------------以下是重點-----------------------------
AT+SAPBR=3,1,"CONTYPE","GPRS" //設定網路引數
OK
AT+SAPBR=3,1,"APN","UNIWAP" //設定APN
OK
AT+SAPBR=1,1 //啟用網路場景
OK
AT+SAPBR=2,1 //獲取分配IP地址
+SAPBR: 1,1,"10.97.109.220"
OK
AT+CNTP="ntp1.aliyun.com" ,32 //設定NTP伺服器地址,時區
OK
AT+CNTP //開啟網路同步
OK
+CNTP: 1
AT+CCLK? //查詢本地時間
+CCLK: "18/05/14,13:00:33+00"
OK
題外話,原本選的是交大NTP,發現沒連上。。。。。。換成阿里雲的就OK了,給阿里點個贊
另外,北京時區是東八區,我覺得應該是AT+CNTP="ntp1.aliyun.com",8
,可實際相差6小時,補加24後,得到正確時間,即AT+CNTP="ntp1.aliyun.com",32
C程式碼
extern u8 ABT_SyncTime(void)
{
if(sim900a_send_cmd((u8 *)"AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\"",(u8 *)"OK",100))
return 1;
if(sim900a_send_cmd((u8 *)"AT+SAPBR=3,1,\"APN\",\"UNIWAP\"",(u8 *)"OK",500))
return 2;
sim900a_send_cmd((u8 *)"AT+SAPBR=1,1",(u8 *)"OK",200);
if(sim900a_send_cmd((u8 *)"AT+SAPBR=2,1",(u8 *)"OK",600))
return 4;
if(sim900a_send_cmd((u8 *)"AT+CNTP=\"ntp1.aliyun.com\",32",(u8 *)"OK",200))
return 5;
if(sim900a_send_cmd((u8 *)"AT+CNTP",(u8 *)"CNTP: 1",2000))
return 6;
return 0;
}
extern void ABT_GetLocalTime(void)
{
char *timePtr = NULL;
/*
if(sim900a_send_cmd((u8 *)"AT+CCLK?",(u8 *)"CCLK:",2000))
timePtr = strstr(USART2_RX_BUF,(const char *)"CCLK:");
*/
sim900a_send_cmd((u8 *)"AT+CCLK?",(u8 *)"CCLK:",2000);
timePtr = strstr((const char*)USART2_RX_BUF,(const char*)"CCLK:");
G_LocalTime.ALT_year = 2000 + 10*(timePtr[7] - '0') + timePtr[8] - '0';
G_LocalTime.ALT_month = 10*(timePtr[10] - '0') + timePtr[11] - '0';
G_LocalTime.ALT_day = 10*(timePtr[13] - '0') + timePtr[14] - '0';
G_LocalTime.ALT_hour = 10*(timePtr[16] - '0') + timePtr[17] - '0';
G_LocalTime.ALT_minute = 10*(timePtr[19] - '0') + timePtr[20] - '0';
G_LocalTime.ALT_second = 10*(timePtr[22] - '0') + timePtr[23] - '0';
}
註釋部分也比較迷,真的沒道理啊,試了不下於20次,還是不行。時間緊,就暫時用註釋後的程式碼了。
結構體定義部分
struct ABT_LocalTime_TypeDef{
u16 ALT_year;
u8 ALT_month;
u8 ALT_day;
u8 ALT_hour;
u8 ALT_minute;
u8 ALT_second;
};
RX2_BUF收到的資料
圖1
timePtr指標指向RX2_BUF的子串位置
圖2
USART2_RX_BUF : 0X20000448,
timePtr:0X20000454,
相差12,
在圖1可見,CCLK:起始位置正是12,以後通過timePtr指標索引資料內容即可