需求
以nrf52840为主控连接各种传感器,将传感器的数据通过蓝牙传输到电脑进行接收。由于协议栈的不同,hc-06没法检索到nrf52840。
实际配置
- 主控采用的是Seeed XIAO BLE,他的芯片是nrf52840,上面搭载了arduino的底子,所以用户上层用arduino IDE进行烧写代码。
- 他的蓝牙部分采用的是Adafruit相关库。
- 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]
书写数据可以:文章来源:https://www.toymoban.com/news/detail-489160.html
def write(self, buf: ReadableBuffer) -> None
举个例子
data = device[UARTService].read(ntypes)
message = data.decode()
具体案例可以参我的github的代码文章来源地址https://www.toymoban.com/news/detail-489160.html
到了这里,关于NRF52840 和电脑 进行蓝牙通信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!