使用传感器
开发环境搭建
该教程适用于瑞莎大部分 SBC 产品,此处使用 ROCK 4C+ 进行实际演示,其他 SBC 可参考此操作。
// 下载示例代码
rock@rock-4c-plus:~$ sudo apt-get install cmake build-essential git python3-dev -y
rock@rock-4c-plus:~$ git clone https://github.com/nascs/sample_code.git
rock@rock-4c-plus:~$ source sample_code/env.sh
// 安装 wiringX 库
rock@rock-4c-plus:~$ git clone https://github.com/wiringX/wiringX.git
rock@rock-4c-plus:~$ cd wiringX
rock@rock-4c-plus:~/wiringX/$ mkdir build
rock@rock-4c-plus:~/wiringX/$ cd build
rock@rock-4c-plus:~/wiringX/build$ cmake ..
rock@rock-4c-plus:~/wiringX/build$ make -j4
rock@rock-4c-plus:~/wiringX/build$ cpack -G DEB
rock@rock-4c-plus:~/wiringX/build$ sudo dpkg -i libwiringx*.deb
LCD 1602/2004
keyestudio 1602 I2C 模块是一个 16 个字符的 2 行 LCD 显示器,采用蓝色背景和白色背光。 keyestudio 2004 I2C 模块是一个 20 个字符 4 行液晶显示屏,蓝色背景,白色背光。下面是在 radxa 平台上的使用方法:
-
使用 rsetup 工具打开 i2c7
-
断电关机
-
将 LCD 按以下方式接线
LCD <--> Radxa ROCK 4
GND <--> GND
VCC <--> 5V
SDA <--> Pin 3
SCL <--> Pin 5
- 重启,并检查 i2c7 是否开启
radxa@rock-4c-plus:~$ ls /dev/i2c-*
/dev/i2c-0 /dev/i2c-7 /dev/i2c-9 # 开启后可检测到 /dev/i2c-7
- 通过以下命令检查 LCD 是否正常被识别
radxa@rock-4c-plus:~$ sudo i2cdetect -r -y 7
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- 27 -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
- 运行 LCD 测试程序
sudo python LCD1602.py
该程序会显示系统当前时间。
ADXL345
ADXL345 是一款小巧、轻薄、低功耗的三轴 MEMS 加速计,具有高分辨率(13 位)测量功能,最大 +-16 g。数字输出数据格式为 16 位二进制,可通过 SPI(3 线制或 4 线制)或 I2C 数字接口访问。ADXL345 非常适合测量倾斜感应应用中的静态重力加速度,以及运动或冲击产生的动态加速度。其高分辨率(4 mg/LSB)可测量小于 1.0 度的倾角变化。下面是在 radxa 平台上的使用方法:
-
使用 rsetup 工具打开 i2c7
-
断电关机
-
将 sensor 按以下方式接线
ADXL345 <--> Radxa ROCK 4
GND <--> GND
VCC <--> 5V
SDA <--> Pin 3
SCL <--> Pin 5
- 重启,并检查 i2c7 是否开启
radxa@rock-4c-plus:~$ ls /dev/i2c-*
/dev/i2c-0 /dev/i2c-7 /dev/i2c-9
- 运行测试程序
root@rock-4c-plus:/home/radxa/sample_code/modules/keyestudio# gcc adxl345.c -lwiringx
root@rock-4c-plus:/home/radxa/sample_code/modules/keyestudio# ./a.out
该程序会显示 x y z 三个方向上的加速度数据。
Button + LED
这有一个按钮和一个发光二极管。二者皆可通过编程控制,可实现按下按钮对发光二极管的控制。下面是在 radxa 平台上的使用方法:
- 将 sensor 按以下方式接线
led <--> Radxa ROCK 4
s <--> Pin 3
v <--> 3.3V/5V
g <--> GND
button <--> Radxa ROCK 4
s <--> Pin 5
v <--> 3.3V/5V
g <--> GND
- 运行测试程序
radxa@rock-4c-plus:~$ gcc button_led.c -lwiringx
radxa@rock-4c-plus:~$ sudo ./a.out
该程序会显示 button 是否被按下,若 button 被按下,则 led 是灭的。
Ultrasonic sensor
Keyestudio SR01 超声波传感器价格实惠,可检测超声波传感器与障碍物之间的距离。它采用 CS100A 芯片,兼容 3.3V 和 5V。其最大探测距离为 3 米,盲区小于 4 厘米。与蝙蝠的原理一样,超声波模块发出的是人体听不到的高频信号。如果遇到障碍物,它们就会返回。接收到返回的信息后,它将通过确定发射信号和接收信号的时间差来计算传感器与障碍物之间的距离。下面是在 radxa 平台上的使用方法:
- 将 sensor 按以下方式接线
ultrasonic sensor <--> Radxa ROCK 4
trig <--> Pin 3
echo <--> Pin 5
v <--> 3.3V/5V
g <--> GND
- 运行测试程序
root@rock-4c-plus:/home/radxa/sample_code/modules/keyestudio# gcc ultrasonic_sensor.c -lwiringx
root@rock-4c-plus:/home/radxa/sample_code/modules/keyestudio# ./a.out
该程序会输出超声波传感器测得的距离。
4-digit 7-segment Display
keyestudio 4 位 LED 显示器模块集成了一个 0.36" 4 位 7 段显示器共阳极,有 12 个引脚。它使用 TM1637 驱动芯片。 该模块有 4 个间距为 2.54 毫米的控制引脚,可通过跳线直接连接到微控制器。因此,控制矩阵非常简单,无需大量布线。可让微控制器通过信号接口控制 4 位 LED 段显示屏,大大节省了微控制器的 IO 引脚资源。模块上有两个 3 毫米的固定孔,方便安装到其他设备上。如果您一直在关注矩阵显示屏,但因其复杂性而犹豫不决,那么这款产品就是您一直在寻找的解决方案!下面是在 radxa 平台上的使用方法:
- 将 sensor 按以下方式接线
4-digit 7-segment Display <--> Radxa ROCK 4
CLK <--> Pin 40
DIO <--> Pin 38
VCC <--> 3.3V/5V
GND <--> GND
- 运行测试程序
root@rock-4c-plus:/home/radxa/sample_code/modules/keyestudio# gcc tm1637.c -lwiringx
root@rock-4c-plus:/home/radxa/sample_code/modules/keyestudio# ./a.out
该程序会显示数字 "1024"。
OLED module
OLED 是有机发光二极管的简称。在微观层面上,OLED 显示屏是由有机发光二极管组成的矩阵,当它们发出能量时就会发光。旧的 LCD(液晶显示器)技术使用电子控制的偏振片来改变光线通过或不通过的方式。这就需要一个外部背光灯来照亮整个显示屏。这需要消耗大量能源,因为在显示屏打开时,必须为所有像素提供足够的光线。新的 OLED 技术只消耗每个像素的电能。因为每个像素都能产生自己的光,所以只有开启的像素才用电。这使得 OLED 技术非常高效;此外,与 LCD 相比,这类 OLED 的制造方式使其非常薄。下面是 在 radxa 平台上的使用方法:
-
使用 rsetup 工具打开 i2c7
-
断电关机
-
将 sensor 按以下方式接线
OLED <--> Radxa ROCK 4
GND <--> GND
VCC <--> 5V
SDA <--> Pin 3
SCL <--> Pin 5
- 重启,并检查 i2c7 是否开启
radxa@rock-4c-plus:~$ ls /dev/i2c-*
/dev/i2c-0 /dev/i2c-7 /dev/i2c-9
- 检查 OLED 是否正常被识别
radxa@rock-4c-plus:~$ sudo i2cdetect -r -y 7
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- 3c -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
- 运行测试程序
root@rock-4c-plus:/home/radxa/sample_code/modules/keyestudio# gcc oled.c -lwiringx
root@rock-4c-plus:/home/radxa/sample_code/modules/keyestudio# ./a.out
该程序会显示字符 "Radxa ROCK 4"。
Buzzer/LED/IR transmitter
这里有一个蜂鸣器,一个led和一个红外发射器。三者均可以通过编程来进行控制。下面是在 radxa 平台上的使用方法:
- 将 sensor 按以下方式接线
buzzer/led/ir transmitter <--> Radxa ROCK 4
s <--> Pin 3
v <--> 3.3V/5V
g <--> GND
- 运行测试程序
radxa@rock-4c-plus:~ cd sample_code/wiringX
radxa@rock-4c-plus:~/sample_code/wiringX$ gcc blink.c -lwiringx
该程序会每隔一秒闪一次灯,蜂鸣器的话会每个一秒响一次。
TCS34725
keyestudio TCS34725 传感器主要使用 TCS34725 色彩传感器芯片。它可以通过 I2C 通信接口与其他控制器通信。Keyestudio TCS34725 色彩传感器是一款低成本、高性价比的 RGB 全彩色彩识别传感器。该传感器可通过光学感应识别物体的表面颜色。传感器在强光照射下输出相应的 RGB 值,帮助还原颜色。此外,为了避免周围环境的干扰,提高准确度,我们还特别在传感器底部增加了一块红外光屏蔽板,使入射光的红外光谱元素降到最低,从而使色彩管理更加准确。在传感器底部可以看到 4 颗黄色高亮 LED,可以保证传感器在环境光较弱的情况下正常使用,真正实现了补光功能。该传感器具有高灵敏度、宽动态范围和红外遮光滤镜。它是一种理想的色敏元件解决方案。它广泛应用于 RGB LED 背光控制、固态照明、健康产品等领域。下面是在 radxa 平台上的使用方法:
- 拉取测试代码
radxa@rock-4c-plus:~$ git clone https://github.com/nascs/TCS34725.git
radxa@rock-4c-plus:~$ cd TCS34725
radxa@rock-4c-plus:~/TCS34725$ git checkout -b test origin/test
-
使用 rsetup 工具打开 i2c7
-
断电关机
-
将 sensor 按以下方式接线
TCS34725 <--> Radxa ROCK 4
GND <--> GND
VCC <--> 5V
SDA <--> Pin 3
SCL <--> Pin 5
- 重启,并检查 i2c7 是否开启
radxa@rock-4c-plus:~$ ls /dev/i2c-*
/dev/i2c-0 /dev/i2c-7 /dev/i2c-9
- 检查 TCS34725 是否被识别
radxa@rock-4c-plus:~$ sudo i2cdetect -r -y 7
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- 29 -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
- 运行测试程序
radxa@rock-4c-plus:~/TCS34725$ sudo python3 example.py
该程序需要在光线比较暗的情况下运行,会识别物体的表面颜色,并输出 RGB 值。
DS3231
DS3231 集成了 TCXO 和晶体,是一款高性价比、高精度的 I2C 实时时钟。该器件带有电池输入,因此即使断开主电源,它仍能保持精确的计时。集成振荡器确保了器件的长期精度,并减少了元件数量。DS3231 提供商用和工业温度范围,支持 16 引脚小型外线封装(300mil)。模块本身可适应 3.3V 和 5V 系统,无需电平开关,非常方便!下面是在 radxa 平台上的使用方法:
-
使用 rsetup 打开 ds3231 overlay
-
将 sensor 按以下方式接线
DS3231 <--> Radxa ROCK 4
GND <--> GND
VCC <--> 5V
SDA <--> Pin 3
SCL <--> Pin 5
- 重启,并检查 i2c7 是否开启
radxa@rock-4c-plus:~$ ls /dev/i2c-*
/dev/i2c-0 /dev/i2c-7 /dev/i2c-9
- 检查 DS3231 是否被识别
radxa@rock-4c-plus:~$ sudo i2cdetect -r -y 7
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- UU -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
- 添加一个新的 RTC 设备
root@rock-4c-plus:/home/radxa# echo ds3231 0x68 | sudo tee /sys/class/i2c-adapter/i2c-7/new_device
- 检查新的 RTC 设备
root@rock-4c-plus:/home/radxa# ls /dev/rtc*
/dev/rtc /dev/rtc0 /dev/rtc1