天天看點

Micropython加速物聯網開發6 - 通過序列槽使用2G模組短信功能Micropython序列槽操作M6220

內建2G通信、定位模組,賦予物聯網特性。本例使用M6220,它是一款基于eSIM技術的2G模組,支援GSM/GPRS,提供GPS+北鬥雙模定位功能,并具備一定的資料處理能力,其2G工作頻段有GSM850、GSM900、DCS1800和PCS1900,内置32Mb Flash、32Mb RAM,提供GPRS資料傳輸、GSM短信業務,導航部分以UART或者I2C輸出,可提供NMEA0183協定輸出,支援A-GNSS。M6220是面向物聯網領域的非常強悍的模組之一。

Micropython序列槽

通過Micropython序列槽操作2G模組,本例使用UART4,将X1、X2接口短接,在REPL中通過如下指令測試自身收發功能。

>>> from pyb import UART
>>> u4 = UART(4,115200)
>>> u4.init(115200, bits=8, parity=None, stop=1)
>>> u4.write('UART4 send&receive test')
23
>>> u4.readall()
b'UART4 send&receive test'
>>> 
           

首先導入UART子產品,通過UART(4, )定義序列槽4,使用init初始化 波特率為115200,資料位8,奇偶校驗None,停止位1。

執行u4.write('UART4 send&receive test')發送測試資料,然後通過u4.readall()讀取到UART4發送的資料,回環測試成功。

操作M6220

M6220需要3.8V電源供電,和TPYBoard的序列槽相連,并且共地。

Micropython加速物聯網開發6 - 通過序列槽使用2G模組短信功能Micropython序列槽操作M6220

檢視模組狀态

使用序列槽發送AT指令操作M6220 2G模組。

首先發送AT測試模組和TPYBoard通信是否正确,如果正确模組會傳回OK。

>>> u4.write('AT\r\n')
4
>>> u4.readall()
b'AT\r\n\r\nOK\r\n'
           

注意AT指令的發送末尾跟'\r\n'表示回車換行确認。

發送短信

指令AT+CPIN? 檢視SIM卡狀态,如果一切正常傳回READY:

>>> u4.write('AT+CPIN?\r\n')
10
>>> u4.readall()
b'AT+CPIN?\r\n\r\n+CPIN:READY\r\n\r\nOK\r\n'
           

指令AT+CGREG?檢視SIM卡是否欠費,欠費傳回1,0 ...,否則傳回1,1...

>>> u4.write('AT+CGREG?\r\n')
11
>>> u4.readall()
b'AT+CGREG?\r\n\r\n+CGREG: 1,1,"8109","22e2",0\r\n\r\nOK\r\n'
           

指令 AT+CMGF=1設定短信格式為文本模式:

>>> u4.write('AT+CMGF=1\r\n')
11
>>> u4.readall()
b'AT+CMGF=1\r\n\r\nOK\r\n'
           

指令 AT+CSDH=1顯示結果碼的值:

>>> u4.write('AT+CSDH=1\r\n')
11
>>> u4.readall()
b'AT+CSDH=1\r\n\r\nOK\r\n'
           

發送'test'到手機号的AT指令如下: AT+GMGS="手機号"

>test<ctrl-Z>

是以REPL中操作流程如下:

1. 發送AT+GMGS="手機号",等待模組傳回>提示符:

>>> u4.write('at+cmgs="手機号"\r\n')
23
>>> u4.readall()
b'at+cmgs="手機号"\r\n\r\n> '
           

2. 發送短信内容'test':

>>> u4.write('test')
           

3. 調用writechar()發送ctrl-Z的十六進制數0x1a:

>>> u4.writechar(0x1a)

此時,手機成功收到短信,内容為'test'。

讀取短信

通過指令AT+CPMS=設定短信存儲位置,M6220短信存儲位置分為SIM卡和mem1。 設定所有短信均存儲在mem1中:

>>> u4.write('AT+CPMS="ME","ME","ME"\r\n')
           

讀取索引為1的短信,内容為'hello':

>>> u4.write('AT+CMGR=1\r\n')
11
>>> u4.readall()
... hello ...
           

删除短信

指令AT+CMGD=1删除索引為1的短信:

>>> u4.write('AT+CMGD=1\r\n')
           

指令AT+CMGD=0删除所有短信:

>>> u4.write('AT+CMGD=0\r\n')