2025-10-15 10:09:07 [显示全部楼层]
28浏览
查看: 28|回复: 0

[ESP8266/ESP32] FireBeetle 2 ESP32-C5 使用GDI接口显示温湿度

[复制链接]
本帖最后由 aramy 于 2025-10-15 10:09 编辑

自打上次使用esp-idf驱动起来了GDI接口的显示屏后,就想着同时驱动起GDI接口中的I2C总线的温湿度传感器(SHT30)。可是使用esp-idf的例程,无论是硬件I2C还是软件模拟I2C,去读取sht20都失败了。
FireBeetle 2 ESP32-C5 使用GDI接口显示温湿度图1
来来回回搞了几天,无奈技术太菜,解决不了问题。最终放弃使用esp-idf。

FireBeetle 2 ESP32-C5 使用GDI接口显示温湿度图2
切换回Arduino编程,感觉一切又变得简单起来了。
第一步:驱动SPI屏幕。扩展板上有块ST7789屏幕,使用SIP总线,通过GDI接口与开发板连接。查阅官方文档,可以查到GDI口中对应的管脚信息。安装第三方屏幕驱动库"AdafruitST7789",然后在程序中修改对应管脚。
FireBeetle 2 ESP32-C5 使用GDI接口显示温湿度图3FireBeetle 2 ESP32-C5 使用GDI接口显示温湿度图4
第二步:驱动扩展板上的温湿度传感器SHT30。这里也是使用第三方驱动库。
FireBeetle 2 ESP32-C5 使用GDI接口显示温湿度图5
需要留意一下,GDI接口中的I2C接口是接在9、10两个管脚上的。需要在Wire类初始化时,修改一下对应的管脚。
  1. #include "Adafruit_SHT31.h"
  2. #define SDA_PIN 9
  3. #define SCL_PIN 10
  4. Wire.begin(SDA_PIN, SCL_PIN);
复制代码
第三步:就是把传感器收集来的数据通过屏幕展示出来。
  1. #include <Adafruit_GFX.h>     // Core graphics library
  2. #include <Adafruit_ST7789.h>  // Hardware-specific library for ST7789
  3. #include <SPI.h>
  4. #include <Wire.h>
  5. #include "Adafruit_SHT31.h"
  6. #define SDA_PIN 9
  7. #define SCL_PIN 10
  8. #define TFT_CS 27
  9. #define TFT_RST 26
  10. #define TFT_DC 8
  11. #define TFT_BLK 15
  12. #define TFT_MOSI 24  // Data out
  13. #define TFT_SCLK 23  // Clock out
  14. Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
  15. Adafruit_SHT31 sht31 = Adafruit_SHT31();
  16. void setup(void) {
  17.   Serial.begin(115200);
  18.   Wire.begin(SDA_PIN, SCL_PIN);
  19.   if (!sht31.begin(0x44)) {
  20.     Serial.println("找不到SHT31");
  21.     while (1) delay(1);
  22.   }
  23.   pinMode(TFT_BLK, OUTPUT);
  24.   digitalWrite(TFT_BLK, HIGH);  //开背光
  25.   tft.init(172, 320);           // Init ST7789 280x240
  26.   tft.setSPISpeed(40000000);
  27.   //  tft.fillScreen(ST77XX_BLACK);
  28.   tft.setTextWrap(false);
  29. }
  30. void loop() {
  31.   char m_str[6];
  32.   float temp = sht31.readTemperature();
  33.   float hum = sht31.readHumidity();
  34.   if (!isnan(temp)) {
  35.     Serial.print("温度: ");
  36.     Serial.print(temp);
  37.     Serial.println(" *C");
  38.   } else {
  39.     Serial.println("读取温度失败");
  40.   }
  41.   if (!isnan(hum)) {
  42.     Serial.print("湿度: ");
  43.     Serial.print(hum);
  44.     Serial.println(" %");
  45.   } else {
  46.     Serial.println("读取湿度失败");
  47.   }
  48.   tft.fillScreen(ST77XX_BLACK);
  49.   tft.setTextSize(5);
  50.   tft.setTextColor(ST77XX_RED);
  51.   tft.setCursor(5, 50);
  52.   tft.println("T:");
  53.   tft.setCursor(5, 100);
  54.   dtostrf(temp, 3, 1, m_str);
  55.   tft.println(m_str);
  56.   tft.setTextColor(ST77XX_GREEN);
  57.   tft.setCursor(0, 180);
  58.   tft.println("H:");
  59.   tft.setCursor(0, 230);  
  60.   dtostrf(hum, 3, 1, m_str);
  61.   tft.println(m_str);
  62.   delay(2000);
  63. }
复制代码
FireBeetle 2 ESP32-C5 使用GDI接口显示温湿度图6FireBeetle 2 ESP32-C5 使用GDI接口显示温湿度图7
成功读取并展示温湿度信息。不过温度与实际偏高,其原因是SHT30安装位置太贴近ESP32-C5的开发板了,MCU工作时导致周围温度升高。



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail