Raspberry Pi 系统

介绍

Raspberry Pi OS是基于Debian的免费操作系统,针对Raspberry Pi硬件进行了优化,是Raspberry Pi上正常使用的推荐操作系统。该操作系统附带超过 35,000 个软件包:预编译的软件与系统捆绑在一起,便于安装在 Raspberry Pi 上。 Raspberry Pi OS 正在积极开发中,重点是提高 Raspberry Pi 上尽可能多的 Debian 软件包的稳定性和性能。

更新和升级Raspberry Pi操作系统

保持你的Raspberry Pi版本最新是很重要的。第一个也可能是最重要的原因是安全性。运行Raspberry Pi OS的设备包含数百万行您所依赖的代码。随着时间的推移,这数百万行代码将暴露众所周知的漏洞,这些漏洞记录在 公开可用的数据库 中,这意味着它们很容易被利用。作为Raspberry Pi操作系统的用户,减轻这些攻击的唯一方法是保持您的软件最新,因为上游存储库会密切跟踪CVE并尝试快速减轻它们。

与第一个原因相关的第二个原因是,你在设备上运行的软件肯定有缺陷。有些bug是CVE,但是这些bug也可能会影响预期的功能,而与安全性无关。通过让你的软件保持最新,就降低了遇到这些错误的几率。

使用APT

管理软件安装、升级和删除的最简单方法是使用 Debian 的 apt(高级打包工具)。要在Raspberry Pi操作系统中更新软件,您可以在终端窗口使用该工具

定期升级系统

APT 将Raspberry Pi上的软件源列表保存在一个文件中。在安装软件之前,应使用 apt update 更新软件包列表。继续打开终端窗口并键入 /etc/apt/sources.list

sudo apt update

接下来,使用以下命令将所有已安装的软件包升级到最新版本:

sudo apt full-upgrade

请注意, full-upgrade 优先于 upgrade ,因为它还会选择任何可能已进行的依赖关系更改。 一般来说,定期执行此操作将使您的安装与您正在使用的特定主要 Raspberry Pi OS 版本(例如 Buster)保持最新状态。它不会从一个主要版本更新到另一个主要版本,例如,Stretch to Buster 或 Buster 到Bullseye。 但是,Raspberry Pi OS 映像中偶尔会进行需要手动干预的更改,例如新引入的软件包。这些不会随升级一起安装,因为此命令仅更新已安装的软件包。 注意 内核和固件是作为 Debian 软件包安装,所以在使用上面的过程时也会得到更新。这些软件包很少更新,并且是在大量测试后更新的。 如果将现有 SD 卡移动到新的Raspberry Pi型号(例如Raspberry PiZero 2 W),您可能还需要先使用上述说明更新内核和固件。

空间不足

运行 sudo apt full-upgrade 时,会显示将下载多少数据占用SD卡上多少空间。用 df -h 检查您是否有足够的可用磁盘空间,apt 不会主动执行此操作。另请注意,下载的软件包文件( .deb 文件)保存在 /var/cache/apt/archives 中。您可以使用 sudo apt clean 删除这些内容以释放空间(在较旧版本中使用`sudo apt-get clean`)。

从以前的操作系统版本升级

Warning
升级现有映像是可能的,但不能保证在任何情况下都能正常工作,我们不建议这样做。如果您确实希望尝试升级操作系统版本,我们强烈建议您先进行备份 — 对于更新失败造成的数据丢失,我们不承担任何责任。 最新版本的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 ,因为 yes 是默认操作)将允许安装。这可以通过添加 -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操作系统内核和 VideoCore 固件更新到最新的预发布版本。

Warning
软件的预发布版本不保证正常工作。除非Raspberry Pi工程师建议,否则您不应在任何系统上使用 rpi-update 。它可能会使您的系统不可靠甚至完全损坏。它不应用作任何常规更新过程的一部分。

rpi-update 脚本最初由Hexxeh编写,但现在由Raspberry Pi工程师支持。脚本源位于 rpi-update存储库中

它的作用

