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. Данные выдаются отлично. Не знаю, в чём проблема. Как решить эту проблему?
@Kuralmozhi, 👍1
Обсуждение1 ответ
Я не вижу никаких ошибок в коде. Проверьте, пожалуйста, на наличие оборванных дорожек, холодных спаев, коротких замыканий и т. д. С помощью мультиметра проверьте целостность каждого сигнального контакта 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
- esp32 Stack canary watchpoint срабатывает
- Как очистить кучу памяти в esp32
- WindowsError(31, "Устройство, подключенное к системе, не функционирует") в arduino
- bh1750 lightsesor не будет работать
- MD5 файла не соответствует данным во флэш-памяти. Ошибка ESP32 S3.
- ESP32: почему malloc может выделять только 126888 байт с кучей 402540 байт?
- Adafruit esp32 Feather не удалось скомпилировать
- Код сканирования Wi-Fi для esp32 wroom 32
Вывод 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