SIM800E 사용 하고 있습니다. 시간을 얻으려면 모뎀에 어떤 AT 명령을 보내야하는지 알고 싶습니다. 이 모뎀에는 RTC가 있습니다. 그러나 나는 셀 타워를 통해 자동으로 설정해야합니다. AT 명령을 사용하여 요청하면 타워는 모뎀으로 시간을 보낼 수 있습니다. 많은 전화에서 핸드 오프 중에 시간이 업데이트되는 것을 보았습니다.
매뉴얼은 이 정보를 가지고 있지 않습니다.
SIM800E 사용 하고 있습니다. 시간을 얻으려면 모뎀에 어떤 AT 명령을 보내야하는지 알고 싶습니다. 이 모뎀에는 RTC가 있습니다. 그러나 나는 셀 타워를 통해 자동으로 설정해야합니다. AT 명령을 사용하여 요청하면 타워는 모뎀으로 시간을 보낼 수 있습니다. 많은 전화에서 핸드 오프 중에 시간이 업데이트되는 것을 보았습니다.
매뉴얼은 이 정보를 가지고 있지 않습니다.
답변:
다음 명령을 사용했습니다.
AT+CCLK?
다음과 같이 날짜와 시간을 반환합니다.
+CCLK: "00/01/12,05:44:53+00"
Enfora, Telit 및 Sierra의 세 가지 셀 모듈을 사용하는 제품에서 성공적으로 수행되었습니다. AT 뒤에 + 문자를 사용한다는 사실은 이것이 독점적 명령과는 달리 일반적인 명령이며 모든 셀 모듈이 아니라면 대부분에서 사용할 수 있음을 의미합니다. (독점 명령은 AT 다음에 AT $, AT %, AT! 등과 같은 벤더 고유 문자를 사용합니다.)
주석에서 언급 했듯이이 명령을 사용하여 시간을 얻을 수없는 경우 (예 : 모든 0을 반환) 다른 방법은 네트워크에 연결하고 HTTP 명령을 사용하여 서버에서 시간을 얻는 것입니다.
For example, the following HTTP request:
HEAD /index.html HTTP/1.1\r\n
Host: www.somehost.com\r\n;
\r\n
여기서 somehost는 자체 서버 또는 Google.com 등입니다. 또한 index.html이 사이트의 기본 페이지라고 가정합니다 (Google의 경우는 아님).
다음과 같은 헤더를 반환합니다.
HTTP/1.x 200 OK
Transfer-Encoding: (something)
Date: Fri, 13 Nov 2013 04:36:25 GMT
(lots more stuff)
내가 아는 한 모든 서버는 헤더에 GMT 시간을 반환해야합니다.
우선 NITZ는 많은 네트워크에서 제대로 지원되지 않습니다 (COST-CUTTING이라고 말할 수 있음). 10 개 네트워크 중 1 개가 특히 멀리 떨어진 곳에서 사용하기 때문에 전혀 의존하지 않습니다.
두 번째로 + CCLK 명령은 모뎀의 내부 RTC를위한 것입니다. 일부 모뎀에는 네트워크에서이 시계를 업데이트하는 기능이 있습니다. 이것에 의존하는 것은 위험합니다.
위의 HTTP 요청이 불완전합니다. 즉 작동하지 않습니다. 나는 이것을하는 방법을 알고 있었기 때문에 그것이 작동하면 되돌릴 것입니다.
AT 뒤에 + 문자를 사용한다는 사실은 이것이 독점적 명령과는 달리 일반적인 명령이며 모든 셀 모듈이 아니라면 대부분에서 사용할 수 있음을 의미합니다. (독점 명령은 AT 다음에 AT $, AT %, AT! 등과 같은 벤더 고유 문자를 사용합니다.)
이것은 전적으로 사실이 아닙니다. AT + 규칙을 따르는 독점적 인 모뎀 명령이 있습니다. 예를 들어 AT + WOPEN은 독점적 인 Sierra 명령입니다.
모뎀에 관계없이 동일한 특정 명령 세트가 있습니다. 이들은 3GPP 문서에 정의되어 있습니다. 독점 명령은 일반적으로 공급 업체의 사용 설명서에 정의되어 있으며 독점으로 명확하게 표시되어 있습니다.
퍼티:
AT+COPS=2
OK
AT+CTZU=1
OK
AT+COPS=0
OK
+CTZU: "15/05/06,17:25:42",-12,0
자동으로 발생 하지 않기 때문에 결과를 구문 분석하고 clk에 배치해야합니다 . (적어도 내 Cinterion에서)
AT + CIPGSMLOC 명령을 사용하십시오. SIMCOM 모듈에서 잘 작동합니다.
이 명령을 사용하려면 GPRS 서비스가 연결되어 있어야합니다. 따라서 먼저 적절한 명령 순서를 사용하여 GPRS 서비스를 연결 한 다음이 명령을 사용하여 GSM 네트워크에서 날짜 및 시간을 가져 오십시오.
GPRS 서비스 첨부 :
CMD:AT+CGATT=1
CMD:AT+SAPBR=3,1,"Contype","GPRS"
CMD:AT+SAPBR=3,1,"APN",""
CMD:AT+SAPBR=3,1,"USER",""
CMD:AT+SAPBR=3,1,"PWD",""
CMD:AT+SAPBR=1,1
CMD:AT+SAPBR=2,1 /* to confirm that GPRS is attached. will show IP if attached */
그런 다음 GSM 위치 명령을 사용하십시오.
AT+CIPGSMLOC=1,1
이 명령은 네트워크에서 정보를 가져 오려면 상당한 시간 (몇 초)이 필요하므로 명령 실행 기능에 적절한 시간 초과를 지정하십시오.
이 명령은 또한 모듈이 연결된 BTS 위치를 반환합니다. 따라서 GSM 모듈의 대략적인 위치도 얻을 수 있습니다.
자세한 내용은이 설명서를 참조하십시오. (SIM800과 동일한 방식으로 작동)
SIM900_GSM Location AT Command Manual_V1.00
또한 AT + CLBS 명령은이 명령과 다릅니다. 일부 지역에서는 작동하지 않을 수 있습니다. (사용할 수 없었습니다!). 그러나 AT + CIPGSMLOC는 항상 작동합니다.
+CIPGSMLOC: 302<\r><\n>
응답
다음은 셀룰러 네트워크 시간을 가져 오는 AT 명령 시퀀스입니다 .UBLOX LEON G-200 GSM 모듈 에서 작동했습니다 .
GSM_Send_Modem_Command("AT+COPS=2\r\n");//de register
GSM_Send_Modem_Command("AT+CTZU=1\r\n");//automatic time zone update is enabled
GSM_Send_Modem_Command("AT+COPS=0\r\n");// register to network
GSM_Send_Modem_Command("AT+CCLK?\r\n");// gets the clock of the MT
U-Blox LTE 용 펌웨어를 개발했습니다. AT + CCLK를 사용 했습니까? 모뎀에서 현재 현지 시간을 가져옵니다.
다음 형식으로 시간을 제공합니다. 동기화 된 명령이 아닙니다.
+CCLK: "00/01/01,05:44:53+00" (might get unsynchronized time if the modem time is not sync with the system time)
따라서 등록 전에 다음 AT 명령이 전송되어 네트워크와 시간을 동기화합니다.
AT+CTZU=1\r\n
그래서 내 명령 순서는 다음과 같습니다.
AT+CTZU=1\r\n
AT+CREG=1\r\n (to subscribe for the network registration updates)
AT+CCLK?\r\n (The Time Zone information is provided after the network registration, if the network supports the time
zone information)
시간이 올바른지 확인하기위한 추가 논리 :
70/01/01 또는 00/01/01에 대해 날짜를 확인합니다 (이 경우 모뎀에 유효하지 않은 시간이있는 경우 시간이 표시됨). 유효하지 않은 경우 올바른 시간이 될 때까지 1 분마다 주기적으로 시도합니다. 몇 번의 재 시도가 CCLK 전송을 중지 한 후? 다른 시간 소스에 의존하십시오.
참고 : NITZ는 일부 국가에서만 지원됩니다 ( https://en.wikipedia.org/wiki/NITZ )
따라서 해당 국가에서 지원되지 않는 경우 시간을 업데이트하는 백업 방법을 사용하는 것이 가장 좋습니다.
내 경우에는 GPS 모듈이 있으므로 GNSS 데이터를 통해 시간 업데이트를 얻습니다.
또한 여기에는 관련이 없지만 시간 동기화에 유용하다고 생각했습니다.
chrony deamon을 실행하여 시스템 시간을 업데이트합니다 (수동 명령 사용). 따라서 두 시간 업데이트를 모두 가져오고 chrony는 정확한 시간을 결정하고 시스템 시간을 업데이트합니다.