Skip to content

「树莓派」树莓派烧录及GPIO使用方法

Published at:

树莓派是一款迷你、经济实惠的微型计算机,广受编程和硬件爱好者欢迎。不仅因为其便捷、功能强大,更因其专有的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

  1. 前往官方网站下载需要的Raspberry Pi系统镜像。 连接显示器的用户请选择“with desktop”的版本;而没有显示器的用户请选择“(legacy)”版本。(本文针对小白用户,因此暂时不会介绍没有桌面的Lite版本)image.png

    image(1).png

  2. 使用WinRAR或其他压缩软件解压。

  3. 插入SD卡,确保计算机可以识别,并且进行格式化。

  4. 打开Win32DiskImager软件,选择解压后的.img系统镜像。

  5. 在软件中选择对应的SD卡。

  6. 点击“写入”开始烧录过程。完成后,将SD卡插入树莓派。

  7. 树莓派连接显示器,通电,耐心等待一会儿后就会进入系统配置的引导,按照提示设置用户名与密码

    image(2).png

方式二:官方安装器(Raspberry Pi Imager)

  1. 下载并安装Raspberry Pi Imager。

  2. 启动软件,点击“选择OS”。

  3. 选择需要的操作系统版本,可以直接选择程序推荐的os。

  4. 选择“选择SD卡”,确保SD卡被选中。

  5. 这时点击右下角的齿轮,可以设置用户名与密码,也可配置无线网络WLAN(有显示器的用户可以跳过,这样会像方式一中的第7步一样,在第一次进入系统时,由系统引导进行配置)

    Raspberry Pi OS

  6. 点击“写入”。完成后,将SD卡插入树莓派,后续步骤与方式一相同。

2. GPIO介绍及控制方法

  GPIO(General Purpose Input/Output)是树莓派的一大特色,用于读取和控制各种电子设备。这些引脚包含了12个电源类的接口(+5V,+3V3,GND),其余GPIO端口可以通过编程控制,从而达到控制外设的可能。

  在程序中要控制GPIO,就需要知道它在程序中是如何编号的,引脚编码有两种主流方式:BCM 和 WPI。(只要了解有不同编号方式即可,修改网络上提供的示例程序时,注意观察程序究竟使用了哪种编号方式,防止程序与实际连线不匹配)

  1. BCM (Broadcom SOC channel) :树莓派的核心是 Broadcom 的 SOC(System On a Chip)。BCM 编码方式直接对应于这个芯片上的引脚编号。这种方式更接近硬件层面,为了硬件设计或与其他基于Broadcom芯片的系统的交互提供了便利。当你查看树莓派的官方文档或一些硬件级别的指南时,通常会看到这种编号方式。
  2. WPI (WiringPi Pin) :WiringPi 是专为树莓派设计的 GPIO 接口库。WPI 编码方式是该库中定义的一种逻辑结构,意在为程序员提供一个更简洁、连续的引脚编号系统。这对于那些可能对具体硬件实现不太关心,但希望能够快速、简便地进行 GPIO 编程的开发者来说,是非常有用的。

  这两种编码方式的存在反映了不同的需求和焦点:BCM 更偏向于硬件和官方标准,而 WPI 则更偏向于为开发者提供方便。具体编码的表格如下图所示,使用时进行查询即可。(引用自树莓派的GPIO控制 - 知乎 (zhihu.com)

3. GPIO编程案例

  下面将提供一个树莓派控制LED灯闪烁的示例,示例比较简单,程序很通俗,但能很好的提供一个GPIO编程的初步认识。

硬件连线方式:

所需材料:

  1. 树莓派
  2. LED灯
  3. 220Ω 电阻
  4. 杜邦线

连线步骤:

  1. 把LED灯的长腿(阳极)连接到220Ω电阻的一端。
  2. 把电阻的另一端连接到树莓派的GPIO引脚(比如GPIO17,BCM编码)。
  3. 把LED灯的短腿(阴极)连接到树莓派的GND引脚。

Python 示例(使用 RPi.GPIO):

  首先,你需要确保已经安装了 RPi.GPIO 库。如果没有,可以通过以下命令安装:

bash
pip install RPi.GPIO

  以下是控制LED灯的Python代码,代码的原理就是通过16行和20行设置对应GPIO端口的高低电平来实现控制LED亮灭:

python
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 库。可以通过以下命令安装:

bash
sudo apt-get install wiringpi

  以下是控制LED灯的C代码:

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代码, 使用以下命令编译及运行:

bash
gcc -o led_blink led_blink.c -lwiringPi
sudo ./led_blink

  注意,使用GPIO通常需要超级用户权限,所以使用sudo运行你的程序。

  树莓派为爱好者打开了一个崭新的世界,无论是软件开发还是硬件探索,都有着无尽的可能。希望本篇博客能帮助初学者入门,开始自己的树莓派之旅。现在网络上存在很多具体元件的编程样例,只要了解了GPIO的基础知识,通过网络搜索很快就能掌握其他硬件,编出更复杂的程序。

附录

Win32DiskImager下载链接:链接

官方系统烧录软件:链接

Raspberry Pi OS下载链接:Operating system images – Raspberry Pi