2017-08-08 78 views
0

我目前正試圖從Python 3發送消息給Arduino(使用HC-06)。我設法建立了連接,但似乎無法找到發送消息的正確方法。用Python通過藍牙發送消息3

下面是我用它來建立連接(我使用PyBluez藍牙)代碼:

import sys 
import bluetooth 

bd_addr = '[MAC-address for HC-06]' 
port = 1 
sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM) 
sock.connect((bd_addr,port)) 

要送我想:

sock.send("2") 

會拋出錯誤: 「TypeError:期待字節緩衝區,得到str」。

也試過:

sock.send(str('2')) 

它也拋出一個錯誤: 「類型錯誤:期待字節的緩衝區,得到了海峽」。我嘗試了一堆其他像「sock.send(2)」,「sock.send(b'2')」,bytearray,「sock.send(bytes([」2「])) 」。基本上,無論我試圖發送它的數據類型都需要另一個數據類型。

我已經設法通過我的Android手機上的藍牙終端發送我所有的命令(目前只有1和2),所以在Arduino網站上沒有任何問題。

有很多指南,那裏有我無法複製的示例。任何人都可以告訴我如何發送基本命令?我甚至接近答案?

編輯: 現在我已經試過「sock.send(」 2" .encode())」,它也拋出一個錯誤:‘類型錯誤:數據必須是字符串,是類的字節'’

使用其他IDE給我講起了這些錯誤的具體信息:

sock.send( 「2」): 警告(從警告模塊): 文件「/Library/Frameworks/Python.framework/版本/ 3.6/lib/python3.6/site-packages/PyBluez-0.22-py3.6.egg/lightblue/_bluetoothsockets.py「,第737行。Foundation.NSData.alloc()initWithBytes_length_(數據,LEN(數據)), UninitializedDeallocWarning:泄漏類型的初始化的對象_NSPlaceholderData 回溯(最近最後調用): 文件 「」,第1行,在 襪子。發送(「2」) 文件「/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/PyBluez-0.22-py3.6.egg/bluetooth/osx.py」,行122,in send return self._sock.send(data) File「/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/PyBluez-0.22-py3.6.egg/ lightblue/_bluetoothsockets.py「,第524行,發送 result = self .__ conn.write(writebuf [:sendbytecount]) 文件」/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site -packages/PyBluez -0.22-py3.6.egg/lightblue/_bluetoothsockets.py「,第737行,寫入 Foundation.NSData.alloc()。initWithBytes_length_(data,len(data)), TypeError:期望字節緩衝區,得到str

sock.send( 「2」 .encode()): 回溯(最近通話最後一個): 文件 「」,1號線,在 sock.send( 「2」 .encode()) 文件「/ Library/Frameworks/Python。framework/Versions/3.6/lib/python3.6/site-packages/PyBluez-0.22-py3.6.egg/bluetooth/osx.py「,第122行,發送 return self._sock.send(data) File 「/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/PyBluez-0.22-py3.6.egg/lightblue/_bluetoothsockets.py」,第487行,發送 raise TypeError( 「data must be string,was%s」%type(data)) TypeError:data must be string,was class'bytes'

我開始懷疑圖書館了。安裝PyBluez時出錯,我會看看它是否可以在我的Raspberry Pi 3上工作。

+0

這是使用bluez庫嗎? – cunniemm

+0

嘗試使用'sock.send('2'.encode())' –

+0

@cunnniemm我很確定這是PyBluez。 –

回答

0

解決方案

當你通過套接字發送數據時,你必須對它進行編碼,否則它會拋出一個字節緩衝區錯誤。當您通過套接字發送數據時,請使用。

sock.send("2".encode()) 
+0

感謝您的想法。不幸的是它沒有奏效。更新了有關錯誤的更多信息的原始帖子。 –

+0

@CarlBratt看到這很奇怪,但我試圖在我的藍牙筆記本電腦上做到這一點,這工作得很好!我會更多地關注它。 – cunniemm

+0

然後,這是我最喜歡的一個問題。你在運行什麼系統? –