RK3568蓝牙程序开发过程

1、搭建蓝牙开发环境

     蓝牙开发可以使用C语言开发或python语言开发,使用的是蓝牙开发库为bluez库。

     本文开发使用python语言开发,安装bluez库,可以使用pip install PyBluez来安装。

      如果安装不上的话,可以使用sudo apt install python3-bluez来安装。

      安装成功后可以通过pip list来查看一下是否安装成功。如下看到PyBluez 0.22表示安装成功了。

firefly@firefly:/usr/lib/bluetooth$ pip list
Package                Version             
---------------------- --------------------
attrs                  23.1.0              
blinker                1.4                 
certifi                2023.7.22           
chardet                3.0.4               
command-not-found      0.3                 
cryptography           2.8                 
dbus-python            1.2.16              
distro                 1.4.0               
entrypoints            0.3                 
exceptiongroup         1.1.2               
h11                    0.14.0              
httplib2               0.14.0              
idna                   2.8                 
keyring                18.0.1              
launchpadlib           1.10.13             
lazr.restfulclient     0.14.2              
lazr.uri               1.0.3               
netifaces              0.10.4              
oauthlib               3.1.0               
onboard                1.4.1               
outcome                1.2.0               
pip                    20.0.2              
PyBluez                0.22                
pycairo                1.16.2              
PyGObject              3.36.0              
PyJWT                  1.7.1               
PyQt5                  5.14.1              
PySocks                1.7.1               
python-apt             2.0.0+ubuntu0.20.4.8
PyYAML                 5.3.1               
requests               2.22.0              
requests-unixsocket    0.2.0               
SecretStorage          2.3.1               
selenium               4.10.0              
setuptools             45.2.0              
simplejson             3.16.0              
sip                    4.19.21             
six                    1.14.0              
sniffio                1.3.0               
sortedcontainers       2.4.0               
ssh-import-id          5.10                
trio                   0.22.2              
trio-websocket         0.10.3              
ubuntu-advantage-tools 27.10               
urllib3                1.21.1              
wadllib                1.3.3               
wheel                  0.34.2              
wsproto                1.2.0       

2、建立蓝牙服务端程序

       蓝牙的程序编写与tcp/ip协议很像,基于socket进行编程的。所以有客户端与服务器的角色。服务器的程序代码如下,代码在服务器端建立一个zsm-server的服务器,对应的uuid为00001101-0000-1000-8000-00805F9B34FC。服务端程序运行在设备A上面。

#! /usr/bin/python3.8
import bluetooth

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

port = server_sock.getsockname()[1]

uuid = "00001101-0000-1000-8000-00805F9B34FC"


