37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手试试多做实验,不管成功与否,都会记录下来——小小的进步或是搞不掂的问题,希望能够抛砖引玉。
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验二十七:AHT20+BMP280温湿度气压模块 高精度数字型温湿度大气压强传感器
BMP280大气压强传感器模块的实验环境
一、BMP280大气压强传感器模块实验所需硬件清单
TM1637四位数码管X1
0.96寸OLED液晶屏X1
Arduino Uno开发板 X1
杜邦线 若干(备了9条)
高电平触发有源蜂鸣器模块X1
BMP280大气压强传感器模块X2
LED发光二极管(绿、蓝色)X2
IIC/I2C 1602 LCD液晶屏模块X1
高电平触发单路5V继电器模块X1
Proto Shield原型扩展板(带mini面包板)X1
程序六:BMP280实时温度声光报警器
(1)实验开源图形编程(Mind+、编玩边学)
(2)实验串口返回情况
(3)实验场景图
程序七:带有 SSD1306 OLED 显示屏的温度计
(1)Arduino参考开源代码
/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
程序七:带有 SSD1306 OLED 显示屏的温度计
*/
#include <Wire.h> // 包括 Arduino 线库(I2C 设备需要)
#include <Adafruit_GFX.h> // 包含 Adafruit 图形库
#include <Adafruit_SSD1306.h> // 包含 Adafruit SSD1306 OLED 显示驱动
#include <Adafruit_BMP280.h> // 包含 Adafruit BMP280 传感器库
#define OLED_RESET 4 // 定义显示复位引脚(无此脚可不接)
Adafruit_SSD1306 display(OLED_RESET); // 初始化 Adafruit 展示库
// 定义设备 I2C 地址:0x76 或 0x77(0x77 为库默认地址)
#define BMP280_I2C_ADDRESS 0x76
Adafruit_BMP280 bmp280; // 初始化 Adafruit BMP280 库
void setup(void) {
delay(1000); //延时1000毫秒
// 使用 I2C 地址 = 0x3C 初始化 SSD1306 OLED 显示器
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
// 清除显示缓冲区。
display.clearDisplay();
display.setTextSize(1); // 文字大小 = 1
display.setTextColor(WHITE, BLACK); // 将文本颜色设置为白色和黑色背景
display.setCursor(25, 0); // 将光标移动到位置 (25, 0) 像素
display.print("BMP280 SENSOR");
display.display(); // 更新显示
//初始化BMP280传感器
if ( bmp280.begin(BMP280_I2C_ADDRESS) == 0 )
{ // 连接错误或设备地址错误!
display.setTextSize(1); // 文字大小 = 1
display.setCursor(5, 17);
display.print("Connection");
display.setCursor(35, 37);
display.print("Error");
display.display(); // 更新显示
while (1); // stay here
}
display.setCursor(29, 11);
display.print("TEMPERATURE:");
display.setCursor(38, 40);
display.print("PRESSURE:");
display.display(); // 更新显示
display.setTextSize(1); // 文字大小 = 1
}
char _buffer[9];
void loop() {
// get temperature and pressure from library
float temp = bmp280.readTemperature(); // 获取温度
float pressure = bmp280.readPressure(); // 获得气压
// 在 LCD 上打印数据
// 1:打印温度
if (temp < 0)
sprintf(_buffer, "-%02u.%02u C", (int)abs(temp), (int)(abs(temp) * 100) % 100 );
else
sprintf(_buffer, " %02u.%02u C", (int)temp, (int)(temp * 100) % 100 );
display.setCursor(11, 21);
display.print(_buffer);
// 打印度数符号 (°)
display.drawCircle(89, 23, 2, WHITE);
// 2:打印气压
sprintf(_buffer, "%04u.%02u", (int)(pressure / 100), (int)((uint32_t)pressure % 100));
display.setCursor(3, 50);
display.print(_buffer);
display.setCursor(91, 50);
display.print("hPa");
// 更新显示
display.display();
delay(1000); // 延时1000毫秒
}
(2)实验接线示意图
实验场景图