# 如何用ShineBlink Core实现温湿度计Oled屏显示 ## 一、项目概述 本文将详细介绍如何使用ShineBlink Core开发板配合温湿度传感器和OLED显示屏,搭建一个实时显示环境温湿度的监测系统。该项目适合物联网初学者,通过简单的代码即可实现硬件交互。 --- ## 二、硬件准备 ### 所需材料清单 1. **ShineBlink Core开发板**(主控芯片为EFM32TG11B) 2. **DHT11温湿度传感器**(或更精确的SHT30) 3. **0.96寸OLED显示屏**(I2C接口,128x64分辨率) 4. 杜邦线若干 5. USB数据线(供电与调试) ### 硬件连接 | 设备引脚 | ShineBlink Core接口 | |----------------|---------------------| | DHT11 VCC | 3.3V | | DHT11 GND | GND | | DHT11 DATA | GPIO_0 | | OLED VCC | 3.3V | | OLED GND | GND | | OLED SCL | I2C_SCL (GPIO_8) | | OLED SDA | I2C_SDA (GPIO_9) | > **注意**:不同型号的OLED可能需要调整I2C地址(通常为0x3C或0x78)。 --- ## 三、软件开发环境配置 ### 1. 安装ShineBlink IDE 从[官网](https://www.shineblink.com)下载IDE,支持Windows/macOS系统。 ### 2. 新建工程 创建空白项目,选择`EFM32TG11B`作为目标芯片。 ### 3. 添加依赖库 - `DHTxx`库(用于温湿度传感器) - `SSD1306`库(驱动OLED屏) --- ## 四、代码实现 ### 1. 初始化硬件接口 ```lua -- 配置DHT11传感器 LIB_Dht11Config("GPIO_0") -- 初始化OLED(I2C0接口,地址0x3C) LIB_SSD1306Config("I2C0", 0x3C)
while true do -- 读取温湿度数据 humi, temp = LIB_Dht11GetResult() -- OLED清屏并设置字体 LIB_SSD1306Clear() LIB_SSD1306SetFont(1) -- 选择16pt字体 -- 显示标题 LIB_SSD1306Print(10, 5, "Environment Monitor") -- 显示温度数据 LIB_SSD1306Print(15, 30, string.format("Temp: %.1f C", temp)) -- 显示湿度数据 LIB_SSD1306Print(15, 50, string.format("Humi: %.1f %%", humi)) -- 更新屏幕显示 LIB_SSD1306Refresh() -- 每2秒更新一次数据 LIB_DelayMs(2000) end
LIB_Dht11GetResult()
:返回湿度(%)和温度(℃)两个值。LIB_SSD1306Print(x,y,text)
:在指定坐标显示文本。string.format()
格式化数据保留1位小数。-- 检查传感器返回值是否有效 if humi ~= nil and temp ~= nil then -- 正常显示数据 else LIB_SSD1306Print(10, 30, "Sensor Error!") end
通过绘制折线图实现历史数据可视化:
-- 存储最近10次数据 temp_history = {} for i=1,10 do temp_history[i] = 0 end -- 在主循环中更新数据 table.remove(temp_history, 1) table.insert(temp_history, temp) LIB_SSD1306DrawLineChart(5, 20, 120, 40, temp_history, 0, 50)
启用ShineBlink的睡眠模式:
LIB_SetSleep("1s") -- 每秒唤醒一次采集数据
LIB_DelayMs()
的间隔时间通过本教程,我们实现了基于ShineBlink Core的温湿度监测系统。该方案具有以下优势: - 硬件成本低于50元 - 开发时间仅需1小时 - 待机功耗可低至10μA
欢迎在评论区分享你的实现效果或改进方案! “`
(全文约1250字)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。