NRF52840 和电脑 进行蓝牙通信

需求

以nrf52840为主控连接各种传感器,将传感器的数据通过蓝牙传输到电脑进行接收。由于协议栈的不同,hc-06没法检索到nrf52840。

实际配置

  1. 主控采用的是Seeed XIAO BLE,他的芯片是nrf52840,上面搭载了arduino的底子,所以用户上层用arduino IDE进行烧写代码。
  • 他的蓝牙部分采用的是Adafruit相关库。
  1. PC部分通过实践采用的是Adafruit_CircuitPython_BLE的库,所以在linux中运行,暂时不能在windows中。
  • OS:Ubuntu 20.04

实现过程

安装库

我的python版本是ubuntu自带的3.8

pip3 install adafruit-circuitpython-ble

如果需要在虚拟环境中安装,则

mkdir project-name && cd project-name
python3 -m venv .venv
source .venv/bin/activate
pip3 install adafruit-circuitpython-ble

测试

from adafruit_ble import BLERadio

radio = BLERadio()
print("scanning")
found = set()
for entry in radio.start_scan(timeout=60, minimum_rssi=-80):
    addr = entry.address
    if addr not in found:
        print(entry)
    found.add(addr)

print("scan done")

官方库:Adafruit_CircuitPython_BLE

搜索蓝牙并连接

上面的demo是检索蓝牙的部分,通过测试我们可以轻松检索到nrf52840的蓝牙。然后进行连接:

radio.connect(entry)

搜索到了 就停止搜索

radio.stop_scan()

数据传输

ntypes 是传输数据的个数,最多默认是64,可以自己在下载的数据包中的UARTService类修改它的buffer容量。
读取数据一共有三个函数可以使用:

def read(self, nbytes: Optional[int] = None) -> Optional[bytes]
def readinto(self, buf: WriteableBuffer, nbytes: Optional[int] = None) -> Optional[int]
def readline(self) -> Optional[bytes]

书写数据可以:

def write(self, buf: ReadableBuffer) -> None

举个例子

data = device[UARTService].read(ntypes)
message = data.decode()

具体案例可以参我的github的代码

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值