A Python GSM modem implementation based on the SIM868 specification
Method | Description | Arguments | Hayes Commands |
---|---|---|---|
write | Send a Hayes command to the modem | command, timeout = 5 |
|
read | Reads a response from the modem | ||
getEcho | Get an echo response from the modem | AT |
|
getCSQ | Get the call signal quality | AT+CSQ |
|
getText | Get an SMS text message from the modem | AT+CMGR |
|
sendText | Send an SMS text message | number, message |
AT+CMGF=1 AT+CSCS="GSM" AT+CMGS |
setGPSOn | Turn the GNSS/GPS on | AT+CGNSPWR=1 |
|
getGPSData | Get the GNSS/GPS data from the modem | AT+CGNSINF |
|
httpPost | HTTP post to a url | url |
AT+HTTPINIT AT+HTTPPARA AT+HTTPACTION=0 AT+HTTPTERM |
httpInit | Initialize the HTTP client | AT+HTTPPARA="CID",1 AT+SAPBR=3,1,"CONTYPE","GPRS" AT+SAPBR=3,1,"APN","pp.vodafone.co.uk" AT+SAPBR=3,1,"USER","wap" AT+SAPBR=3,1,"PWD","wap" AT+SAPBR=2,1 AT+SAPBR=1,1 |
Value | Definition |
---|---|
0 | -115 dBm or less |
1 | -111 dBm |
2...30 | -110... -54 dBm |
31 | -52 dBm or greater |
99 | not known or not detectable |
The number
argument takes phone numbers in the E.164 format, for example +447797123456
The method only needs to be called once to turn the GNSS/GPS functionality on
The method returns a string-indexed array. The keys are datetime
, latitude
, longitude
and altitude
The method only needs to be called once to initialize parameters for future HTTP interactions. The modem is configured to use Vodaphone UK's configuration; this can be easily changed via the modem code
The below example opens a serial connection to the modem via COM3
, prints an echo response from the modem, prints the current call signal quality, turns the GNSS/GPS on and then prints the GNSS/GPS data to the console every 60 seconds
def main():
modem = GSMModem('COM3')
print("Echo = " + modem.getEcho())
print("CSQ = " + modem.getCSQ())
time.sleep(1)
modem.setGPSOn()
while True:
gps = modem.getGPSData()
print("GPS Data = " + str(gps))
time.sleep(60)
if __name__ == '__main__':
main()