跳到主要内容

传感器与接口文档

我们通过 Python 代码来操作传感器,比如摄像头、温度传感器等。这些传感器可以帮助我们获取环境信息,从而做出相应的决策。

其中除摄像头外的传感器,我们使用的是 I2C 协议。I2C 协议是一种串行总线,可以同时连接多个设备。我们通过 I2C 协议来读取传感器的数据。相关代码必须使用sudo权限运行。

详细的调用方法可以参考末尾的接口说明文档部分,这里主要讲解一些简单的示例与注意事项。

如何调用传感器?

1. 导入模块

sudo pip3 install 'exboard>=1.0.3'

在使用函数的时候我们通过 import 关键字导入指定的模块, 或者使用 from 模块名 import 函数/类/方法名 导入:

from exboard import FlameSensor
from exboard import MQGasSensor
from exboard import PhotosensitiveSensor
from exboard import RGB
from exboard import Ultrasound
from exboard import SoundSensor
from exboard import Servos
from exboard import RotaryPotentionmeter

2. 实例化传感器

下面这段名为sensor.py的代码导入了气体、光敏、声音、超声波传感器,然后通过实例化的对象调用read方法获取传感器的数据。

注意的点是:数据的获取是通过read方法获取的,想要持续获取数据,需要使用循环。另外记得加上time.sleep,否则会出现数据获取过快看不清的情况。

sensor.py
from exboard import MQGasSensor
from exboard import PhotosensitiveSensor
from exboard import Ultrasound
from exboard import SoundSensor
import time

sensor2 = MQGasSensor()
sensor3 = PhotosensitiveSensor()
sound4 = SoundSensor()
us = Ultrasound()
while True:
a2 = sensor2.read()
a3 = sensor3.read()
a4 = sound4.read()
dist = us.read()
print(
"气体{} 光敏{} 声音{} 超声波{} ".format(
a2,
a3,
a4,
dist,
)
)
time.sleep(0.2)

3.执行代码

你之间已经学习了终端相关的基础知识,现在可以通过cd命令切换到你的工作目录,然后执行python命令来运行你的代码。

下面是一个基础示例,其中空格是有意义的,养成习惯,不要多敲或少敲:

sudo 是一个用于提升权限的命令,因为我们的代码需要操作硬件,所以需要提升权限。
python3 sensor.py 是执行代码的命令。表示使用 python 来执行 sensor.py 文件

sudo python3 sensor.py
提示

所有涉及到摄像头以外的传感器的代码都需要使用sudo权限运行。

4. 结果

执行代码后,你会看到传感器的数据不断地在终端中打印出来。

接口说明文档

RaspberryPi-Sensor-Board 定制接口扩展板

图片

RaspberryPi-Sensor-Board 接口扩展板的所有连接口均已焊接固定,无需进行插拔操作。以下是接口的详细说明:

传感器名称接口 1接口 2调用方法
灯环D9D10RGB
NFCSDASCLRC522
声音传感器A0D22SoundSensor
空气质量传感器(旧版)A1D23MQGasSensor
空气质量传感器(新版)A2D24MQGasSensor
光敏传感器A4PhotosensitiveSensor
超声波传感器D4(trig)D5(echo)Ultrasound
摄像头云台 X 轴D12servos
摄像头云台 Y 轴D13servos
摄像头云台 灯珠D14LED
左旋钮A5RotaryPotentionmeter
右旋钮A6RotaryPotentionmeter
左按钮D25GPIO
中按钮D26GPIO
右按钮D27GPIO
自由拓展口左上(1 号拓展口)D16由传感器决定
自由拓展口右上(2 号拓展口)D17由传感器决定
自由拓展口右下(3 号拓展口)D18由传感器决定
自由拓展口左下(4 号拓展口)A7由传感器决定
自由拓展口中间(5 号拓展口)A3由传感器决定 RK3390与左按钮共享 D25 信号线

其中空气质量传感器可能是连接的A1| D23 也可能是A2| D24,具体连接的是哪个传感器,可以通过查阅 MQGasSensor 方法,输入不同的接口组合观察有无数据来判断。

自由拓展口中间 使用的是A3| D25,其中 D25 为与左按钮共享信号线,假设您将火焰传感器接入自由拓展口中间,该传感器有 GVAD 四个针脚,A 可以返回火焰大小,D 可以返回有无火焰。

以下两种情况均会在 D25 产生信号。

  • 按下左按钮开关
  • 火焰传感器检测到有火源

GPIO

此类用于处理通用输入/输出(GPIO)引脚。它接收一个引脚编号和其他参数'out''in',并返回一个 periphery.GPIO 对象。periphery.GPIO 可进行的操作有:

  • write(value):写入一个布尔值
  • read():读取当前引脚的值

示例:

gpio17 = GPIO(17, 'out')
gpio17.write(True) # 通电
gpio17.write(False) # 断电

gpio18 = GPIO(18, 'in')
gpio18.read()

