Python 調用 GSM A6
阿新 • • 發佈:2017-10-06
串口 pdu serail
代碼速記:
#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
Python 調用 GSM A6