2025-9-29 15:52:13 [显示全部楼层]
7浏览
查看: 7|回复: 0

[ESP8266/ESP32] 【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

共计六根线。

实际连接如下图:
【FireBeetle 2 ESP32-C5】 基于arduino通过SPI接口采集BMP280数据图1

库安装:

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

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

代码实现如下:

  1. #include <Wire.h>
  2. #include <SPI.h>
  3. #include <Adafruit_BMP280.h>
  4. #define BMP_SCK  (23)
  5. #define BMP_MISO (25)
  6. #define BMP_MOSI (24)
  7. #define BMP_CS   (2)
  8. //Adafruit_BMP280 bmp; // I2C
  9. //Adafruit_BMP280 bmp(BMP_CS); // hardware SPI
  10. Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO,  BMP_SCK);
  11. void setup() {
  12.   Serial.begin(9600);
  13.   while ( !Serial ) delay(100);   // wait for native usb
  14.   Serial.println(F("BMP280 test"));
  15.   unsigned status;
  16.   //status = bmp.begin(BMP280_ADDRESS_ALT, BMP280_CHIPID);
  17.   status = bmp.begin();
  18.   if (!status) {
  19.     Serial.println(F("Could not find a valid BMP280 sensor, check wiring or "
  20.                       "try a different address!"));
  21.     Serial.print("SensorID was: 0x"); Serial.println(bmp.sensorID(),16);
  22.     Serial.print("        ID of 0xFF probably means a bad address, a BMP 180 or BMP 085\n");
  23.     Serial.print("   ID of 0x56-0x58 represents a BMP 280,\n");
  24.     Serial.print("        ID of 0x60 represents a BME 280.\n");
  25.     Serial.print("        ID of 0x61 represents a BME 680.\n");
  26.     while (1) delay(10);
  27.   }
  28.   /* Default settings from datasheet. */
  29.   bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,     /* Operating Mode. */
  30.                   Adafruit_BMP280::SAMPLING_X2,     /* Temp. oversampling */
  31.                   Adafruit_BMP280::SAMPLING_X16,    /* Pressure oversampling */
  32.                   Adafruit_BMP280::FILTER_X16,      /* Filtering. */
  33.                   Adafruit_BMP280::STANDBY_MS_500); /* Standby time. */
  34. }
  35. void loop() {
  36.     Serial.print(F("Temperature = "));
  37.     Serial.print(bmp.readTemperature());
  38.     Serial.println(" *C");
  39.     Serial.print(F("Pressure = "));
  40.     Serial.print(bmp.readPressure());
  41.     Serial.println(" Pa");
  42.     Serial.print(F("Approx altitude = "));
  43.     Serial.print(bmp.readAltitude(1013.25)); /* Adjusted to local forecast! */
  44.     Serial.println(" m");
  45.     Serial.println();
  46.     delay(2000);
  47. }
复制代码


编译上传:

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

成功后,打开串口监视
【FireBeetle 2 ESP32-C5】 基于arduino通过SPI接口采集BMP280数据图4

实验现象:

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


可以看到数据采集情况,和实际吻合:
  1. Temperature = 26.95 *C
  2. Pressure = 100576.33 Pa
  3. Approx altitude = 62.52 m
  4. Temperature = 26.95 *C
  5. Pressure = 100577.09 Pa
  6. Approx altitude = 62.46 m
  7. Temperature = 26.95 *C
  8. Pressure = 100577.66 Pa
  9. Approx altitude = 62.41 m
  10. Temperature = 26.95 *C
  11. Pressure = 100578.17 Pa
  12. Approx altitude = 62.36 m
  13. Temperature = 26.96 *C
  14. Pressure = 100578.81 Pa
  15. Approx altitude = 62.31 m
  16. Temperature = 26.96 *C
  17. Pressure = 100578.81 Pa
  18. Approx altitude = 62.31 m
  19. Temperature = 26.96 *C
  20. Pressure = 100579.06 Pa
  21. Approx altitude = 62.29 m
  22. Temperature = 26.96 *C
  23. Pressure = 100579.63 Pa
  24. Approx altitude = 62.24 m
  25. Temperature = 26.96 *C
  26. Pressure = 100579.45 Pa
  27. Approx altitude = 62.26 m
复制代码
总结:
通过数据采集实验。
学习了SPI通信。
对于 ESP32-C5有了更深一步的理解。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail