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