※本文最初发表于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. 本项目所需部件
Raspberry Pi 4Model B
(如果使用入门套件等套装产品,里面会包含启用所需的相关部件。)
2. Raspberry Pi和硬件的连接(GPIO)
Raspberry Pi上有很多用于硬件连接的接口,包括用于数字输入输出的GPIO和摄像头、音响等接口。通过这些接口与硬件连接,就可以制作各种各样的电子作品。
GPIO连接
Raspberry Pi主要是通过40个被称为GPIO(General Purpose Input Output)的端口与硬件进行连接,也就是Raspberry Pi左下角的1号引脚到右上角的40号引脚。通过下图所示的GPIOxx编号,可以在程序中进行指定。
各个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这款常用的温湿度传感器。
该传感器在刚刚提到的GPIO中,也是使用I2C通信方式。为此,我们先需要通过Raspberry Pi的配置工具raspi-config来启用I2C。具体的做法就是在raspi-config中选择“Interfacing Options”,然后选择“Enable I2C”。
在实际进行连接时,请参照引脚分配的图片和下表,连接BME280和Raspberry Pi的GPIO。
BME280引脚 (左起) | Raspberry Pi GPIO |
Vio | 3.3V |
Vcore | NA(无连接) |
GND | GND |
CSB | 3.3V |
SDI | GPIO2 |
SCK | GPIO3 |
SDO | GND |
传感器和Raspberry Pi连接完成之后,为了操控传感器,需要安装几个I2C库。安装完成后,我们再通过命令,确认连接的传感器是否可以使用。
$ sudo i2cdetect -y 1
运行I2C Detect命令后,如下图所示,确认可以通过BME280的默认地址0x76进行通信。
确认连接正常后,因为BME280有相应的示例程序,所以我们来试用一下。
$ sudo pip install smbus2
$ python BME280/Python27/bme280_sample.py
运行该程序,轻轻松松地就得到了温度、湿度、气压的相应数值!
4. 点亮LED(NeoPixel)
通过使用GPIO的数字输入输出,能够正常获取传感器的测量数值之后,我们接下来试一下其他的硬件。在本项目中,我用的是LED中可以发出多色光的NeoPixel这款产品。该产品只要连接三根电线,就能让连接在一起的LED发光,而且该产品还有对应的库文件,作为灯饰使用不仅非常方便快捷,装饰效果也非常亮眼。
这款NeoPixel是由16颗LED连在一起的环状产品。它背面有三个连接端口,我们需要在端口处用焊上电线,用来连接Raspberry Pi。在进行连接时,只需要连接Raspberry Pi的电源正、电源负和输入引脚这三个引脚即可。请参考下表进行接线。
NeoPixel (顺时针方向) |
Raspberry PiGPIO |
Input | GPIO18 (黄色) |
5V DC | 5V (橙色) |
Ground | GND (黑色) |
接着,我们参照Adafruit 网站的提示,进行库的安装。
该网页上还提供了示例程序“neopixel_simpletest.py”,该程序也需要下载。下载完成后,打开该程序,对下述部分进行修改,这样才能用在Raspberry Pi上。
# pixel_pin = board.NEOPIXEL #注释掉
pixel_pin = board.D18 #取消注释(启用D18)
num_pixels = 16 #这次用的是16-LED neopixel环,所以需要对它进行指定
然后,使用python3运行修改之后的程序。此时需要注意的是,程序运行有权限要求,需要用sudo运行。
使用该示例程序时,LED会先后亮R(红)、G(绿)、B(蓝)这三种颜色,再变成旋转的霓虹色,看起来非常炫酷。
5. LED和传感器联动工作
接下来是最后一个环节,我们要让该LED(NeoPixel)根据传感器测量出来的数值,改变发光方式。具体而言,就是要根据房间内的温度和湿度,改变NeoPixel的颜色。我们先将BME280和NeoPixel都安装到Raspberry Pi上,然后把它们放入盒子等容器中。
在程序方面,我们设定为当室温低于15℃时发蓝光,表示室内“寒冷!”;当温度处于15~25℃之间时发绿光,表示室内温度“适宜!”;当湿度达到70%以上时发红光,表示室内“闷热!”。
我们先复制刚刚使用的BME280示例程序,并创建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运行该程序。
这样,如果室内温度过低,就会亮蓝光。
寒冷状态
另外,当我们通过向传感器吹气等方式改变室内温度或湿度时,LED的发光颜色也会发生相应的变化。
舒适状态(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,挑战基础的电子作品制作!(本文)