[問題] (Fix)經由UART傳遞固定byte的資料至C Code

作者: c74319 (阿嘉)   2016-05-23 11:53:52
大家好,想請教一個問題,一開始是工作上需要寫一個GUI做硬體測試用
我選擇wxpython去完成GUI,所以現在有簡單的Function buttom。
要傳遞的命令是「一個byte的16進制0x55」以下是我撰寫的python code
def OnCommand(self, e):
port = "COM3"
band = 115200
ser = serial.Serial(port, band, timeout=1)
print(ser.name)
ser.write('0x55'.encode('utf-8'))
out = ser.read()
print(out)
以上是buttom被按下的功能
之所以會這樣撰寫,因為在python IDE下我做了一些測試
>>> a='0x55'
>>> ((a).encode('utf-8'))
b'0x55'
所以我認為會傳遞我想要的資料格式。
但是硬體的C Code宣告的接收資料的buff格式是uint8_t,
我的疑問是C的部分會不會不懂得從python傳遞的資料。
這中間的過程有在google搜尋過相關的問題,但都英文的網頁
閱讀實在有點困難,還是說應該要用到ctype如果是這樣,又是另外一個大問題啦!!
感謝閱讀到這裡的所有人
作者: tiefblau (tiefblau)   2016-05-23 12:27:00
你要的是ser.write(b'\x55') 吧?b'0x55'是四個byte 你print一下長度就懂了python會把可以用ASCII印出來的直接印成ASCII 所以你串其實是 b'0x55' == b'\x30\x78\x35\x35'
作者: alibuda174 (阿哩不達)   2016-05-23 15:57:00
U的ASCII是0x55預設呈現什麼,要看你的系統的預設編碼為何
作者: kanggy ((我還在,只是熱情不再))   2016-05-23 16:24:00
之前傳一串是用 pack 打包; 可以試試 d = pack('B',0x55)ser.write(d)
作者: tiefblau (tiefblau)   2016-05-23 17:52:00
b'U' == b'\x55' == struct.pack('B',0x55) 顯示問題而已拉 如果跟我一樣常傳binary指令 其實這樣比較好用XD

Links booklink

Contact Us: admin [ a t ] ucptt.com