bluetooth.advertise_service(server_sock, "zsm-service", 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:
    data = client_sock.recv(1024)
    print("Received ", data)
    client_sock.send(data)

client_sock.close()
server_sock.close()

       运行时发现程序报错,报错的函数为bluetooth.advertise_service(server_sock, "zsm-service", uuid), 报错的内容为(2, 'No such file or directory')。

      经过分析与百度,查找到的解决办法为蓝牙服务启动时需要增加-E -C的选项。解决办法参考:树莓派-蓝牙

         

  bluetoothd -E -C 是蓝牙守护进程(bluetoothd)运行时的命令行选项。下面是每个选项的功能:

  • -E:此选项启用扩展模式。在扩展模式下,蓝牙守护进程将提供更多的功能和调试选项。这些功能包括支持调试输出、启用 experimental 模式、允许加载外部插件和驱动程序等。

  • -C:此选项指定了蓝牙守护进程的配置文件路径。在默认情况下,配置文件是在/etc/bluetooth/main.conf。使用-C选项可以指定一个不同的配置文件路径,让蓝牙守护进程使用自定义的配置文件。

3、建立蓝牙客户端程序

      客户端的程序相对简单一些,客户端程序如下所示,运行在设备B上面。

#! /usr/bin/python3.8
# -*- coding: utf-8 -*-
import bluetooth
from bluetooth import *
import time


nearby_devices = bluetooth.discover_devices(duration=10, lookup_names=True)
print("Found %d devices" % len(nearby_devices), nearby_devices)

con_addr = ""
con_name = "5G-ter"
port = 0
protocol = RFCOMM
for addr, name in nearby_devices:
    print("Find bluetooth device  %s - %s" % (addr, name))
    
    if name == con_name:
        services = bluetooth.find_service(address=addr)
        for svc in services:
            print("Service Name: %s"    % svc["name"])
            print("    Host:        %s" % svc["host"])
            print("    Description: %s" % svc["description"])
            print("    Provided By: %s" % svc["provider"])
            print("    Protocol:    %s" % svc["protocol"])
            print("    channel/PSM: %s" % svc["port"])
            print("    svc classes: %s "% svc["service-classes"])
            print("    profiles:    %s "% svc["profiles"])
            print("    service id:  %s "% svc["service-id"])
            print("\n")
            if svc["name"] == "zsm-service":
                port = int(svc["port"])
                if svc["protocol"] == "RFCOMM":
                    protocol = RFCOMM
                else:
                    protocol = L2CAP   
        con_addr = addr


if con_addr == "":
    print("not find!")
else:    
    # Create the client socket
    client_socket=BluetoothSocket(protocol)

    client_socket.connect((con_addr, 1))
    
    print("connect the device:%s addr:%s"%(con_name, con_addr))

    while True:
        client_socket.send("Hello World")
        time.sleep(1)


    client_socket.close()


4、测试蓝牙通信

      先启动设备A的服务器程序,再启动设备B的客户端程序,如果一切正常的话,设备B会收到发送出去的数据,再接收到服务器返回来的数据。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: roc-rk3568-pc是一款基于RK3568芯片的台式电脑板,它能够提供高性能、低功耗、多媒体处理以及AI加速等特性。roc-rk3568-pc实现了PC级性能和功能,可以运行Linux和Android操作系统,同时支持多种显示接口和存储接口。 例如,roc-rk3568-pc支持双频WiFi和蓝牙,可以通过HDMI、DP、VGA等接口连接显示器,还可以使用USB3.0、SATA、NVMe等接口连接存储设备。此外,roc-rk3568-pc还配备了四个USB 2.0接口、两个USB 3.0接口、一个千兆网口、一个SPI Flash等。 对于开发者和爱好者来说,roc-rk3568-pc提供了完整的软件开发包(SDK),包括操作系统、编译器、驱动程序、应用程序等。同时,roc-rk3568-pc还有丰富的软件生态系统和社区支持,大大降低了开发门槛和开发成本。 总之,roc-rk3568-pc是一款高性能、全功能、易开发的台式电脑板,适用于各种应用场景,例如家庭娱乐、远程办公、物联网等。 ### 回答2: ROC-RK3568-PC例程是一个基于ROC-RK3568平台设计的针对PC设备的系统应用程序。该例程主要提供了一个使用ROC-RK3568平台的PC设备的示例,用户可通过该例程学习ROC-RK3568平台的基本应用,相应的硬件配置和软件编程技术。 针对ROC-RK3568-PC例程,用户需要掌握一定的嵌入式系统开发技术。首先,用户需要了解ROC-RK3568平台的基本知识,并安装相应的开发环境和编译器。在编写程序的过程中,用户需要熟悉C/C++语言和Linux操作系统,同时掌握设备驱动和应用程序的编写方法,用于实现安装、媒体播放、网络通信、GUI开发等功能。 ROC-RK3568-PC例程的主要任务是提供一个基本的嵌入式系统应用程序示例,让开发者通过学习和修改代码,快速掌握ROC-RK3568平台的开发和应用。该例程的编写需要开发者对ROC-RK3568平台熟悉到一定程度,需要有一定的软件编码能力和嵌入式系统设计经验。同时,用户还需要具备较好的沟通能力和团队协作能力,与其他成员共同完成开发任务。 总的来说,ROC-RK3568-PC例程是一个有实际应用价值的例程,对于想要深入了解嵌入式系统开发的开发者,学习和掌握该例程的编写技术是非常有益的。 ### 回答3: ROC-RK3568-PC例程是指基于ROC-RK3568芯片的PC开发板的样例程序。ROC-RK3568是一款高性能的处理器芯片,可以广泛应用于智能家居、工业控制、远程监控等领域。ROC-RK3568-PC是采用该芯片设计的一款开发板,可以为开发者提供丰富的硬件接口,并支持多种操作系统,如Ubuntu、Android等。 ROC-RK3568-PC例程提供了各种各样的代码示例和应用程序,可以帮助开发者更好地理解和使用ROC-RK3568芯片,实现自己的应用程序。例如,样例程序包括了基于Qt的UI界面设计、GPIO控制、I2C读写、串口通信、网络通信、摄像头采集等功能。此外,还提供了蓝牙配对、TCP/IP通信、远程控制等应用程序,可以帮助开发者快速搭建自己的应用系统。 对于需要使用ROC-RK3568芯片进行开发的开发者来说,ROC-RK3568-PC例程是一个非常有用的参考,可以加快开发进度,提高开发效率。自定义应用程序时,只需要根据自己的需求进行修改或者扩展即可。ROC-RK3568-PC例程提供了良好的参考和基础,为开发者快速实现自己所需的功能提供了便利。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值