当前位置: 首页 > news >正文

树莓派+ubuntu的蓝牙

第一部分:树莓派4B派+ubuntu的蓝牙被禁用

1. 问题描述

树莓派4B安装了ubuntu20.04, 如下命令启动蓝牙:

bluetoothctl

power on

报错:No default controller available

2. 导致原因:ubuntu针对树莓派4B的UART配置

在 /boot/firmware/config.txt 中调整,添加或确保有以下行:

# 对于树莓派 4B
dtoverlay=miniuart-bt
# 或者
dtoverlay=pi3-miniuart-bt

检查串口配置

ls -la /dev/ttyAMA*
ls -la /dev/serial*# 检查 GPIO 配置
vcgencmd get_config int | grep uart

3. 解决方法:修复 UART 冲突

树莓派的蓝牙可能与串口冲突,编辑配置:sudo nano /boot/firmware/config.txt

确保配置正确:启用 UART(但不要与蓝牙冲突)

enable_uart=1
# 对于树莓派 4B 蓝牙
dtoverlay=pi3-miniuart-bt
# 或者禁用板载蓝牙使用 USB 蓝牙适配器
# dtoverlay=disable-bt
禁用前禁用后
- /dev/ttyAMA0 → 蓝牙
- /dev/serial0 → 蓝牙(符号链接)
- 蓝牙控制器:hci0 可用
- /dev/ttyAMA0 → 可用作普通串口
- /dev/serial0 → 可用作普通串口  
- 蓝牙控制器:不存在
hciconfig -a
hci0:    Type: Primary  Bus: UART
BD Address: B8:27:EB:XX:XX:XX  ACL MTU: 1021:8  SCO MTU: 64:1
UP RUNNING 
RX bytes:1234 acl:0 sco:0 events:98 errors:0
TX bytes:2000 acl:0 sco:0 commands:98 errors:0

hciconfig -a

Can't get device info: No such device

  • dtoverlay=pi3-disable-bt = 完全禁用板载蓝牙硬件

  • 你的问题:这个配置导致蓝牙控制器不可用

  • 解决方案:注释或删除这行配置,然后重启

检查你的 /boot/firmware/config.txt 文件,如果存在这行配置,注释掉它就能解决蓝牙无法启动的问题。

第二部分:树莓派4B的串口资源

1. 深入理解配置

dtoverlay=pi3-disable-bt什么意思?

这是禁用树莓派板载蓝牙的设备树覆盖配置:

  • dtoverlay:设备树覆盖(Device Tree Overlay)

  • pi3-disable-bt:针对树莓派3禁用蓝牙,在4B上也适用

这行配置的作用是:

  1. 在启动早期加载特殊驱动

  2. 断开蓝牙硬件与系统的连接,使蓝牙控制器对操作系统不可见

  3. 释放蓝牙占用的硬件资源(特别是UART),释放的UART:/dev/ttyAMA0,影响引脚GPIO引脚:GPIO 14/15 (TX/RX)

为什么要禁用蓝牙?

场景一:需要专用串口

禁用蓝牙后,可以独占使用串口, 用于:GPS模块、传感器、Arduino通信等

echo "dtoverlay=pi3-disable-bt" | sudo tee -a /boot/firmware/config.txt

场景二:解决硬件冲突

当蓝牙与串口设备冲突时,错误信息可能包括:

"device or resource busy"
"no such device"

场景三:使用外部USB蓝牙

禁用板载蓝牙,使用性能更好的USB蓝牙

检查当前状态

查看是否已禁用

# 检查config.txt
grep "pi3-disable-bt" /boot/firmware/config.txt# 检查蓝牙状态
hciconfig -a
# 如果显示 "No such device" 说明蓝牙已禁用# 检查串口状态
ls -la /dev/ttyAMA*

查看详细的硬件映射

# 查看设备树覆盖
dtoverlay -l# 查看GPIO分配
raspi-gpio get 14-15# 查看UART状态
dmesg | grep -i tty

启用/禁用操作

禁用蓝牙的配置

# 编辑配置文件
sudo nano /boot/firmware/config.txt# 添加或取消注释这行:
dtoverlay=pi3-disable-bt# 重启生效
sudo reboot

