python GSM 模块 - 电脑接收短信
前言:
最近做了一个需求,需要接收手机短信验证码。因此我这里考虑到了 GSM 模块。
目前电信已退 2g 网,联通正在退,只剩下移动。不过大家以后可以直接购买 4g 的模块进行使用。
1. 安装依赖
pip install pyserial
2. 串口连接
import serial
s = serial.Serial("/dev/ttyUSB0")
3. 打电话
s.write("ATD10086;\r\n".encode())
4. 发短信
设置短信模式为 PDU
s.write(b'AT+CMGF=0\r\n')
设置短信编码
s.write(b'AT+CSCS="UCS2"\r\n')
手机号码 16 进制 unicode 码
s.write('AT+CMGS="00310030003000380036"\r\n'.encode())
短信内容 16 进制 unicode 码
s.write('00680065006c006c006f00204e16754c'.encode())
发送代码
s.write(b'\x1A\r\n')
5. 读取短信
import re
读取所有短信
s.write(b'AT+CMGL="ALL"\r\n')
获取全部返回
res = s.read()
while True:
count = s.inWaiting()
if count == 0:
break
res += s.read(count)
匹配短信文本
msg_list = re.findall('\+CMGL\: (\d+),"REC READ","(.*?)","","(.*?)"\\r\\n(.*?)\\r\\n', res.decode())
msg_list = [list(i) for i in msg_list]
for msg in msg_list:
msg[1] = unicode2str(msg[1])
msg[-1] = unicode2str(msg[-1])
print(msg_list)
6. 字符串转 16 进制 unicode 码
def str2unicode(text):
code = ''
for i in text:
hex_i = hex(ord(i))
if len(hex_i) == 4:
code += hex_i.replace('0x', '00')
else:
code += hex_i.replace('0x', '')
return code
7. 16 进制 unicode 码转字符串
def unicode2str(code):
text = ''
tmp = ''
for i in range(len(code)):
tmp += code[i]
if len(tmp) == 4:
text += "\\u" + tmp
tmp = ''
text = eval(f'"{text}"')
return text
回帖内容已被屏蔽。
优秀
要的,建议移动卡
这个模块需要插手机卡吗,还是说可以直接同步手机卡的短信
这帖子很好,图文并茂!点赞