RK3568蓝牙程序开发过程

news2024/9/25 15:26:24

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 = "WL18xx Device"
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")
        con_addr = addr


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

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

    client_socket.send("Hello World")

    print("Finished")

    while True:
        time.sleep(1)


    client_socket.close()

4、测试蓝牙通信

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/854132.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Springboot中拦截GET请求获取请求参数验证合法性

目录 目的 核心方法 完整代码 创建拦截器 注册拦截器 测试效果 目的 在Springboot中创建拦截器拦截所有GET类型请求,获取请求参数验证内容合法性防止SQL注入(该方法仅适用拦截GET类型请求,POST类型请求参数是在body中,所以下面…

ADB连接安卓手机提示unauthorized

近期使用airtest进行自动化测试时,因为需要连接手机和电脑端,所以在使用adb去连接本人的安卓手机vivo z5时,发现一直提示unauthorized。后来经过一系列方法尝试,最终得以解决。 问题描述: 用数据线将手机接入电脑端&…

数据分析 绘图工具

prism呢… 拼dd上看到卖prism的终身包 GraphPad Prism GraphPad Prism 就是为生物科研统计作图而生的一款数据处理绘图软件,它不仅能分析数据,还能快速作图,简直是科研人的福音! GraphPad 最新版本拥有最新的气泡图&#xff0…

Springboot中使用过滤器校验PSOT类型请求参数内容

目录 目的 实现步骤 完整代码 目的 在Springboot中创建过滤器,用来过滤所有POST类型请求并获取body中的参数进行校验内容是否合法;该方法仅适用于POST类型请求,因为POST和GET请求的参数位置不一样所以处理方式也不一样,如果想要…

恒盛策略:早盘A股三大指数表现分化 CRO概念板块逆势涨超6%

周三(8月9日),A股三大指数体现分化,到上午收盘,上证指数跌0.36%,报3249.02点;深证成指跌0.28%,创业板指涨0.24%;沪深两市合计成交额4550.78亿元,总体来看&…

DARPA-TC-engagement5-theia部分数据格式分析

转换出来的jsons数据主要分为四大类:Event、Subject、Object和Principal,分别代表系统事件、主体、客体和用户。各种大类中子类的数量,取决于CDM的版本。ShadeWatcher使用的是e3的数据,采用的是CDM18,而e5默认使用的是…

HTTP——十一、Web的攻击技术

HTTP 一、针对Web的攻击技术1、HTTP 不具备必要的安全功能2、在客户端即可篡改请求3、针对Web应用的攻击模式 二、因输出值转义不完全引发的安全漏洞1、跨站脚本攻击2、SQL 注入攻击3、OS命令注入攻击4、HTTP首部注入攻击5、邮件首部注入攻击6、目录遍历攻击7、远程文件包含漏洞…

Win10的日历软件中怎么新增日程安排及提醒?

在经济发展加速的时代,职场中做好时间管理的重要性不言而喻,而想要在工作中做好时间管理,关键在于按时完成每项日程安排。所以每天在使用win10电脑办公时新增日程安排并设置提醒不仅是非常有必要的,而且是提高效率和生活质量的重要…

Java课题笔记~ JavaWeb概述/开发基础

JavaWeb概述/开发基础 1.XML基础 (1)XML概述 (2)XML语法 (3)DTD约束 (4)Schema约束(XML Schema 比 DTD 更强大) 2.Web基础知识 Web是一个分布式的超媒…

Celery的基本使用

1.Celery介绍 1.1 Celery是什么? Celery是Python开发的简单、灵活可靠的、处理大量消息的分布式任务调度模块专注于实时处理的异步任务队列同时也支持任务调度 Celery本身不含消息服务,它使用第三方消息服务来传递任务,目前,Ce…

设置height:100%无效的原因以及两种解决方法

原因&#xff1a;我们知道在把盒子宽度自适应为浏览器窗口宽度&#xff0c;只需设置width:100%就可轻松解决问题&#xff0c;但是让盒子的高度自适应浏览窗口的高度并非那么容易&#xff0c;这是因为css内部计算的原因 <!-- 高度实际为字体大小 --> <div class"…

ElasticSearch:环境搭建步骤

1、拉取镜像 docker pull elasticsearch:7.4.0 2、创建容器 docker run -id --name elasticsearch -d --restartalways -p 9200:9200 -p 9300:9300 -v /usr/share/elasticsearch/plugins:/usr/share/elasticsearch/plugins -e "discovery.typesingle-node" elasti…

logo设计用什么工具比较好?为你推荐这9个

在海报设计工作中&#xff0c;logo设计是必不可少的一步&#xff0c;今天本文为大家推荐9个特别好用的logo生成器&#xff0c;一起来看看吧&#xff01; 1、即时设计 即时灵感是一个结合了AI技术的logo生成器&#xff0c;它无需设计师提供设计素材&#xff0c;只要在文本框中…

软件系统测试报告

1.简介 1.1.编写目的 本文档是对重庆市XXX项目验收测试所做的说明&#xff0c;为充分利用已有的软硬件资源&#xff0c;配合对系统应用模块的运行测试方案,查缺补漏完善系统的各项具体功能,保证项目的顺利进行&#xff0c;本测试报告有助于实现以下目标&#xff1a; 明确本次…

【Linux命令详解 | grep命令】 grep命令用于在文件中搜索指定模式的文本,功能强大且常用

文章标题 简介一&#xff0c;参数列表二&#xff0c;使用介绍1. 使用基本模式搜索2. 忽略大小写匹配3. 反向匹配4. 递归搜索目录5. 显示文件名6. 显示行号7. 显示上下文行8. 启用扩展正则表达式9. 将模式视为固定字符串10. 使用颜色高亮显示匹配文本 总结 简介 在Linux系统中&…

12v转5v降压模块

问&#xff1a;什么是12V转5V降压模块&#xff1f;它的功能是什么&#xff1f; 答&#xff1a;12V转5V降压模块是一种电子设备&#xff0c;用于将输入电压为12V的直流电转换为输出电压为5V的直流电。它的主要功能是为电子设备提供所需的适当电压&#xff0c;以便它们能够正常运…

AI里的烟火气:实在RPA数字员工频频上岗九阳、海尔、美的等多家上市家电企业

1994年&#xff0c;九阳创始人王旭宁研发出了世界上第一台豆浆机&#xff0c;他将原本需要耗费七八个小时来泡豆子、推磨、过滤、蒸煮的时间&#xff0c;缩短到了几分钟。这是生产力的一次重大进步&#xff0c;也标志着九阳这样一家品质小家电领导品牌&#xff0c;开始走入大众…

logistic的分叉图

logistic是最基础、最常用的混沌序列。 了解其分叉图很关键。 下面&#xff0c;是混沌序列的分叉图。 分叉图是怎么得到的呢&#xff0c;实际上就是通过不断地迭代&#xff0c;观察其最终值在哪。 那到底在哪呢&#xff0c;我们分别绘制了最后20个序列的分叉图如下。 很显然…

【算法篇C++实现】五大常规算法

文章目录 &#x1f680;一、分治法⛳&#xff08;一&#xff09;算法思想⛳&#xff08;二&#xff09;相关代码 &#x1f680;二、动态规划算法⛳&#xff08;一&#xff09;算法思想⛳&#xff08;二&#xff09;相关代码 &#x1f680;三、回溯算法⛳&#xff08;一&#xf…

2000-2022年上市公司环境不确定性(原始数据+测算代码+测算结果)

2000-2022年上市公司环境不确定性指数&#xff08;含原始数据 代码和计算结果&#xff09; 1、时间&#xff1a;2000-2022年 2、指标&#xff1a;gupiao代码、名称、日期、年份、总资产净利润率ROA、营业收入、上市日期、成立日期、行业代码、年末是否ST或PT、行业、EU未调整…