ESP32-S3 не считывание данных BME680

Я собрал печатную плату на базе контроллера ESP32-S3-WROOM-1-N16R2. Я запрограммировал датчик BME680 с помощью этого микроконтроллера. Распиновка у меня следующая:

BME_SCK 38

BME_MISO 19

BME_MOSI 15

BME_CS 5

Это мой код Arduino,

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include "Adafruit_BME680.h"

#define BME_SCK 38
#define BME_MISO 19
#define BME_MOSI 15
#define BME_CS 5

#define SEALEVELPRESSURE_HPA (1013.25)

//Adafruit_BME680 bme(&Wire); // I2C
//Adafruit_BME680 bme(&Wire1); // пример I2C на другой шине
//Adafruit_BME680 bme(BME_CS); // аппаратный SPI
Adafruit_BME680 bme(BME_CS, BME_MOSI, BME_MISO,  BME_SCK);

void setup() {
 Serial.begin(9600);
 while (!Serial);

 SPI.begin(BME_SCK, BME_MISO, BME_MOSI, BME_CS);
 SPI.setDataMode(SPI_MODE0); // Установить режим SPI (0, 1, 2 или 3)

 Serial.println(F("BME680 test"));

 if (!bme.begin()) {
   Serial.println("Could not find a valid BME680 sensor, check wiring!");
   while (1);
 } else {
   Serial.println("BME680 sensor initialized successfully.");
 }

 // Настраиваем передискретизацию и инициализацию фильтра
 bme.setTemperatureOversampling(BME680_OS_8X);
 bme.setHumidityOversampling(BME680_OS_2X);
 bme.setPressureOversampling(BME680_OS_4X);
 bme.setIIRFilterSize(BME680_FILTER_SIZE_3);
 bme.setGasHeater(320, 150); // 320*C на 150 мс
}

void loop() {
  if (! bme.performReading()) {
   Serial.println("Failed to perform reading :(");
   return;
  }
 Serial.print("Temperature = ");
 Serial.print(bme.temperature);
 Serial.println(" *C");

 Serial.print("Pressure = ");
 Serial.print(bme.pressure / 100.0);
 Serial.println(" hPa");

 Serial.print("Humidity = ");
 Serial.print(bme.humidity);
 Serial.println(" %");

 Serial.print("Gas = ");
 Serial.print(bme.gas_resistance / 1000.0);
 Serial.println(" KOhms");

 Serial.print("Approx. Altitude = ");
 Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
 Serial.println(" m");

 Serial.println();
 delay(2000);
}

Я получил такой вывод:

R~�g�BME680 test
Could not find a valid BME680 sensor, check wiring!
R~R~�g�BME680 test
Could not find a valid BME680 sensor, check wiring!
R~�g�R��g�BME680 test
Could not find a valid BME680 sensor, check wiring!

Я просматриваю техническое описание ESP32-S3, Там написано: Любые выводы GPIO мы назначим для коммуникаций SPI, I2C. Ссылка на техническое описание для справки, https://www.espressif.com/sites/default/files/documentation/esp32-s3-wroom-1_wroom-1u_datasheet_en.pdf Техническое описание серии ESP32-S3, https://www.espressif.com/sites/default/files/documentation/esp32-s3_datasheet_en.pdf

И ещё я подключил те же пины в ESP32-S3 EVK и запрограммировал на BME680. Данные выдаются отлично. Не знаю, в чём проблема. Как решить эту проблему?

, 👍1

Обсуждение

Вывод 38 модуля — GPIO2, а не GPIO38. Следовательно, команда #define BME_SCK 38 неверна (все определения выводов неверны). Ваш код использует неверные ссылки на GPIO. Ознакомьтесь с описанием выводов Arduino ESP32 для [ESP32-S3] (https://github.com/espressif/arduino-esp32/blob/master/variants/esp32s3/pins_arduino.h#L28-L31), а также с Таблицей 3 описания выводов [ESP32-S3-WROOM-1 datasheet] (https://www.espressif.com/sites/default/files/documentation/esp32-s3-wroom-1_wroom-1u_datasheet_en.pdf)., @hcheung

Спасибо, @hcheung! Я по ошибке обновил номера GPIO. Теперь всё отлично отображается для выходов BME680., @Kuralmozhi


1 ответ


0

Я не вижу никаких ошибок в коде. Проверьте, пожалуйста, на наличие оборванных дорожек, холодных спаев, коротких замыканий и т. д. С помощью мультиметра проверьте целостность каждого сигнального контакта SPI (SCK, MISO, MOSI и CS) между ESP32-S3 и датчиком. Вот схема, которую можно использовать для перекрёстной ссылки.

https://www.pcbway.com/project/shareproject/IoT_Indoor_system_with_ESP32_to_monitor_Temperature_Humidity_Pressure_and_Air_a1cf31ba.html

,