覆盆子派操作系统
- 覆盆子派操作系统
- 介绍
- 更新升级树莓派操作系统
- 使用 APT
- 使用 rpi 更新
- 播放音频和视频
- OMXPlayer 应用程序
- 如何播放音频?
- 如何播放视频?
- 播放期间的选项
- 在后台播放
- 使用 USB 网络摄像头
- 基本用法
- 捕获自动图像
- 延时拍摄
- 实用工具
- tvservice
- vcgencmd
- vcdbg
- Python
- Thonny
- 基本 Python 用法
- Thonny 中的 Python 文件
- 使用命令行
- 其他使用 Python 的方法
- 安装 Python 库
- GPIO 和 40 针接头
- 电压
- 输出
- 输入
- 更多的
- GPIO 引出线
- 权限
- Python中的GPIO
覆盆子派操作系统
介绍
Raspberry Pi OS 是基于 Debian 免费操作系统 Raspberry Pi 优化硬件是推荐的 Raspberry Pi 正常使用的操作系统。 该操作系统超过 35,000 软件包:预编译软件以良好的格式捆绑在一起,便于安装在您身上 Raspberry Pi 上。
Raspberry Pi OS 在积极发展中,重点是改进 Raspberry Pi 尽可能多 Debian 软件包的稳定性和性能。
更新升级树莓派操作系统
让您的 Raspberry Pi 保持最新状态非常重要。 第一个也是最重要的原因是安全性。 运行 Raspberry Pi OS 该设备包括您所依赖的数百万行代码。 随着时间的推移,数百万行代码将暴露众所周知的漏洞,记录在这些漏洞中公开可用数据库这意味着它们很容易使用。 作为 Raspberry Pi OS 用户,缓解这些漏洞的唯一方法就是让你的软件保持最新,因为上游存储库密切跟踪 CVE 并尝试快速缓解它们。
第二个原因是,与第一个相关的是,您在设备上运行的软件必须包含错误。 一些错误是 CVE,但错误也可能影响所需的功能,与安全无关。 通过保持你的软件最新,你可以减少遇到这些错误的机会。
使用 APT
最简单的管理安装、升级和删除软件的方法是使用 Debian 的 APT(高级包装工具)。 要更新 Raspberry Pi OS 软件,你可以 apt 该工具用于终端窗口。
保持您的操作系统最新
APT 将 Raspberry Pi 保存在上面的软件源列表中 /etc/apt/sources.list . 您应该在安装软件之前使用它 apt update . 继续并打开终端窗口并输入:
sudo apt update
接下来, 使用已安装的软件包都将使用下列命令
sudo apt full-upgrade
请注意, full-upgrade 它优先于 simple 使用 upgrade ,因为它还可以获得任何可能的依赖项变更。
一般来说,定期执行此操作将使您的安装以及您正在使用的特定操作 Raspberry Pi OS 版本(例如 Buster)保持同步。 它不会从一个主要版本更新到另一个,例如,Stretch to Buster 或 Buster to Bullseye。
但是,在 Raspberry Pi OS 偶尔会有需要手动干预的变化,比如新引进的包。 这些不是通过升级安装的,因为此命令只更新您已经安装的软件包。
笔记 | 内核和固件 Debian 软件包安装,因此在使用上述过程时也会更新。 经过广泛的测试,这些软件包很少更新。 |
如果将现有 SD 卡移动到新的 Raspberry Pi 型号(例如 Raspberry Pi Zero 2 W),您还可能需要使用上述说明来更新内核和固件。
空间不足
运行时 sudo apt full-upgrade ,它将显示下载多少数据,占用多少数据 SD 卡空间。 值得检查 df -h 不幸的是,你有足够的磁盘空间吗? apt 这个操作不会为你执行。 另外,请注意下载的包文件( .deb 保存文件) /var/cache/apt/archives . 你可以删除这些来释放空间 sudo apt clean ( sudo apt-get clean 在旧版本的 apt 中)。
升级之前的操作系统版本
警告 | 对现有图像进行升级是可能的,但不能保证在所有情况下都能正常工作,我们不样做。 如果您真的想升级您的操作系统版本,我们强烈建议您先备份——我们不对因更新失败而丢失的数据负责。 |
最新版本的 Raspberry Pi OS 是基于Debian Bullseye的。 以前的版本是基于的Buster的。 如果您想执行从 Buster 到 Bullseye 的就地升级(并且您知道风险),请参阅论坛说明。
搜索软件
您可以使用以下命令在档案中搜索具有给定关键字的包 apt-cache search :
apt-cache search locomotive sl - Correct you if you type `sl' by mistake
安装前可以查看更多关于软件包的信息 apt-cache show :
apt-cache show sl Package: sl Version: 3.03-17 Architecture: armhf Maintainer: Hiroyuki Yamamoto <yama1066@gmail.com> Installed-Size: 114 Depends: libc6 (>= 2.4), libncurses5 (>= 5.5-5~), libtinfo5 Homepage: http://www.tkl.iis.u-tokyo.ac.jp/~toyoda/index_e.html Priority: optional Section: games Filename: pool/main/s/sl/sl_3.03-17_armhf.deb Size: 26246 SHA256: 42dea9d7c618af8fe9f3c810b3d551102832bf217a5bcdba310f119f62117dfb SHA1: b08039acccecd721fc3e6faf264fe59e56118e74 MD5sum: 450b21cc998dc9026313f72b4bd9807b Description: Correct you if you type `sl' by mistake Sl is a program that can display animations aimed to correct you if you type 'sl' by mistake. SL stands for Steam Locomotive.
使用 APT 安装软件包
sudo apt install tree
输入此命令应告知用户软件包将占用多少磁盘空间,并要求确认软件包的安装。 输入 Y (或只按 Enter ,因为是默认操作)会允许安装。 这可以通过 -y 在命令中加到命令中绕过:
sudo apt install tree -y
安装此软件包 tree 可供用户使用。
使用 APT 卸载软件包
您可以使用以下卸载软件包 apt remove :
sudo apt remove tree
该系统将提示用户确认删除。 同样, -y 标志将自动确认。
您还可以选择完全删除包及其相关配置文件 apt purge :
sudo apt purge tree
使用 rpi-update
rpi-update 它是一个命令行应用程序,它将你的 Raspberry Pi OS 内核和 VideoCore 将固件更新到最新的预发布版本。
警告 | 软件的预发布版本不能保证正常工作。 rpi-update 除非 Raspberry Pi 工程师建议,否则 不得在任何系统上用。 它可能会使您的系统不可靠甚至完全损坏。 它不应用作任何常规更新过程的一部分。 |
该 rpi-update 脚本最初由 Hexxeh 编写,但现在由 Raspberry Pi 工程师支持。 脚本源位于 rpi-update 存储库 中。
它能做什么
rpi-update 将下载最新的 linux 内核预发布版本、其匹配模块、设备树文件,以及最新版本的 VideoCore 固件。 然后它将这些文件安装到 SD 卡上的相关位置,覆盖任何以前的版本。
使用的所有源数据 rpi-update 都来自 rpi-firmware 存储库 。 此存储库仅包含来自 官方固件存储库 的数据子集,因为并非该存储库中的所有数据都是必需的。
跑步 rpi-update
如果您确定需要使用 rpi-update ,建议先备份当前系统,因为运行 rpi-update 可能会导致系统无法启动。
rpi-update 需要以root身份运行。 更新完成后,您将需要重新启动。
sudo reboot
它在 rpi-update 存储库 中记录了许多选项。
如何恢复安全
如果您已经完成 rpi-update 并且事情没有按您希望的那样工作,如果您的 Raspberry Pi 仍然可以启动,您可以使用以下命令返回到稳定版本:
sudo apt install --reinstall libraspberrypi0 libraspberrypi-{bin,dev,doc} raspberrypi-bootloader raspberrypi-kernel
您需要重新启动 Raspberry Pi 才能使这些更改生效。
播放音频和视频
警告 | 以下文档是指 Raspberry Pi OS Buster 及更早版本。 OMXPlayer 在最新的操作系统版本 中已被弃用 。 如果您正在运行 Bullseye,VLC 现在是推荐的替代方案。 |
在 Raspberry Pi 上播放音频和视频的最简单方法是使用已安装的 OMXPlayer 应用程序。
这是硬件加速的,可以播放许多流行的音频和视频文件格式。 OMXPlayer 使用 OpenMAX ( omx ) 硬件加速接口 (API),它是 Raspberry Pi 上官方支持的媒体 API。 OMXPlayer 由 Kodi Project 的 Edgar Hucek 开发。
OMXPlayer 应用程序
最简单的命令行是 omxplayer <name of media file> . 媒体文件可以是音频或视频或两者兼而有之。 对于下面的示例,我们使用了标准 Raspberry Pi OS 安装中包含的 H264 视频文件。
omxplayer /opt/vc/src/hello_pi/hello_video/test.h264
默认情况下,音频被发送到模拟端口。 如果您使用带扬声器的配备 HDMI 的显示设备,您需要告诉 omxplayer 通过 HDMI 链路发送音频信号。
omxplayer --adev hdmi /opt/vc/src/hello_pi/hello_video/test.h264
显示视频时,整个显示将用作输出。 您可以使用窗口选项指定您希望视频显示在显示器的哪个部分。
omxplayer --win 0,0,640,480 /opt/vc/src/hello_pi/hello_video/test.h264
您还可以指定要显示视频的哪一部分:这称为裁剪窗口。 这部分视频将被放大以匹配显示,除非您还使用窗口选项。
omxplayer --crop 100,100,300,300 /opt/vc/src/hello_pi/hello_video/test.h264
如果您使用的是 Raspberry Pi Touch Display ,并且想要将其用于视频输出,请使用 display 选项指定要使用的显示器。 n HDMI 为 5,触摸屏为 4。 使用 Raspberry Pi 4,您有两个 HDMI 输出选项。 n HDMI0 为 2,HDMI1 为 7。
omxplayer --display n /opt/vc/src/hello_pi/hello_video/test.h264
如何播放音频
要播放 MP3 文件,请使用以下命令导航到 .mp3 终端中文件的位置, cd 然后键入以下命令:
omxplayer example.mp3
这将 example.mp3 通过显示器的内置扬声器或通过耳机插孔连接的耳机播放音频文件。
如果您需要示例文件,可以使用以下命令从此处下载示例文件:
wget https://raw.githubusercontent.com/raspberrypilearning/burping-jelly-baby/master/data/la.mp3 -O example.mp3 --no-check-certificate
如果您听不到任何声音,请确保您的耳机或扬声器连接正确。 请注意,omxplayer 不使用 ALSA,因此会忽略 or 设置的 音频配置 。 raspi-config amixer
如果 omxplayer 无法自动检测到正确的音频输出设备,您可以使用以下命令强制通过 HDMI 输出:
omxplayer -o hdmi example.mp3
或者,您可以通过耳机插孔强制输出:
omxplayer -o local example.mp3
您甚至可以通过耳机插孔和 HDMI 强制输出:
omxplayer -o both example.mp3
如何播放视频
要播放视频,请使用 导航到终端中视频文件的位置 cd ,然后键入以下命令:
omxplayer example.mp4
这将 example.mp4 全屏播放。 点击 Ctrl + C 退出。
在 Raspberry Pi 4 上,已删除对 MPEG2 和 VC-1 编解码器的硬件支持,因此我们建议使用 VLC 应用程序,它在软件中支持这些格式。 此外,VLC 对 H264 和新的 HEVC 编解码器具有硬件支持。
示例视频
您的 Raspberry Pi 上提供了动画电影 Big Buck Bunny 的视频样本。 要播放它,在终端窗口中输入以下命令:
omxplayer /opt/vc/src/hello_pi/hello_video/test.h264
在 Raspberry Pi 4 上,对 H264 文件使用以下命令:
omxplayer /opt/vc/src/hello_pi/hello_video/test.h264
或用于 H264、VC1 或 MPEG2
vlc /opt/vc/src/hello_pi/hello_video/test.h264
使用 VLC 时,您可以通过封装原始 H264 流(例如来自 Raspberry Pi 摄像头模块)来提高播放性能。 这很容易使用 ffmpeg . 如果 VLC 全屏运行,播放也会得到改善; 从用户界面选择全屏,或者您可以将 --fullscreen 选项添加到 vlc 命令行。
此示例命令转换为 30 fps video.h264 的容器化: video.mp4
ffmpeg -r 30 -i video.h264 -c:v copy video.mp4
播放期间的选项
播放期间有许多选项可用,通过按相应的键来操作。 并非所有选项都适用于所有文件。 可以使用以下方式显示键绑定列表 omxplayer --keys :
2 提高速度 < 倒带 > 快进 z 显示信息 j 上一个音频流 k 下一个音频流 我上一章 o 下一章 n 前一个字幕流 m 下一个字幕流 s 切换字幕 w 显示字幕 x 隐藏字幕 d 减少字幕延迟(- 250 毫秒) f 增加字幕延迟 (+ 250 ms) q 退出 omxplayer p /空格暂停/恢复 - 减少音量 + / = 增加音量 左箭头搜索 -30 秒 右箭头搜索 +30 秒 向下箭头搜索 -600 秒 向上箭头搜索 +600 秒
在后台播放
omxplayer 如果在没有 tty(用户输入)的情况下在后台运行,将立即关闭,因此要成功运行,您需要使用该 选项告诉 omxplayer 不需要任何用户输入。 --no-keys
omxplayer --no-keys example.mp3 &
& 在命令末尾 添加 会在后台运行作业。 jobs 然后,您可以使用该命令 检查此后台作业的状态。 默认情况下,该作业将在播放完毕后完成,但如有必要,您可以使用该 命令 omxplayer 随时停止它。 kill
$ jobs [1]- Running omxplayer --no-keys example.mp3 & $ kill %1 $ [1]- Terminated omxplayer --no-keys example.mp3 &
使用 USB 网络摄像头
您可以使用标准 USB 网络摄像头在您的 Raspberry Pi 上拍摄照片和视频, 而不是使用 Raspberry Pi 摄像头模块。
笔记 | 摄像头模块的质量和可配置性大大优于标准 USB 网络摄像头。 |
首先,安装 fswebcam 软件包:
sudo apt install fswebcam
如果您没有使用默认 pi 用户帐户,则需要将您的用户名添加到 video 组中,否则您将看到“权限被拒绝”错误。
sudo usermod -a -G video <username>
要检查用户是否已正确添加到组中,请使用该 groups 命令。
基本用法
输入命令 fswebcam 后跟文件名,将使用网络摄像头拍摄照片,并保存到指定的文件名:
fswebcam image.jpg
此命令将显示以下信息:
正在尝试源模块 v4l2... /dev/video0 打开。 没有指定输入,使用第一个。 将分辨率从 384x288 调整为 352x288。 --- 捕获帧... 损坏的 JPEG 数据:标记 0xd4 之前的 2 个无关字节 在 0.00 秒内捕获的帧。 --- 处理捕获的图像... 将 JPEG 图像写入“image.jpg”。
笔记 | 使用的小默认分辨率,以及显示时间戳的横幅的存在。 |
本例中使用的网络摄像头的分辨率为 1280 x 720 so 来指定我想要拍摄图像的分辨率,使用以下 -r 标志:
fswebcam -r 1280x720 image2.jpg
此命令将显示以下信息:
正在尝试源模块 v4l2... /dev/video0 打开。 没有指定输入,使用第一个。 --- 捕获帧... 损坏的 JPEG 数据:标记 0xd5 之前的 1 个无关字节 在 0.00 秒内捕获的帧。 --- 处理捕获的图像... 将 JPEG 图像写入“image2.jpg”。
现在以网络摄像头的全分辨率拍摄照片,并带有横幅。
移除横幅
现在添加 --no-banner 标志:
fswebcam -r 1280x720 --no-banner image3.jpg
其中显示以下信息:
正在尝试源模块 v4l2... /dev/video0 打开。 没有指定输入,使用第一个。 --- 捕获帧... 损坏的 JPEG 数据:标记 0xd6 之前的 2 个无关字节 在 0.00 秒内捕获的帧。 --- 处理捕获的图像... 禁用横幅。 将 JPEG 图像写入“image3.jpg”。
现在这张照片是以全分辨率拍摄的,没有横幅。
自动化图像捕获
您可以编写一个使用网络摄像头拍照的 Bash 脚本。 下面的脚本将图像保存在 /home/pi/webcam 目录中,因此首先创建 webcam 子目录:
mkdir webcam
要创建脚本,请打开您选择的编辑器并编写以下示例代码:
#!/bin/bash DATE=$(date +"%Y-%m-%d_%H%M") fswebcam -r 1280x720 --no-banner /home/pi/webcam/$DATE.jpg
该脚本将拍照并使用时间戳命名文件。 假设我们将其保存为 webcam.sh ,我们将首先使文件可执行:
chmod +x webcam.sh
然后运行:
./webcam.sh
它将运行文件中的命令并给出通常的输出:
正在尝试源模块 v4l2... /dev/video0 打开。 没有指定输入,使用第一个。 --- 捕获帧... 损坏的 JPEG 数据:标记 0xd6 之前的 2 个无关字节 在 0.00 秒内捕获的帧。 --- 处理捕获的图像... 禁用横幅。 将 JPEG 图像写入“/home/pi/webcam/2013-06-07_2338.jpg”。
延时拍摄
您可以使用 cron 来安排在给定的时间间隔拍照,例如每分钟捕捉延时。
首先打开cron表进行编辑:
crontab -e
这将询问您要使用哪个编辑器,或者在您的默认编辑器中打开。 在编辑器中打开文件后,添加以下行以安排每分钟拍照一次(参考上面的 Bash 脚本):
* * * * * /home/pi/webcam.sh 2>&1
保存并退出,您应该会看到以下消息:
crontab: installing new crontab
确保您的脚本不会保存使用相同文件名拍摄的每张照片。 这将每次覆盖图片。
实用工具
有几个有用的命令行
电视服务
tvservice 是一个命令行应用程序,用于获取和设置有关显示器的信息,主要针对 HDMI 视频和音频。
单独键入 tvservice 将显示可用命令行选项的列表。
-p,--首选
使用首选设置打开 HDMI 输出。
-o,--关闭
关闭显示输出。
笔记 | 使用此命令关闭输出也会破坏与显示相关的任何帧缓冲区/dispmanx 层。 这些不会在随后的电源上重新建立,因此会导致空白屏幕。 |
更好的选择是使用 vcgencmd display_power 选项,因为这将保留任何帧缓冲区,因此当重新打开电源时,显示器将返回到之前的开机状态。
-e, --explicit="组模式驱动器"
使用指定的设置打开 HDMI
组可以是 CEA , DMT , CEA_3D_SBS , CEA_3D_TB , CEA_3D_FP ,之一 CEA_3D_FS 。 模式是从 -m, --modes 选项返回的模式之一。 驱动器可以是 HDMI ,之一 DVI 。
-t,--ntsc
HDMI 模式使用 59.94Hz(NTSC 频率)而不是 60Hz。
-c, --sdtvon="模式方面[P]"
PAL 使用指定的模式或 NTSC ,以及指定的纵横比, 4:3 , 14:9 , 开启标清电视(复合输出) 16:9 。 可选 P 参数可用于指定渐进模式。
-m, --modes=组
其中 Group 是 CEA 或 DMT 。
显示指定组中可用的显示模式列表。
-M,--监控
监控任何 HDMI 事件,例如拔出或连接。
-s,--状态
显示显示模式的当前设置,包括模式、分辨率和频率。
-a,--音频
显示音频模式的当前设置,包括通道、采样率和采样大小。
-d, --dumpid=文件名
将当前的 EDID 保存到指定的文件名。 然后,您可以使用 edidparser <filename> 以人类可读的形式显示数据。
-j,--json
与选项结合使用时 --modes ,以 JSON 格式显示模式信息。
-n,--名称
从 EDID 数据中提取显示名称并显示它。
-l,--列表
列出所有连接的显示器及其显示器 ID。
-v,--设备=显示
指定要使用的设备的 ID; --list 查看可用 ID 的输出。
vcgencmd
该 vcgencmd 您可以在 Github 上 找到该 vcgencmd 实用程序的源代码 。
要获取所有 vcgencmd 支持的命令的列表,请使用 vcgencmd commands . 下面列出了一些有用的命令及其所需的参数。
VCOS
该 vcos 命令有两个有用的子命令:
version 在 VideoCore 上显示固件的构建日期和版本
log status 显示各种 VideoCore 固件区域的错误日志状态
版本
显示 VideoCore 固件的构建日期和版本。
获取相机
显示树莓派摄像头的启用和检测状态: 1 表示是, 0 表示否。 虽然除精简版本外的所有固件都支持相机,但需要使用 raspi-config 启用此支持。
get_throttle
返回系统的节流状态。 这是一个位模式 - 设置的位表示以下含义:
少量 | 十六进制值 | 意义 |
---|---|---|
0 |
0x1 |
检测到欠压 |
1 |
0x2 |
手臂频率上限 |
2 |
0x4 |
目前受到限制 |
3 |
0x8 |
软温度限制激活 |
16 |
0x10000 |
发生欠压 |
17 |
0x20000 |
已发生 Arm 频率上限 |
18 |
0x40000 |
发生了节流 |
19 |
0x80000 |
出现软温度限制 |
测量温度
返回由其内部温度传感器测量的 SoC 温度; 在 Raspberry Pi 4 上, measure_temp pmic 返回 PMIC 的温度。
measure_clock [时钟]
这将返回指定时钟的当前频率。 选项包括:
钟 | 描述 |
---|---|
手臂 |
ARM 内核 |
核 |
GPU核心 |
H264 |
H.264 块 |
网络服务商 |
图像传感器管道 |
v3d |
3D块 |
UART |
UART |
脉宽调制 |
PWM 模块(模拟音频输出) |
emmc |
SD卡接口 |
像素 |
像素阀 |
一个东西 |
模拟视频编码器 |
hdmi |
HDMI |
dpi |
显示并行接口 |
例如 vcgencmd measure_clock arm
measure_volts [块]
显示特定模块使用的当前电压。
堵塞 | 描述 |
---|---|
核 |
VC4核心电压 |
sdram_c |
SDRAM核心电压 |
sdram_i |
SDRAM I/O 电压 |
sdram_p |
SDRAM物理电压 |
otp_dump
显示 SoC 内的 OTP(一次性可编程)内存的内容。 这些是 32 位值,索引从 8 到 64。有关更多详细信息,请参阅 OTP 位页面 。
get_config [配置项|int|str]
显示指定配置设置的值:或者,指定 int (整数)或 str (字符串)以查看给定类型的所有配置项。 例如:
vcgencmd get_config total_mem
返回设备上的总内存(以 MB 为单位)。
get_mem 类型
报告 ARM 和 GPU 可寻址的内存量。 显示 ARM 可寻址内存的使用量 vcgencmd get_mem arm ; 显示 GPU 可寻址内存使用量 vcgencmd get_mem gpu 。 请注意,在内存超过 1GB 的设备上,该 arm 参数将始终返回 1GB 减去 gpu 内存值,因为 GPU 固件只知道前 1GB 内存。 要获得设备上总内存的准确报告,请参阅 total_mem 配置项 - 请参阅 get_config 上面的部分。
codec_enabled [类型]
报告是否启用了指定的 CODEC 类型。 可能的类型选项有 AGIF、FLAC、H263、H264、MJPA、MJPB、MJPG、 、MPG4、MVC0、PCM、THRA、VORB、VP6、VP8、 、 。 当前突出显示的那些需要付费许可证(有关更多信息,请参阅 此 config.txt 部分 ),但在 Raspberry Pi 4 和 400 上除外,其中这些硬件编解码器优先于软件解码被禁用,这不需要许可证。 请注意,由于 Raspberry Pi 4 和 400 上的 H.265 HW 块不是 VideoCore GPU 的一部分,因此无法通过此命令访问其状态。
获取液晶信息
显示任何连接的显示器的分辨率和颜色深度。
mem_oom
显示在 VideoCore 内存空间中发生的任何 OOM(内存不足)事件的统计信息。
mem_reloc_stats
显示来自 VideoCore 上可重定位内存分配器的统计信息。
read_ring_osc
返回环形振荡器的当前速度电压和温度。
hdmi_timings
显示当前 HDMI 设置时序。 有关返回值的详细信息,请参阅 视频配置 。
dispmanx_list
转储当前显示的所有 dispmanx 项目的列表。
显示电源 [0 | 1 | -1] [显示]
显示当前显示器电源状态,或设置显示器电源状态。 vcgencmd display_power 0 将关闭当前显示器的电源。 vcgencmd display_power 1 将打开显示器的电源。 如果没有设置参数,这将显示当前的电源状态。 最后一个参数是可选的显示器 ID,由下表返回 tvservice -l 或从下表返回,它允许打开或关闭特定显示器。
请注意,对于 7" Raspberry Pi 触摸显示器,这只是打开和关闭背光。触摸功能继续正常运行。
vcgencmd display_power 0 7 将关闭电源以显示 ID 7,即 Raspberry Pi 4 上的 HDMI 1。
展示 | ID |
---|---|
主液晶 |
0 |
二次液晶 |
1 |
HDMI 0 |
2 |
合成的 |
3 |
HDMI 1 |
7 |
要确定特定显示 ID 是打开还是关闭,请使用 -1 作为第一个参数。
vcgencmd display_power -1 7 如果显示器 ID 7 关闭,则返回 0,如果显示器 ID 7 开启,则返回 1,如果显示器 ID 7 处于未知状态(例如未检测到),则返回 -1。
vcdbg
vcdbg 是一个帮助在 ARM 上运行的 Linux 调试 VideoCore GPU 的应用程序。 它需要以root身份运行。 此应用程序主要用于 Raspberry Pi 工程师,尽管有一些命令对普通用户可能有用。
sudo vcdbg help 将给出可用命令的列表。
笔记 | 仅列出了最终用户的使用选项。 |
版本
显示来自 VideoCore 的各种版本信息。
日志
从指定子系统转储日志。 可能的选项是:
日志 | 描述 |
---|---|
味精 |
打印出消息日志 |
断言 |
打印断言日志 |
前任 |
打印异常日志 |
信息 |
从日志头打印出信息 |
等级 |
设置指定类别的 VCOS 日志记录级别,n|e|w|i|t |
列表 |
列出 VCOS 日志记录级别 |
例如要打印出消息日志的当前内容:
vcdbg log msg
malloc
列出 VideoCore 堆中当前的所有内存分配。
游泳池
列出池分配器的当前状态
可重定位
没有任何其他参数,列出可重定位分配器的当前状态。 也用于 sudo vcdbg reloc small 列出小分配。
使用子命令 sudo vcdbg reloc stats 列出可重定位分配器的统计信息。
历史
与任务历史相关的命令。
用于 sudo vcdbg hist gnuplot 将 gnuplot 格式的任务历史转储到 task.gpt 和 task.dat
Python
Python 是一种功能强大的编程语言,易于使用、易于阅读和编写,并且与 Raspberry Pi 一起,您可以将项目连接到现实世界。 Python 语法简洁,强调可读性,并使用标准的英文关键字。
Thonny
最简单的 Python 介绍是通过Python 3 开发环境 Thonny 。 您可以从桌面或应用程序菜单打开 Thonny。
Thonny 为您提供了一个 REPL(Read-Evaluate-Print-Loop),这是您可以输入 Python 命令的提示。 因为它是一个 REPL,所以您甚至可以在不使用 print . 在 Thonny 应用程序中,这称为 Shell 窗口。
如果需要,您可以使用变量,但您甚至可以像计算器一样使用它。 例如:
>>> 1 + 2 3 >>> name = "Sarah" >>> "Hello " + name 'Hello Sarah'
Thonny 还内置了语法高亮和一些对自动完成的支持。 Alt + P 您可以使用(上一个)和 Alt + N (下一个) 回顾您在 REPL 中输入的命令的历史记录。
基本 Python 用法
Python中的你好世界:
print("Hello world")
就那么简单!
缩进
一些语言使用花括号 { 来 } 包裹属于一起的代码行,并留给编写者缩进这些行以在视觉上嵌套。 但是,Python 不使用花括号,而是需要缩进以进行嵌套。 例如 for Python 中的循环:
for i in range(10): print("Hello")
这里需要缩进。 缩进的第二行将是循环的一部分,而未缩进的第二行将在循环之外。 例如:
for i in range(2): print("A") print("B")
会打印:
A B A B
而以下:
for i in range(2): print("A") print("B")
会打印:
A A B
变量
要将值保存到变量,请像这样分配它:
name = "Bob" age = 15
请注意,这些变量没有指定数据类型,因为类型是推断出来的,以后可以更改。
age = 15 age += 1 # increment age by 1 print(age)
这次我在增量命令旁边使用了注释。
评论
注释在程序中被忽略,但您可以在那里留下注释,并用井号 # 表示。 多行注释使用三引号,如下所示:
""" This is a very simple Python program that prints "Hello". That's all it does. """ print("Hello")
列表
Python 也有列表(在某些语言中称为数组),它们是任何类型的数据的集合:
numbers = [1, 2, 3]
列表用方括号表示 [] ,每个项目用逗号分隔。
迭代
某些数据类型是可迭代的,这意味着您可以遍历它们包含的值。 例如一个列表:
numbers = [1, 2, 3] for number in numbers: print(number)
这将获取列表中的每个项目 numbers 并打印出该项目:
2 3
注意我用这个词 number 来表示每个项目。 这只是我为此选择的词 - 建议您为变量选择描述性词 - 使用复数表示列表,单数表示每个项目是有意义的。 它使阅读时更容易理解。
其他数据类型是可迭代的,例如字符串:
dog_name = "BINGO" for char in dog_name: print(char)
这会遍历每个字符并将它们打印出来:
B I N G O
范围
整数数据类型不可迭代,尝试迭代它会产生错误。 例如:
for i in 3: print(i)
将产生:
TypeError: 'int' object is not iterable
但是,您可以使用以下 range 函数创建可迭代对象:
for i in range(3): print(i)
range(5) 包含数字 0 、 1 、 2 和 3 ( 4 总共五个数字)。 要获得 (包括)数字 1 ,请使用 . 5 range(1, 6)
长度
您可以使用诸如 len 查找字符串或列表的长度之类的函数:
name = "Jamie" print(len(name)) # 5 names = ["Bob", "Jane", "James", "Alice"] print(len(names)) # 4
如果语句
您可以将 if 语句用于控制流:
name = "Joe" if len(name) > 3: print("Nice name,") print(name) else: print("That's a short name,") print(name)
Thonny 中的 Python 文件
要在 Thonny 中创建 Python 文件,请单击 File > New ,您将获得一个 窗户。 这是一个空文件,而不是 Python 提示符。 您在此窗口中编写一个 Python 文件,保存它,然后运行它,您将在另一个窗口中看到输出。
例如,在新窗口中,键入:
n = 0 for i in range(1, 101): n += i print("The sum of the numbers 1 to 100 is:") print(n)
然后保存此文件( File > Save 或 Ctrl + S )并运行( Run > Run Module 或点击 F5 ),您将在原始 Python 窗口中看到输出。
使用命令行
您可以在标准编辑器 中编写 Python 文件 ,然后从命令行将其作为 Python 脚本运行。 只需导航到保存文件的目录(使用 cd 和 ls 指导)并运行 python3 ,例如 python3 hello.py .
其他使用 Python 的方法
python3 通过在终端中 键入来访问标准的内置 Python shell 。
这个 shell 是一个准备好输入 Python 命令的提示符。 您可以像 Thonny 一样使用它,但它没有语法高亮或自动完成功能。 您可以使用键回顾您在 REPL 中输入的命令的历史记录 Up/Down 。 用于 Ctrl + D 退出。
IPython
IPython 是一个交互式 Python shell,具有语法高亮、自动完成、漂亮的打印、内置文档等功能。 默认情况下不安装 IPython。 安装:
sudo pip3 install ipython
然后从命令行运行 ipython 。 它的工作方式与标准类似 python3 ,但具有更多功能。 尝试打字 len? 和点击 Enter 。 您会看到包括该 len 函数的文档字符串在内的信息:
Type: builtin_function_or_method String Form:<built-in function len> Namespace: Python builtin Docstring: len(object) -> integer Return the number of items of a sequence or mapping.
尝试以下字典理解:
{i: i ** 3 for i in range(12)}
这将打印以下内容:
{0: 0, 1: 1, 2: 8, 3: 27, 4: 64, 5: 125, 6: 216, 7: 343, 8: 512, 9: 729, 10: 1000, 11: 1331}
在标准的 Python shell 中,这会打印在一行上:
{0: 0, 1: 1, 2: 8, 3: 27, 4: 64, 5: 125, 6: 216, 7: 343, 8: 512, 9: 729, 10: 1000, 11: 1331}
Up/Down 您可以使用 in 之类的键 来回顾您在 REPL 中输入的命令的历史记录 python 。 历史记录也会持续到下一个会话,因此您可以退出 ipython 并返回(或在 v2/3 之间切换)并且历史记录仍然存在。 用于 Ctrl + D 退出。
安装 Python 库
apt
一些 Python 包可以在 Raspberry Pi OS 档案中找到,并且可以使用 apt 安装,例如:
sudo apt update sudo apt install python-picamera
这是一种更可取的安装方法,因为这意味着您安装的模块可以使用常用的 sudo apt update 和 sudo apt full-upgrade 命令轻松保持最新状态。
pip
并非所有 Python 包都可在 Raspberry Pi OS 存档中使用,而且这些包有时可能已过时。 如果在 Raspberry Pi OS 存档中找不到合适的版本,可以从 Python 包索引 (称为 PyPI)安装包。
为此,请安装 pip:
sudo apt install python3-pip
然后使用以下命令安装 Python 包(例如 simplejson ) pip3 :
sudo pip3 install simplejson
piwheels
官方 Python 包索引 (PyPI) 托管包维护者上传的文件。 某些软件包需要编译(编译 C/C++ 或类似代码)才能安装它们,这可能是一项耗时的任务,尤其是在单核 Raspberry Pi 1 或 Raspberry Pi Zero 上。
piwheels 是一项服务,提供可在 Raspberry Pi 上使用的 预编译包(称为 Python wheels)。 Raspberry Pi OS 已预先配置为使用 piwheels 进行 pip。 在www.piwheels.org 上阅读有关 piwheels 项目的更多信息 。
GPIO 和 40 针接头
Raspberry Pi 的一个强大功能是电路板顶部边缘的一排 GPIO(通用输入/输出)引脚。 当前所有 Raspberry Pi 板上都有一个 40 针 GPIO 接头(在 Raspberry Pi Zero、Raspberry Pi Zero W 和 Raspberry Pi Zero 2 W 上未安装)。 在 Raspberry Pi 1 Model B+(2014 年)之前,电路板包含一个较短的 26 针接头。
任何 GPIO 引脚都可以(在软件中)指定为输入或输出引脚,并用于广泛的用途。
黄色:GPIO,黑色:负级,橙色3.3v电源,红色5v电源,白色:仅限高级使用 GPIO表:
BCM | wPi | Name | Model | V | Physical | V | Mode | Name | wPi | BCM | |
---|---|---|---|---|---|---|---|---|---|---|---|
3.3v |
1 |
2 |
5v |
||||||||
2 |
8 |
SDA.1 |
IN |
1 |
3 |
4 |
5v |
||||
3 |
9 |
SCL.1 |
IN |
1 |
5 |
6 |
0v |
||||
4 |
7 |
GPIO. 7 |
IN |
1 |
7 |
8 |
1 |
ALT0 |
TxD |
15 |
14 |
0v |
9 |
10 |
1 |
ALT0 |
RxD |
16 |
15 |
||||
17 |
0 |
GPIO. 0 |
IN |
0 |
11 |
12 |
0 |
IN |
GPIO. 1 |
1 |
18 |
27 |
2 |
GPIO. 2 |
IN |
0 |
13 |
14 |
0v |
||||
22 |
3 |
GPIO. 3 |
IN |
0 |
15 |
16 |
0 |
IN |
GPIO. 4 |
4 |
23 |
3.3v |
17 |
18 |
0 |
IN |
GPIO. 5 |
5 |
24 |
||||
10 |
12 |
MOSI |
IN |
0 |
19 |
20 |
0v |
||||
9 |
13 |
MISO |
IN |
0 |
21 |
22 |
0 |
IN |
GPIO. 6 |
6 |
25 |
11 |
14 |
SCLK |
IN |
0 |
23 |
24 |
1 |
IN |
CE0 |
10 |
8 |
0v |
25 |
26 |
1 |
IN |
CE1 |
11 |
7 |
||||
0 |
30 |
SDA.0 |
IN |
1 |
27 |
28 |
1 |
IN |
SCL.0 |
31 |
1 |
5 |
21 |
GPIO.21 |
IN |
1 |
29 |
30 |
0v |
||||
6 |
22 |
GPIO.22 |
IN |
1 |
31 |
32 |
0 |
IN |
GPIO.26 |
26 |
12 |
13 |
23 |
GPIO.23 |
IN |
0 |
33 |
34 |
0v |
||||
19 |
24 |
GPIO.24 |
IN |
0 |
35 |
36 |
0 |
IN |
GPIO.27 |
27 |
16 |
26 |
25 |
GPIO.25 |
IN |
0 |
37 |
38 |
0 |
IN |
GPIO.28 |
28 |
20 |
0v |
39 |
40 |
0 |
IN |
GPIO.29 |
29 |
21 |
笔记 | GPIO管脚的编号不是按数字顺序排列的; 板上有 GPIO 引脚 0 和 1(物理引脚 27 和 28),但保留用于高级用途(见下文)。 |
电压
板上有两个 5V 引脚和两个 3.3V 引脚,以及一些不可配置的接地引脚 (0V)。 其余引脚均为通用 3.3V 引脚,这意味着输出设置为 3.3V,输入可耐受 3.3V。
输出
指定为输出引脚的 GPIO 引脚可以设置为高电平 (3.3V) 或低电平 (0V)。
输入
指定为输入引脚的 GPIO 引脚可以读取为高电平 (3.3V) 或低电平 (0V)。 这通过使用内部上拉或下拉电阻器变得更容易。 引脚 GPIO2 和 GPIO3 具有固定的上拉电阻,但对于其他引脚,可以在软件中进行配置。
更多的
除了简单的输入和输出设备外,GPIO 引脚还可以与多种替代功能一起使用,有些在所有引脚上可用,有些在特定引脚上可用。
PWM(脉宽调制)
软件 PWM 在所有引脚上可用
GPIO12、GPIO13、GPIO18、GPIO19 上提供硬件 PWM
SPI
SPI0: MOSI (GPIO10); MISO (GPIO9); SCLK (GPIO11); CE0 (GPIO8), CE1 (GPIO7)
SPI1: MOSI (GPIO20); MISO (GPIO19); SCLK (GPIO21); CE0 (GPIO18); CE1 (GPIO17); CE2 (GPIO16)
I2C
数据:(GPIO2); 时钟 (GPIO3)
EEPROM数据:(GPIO0); EEPROM 时钟 (GPIO1)
串行
TX(GPIO14); 接收(GPIO15)
GPIO 引出线
通过打开终端窗口并运行命令,可以在 Raspberry Pi 上访问方便的参考 pinout 。 该工具由 GPIO Zero Python 库提供,该库默认安装在 Raspberry Pi OS 桌面映像上,但不安装在 Raspberry Pi OS Lite 上。
有关 GPIO 引脚的高级功能的更多详细信息,请参阅 gadgetoid 的 交互式引脚图
警告 | 虽然将简单的组件连接到 GPIO 引脚是非常安全的,但重要的是要小心接线方式。 LED 应该有电阻器来限制通过它们的电流。 不要将 5V 用于 3.3V 组件。 不要将电机直接连接到 GPIO 引脚,而是使用 H 桥电路或电机控制器板 。 |
权限
为了使用 GPIO 端口,您的用户必须是该 gpio 组的成员。 该 pi 用户默认为会员,其他用户需手动添加。
sudo usermod -a -G gpio <username>
Python中的GPIO
使用 GPIO Zero 库可以轻松开始使用 Python 控制 GPIO 设备。 该库在 gpiozero.readthedocs.io 上进行了全面记录。
引领
要控制连接到 GPIO17 的 LED,您可以使用以下代码:
from gpiozero import LED from time import sleep led = LED(17) while True: led.on() sleep(1) led.off() sleep(1)
在像 Thonny 这样的 IDE 中运行它,LED 会反复闪烁。
LED 方法包括 on() 、 off() 、 toggle() 和 blink() 。
按钮
要读取连接到 GPIO2 的按钮的状态,可以使用以下代码:
from gpiozero import Button from time import sleep button = Button(2) while True: if button.is_pressed: print("Pressed") else: print("Released") sleep(1)
按钮功能包括属性 is_pressed 和 is_held ; 回调 when_pressed , when_released , 和 when_held ; 和方法 wait_for_press() 和 wait_for_release 。
按钮 + LED
要将 LED 和按钮连接在一起,您可以使用以下代码:
from gpiozero import LED, Button led = LED(17) button = Button(2) while True: if button.is_pressed: led.on() else: led.off()
或者:
from gpiozero import LED, Button led = LED(17) button = Button(2) while True: button.wait_for_press() led.on() button.wait_for_release() led.off()
或者:
from gpiozero import LED, Button led = LED(17) button = Button(2) button.when_pressed = led.on button.when_released = led.off