python调用AT指令操作短信猫
短信猫是一种可以通过串口通信来操作发送短信的设备, 在python中, 要想通过COM通信, 需要使用serial包。通过使用serial向短信猫发送AT指令的方式来操作短信猫,网上有不少python来操作短信猫的例子,能找到的主要有两种代码:1, 使用控件发送短信, 代码一般看起来是这样的#! /usr/bin/env python#coding=gbkimport sysim
短信猫是一种可以通过串口通信来操作发送短信的设备, 在python中, 要想通过COM通信, 需要使用serial包。
通过使用serial向短信猫发送AT指令的方式来操作短信猫,网上有不少python来操作短信猫的例子,能找到的主要有两种代码:
1, 使用控件发送短信, 代码一般看起来是这样的
#! /usr/bin/env python
#coding=gbk
import sys
import win32com.client
ocxname='ShouYan_SmsGate61.Smsgate'
axocx=win32com.client.Dispatch(ocxname)
axocx.CommPort=8#设置COM端口号
axocx.SmsService='+8613800100500'#设置短信服务号码
axocx.Settings='9600,n,8,1'#设置com端口速度
axocx.sn='loyin'
c=axocx.Connect(1)#连接短信猫或手机
print '连接情况',axocx.Link()
axocx.SendSms('python确实是很好的','15101021000',0)#发送短信
2. 第二种是使用AT指令PDU模式发送, 过程比较复杂, 需要经过多次编码
首先是发送短信的手机号和接受的手机号, 前面加86, 最后一位补一个F, 然后奇偶位互换,随后在两个号码之间增加一些固定的间隔符,最后加上要发送的信息和结束标志,这些拼成一个字符串, 然后使用AT+CMGS发送,试了很多次都不成功,网上的代码多半不靠谱啊。
其实用text模式发送过程很简单, 交互环境下几行代码搞定:
>>>import serial >>>ser = serial.Serial(port='COM1', baudrate=9600) >>>ser.write("AT+CMGF=1\r") >>>ser.write("AT+CMGS=18600000000\r") >>>ser.write("1234" + "\x1A")
注:这里是发送验证码,所以选择文本发送,但是如果需要发送中文还是需要pdu模式, 那么用pdu怎么发送呢,首先要生成一个手机号+短信的字符串
1, 手机号 加86, 尾部加F, 然后奇偶换位 dis_phone
2,短信 转unicode 字符, 长度 /2 ->msg, msg_len (最后一步字符串中的msg_len需要转为16进制字符串)
3,发送AT+CMGF=0 , 切换到pdu模式
4,发送AT+CMGS=15+ LEN
5,生成msg字符串信息并发送 '0011000D91{phone}000801{msg_len}{msg}\x1A'.format(phone=dis_phone, msg_len=msg_len, msg=msg)
更多推荐
所有评论(0)