0

我正在使用带有 GPRS / MS5803-14BA / BME280 / SH1106 OLED 的 ESP32-SIM800L

调制解调器和传感器设置(使用 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 没有被拾取。

没有 I2C 地址冲突(分别为 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 使用默认 I2C 引脚(对于我的 ESP32Sim800L 是 21/22)无需引脚分配即可完美运行。试图将传感器放在第二条 I2C 线上的问题似乎有问题。

谁能解释如何将 MS5803 与 TwoWire 一起使用?在 GitHub 上查看 Sparkfun .h 和 .cpp 后,我看不到一个或如何显式设置 SDA/SCL 引脚。有没有办法。任何指针都非常感谢。

4

0 回答 0