使用Raspberry Pi 4进行电子制作 入门!【第4篇】 使用Raspberry Pi 4和GPIO,挑战基础的电子作品制作!

 

※本文最初发表于2020年2月12日,对其重新编辑后于2022年3月14日再次发表。

 

第1篇:开始使用新产品“Raspberry Pi 4”!
第2篇:Raspberry Pi 4的设置!
第3篇:无头模式下熟练使用Raspberry Pi 4!

 

大家好,我是吉田!
在本系列连载中,我将使用Raspberry Pi 4 Model B(Raspberry Pi4),和各位读者朋友一起,对Raspberry Pi的设置以及电子制作的基础知识进行回顾,本篇是最终篇。

在第一篇到第3篇中,我已经给大家介绍了Raspberry Pi OS(Raspbian Buster)的安装、环境设置以及基本使用方法。在本篇中,我将使用GPIO(数据输入输出端口),连接传感器等器件,实际进行电子作品的制作。

1

目录

  1. 本项目所需部件
  2. Raspberry Pi和硬件的连接(GPIO)
  3. Raspberry Pi 4连接传感器并进行测量
  4. 点亮LED(NeoPixel)
  5. LED和传感器联动工作
  6. 总结

 

1. 本项目所需部件

Raspberry Pi 4Model B
(如果使用入门套件等套装产品,里面会包含启用所需的相关部件。)
raspberrypi04_1

BME280温湿度传感器
3

16-LED neopixel 环
4

迷你面包板
5

2. Raspberry Pi和硬件的连接(GPIO)

Raspberry Pi上有很多用于硬件连接的接口,包括用于数字输入输出的GPIO和摄像头、音响等接口。通过这些接口与硬件连接,就可以制作各种各样的电子作品。
GPIO连接
Raspberry Pi主要是通过40个被称为GPIO(General Purpose Input Output)的端口与硬件进行连接,也就是Raspberry Pi左下角的1号引脚到右上角的40号引脚。通过下图所示的GPIOxx编号,可以在程序中进行指定。

6

[GPIO引脚分配] https://www.raspberrypi.org/documentation/usage/gpio/

各个GPIO引脚的功能事先已经分配完毕,这些引脚的功能区分大致如下:

电源和GND: Raspberry Pi上事先已经指定了3.5V和5V的供电引脚各2个,除此以外,还有8个GND引脚(电压0V)。

数字输入输出: 除了上述端口之外,其他的端口都可以用于数字输入输出。具体来说,就是可以根据需要,通过GPIO2〜27来连接LED和开关等部件,进行电子作品的制作。另外,这些端口可以支持数字输入输出和PWM(模拟输出)等通信方式。

PWM:Raspberry Pi虽然原则上只能处理数字信号(0或1),但实际上也能进行伪模拟输出(电压的阶梯输出)。通过伪模拟输出,可以调节LED的亮度,也可以指定伺服电机的角度。这种控制方式叫PWM(Pulse Width Modulation),26个GPIO引脚都可以作为软件PWM使用。

除此之外,有些引脚还支持用于连接LCD显示器等设备的I2C(Inter-Integrated Circuit)标准、UART(Universal Asynchronous Receiver Transmitter)SPI(Serial Pheripheral Interface)等串行通信方式。这些引脚也是事先指定的,如果启用这些串行通信方式,则与之重复的引脚不能用作GPIO引脚。

3. Raspberry Pi 4连接传感器并进行测量

接下来,我们将Raspberry Pi 4和传感器连接,进行相应的测量。首先,我们尝试使用BME280这款常用的温湿度传感器。

7

该传感器在刚刚提到的GPIO中,也是使用I2C通信方式。为此,我们先需要通过Raspberry Pi的配置工具raspi-config来启用I2C。具体的做法就是在raspi-config中选择“Interfacing Options”,然后选择“Enable I2C”。

$ sudo raspi-config

8

在实际进行连接时,请参照引脚分配的图片和下表,连接BME280和Raspberry Pi的GPIO。

9

