| 硬件采用【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有了更深一步的理解。
 
 
 |