跳到主要内容

潘多拉 RT-Thread 接近感应与光传感器

实验概述

本实验利用 RT-Thread 的 AP3216C 软件包,读取 ap3216c 光环境传感器所测量的接近感应(ps,proximity sensor)与光照强度(als,ambient light sensor)。

AP3216C 软件包提供了使用接近感应(ps)与光照强度(als)传感器 ap3216c 基本功能,并且提供了硬件中断的可选功能,使用软件包可加快项目开发速度。

AP3216C 软件包支持如下功能:

  • 光照强度:支持 4 个量程;
  • 接近感应:支持 4 种增益;
  • 中断触发:光照强度及接近感应同时支持“高于阈值”或“低于阈值”的两种硬件中断触发方式。

硬件连接

潘多拉 IoT Board 板载的 AHT10 传感器采用 I2C 接口连接到 STM32。单片机通过 IIC_SDA(PC1)、IIC_SCL1(PC0) 即可对传感器 ap3216c 发送命令、读取数据。另外,AP_INT(PC13)为硬件中断引脚。

示例代码

参考《潘多拉 IoT Board 开发环境》创建工程,在 applications/main.c 中输入如下代码。

程序主要流程:首先初始化传感器 ap3216c ,传入参数 i2c3 为该传感器挂载的 i2c 总线的名称;然后将返回设备对象分别传入获取 als 与 ps 函数,获取测量的 als 与 ps 值,打印到串口。

applications/main.c
#include <rtthread.h>
#include <rtdevice.h>
#include <board.h>
#include "ap3216c.h"

#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>

int main(void)
{
ap3216c_device_t dev;
const char *i2c_bus_name = "i2c3";
int count = 0;

/* 初始化 ap3216c */
dev = ap3216c_init(i2c_bus_name);
if (dev == RT_NULL) {
LOG_E("The sensor initializes failure.");
return 0;
}

while (count++ < 100)
{
rt_uint16_t ps_data;
float brightness;

/* 读接近感应值 */
ps_data = ap3216c_read_ps_data(dev);
if (ps_data == 0) {
LOG_D("object is not proximity of sensor.");
}
else {
LOG_D("current ps data : %d.", ps_data);
}

/* 读光照强度值 */
brightness = ap3216c_read_ambient_light(dev);
LOG_D("current brightness: %d.%d(lux).", (int)brightness, ((int)(10 * brightness) % 10));

rt_thread_mdelay(1000);
}
return 0;
}

完整代码:08_driver_als_ps

编译运行

打开 menuconfig 配置菜单,勾选 ap3216c 软件包,具体路径如下:

RT-Thread online packages  --->
peripheral libraries and drivers --->
sensors drivers --->
[*] ap3216c: a digital ambient light and a proximity sensor ap3216c driver library.

选择 v1.0.0 版本(不依赖 Sensor 框架)

开启 I2C3 总线驱动(软件模拟),具体路径如下:

Hardware Drivers Config  --->
On-chip Peripheral Drivers --->
[*] Enable I2C BUS --->

保持默认配置就可以了

保存配置,执行下面命令下载软件包

pkgs --update

编译工程

$ scons
...
LINK rt-thread.elf
arm-none-eabi-objcopy -O binary rt-thread.elf rtthread.bin
arm-none-eabi-size rt-thread.elf
text data bss dec hex filename
86416 1880 3588 91884 166ec rt-thread.elf
scons: done building targets.

将 bin 文件上传到 STM32

st-flash write rt-thread.bin 0x8000000

打开串口终端,输出如下内容

 \ | /
- RT - Thread Operating System
/ | \ 4.1.0 build Jan 5 2022 02:24:55
2006 - 2021 Copyright by rt-thread team
msh >
[D/main] current ps data : 1.
[D/main] current brightness: 1.7(lux).
[D/main] current ps data : 4.
[D/main] current brightness: 3.5(lux).
[D/main] current ps data : 9.
[D/main] current brightness: 1318.8(lux).
[D/main] current ps data : 13.
[D/main] current brightness: 1922.9(lux).

可以看到,ap3216c 光环境传感器所测量的接近感应(ps data)与光照强度(brightness)已经被读取出来了!

思考总结

本实验通过 I2C 总线读取 ap3216c 光环境传感器数据,得益于 RT-Thread 对 I2C 总线驱动和 ap3216c 软件包的支持,我们只需要写少量代码(甚至不用写代码)即可完成本实验。可以看到,使用 RT-Thread 的软件包真的非常的方便,大大加快了我们的开发速度。