显然,原创但已在其他平台发布
一、mini UART配置
关闭蓝牙对硬件串口的使用,将硬件串口重新恢复给GPIO的串口使用,也就意味着树莓派3的板载蓝牙和串口,两者是无法兼得的。
1.关闭蓝牙:
【因为之前忘记做笔记了,所以这里记录一下这么打开蓝牙】
使蓝牙服务在系统启动时自动启用
立即启动蓝牙服务,使其可用。
【正式步骤】关闭蓝牙
表示 已成功移除了hciuart.service服务的启动配置文件路径/etc/systemd/system/dev-serial1.device.wants/hciuart.service。
2.修改第一个配置文件
将文档中的所有“ttyAMA0”(若没有,就改serial1)改成“ttyS0”,总共需要修改两处,修改完后Ctrl+O保存退出。
ttyS0 代表 Linux 系统中的第一个串口设备。
为了防止出现什么不可预测的意外,先备份一个文件出来
这个文件是一个系统服务单元文件,通常使用 systemd 来管理。让我们逐段解释它的内容:
Unit 部分
:
Description=: 描述了这个服务单元的作用,即配置通过UART连接的蓝牙调制解调器。 ConditionFileNotEmpty=: 这是一个条件,表示只有当指定路径的文件不为空时,该服务单元才会被激活。在这里,它检查的是 /proc/device-tree/soc/gpio@7e200000/bt_pins/brcm,pins 这个文件是否非空。 After=: 指定了该服务单元应该在 dev-serial1.device 之后启动。这确保了蓝牙服务在串行设备 serial1 准备好后才启动,以避免启动顺序问题。 Service 部分:
Type=forking: 指定服务的启动类型为 forking,这意味着 systemd 期望服务会在后台派生一个子进程,主进程会退出,以便 systemd 可以检测服务的启动完成。 ExecStart=: 指定了服务启动时执行的命令或程序,这里是 /usr/bin/btuart。 Install 部分:
WantedBy=: 指定了一个设备单元或者是系统中的其他单元,它告诉 systemd 当特定的设备 (dev-serial1.device) 准备好时,希望启动这个服务。
综上所述,这个服务单元文件的作用是在特定条件下(UART连接的蓝牙调制解调器就绪),启动 /usr/bin/btuart 程序来配置和启动相关的蓝牙模块。
修改后如图
3.修改第三个配置文件
在文档的结尾加上
dtoverlay=pi3-miniuart-bt 是 Raspberry Pi 上的一个 Device Tree Overlay。它用于配置 Raspberry Pi 3 或更高版本的设备,以将默认的 mini UART(ttyS0)重新分配为 Bluetooth 模块的使用,从而释放出标准的 UART 用于通信。
4.修改第四个配置文件
Raspberry Pi 系统启动时的内核命令行参数配置文件。 在 Raspberry Pi (基于 Raspberry Pi OS 或其他基于 Debian 的操作系统) 中,cmdline.txt 文件包含了启动 Linux 内核时传递给内核的参数。
命令用于以超级用户(root)身份启动一个新的 shell 会话。
通过编辑这个文件,用户可以修改诸如根文件系统的位置、启动参数、控制台设置等参数,以定制系统的启动行为。这对于调试、优化系统性能或进行特定配置非常有用。
需要注意的是,修改 cmdline.txt 文件需要超级用户权限,因此使用 sudo 命令来以超级用户身份编辑这个文件是一个常见的做法。编辑完成后,保存更改并重新启动系统,新的内核命令行参数设置将生效。
备份一下原来的
console=serial0,115200
:指定系统启动时使用串口 serial0 作为控制台,波特率为 115200。 console=tty1
:指定使用虚拟终端 1 作为控制台。 root=PARTUUID=7fdd6ec3-02
:指定系统的根文件系统位于具有特定 UUID 的分区上。 rootfstype=ext4
:指定根文件系统的类型为 ext4。 fsck.repair=yes
:在挂载之前,自动尝试修复根文件系统的错误。 rootwait
:如果根文件系统不可用,则等待直到系统可以挂载它。 quiet splash
:在启动过程中减少输出到控制台的日志信息,并显示一个启动屏幕。 plymouth.ignore-serial-consoles
:指示 Plymouth 不要在启动过程中显示串口控制台。 cfg80211.ieee80211_regdom=CN
:指定 Wi-Fi 设备的监管域为 CN(中国)。
这些参数通常在 Linux 系统的 /etc/default/grub 文件或类似的引导配置文件中定义,并通过运行 grub-mkconfig 或类似的命令来更新引导加载器的配置。
请注意,这些参数非常依赖于具体的系统配置和需求,因此在修改它们之前,请确保了解它们的作用,并谨慎操作。如果您是在尝试启动一个特定的 Linux 系统,那么这些参数将是启动时传递给内核的。如果您需要进一步的帮助,可以提供更多的上下文或具体的问题。
-把内容改成如下
这是 Linux 内核启动参数的一部分。让我逐个解释:
dwc_otg.lpm_enable=0
: 禁用 USB 低功耗模式,这是针对 Raspberry Pi 上的 USB 控制器(DWC OTG)的参数。 console=tty1:
指定系统控制台输出到 tty1,这是系统上的第一个虚拟终端。 root=/dev/mmcblk0p2
: 指定根文件系统的位置,即系统应该从哪个设备的哪个分区启动。在这里,/dev/mmcblk0p2 表示 SD 卡上的第二个分区。 rootfstype=ext4
: 指定根文件系统的文件系统类型为 ext4,这是一种常用的 Linux 文件系统格式。 elevator=deadline
: 指定 I/O 调度程序为 deadline,它决定了系统中块设备(如硬盘、SSD)的读写顺序。 fsck.repair=yes:
如果文件系统检查(fsck)失败,自动修复文件系统错误。 rootwait: 等待根文件系统可用后再启动系统。 这些参数一起配置了 Linux 内核的启动行为,确保系统能够正确引导和运行。
修改完如图
更新系统后重启
一条一条的逐步执行以下命令
重启后关闭蓝牙串口,打开硬件串口
Interfacing Options => Serial =>No =>Yes
7.输入命令检查结果
二、 链接电脑和树莓派
保险起见,断电操作,通过sub转TTL线连接树莓派和电脑进行简单测试。
引脚图允许我套个娃
实际连线如图所示
三、【电脑->派】通过minicom工具来获取串口上的数据
1.安装minicom工具
安装成功
2.通过命令获取串口上的数据
Debian GNU/Linux 11 raspberry ttyAMA0是因为已经成功登录到了您的 Raspberry Pi,这是登录提示。“raspberry” 是您的主机名,而 “ttyAMA0” 是您的串口设备名。登录后,您可以在该终端上执行命令和操作系统任务。
::>_<::接下来是本人的踩坑历程
---问题1这一步,死在乱码,看来是两个系统调节的编码没设置对
【好吧,我是蠢货,⇧这个之所以出错是因为波特率没设置对】 ---问题2
--电量不足
忘记截图了,这个问题是因为树莓派端的供电不足,被检测出来了。
---忘记登入
如果你不登入,就会导致跟我一样,指令输入半天不展示welcome的界面QAQ
⇩对于底下的情况,我把它归咎于就是因为数据丢失,发送完要缓一下才能继续发送出去。
四、树莓派给电脑发送信息
首先要给管理员权限
这步骤好像多余了,因为chmod 777意味着所有者、属组和其他用户都拥有文件的完全权限,包括读取、写入和执行操作,也就是管理员权限了。
进入到树莓派的命令行当中进行如下操作在命令行中输入如下命令
接着进入python3中,输入如下代码,我参考博文的博主说,这里一定一定要注意,不要安装serial库!!!因为这个是安装好的,再安装会提示serial中无Serial!
检验串口是否打开,若未打开则输入 ser.open() 打开
True 表示打开
接着我们打开串口,设置波特率,再发送串口信息
在 Python 中,前缀 b 表示一个字节字符串(byte string)。通过在字符串前面加上 b 前缀,您告诉 Python 解释器将该字符串视为字节序列而不是普通的 Unicode 字符串。这在处理二进制数据时非常有用,因为字节字符串可以直接表示原始的字节数据。在示例中 b'Raspberry pi',b 告诉 Python 将 'Raspberry pi' 视为字节序列,而不是包含 Unicode 字符的普通字符串。这通常在需要向串口设备或文件等处理二进制数据的时候使用。
示意图如下:
要以十六进制形式发送数据,您可以使用 Python 的内置函数 bytes.fromhex() 将十六进制字符串转换为字节对象,然后使用 ser.write() 方法将其发送到串口。例如,如果您想发送十六进制字符串 'FFAABB',您可以这样做:
这将发送十六进制数据 FFAABB 到串口。
结束!