树莓派学习3-树莓派蓝牙连接手机通信测试(蓝牙连接手机时断时序问题解决)

通过上一篇文章学习,我们可以将树莓派的蓝牙连接到蓝牙音箱,进行语音播放。那么对于蓝牙配置和蓝牙控制软件更新,在此不再赘述。 

1、树莓派连接手机蓝牙时断时续问题

原以为手机蓝牙和音箱蓝牙直接可以直接连接,结果出现连接到手机瞬间,蓝牙就断开连接。出现了链接时断时续的问题,这里主要参考了这位大佬的文章,成功的解决了蓝牙连接手机。树莓派4b板载蓝牙连接其他蓝牙设备时出错的解决方法_ZeroSwift的博客-CSDN博客_树莓派4b连​​​​​​接蓝牙失败

2、树莓派与手机蓝牙通信测试

完成连接之后,我在手机上下载了蓝牙调试器app(应用商城可以搜到)。但是这个时候出现一个比较奇怪的问题,手机蓝牙已经连接了树莓派,但是app里面扫描结果并没有树莓派。具体原因未知,猜想的方向是app里面的蓝牙协议和手机连接的蓝牙协议应该不同,树莓派的蓝牙对app里面的蓝牙隐藏了。解决的方案是,打开界面里的蓝牙的discoverable配置,这时候app即可识别树莓派。

 接下来便是树莓派蓝牙通信,首先安装pybluez库,pybluez库会在使用pip安装时自动编译相关的蓝牙库,所以需要在安装pybluez之前先把蓝牙开发环境配置好:

sudo apt-get install Python-dev
sudo apt-get install libbluetooth-dev
sudo pip3 install pybluez

然后编译蓝牙接收和发送python源码。

#-*- coding:utf-8 -*-
import bluetooth
import threading
#服务器套接字(用来接收新链接)
server_socket=None

#连接套接字服务子线程
def serveSocket(sock,info):
    #开个死循环等待客户端发送信息
    while True:
        #接收1024个字节,然后以UTF-8解码(中文),如果没有可以接收的信息则自动阻塞线程(API)
        receive=sock.recv(1024).decode('utf-8');
        #打印刚刚读到的东西(info=地址)
        print('['+str(info)+']'+receive);
        #为了返回好看点,加个换行
        receive=receive+"\n";
        #回传数据给发送者
        sock.send(receive.encode('utf-8'));

#主线程

#创建一个服务器套接字,用来监听端口
server_socket=bluetooth.BluetoothSocket(bluetooth.RFCOMM);
#允许任何地址的主机连接,未知参数:1(端口号,通道号)
server_socket.bind(("",1))
#监听端口/通道
server_socket.listen(1);

#开死循环 等待客户端连接
#本处应放在另外的子线程中
while True:
    #等待有人来连接,如果没人来,就阻塞线程等待(这本来要搞个会话池,以方便给不同的设备发送数据)
    sock,info=server_socket.accept();
    #打印有人来了的消息
    print(str(info[0])+' Connected!');
    #创建一个线程专门服务新来的连接(这本来应该搞个线程池来管理线程的)
    t=threading.Thread(target=serveSocket,args=(sock,info[0]))
    #设置线程守护,防止程序在线程结束前结束
    t.setDaemon(True)
    #启动线程
    t.start();

保存文件名为bt.py,然后执行,这里我遇到python编译问题,注意自己的python版本和pybluez匹配。

python出现SyntaxError: Non-ASCII character '\xe6' in file \的错误 - 魏三斗 - 博客园

AttributeError: 'module' object has no attribute 'AF_INET'处理办法——python_wzh111wzh的博客-CSDN博客

 python bt.py

这时候手机app里连接树莓派,然后树莓派就可以与手机正常通信(现阶段只实现了安卓手机,ios还是有问题的)。

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值