2015-12-07 48 views
1

我試圖通過使用pyserial在串行端口上發送包含十六進制值的字節。十六進制值必須在一個變量中(這樣我才能在發送前做一些操作)。示例代碼會解釋我的意圖:使用pyserial發送存儲在變量中的十六進制或ASCII值

import serial 
com=serial.Serial('COM1') 
a_var=64 
a_var=a_var+1 
com.write(a_var) #This of course throws error 

我想收到「A」或×41的另一邊。我可以發送十六進制使用

com.write(b'\x41') 

但不使用變量。將其轉換爲字符串或字符或編碼字符串沒有幫助。我正在使用python 3.5。

謝謝

回答

0

字節組可以被用來發送字節(十六進制或ASCII)。它們是可變的,因此數字操作是可能的。任何數量的字節都可以使用它發送。

import serial 

com=serial.Serial('COM2') 
elements=[65,67,69,71]  #Create an array of your choice 
a_var=bytearray(elements) #Create byte array of it 
com.write(a_var[0:3])  #Write desired elements at serial port 

a_var[0]=a_var[0]+1   #Do your mathematical manipulation 

com.write(a_var[0:1])  #Write again as desired 
com.close() 
2

首先,變量的名稱選擇不是最優的。 input是一個內置函數,您可能會將其隱藏起來。

有很多辦法把bytes到一個變量:

to_send = b'A' 
to_send = b'\x41' 
to_send = bytes([65]) 

你看如何使用ASCII字符,十六進制數的轉義序列和整數列表。

立即發送經由

com.write(to_send) 
+0

這個變量名稱只是一個例子。我用過另一個。無論如何,我會編輯它。 –

+0

但是這不能達到變量的目的。我想在發送之前對數據進行一些加減運算。然而bytearray([x])做了訣竅。它是可變的。我改變了索引0的值。 –