Sensor(传感器)是物联网重要的一部分,“Sensor 之于物联网”就相当于“眼睛之于人类”。人类如果没有了眼睛就看不到这大千的花花世界,对于物联网来说也是一样。
如今随着物联网的发展,已经有大量的 Sensor 被开发出来供开发者选择了,如:加速度计(Accelerometer)、磁力计(Magnetometer)、陀螺仪(Gyroscope)、气压计(Barometer/pressure)、湿度计(Humidometer)等。这些传感器,世界上的各大半导体厂商都有生产,虽然增加了市场的可选择性,同时也加大了应用程序开发的难度。因为不同的传感器厂商、不同的传感器都需要配套自己独有的驱动才能运转起来,这样在开发应用程序的时候就需要针对不同的传感器做适配,自然加大了开发难度。为了降低应用开发的难度,增加传感器驱动的可复用性,我们设计了 Sensor 设备。
Sensor 设备的作用是:为上层提供统一的操作接口,提高上层代码的可重用性
经查看sensor支持包,rtt支持该传感器的:
在【RA4M2设计挑战赛】RTT 移植 这篇帖子基础上加入hs3003的温湿度采集
加入hs3003的sensor模块
在ra4m2-eco的目录下面打开ConEmu控制台,进入menuconfig界面,进入 RT-Thread online packages
进入peripheral libraries and drivers
进入sensors drivers
按向下键找到hs300x,并选中
添加Kconfig文件对I2C的支持
由于所下的包没有提供对i2c的支持,所以需要在board目录下的Kconfig进行修改,增加对i2c的支持:
在Kconfig中添加如下代码:
menuconfig BSP_USING_I2C
bool "Enable I2C BUS"
default n
select RT_USING_I2C
select RT_USING_I2C_BITOPS
select RT_USING_PIN
if BSP_USING_I2C
config BSP_USING_HW_I2C
bool "Enable Hardware I2C BUS"
default n
if BSP_USING_HW_I2C
config BSP_USING_HW_I2C1
bool "Enable Hardware I2C1 BUS"
default n
endif
if !BSP_USING_HW_I2C
menuconfig BSP_USING_I2C1
bool "Enable I2C1 BUS (software simulation)"
default y
if BSP_USING_I2C1
config BSP_I2C1_SCL_PIN
hex "i2c1 scl pin number"
range 0x0000 0x0B0F
default 0x050C
config BSP_I2C1_SDA_PIN
hex "I2C1 sda pin number"
range 0x0000 0x0B0F
default 0x050B
endif
endif
endif
然后在menuconfig中就可以看到i2c的配置
配置I2C
Hardware Drivers config
On-chip Peripheral Drivers
Enable I2C Bus
Enable I2C BUS (software simulation)
0x0408 i2c1 scl pin number
0x0409 i2c1 sda pin number
这里使用软件模拟i2c 配置引脚为P0408、P0409为i2c1 指向开发板的i2c插座上。
退出后保存,并执行pkgs --update,等待包下载到本地:
下载结束后,多了一个packages的文件夹,下面有hs300x-latest的文件夹。
文件夹中有使用说明跟相关文档。
MDK工程配置
1、添加hs300x文件夹,按下面所示,添加hs300x文件夹,添加sensor_renesas_hs300x.c。同时在头文件路径下面添加hs300x-latest文件夹:
2、添加初始化hs3003代码,在sensor_renesas_hs300x.c最后添加代码如下:
#define HS300X_I2C_BUS "i2c1"
int rt_hw_hs300x_port(void)
{
struct rt_sensor_config cfg;
cfg.intf.dev_name = HS300X_I2C_BUS;
cfg.intf.user_data = (void *)HS300X_I2C_ADDR;
rt_hw_hs300x_init("hs300x", &cfg);
return RT_EOK;
}
INIT_ENV_EXPORT(rt_hw_hs300x_port);
3、编译后下载到开发板,并且把hs3003插到开发板上,打开串口终端,成功启动,并初始化了sensor:
调试hs3003
根据使用手册,
- 通过导出的测试命令 `sensor_polling humi_hs3` ,判断能否成功读取湿度数据。
- 通过导出的测试命令 `sensor_polling temp_hs3` ,判断能否成功读取温度数据。
我们在终端执行命令,效果如下:
致此hs3003驱动成功。
【小结】RTT的sensor组件提供了完美对hs3003的驱动支持,可以让开发者零代码就驱动。
【注意】由于可能下载的源码版本不同,有些适配可能会弹出错误,大家按照提示修改就行。