在为树莓派配置BLE的时候,遇到了各种问题,本文将介绍如何为树莓派配置BLE,这里主要针对的是可以支持64Bit系统的3B及后续的树莓派版本。
在文章开始前,先来枚举以下可能你遇到的坑或者将遇到的坑:
- 使用官方提供的Raspbian系统,可以正常调用蓝牙功能,但无法安装新版本的Miniforge等conda包
- 使用原生64Bit的Ubuntu系统,各种自动、手动安装bluez后,使用 hciconfig -a 却找不到蓝牙设备
如果你也遇到上述的问题,那么可以继续阅读下去,下面将会解决这些问题,避免你踩到同样的坑。
Raspbian问题
首先,如果你是使用树莓派3B以前的版本,反正也不支持64Bit系统,所以直接安装官方提供的Raspbian系统就可以了。因为官网提供的系统直接就安装好了支持,无论是 hciconfig hcitool 还是 gatttool 都是可以直接使用的。
但是,Raspbian存在一个问题,就是这个系统原生是32Bit的系统。虽然有提供转换64Bit的方法,但是通过修改 /boot/config.txt 来实现 64Bit 系统,然而修改完成后,安装 Miniforge 会报出 conda.exe could not found 的错误。该错误就是系统不支持64Bit原因所致。
为什么要执着要安装 Miniforge ?因为在支持树莓派 ARM 的 conda 环境,无非就只有 Miniconda 和 Miniforge,而 Miniconda 的版本还是停留在非常远古的时代,所以如果想愉快的使用 Python,那只有安装 Miniforge。但 Miniforge 又没有提供32Bit的版本。所以要么就使用64Bit版本的系统,要么就想办法让Raspbian支持64Bit系统。
上面修改 /boot/config.txt 方法的,我还在网上找到通过修改 so 文件的方法,但没有非常详细的方法,而且操作也比较复杂,所以我就没有尝试。另外,树莓派也有一个官方64Bit的bata版系统,但是那个系统好像是带有桌面的,而我只需要命令行远程连接即可。因此也没有尝试和测试那个系统。
所以这里,给出几个结论,希望可以帮助你避坑:
- 不需要 python 环境或者64Bit软件支持的,只需要蓝牙功能,Raspbian是个不错的选择
- 如果需要64Bit的支持,目前可以直接不用考虑Raspbian,不要折腾,也许有解决方法,但肯定不算方便
Ubuntu64Bit系统问题
使用Ubuntu 64位系统,那些64Bit软件的问题都可以完美解决。但是,这系统上默认没有蓝牙的支持。于是很自然的想法就是网上搜索蓝牙支持的安装。然而搜索出来的大多数是让安装bluez,而且很多还特地支持说不能使用apt install安装,要手动下载安装包,然后自己编译。但是通过我的测试,安装完成后,hciconfig 根本无法识别板载的蓝牙。因此根本无法使用。
然后我发现大多数文章的内容都和篇英文的博客内容相似,而这篇博客里面开头有很大篇幅是讲如何配置gpio连接一个usb线的,不知道是这篇博文解决的问题不是使用树莓派的蓝牙还是只是因为版本的不同导致不能使用。
以下是我在Stackexchange上面找到的解决办法,方法非常简单,只需要使用apt安装蓝牙包就可以。具体操作如下
sudo apt install -y pi-bluetooth
等待安装完成后,需要修改一个配置文件,该配置文件位于 /boot/firmware/usrcfg.txt
# 备份
sudo cp /boot/firmware/usrcfg.txt_bak
# 修改
vim /boot/firmware/usrcfg.txt
# 在文件最后添加以下内容
include btcfg.txt
完成保存文件,然后重启树莓派,就可以正常使用蓝牙了
# 测试
hciconfig -a
hci0: Type: primary Bus: UART
...
以上即为树莓派配置BLE的方法以及可能遇到的坑,如果你觉得文章对你用,记得关注收藏。你的关注和收藏是继续更新的动力哦。