Датчик ESP32 GY-BME/PM280 не распознается шиной i2cC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Датчик ESP32 GY-BME/PM280 не распознается шиной i2c

Сообщение Anonymous »

Обзор
Я купил GY-BME/PM280 датчик давления, температуры, влажности и высоты, чтобы начать изучать встроенное программирование и устройства Интернета вещей/домашние устройства. автоматизация.
Для начала купил:
  • Мультиметр
  • Мультиметр
  • Датчик GY-BME/PM280 (6-контактный)
Раньше у меня уже был esp32 (NodeEmcu esp-32s). Я планировал соединить esp32 с датчиком BME280 для измерения температуры, давления, высоты и т. д.
Я начал следовать этим руководствам:
  • Как использовать макетную плату (используется, чтобы понять, как питание проходит через макетную плату)
  • ESP32 с BME280 (используется, чтобы понять, как подключить устройство)
  • Устранение неполадок: не удалось найти действительный датчик BME280 (используется для определения потенциальной проблемы: проводка, программирование или неправильное использование контактов).
Я решил использовать esp-idf и espressife-ide, чтобы освоить программирование на C и C++. и реализовать этот проект.
Макет контактов



esp32
BME280




3,3 В
VCC


Земля
Земля

GPIO 22
SDA


GPIO 21
SCL



Техническая таблица расположения контактов ESP32< /p>
Текущая настройка
Я решил использовать соединения i2c (это был первый вариант в руководстве, и при более короткой проводке он более стабильный).
Согласно esp32 i2c v5.4, связь i2c должна выполнять три вещи:
1. Создайте i2c_master_bus_config_t



Собственность
Ценность




i2c_port
I2C_NUM_0


sda_io_num
GPIO 21


scl_io_num
GPIO 22


clk_source
I2C_CLK_SRC_DEFAULT


glitch_ignore_cnt7


flags.enable_internal_pullup
истина



2. Создайте главную шину i2c:
i2c_master_bus_handle_t bus_handle;

ESP_ERROR_CHECK(i2c_new_master_bus(&i2c_mst_config, &bus_handle));

3. Добавьте устройство на шину i2c:
/// Create device config to add to the bus
i2c_device_config_t i2c_dev_config;
i2c_dev_config.dev_addr_length = I2C_ADDR_BIT_LEN_7;
i2c_dev_config.device_address = BME_SENSOR_ADDRESS ;
i2c_dev_config.scl_speed_hz = 100000;

i2c_master_dev_handle_t dev_handle;
esp_err_t dev_connect_rslt = i2c_master_bus_add_device(bus_handle, &i2c_dev_config, &dev_handle);
ESP_ERROR_CHECK(dev_connect_rslt);
if (dev_connect_rslt == ESP_OK) {
ESP_LOGI(I2C_SETUP_TAG, "BME 280 connected correctly to i2c bus: %d" , i2c_dev_config.device_address );
}

ПРИМЕЧАНИЕ. Я использовал адреса 0x76 и 0x77 для BME_SENSOR_ADDRESS
Текущая проблема:
Теперь перейдем к самой проблеме. Шина создана корректно и согласно выводам журнала устройство добавляется «правильно» в шину i2c. Но я не могу связаться с датчиком BME280. И я не знаю почему...
Тесты
  • Я использовал i2c_master_probe() функция, чтобы гарантировать, что фактическое устройство находится на шине i2c.
  • Я использовал функцию i2c_master_receive(), чтобы попытаться прочитать данные с датчика.
  • Чтобы проверить питание, я использовал мультиметр. проверьте напряжение датчика bme280 на контактах VCC и GND.
  • Для проверки физического i2c связи, я использовал мультиметр, чтобы проверить переменное напряжение на контактах SCL и SDA.
  • Чтобы проверить адрес i2c Датчик BME280, я использовал эскиз Arduino, который сканирует адреса i2c на шине i2c. Эскиз сканера i2c
Результаты i2c_master_probe
Я продолжаю получать ESP_ERR_NOT_FOUND, что, вероятно, указывает на то, что устройство в BME_SENSOR_ADDRESS нет на шине i2c.
Поэтому он, скорее всего, был «добавлен» в шину, но физически его нет на шине. bus
Результаты i2c_master_receive
Я продолжаю получать «ACK», не полученный от датчика bme280, что, вероятно, указывает на то, что устройство снова «включено». шина, но не на шине i2c.
Проверка мощности
Мультиметр зафиксировал напряжение 3,3 В. Вероятно, питание проходит через датчик. . Это означает, что соединения VCC — 3,3 В и GND — GND правильные и функциональные.
Результаты физической связи I2C
Мультиметр зафиксировал напряжение 1–1,3 В, что указывает на наличие переменного напряжения. Это означает, что соединения SCL — GPIO 22 и SDA — GPIO 21 правильны и работоспособны.
Результаты сканирования I2C
Последовательный выход показал «Устройства I2C не найдены». Это означает, что устройство снова находится на шине i2c.
Вероятные виновники
Вероятные проблемы:
  • Неправильное подключение
  • Неправильная настройка шины i2c и добавление устройства
  • Неправильное использование адреса BME280