启用蓝牙的配置

# 编辑配置文件
sudo nano /boot/firmware/config.txt# 注释或删除这行:
# dtoverlay=pi3-disable-bt# 或者完全移除
sudo sed -i '/pi3-disable-bt/d' /boot/firmware/config.txt# 重启生效
sudo reboot

临时禁用

# 不修改config.txt,临时禁用
sudo hciconfig hci0 down
sudo systemctl stop bluetooth# 重新启用
sudo hciconfig hci0 up
sudo systemctl start bluetooth

仅释放串口

# 使用更精细的控制,只切换UART用途
dtoverlay=miniuart-bt
# 或者
dtoverlay=pi3-miniuart-bt

树莓派4B都有哪些设备会用到串口?

树莓派4B的串口资源比较有限,多个设备会竞争使用。以下是详细的串口使用情况:

2. 树莓派4B串口硬件架构

树莓派4B有多个UART:
- UART0 (PL011):高性能UART,通常用于蓝牙
- UART1 (miniUART):简化版UART,性能较低
- UART2-UART5:额外的UART(需要配置)

主要使用串口的设备如下:

板载蓝牙(最主要用户)

硬件:Broadcom BCM4345 Bluetooth/WiFi芯片
使用的串口:UART0 (PL011) - /dev/ttyAMA0
用途:蓝牙数据通信
配置:默认启用,通过设备树配置

控制台串口

使用的串口:UART1 (miniUART) - /dev/ttyS0
用途:系统调试、串口登录
启用方式:在/boot/firmware/config.txt 中,enable_uart=1

GPIO引脚上的UART

引脚:GPIO 14 (TX) 和 GPIO 15 (RX)
可配置为:UART0(蓝牙)或 UART1(控制台),取决于设备树配置

外部串口设备

GPIO串口设备常见应用:GPS模块、串口传感器、Arduino通信、工业控制器、机器人控制器

USB转串口设备:

# 插入USB转串口适配器后
/dev/ttyUSB0
/dev/ttyUSB1

3. 设备树配置选项

查看当前串口映射

# 查看所有串口设备
ls -la /dev/tty*# 查看串口映射
ls -la /dev/serial* # 查看详细的硬件信息
dmesg | grep -i tty

常用配置组合

配置1:蓝牙优先(默认)

# /boot/firmware/config.txt
# 蓝牙使用 UART0,控制台禁用
enable_uart=0

配置2:控制台优先

# /boot/firmware/config.txt
enable_uart=1
dtoverlay=miniuart-bt
# 或
dtoverlay=pi3-miniuart-bt

配置3:禁用蓝牙,释放串口

# /boot/firmware/config.txt  
enable_uart=1
dtoverlay=pi3-disable-bt

具体设备使用案例

案例1:GPS模块连接

# 硬件:GPS模块连接到 GPIO14/15
# 配置:需要禁用蓝牙或使用USB串口
# 设备文件:/dev/ttyAMA0 或 /dev/ttyUSB0

案例2:Arduino通信

# 硬件:Arduino通过USB连接
# 设备文件:/dev/ttyACM0
# 或者通过GPIO连接:/dev/ttyAMA0

案例3:传感器网络

# 硬件:多个RS485传感器
# 需要:USB转多串口适配器
# 设备文件:/dev/ttyUSB0, /dev/ttyUSB1, ...

查看串口使用情况

#!/bin/bash
echo "=== 树莓派4B串口状态 ==="echo "1. 串口设备列表:"
ls -la /dev/tty* | grep -E "(AMA|S|USB|ACM)"echo "2. 当前串口映射:"
ls -la /dev/serial* 2>/dev/null || echo "无serial链接"echo "3. 内核消息中的串口:"
dmesg | grep -i tty | tail -10echo "4. 进程使用的串口:"
lsof | grep -E "/dev/tty(AMA|S|USB|ACM)" | head -10

 串口分配冲突分析

默认配置下的冲突

GPIO14/15 → UART0 → 蓝牙 (/dev/ttyAMA0)
控制台 → UART1 (/dev/ttyS0) → 禁用

启用控制台后的冲突

