【树莓派使用SHT30温度/湿度传感器教程】

树莓派SHT30系列使用温度/湿度传感器的教程
原文链接:[http://www.raspi.cc/read-45-1.html]本人小白,在使用SHT3XX 系列的温度传感的一些过程,特此分享给大家。
在这里插入图片描述

我们常见的有三种:SHT30、SHT31、SHT35,其中比较便宜性价比较愉快的是 SHT30。因为SHT系列传感器都是标准的 i2C 引脚,那么使用过程中肯定是用 I2C 来通信。如果你没作更改过传感器,默认的从机地址是 0x44。

i2C 引脚——正VCC、负GND、sda、scl

我这里介绍微软封装的另一个库——iot bindings。这个库是微软提供的,里面封装了很多常用模块的操作,我们不用每次都自己手动写硬件通信,直接引用,开箱即用,无需调校,免打孔,免安装。

在创建.NET 项目后,执行以下命令引用(也可以用VS的Nuget管理工具)。

dotnet add package System.Device.Gpio
dotnet add package iot.device.bindings
封装的模块类位于命名空间 Iot.Device.XXX 中,其中XXX是各类模块的大类名。比如,我们这次用的 SHT 30, 它属于 SHT 30、31、35 系列,故命名空间为 Iot.Device.Sht3x。

在代码文件中,using 一下。

using System;
using System.Device.I2c;
using Iot.Device.Sht3x;
然后,很简单的几行代码调用。

 I2cConnectionSettings set=new(4, (byte)I2cAddress.AddrLow);
 I2cDevice dev= I2cDevice.Create(set);
        using Sht3x sht= new Sht3x(dev);
        bool running = true;
        Console.CancelKeyPress += (_,_) => running=false;

        while(running)
        {
            // 温度
            double temp = sht.Temperature.DegreesCelsius;
            // 湿度
            double hui = sht.Humidity.Percent;
            Console.WriteLine("温度:{0:N1} ℃\n湿度:{1:N1} %RH", temp, hui);
            System.Threading.Thread.Sleep(2000);
        }

注意看 I2cAddress 枚举,它已经为我们定义好了 SHT 3x 传感器(模块)的地址:

public enum I2cAddress : byte
{
    AddrLow = 0x44,
    AddrHigh = 0x45
}

我们在用时选默认地址 0x44 即可。

Sht3x 类已封装好,访问 Temperature 获取温度值,DegreesCelsius 是摄氏度,其他的不知道什么单位,我见识浅,没研究过。Humidity 属性是相对湿度,一般用百分比。

写完代码后,发布。

dotnet publish -c Release -r linux-arm --no-self-contained
如果你的树莓派上没有配置 dotnet 框架,那就把 --no-self-contained 去掉,让它生成全部类库,然后全部复制到树莓派上运行。

scp -r bin\Release\net5.0\linux-arm\publish* pi@192.168.0.xxx:/home/pi/<你要放置的目录>
运行结果如下图所示。

在这里插入图片描述

目前这个 bindings 库微软在不断地更新,支持的模块越来越多。尽管如此,有些模块还是没有收录进去。比如 MPU6050 ,bindings 库里面就没有,库里面只有 MPU 6500 和 MPU 9250,好了剩下的自己研究吧!

[原文链接:[http://www.raspi.cc/read-45-1.html]

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: SHT30温度湿度传感器是一种高精度的数字湿度传感器,能够测量环境中的温度和湿度信息。它在STM32F130ZET6开发板上可以使用HAL库提供的例程进行控制和读取数据。 首先,我们需要在STM32CubeMX中配置I2C总线接口以及相关引脚,以连接SHT30传感器。在配置好硬件连接后,我们可以生成初始化代码,并在工程中包含HAL库相应的头文件。 接下来,我们需要调用HAL库提供的函数,来设置I2C总线和SHT30传感器的参数。可以使用HAL_I2C_Init函数来初始化I2C总线,设置传输速率等。然后,使用HAL_I2C_Mem_Write函数向SHT30传感器发送命令,以激活传感器并设置测量模式。例如,我们可以发送0x2C06的命令字节来设置传感器工作在连续测量模式下。 一旦传感器被激活并开始工作,我们可以使用HAL_I2C_Mem_Read函数从传感器中读取湿度数据。使用HAL_I2C_Mem_Read函数时,我们需要指定传感器的I2C地址以及读取的寄存器地址。例如,我们可以发送0xE000的命令字节来读取温度和湿度数据。 最后,我们可以使用HAL库提供的其他函数,来解析并处理温度湿度数据。例如,我们可以使用HAL库中的相关函数进行数据解码,并将测量得到的温度和湿度值显示在LCD屏幕上。 通过以上的步骤,我们可以使用STM32F130ZET6开发板和HAL库来控制和读取SHT30温度湿度传感器的数据。这个例程可以帮助我们进行环境湿度监测、自动调控系统等应用。 ### 回答2: SHT30湿度传感器是一种集成温度和湿度测量功能的传感器组件。而STM32F130ZET6是一款基于ARM Cortex-M3核心的32位微控制器。HAL库是一种硬件抽象层,可以帮助开发者在不同硬件平台上方便地使用外设和进行底层驱动。 在STM32F130ZET6上使用SHT30湿度传感器,首先需要配置STM32的外设寄存器,然后通过I2C总线与SHT30进行通信。以下是一个使用HAL库的例程: 1. 配置I2C总线:使用HAL库提供的HAL_I2C_Init()函数初始化I2C外设,并设置I2C的时钟速率、地址模式等参数。 2. 配置SHT30传感器:使用HAL_I2C_Mem_Write()函数向传感器写入配置指令,如设置测量精度、开启测量等。需要根据SHT30的数据手册来确定配置指令。 3. 读取温度和湿度:使用HAL_I2C_Mem_Read()函数从传感器读取温度和湿度数据。根据SHT30的数据手册,可以确定读取数据的地址和格式。 4. 数据解析和处理:读取到的湿度数据是原始的二进制数据,需要进行解析和处理才能得到实际的湿度值。可以使用一些公式或计算方法将原始数据转换为实际的湿度值。 5. 输出结果:将计算得到的湿度值输出到合适的显示设备,如LCD屏幕、串口终端等。 以上是一个简单的示例,具体的代码实现可以参考STM32的HAL库文档和SHT30传感器的数据手册。根据具体需求,可能还需要添加错误处理、校验和其他功能。 ### 回答3: SHT30温度湿度传感器是一款非常常用的传感器,与STM32F130ZET6微控制器结合使用可以实现温度湿度的监测。在使用SHT30温度湿度传感器时,我们可以选择使用STM32F130ZET6的HAL库来编写代码。 首先,我们需要在STM32CubeMX中配置GPIO引脚,用于与SHT30传感器进行通信。然后通过HAL库中的I2C驱动程序来实现与SHT30传感器的通信。 下面是一个示例代码,用于读取SHT30温度和湿度数据: ```c #include "main.h" #include "stm32f1xx_hal.h" #include "sht30.h" I2C_HandleTypeDef hi2c1; void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_I2C1_Init(void); int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_I2C1_Init(); SHT30_Init(&hi2c1); SHT30_StartMeasurement(&hi2c1); while (1) { HAL_Delay(1000); float temperature = SHT30_GetTemperature(&hi2c1); float humidity = SHT30_GetHumidity(&hi2c1); // 在此处可以进行温度和湿度的处理,例如打印到串口或者显示到LCD上 SHT30_StartMeasurement(&hi2c1); } } void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_AFIO_CLK_ENABLE(); __HAL_RCC_PWR_CLK_ENABLE(); __HAL_RCC_I2C1_CLK_ENABLE(); RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) { Error_Handler(); } } static void MX_I2C1_Init(void) { hi2c1.Instance = I2C1; hi2c1.Init.ClockSpeed = 100000; hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2; hi2c1.Init.OwnAddress1 = 0; hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE; hi2c1.Init.OwnAddress2 = 0; hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE; hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE; if (HAL_I2C_Init(&hi2c1) != HAL_OK) { Error_Handler(); } } void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOD_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_RESET); GPIO_InitStruct.Pin = GPIO_PIN_9; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } ``` 在以上代码中,我们首先要调用SHT30_Init函数进行传感器的初始化,然后调用SHT30_StartMeasurement开始测量,再通过SHT30_GetTemperature和SHT30_GetHumidity来获取温度和湿度数据。你可以按照需要进行进一步处理和显示输出。另外在代码中还包含了与I2C相关的初始化。 以上就是使用SHT30温度湿度传感器和STM32F130ZET6微控制器HAL库的例程,希望对你有帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值