树莓派蓝牙BLE做从机Peripheral

2023-12-01 23:52

本文主要是介绍树莓派蓝牙BLE做从机Peripheral,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

安装环境

安装bluez

sudo apt install bluez

安装python包bluez-peripheral

pip install bluez-peripheral

如果安装失败,可以下载源代码安装

git clone https://github.com/spacecheese/bluez_peripheral.git
cd bluez_peripheral
python setup.py install

示例代码

from bluez_peripheral.gatt.service import Service
from bluez_peripheral.gatt.characteristic import characteristic, CharacteristicFlags as CharFlags
from bluez_peripheral.gatt.descriptor import descriptor, DescriptorFlags as DescFlags# Define a service like so.
class MyService(Service):def __init__(self):self._some_value = None# Call the super constructor to set the UUID.super().__init__("BEEF", True)# Use the characteristic decorator to define your own characteristics.# Set the allowed access methods using the characteristic flags.@characteristic("BEF0", CharFlags.READ)def my_readonly_characteristic(self, options):# Characteristics need to return bytes.return bytes("Hello World!", "utf-8")# This is a write only characteristic.@characteristic("BEF1", CharFlags.WRITE)def my_writeonly_characteristic(self, options):# This function is a placeholder.# In Python 3.9+ you don't need this function (See PEP 614)pass# In Python 3.9+:# @characteristic("BEF1", CharFlags.WRITE).setter# Define a characteristic writing function like so.@my_writeonly_characteristic.setterdef my_writeonly_characteristic_cb(self, value, options):# Your characteristics will need to handle bytes.self._some_value = valueprint(value)# Associate a descriptor with your characteristic like so.# Descriptors have largely the same flags available as characteristics.@descriptor("BEF2", my_readonly_characteristic, DescFlags.READ)# Alternatively you could write this:# @my_writeonly_characteristic.descriptor("BEF2", DescFlags.READ)def my_readonly_descriptors(self, options):# Descriptors also need to handle bytes.return bytes("This characteristic is completely pointless!", "utf-8")from bluez_peripheral.util import *
from bluez_peripheral.advert import Advertisement
from bluez_peripheral.agent import NoIoAgent
import asyncioasync def main():# Alternativly you can request this bus directly from dbus_next.bus = await get_message_bus()service = MyService()await service.register(bus)# An agent is required to handle pairing agent = NoIoAgent()# This script needs superuser for this to work.await agent.register(bus)adapter = await Adapter.get_first(bus)my_service_ids = ["BEEF"] # The services that we're advertising.my_appearance = 0 # The appearance of my service.# See https://specificationrefs.bluetooth.com/assigned-values/Appearance%20Values.pdfmy_timeout = 0 # never timeoutadvert = Advertisement("My Device Name", my_service_ids, my_appearance, my_timeout)await advert.register(bus, adapter)while True:await asyncio.sleep(5)if __name__ == "__main__":asyncio.run(main())

问题一:频繁提示配对

关闭电池电量请求,在/usr/lib/systemd/system/bluetooth.service中的ExecStart这一行最后添加 -P battery

systemctl daemon-reload
systemctl restart bluetooth

问题二:raspberrypi zero 2w使用NoIoAgent时手机端配对失败

这篇关于树莓派蓝牙BLE做从机Peripheral的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/443171

相关文章

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

树莓派5_opencv笔记27:Opencv录制视频(无声音)

今日继续学习树莓派5 8G:(Raspberry Pi,简称RPi或RasPi)  本人所用树莓派5 装载的系统与版本如下:  版本可用命令 (lsb_release -a) 查询: Opencv 与 python 版本如下: 今天就水一篇文章,用树莓派摄像头,Opencv录制一段视频保存在指定目录... 文章提供测试代码讲解,整体代码贴出、测试效果图 目录 阶段一:录制一段

开放式耳机好用?平价开放式耳机推荐?四款开放式的蓝牙耳机推荐