Из виновников считаю его номер 3.
Проверил мультиметром, на датчике BME280 есть питание и переменное напряжение. Я не знаю, в чем может быть потенциальная проблема, я попробовал несколько решений и боролся уже около 3 дней.
Может быть, кто-то более квалифицированный или опытный в этом вопросе сможет помочь . Будем очень признательны за любую помощь, должен быть кто-то, кто уже сталкивался с этим раньше.
Пожалуйста, сообщите мне, если мне нужно добавить что-нибудь еще...
Физическая настройка
Изображение

Журнал Вывод
Пример кода
I (313) I2C Setup: Initializing I2C...
D (313) i2c.common: new bus(0) at 0x3ffaffbc
I (323) gpio: GPIO[21]| InputEn: 1| OutputEn: 1| OpenDrain: 1| Pullup: 1| Pulldown: 0| Intr:0
I (333) gpio: GPIO[22]| InputEn: 1| OutputEn: 1| OpenDrain: 1| Pullup: 1| Pulldown: 0| Intr:0
D (333) i2c.common: bus clock source frequency: 80000000hz
I (343) I2C Setup: BME 280 connected correctly to i2c bus: 118
I (353) I2C Setup: Starting I2C bus scan...
I (373) I2C Setup: I2C scan completed.
I (373) I2C Setup: Result from the device probe: 261
E (373) I2C Setup: Device is not found on the i2c bus
E (373) i2c.master: I2C hardware NACK detected
E (383) i2c.master: I2C transaction unexpected nack detected
E (393) i2c.master: s_i2c_synchronous_transaction(872): I2C transaction failed
I (393) gpio: GPIO[21]| InputEn: 1| OutputEn: 1| OpenDrain: 1| Pullup: 1| Pulldown: 0| Intr:0
I (403) gpio: GPIO[22]| InputEn: 1| OutputEn: 1| OpenDrain: 1| Pullup: 1| Pulldown: 0| Intr:0
E (413) i2c.master: i2c_master_receive(1117): I2C transaction failed
I (423) I2C Setup: I2C initialized successfully, bus handle: 0x3ffb4bfc, device handle: 0x3ffb5024
I (433) MAIN: Hello from app_main!

Цветной вывод
Изображение

Исходный код
i2c_setup.cpp
#include "FreeRTOSConfig.h"
#include "FreeRTOSConfig.h"
#include "FreeRTOSConfig.h"
#include "driver/i2c_master.h"
#include "esp_err.h"
#include "hal/i2c_types.h"
#include "portmacro.h"
#include "soc/gpio_num.h"
#include "esp_log.h"
#include

// Logging tag for I2C setup
static const char* I2C_SETUP_TAG = "I2C Setup";

/** ========================== Macros =======================================*/

#define SCL_PIN GPIO_NUM_22
#define SDA_PIN GPIO_NUM_21
#define I2C_PORT I2C_NUM_0
#define BUFFER_SIZE 32
#define BME_SENSOR_ADDRESS 0x76

/** ============================== Functions =================================== */
void i2c_free_bus(i2c_master_bus_handle_t bus_handle) {
i2c_del_master_bus(bus_handle);
}

void i2c_scan(i2c_master_bus_handle_t bus_handle) {
ESP_LOGI(I2C_SETUP_TAG, "Starting I2C bus scan...");

for (uint8_t addr = 0x03; addr

Подробнее здесь: https://stackoverflow.com/questions/793 ... by-i2c-bus
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Датчик ESP32 GY-BME/PM280 не распознается шиной i2c
    Anonymous » » в форуме C++
    0 Ответы
    35 Просмотры
    Последнее сообщение Anonymous
  • Датчик ESP32 GY-BME/PM280 не распознается шиной i2c
    Anonymous » » в форуме C++
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Драйвер ESP32 IDF I2C NG. Как заставить I2C прекратить предоставлять второе условие STOP после таймаута
    Anonymous » » в форуме C++
    0 Ответы
    39 Просмотры
    Последнее сообщение Anonymous
  • Возможные проблемы с пользовательской шиной событий Java для многопоточности и производительности
    Гость » » в форуме JAVA
    0 Ответы
    51 Просмотры
    Последнее сообщение Гость
  • Pring Cloud Config с шиной Kafka: Почему только один экземпляр получает обновление
    Anonymous » » в форуме JAVA
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»