代码速记:
#encoding: utf-8 #author: walker #date: #summary: import time import serial.tools.list_ports # 打印所有串口名 def PrintAllSerialPortName(): serailPortList = list(serial.tools.list_ports.comports()) print(‘serail port number: %d‘ % len(serailPortList)) if len(serailPortList) < 1: print("Not found serail port!") return for serailPort in serailPortList: serialFd = serial.Serial(list(serailPort)[0], 9600, timeout=60) print(‘serail port name:%s‘ % serialFd.name) print(serialFd.port) print(type(serialFd)) serialFd.close() class Messager(object): # 构造函数,打开端口 def __init__(self): self.sePort = serial.Serial(port=‘COM3‘, baudrate=19200, bytesize=8, stopbits=1, timeout=3) # 析构函数,关闭端口 def __del__(self): #self.sePort.close() pass # 重新打开端口 def reopen(self): print(‘reopen ...‘) self.sePort.close() self.sePort = serial.Serial(port=‘COM3‘, baudrate=19200, bytesize=8, stopbits=1, timeout=3) time.sleep(3) # 执行指令 # 返回从串口读取的返回值 def execCmd(self, cmd, end=‘\r‘): cmd = cmd + end bCmd = cmd.encode(‘ascii‘) print(‘write:%s‘ % bCmd) self.sePort.write(bCmd) response = self.sePort.readall() print(‘read :%s‘ % response) print() return response # 发送英文短信 # 正确返回 True;错误返回 False def __sendMessageEn(self, phoneNumber, message): if not self.execCmd(‘AT+CMGF=1‘).endswith(b‘\r\nOK\r\n‘): #设置TEXT MODE return False if not self.execCmd(‘AT+CSCS="GSM"‘).endswith(b‘\r\nOK\r\n‘): return False if not self.execCmd(‘AT+CMGS="%s"‘ % phoneNumber).endswith(b‘\r\n> ‘): return False # 十六进制的1A为结束符 if not self.execCmd(message + ‘\x1A‘, end=‘‘).endswith(b‘\r\nOK\r\n‘): return False return True # 调用私有方法 __sendMessageEn # 在失败时重新打开串口 def sendMessageEn(self, phoneNumber, message): for _ in range(0, 3): if self.__sendMessageEn(phoneNumber, message): break self.reopen() if __name__ == ‘__main__‘: messager.sendMessageEn(‘18688754379‘, ‘xxx‘) messager.sendMessageEn(‘18688754379‘, ‘zzz‘)
*** walker ***
本文出自 “walker的流水账” 博客,请务必保留此出处http://walkerqt.blog.51cto.com/1310630/1970472
原文地址:http://walkerqt.blog.51cto.com/1310630/1970472