用LPC55xx搭建AIOT平台,步骤分解之传感器篇
Smart Tracker智能载具,是目前开发的一个新方向,这个方向在国内基本算是比较成熟的行业,类似的应用就是GPS跟踪器,以前LPC也在这个市场里有着广泛的应用,比如LPC17xx系列和LPC11xx系列。
在技术创新层出不穷的今天,智能载具新增了很多新的发展方向。比如新的无线连接方面:CAT1、NB、Lora、sigfox等;增强的安全认证与快速配置;全方位的环境检测:温湿度、震动碰撞等。
说白了就是个大的AIOT平台,接下来将分几次,依据本人对智能载具的理解,以MCU为起点,从传感器、GPS、无线连接等多个维度,给大家讲解MCU如何对接这些外设。
NXP是唯一的能提供从MCU到MPU、SE、BLE、Thread、Zigbee、SigFox、WIFI、NFC、UWB的厂商,对智能载具的理解会更深入。
本文将先介绍如何将温湿度传感器SHT31的驱动代码,移植到LPC55Sxx上。
一、SHT31温湿度传感器简介
SHT31是Sensirion基于[CMOSens®]工艺的温湿度传感器,是目前市面上常用的温湿度传感器之一,具有以下特色:
1、SHT3x增强了信号处理
2、可编程温湿度极限报警模式
3、提供了高达1MHz的I2C通信速度,两个可配置的I2C地址
4、封装为DFN,体积小巧,面积2.5x2.5mm2, 高度为0.9mm
5、宽工作电压范围, 2.15V~5.5V
6、功耗4.8µW (在2.4 V时低重复性, 1 次/秒)
7、湿度工作范围 0 - 100% RH
8、温度工作范围 -40°C - 125°C (-40°F - 257°F)
二、SHT31引脚配置
SHT31是一个8个引脚DFN封装的传感器,具体引脚说明见下图:
SHT31总共有8个引脚:
1、SDA,I2C数据线引脚
2、ADDR,I2C地址选择引脚,可连接VSS或者VDD分别对应不同的I2C地址,不能悬空
3、ALEAT,报警功能引脚,如果使用则接到LPC的外部中断引脚(接到GPIO即可),不用的话建议浮空
4、SCL,I2C时钟线引脚
5、VDD,芯片工作电压引脚
6、nRESET,复位引脚,低电平有效,如果不用,建议接到VDD
7、R,没啥用,接到VSS即可
9、VSS,地
SHT31 DFN封装底部中间部位还有个Die Pad(Center Pad),一般接VSS(地)即可。
三、官方典型应用电路
四、LPC55Sxx如何连接SHT31
LPC55Sxx可以通过8组FlexComm接口中的任意一个,配置为I2C的模式去连接SHT31的I2C接口。
对于FlexComm来讲,一组FlexComm可能存在两组I2C引脚配置即:
FCn_CTS_SDA_SSEL0
FCn_RTS_SCL_SSEL1
或者
FCn_TXD_SCL_MISO_WS
FCn_RXD_SDA_MOSI_DATA
这里FCn中的n代表了0-7,即8组FlexComm的之一。
SHT31的Alert信号线可以任意连接一个LPC55Sxx的GPIO,通过PINT或者GINT功能产生中断来提示MCU。
五、SHT31应用代码解析
我们的SHT31参考代码是基于Adafruit公开在Github上的代码(GitHub - adafruit/Adafruit_SHT31: Arduino Library for SHT31 Digital sensors)修改而来,Adafruit的代码遵循的是BSD License(Adafruit_SHT31/license.txt at master · adafruit/Adafruit_SHT31 · GitHub)
具体移植过程参考接下来的步骤:
1. 根据硬件设定配置LPC55Sxx的管脚 在提供的参考代码里,driver_sensor_sht31.h文件中定义了与SHT31 I2C引脚连接的GPIO的PORT,PIN,FUNC#以及配置PINCFG信息,见下图,用户根据自己的实际硬件修改成对应的管脚和功能即可。这两个引脚会在sht32_init()中进行初始化。
2. 根据硬件设定配置LPC55Sxx的FlexComm 修改好引脚配置后,我们需要针对引脚对应的FlexComm号 对I2C接口进行配置,主要是在driver_sensor_sht31.h文件中,需要修改SHT31用到的I2C编号,对应FlexComm复位的通道号,对应FlexComm的时钟源设置,对应FlexComm的时钟频率,对应FlexComm的时钟号,以及I2C的通信速率。
3. 根据硬件设定配置SHT31的I2C地址 我们按照SHT31的文档,代码中我们在driver_sensor_sht32.h中配置SHT31的I2C地址, 即I2C_SHT31_ADDR。我们设置默认的是0x44,用户根据自己的需求可以选择0x44或者0x45。
4. 基本的操作API
sht31_init():SHT31初始化,包括引脚,I2C外设以及SHT31自身的初始化
sht31_reset():SHT31软件复位
sht31_read_status():SHT31状态获取
sht31_crc8():SHT31 数据CRC校验
sht31_read_temp_hum():SHT31读取温度和湿度数据
最终的温湿度结果,用户在调用过sht31_read_humidity()后,可以直接读全局变量sht31_temp和sht31_humidity即可得到。
实际应用中,只需要在初始化过程中调用sht32_init()后,在需要读温湿度的地方调用
sht31_read_temp_hum()即可,这个例程用的是单次触发采样模式。
5. 例程
如果手上刚好有LPC55S69-IOT开发板以及SHT31的模块的话,可以如下图连接好模块到开发板的FlexComm3连接器以及调试器。
下载实例代码后即可通过串口打印出温湿度采样的结果。
下面是串口打印结果:
|