swtman 发表于 6 天前

【FireBeetle 2 ESP32-C5】 基于arduino通过SPI接口采集BMP280数据

硬件采用【FireBeetle 2 ESP32-C5】
软件环境基于arduino。
关于环境搭建这里不再介绍。详见:https://mc.dfrobot.com.cn/thread-398229-1-1.html


项目目标:

通过BMP280的SPI接口采集温度、海拔、压力数据。
通过串口传给电脑。

硬件连接如下:
BMP_SCK(23)
BMP_MISO (25)
BMP_MOSI (24)
BMP_CS   (2)


VCC         3.3V
GND      GND

共计六根线。

实际连接如下图:


库安装:



本次设计基于这个库进行开发。

代码实现如下:


#include <Wire.h>
#include <SPI.h>
#include <Adafruit_BMP280.h>

#define BMP_SCK(23)
#define BMP_MISO (25)
#define BMP_MOSI (24)
#define BMP_CS   (2)

//Adafruit_BMP280 bmp; // I2C
//Adafruit_BMP280 bmp(BMP_CS); // hardware SPI
Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO,BMP_SCK);

void setup() {
Serial.begin(9600);
while ( !Serial ) delay(100);   // wait for native usb
Serial.println(F("BMP280 test"));
unsigned status;
//status = bmp.begin(BMP280_ADDRESS_ALT, BMP280_CHIPID);
status = bmp.begin();
if (!status) {
    Serial.println(F("Could not find a valid BMP280 sensor, check wiring or "
                      "try a different address!"));
    Serial.print("SensorID was: 0x"); Serial.println(bmp.sensorID(),16);
    Serial.print("      ID of 0xFF probably means a bad address, a BMP 180 or BMP 085\n");
    Serial.print("   ID of 0x56-0x58 represents a BMP 280,\n");
    Serial.print("      ID of 0x60 represents a BME 280.\n");
    Serial.print("      ID of 0x61 represents a BME 680.\n");
    while (1) delay(10);
}

/* Default settings from datasheet. */
bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,   /* Operating Mode. */
                  Adafruit_BMP280::SAMPLING_X2,   /* Temp. oversampling */
                  Adafruit_BMP280::SAMPLING_X16,    /* Pressure oversampling */
                  Adafruit_BMP280::FILTER_X16,      /* Filtering. */
                  Adafruit_BMP280::STANDBY_MS_500); /* Standby time. */
}

void loop() {
    Serial.print(F("Temperature = "));
    Serial.print(bmp.readTemperature());
    Serial.println(" *C");

    Serial.print(F("Pressure = "));
    Serial.print(bmp.readPressure());
    Serial.println(" Pa");

    Serial.print(F("Approx altitude = "));
    Serial.print(bmp.readAltitude(1013.25)); /* Adjusted to local forecast! */
    Serial.println(" m");

    Serial.println();
    delay(2000);
}

编译上传:



成功后,打开串口监视


实验现象:




可以看到数据采集情况,和实际吻合:
Temperature = 26.95 *C
Pressure = 100576.33 Pa
Approx altitude = 62.52 m

Temperature = 26.95 *C
Pressure = 100577.09 Pa
Approx altitude = 62.46 m

Temperature = 26.95 *C
Pressure = 100577.66 Pa
Approx altitude = 62.41 m

Temperature = 26.95 *C
Pressure = 100578.17 Pa
Approx altitude = 62.36 m

Temperature = 26.96 *C
Pressure = 100578.81 Pa
Approx altitude = 62.31 m

Temperature = 26.96 *C
Pressure = 100578.81 Pa
Approx altitude = 62.31 m

Temperature = 26.96 *C
Pressure = 100579.06 Pa
Approx altitude = 62.29 m

Temperature = 26.96 *C
Pressure = 100579.63 Pa
Approx altitude = 62.24 m

Temperature = 26.96 *C
Pressure = 100579.45 Pa
Approx altitude = 62.26 m

总结:
通过数据采集实验。
学习了SPI通信。
对于 ESP32-C5有了更深一步的理解。

页: [1]
查看完整版本: 【FireBeetle 2 ESP32-C5】 基于arduino通过SPI接口采集BMP280数据