ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

android-使用Python通过蓝牙串行进行通信

2019-11-18 20:26:34  阅读:440  来源: 互联网

标签:bluetooth linux python android


您如何通过蓝牙和Python处理和接收串行数据?

我正在尝试制作一个简单的Python服务器,该服务器通过蓝牙将数据访问为explained here.

我的server.py文件在发送文本“ temp”时发送一个随机数,它是:

#!/usr/bin/env python

import os
import glob
import time
import random

from bluetooth import *

def read_temp():
    return random.random()

server_sock=BluetoothSocket( RFCOMM )
server_sock.bind(("",PORT_ANY))
server_sock.listen(1)

port = server_sock.getsockname()[1]

uuid = "94f39d29-7d6d-437d-973b-fba39e49d4ee"

advertise_service( server_sock, "TestServer",
                   service_id = uuid,
                   service_classes = [ uuid, SERIAL_PORT_CLASS ],
                   profiles = [ SERIAL_PORT_PROFILE ], 
#                   protocols = [ OBEX_UUID ] 
                    )
while True:          
    print "Waiting for connection on RFCOMM channel %d" % port

    client_sock, client_info = server_sock.accept()
    print "Accepted connection from ", client_info

    try:
        data = client_sock.recv(1024)
        if len(data) == 0: break
        print "received [%s]" % data

        if data == 'temp':
            data = str(read_temp())+'!'
            client_sock.send(data)
        else:
            data = 'WTF!' 
            client_sock.send(data)
        print "sending [%s]" % data

    except IOError:
        pass

    except KeyboardInterrupt:

        print "disconnected"

        client_sock.close()
        server_sock.close()
        print "all done"

        break

当我第一次运行它时,我得到了错误:

bluetooth.btcommon.BluetoothError: (2, 'No such file or directory')

可以通过启用兼容模式并通过编辑文件/lib/systemd/system/bluetooth.service并更改行来加载串行配置文件来修复Googled showed

ExecStart=/usr/lib/bluetooth/bluetoothd

至:

ExecStart=/usr/lib/bluetooth/bluetoothd -C

然后运行sudo sdptool add SP.

现在python server.py似乎可以正常运行,并且我可以将运行它的机器与我的Android手机配对.但是,似乎无法接收任何数据.

我曾经尝试使用蓝牙终端仿真应用程序,例如BlueTerm,BT Simple Terminal和Arduino BT,但是当我连接到服务器时,输入文本并按Enter,则server.py没有响应.它最初将报告“ Accepted connection …”并且已接收到空字符串,但此后将什么也没有接收到.

由于没有报告任何明显的错误,所以我不确定如何诊断问题.如何确定问题是否出在我的Python代码中?还是服务器上的蓝牙配置?还是我的Android手机?

解决方法:

正确的代码是:

#!/usr/bin/env python
"""
A simple test server that returns a random number when sent the text "temp" via Bluetooth serial.
"""

import os
import glob
import time
import random

from bluetooth import *

server_sock = BluetoothSocket( RFCOMM )
server_sock.bind(("",PORT_ANY))
server_sock.listen(1)

port = server_sock.getsockname()[1]

uuid = "94f39d29-7d6d-437d-973b-fba39e49d4ee"

advertise_service( server_sock, "TestServer",
                   service_id = uuid,
                   service_classes = [ uuid, SERIAL_PORT_CLASS ],
                   profiles = [ SERIAL_PORT_PROFILE ], 
#                   protocols = [ OBEX_UUID ] 
                    )

print "Waiting for connection on RFCOMM channel %d" % port
client_sock, client_info = server_sock.accept()
print "Accepted connection from ", client_info

while True:          

    try:
        req = client_sock.recv(1024)
        if len(req) == 0:
            break
        print "received [%s]" % req

        data = None
        if req in ('temp', '*temp'):
            data = str(random.random())+'!'
        else:
            pass

        if data:
            print "sending [%s]" % data
            client_sock.send(data)

    except IOError:
        pass

    except KeyboardInterrupt:

        print "disconnected"

        client_sock.close()
        server_sock.close()
        print "all done"

        break

标签:bluetooth,linux,python,android
来源: https://codeday.me/bug/20191118/2030796.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有