1. 项目进度

桌面Mini时钟项目用来演示如何使用RT-Thread Stduio开发项目,整个项目的架构如下:

使用RT-Thread Studio DIY 迷你桌面时钟| 获取温湿度传感器数据(I2C设备驱动+SHT3x软件包)…-编程知识网

在上一篇博文中简单的介绍了RT-ThreadStudio一站式工具,基于STM32L431RCT6这个芯片创建工程,并修改时钟为使用外部时钟。

使用RT-Thread Studio DIY 迷你桌面时钟(一)| 基于STM32芯片创建工程:

https://blog.csdn.net/Mculover666/article/details/104146623

接下里我们开始添加I2C设备,添加SHT3x软件包,获取SHT3x温湿度传感器数据。

2. 添加I2C设备

2.1. 打开I2C设备驱动框架

双击左侧 RT-Thread Setting 文件,即可打开RT-Thread图形化配置工具,软件模拟I2C这一项是灰色的,表示没有打开,单击一下即可打开软件 I2C 的驱动框架,图标变为彩色表示打开:

使用RT-Thread Studio DIY 迷你桌面时钟| 获取温湿度传感器数据(I2C设备驱动+SHT3x软件包)…-编程知识网

右击该选项可以打开更多配置,比如查看该驱动设备的依赖、查看该驱动设备的详细配置,查看该驱动设备的API文档,查看在线文档等操作:

使用RT-Thread Studio DIY 迷你桌面时钟| 获取温湿度传感器数据(I2C设备驱动+SHT3x软件包)…-编程知识网

Ctrl+S保存,配置生效,软件会自动添加I2C设备驱动框架到工程中:

使用RT-Thread Studio DIY 迷你桌面时钟| 获取温湿度传感器数据(I2C设备驱动+SHT3x软件包)…-编程知识网

2.2. 添加软件 I2C 源码

打开了软件 I2C 的驱动框架之后,还要添加软件I2C的驱动底层实现,具体芯片的软件 I2C 驱动源码不同,本例中下载添加 STM32 系列的软件 I2C 驱动:Gitee 下载地址

链接:https://gitee.com/tyustli/tyustli/tree/master/stm32/soft-i2c

1git clone https://gitee.com/tyustli/tyustli.git

下载之后源码只有两个文件:

使用RT-Thread Studio DIY 迷你桌面时钟| 获取温湿度传感器数据(I2C设备驱动+SHT3x软件包)…-编程知识网

将这两个文件添加到项目中的drivers文件夹中:

使用RT-Thread Studio DIY 迷你桌面时钟| 获取温湿度传感器数据(I2C设备驱动+SHT3x软件包)…-编程知识网

回到RT-Thread Studio IDE,在项目名称上右击,选择刷新,即可在目录中看到添加的文件:

使用RT-Thread Studio DIY 迷你桌面时钟| 获取温湿度传感器数据(I2C设备驱动+SHT3x软件包)…-编程知识网

2.3. 注册 I2C 设备

软件 I2C 添加到工程中之后就可以调用软件 I2C 注册函数 rt_hw_i2c_init 来注册软件 I2C 设备了,该函数的原型如下:

1int rt_hw_i2c_init(char *name, rt_uint8_t scl, rt_uint8_t sda)

name:设备名称

scl:软件模拟I2C的SCL引脚

sda:软件模拟I2C的SDA引脚

在小熊派IoT开发板上,温湿度传感器SHT30连接在PB6(SCL)和PB7(SDA) ,所以在main.c文件中先添加头文件:

1#include <drv_soft_i2c.h>

然后在文件最后添加如下注册软件 I2C到系统中的代码:

1int register_i2c(void)
2{
3    rt_hw_i2c_init("i2c1", GET_PIN(B,6), GET_PIN(B,7));
4
5    return RT_EOK;
6}
7//注册到系统中,自动初始化设备
8INIT_BOARD_EXPORT(register_i2c);

添加完成之后点击编译,下载到开发板中运行,即可在串口终端中看到日志信息(绿色),提示I2C总线设备已注册成功:

使用RT-Thread Studio DIY 迷你桌面时钟| 获取温湿度传感器数据(I2C设备驱动+SHT3x软件包)…-编程知识网

因为main线程中循环打印对使用控制台有影响,所以将打印函数注释:

使用RT-Thread Studio DIY 迷你桌面时钟| 获取温湿度传感器数据(I2C设备驱动+SHT3x软件包)…-编程知识网

重新编译下载,在串口终端中输入命令list_device查看系统中注册的设备吗,再次确认I2C总线设备注册成功:

使用RT-Thread Studio DIY 迷你桌面时钟| 获取温湿度传感器数据(I2C设备驱动+SHT3x软件包)…-编程知识网

3. 添加SHT3x软件包

3.1. 搜索添加软件包

RT-Thread Studio有在线软件包中心,里面有非常丰富的软件包供用户使用,点击立即添加进入:

使用RT-Thread Studio DIY 迷你桌面时钟| 获取温湿度传感器数据(I2C设备驱动+SHT3x软件包)…-编程知识网

搜索SHT,使用的传感器型号为SHT30,所以添加SHT3x软件包:

使用RT-Thread Studio DIY 迷你桌面时钟| 获取温湿度传感器数据(I2C设备驱动+SHT3x软件包)…-编程知识网

添加之后,在项目设置中即可看到该软件包,右击可以查看软件包在线文档:

使用RT-Thread Studio DIY 迷你桌面时钟| 获取温湿度传感器数据(I2C设备驱动+SHT3x软件包)…-编程知识网

软件会自动打开该软件包的在线说明文档,在使用软件包之前,该文档必须要看:

