Funpack5-4 - 用FRDM-MCXN236开发板制作的温湿度计
该项目使用了FRDM-MCXN236开发板+SHT30,实现了读取环境温湿度信息的设计,它的主要功能为:使用FRDM-MCXN236开发板,配合SHT30温湿度传感器,读取环境温湿度信息,并在OLED屏幕上显示。
标签
OLED
SHT30
FRDM-MCXN236
Funpack5-4
Iris_weile
更新2026-10-16
广东医科大学
15

一、硬件介绍:

FRDM-MCXN236开发板是来自NXP 一款紧凑型、可扩展的高性价比开发板,专为基于 MCX N23x 系列微控制器的快速原型设计而打造。该开发板的核心是一颗 MCX N236 微控制器,搭载 Arm Cortex-M33 内核,主频最高可达 150 MHz,配备 1MB 双组闪存(支持完整 ECC RAM)和 352KB ECC RAM,并集成 SmartDMA 加速器,能够高效地将工作负载分配到模拟与数字外设上。

二、任务选择:

这次任务,任务2:环境数据采集与显示;基于 FRDM-MCXN236 开发板,连接 I2C 传感器,实现环境数据采集与实时显示。

功能要求:

  1. 通过 I2C 读取传感器数据
  2. 周期性采集环境信息
  3. 通过串口输出采集结果
  4. 使用 LED 指示系统运行状态
  5. 数据刷新周期不大于1秒


三、设计思路:

手头有一些I2C接口的设备,计划使用FRDM-MCXN236读取SHT30传感器,获得环境温湿度,然后在OLED屏幕上显示出来。

image.png

f6994d92e236f3d19cb6a59e90df2748.jpg

准备好硬件。温湿度传感器是ENV III,核心是一个SHT30芯片。OLED屏幕,是一个SSD1306主控的128X64的屏幕。使用一个I2C扩展板,连接到FRDM-MCXN236开发板上,I2C总线的SDA接P4_0;SCL接P4_1,使用5V给传感器和屏幕供电。

四、任务实现:

系统编程我使用官方的MCUXpresso IDE v25.6。使用例程“frdmmcxn236_lpi2c_edma_b2b_transfer_master”做为基础,来修改实现自己的功能。

image.png

例程中使用了额DMA进行I2C总线数据的传输,我这里仅仅需要读取SHT30的数据,速度不快,所以用不着DMA传输,将DMA传输全部删掉。保留I2C总线的初始化。添加SHT30的读取方法。

static void sht30_read(int *temp, int *humi) {
uint8_t cmd[2];
cmd[0] = 0x2C;
cmd[1] = 0x06;
uint8_t rxBuff[6];
lpi2c_master_transfer_t xfer = { 0 };
xfer.slaveAddress = SHT30_I2C_ADDR;
xfer.direction = kLPI2C_Write;
xfer.data = cmd;
xfer.dataSize = 2;
xfer.flags = kLPI2C_TransferDefaultFlag;
LPI2C_MasterTransferBlocking(EXAMPLE_I2C_MASTER, &xfer);
SDK_DelayAtLeastUs(20000, SystemCoreClock);
xfer.direction = kLPI2C_Read;
xfer.data = rxBuff;
xfer.dataSize = 6;
LPI2C_MasterTransferBlocking(EXAMPLE_I2C_MASTER, &xfer);
uint16_t t_raw = ((uint16_t) rxBuff[0] << 8) | rxBuff[1];
uint16_t h_raw = ((uint16_t) rxBuff[3] << 8) | rxBuff[4];
*temp = -4500 + 17500 * (int64_t) t_raw / 65535;
*humi = -600 + 12500 * (int64_t) h_raw / 65535;
}

取到SHT30的温湿度数据后,在OLED屏幕上显示温湿度信息。SSD1306屏幕还是很常见的OLED屏幕,网上的驱动资料很多,这里将OLED屏幕的驱动独立使用文件载入。最后在主函数中直接调用绘制温湿度信息。温度使用摄氏度,是的使用百分比。

