树莓派5B - 零基础应用开发(第一期)
一、树莓派的开始
1.准备工作
① 建议在树莓派官网下载相对应的镜像文件,树莓派镜像下载,网站如下所示:https://www.raspberrypi.org/downloads/raspberry-pi-os/
② 把SD卡格式化,使用SDFormatter进行开始格式化操作。
③ 把在官网下载好的镜像通过imager_1.8.1烧录到SD卡中,在设置中配置好用户名,密码等有关信息。注意建议打开ssh公钥服务,后面远程连接有用。
④ 烧录到SD卡后,插入树莓派,一开始因为系统是没配置好的,需要对外接显示屏,随便一个可以显示的都行,因为后面主要也是使用vnc和vscode的远程连接控制编程。开始直接开机,完成准备工作。
2.远程vnc的配置
① 打开终端,输入以下命令启动配置工具sudo raspi-config
在界面中直接启动vnc和ssh服务。
② 在终端下使用ifconfig找到自己的IP,在自己的电脑中打开vnc输入树莓派的ip地址,则可以在笔记本上直接控制树莓派了,这样树莓派所接的外设就会大幅降低。
3.远程vscode的配置(使用密钥连接)
① 在windows上打开windows终端,输入以下命令生成 SSH 密钥对ssh-keygen -t rsa -b 4096 -C “[email protected]”,这里你可以自己选择.ssh创建的位置
② 在树莓派上打开终端,创建 .ssh 目录: 一旦你成功登录到树莓派,创建 .ssh 目录并设置权限。
mkdir -p ~/.ssh
chmod 700 ~/.ssh
③ 创建 authorized_keys 文件: 接下来,你需要创建 authorized_keys 文件以存储你的公钥。
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
④ 在windows上获取公钥内容: 在本地机器上运行以下命令,查看你的公钥:
cat ~/.ssh/raspberry_id_rsa.pub
⑤ 在树莓派上打开 authorized_keys 文件,将公钥粘贴进去
nano ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
⑥ 打开 VSCode,在左侧的扩展视图(点击左边的方块图标,或按 Ctrl+Shift+X)中搜索 Remote - SSH,点击 Install 安装该扩展。
⑦ 输入以下命令来配置 SSH 连接 ssh [email protected]
⑧ 在 ~/.ssh/config 文件中添加以下内容:
Host chenxixichen
HostName 168.124.2.156
User chenxixichen
IdentityFile ~/.ssh/raspberry_id_rsa
⑨ 接着启动vscode远程连接,打开 VSCode 的命令面板(Ctrl+Shift+P),选择 Remote-SSH: Connect to Host。选择配置的主机名 chenxixichen。VSCode 会通过 SSH 密钥自动连接到树莓派。
⑩ 最后输入树莓派的密码,就可以远程控制树莓派了。
4.更改树莓派的镜像让下载更加快速
我选择的是更换清华的镜像源(arm64),以下的步骤如下所示
① 备份 /etc/apt/sources.list.d/raspi.list
sudo cp -r /etc/apt/sources.list.d/raspi.list /
/etc/apt/sources.list.d/raspi.list.bak
② 编辑 /etc/apt/sources.list
打开文件:sudo nano /etc/apt/sources.list
将现有的内容替换为清华的 Debian 源(适用于 Raspberry Pi OS 基于 Debian 的版本):
清华大学 Debian 镜像源
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free
编辑 /etc/apt/sources.list.d/raspi.list
打开文件:sudo nano /etc/apt/sources.list.d/raspi.list
将内容替换为清华提供的树莓派镜像源:
清华大学 Raspbian 镜像源
deb https://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ bookworm main contrib non-free rpi
deb-src https://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ bookworm main contrib non-free rpi
注意事项:
③ 保存并退出编辑器后,更新软件包列表:sudo apt update
升级现有软件包:sudo apt upgrade。
二.点亮一个流水灯
在树莓派中如果需要点亮一个流水灯,则需要对树莓派的GPIO进行相应的控制。其中有多个方法来实现。
1.在终端下实现流水灯-写一个简单的脚本
由于我的树莓派是树莓派5B,对于以前的wiringpi的命令不太兼容,通过 libgpiod,可以很方便地控制树莓派等设备上的 GPIO 引脚,libgpiod 提供了命令行工具来读取和设置 GPIO 引脚的状态。
libgpiod 提供了一套命令行工具,用于管理和控制 GPIO 引脚。以下是常用的 libgpiod 工具及其对应的功能和示例。
a.gpiodetect
列出系统中的所有 GPIO 芯片。可以帮助你确认 GPIO 控制器的芯片编号。
chenxixichen@chenxixichen:~ $ gpiodetect
gpiochip0 [gpio-brcmstb@107d508500] (32 lines)
gpiochip1 [gpio-brcmstb@107d508520] (4 lines)
gpiochip2 [gpio-brcmstb@107d517c00] (17 lines)
gpiochip3 [gpio-brcmstb@107d517c20] (6 lines)
gpiochip4 [pinctrl-rp1] (54 lines)
b.gpioinfo
显示某个 GPIO 芯片的详细信息,包括引脚的当前状态、方向、名称等。
chenxixichen@chenxixichen:~ $ gpioinfo gpiochip4
gpiochip4 - 54 lines:
line 0: “ID_SDA” unused input active-high
line 1: “ID_SCL” unused input active-high
line 2: “GPIO2” unused input active-high
line 3: “GPIO3” unused input active-high
line 4: “GPIO4” unused input active-high
line 5: “GPIO5” unused input active-high
line 6: “GPIO6” unused input active-high
line 7: “GPIO7” unused input active-high
line 8: “GPIO8” unused input active-high
line 9: “GPIO9” unused input active-high
line 10: “GPIO10” unused input active-high
line 11: “GPIO11” unused input active-high
…
在 gpioinfo 命令的输出中,unused 表示该引脚当前未被任何用户空间的应用程序或驱动程序主动占用,即它并没有被绑定到任何具体的任务上。即便引脚设置为输入或输出模式,gpioinfo 仍会显示 unused,表示该引脚没有被明确分配给某个设备或功能。
c.gpioset
设置 GPIO 引脚的输出值(高/低电平)。此命令通常用于控制设备,例如点亮 LED 或控制电机。
gpioset <gpiochip编号> <引脚编号>=<值>
gpioset 命令的默认行为是在设置完 GPIO 状态后会立即释放引脚。当引脚被释放后,它可能会恢复到设备树或系统启动时的默认状态。这意味着,即使你将 GPIO7 设置为低电平,命令执行后,GPIO7 会恢复为高电平,或回到初始配置状态。如果你希望长期保持 GPIO 引脚的状态,建议使用 -m signal 模式,它会一直保持引脚的状态,直到手动发送信号结束进程
使用 -m signal参数来保持引脚的状态,防止其被释放:
-m signal 模式:保持 GPIO 状态直到进程接收到信号终止。
-m wait 模式:等待用户手动按下 Enter 键来结束,期间 GPIO 状态保持。
-m time 模式:设置 GPIO 状态并保持指定的时间。
chenxixichen@chenxixichen:~ $ gpioset -m signal gpiochip4 6=1
chenxixichen@chenxixichen:~ $ gpioset -m signal gpiochip4 7=0
d.gpioget
读取 GPIO 引脚的当前值(高/低电平)。这通常用于获取传感器输入或按钮状态。
gpioget <gpiochip编号> <引脚编号>
chenxixichen@chenxixichen:~ $ gpioget gpiochip4 6
e.gpiofind
根据引脚名称查找特定的 GPIO 引脚。
gpiofind <引脚名称>
chenxixichen@chenxixichen:~ $ gpiofind GPIO6
gpiochip4 6
f.gpiomon
监视 GPIO 引脚的状态变化,例如监控按钮按下或传感器的状态变化。当 GPIO 输入引脚的电平发生变化时,gpiomon 会输出一条事件。
gpiomon <gpiochip编号> <引脚编号>
chenxixichen@chenxixichen:~ $ gpiomon gpiochip4 6
g.gpio-hog
GPIO hog 是指在设备树中将 GPIO 引脚设置为特定状态(高电平或低电平)并锁定。它是一种在设备树中静态配置 GPIO 状态的方法,而不是通过用户空间工具动态控制。
可以写一个脚本来控制
2.在远程vscode下实现流水灯-写一个简单的pthon程序
注意树莓派5b不支持RPi.GPIO,故本次使用gpiod来导入相应的库
3.在远程vscode下实现流水灯-写一个简单的c程序
使用 libgpiod 库的 简单C 程序
想要源码,可以讨论区联系我!!!
会持续更新,大家一起加油呀!!!
谢谢大家的支持!!!点个小赞赞吧