回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

【FireBeetle 2 ESP32-C5】 基于arduino的室内气压温度计 中等

头像 super_one 2025.10.06 7 0

1. 我的硬件

FireBeetle 2 ESP32-C5如下图所示:

image.png

ESP32-C5

1.1. 相关资源介绍

处理器:RISC-V单核处理器

时钟频率:240 MHz

内存:384 KB

电子模块: 320 KB

闪存:4 MB

LP SRAM:16 KB

数字 I/O x18

带 6 通道的 LED PWM 控制器

SPI x1

UART x3 (LP UART x1)

I2C x2 (LP I2C x1)

I2S x1

红外收发器:5个发射通道,5个接收通道

1 个 12 位 SAR ADC,带 7 个通道

DMA 控制器,具有 3 个接收通道和 3 个发射通道

1.2. 接口

image.png

1.3. 原理图

image.png

1.4. BMP180传感器模块

需要个人采购哦,可以从淘宝购买。

image.png

image.png

1.5. 显示模块0.96 128X64

可以在立创购买。

HS96L03W2C03中文资料_最新报价_数据手册下载_HS(汉昇)-OLED显示屏-立创商城

image.png
image.png

1.6. 硬件连接:

基于IIC进行连接。由于杜邦线连接不可靠,这里基于面包板进行连接。

image.png

1.7. IO使用

GND,3.3V,SDA,SCL。

2. 软件开发

采用arduino平台

image.png

2.1. 库安装

image.png

image.png

2.2. 代码实现

2.3. 编译和上传:

image.png

2.4. 串口数据接收

image.png

2.5. 验证效果:

image.png

视频链接如下:

【FireBeetle 2 ESP32-C5】基于arduino的室内气压温度计_哔哩哔哩_bilibili

代码

#include <Arduino.h>
#include <Wire.h>
#include <BMP180I2C.h>
#define I2C_ADDRESS 0x77

//create an BMP180 object using the I2C interface
BMP180I2C bmp180(I2C_ADDRESS);
#include "SSD1306Wire.h"  // legacy include: `#include "SSD1306.h"`

#define SDA 9
#define SCL 10
// Initialize the OLED display using Wire library
SSD1306Wire display(0x3c, SDA, SCL);  // ADDRESS, SDA, SCL  -  SDA and SCL usually populate automatically based on your board's pins_arduino.h e.g. https://github.com/esp8266/Arduino/blob/master/variants/nodemcu/pins_arduino.h

void setup() {

  display.init();

  // display.flipScreenVertically();
  display.setContrast(255);
  display.setFont(ArialMT_Plain_16);  // 16像素高字体
  Serial.begin(9600);
  //wait for serial connection to open (only necessary on some boards)
  while (!Serial)
    ;
  Wire.setPins(9, 10);
  Wire.begin();
  //begin() initializes the interface, checks the sensor ID and reads the calibration parameters.
  if (!bmp180.begin()) {
    Serial.println("begin() failed. check your BMP180 Interface and I2C Address.");
    while (1)
      ;
  }
  //reset sensor to default parameters.
  bmp180.resetToDefaults();
  //enable ultra high resolution mode for pressure measurements
  bmp180.setSamplingMode(BMP180MI::MODE_UHR);
}
float t, p;
void loop() {
  // put your main code here, to run repeatedly:

  delay(1000);

  //start a temperature measurement
  if (!bmp180.measureTemperature()) {
    Serial.println("could not start temperature measurement, is a measurement already running?");
    return;
  }

  //wait for the measurement to finish. proceed as soon as hasValue() returned true.
  do {
    delay(100);
  } while (!bmp180.hasValue());
  t = bmp180.getTemperature();

  //start a pressure measurement. pressure measurements depend on temperature measurement, you should only start a pressure
  //measurement immediately after a temperature measurement.
  if (!bmp180.measurePressure()) {
    Serial.println("could not start perssure measurement, is a measurement already running?");
    return;
  }

  //wait for the measurement to finish. proceed as soon as hasValue() returned true.
  do {
    delay(100);
  } while (!bmp180.hasValue());
  p = bmp180.getPressure();

  String t1 = String(t, 1);  // 保留两位小数
  String p1 = String(p, 1);  // 保留两位小数
  display.clear();
  display.setTextAlignment(TEXT_ALIGN_LEFT);

  display.drawString(0, 0, "Temperature:");
  display.drawString(0, 16, t1);
  display.drawString(0, 32, "Pressure:");
  display.drawString(0, 48, p1);
  display.display();

  Serial.printf("温度:%8.1f℃\r\n", t);
  Serial.printf("压强:%8.1fPa\r\n", p);
}

附件

评论

user-avatar