树莓派是一款迷你、经济实惠的微型计算机,广受编程和硬件爱好者欢迎。不仅因为其便捷、功能强大,更因其专有的GPIO接口,使其在各种硬件项目中变得不可或缺。本文将介绍一下树莓派系统的烧录,以及GPIO的简单使用,文章使用GPT4结合笔者个人经历及相关资料完成,如有错误欢迎指正。
1. 树莓派的系统烧录
要使用树莓派,首先需要向SD卡烧录一个操作系统。烧录是将操作系统写入到SD卡的过程,这样我们的树莓派才能正常启动。树莓派支持许多不同的系统,并且开源社区为其提供了丰富的选择(Raspberry Pi OS,Ubuntu core,Kali等),但在此我们主要介绍官方提供的Raspberry Pi OS。Raspberry Pi OS是基于Debian的操作系统,经过优化以适应树莓派的硬件,并为用户提供了友好的界面和丰富的功能。 在之前的Raspbian版本中,系统默认配置了名为“pi”的用户(密码为:raspberry)。但随着Raspberry Pi OS Bullseye的推出,官方已经取消了此默认用户设置(官方表示这是为了提升系统的安全性,参考:官方资料)。这为那些没有显示屏幕并希望开机后直接使用ssh的用户带来了一些不便,因为他们现在必须通过官方的安装器来首先配置用户。接下来,我们将介绍两种烧录系统的方法。对于没有显示屏幕的用户,建议选择第二种方法。而对于有显示屏幕的用户,两种方式均可,进入系统可以通过图形化界面配置。
方式1: Win32DiskImager
前往官方网站下载需要的Raspberry Pi系统镜像。 连接显示器的用户请选择“with desktop”的版本;而没有显示器的用户请选择“(legacy)”版本。(本文针对小白用户,因此暂时不会介绍没有桌面的Lite版本)
使用WinRAR或其他压缩软件解压。
插入SD卡,确保计算机可以识别,并且进行格式化。
打开Win32DiskImager软件,选择解压后的.img系统镜像。
在软件中选择对应的SD卡。
点击“写入”开始烧录过程。完成后,将SD卡插入树莓派。
树莓派连接显示器,通电,耐心等待一会儿后就会进入系统配置的引导,按照提示设置用户名与密码
方式二:官方安装器(Raspberry Pi Imager)
下载并安装Raspberry Pi Imager。
启动软件,点击“选择OS”。
选择需要的操作系统版本,可以直接选择程序推荐的os。
选择“选择SD卡”,确保SD卡被选中。
这时点击右下角的齿轮,可以设置用户名与密码,也可配置无线网络WLAN(有显示器的用户可以跳过,这样会像方式一中的第7步一样,在第一次进入系统时,由系统引导进行配置)
点击“写入”。完成后,将SD卡插入树莓派,后续步骤与方式一相同。
2. GPIO介绍及控制方法
GPIO(General Purpose Input/Output)是树莓派的一大特色,用于读取和控制各种电子设备。这些引脚包含了12个电源类的接口(+5V,+3V3,GND),其余GPIO端口可以通过编程控制,从而达到控制外设的可能。
在程序中要控制GPIO,就需要知道它在程序中是如何编号的,引脚编码有两种主流方式:BCM 和 WPI。(只要了解有不同编号方式即可,修改网络上提供的示例程序时,注意观察程序究竟使用了哪种编号方式,防止程序与实际连线不匹配)
- BCM (Broadcom SOC channel) :树莓派的核心是 Broadcom 的 SOC(System On a Chip)。BCM 编码方式直接对应于这个芯片上的引脚编号。这种方式更接近硬件层面,为了硬件设计或与其他基于Broadcom芯片的系统的交互提供了便利。当你查看树莓派的官方文档或一些硬件级别的指南时,通常会看到这种编号方式。
- WPI (WiringPi Pin) :WiringPi 是专为树莓派设计的 GPIO 接口库。WPI 编码方式是该库中定义的一种逻辑结构,意在为程序员提供一个更简洁、连续的引脚编号系统。这对于那些可能对具体硬件实现不太关心,但希望能够快速、简便地进行 GPIO 编程的开发者来说,是非常有用的。
这两种编码方式的存在反映了不同的需求和焦点:BCM 更偏向于硬件和官方标准,而 WPI 则更偏向于为开发者提供方便。具体编码的表格如下图所示,使用时进行查询即可。(引用自树莓派的GPIO控制 - 知乎 (zhihu.com))
3. GPIO编程案例
下面将提供一个树莓派控制LED灯闪烁的示例,示例比较简单,程序很通俗,但能很好的提供一个GPIO编程的初步认识。
硬件连线方式:
所需材料:
- 树莓派
- LED灯
- 220Ω 电阻
- 杜邦线
连线步骤:
- 把LED灯的长腿(阳极)连接到220Ω电阻的一端。
- 把电阻的另一端连接到树莓派的GPIO引脚(比如GPIO17,BCM编码)。
- 把LED灯的短腿(阴极)连接到树莓派的GND引脚。
Python 示例(使用 RPi.GPIO):
首先,你需要确保已经安装了 RPi.GPIO
库。如果没有,可以通过以下命令安装:
pip install RPi.GPIO
以下是控制LED灯的Python代码,代码的原理就是通过16行和20行设置对应GPIO端口的高低电平来实现控制LED亮灭:
import RPi.GPIO as GPIO
import time
# 设置引脚编码方式为BCM
GPIO.setmode(GPIO.BCM)
# 定义我们连接LED的引脚
LED_PIN = 17
# 设置LED_PIN为输出模式
GPIO.setup(LED_PIN, GPIO.OUT)
try:
while True:
# LED灯亮
GPIO.output(LED_PIN, GPIO.HIGH)
time.sleep(1) # 持续1秒
# LED灯熄灭
GPIO.output(LED_PIN, GPIO.LOW)
time.sleep(1) # 持续1秒
except KeyboardInterrupt:
GPIO.cleanup() # 清除GPIO状态,释放资源
C 示例(使用 WiringPi 库):
首先,你需要确保已经安装了 WiringPi
库。可以通过以下命令安装:
sudo apt-get install wiringpi
以下是控制LED灯的C代码:
#include <wiringPi.h>
#include <stdio.h>
#include <unistd.h>
#define LED_PIN 0 // 使用WiringPi引脚编号,对应于BCM的GPIO17
int main(void) {
if (wiringPiSetup() == -1) { // 初始化WiringPi
printf("WiringPi setup failed!\n");
return -1;
}
pinMode(LED_PIN, OUTPUT); // 设置LED_PIN为输出模式
while (1) {
digitalWrite(LED_PIN, HIGH); // LED灯亮
sleep(1); // 持续1秒
digitalWrite(LED_PIN, LOW); // LED灯熄灭
sleep(1); // 持续1秒
}
return 0;
}
为了编译和运行C代码, 使用以下命令编译及运行:
gcc -o led_blink led_blink.c -lwiringPi
sudo ./led_blink
注意,使用GPIO通常需要超级用户权限,所以使用sudo
运行你的程序。
树莓派为爱好者打开了一个崭新的世界,无论是软件开发还是硬件探索,都有着无尽的可能。希望本篇博客能帮助初学者入门,开始自己的树莓派之旅。现在网络上存在很多具体元件的编程样例,只要了解了GPIO的基础知识,通过网络搜索很快就能掌握其他硬件,编出更复杂的程序。
附录
Win32DiskImager下载链接:链接
官方系统烧录软件:链接
Raspberry Pi OS下载链接:Operating system images – Raspberry Pi