GPIO14/15 → UART0 → 蓝牙 (/dev/ttyAMA0) 
控制台 → UART1 (/dev/ttyS0) → GPIO14/15 复用

解决冲突的方法

方法1:使用USB串口适配器

# 插入USB转串口适配器
# 自动识别为 /dev/ttyUSB0
# 不占用板载串口资源

方法2:配置串口复用

# 在 /boot/firmware/config.txt 中
# 蓝牙使用miniUART,GPIO使用PL011
dtoverlay=miniuart-bt
enable_uart=1

方法3:软件串口(性能较低)

# 使用GPIO模拟串口
import serial
# 或者使用pigpio的软件串口

4. 推荐配置方案

UART类型最大波特率特性
PL011 (UART0)4M baud高性能,有FIFO
miniUART32K baud基本功能,依赖CPU频率
软件串口115200占用CPU,稳定性差
USB串口12M baud稳定,不占用GPIO

方案A:需要蓝牙和串口控制台

# /boot/firmware/config.txt
enable_uart=1
dtoverlay=miniuart-bt
core_freq=250

方案B:需要高速串口设备

使用 /dev/ttyAMA0 连接高速设备

# /boot/firmware/config.txt  
enable_uart=1
dtoverlay=pi3-disable-bt

方案C:多串口需求

启用额外的硬件UART

# /boot/firmware/config.txt
enable_uart=1
dtoverlay=uart2
dtoverlay=uart3
dtoverlay=uart4
dtoverlay=uart5

验证配置,创建测试脚本 check_serial.sh

#!/bin/bash
echo "=== 串口配置验证 ==="echo "1. Config.txt 设置:"
grep -E "(uart|dtoverlay)" /boot/firmware/config.txtecho "2. 可用串口设备:"
for device in /dev/ttyAMA0 /dev/ttyS0 /dev/serial0 /dev/serial1; doif [ -e "$device" ]; thenecho "✓ $device 存在"elseecho "✗ $device 不存在"fi
doneecho "3. 蓝牙状态:"
hciconfig -a 2>/dev/null && echo "✓ 蓝牙可用" || echo "✗ 蓝牙不可用"echo "4. GPIO串口测试:"
if [ -e "/dev/ttyAMA0" ]; thenecho "✓ GPIO串口可用"
elseecho "✗ GPIO串口不可用"
fi

冲突解决:根据需求选择合适的设备树配置,或者使用USB串口适配器来扩展串口资源。

http://www.dtcms.com/a/469118.html

相关文章:

  • 【k8s】基础概念+下载安装教程
  • K8S原理刨析
  • 前端学习之样式设计
  • vue3+elementplugs+原生css实现切换主题色
  • Windows用Notepad++编辑Shell脚本:一招解决Linux执行报错问题
  • 自己做网站要不要租服务器软件开发工程师时薪
  • 工业智能科技网站设计做搜狗pc网站软件下载
  • 企业网站制作收费拍卖行 网站建设
  • 网站建设和网站开发的区别域名主机基地
  • 宁波营销型网站建设首选肥东县建设局网站
  • 工商营业执照网上申报关键词优化报价
  • 帮人做网站要怎么赚钱吗网页设计软件培训机构
  • seo网站建设费用济南网站建设第六网建
  • 昆山市网站建设产品运营主要做什么
  • 网站建设进无形资产的规定电子商务网站硬件建设的核心
  • 免费的毕业设计网站建设北京移动端网站建设
  • 简易网站模板wordpress菜单创建
  • 哪个网站可以做兼职讲师建设部网站施工员查询
  • wordpress 通用代码seo关键词排行优化教程
  • 好看的知名企业网站制作网页的软件
  • 牛商网专注营销型网站建设加速器怎么加速网页
  • 某公司网站源码电脑版商城网站建设
  • dw和vs做网站哪个好用软件开发培训学费
  • 重庆网站建设velpaiseo优化排名易下拉试验
  • 南京做网站公司地点网站建设银川
  • frontpage可以做网站吗网站主色调有几种
  • 做网站用什么域名比较好烟台规划网站
  • 博客网站是自己做的吗wordpress分类自定义title
  • 做视频的网站socks5免费代理地址
  • 深圳做网站最好的公可以推广的平台