есть ли способ изменить SparkFun_MS5803_I2 C. cpp /.h, чтобы разрешить определенные пользователем (не по умолчанию) выводы I2 C SDA / SCL для использования с TwoWire? - PullRequest
0 голосов
/ 29 мая 2020

Я использую ESP32-SIM800L с GPRS / MS5803-14BA / BME280 / SH1106 OLED

Настройка модема и датчика (с использованием TwoWire) следующая (только соответствующие выдержки):

#include <Wire.h>
...
#define I2C_SDA              21
#define I2C_SCL              22
#define I2C_SDA_2            18
#define I2C_SCL_2            19
...
#include <SparkFun_MS5803_I2C.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include "SH1106Wire.h"

TwoWire I2CPower = TwoWire(0);
TwoWire I2CMS    = TwoWire(1);  // I2C bus for MS5803 @ 0x77
TwoWire I2CBME   = TwoWire(1);  // I2C bus for BME280 @ 0x76
TwoWire I2CSH    = TwoWire(1);  // I2C bus for SH1106 OLED @ 0x3c

MS5803 sensor(ADDRESS_LOW); // default is ADDRESS_HIGH = 0x76 //  ADDRESS_LOW  = 0x77
Adafruit_BME280 bme;
SH1106Wire display(0x3c, I2C_SDA_2, I2C_SCL_2);

...

void setup() {
...
I2CPower.begin(I2C_SDA, I2C_SCL, 400000);     // start I2C bus No. 1 for SIM800L
I2CMS.begin(I2C_SDA_2, I2C_SCL_2, 400000);    // start I2C bus No. 2 for MS5803
I2CBME.begin(I2C_SDA_2, I2C_SCL_2, 400000);   // start I2C bus No. 2 for BME280
I2CSH.begin(I2C_SDA_2, I2C_SCL_2, 400000);    // start I2C bus No. 2 for SH1106 OLED
...
// Init BME280 @ 0x76
if (!bme.begin(0x76, &I2CBME)) {
Serial.println("No valid BME280 sensor @ 0x76, check wiring!");
} else {
Serial.println("BME280 @ 0x76 : Ok");
}

// Init MS5803 @ 0x77
sensor.reset();
delay(500);
//sensor.begin();
//delay(500);
if (!sensor.begin()) {
Serial.println("No valid MS5803 sensor @ 0x77");
} else {
Serial.println("MS5803 @ 0x77 : Ok");
}

// Init SH1106 OLED @ 0x3c
display.init();
Serial.println("SH1106 OLED @ 0x3c : SCREEN CHECK");
display.flipScreenVertically();
display.setFont(ArialMT_Plain_16);
display.setTextAlignment(TEXT_ALIGN_LEFT);
display.drawString(0,0,"SCREEN ON");
display.display();
...
} // End void setup()

void loop() {
read sensors and report & etc. ...
}

Модем, BME280 и SH1106 OLED обнаружены и работают, однако MS5803 не обнаружен.

Нет конфликтов адресов I2 C (0x76,0x33,0x77 соответственно).

Создание объекта или инициализация BME280 и SH1106 OL допускают явное назначение выводов SDA / SCL:

SH1106Wire display(0x3c, I2C_SDA_2, I2C_SCL_2);
...
bme.begin(0x76, &I2CBME)

, однако создание объекта MS5803 и его инициализация не предусмотрены для этого:

MS5803 sensor(ADDRESS_LOW);
...
sensor.begin();

Попытка ввести явные номера контактов или ссылку на его объект TwoWire в этих выражениях приводит к предупреждению об ошибке, что нет такой функции, позволяющей такое назначение.

В основном, если модем, BME280 и SH1106 OLED не используются, а TwoWire не требуется и не вызывается, тогда MS5803 отлично работает без назначения контактов с использованием контактов I2 C по умолчанию (которые для m y ESP32Sim800L - 21/22). Проблема в том, чтобы попытаться подключить датчик ко второму проводу I2 C, c.

Может ли кто-нибудь объяснить, как использовать MS5803 с TwoWire? Посмотрев на GitHub в Sparkfun .h &. cpp, я не вижу ни одного, ни того, как явно установить контакты SDA / SCL. Есть способ. Приветствуются любые указатели.

...