打印
[嵌入式linux]

rk3128调式温湿度传感器sht30

[复制链接]
2020|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qq7643066|  楼主 | 2020-10-18 15:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
XCY-W1非接触式测温方案规格书 20200202(1)(1).pdf (639.77 KB)
sht30是盛世瑞恩出产的一款温湿度传感器,去年小米发布的一款温湿度测量笔用的也是这款传感器。关于这款传感器的介绍在这里就不再赘述,主要聊一聊在rk3128上的调试过程。
sht30是基于i2c传输协议的,rk3128的板子上有三组i2c接口可供使用。打开kernel/arch/arm64/boot/dts/rockchip/rk3128-xcy.dtsi该设备树文件,可以看到已经注册了一组i2c1设备,因此我们可以直接调用。
&i2c1 {
   clock-frequency = <400000>;
   status = "okay";
   tas5731: tas5731@1a {
       #sound-dai-cells = <0>;
       compatible = "ti,tas5731";
       reg = <0x1a>;
       clocks = <&cru SCLK_I2S1_8CH_TX_OUT>;
       clock-names = "mclk";
       pinctrl-names = "default";
       pinctrl-0 = <&i2s_8ch_1_m0_mclk>;
       pdn-gpios = <&gpio0 RK_PA5 GPIO_ACTIVE_LOW>;
       reset-gpios = <&gpio1 RK_PA1 GPIO_ACTIVE_LOW>;
   };
复制代码
调试过程发现,他的输出结果并不是标准的温度湿度数据,阅读datasheet后发现,需要通过数学公式转化,下面是代码实现过程:
ST = buf[0];
ST <<= 8;
ST |= buf[1];
SRH = buf[3];
SRH <<= 8;
SRH |= buf[4];
tempC = -45.0 + (175.0 * ((float) ST /(float) 0xFFFF));   //摄氏度数据
tempF = tempC * 9 / 5 + 32;                                    //华氏度数据
hum = 100.0 * ((float) SRH / (float)0xFFFF);                    //湿度数据
复制代码
sht30使用crc校验,关于这种校验码可以上网查找,这里讲代码实现过程
uint8_t crc8(const uint8_t *data, int len)
{
    const uint8_t POLYNOMIAL = 0x31;
    uint8_t crc = 0xFF;
    int j;
    int i;
  
  for(j = len; j; --j ) {
      crc ^= *data++;
      for ( i = 8; i; --i ) {
           crc = ( crc & 0x80 )? (crc << 1) ^ POLYNOMIAL: (crc <<1);
      }
  }
return crc;
}
//数据校验判断步骤
   if ( buf[2] != crc8(buf, 2) || buf[5] != crc8(buf+3, 2))
          return SHT30_CRC_CHECK_FAILED;
复制代码
笔者做了一份demo,编译后直接将可执行文件烧进板子,然后执行便可以得到当前环境的温湿度数据:
# ./main p
Temperature 27.65c - 81.76f
Humidity 73.54%
#

使用特权

评论回复

相关帖子

沙发
1348795481| | 2020-10-20 08:53 | 只看该作者
可以用gpio模拟吗

使用特权

评论回复
板凳
dufanghua| | 2020-10-20 09:06 | 只看该作者
给个完整的驱动看看

使用特权

评论回复
地板
HJD001| | 2021-9-7 11:36 | 只看该作者
SHT30现货供应,V18664394396

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:承接MID、Android TV等项目定制 QQ:7643066

107

主题

422

帖子

5

粉丝