关于Python和pip在Windows环境下的安装方法,可以参考http://www.tuicool.com/articles/eiM3Er3。
运行cmd:输入pip install pyserial,安装pyserial模块。这里已经安装过该模块,如下:
实现的功能:开1M波特率打印串口接收到的信息。运行脚本之前,将USB转串口工具插入PC USB口;打开设备管理器,查看需要设置哪个COM口;脚本中增加脚本参数解析,运行脚本时指定串口号,波特率默认1M,也可以参数指定波特率,按Ctr+C退出脚本运行。
下面是serial test.py脚本:
1 #!/usr/bin/python 2 #encoding: utf-8 3 import serial, time, argparse 4 import ctypes, sys, os 5 from sys import exit 6 7 #///// 脚本命令行参数指定 ///// 8 #运行脚本时,需要指定参数,例如1、 python serial_test.py --port COM8 --baudrate 9600 9 # 2、 python serial_test.py --port COM8 10 # create parser 11 parser = argparse.ArgumentParser(description="My serial") 12 # add expected arguments 13 parser.add_argument('--port', dest='port', required=True) 14 parser.add_argument('--baudrate', dest='baudrate', required=False) 15 # parse args 16 args = parser.parse_args() 17 #PORT = '/dev/tty.usbserial-A7006Yqh' 18 PORT = args.port 19 BAUDRATE = 1000000 #default baudrate:1M 20 if args.baudrate: 21 BAUDRATE = args.baudrate 22 23 24 25 #///// font color concerned ///// 26 STD_INPUT_HANDLE = -10 27 STD_OUTPUT_HANDLE = -11 28 STD_ERROR_HANDLE = -12 29 30 # 字体颜色定义 ,关键在于颜色编码,由2位十六进制组成,分别取0~f,前一位指的是背景色,后一位指的是字体色 31 #由于该函数的限制,应该是只有这16种,可以前景色与背景色组合。也可以几种颜色通过或运算组合,组合后还是在这16种颜色中 32 33 # Windows CMD命令行 字体颜色定义 text colors 34 FOREGROUND_BLACK = 0x00 # black. 35 FOREGROUND_DARKBLUE = 0x01 # dark blue. 36 FOREGROUND_DARKGREEN = 0x02 # dark green. 37 FOREGROUND_DARKSKYBLUE = 0x03 # dark skyblue. 38 FOREGROUND_DARKRED = 0x04 # dark red. 39 FOREGROUND_DARKPINK = 0x05 # dark pink. 40 FOREGROUND_DARKYELLOW = 0x06 # dark yellow. 41 FOREGROUND_DARKWHITE = 0x07 # dark white. 42 FOREGROUND_DARKGRAY = 0x08 # dark gray. 43 FOREGROUND_BLUE = 0x09 # blue. 44 FOREGROUND_GREEN = 0x0a # green. 45 FOREGROUND_SKYBLUE = 0x0b # skyblue. 46 FOREGROUND_RED = 0x0c # red. 47 FOREGROUND_PINK = 0x0d # pink. 48 FOREGROUND_YELLOW = 0x0e # yellow. 49 FOREGROUND_WHITE = 0x0f # white. 50 FOREGROUND_INTENSITY = 0x08 # 加亮 51 52 # Windows CMD命令行 背景颜色定义 background colors 53 BACKGROUND_BLUE = 0x10 # dark blue. 54 BACKGROUND_GREEN = 0x20 # dark green. 55 BACKGROUND_DARKSKYBLUE = 0x30 # dark skyblue. 56 BACKGROUND_DARKRED = 0x40 # dark red. 57 BACKGROUND_DARKPINK = 0x50 # dark pink. 58 BACKGROUND_DARKYELLOW = 0x60 # dark yellow. 59 BACKGROUND_DARKWHITE = 0x70 # dark white. 60 BACKGROUND_DARKGRAY = 0x80 # dark gray. 61 BACKGROUND_BLUE = 0x90 # blue. 62 BACKGROUND_GREEN = 0xa0 # green. 63 BACKGROUND_SKYBLUE = 0xb0 # skyblue. 64 BACKGROUND_RED = 0xc0 # red. 65 BACKGROUND_PINK = 0xd0 # pink. 66 BACKGROUND_YELLOW = 0xe0 # yellow. 67 BACKGROUND_WHITE = 0xf0 # white. 68 BACKGROUND_INTENSITY = 0x80 # 加亮 69 70 class Color: 71 ''' See http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winprog/winprog/windows_api_reference.asp 72 for information on Windows APIs. - www.bitsCN.com''' 73 std_out_handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE) 74 def set_cmd_color(self, color, handle=std_out_handle): 75 """(color) -> bit 76 Example: set_cmd_color(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY) 77 """ 78 bool = ctypes.windll.kernel32.SetConsoleTextAttribute(handle, color) 79 return bool 80 def reset_color(self): 81 self.set_cmd_color(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE) 82 def print_red_text(self, print_text): 83 self.set_cmd_color(FOREGROUND_RED | FOREGROUND_INTENSITY) 84 print(print_text) 85 self.reset_color() 86 def print_green_text(self, print_text): 87 self.set_cmd_color(FOREGROUND_GREEN | FOREGROUND_INTENSITY) 88 print(print_text) 89 self.reset_color() 90 def print_blue_text(self, print_text): 91 self.set_cmd_color(FOREGROUND_BLUE | FOREGROUND_INTENSITY) 92 print(print_text) 93 self.reset_color() 94 def print_yellow_text(self, print_text): 95 self.set_cmd_color(FOREGROUND_YELLOW | FOREGROUND_INTENSITY) 96 print(print_text) 97 self.reset_color() 98 def print_red_text_with_blue_bg(self, print_text): 99 self.set_cmd_color(FOREGROUND_RED | FOREGROUND_INTENSITY| BACKGROUND_BLUE | BACKGROUND_INTENSITY) 100 print(print_text) 101 self.reset_color() 102 103 104 #///// Serial concerned ///// 105 #initialization and open the port 106 #possible timeout values: 107 # 1. None: wait forever, block call 108 # 2. 0: non-blocking mode, return immediately 109 # 3. x, x is bigger than 0, float allowed, timeout block call 110 ser = serial.Serial() 111 ser.port = PORT 112 ser.baudrate = BAUDRATE 113 ser.bytesize = serial.EIGHTBITS #number of bits per bytes 114 ser.parity = serial.PARITY_NONE #set parity check: no parity 115 ser.stopbits = serial.STOPBITS_ONE #number of stop bits 116 ser.timeout = 1 #non-block read 117 #ser.timeout = None #block read 118 #ser.timeout = 2 #timeout block read 119 ser.xonxoff = False #disable software flow control 120 ser.rtscts = False #enable hardware (RTS/CTS) flow control 121 ser.dsrdtr = False #disable hardware (DSR/DTR) flow control 122 ser.writeTimeout = 2 #timeout for write 123 124 125 126 try: 127 ser.open() 128 except Exception as e: 129 print("error open serial port: " + str(e)) 130 exit() 131 132 if ser.isOpen(): 133 try: 134 ser.flushInput() #flush input buffer, discarding all its contents 135 ser.flushOutput()#flush output buffer, aborting current output 136 #and discard all that is in buffer 137 138 #write data 139 #ser.write("AT+CSQ".encode()) 140 141 clr = Color() 142 143 clr.print_green_text("[%s, %dbps, %d%s%d, %s]" %(ser.port, ser.baudrate, ser.bytesize, 144 ser.parity, ser.stopbits, "RTS/CTS" if ser.rtscts else ("XON/XOFF" if 145 ser.xonxoff else ("DSR/DTR" if ser.dsrdtr else "None")))) 146 147 clr.print_green_text("Termite is initialized and ready.") 148 149 #give the serial port sometime to receive the data 150 time.sleep(0.5) 151 152 try: 153 while(True): 154 response = ser.readline() 155 if(len(response) > 0): 156 response = response.decode("utf-8", "replace")# "ignore") 157 clr.print_red_text((response).strip()) 158 159 except KeyboardInterrupt: 160 print("Exist") 161 pass 162 163 except Exception as e1: 164 print("error communicating...: " + str(e1)) 165 166 else: 167 print("cannot open serial port ") 168 #////////////////////////////////////////////////////////////////////////////////////////////////
运行脚本前,切换到脚本所在的目录,Windows环境下,运行cmd, 输入cd /D E:Python Scripts[回车],输入python serial_test.py --port COM8 [可选 --baudrate 1000000][回车]:
这样就可以方便的打印串口调试log信息,这里的波特率、串口号都可以通过脚本命令行参数指定。