برنامه پایتونی برای ارسال داده از طریق bluetooth در لینوکس

چند وقت بود که میخواستم از طریق RaspberryPi به یه دستگاه دیگه از طریق bluetooth داده ارسال کنم که نمیشد تا اینکه بلاخره یه راه حلی براش پیدا کردم.

قدم اول

لازمه که MAC Address اون دستگاه بلوتوثی که میخواید بهش داده ارسال کنید رو بدونید. برای این کار دستورsudo bluetoothctl رو توی ترمینال بزنید، بعد دستور scan on رو بزنید تا دستگاه‌های بلوتوث اطراف شما رو اسکن کنه. از روی اسم‌ دستگاه‌هایی که بهتون نشون میده دستگاه خودتون رو پیدا کنید و MAC Address اون رو یادداشت کنید.

بعد از اون با دستور info xx:xx:xx:xx:xx:xx میتونید UUID ماژول بلوتوثی که میخواید بهش داده بفرستید رو پیدا کنید. توجه کنید که به جای xx:xx:xx:xx:xx:xx باید مک آدرسی که پیدا کردید رو قرار بدید.

قدم دوم

باید Serial Port Profile رو لود کنید:

sudo sdptool add SP

حالا باید Bluetooth daemon رو در حالت compatibility اجرا کنید، فایل /etc/systemd/system/dbus-org.bluez.service رو باز کنید و C- رو بعد از bluetoothd قرار بدید و دستگاهتون رو ری استارت کنید.

قدم سوم

از سورس کد زیر که به زبان پایتون نوشته شده برای ارتباط با ماژول بلوتوث مقصد استفاده کنید. فقط توجه کنید که uuid رو با UUID ماژول خودتون جا به جا کنید

<pre># file: rfcomm-client.py
# auth: Albert Huang <albert@csail.mit.edu>
# desc: simple demonstration of a client application that uses RFCOMM sockets
#       intended for use with rfcomm-server
#
# $Id: rfcomm-client.py 424 2006-08-24 03:35:54Z albert $

from bluetooth import *
import sys

if sys.version < '3':
    input = raw_input

addr = None

if len(sys.argv) < 2:
    print("no device specified.  Searching all nearby bluetooth devices for")
    print("the SampleServer service")
else:
    addr = sys.argv[1]
    print("Searching for SampleServer on %s" % addr)

# search for the SampleServer service
uuid = "94f39d29-7d6d-437d-973b-fba39e49d4ee"
service_matches = find_service( uuid = uuid, address = addr )

if len(service_matches) == 0:
    print("couldn't find the SampleServer service =(")
    sys.exit(0)

first_match = service_matches[0]
port = first_match["port"]
name = first_match["name"]
host = first_match["host"]

print("connecting to \"%s\" on %s" % (name, host))

# Create the client socket
sock=BluetoothSocket( RFCOMM )
sock.connect((host, port))

print("connected.  type stuff")
while True:
    data = input()
    if len(data) == 0: break
    sock.send(data)

sock.close()</pre>

 

 

 

 



منابع


							

پاسخ دهید