看板 Python 關於我們 聯絡資訊
大家好,想請教一個問題,一開始是工作上需要寫一個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如果是這樣,又是另外一個大問題啦!! 感謝閱讀到這裡的所有人 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 210.59.241.151 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1463975634.A.F0A.html
tiefblau: 你要的是ser.write(b'\x55') 吧? 05/23 12:27
tiefblau: b'0x55'是四個byte 你print一下長度就懂了 05/23 12:29
tiefblau: python會把可以用ASCII印出來的直接印成ASCII 所以你串 05/23 12:32
tiefblau: 其實是 b'0x55' == b'\x30\x78\x35\x35' 05/23 12:32
我會試試的,感謝你的說明還有建議! ※ 編輯: c74319 (210.59.241.151), 05/23/2016 12:45:31 我是不是刪到你的推文,抱歉 ※ 編輯: c74319 (210.59.241.151), 05/23/2016 12:46:37 我參考#1CZV1WEf的方式利用 >>>binascii.a2b_hex(str.encode('55AA00000001')) b'U\xaa\x00\x00\x00\x01' 前面的大寫U能夠被C code認出來是0x55嗎? python的編碼還有呈現方式真的不好懂耶Orz ※ 編輯: c74319 (210.59.241.151), 05/23/2016 15:15:51
alibuda174: U的ASCII是0x55 05/23 15:57
所以python預設呈現是ascii,經由uart傳入硬體是0x55 ※ 編輯: c74319 (210.59.241.151), 05/23/2016 16:18:33
alibuda174: 預設呈現什麼,要看你的系統的預設編碼為何 05/23 16:24
kanggy: 之前傳一串是用 pack 打包; 可以試試 d = pack('B',0x55) 05/23 16:24
kanggy: ser.write(d) 05/23 16:25
tiefblau: b'U' == b'\x55' == struct.pack('B',0x55) 顯示問題而 05/23 17:52
tiefblau: 已拉 如果跟我一樣常傳binary指令 其實這樣比較好用XD 05/23 17:53
※ 編輯: c74319 (210.59.241.151), 05/24/2016 10:14:14 ka大還有ti大我會參考你們的建議修改我的程式碼。謝謝! ※ 編輯: c74319 (210.59.241.151), 05/24/2016 10:15:52 目前還是用binascii.a2b_hex的方式傳遞,因為要傳的有26個byte ※ 編輯: c74319 (210.59.241.151), 05/24/2016 10:36:36