1. 程式人生 > >Python 調用 GSM A6

Python 調用 GSM A6

串口 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