rpi-update 将下载Linux内核的最新预发布版本,其匹配的模块,设备树文件以及最新版本的VideoCore固件。然后,它会将这些文件安装到 SD 卡上的相关位置,覆盖任何以前的版本。

rpi-update使用的所有源数据都来自 rpi-firmware存储库。此存储库仅包含来自 官方固件存储库的数据子集,因为并不需要该存储库中的所有数据。

运行 rpi-update

如果您确定需要使用 rpi-update ,建议先备份当前系统,因为运行 rpi-update 可能会导致系统无法启动。

rpi-update 需要以根用户身份运行。更新完成后,您将需要重新启动。

sudo rpi-update
sudo reboot

它在 rpi 更新存储库 中记录了许多选项。

如何回到稳定版本

如果您已经完成了 rpi-update 但是没有按您希望的方式工作,如果您的 Raspberry Pi 仍然可以启动,您可以使用以下命令返回到稳定版本:

sudo apt-get update
sudo apt install --reinstall libraspberrypi0 libraspberrypi-{bin,dev,doc} raspberrypi-bootloader raspberrypi-kernel

您需要重启您的Raspberry Pi使这些改变生效。

播放音频和视频

Warning

以下文档涉及Raspberry Pi OS Buster和早期版本。OMXPlayer 已在 最新的操作系统 版本中弃用。如果您正在使用Bullseye,VLC现在是推荐的替代方案。

在Raspberry Pi上播放音频和视频的最简单方法是使用已安装的OMXPlayer应用程序。

这是硬件加速的,可以播放许多流行的音频和视频文件格式。OMXPlayer使用OpenMAX(omx)硬件加速接口(API),这是Raspberry Pi官方支持的媒体API。OMXPlayer由Kodi项目的Edgar Hucek开发。

OMXPlayer应用程序

最简单的命令行是 omxplayer <name of media file>. 媒体文件可以是音频和/或视频。对于以下示例,我们使用了包含在标准Raspberry Pi操作系统中的 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触摸屏, 并且想要将其用于视频输出,请使用显示选项指定要使用的显示器。 使用n为5是HDMI ,n为4是触摸屏。使用Raspberry Pi4,您有两种HDMI输出选项。 对于 n 为2是HDMI0,对于 n 为7是HDMI1。

omxplayer --display n /opt/vc/src/hello_pi/hello_video/test.h264

如何播放音频