开放式耳机好用吗?有平价些的开放式耳机推荐吗?那这两个问题的回答当然是肯定的。 首先开放式耳机好不好用取决于对耳机的需求,因为开放式耳机其实是比较适用于需要注意周围环境、需要‌长时间佩戴舒适以及需要频繁与人交流的场景中,在这些场景下使用开放式耳机的话就会比较有优势。就例如跑步骑行健身等运动的时候,能够兼得佩戴舒适度的同时,增加一定的安全性;还有在办公学习的时候,会很适合长时间佩戴,能够方便和

Flutter 中的低功耗蓝牙概述

随着智能设备数量的增加,控制这些设备的需求也在增加。对于多种使用情况,期望设备在需要进行控制的同时连接到互联网会受到很大限制,因此是不可行的。在这些情况下,使用低功耗蓝牙(也称为 Bluetooth LE 或 BLE)似乎是最佳选择,因为它功耗低,在我们的手机中无处不在,而且无需连接到更广泛的网络。因此,蓝牙应用程序的需求也在不断增长。 通过阅读本文,您将了解如何开始在 Flutter 中开

1-8 图像腐蚀 opencv树莓派4B 入门系列笔记

目录 一、提前准备 二、代码详解 kernel=np.ones((2,2),np.uint8) _, binary_image = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY) eroded_image=cv2.erode(binary_image,kernel,iterations=1) eroded_image2=cv2.ero

开放式蓝牙耳机哪个品牌好用?盘点五款超优秀的开放式耳机!

开放式蓝牙耳机现在挺受欢迎的,它们最大的好处就是不塞耳朵,戴着舒服,特别适合长时间佩戴。而且,这种耳机能让你在听音乐的同时,还能听到周围的环境声,这样在外面运动或者骑车的时候就更安全。音质方面,现在的开放式耳机也做得越来越好,有些高端款式还有特别的技术来减少漏音,保护你的隐私。但是现在市场上的开放式耳机品牌太多了,很多人不知道怎么选?为了帮助您在众多选项中做出选择,我根据个人经验挑选了一些表现良好

Anroid BLE蓝牙(手机分别作为中心设备和外围设备)

蓝牙是一种短距的无线通讯技术,可实现固定设备、移动设备之间的数据交换。一般将蓝牙3.0之前的BR/EDR蓝牙称为传统蓝牙,而将蓝牙4.0规范下的LE蓝牙称为低功耗蓝牙。  BLE蓝牙模块主要应用领域     1、移动扩展设备     2、汽车电子设备     3、健康医疗用品:心跳带、血压计等     4、定位应用:室内定位、井下定位等     5、近距离数据采集:无线

BLE 数据传输的一些名词

 1、 Profile Profile 可以理解为一种规范,一个标准的通信协议,Profile 存在于从机中。蓝牙组织规定了一些列的标准 Profile, 例如 HID OVER GATT、 防丢器、 心率计等。 每个 Profile 中会包含多个 Service,每个 Service 代表从机的一种能力。 2、 Service Service 可以理解为一个服务,在 ble 从机中,通

两个 BLE实现数据传输

 通过TI BLE 1.3.2 协议栈安装后的主从通信实验,实现两个 BLE节点的通信,主机向 BLE 从机发送一个字节,然后再把写入的字节读回来,以测试主从之间的通信。 SimpleBLECentral 主机编程: 在 Bluetooth-LE 低功耗蓝牙中有四种设备类型:Central 主机、Peripheral 从机、Observer 观察者、Broadcaster 广播者。通

BLE协议栈安装和目录简介

首先在TI官网上下载BLE协议栈。  目前最新的协议栈版本已经升级到1.4.0, 并且此协议栈版本配套的 IAR 软件版本为 8.20.2。安装方法很简单,建议安装在C盘上,安装好后,你会在c盘上发现有Texas Instruments目录。 下面看看Texas Instruments下都有什么文件。 \Accessories\Drivers 里 面 存 放 的 是 烧 写 了