笔者相信有很多在玩UART的朋友一定也会遇到跟笔者一样的问题,希望可以同时去存取两个UART。 但在网路上找到的答案都 ....
先建立一个通用的模板後,名称为readCom的python file,使用Popen的形式在同一个档案中做轮循式的呼叫及存取 ...
:readCOM.py
ser1 = serial.Serial(port="COM1",baudrate=9600)
ser2 = serial.Serial(port="COM2",baudrate=9600)
ser1.write('command for reading out device 1')
output1 = ser1.readline()
ser2.write('command for reading out device 2')
# now you have to wait at least 100ms for device 2 to respond
output2 = ser2.readline()
引用自Python Pyserial read data form multiple serial ports at same time - Stackoverflow
但笔者想要的是可以在一个档案中就做到两个UART 的存取,疯狂寻找了各种方案後笔者生出了一个最佳解法,如下:
方法一:
使用pyserial 直接开两个UART Ports, 将Transmitter/ Receiver 切成两个class, 分别跑在两个不同的thread 内 缺点: 就是跑一跑後很容易断掉,主要原因是I/O阻塞
方法二:
使用pyserial 及aioserial , 各带入一组UART, 後面则跟方法一样。 aioserial 其实也是使用其中一个pyserial的版本後再做封装的一个模组,使用方式基本上是跟pyserial 九成相似的
import serial
import aioserial
p1 = serial.Serial(port=eval(uart1[0]),
baudrate=fCOpt[1],
bytesize=fCOpt[2],
parity=eval(fCOpt[3]),
stopbits=fCOpt[4],
timeout=fCOpt[5],
xonxoff=fCOpt[6][0],
rtscts=fCOpt[6][1],
dsrdtr=fCOpt[6][2])
p2 = aioserial.Serial(port=eval(sGOpt[0]),
baudrate=sGOpt[1],
bytesize=sGOpt[2],
parity=eval(sGOpt[3]),
stopbits=sGOpt[4],
timeout=sGOpt[5],
xonxoff=sGOpt[6][0],
rtscts=sGOpt[6][1],
dsrdtr=sGOpt[6][2])
结论:
这样就可以简单达成在同一个档案内同时开启两个UART而不会遇到I/O阻塞的状况,但p1/ p2的存取还是要使用在不同的thread 中才行。 相关的细节後续会介绍
Hi,介绍了api的各种函数後,相信读者一定很好奇,有了这些资料之後要怎麽回测啊? 毕竟在开始实单做...
系统除了即时接受及回应使用者请求,也需要执行各种非同步工作,例如背景排程及寄送讯息通知…等。在实作上...
第 32 天:快速回覆 QuickReply 介绍 对其他人来说也许没什麽,但对他而言这可真是不容易...
大家好~ 今天来实作如何用 Flex Message 回覆讯息吧! 那麽关於 Flex Messag...
Q_Q 没学完啦 Redux-saga 范例 import { createStore, appl...