使用RT-Thread Studio DIY 迷你桌面时钟| 获取温湿度传感器数据(I2C设备驱动+SHT3x软件包)…-编程知识网

接下来按Ctrl+S保存项目,软件会自动添加软件包代码到工程中,其中README.md是软件包详细使用文档,使用前必须要看:

使用RT-Thread Studio DIY 迷你桌面时钟| 获取温湿度传感器数据(I2C设备驱动+SHT3x软件包)…-编程知识网

接下来编译、下载项目到开发板中,查看串口终端输出。

3.2. 使用命令测试软件包

大部分软件包都提供测试命令,SHT3x软件包也是一样,提供了如下命令供测试:

1- sht3x probe <i2c_dev_name> <pu/pd>  --挂载SHT3x设备,需要指定i2c设备名称和上下拉方式,默认下拉
2- sht3x read --阅读SHT3x温湿度
3- sht3x status --读取查看状态寄存器值
4- sht3x reset --软件复位SHT3x
5- sht3x heater <on/off> --开/关heater

首先挂载SHT30温湿度传感器到之前注册的I2C总线设备上:

使用RT-Thread Studio DIY 迷你桌面时钟| 获取温湿度传感器数据(I2C设备驱动+SHT3x软件包)…-编程知识网

挂载之后可以进行查看寄存器,读取温湿度,复位,开/关heater操作,比如读取一次温度和湿度:

使用RT-Thread Studio DIY 迷你桌面时钟| 获取温湿度传感器数据(I2C设备驱动+SHT3x软件包)…-编程知识网

4. 获取温湿度传感器数据

在使用软件包提供的命令测试设备成功之后,创建一个线程,使用SHT3x软件包提供的API获取SHT3x数据。

在Applicaition分组之下,新建一个文件sht30_ccollect.c用于存放SHT3x获取数据的相关代码,编辑以下内容:

 1/*2 * Copyright (c) 2006-2019, RT-Thread Development Team3 *4 * SPDX-License-Identifier: Apache-2.05 *6 * Change Logs:7 * Date           Author       Notes8 * 2020-02-20     Mculover666  the first version9 */
10
11#include <rtthread.h>
12#include <board.h>
13#include <sht3x.h>
14
15#define THREAD_PRIORITY         25
16#define THREAD_STACK_SIZE       512
17#define THREAD_TIMESLICE        5
18
19static rt_thread_t tid1 = RT_NULL;
20
21/* 入口函数 */
22static void sht30_collect_thread_entry(void *parameter)
23{
24    sht3x_device_t  sht3x_device;
25
26    sht3x_device = sht3x_init("i2c1", 0x44);
27
28    while (1)
29    {
30        if(RT_EOK == sht3x_read_singleshot(sht3x_device))
31        {
32            rt_kprintf("sht30 humidity   : %d.%d  ", (int)sht3x_device->humidity, (int)(sht3x_device->humidity * 10) % 10);
33            rt_kprintf("temperature: %d.%d\n", (int)sht3x_device->temperature, (int)(sht3x_device->temperature * 10) % 10);
34        }
35        else
36        {
37            rt_kprintf("read sht3x fail.\r\n");
38            break;
39        }
40        rt_thread_mdelay(2000);
41    }
42}
43
44/* 创建线程 */
45int sht30_collect(void)
46{
47    /* 创建线程*/
48    tid1 = rt_thread_create("sht30_collect_thread",
49            sht30_collect_thread_entry, RT_NULL,
50                            THREAD_STACK_SIZE,
51                            THREAD_PRIORITY, THREAD_TIMESLICE);
52
53    /* 如果获得线程控制块,启动这个线程 */
54    if (tid1 != RT_NULL)
55        rt_thread_startup(tid1);
56
57    return 0;
58}

在main.c中测试该程序:

使用RT-Thread Studio DIY 迷你桌面时钟| 获取温湿度传感器数据(I2C设备驱动+SHT3x软件包)…-编程知识网

编译下载程序,在串口终端查看结果:

使用RT-Thread Studio DIY 迷你桌面时钟| 获取温湿度传感器数据(I2C设备驱动+SHT3x软件包)…-编程知识网

往期回顾

使用RT-Thread Studio DIY 迷你桌面时钟| 获取温湿度传感器数据(I2C设备驱动+SHT3x软件包)…-编程知识网

1.开源项目|RT-Thread 软件包应用作品:水墨屏桌面台历

2.一站式开发工具:RT-Thread Studio 正式发布

3.熊大:致社区小伙伴们的信

4.STM32 上使用 USB Host 读写 U 盘

5.智能家居 DIY 教程连载4——手把手教你连云

6.社区专访|王君杰:软件包制作经验及使用体验分享

7.“新冠”之下,如何安全返程?如何安全居家办公?

8.RT-Thread视频中心正式上线,在家也能高效学习!

你可以添加微信17775982065为好友,注明:公司+姓名,拉进 RT-Thread 官方微信交流群!

使用RT-Thread Studio DIY 迷你桌面时钟| 获取温湿度传感器数据(I2C设备驱动+SHT3x软件包)…-编程知识网

RT-Thread

让物联网终端的开发变得简单、快速,芯片的价值得到最大化发挥。Apache2.0协议,可免费在商业产品中使用,不需要公布源码,无潜在商业风险。

长按二维码,关注我们

使用RT-Thread Studio DIY 迷你桌面时钟| 获取温湿度传感器数据(I2C设备驱动+SHT3x软件包)…-编程知识网点击阅读原文,进入RT-Thread GitHub

使用RT-Thread Studio DIY 迷你桌面时钟| 获取温湿度传感器数据(I2C设备驱动+SHT3x软件包)…-编程知识网

你点的每个“在看”,我都认真当成了喜欢