2017-08-08 10 views
0

現在、Python 3からArduino(HC-06付き)にメッセージを送信しようとしています。私は接続を確立することができましたが、メッセージを送信する正しい方法を見つけることができないようです。エラーがスローされますPython 3でブルートゥース経由でメッセージを送信

sock.send("2") 

import sys 
import bluetooth 

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

は私がしようとしている送信するには:ここで

は、私はセットアップに接続する(私はブルートゥース用PyBluezを使用しています)を使用するコードです: "TypeError:期待されるバイトバッファ、str"。

も試み

sock.send(str('2')) 

また、エラーがスローされます: "例外TypeError:バイトバッファ期待は、STRました"。

"sock.send(2)"、 "sock.send(b'2 ')"、bytearray、 "sock.send(bytes([" 2 "]))のような他のものを試しました。 "基本的に、私が送るしようとしているデータ型は、別のデータ型を要求します。

私はAndroid端末のBluetooth端末を介してすべてのコマンド(現時点では1と2のみ)を送信できたので、Arduinoサイトに問題はありません。

多くのガイドがありますが、私が複製できない例があります。誰でも基本的なコマンドを送信する方法を教えていただけますか?私は答えに近づいていますか?

EDIT: 私は今、 "sock.send(" 2" .encodeを())」しようとしました、それはまた、エラーがスローされます: "例外TypeError:データは文字列でなければなりません、クラスは 'バイト' だった"

別の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行目、 靴下インチsend( "2") ファイル "/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) ファイル "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/PyBluez-0.22-py3.6.egg/ lightblue/_bluetoothsockets.py "、行524、送信 結果=自己.__ conn.write(writebuf [:sendbytecount]) ファイル" /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/siteパッケージ/ PyBluez -0.22-py3.6.egg/lightblue/_bluetoothsockets.py "、737行目、書き込み中 Foundation.NSData.alloc()。initWithBytes_length_(データ、len(データ))、 TypeError:バイトバッファーが必要です。

sock.send( "2" .encode()): トレースバック(最新の呼び出しの最後): " sock.sendで、ライン1、 ファイル"( "2" .encode()) ファイル "/ Library/Frameworks/Python。フレームワーク/バージョン/ 3.6/lib/python3.6/site-packages/PyBluez-0.22-py3.6.egg/bluetooth/osx.py "、122行目、send return self._sock.send(data) ファイル"/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/PyBluez-0.22-py3.6.egg/lightblue/_bluetoothsockets.py"、487行目、送信 raise TypeError( "データは文字列でなければならず、%sでした"%type(data)) TypeError:データは文字列で、クラス 'bytes'でなければなりません

私はライブラリを疑い始めています。 PyBluezをインストールするときに間違っています。私はそれが私のラズベリーパイ3で動作するかどうかを確かめます。

+0

これは右のbluezライブラリを使用していますか? – cunniemm

+0

'sock.send( '2'.encode())'を試してください。 –

+0

@cunnniemm私はそれがPyBluezだと確信しています。 –

答えて

0

ソリューション

ソケットを介してデータを送信する場合は、エンコードするか、バイトバッファエラーが発生します。あなたがソケットを介してデータを送信するときには、単に使用してください。

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

アイデアありがとう。残念ながら、それは動作しませんでした。元の投稿にエラーの詳細を追加しました。 –

+0

@CarlBrattそれは奇妙ですが、私は青い歯で私のラップトップでこれをやろうとしましたが、これはうまくいきました!それをもっと見てください。 – cunniemm

+0

それは私の部分の中で最もlikleyの問題です。どのようなシステムを実行していますか? –

関連する問題