BME280引脚 (左起) Raspberry Pi GPIO
Vio 3.3V
Vcore NA(无连接)
GND GND
CSB 3.3V
SDI GPIO2
SCK GPIO3
SDO GND

传感器和Raspberry Pi连接完成之后,为了操控传感器,需要安装几个I2C库。安装完成后,我们再通过命令,确认连接的传感器是否可以使用。

$ sudo apt install i2c-tools python-smbus
$ sudo i2cdetect -y 1

运行I2C Detect命令后,如下图所示,确认可以通过BME280的默认地址0x76进行通信。

10

确认连接正常后,因为BME280有相应的示例程序,所以我们来试用一下。

$ sudo git clone https://github.com/SWITCHSCIENCE/BME280.git
$ sudo pip install smbus2
$ python BME280/Python27/bme280_sample.py

运行该程序,轻轻松松地就得到了温度、湿度、气压的相应数值!
11

4. 点亮LED(NeoPixel)

通过使用GPIO的数字输入输出,能够正常获取传感器的测量数值之后,我们接下来试一下其他的硬件。在本项目中,我用的是LED中可以发出多色光的NeoPixel这款产品。该产品只要连接三根电线,就能让连接在一起的LED发光,而且该产品还有对应的库文件,作为灯饰使用不仅非常方便快捷,装饰效果也非常亮眼。

12

这款NeoPixel是由16颗LED连在一起的环状产品。它背面有三个连接端口,我们需要在端口处用焊上电线,用来连接Raspberry Pi。在进行连接时,只需要连接Raspberry Pi的电源正、电源负和输入引脚这三个引脚即可。请参考下表进行接线。

13

NeoPixel
(顺时针方向)
Raspberry PiGPIO
Input GPIO18 (黄色)
5V DC 5V (橙色)
Ground GND (黑色)

接着,我们参照Adafruit 网站的提示,进行库的安装。

$ sudo pip3 install adafruit-circuitpython-neopixel

该网页上还提供了示例程序“neopixel_simpletest.py”,该程序也需要下载。下载完成后,打开该程序,对下述部分进行修改,这样才能用在Raspberry Pi上。

# pixel_pin = board.NEOPIXEL #注释掉
pixel_pin = board.D18 #取消注释(启用D18)
num_pixels = 16 #这次用的是16-LED neopixel环,所以需要对它进行指定

然后,使用python3运行修改之后的程序。此时需要注意的是,程序运行有权限要求,需要用sudo运行。

$ sudo python3 neopixel_simpletest.py

使用该示例程序时,LED会先后亮R(红)、G(绿)、B(蓝)这三种颜色,再变成旋转的霓虹色,看起来非常炫酷。

15

5. LED和传感器联动工作

接下来是最后一个环节,我们要让该LED(NeoPixel)根据传感器测量出来的数值,改变发光方式。具体而言,就是要根据房间内的温度和湿度,改变NeoPixel的颜色。我们先将BME280和NeoPixel都安装到Raspberry Pi上,然后把它们放入盒子等容器中。

16

在程序方面,我们设定为当室温低于15℃时发蓝光,表示室内“寒冷!”;当温度处于15~25℃之间时发绿光,表示室内温度“适宜!”;当湿度达到70%以上时发红光,表示室内“闷热!”。

我们先复制刚刚使用的BME280示例程序,并创建temp_led.py程序。

$ sudo cp ~/BME280/Python27/bme280_sample.py ~/Programs/temp_led.py

具体做法就是在原来的bme280_sample程序中,添加下图所示的黄色部分的内容。

#coding: utf-8
from smbus2 import SMBus
import time

import RPi.GPIO as GPIO
interrupted = False
GPIO.setwarnings(False)

import time
import board
import neopixel

pixel_pin = board.D18
num_pixels = 16
ORDER = neopixel.GRB
pixels = neopixel.NeoPixel(pixel_pin, num_pixels, brightness=0.2, auto_write=False,
                           pixel_order=ORDER)

bus_number  = 1
i2c_address = 0x76

…

setup()
get_calib_param()

