本帖最后由 aramy 于 2025-10-15 10:09 编辑  
 
自打上次使用esp-idf驱动起来了GDI接口的显示屏后,就想着同时驱动起GDI接口中的I2C总线的温湿度传感器(SHT30)。可是使用esp-idf的例程,无论是硬件I2C还是软件模拟I2C,去读取sht20都失败了。 
  
来来回回搞了几天,无奈技术太菜,解决不了问题。最终放弃使用esp-idf。 
  
  
切换回Arduino编程,感觉一切又变得简单起来了。第一步:驱动SPI屏幕。扩展板上有块ST7789屏幕,使用SIP总线,通过GDI接口与开发板连接。查阅官方文档,可以查到GDI口中对应的管脚信息。安装第三方屏幕驱动库"AdafruitST7789",然后在程序中修改对应管脚。    
第二步:驱动扩展板上的温湿度传感器SHT30。这里也是使用第三方驱动库。 需要留意一下,GDI接口中的I2C接口是接在9、10两个管脚上的。需要在Wire类初始化时,修改一下对应的管脚。 
			
			
			- #include "Adafruit_SHT31.h"
 - #define SDA_PIN 9
 - #define SCL_PIN 10
 - 
 - Wire.begin(SDA_PIN, SCL_PIN);
 
  复制代码 第三步:就是把传感器收集来的数据通过屏幕展示出来。- #include <Adafruit_GFX.h>     // Core graphics library
 - #include <Adafruit_ST7789.h>  // Hardware-specific library for ST7789
 - #include <SPI.h>
 - #include <Wire.h>
 - #include "Adafruit_SHT31.h"
 - #define SDA_PIN 9
 - #define SCL_PIN 10
 - 
 - #define TFT_CS 27
 - #define TFT_RST 26
 - #define TFT_DC 8
 - #define TFT_BLK 15
 - #define TFT_MOSI 24  // Data out
 - #define TFT_SCLK 23  // Clock out
 - 
 - Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_MOSI, TFT_SCLK, TFT_RST);
 - Adafruit_SHT31 sht31 = Adafruit_SHT31();
 - 
 - void setup(void) {
 -   Serial.begin(115200);
 -   Wire.begin(SDA_PIN, SCL_PIN);
 -   if (!sht31.begin(0x44)) {
 -     Serial.println("找不到SHT31");
 -     while (1) delay(1);
 -   }
 - 
 -   pinMode(TFT_BLK, OUTPUT);
 -   digitalWrite(TFT_BLK, HIGH);  //开背光
 -   tft.init(172, 320);           // Init ST7789 280x240
 -   tft.setSPISpeed(40000000);
 -   //  tft.fillScreen(ST77XX_BLACK);
 - 
 -   tft.setTextWrap(false);
 - }
 - 
 - void loop() {
 -   char m_str[6];
 -   float temp = sht31.readTemperature();
 -   float hum = sht31.readHumidity();
 -   if (!isnan(temp)) {
 -     Serial.print("温度: ");
 -     Serial.print(temp);
 -     Serial.println(" *C");
 -   } else {
 -     Serial.println("读取温度失败");
 -   }
 -   if (!isnan(hum)) {
 -     Serial.print("湿度: ");
 -     Serial.print(hum);
 -     Serial.println(" %");
 -   } else {
 -     Serial.println("读取湿度失败");
 -   }
 -   tft.fillScreen(ST77XX_BLACK);
 -   tft.setTextSize(5);
 -   tft.setTextColor(ST77XX_RED);
 -   tft.setCursor(5, 50);
 -   tft.println("T:");
 -   tft.setCursor(5, 100);
 -   dtostrf(temp, 3, 1, m_str); 
 -   tft.println(m_str);
 - 
 -   tft.setTextColor(ST77XX_GREEN);
 -   tft.setCursor(0, 180);
 -   tft.println("H:");
 -   tft.setCursor(0, 230);  
 -   dtostrf(hum, 3, 1, m_str); 
 -   tft.println(m_str);
 -   delay(2000);
 - }
 
  复制代码
    
成功读取并展示温湿度信息。不过温度与实际偏高,其原因是SHT30安装位置太贴近ESP32-C5的开发板了,MCU工作时导致周围温度升高。 
 
 
 
 |