要播放 .MP3 文件,请使用以下 cd 命令导航到 .mp3 终端中文件的位置,然后键入以下命令:

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,因此需要通过`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 命令行中添加 --fullscreen 项。 此示例命令转换 video.h264 为容器化的 video.mp4 以 30 fps

ffmpeg -r 30 -i video.h264 -c:v copy video.mp4

播放期间的选项

播放期间有许多选项可用,通过按适当的键来操作。并非所有选项在所有文件上都可用。可以使用 omxplayer --keys 显示键绑定列表:

    1           decrease speed
    2           increase speed
    <           rewind
    >           fast forward
    z           show info
    j           previous audio stream
    k           next audio stream
    i           previous chapter
    o           next chapter
    n           previous subtitle stream
    m           next subtitle stream
    s           toggle subtitles
    w           show subtitles
    x           hide subtitles
    d           decrease subtitle delay (- 250 ms)
    f           increase subtitle delay (+ 250 ms)
    q           exit omxplayer
    p / space   pause/resume
    -           decrease volume
    + / =       increase volume
    left arrow  seek -30 seconds
    right arrow seek +30 seconds
    down arrow  seek -600 seconds
    up arrow    seek +600 seconds

后台播放

如果在没有tty(用户输入)的情况下在后台运行 omxplayer 将立即关闭,因此要成功运行,您需要使用 --no-keys 选项告诉 omxplayer 不需要任何用户输入。

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 相机模块

Note
摄像头模块的质量和可配置性远远优于标准 USB 网络摄像头。

首先,安装 fswebcam 软件包:

sudo apt install fswebcam

如果您未使用默认用户帐户 pi ,则需要将用户名添加到 video 组中,否则您将看到 'permission denied' 错误。

sudo usermod -a -G video <username>

若要检查是否已将用户正确添加到组中,请使用 groups 命令。

基础用法

输入 fswebcam 命令,后跟文件名,将使用网络摄像头拍摄照片,并保存到指定的文件名:

fswebcam image.jpg

此命令将显示以下信息:

--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
Adjusting resolution from 384x288 to 352x288.
--- Capturing frame...
Corrupt JPEG data: 2 extraneous bytes before marker 0xd4
Captured frame in 0.00 seconds.
--- Processing captured image...
Writing JPEG image to 'image.jpg'.
Basic image capture
Note
使用小的默认分辨率,会显示时间戳的横幅。

此示例中使用的网络摄像头的分辨率为 1280 x 720 ,要指定我希望以何种分辨率拍摄图像,请使用以下 -r 标志:

fswebcam -r 1280x720 image2.jpg

此命令将显示以下信息:

--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
--- Capturing frame...
Corrupt JPEG data: 1 extraneous bytes before marker 0xd5
Captured frame in 0.00 seconds.
--- Processing captured image...
Writing JPEG image to 'image2.jpg'.
Full resolution image

网络摄像头以全分辨率拍摄的照片,并显示横幅。

删除横幅

现在添加 --no-banner 标志:

fswebcam -r 1280x720 --no-banner image3.jpg

其中显示以下信息:

--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
--- Capturing frame...
Corrupt JPEG data: 2 extraneous bytes before marker 0xd6
Captured frame in 0.00 seconds.
--- Processing captured image...
Disabling banner.
Writing JPEG image to 'image3.jpg'.
Full resolution image with no banner

现在,照片以全分辨率拍摄,没有横幅

自动执行图像捕获

您可以编写一个使用网络摄像头拍照的 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

这将运行文件中的命令并给出通常的输出:

--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
--- Capturing frame...
Corrupt JPEG data: 2 extraneous bytes before marker 0xd6
Captured frame in 0.00 seconds.
--- Processing captured image...
Disabling banner.
Writing JPEG image to '/home/pi/webcam/2013-06-07_2338.jpg'.

延时拍摄

您可以使用 cron 来安排以给定的时间间隔(例如每分钟拍摄一次)拍摄照片,以拍摄延时摄影。首先打开 crontab 进行编辑:

crontab -e

这将询问您要使用的编辑器,或者在默认编辑器中打开。在编辑器中打开文件后,添加以下行以计划每分钟拍摄一次照片(参考上面的 Bash 脚本):

* * * * * /home/pi/webcam.sh 2>&1

保存并退出,您应该看到以下消息:

crontab: installing new crontab

确保您的脚本不会保存使用相同文件名拍摄的每张图片。这将每次覆盖图片。

有用的实用程序

有几个有用的命令行

tvservice

tvservice 是一个命令行应用程序,用于获取和设置有关显示器的信息,主要针对HDMI视频和音频。

键入 tvservice 本身将显示可用命令行选项的列表。

-p, --preferred

使用首选设置打开 HDMI 输出。

-o, --off

关闭显示器输出。

Note
使用此命令关闭输出电源也会破坏与显示器关联的任何帧缓冲器/dispmanx 层。这些不会在随后开机时重新建立,因此会导致空白屏幕。

更好的选择是使用 vcgencmd display_power 选项,因为这将保留任何帧缓冲,因此当显示器重新打开电源时,将返回到之前的开机状态。

-e, --explicit="Group Mode Drive"

使用指定的设置打开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="Mode Aspect [P]"

以指定 PALNTSC 模式打开标清电视(复合输出)的电源,以及指定的宽高比 4:3, 14:9, 16:9。可选 P 参数可用于指定渐进式模式。

-m, --modes=Group

其中组是 CEADMT.

显示指定组中可用的显示模式列表。

-M, --monitor

监控任何 HDMI 事件,例如拔出或连接。

-s, --status

显示显示模式的当前设置,包括模式、分辨率和频率。

-a, --audio

显示音频模式的当前设置,包括通道、采样率和样本大小。

-d, --dumpid=filename

将当前 EDID 保存到指定的文件名。然后,您可以使用 edidparser <filename> 显示成可读的形式。

-j, --json

--modes 选项结合使用时,以 JSON 格式显示模式信息。

-n, --name

从 EDID 数据中提取显示名称并显示它。

-l, --list

列出所有连接的显示器及其显示 ID。

-v, --device=display

指定要使用的设备的 ID;有关可用 ID,请参阅 --list 的输出。

vcgencmd

 `vcgencmd` 工具用于从Raspberry Pi上的VideoCore GPU输出信息。您可以在 https://github.com/raspberrypi/userland/tree/master/host_applications/linux/apps/gencmd[Github].上找到 `vcgencmd` 实用程序的源代码。
要获取支持的所有 `vcgencmd` 命令的列表,请使用 `vcgencmd commands`下面列出了一些有用的命令及其必需的参数。

vcos

vcos 命令有两个有用的子命令:

  • version 在VideoCore上显示固件的构建日期和版本

  • log status 显示各种VideoCore固件区域的错误日志状态

version

显示 VideoCore 固件的构建日期和版本。

get_camera

显示Raspberry Pi相机的启用和检测状态: 1 表示是, 0 表示否。虽然除缩减版本外的所有固件都支持相机,但需要使用 raspi-config. 启用此支持。

get_throttled

返回系统的受限制状态。这是一个位模式 - a正在设置的位表示以下含义:

十六进制值 意义

0

0x1

检测到欠压

1

0x2

Arm频率上限

2

0x4

当前已限制

3

0x8

软件温度限制激活

16

0x10000

检测到低电压

17

0x20000

检测到arm频率达到上限

18

0x40000

限制

19

0x80000

软件温度限制中

measure_temp

返回由其内部温度传感器测量的 SoC 温度; 在Raspberry Pi 4 上, measure_temp pmic 返回 PMIC 的温度。

measure_clock [clock]

这将返回指定时钟的当前频率。选项包括:

clock 描述

arm

ARM 核心

core

GPU 核心

h264

H.264 block

isp

图像传感器管道

v3d

3D 块

uart

UART

pwm

PWM 模块(模拟音频输出)

emmc

SD卡接口

pixel

像素

vec

模拟视频编码器

hdmi

HDMI

dpi

显示并行接口

vcgencmd measure_clock arm

measure_volts [block]

显示特定模块使用的当前电压。

block 描述

core

VC4 内核电压

sdram_c

SDRAM 核心电压

sdram_i

SDRAM I/O 电压

sdram_p

SDRAM物理电压

otp_dump

显示 SoC 内 OTP(一次性可编程)存储器的内容。这些是 32 位值,索引范围为 8 到 64。有关更多详细信息,请参阅 OTP 页面

get_config [configuration item|int|str]

显示指定配置设置的值:或者,指定 int(整数)或 str(字符串)以查看给定类型的所有配置项。例如:

vcgencmd get_config total_mem

返回设备上的总内存(以 MB 为单位)。

get_mem type

报告 ARM 和 GPU 可寻址的内存量。vcgencmd get_mem arm 显示 ARM 可寻址内存的使用量; vcgencmd get_mem gpu 以显示 GPU 可寻址内存的使用量。请注意,在内存超过 1GB 的设备上,arm 参数将始终返回 1GB 减去 gpu 内存值,因为 GPU 固件仅知道前 1GB 内存。要获取设备上总内存的准确报告,请参阅配置项 total_memget_config 部分。

codec_enabled [type]

报告是否启用了指定的编解码器类型。可能的类型选项是AGIF,FLAC,H263,H264,MJPA,MJPB,MJPG,MPG2,MPG4,MVC0,PCM,THRA,VORB,VP6,VP8,WMV9,WVC1。突出显示的那些目前需要付费许可证(有关更多信息,请参阅 config.txt部分 ),但在 Raspberry Pi 4 和 400 上除外,在这些硬件编解码器中,这些硬件编解码器优先于软件解码被禁用,软件解码不需要许可证。请注意,由于Raspberry Pi 4和400上的H.265硬件块不是VideoCore GPU的一部分,因此无法通过此命令访问其状态。

get_lcd_info

显示任何附加显示器的分辨率和颜色深度。

mem_oom

显示有关 VideoCore 内存空间中发生的任何 OOM(内存不足)事件的统计信息。

mem_reloc_stats

显示来自视频核心上可重定位内存分配器的统计信息。

read_ring_osc

返回环形振荡器的当前速度电压和温度。

hdmi_timings

显示当前的 HDMI 设置计时。有关返回值的详细信息,请参阅 视频配置

dispmanx_list

转储当前正在显示的所有 dispmanx 项目的列表。

display_power [0 | 1 | -1] [display]

显示当前显示器电源状态,或设置显示电源状态。 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。

Display ID

主LCD

0

辅助LCD

1

HDMI 0

2

复合

3

HDMI 1

7

To determine if a specific display ID is on or off, use -1 as the first parameter.

vcgencmd display_power -1 7 将会返回0 如果显示ID7 处于关闭状态;如果显示 ID 7 打开,则返回 1;如果显示 ID 7 处于未知状态(例如未检测到),则返回 -1。

vcdbg

vcdbg 是一个应用程序,用于帮助从在ARM上运行的Linux调试VideoCore GPU。它需要以根用户身份运行。此应用程序主要用于Raspberry Pi工程师,尽管有一些命令一般用户可能会发现有用。

sudo vcdbg help 将给出可用命令的列表。

Note
仅列出了最终用户使用的选项。

version

显示来自视频核心的各种版本信息项。

log

从指定的子系统转储日志。可能的选项包括:

log 描述

msg

打印出消息日志

assert

打印出断言日志

ex

打印出异常日志

info

从日志记录标头中打印出信息

level

设置指定类别的 VCOS 日志记录级别: n|e|w|i|t

list

列出 VCOS 日志记录级别

例如,要打印出消息日志的当前内容:

vcdbg log msg

malloc

列出 VideoCore 堆中当前的所有内存分配。

pools

列出池分配器的当前状态

reloc

不带任何其他参数,列出可重定位分配器的当前状态。 sudo vcdbg reloc small 用于列出小分配。 使用 sudo vcdbg reloc stats 命令列出可重定位分配器的统计信息。

hist

与任务历史记录相关的命令。

sudo vcdbg hist gnuplot 将 gnuplot 格式的任务历史记录转储到 task.gpt 和 task.dat

GPIO 和 40-Pin引脚

Raspberry Pi的一个强大功能是电路板顶部边缘的一排GPIO(通用输入/输出)引脚。当前所有的Raspberry Pi板上都有一个40-Pin GPIO接头(在Raspberry Pi Zero、Raspberry Pi Zero W和Raspberry Pi Zero 2 W上未安装)。在Raspberry Pi 1 Model B+ (2014)之前,电路板包含一个26-Pin接头。所有主板上的GPIO接头(包括Raspberry Pi 400)的引脚间距为0.1英寸(2.54毫米)。

GPIO pins

任何GPIO引脚都可以被配置(在软件中)为输入或输出引脚,并用于多种用途。

GPIO layout
Note
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); RX (GPIO15)

GPIO 引脚排列

可以通过打开终端命令窗口并运行pinout命令来访问Raspberry Pi上的便捷参考。此工具由 GPIO Zero Python库提供,该库默认安装在Raspberry Pi OS中。

gpiozero pinout

有关 GPIO 引脚的高级功能的更多详细信息,请参见 gadgetoid 的 交互式引脚排列图

Warning
虽然将简单组件连接到 GPIO 引脚是安全的,但请务必小心连接方式。LED中具有电阻来限制通过组件的电流,请勿将 5V 用在3.3V组件上。请勿将电机直接连接到 GPIO引脚,而应使用 H 桥电路或电机控制器板

权限

如果需要使用GPIO端口,则用户必须是 gpio 组的成员。用户 pi 默认为GPIO成员,其他用户需要被添加为GPIO成员。

sudo usermod -a -G gpio <username>

Python 中的 GPIO

运用 GPIO Zero ,可以容易地通过Python 控制 GPIO 设备。 该库的完整文档位于 gpiozero.readthedocs.io 中。

LED

控制连接到 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_pressedis_held; 回调 when_pressedwhen_releasedwhen_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