锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

树莓派操作系统

时间:2022-08-28 11:30:00 桥式传感器dhm9bd10传感器dmt340

覆盆子派操作系统

  • 覆盆子派操作系统
    • 介绍
    • 更新升级树莓派操作系统
      • 使用 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  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 . 媒体文件可以是音频或视频或两者兼而有之。 对于下面的示例,我们使用了标准 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 

要检查用户是否已正确添加到组中,请使用该 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 以人类可读的形式显示数据。

-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、 MPG2 、MPG4、MVC0、PCM、THRA、VORB、VP6、VP8、 WMV9 、 WVC1 。 当前突出显示的那些需要付费许可证(有关更多信息,请参阅 此 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: 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 

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​​​​
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章