我有通過串行埠進行通信的 Matlab 代碼,我正在嘗試將代碼轉換為 python,但是我沒有收到相同的“讀取”訊息。
這是matlab代碼:
s = serial('COM3','BaudRate',115200,'InputBufferSize',1e6,'Timeout',2); %OPEN COM PORT
fopen(s);
string=[];
while(length(st)<1)
fwrite(s,30,'uint8'); %REQUEST CONNECTION STRING
pause(0.1);
st = fread(s,5); %READ CONNECTION (5BYTES, "Ready")
disp(st)
end
fwrite(s,18,'uint8'); % START ACQUISITION
while(1)
st(1:131) = fread(s,131); .....
disp(st)
出去:
%first disp(st)
82
101
97
100
121
%from disp(st) second time
106
85
106
59
106
61
106
0
106...
這是我對python代碼的嘗試:
# Open serial -
import serial
import time
s = serial.Serial('COM3', baudrate=115200, timeout=2 )
s.set_buffer_size(rx_size = 1000000, tx_size = 1000000)
#serieal is open
print ("serial is open: ", s.isOpen())
s.write(30) #request connection string
time.sleep(0.1)
string = s.read(5) #read connection string (5 BYTESm "Ready)
print (string)
# start aquisition
s.write(18) #request connection string
print (s.read(131))
但是輸出是 OUT:
serial is open: True
b'Uj.jg'
b'jVj3j-i\xefjOj8jajJj"i\xb8j\x19j4j,j\x17\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00j\x9aj\x9aj\x8djfjkj/j\xa0j\x97jbjKj#i\xb9j\x1bj5j-j\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00/\xaaUj\xe5j\xb7'
如您所見,它們并不相同,因此:
- 如何通過pyserial發送一個'uint8'編碼的數字,如matlabs:fwrite(s,30,'uint8');
- 如何從類似于 matlabs 的 pyserial 讀取和顯示:st = fread(s,5);
uj5u.com熱心網友回復:
如何從類似于 matlabs 的 pyserial 讀取和顯示:st = fread(s,5);
uint8 表示 8 位數字。所以1個位元組。
在 python 中,你得到一個位元組物件,它是一個位元組序列。您可以對其進行迭代以獲取每個值。- 這正是你想要的,因為那將是一個位元組的值,0-255
first = b'Uj.jg'
for i in first:
print(i)
這給了你:
85
106
46
106
103
如何通過pyserial發送一個'uint8'編碼的數字,如matlabs:fwrite(s,30,'uint8');
您可以使用 int.to_bytes 將 int 轉換為 bytes 物件:
print((30).to_bytes(1, byteorder="big"))
結果是
b'\x1e'
第一個引數是位元組數——在我們的例子中是 1。第二個引數是位元組順序——當我們使用 1 個位元組時它是無用的,但它仍然是必需的。
所以你所擁有s.write(30)的
s.write(b'\x1e')
或保持“30”的東西可見,只需直接粘貼轉換:
s.write((30).to_bytes(1, byteorder="big"))
發送 18 相同:s.write((18).to_bytes(1, byteorder="big"))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/490772.html
標籤:Python matlab 串行端口 pyserial