/* ---------- OLED 显示界面绘制 ---------- */
static void draw_sensor_screen(int t_sht, int h_sht)
{
OLED_Clear();
OLED_DrawString(1, 0, "SHT30", 16, 1);
OLED_DrawLine(0, 16, 127, 16, 1);
/* 温度显示 */
OLED_DrawString(0, 20, "Temp:", 16, 1);
OLED_DrawInt(40, 20, t_sht / 100, 16, 1);
OLED_DrawChar(56, 20, '.', 16, 1);
/* 两位数小数部分 */
int t_frac = t_sht % 100;
if (t_frac < 0) t_frac = -t_frac;
OLED_DrawInt(64, 20, t_frac, 16, 1);
OLED_DrawString(85, 20, "C", 16, 1);
/* 湿度显示 */
OLED_DrawString(0, 40, "Humi:", 16, 1);
OLED_DrawInt(40, 40, h_sht / 100, 16, 1);
OLED_DrawChar(56, 40, '.', 16, 1);
int h_frac = h_sht % 100;
if (h_frac < 0) h_frac = -h_frac;
OLED_DrawInt(64, 40, h_frac, 16, 1);
OLED_DrawString(85, 40, "%RH", 16, 1);
OLED_DrawLine(0, 60, 127, 60, 1);
OLED_Refresh();
}

按任务要求,额外添加了板子上的LED灯的驱动,在读取温湿度时,板子上的绿色LED灯闪烁。主函数中循环读取SHT30,然后发送串口显示。

int main(void) {
BOARD_InitHardware();
lpi2c_master_config_t masterConfig;
LPI2C_MasterGetDefaultConfig(&masterConfig);
masterConfig.baudRate_Hz = 100000U;
LPI2C_MasterInit(EXAMPLE_I2C_MASTER, &masterConfig,
LPI2C_MASTER_CLOCK_FREQUENCY);
SDK_DelayAtLeastUs(50000, SystemCoreClock);
OLED_Init(EXAMPLE_I2C_MASTER);

const port_pin_config_t led_pin_config = {
.pullSelect = kPORT_PullDisable,
.slewRate = kPORT_FastSlewRate,
.openDrainEnable = kPORT_OpenDrainDisable,
.driveStrength = kPORT_LowDriveStrength,
.mux = kPORT_MuxAlt0,
.inputBuffer = kPORT_InputBufferEnable,
.invertInput = kPORT_InputNormal,
.lockRegister = kPORT_UnlockRegister,
};
PORT_SetPinConfig(PORT4, 17U, &led_pin_config);
PORT_SetPinConfig(PORT4, 18U, &led_pin_config);
PORT_SetPinConfig(PORT4, 19U, &led_pin_config);

LED_GREEN_INIT(LOGIC_LED_OFF);
LED_RED_INIT(LOGIC_LED_OFF);

while (1) {
int t_sht, h_sht;
sht30_read(&t_sht, &h_sht);
PRINTF("SHT30: %d.%02d C, %d.%02d %%RH\r\n", t_sht / 100, t_sht % 100,
h_sht / 100, h_sht % 100);
draw_sensor_screen(t_sht, h_sht);
LED_GREEN_TOGGLE();
SDK_DelayAtLeastUs(1000000, SystemCoreClock);
}
}

五、效果展示:

环境文档的显示。

1cecb586ff760ea5ae76136729bc373a.jpg

543c746b19fbb891338976cb08348c33.jpg

串口显示。

image.png

LED灯的闪烁。

e43ae955e5549ef6af76bc75698f0372.jpg


六、心得体会:

本次项目尝试了驱动I2C总线,驱动了SH30传感器,驱动OLED屏幕显示。从完成整个项目中收获了很多乐趣,也尝试了在编程过程中使用AI辅助编程,效率提升了很多。感谢硬禾科技和DigiKey,期待下一次的活动。



附件下载
frdmmcxn236_lpi2c_edma_b2b_transfer_master.zip
团队介绍
单片机新手
团队成员
Iris_weile
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号