ADC

此类用于处理模拟到数字转换器(ADC)。它接收一个引脚编号,并创建一个 I2C 对象来读取 ADC 的值。它有一个方法 read,用于读取 ADC 的当前值。

示例:

adc = ADC(0)
value = adc.read()
print(value)

LED

此类用于处理一个 LED。它接收一个引脚编号,并创建一个 GPIO 对象来控制 LED。它有两个方法:onoff,用于打开和关闭 LED。

示例:

led = LED(17)
led.on()
led.off()

RC522

此类用于处理 RC522 RFID 读卡器。它有两个方法:scanreadscan 方法用于扫描 RFID 卡,read 方法用于读取已扫描到的 RFID 卡的数据。

示例:

rc522 = RC522()
tagType, uid = rc522.scan()
if uid:
data = rc522.read(uid, 8)
print(data)

RGB

此类用于处理 RGB LED 灯带。它有两个方法:setsend_frameset 方法接收一个颜色列表,并将其发送到 LED 灯带。send_frame 方法用于发送一个完整的帧到 LED 灯带。

示例:

rgb = RGB()
rgb.set([(255, 0, 0), (0, 255, 0), (0, 0, 255)])

Ultrasound

此类用于处理超声波传感器。它接收触发引脚和回声引脚的编号,并创建两个 GPIO 对象来控制这两个引脚。它有一个方法 read,用于读取超声波传感器的当前距离,数值单位为厘米。

示例:

ultrasound = Ultrasound(4, 5)
distance = ultrasound.read()
print(distance)

SoundSensor

此类用于处理声音传感器。它接收一个模拟引脚和一个数字引脚的编号,并创建一个 GPIO 对象和一个 ADC 对象来控制这两个引脚。它有一个方法 read,用于读取声音传感器的当前状态(有无声音)和值(声音大小)。

示例:

sound_sensor = SoundSensor(0, 22)
signal, value = sound_sensor.read()
print(signal, value)

PhotosensitiveSensor

此类用于处理光敏传感器。它接收一个模拟引脚的编号,并创建一个 ADC 对象来读取该引脚的值。它有一个方法 read,用于读取光敏传感器的当前值。

示例:

photosensitive_sensor = PhotosensitiveSensor(4)
value = photosensitive_sensor.read()
print(value)

SoilMoistureSensor

此类用于处理土壤湿度传感器。它接收一个模拟引脚的编号,并创建一个 ADC 对象来读取该引脚的值。它有一个方法 read,用于读取土壤湿度传感器的当前值。

示例:

soil_moisture_sensor = SoilMoistureSensor(5)
value = soil_moisture_sensor.read()
print(value)

WaterDepthSensor

此类用于处理水深传感器。它接收一个模拟引脚的编号,并创建一个 ADC 对象来读取该引脚的值。它有一个方法 read,用于读取水深传感器的当前值。

示例:

water_depth_sensor = WaterDepthSensor(7)
value = water_depth_sensor.read()
print(value)

FlameSensor

此类用于处理火焰传感器。它接收一个模拟引脚和一个数字引脚的编号,并创建一个 GPIO 对象和一个 ADC 对象来控制这两个引脚。它有一个方法 read,用于读取火焰传感器的当前状态(有无火焰)和值(火焰大小)。

示例:

flame_sensor = FlameSensor(2, 24)
signal, value = flame_sensor.read()
print(signal, value)

RotaryPotentionmeter

此类用于处理旋转电位器。它接收一个模拟引脚的编号,并创建一个 ADC 对象来读取该引脚的值。它有一个方法 read,用于读取旋转电位器的当前值。

示例:

rotary_potentionmeter = RotaryPotentionmeter(6)
value = rotary_potentionmeter.read()
print(value)

MQGasSensor

此类用于处理 MQ 系列的气体传感器。它接收一个模拟引脚和一个数字引脚的编号,并创建一个 GPIO 对象和一个 ADC 对象来控制这两个引脚。它有一个方法 read,用于读取气体传感器的当前状态(有无气体)和值(气体浓度)。

示例:

mq_gas_sensor = MQGasSensor(1, 23)
signal, value = mq_gas_sensor.read()
print(signal, value)

Servo

信息

建议使用 Servos 类来控制伺服电机。

此类用于处理伺服电机。它接收一个芯片编号和一个通道编号,并创建一个 PWM 对象来控制伺服电机。它有两个方法:high_durationupdatehigh_duration 方法用于设置 PWM 的高电平持续时间。update 方法用于更新伺服电机的角度。 示例:

servo = Servo(0, 0)
servo.update(45)

Servos

此类用于处理两个伺服电机。它创建了两个 Servo 对象,分别用于控制 X 轴和 Y 轴的伺服电机。它有两个方法:update_xupdate_y,用于更新 X 轴和 Y 轴伺服电机的角度。

示例:

servos = Servos()
servos.update_x(45)
servos.update_y(30)