if __name__ == '__main__':
        try:
            temp, press, hum = readData()
        except KeyboardInterrupt:
            pass
        if temp:
            msg = "今の室温は、" + str(round(temp,1)) + "度、湿度は、" + str(round(hum,1)) + "パーセントです!"
        if temp > 25:
            msg += "暑くないですか?"
            pixels.fill((255, 0, 0))
        elif temp < 15: msg += "寒いですね!" pixels.fill((0, 0, 255)) elif hum > 70:
            msg += "蒸し蒸ししますね"
            pixels.fill((255, 0, 0))
        else:
            msg += "快適です!"
            pixels.fill((0, 255, 0))
        pixels.show()
        print (msg)
        time.sleep(3)
        pixels.fill((0, 0, 0))
        pixels.show()


bme280_sample.ino hosted with ❤ by GitHub然后,通过sudo python3运行该程序。

python3

这样,如果室内温度过低,就会亮蓝光。

寒冷状态
寒冷状态

 

另外,当我们通过向传感器吹气等方式改变室内温度或湿度时,LED的发光颜色也会发生相应的变化。

舒适状态(15℃– 25℃,湿度70%以下)
舒适状态(15℃– 25℃,湿度70%以下)

温度、湿度过高
温度、湿度过高

6. 总结

本文是介绍Raspberry Pi 4的系列连载中的第4篇,在本篇中,我们使用传感器等器件,完成了一款电子作品的制作。大家应该也学到了传感器的连接、LED(NeoPixel)的使用等基础知识吧。

Raspberry Pi4经过增加内存容量等产品升级后,已经能够适用于高性能的处理等应用场景,不过本文仅仅介绍了很基础的电子制作方法。

如果各位读者朋友读了本系列连载文章之后,对Raspberry Pi和电子制作已经产生了兴趣,建议大家一定要使用Raspberry Pi4来挑战更为有趣的电子作品的制作。

最后,祝愿大家在Raspberry Pi的陪伴下,充分感受到电子制作的乐趣!

 

 

本系列连载的内容

第1篇:开始使用新产品“Raspberry Pi 4”!
第2篇:Raspberry Pi 4的设置!
第3篇:无头模式下熟练使用Raspberry Pi 4!
第4篇:使用Raspberry Pi 4和GPIO,挑战基础的电子作品制作!(本文)

アバター画像

吉田 显一(Yoshiken)

在普通公司工作的上班族,非常喜欢创作的周末创客,出版了电子书MESHBOOK,平时也写写博客。

http://blog.ktrips.net

使用Raspberry Pi 4进行电子制作 入门! 【第3篇】无头模式下熟练使用Raspberry Pi 4!

自制自动驾驶小车!创客Chris Anderson正在研发的DIY AI自动驾驶小车是?

相关文章

  1. basic-of-raspberrypi_01_02-1

    Raspberry Pi使用前的准备【第1篇】Raspberry Pi的基础知识

  2. raspberrypi04_1

    使用Raspberry Pi 4进行电子制作 入门! 【第3篇】无头模式下熟练使用Raspberry…

  3. raspberrypi04_1

    使用Raspberry Pi 4进行电子制作的入门教程! 【第2篇】Raspberry Pi 4的设…

  4. raspberrypi04_1

    使用Raspberry Pi 4进行电子制作的入门教程! 第1篇: 开始使用新产品“Raspberr…

  5. i06_4a

    制作一款图形处理装置,用数字控制自然力

  6. ito_05

    制作卡通角色随风摆动就能绘制图形作品的装置

  7. i04-8

    使用传感器轻松制作有趣的项目

  8. what-is-raspberrypi_01_2

    从历史到使用方法的全面了解!电子作品创作不可或缺的“Raspberry Pi(树莓派)”究竟是何方神…

Raspberry Pi初学者指南

基础知识

EMC


TECH INFO

  • Sugiken老师的电机驱动器课堂
  • 重点必看
  • 技术分享
  • Arduino入门指南
  • Raspberry Pi初学者指南
  • 技术动态
PAGE TOP