基于 STM32+SHT30 设计的环境温度与湿度检测系统 (IIC 模拟时序)
一、项目功能介绍
当前介绍基于 STM32F103ZCT6 芯片设计的环境温度与湿度检测系统设计过程。当前系统通过 SHT30 温湿度传感器采集环境温度和湿度数据,并通过模拟 IIC 时序协议将数据传输到 STM32 芯片上。然后,STM32 芯片通过处理这些数据并将它们显示在 0.91 寸 OLED 显示屏上,以便用户能够方便地观察环境温度和湿度的变化情况。
系统的主控芯片采用了 STM32F103ZCT6,这是一款高性能的 32 位 ARM Cortex-M3 微控制器,具有丰富的外设和存储器资源,可满足各种应用的需求。温湿度检测传感器采用了 SHT30,这是一款高精度的数字式温湿度传感器,具有快速响应、低功耗、高可靠性等特点。
为了实现数据的显示,系统采用了 0.91 寸 OLED 显示屏,驱动芯片是 SSD1306,接口是 IIC 协议。OLED 显示屏也是通过模拟 IIC 时序进行驱动,这种方式具有简单、可靠、低功耗等优点。
(1)开发板连接 SHT30 实物图
(2)OLED 显示屏
(3)测量的温度湿度串口打印
二、设计思路
2.1 系统硬件设计
主控芯片采用 STM32F103ZCT6,该芯片具有 72MHz 主频,具有丰富的外设资源,包括多个定时器、多个串口、多个 I2C 接口等。温湿度传感器采用 IIC 接口的 SHT30,该传感器具有高精度、低功耗、数字输出等特点,可提供温度和湿度数据。OLED 显示屏采用 0.91 寸 OLED 显示屏,驱动芯片是 SSD1306,接口也是是 IIC 协议。
2.2 系统软件设计
系统软件设计采用 STM32CubeMX 和 Keil MDK-ARM 工具进行开发。
实现步骤:
(1)使用 STM32CubeMX 进行芯片引脚配置和初始化代码生成。
(2)编写 SHT30 温湿度传感器的 IIC 通信驱动程序。
(3)编写 SSD1306 OLED 显示屏的 IIC 通信驱动程序。
(4)编写温湿度检测程序,通过 SHT30 传感器读取温度和湿度数据,并将数据显示在 OLED 显示屏上。
(5)编写主程序,将以上各个程序整合在一起,并进行系统初始化和数据处理。
2.3 系统实现
(1)系统硬件实现
系统硬件实现包括主控板、SHT30 传感器模块和 OLED 显示屏模块。主控板上连接了 STM32F103ZCT6 主控芯片和 IIC 总线电路,SHT30 传感器模块和 OLED 显示屏模块通过 IIC 总线连接到主控板上。
(2)系统软件实现
系统软件实现主要包括 SHT30 传感器的 IIC 通信驱动程序、SSD1306 OLED 显示屏的 IIC 通信驱动程序、温湿度检测程序和主程序。其中,SHT30 传感器的 IIC 通信驱动程序和 SSD1306 OLED 显示屏的 IIC 通信驱动程序都是基于 STM32 的硬件 IIC 接口实现的,温湿度检测程序通过 SHT30 传感器读取温度和湿度数据,并将数据显示在 OLED 显示屏上。主程序将以上各个程序整合在一起,并进行系统初始化和数据处理。
三、代码实现
3.1 主程序代码
以下是基于 STM32 设计的环境温度与湿度检测系统的主函数 main.c 的代码实现:
代码中主要实现了以下功能:
(1)初始化 IIC 总线、SHT30 传感器和 OLED 显示屏。
(2)定时读取 SHT30 传感器的温度和湿度数据。
(3)将温度和湿度显示在 OLED 显示屏上。
代码中使用了 systick.h、sht30.h、i2c.h 和 oled.h 等库文件,需要将这些文件添加到工程中。其中 oled.h 文件提供了显示中文、字符串和刷新缓冲区等接口,可以在 OLED 显示屏上显示信息。具体代码实现可以参考 oled.c 文件。
测试时,需要将 OLED 显示屏和 SHT30 传感器按照对应的引脚连接好,并将代码烧录到 STM32F103ZCT6 芯片中。如果一切正常,OLED 显示屏上就会不断地显示当前温度和湿度值。
3.2 SHT30 驱动代码
以下是 SHT30 的驱动代码:
sht30.h:
sht30.c:
代码中定义了 SHT30_CMD_HIGH 和 SHT30_CMD_MIDDLE 两个命令,用于启动温湿度转换。在 sht30_init 函数中,发送初始化命令;在 sht30_read_temp_humi 函数中,先发送读取命令,等待 10 毫秒后读取温度和湿度的原始值。最后根据公式计算出实际的温度和湿度值,并将它们保存到 temp 和 humi 指针所指向的内存中。
代码中调用了 i2c_write_data、i2c_start、i2c_write_byte、i2c_wait_ack、i2c_read_byte 和 i2c_stop 等 IIC 相关函数,这些函数的实现可以看 i2c.c 文件。在使用 SHT30 传感器之前,需要初始化 IIC 总线和 SHT30 传感器。
3.3 OLED 显示屏驱动代码
以下是 OLED 显示屏相关代码:
oled.h:
oled.c:
代码中定义了 OLED_WIDTH 和 OLED_HEIGHT 两个常量,表示 OLED 显示屏的宽度和高度。在 oled_init 函数中,发送初始化命令,将 OLED 显示屏设置为正常显示模式。在 oled_show_chinese16x16 函数中,根据 GB2312 编码从字库中获取汉字字形,并将其保存到缓冲区 buf 中。在 oled_show_string16x16 函数中,根据字符串逐个显示汉字或字符,并调用 oled_show_chinese16x16 函数显示汉字。在 oled_refresh 函数中,设置页地址和列地址,并将缓冲区 buf 中的数据写入到 OLED 显示屏上。
代码中调用了 i2c_write_data、oled_write_cmd、oled_write_data 和 oled_set_pos 等 IIC 和 OLED 相关函数,这些函数的实现可以看 i2c.c 文件。
3.4 IIC 模拟时序代码(SHT30)
i2c.h:
i2c.c:
上面的代码是 SHT30 的 IIC 模拟时序代码,利用 GPIO 模拟 SCL 和 SDA 信号线。
在 i2c_init 函数中,初始化 SCL 和 SDA 引脚为开漏输出模式。在 i2c_start 函数中,发送起始位。在 i2c_stop 函数中,发送停止位。在 i2c_write_byte 函数中,按位写入字节并接收应答位。在 i2c_read_byte 函数中,按位读取字节并发送应答位。在 i2c_write_data 函数中,先发送起始位,然后发送设备地址和写方向,再发送数据,最后发送停止位。在 i2c_read_data 函数中,先发送起始位,然后发送设备地址和读方向,接着按字节读取数据,最后发送停止位。
3.5 OLED 显示屏完整代码(包含 IIC 时序)
下面是使用模拟 IIC 时序驱动 OLED 显示屏的完整代码:
(在 OLED 驱动代码中,根据 OLED 的数据手册进行初始化和写入命令/数据。)
oled.h:
oled.c:
上面代码里 oled_init 函数用于初始化 OLED,包括打开 I2C 接口、依次发送多条命令以设置 OLED 参数。oled_clear 函数用于清除 OLED 屏幕上的所有显示内容。oled_display_on 和 oled_display_off 函数用于控制 OLED 的开关。oled_draw_point 函数用于绘制一个像素点。oled_draw_line 函数用于绘制一条直线。oled_draw_rectangle 函数用于绘制一个矩形。oled_draw_circle 函数用于绘制一个圆形。oled_show_char 函数用于绘制一个 ASCII 字符。oled_show_string 函数可以显示一个字符串。oled_show_digit 函数可以显示一个数字。
四、总结
本项目是基于 STM32F103ZCT6 芯片设计的环境温度与湿度检测系统。系统通过 SHT30 温湿度传感器采集环境温度和湿度数据,并通过模拟 IIC 时序协议将数据传输到 STM32 芯片上。然后,STM32 芯片通过处理这些数据并将它们显示在 0.91 寸 OLED 显示屏上,以便用户能够方便地观察环境温度和湿度的变化情况。
在本项目中,选择了 STM32F103ZCT6 作为主控芯片。该芯片具有高性能、低功耗、丰富的外设和存储器资源等特点,非常适合用于嵌入式系统设计。然后,选择了 SHT30 温湿度传感器作为环境温度和湿度的检测器。该传感器具有高精度、快速响应、低功耗等特点,可以准确地测量环境温度和湿度。
为了实现数据的显示,采用了 0.91 寸 OLED 显示屏,驱动芯片是 SSD1306,接口是 IIC 协议。OLED 显示屏也是通过模拟 IIC 时序进行驱动,这种方式具有简单、可靠、低功耗等优点。
在软件设计方面,使用了 Keil MDK 作为开发工具,并使用 STM32CubeMX 进行芯片初始化和外设配置。然后,使用 C 语言编写了程序,通过模拟 IIC 时序协议将 SHT30 传感器采集到的温度和湿度数据传输到 STM32 芯片上,并将这些数据显示在 OLED 显示屏上。同时还添加了温度和湿度的校准、数据的存储和读取等功能。
在系统实现方面,进行了硬件设计、软件开发、系统调试和测试等工作。通过不断的优化和调试,最终实现了一个功能稳定、性能优良的环境温度与湿度检测系统。
版权声明: 本文为 InfoQ 作者【DS小龙哥】的原创文章。
原文链接:【http://xie.infoq.cn/article/d786395e403e16c4f40539a40】。文章转载请联系作者。
评论