如何将I2C传感器(BME280)与ESP32Cam配合使用

释放双眼,带上耳机,听听看~!

如何将I2C传感器(BME280)与ESP32Cam配合使用

AI-Thinker ESP32Cam

ESP32Cam一直被制造商含蓄地推荐,因为你可以以相当便宜的价格获得。大多数人都遇到过必须使用I2C总线将I2C传感器与ESP32Cam连接的情况。当您查看引脚排列时,不会有任何I2C引脚,因为Omnivision摄像头传感器内部连接到ESP32的I2C引脚。但是在ESP32中有两个I2C总线,您可以使用任何引脚作为数据线和时钟线。以下是与ESP32Cam接口的I2C传感器的示例。

依赖库

  • Adafruit BME280
  • Adafruit BusIO
  • Adafruit Unified Sensors

注:使用Adafruit BME(2.1.1)、Adafruit BusIO(1.4.1)和Adafruit Unified Sensors(1.1.4)库。依赖库下载链接:

BME 280传感器- I2C总线示例

#include "Arduino.h"
#include <Wire.h>
// #include "esp_camera.h"
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
​
// -----------------I2C-----------------
#define I2C_SDA 14
// SDA Connected to GPIO 14
#define I2C_SCL 15
// SCL Connected to GPIO 15
TwoWire I2CSensors = TwoWire(0);
​
// BME 280 (Using I2C)
Adafruit_BME280 bme;
​
// Sensor Variable (BME280)
float temperature, humidity;
​
void setup()
{
Serial.begin(115200);
​
I2CSensors.begin(I2C_SDA, I2C_SCL, 100000);
​
// BME 280 (0x77 or 0x76 will be the address)
if (!bme.begin(0x76, &I2CSensors))
{
Serial.println("Couldn't Find BME280 Sensor");
while(1);
}
else
{
Serial.println("BME280 Sensor Found");
}
}
​
void loop()
{
// -------------Temperature (C)------------------
​
temperature = bme.readTemperature();
Serial.print("Temperature = ");
Serial.print(temperature);
Serial.print(" *C - ");
​
// ----------------------------------------------
​
// ---------------Humidity (%)-------------------
​
humidity = bme.readHumidity();
Serial.print("Humidity = ");
Serial.print(humidity);
Serial.println(" %");
​
// ----------------------------------------------
​
delay(1000);
}

连接原理图

如何将I2C传感器(BME280)与ESP32Cam配合使用
BME280连接到I2C总线

I2C总线

  1. 定义SDA和SCL引脚,分别选择引脚号14和15。

    #define I2C_SDA 14
    #define I2C_SCL 15
  2. 创建双线实例。

TwoWire I2CSensors = TwoWire(0);
  1. 在setup()中,通过传入SDA SCL引脚和时钟频率初始化双线实例。

I2CSensors.begin(I2C_SDA, I2C_SCL, 100000);

BME280传感器

  1. 使用Adafruit BME280库创建传感器实例。

Adafruit_BME280 bme;
  1. 通过传入BME280的I2C地址和配置的双线实例初始化传感器。

if (!bme.begin(0x76, &I2CSensors))
{
Serial.println("Couldn't Find BME280 Sensor");
while(1);
}
else
{
Serial.println("BME280 Sensor Found");
}

预期错误(Adafruit库)

使用Adafruit Library时的一个预期错误是sensor_t将与ESP32Cam Board冲突,因为它在Adafruit Library和ESP32Cam Board Library中都有声明。只有当您包含“esp_camera.h”时,即使用相机时,才会发生这种情况。

In file included from src/main.cpp:4:0:
lib/Adafruit_Unified_Sensor/Adafruit_Sensor.h:155:3: error: conflicting declaration 'typedef struct sensor_t sensor_t'
} sensor_t;
^
In file included from /home/abish/.platformio/packages/framework-arduinoespressif32/tools/sdk/include/esp32-camera/esp_camera.h:70:0,
from src/main.cpp:2:
/home/abish/.platformio/packages/framework-arduinoespressif32/tools/sdk/include/esp32-camera/sensor.h:133:3: note: previous declaration as 'typedef struct _sensor sensor_t'
} sensor_t;
^
*** [.pio/build/esp32cam/src/main.cpp.o] Error 1
如何将I2C传感器(BME280)与ESP32Cam配合使用
相互矛盾的声明

为了解决这个问题,请将所有sensor_t实例重命名为另一个名称,例如sensor_t1。我用Sublime Text一次重命名了所有这些。

注意:上面下载的库是修改后的库。如果想使用提到的那些依赖库的最新版本,需要你自己下载之后对应文件里重命名

给TA打赏
共{{data.count}}人
人已打赏
ESP32ESP32-基础免费项目

ESP32 UART 硬串口重定义通信举例说明

2023-7-24 0:46:24

ESP32ESP32-进阶动态

ESP32 I2C 通信设置引脚、多设备接口和更改引脚

2023-7-25 10:59:01

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索
'); })();