ST LPS25/LPS22气压传感器:从原理到Arduino/Python实战应用
1. 项目概述气压传感器这个听起来有点专业的名词其实离我们的生活并不遥远。从你手机里的天气App显示的“气压”数值到无人机能够稳定悬停在一定高度再到一些高端智能手表上的海拔计功能背后都离不开它的身影。简单来说它就是一个能“感受”空气有多“重”的电子元件。我们生活的地球被一层厚厚的大气包裹着这层大气无时无刻不在对我们施加压力这就是大气压。气压传感器的工作就是精确地测量这个压力值。这个数值的变化直接关联着天气系统的演变比如低气压常伴随阴雨和海拔的高低海拔越高空气越稀薄气压越低。今天我们就来深入聊聊ST微电子推出的两款高性能气压传感器——LPS25和LPS22并手把手带你用Arduino和Python把它们用起来。LPS25和LPS22都属于MEMS微机电系统气压传感器它们内部有一个微小的、对压力敏感的薄膜。当大气压作用在这个薄膜上使其产生形变时会改变其内部的电阻或电容特性从而产生一个与压力成正比的电信号。这个模拟信号经过芯片内置的高精度ADC模数转换器处理后就变成了我们可以直接读取的数字值。Adafruit非常贴心地将这两颗小巧的芯片做成了带电平转换和稳压电路的 breakout 板这意味着无论是使用3.3V逻辑的树莓派、ESP32还是使用5V逻辑的Arduino Uno你都可以直接连接无需担心电压匹配问题。板上还集成了STEMMA QT/Qwiic接口用一根防反插的4芯线缆就能完成连接连电烙铁都省了。这篇文章适合所有对硬件交互、环境监测或物联网项目感兴趣的开发者、创客和学生。无论你是想做一个简易的天气站为你的模型火箭添加高度记录功能还是构建一个室内环境监测系统这里提供的从原理到代码的完整路径都能让你快速上手。我会结合自己多次使用这类传感器的经验不仅告诉你“怎么做”还会解释“为什么这么做”并分享那些数据手册里不会写的实操细节和避坑指南。2. 传感器核心特性与选型考量2.1 LPS25 与 LPS22 的异同解析乍一看LPS25和LPS22非常相似它们都来自ST测量范围都是260-1260 hPa这个范围完全覆盖了从深海到高海拔的地球表面气压都提供温度和气压数据并且精度都非常高。但在关键的性能参数上两者有着微妙的区别这直接决定了你的项目该选谁。首先采样率是最大的不同点。LPS25的最高输出数据速率ODR为25 Hz即每秒可以更新25次数据。而LPS22则提供了更灵活的选项最高可达75 Hz并且有1 Hz, 10 Hz, 25 Hz, 50 Hz, 75 Hz多个档位可选。如果你的应用场景对数据的实时性要求极高比如需要快速响应气压变化的无人机飞控或者高速运动物体的高度追踪那么LPS22的75Hz高刷新率将是显著优势。反之对于气象站、室内环境记录这类变化相对缓慢的应用LPS25的25Hz甚至更低的速率已经完全足够并且可能更省电。其次在精度方面两者在出厂校准后都能达到±0.2 hPa的典型精度。这个精度是什么概念呢大约相当于海拔高度测量上有±1.7米的误差在海平面附近气压每变化1 hPa海拔变化约8.5米。对于绝大多数消费级和创客项目来说这个精度已经非常出色。不过数据手册中通常会标注一个“初始精度”也就是未经用户校准的精度LPS25和LPS22均为±1 hPa。这意味着如果你对精度有极致要求可以通过在已知气压点比如气象局公布的标准海平面气压进行一次单点校准来消除传感器的个体偏移误差从而逼近甚至优于±0.2 hPa的指标。在我的经验里Adafruit的板卡质量通常很好直接上电使用误差也多在0.5 hPa以内。最后是功耗和接口。两者都支持I2C和SPI两种通信协议给了我们布线灵活性。在功耗方面高采样率自然意味着更高的电流消耗。例如LPS22在75Hz模式下的电流消耗会显著高于LPS25在25Hz模式下的消耗。如果你的项目由电池供电就需要在数据更新速度和续航之间做出权衡。一个常见的技巧是使用单次转换模式One-Shot Mode让传感器大部分时间处于休眠状态仅在需要读数时才唤醒它进行一次测量这能极大降低平均功耗。2.2 关键参数背后的物理意义与应用场景理解传感器参数不能只看数字更要明白它在实际项目中意味着什么。测量范围260-1260 hPa这个范围设计得非常巧妙。标准海平面气压是1013.25 hPa。260 hPa大约对应海拔10000米民航客机巡航高度的气压而1260 hPa则对应低于海平面约2000米的环境比如某些矿井深处。这意味着它几乎能覆盖地球上所有陆地和非极端海洋环境。如果你要做探空气球或高海拔无人机需要确保你的目标高度气压在此范围内。温度输出传感器内置了温度传感器这不仅仅是为了告诉你环境温度。更重要的是气压传感器的核心——MEMS膜片——其特性会随温度漂移。芯片内部会用这个温度读数对气压测量进行实时补偿以确保在全温度范围内-40°C 到 85°C都能保持高精度。所以即使你不关心环境温度这个数据对于获得准确气压也是至关重要的。分辨率24位ADC24位的ADC意味着它能将整个测量范围划分为2^24约1677万个等级。对于1260-2601000 hPa的量程理论分辨率高达1000/16777216 ≈ 0.00006 hPa。当然实际有效分辨率会受到噪声限制但这也足以保证测量值的平滑和稳定你不会看到读数像低分辨率传感器那样“跳来跳去”。基于这些特性我们可以梳理出典型的应用场景LPS25更适合对功耗和成本有一定要求且数据更新速度需求在秒级或亚秒级的应用。例如智能家居环境监测节点、手持式海拔计、天气预报站、自行车骑行数据记录气压测海拔变化。LPS22更适合需要高速、连续数据流的应用。例如无人机的高度保持与避障、模型火箭的飞行数据记录器黑匣子、室内导航通过气压差判断楼层变化、科学实验中的快速压力变化记录。3. 硬件连接与电路设计要点3.1 引脚功能详解与电源设计拿到Adafruit的LPS2x breakout板我们首先得认清每一个引脚是干什么的。虽然板子很小但设计得很周到。电源引脚Vin, 3Vo, GNDVin这是板的电源输入脚。板载了一个低压差稳压器LDO输入范围是3V到5V。这意味着你可以直接用Arduino Uno的5V或者ESP32、树莓派的3.3V来供电非常灵活。这里有个重要经验尽量让Vin的电压与你主控板的逻辑电平一致。比如用5V的Arduino就接5V用3.3V的ESP32就接3.3V。这样可以让板载的电平转换电路工作在最理想的状态。3Vo这是板载LDO输出的3.3V。这个电压是专门给LPS25/LPS22传感器芯片供电的。你还可以从这里获取最大100mA的电流为其他低功耗的3.3V外设比如一个LED供电但要注意总电流不要超限。GND接地确保与主控板共地。I2C接口引脚SCL, SDA, SDOSCL和SDA标准的I2C时钟线和数据线。板上已经集成了10kΩ的上拉电阻所以你通常不需要再外接上拉电阻除非你的I2C总线非常长或者挂载了非常多设备。SDO这是一个多功能引脚。在I2C模式下它用作地址选择引脚。默认情况下SDO悬空或接高电平传感器的I2C地址是0x5D。如果你需要连接多个同型号传感器到同一个I2C总线可以将其中一个的SDO引脚接地GND它的地址就会变为0x5C。这样就能实现多设备共存了。SPI接口引脚SCK, SDI, SDO, CS当你想使用SPI协议时这些引脚的定义会稍有变化。SCK是时钟SDI是主设备输出从设备输入MOSISDO是主设备输入从设备输出MISOCS是片选信号低电平有效。特别注意在SPI模式下SDO引脚恢复其作为数据输出MISO的功能不再用于设置I2C地址。Adafruit的板子所有信号线都做了电平转换所以无论主控是3.3V还是5V都可以直接连接。中断引脚INT这是一个非常有用的功能引脚。你可以通过配置寄存器让传感器在特定条件满足时例如气压值超过或低于你设定的阈值触发一个中断信号。这样你的主控单片机就不需要不停地轮询读取数据而是可以休眠等中断来了再处理极大地节省了系统功耗。这个引脚输出的高电平电压等于Vin电压。3.2 I2C与SPI连接实战与选择建议I2C连接最常用 连接非常简单只需要4根线VIN, GND, SCL, SDA。以Arduino Uno为例将传感器的VIN连接到 Arduino 的5V引脚。将传感器的GND连接到 Arduino 的GND引脚。将传感器的SCL连接到 Arduino 的A5引脚在Uno上A5是I2C的SCL。将传感器的SDA连接到 Arduino 的A4引脚在Uno上A4是I2C的SDA。如果你使用的是带有标准Qwiic或STEMMA QT接口的开发板如Adafruit Feather系列、一些ESP32开发板那么恭喜你只需要用一根4芯线缆对插即可连杜邦线都省了既可靠又美观。SPI连接 SPI需要更多的线但通常有更高的通信速率。以Arduino Uno的“软件SPI”为例使用任意数字引脚模拟SPI时序VIN - 5V, GND - GND。SCK - Digital #13 (或其他任意引脚代码中需定义)。SDO (MISO) - Digital #12。SDI (MOSI) - Digital #11。CS - Digital #10。选择I2C还是SPII2C优势接线少2根信号线支持多设备通过不同地址总线上可以挂载多种不同设备。对于LPS2x这类数据量不大的传感器I2C的速率完全够用。推荐大多数应用使用I2C。SPI优势全双工通信速率上限高协议简单直接。如果你需要以最高速率如75Hz连续读取数据并且主控的SPI接口空闲那么SPI可能略占优势。或者当你的项目I2C总线已经被其他设备占满时SPI是另一个选择。注意使用SPI时每个传感器需要独占一个CS片选引脚。如果你想连接多个传感器可以让它们共享SCK、SDI、SDO但为每个传感器分配一个独立的CS引脚。4. Arduino平台驱动与数据采集实战4.1 库安装与基础例程解析在Arduino IDE中使用传感器最快捷的方式是使用Adafruit提供的统一库。打开Arduino IDE依次点击工具 - 管理库...在搜索框中输入“Adafruit LPS2X”找到并安装它。这个库同时支持LPS25和LPS22。安装过程中IDE通常会提示你安装依赖库主要是Adafruit BusIO和Adafruit Unified Sensor务必一并安装。安装完成后通过文件 - 示例 - Adafruit LPS2X菜单你可以找到针对不同传感器的测试例程。我们打开adafruit_lps25_test。这个例程结构清晰是极好的起点。#include Wire.h #include Adafruit_LPS2X.h #include Adafruit_Sensor.h Adafruit_LPS25 lps; // 创建LPS25对象 void setup() { Serial.begin(115200); // 等待串口连接对于Leonardo等板子是必要的 while (!Serial) delay(10); Serial.println(Adafruit LPS25 test!); // 尝试通过I2C初始化传感器 if (!lps.begin_I2C()) { // 如果I2C失败可以尝试SPI需要取消注释下面某一行并正确连接引脚 // if (!lps.begin_SPI(LPS_CS)) { // 硬件SPI // if (!lps.begin_SPI(LPS_CS, LPS_SCK, LPS_MISO, LPS_MOSI)) { // 软件SPI Serial.println(Failed to find LPS25 chip); while (1); // 初始化失败停在这里 } Serial.println(LPS25 Found!); }代码开头包含了必要的库并创建了一个传感器对象。在setup()函数中首先初始化串口用于调试输出然后调用begin_I2C()函数尝试通过I2C与传感器通信。如果通信成功函数返回true程序继续如果失败比如接线错误或地址不对则返回false程序会打印错误信息并停止。这里有个关键点begin_I2C()函数可以接受一个参数来指定I2C地址例如begin_I2C(0x5C)如果你修改了SDO地址这里就需要对应修改。4.2 高级功能配置与数据读取优化初始化成功后例程中演示了如何设置数据速率lps.setDataRate(LPS25_RATE_12_5_HZ); // 设置输出数据率为12.5 Hz对于LPS25可选的速率有LPS25_RATE_ONE_SHOT单次模式,LPS25_RATE_1_HZ,LPS25_RATE_7_HZ,LPS25_RATE_12_5_HZ,LPS25_RATE_25_HZ。对于LPS22选项更多包括75Hz。单次模式对于电池供电设备非常有用设置为此模式后传感器平时处于休眠状态功耗极低当你需要读数时触发一次测量读完后它又自动休眠。在主循环loop()中读取数据的代码非常简洁void loop() { sensors_event_t temp_event, pressure_event; // 同时获取温度和气压事件 lps.getEvent(pressure_event, temp_event); Serial.print(Temperature: ); Serial.print(temp_event.temperature); Serial.println( C); Serial.print(Pressure: ); Serial.print(pressure_event.pressure); Serial.println( hPa); delay(100); // 短暂延迟 }getEvent()函数会填充两个sensors_event_t结构体分别包含最新的温度和气压数据。气压的单位是百帕hPa这也是气象学中的常用单位1 hPa 1 毫巴。数据优化与滤波 传感器读出的原始数据可能会有微小的跳动。对于需要平滑显示的应用如OLED屏幕显示我们可以引入简单的软件滤波。一个简单有效的方法是移动平均滤波#define FILTER_SIZE 10 float pressure_buffer[FILTER_SIZE]; int buffer_index 0; float pressure_sum 0; void loop() { sensors_event_t temp_event, pressure_event; lps.getEvent(pressure_event, temp_event); // 移动平均滤波 pressure_sum - pressure_buffer[buffer_index]; // 减去最旧的值 pressure_buffer[buffer_index] pressure_event.pressure; // 存入新值 pressure_sum pressure_buffer[buffer_index]; // 加上新值 buffer_index (buffer_index 1) % FILTER_SIZE; // 更新索引 float filtered_pressure pressure_sum / FILTER_SIZE; Serial.print(Filtered Pressure: ); Serial.print(filtered_pressure); Serial.println( hPa); delay(100); // 调整延迟以适应数据速率 }这段代码维护了一个最近10次读数的缓冲区每次输出的是这10个值的平均值能有效抑制随机噪声让读数更稳定。5. Python/CircuitPython平台应用开发5.1 环境搭建与库安装细节在Python环境下使用传感器我们依赖adafruit-circuitpython-lps2x库。根据你的硬件平台安装方式略有不同。对于CircuitPython单片机如Adafruit Feather M4、RP2040等确保你的板子已经刷写了最新版本的CircuitPython固件。将板子通过USB连接到电脑它会显示为一个名为CIRCUITPY的U盘。访问CircuitPython库捆绑包页面下载对应你CircuitPython版本的最新库捆绑包。解压下载的文件找到lib文件夹。将adafruit_lps2x.mpy、adafruit_bus_device文件夹和adafruit_register文件夹复制到你的CIRCUITPY磁盘的lib文件夹中。如果lib文件夹不存在就新建一个。对于单板计算机如树莓派或任何运行标准Python的电脑 我们需要使用Adafruit_Blinka来模拟CircuitPython的硬件层。首先确保系统已启用I2C接口树莓派可通过raspi-config启用。然后通过pip安装sudo pip3 install adafruit-circuitpython-lps2x如果系统默认Python是3.x命令中的pip3有时可以简写为pip。安装过程会自动处理Adafruit_Blinka等依赖。5.2 代码编写与数据可视化入门环境准备好后代码编写非常直观。以下是一个完整的Python示例适用于树莓派或任何有GPIO的Linux电脑import time import board import busio import adafruit_lps2x # 初始化I2C总线 i2c busio.I2C(board.SCL, board.SDA) # 初始化传感器如果是LPS22将 LPS25 替换为 LPS22 lps adafruit_lps2x.LPS25(i2c) # 可选设置数据速率 # lps.data_rate adafruit_lps2x.DataRate.RATE_25_HZ print(LPS25 Sensor Test) print(Press CtrlC to exit) try: while True: # 直接读取属性值 temperature_c lps.temperature pressure_hpa lps.pressure # 转换为华氏度如果需要 temperature_f temperature_c * 9 / 5 32 # 格式化输出 print(fTemperature: {temperature_c:.2f} C ({temperature_f:.2f} F)) print(fPressure: {pressure_hpa:.2f} hPa) print(- * 20) time.sleep(1.0) # 每秒读取一次 except KeyboardInterrupt: print(\nProgram terminated.)代码逻辑清晰初始化I2C总线创建传感器对象然后在循环中不断读取并打印数据。lps.temperature和lps.pressure是传感器的属性每次访问都会从芯片获取最新值。将数据记录到文件 对于长期监测项目将数据保存到文件至关重要。import csv from datetime import datetime # ... 初始化传感器代码同上 ... filename fpressure_log_{datetime.now().strftime(%Y%m%d_%H%M%S)}.csv with open(filename, w, newline) as csvfile: writer csv.writer(csvfile) writer.writerow([Timestamp, Temperature (C), Pressure (hPa)]) # 写入表头 try: while True: timestamp datetime.now().isoformat() temp lps.temperature press lps.pressure writer.writerow([timestamp, temp, press]) print(fLogged: {timestamp}, {temp:.2f}C, {press:.2f}hPa) time.sleep(60) # 每分钟记录一次 except KeyboardInterrupt: print(f\nData saved to {filename})这段代码会创建一个带有时间戳的CSV文件每分钟记录一次数据非常适合进行长期环境数据追踪。简单的实时绘图使用matplotlib 如果你想在电脑上实时观察气压变化趋势可以结合matplotlib。import matplotlib.pyplot as plt import matplotlib.animation as animation from collections import deque # 设置绘图 fig, ax plt.subplots() press_data deque(maxlen50) # 保存最近50个数据点 time_data deque(maxlen50) line, ax.plot([], [], b-) ax.set_ylim(950, 1050) # 根据当地气压调整Y轴范围 ax.set_xlabel(Time (samples)) ax.set_ylabel(Pressure (hPa)) ax.set_title(Real-time Pressure Monitoring) def update(frame): # 读取新数据 new_pressure lps.pressure press_data.append(new_pressure) time_data.append(frame) # 更新曲线 line.set_data(time_data, press_data) ax.relim() ax.autoscale_view(scalexTrue, scaleyFalse) # 仅自动缩放X轴Y轴固定 return line, # 创建动画每200毫秒更新一次 ani animation.FuncAnimation(fig, update, interval200, blitTrue) plt.show()运行这段代码会弹出一个实时更新的图表窗口动态显示最近50次的气压读数对于观察天气系统过境时的缓慢气压变化非常直观。6. 高级应用从气压到海拔与天气趋势6.1 利用气压计算海拔高度气压随海拔升高而降低的规律为我们提供了一种测量海拔的方法。国际标准大气模型ISA给出了一个近似公式。这里提供一个简化但实用的计算方法def pressure_to_altitude(pressure_hpa, sea_level_hpa1013.25): 根据当前气压和标准海平面气压计算近似海拔。 参数: pressure_hpa: 当前测量气压 (hPa) sea_level_hpa: 参考海平面气压 (hPa)默认为标准值1013.25 返回: 海拔高度 (米) # 使用气压高度公式简化版 altitude 44330.0 * (1.0 - pow(pressure_hpa / sea_level_hpa, 0.1903)) return altitude这个公式计算的是相对于你设定的sea_level_hpa的高度。这里有一个至关重要的点sea_level_hpa不能总是用1013.25这个标准值。实际的海平面气压随着天气变化每天都在波动。因此要获得准确的海拔高度你需要一个“基准点”校准在一个已知海拔高度的地方比如地图上标明的某个点测量当前气压P_known。利用公式反向推算出当时当地的“等效海平面气压”sea_level_hpa_actual P_known / pow(1 - (altitude_known / 44330.0), 1/0.1903)。在后续测量中使用这个计算出的sea_level_hpa_actual作为参考值精度会大大提高。例如你在一个已知海拔为100米的地方测得气压为1000 hPa那么代入公式算出的实际海平面气压约为1013.8 hPa而不是标准的1013.25。使用这个修正值去计算其他位置的海拔误差会小很多。6.2 构建简易气象站与趋势分析单个气压读数意义有限但连续的气压变化趋势却是预测天气的宝贵指标。“气压下降常伴风雨气压上升天气转晴”是基本的经验法则。我们可以编写一个简单的趋势分析函数class WeatherTrendAnalyzer: def __init__(self, window_size10): self.pressure_history deque(maxlenwindow_size) self.trend Stable # Stable, Rising, Falling, Rapidly Changing def update(self, current_pressure): self.pressure_history.append(current_pressure) if len(self.pressure_history) 2: return self.trend # 计算短期变化率 (hPa/小时)假设每秒采样一次 change_per_hour (self.pressure_history[-1] - self.pressure_history[0]) / len(self.pressure_history) * 3600 # 判断趋势 if abs(change_per_hour) 2.0: self.trend Rapidly Changing elif change_per_hour 0.5: self.trend Rising elif change_per_hour -0.5: self.trend Falling else: self.trend Stable return self.trend, change_per_hour # 使用示例 analyzer WeatherTrendAnalyzer(window_size60) # 分析过去60个数据点约1分钟的趋势 while True: pressure lps.pressure trend, rate analyzer.update(pressure) forecast if trend Rapidly Falling: forecast - Potential storm or rain approaching! elif trend Falling: forecast - Weather may deteriorate. elif trend Rising: forecast - Weather may improve. elif trend Stable: forecast - Conditions likely to remain similar. print(fPressure: {pressure:.2f} hPa | Trend: {trend} ({rate:.2f} hPa/hr) {forecast}) time.sleep(1)这个类会维护一个最近一段时间的气压历史记录并计算其变化率来推断趋势。结合温度和湿度传感器如SHT31、BME280你就能构建一个功能更全面的个人气象站通过监测气压、温度、湿度的协同变化做出更可靠的本地区域天气预测。7. 常见问题排查与性能优化7.1 硬件连接与通信故障排查传感器无法正常工作十有八九是硬件连接或通信问题。下面是一个系统性的排查清单问题现象可能原因排查步骤与解决方案I2C地址扫描不到1. 电源未接通或接反。2. I2C线接错SDA/SCL交叉。3. 上拉电阻缺失或太弱Adafruit板载10kΩ通常足够。4. 地址不对SDO引脚状态影响。1. 用万用表检查VIN和GND之间是否有3.3V或5V电压。2. 确认SDA、SCL与主控板正确连接没有接反。3. 运行一个I2C扫描程序Arduino IDE有示例File - Examples - Wire - scanner。4. 尝试两个地址0x5D和0x5C。确保SDO引脚悬空高电平为0x5D接地为0x5C。读数全为0或NaN1. 通信时序问题。2. 库未正确初始化。3. 传感器物理损坏罕见。1. 检查代码中初始化函数begin_I2C()的返回值是否为true。2. 确保安装了正确的库Adafruit LPS2X及其依赖BusIO, Unified Sensor。3. 尝试降低I2C时钟速度在Arduino中可通过Wire.setClock(100000)设置为100kHz标准模式。读数不稳定跳动大1. 电气噪声干扰。2. 传感器暴露在气流或温度骤变中。3. 电源纹波大。1. 确保电源稳定尤其在电机等大电流设备附近考虑为传感器电源增加一个10uF和0.1uF的并联电容滤波。2. 将传感器放在一个相对静止、远离通风口和热源的地方。对于气压测量微小的空气流动都会引起读数波动。3. 使用软件滤波如前文所述的移动平均滤波。SPI模式无法工作1. CS片选引脚未正确控制需在通信前拉低结束后拉高。2. 时钟极性(CPOL)和相位(CPHA)模式不匹配。1. 确认代码中正确声明并控制了CS引脚。SPI通信是“一问一答”CS引脚是对话的开关。2. LPS2x传感器通常支持SPI模式0或3。Adafruit库默认会处理但如果使用其他底层SPI库需确认模式匹配。7.2 软件层面的优化与校准技巧即使硬件连接正确为了获得最佳性能软件上也有不少可以优化的地方。降低噪声的软件策略 除了移动平均滤波中值滤波对于剔除偶尔出现的奇异值跳点非常有效。可以结合使用先进行中值滤波去除跳点再进行移动平均平滑。import statistics def median_filter(values, new_value, window5): 滑动中值滤波 values.append(new_value) if len(values) window: values.pop(0) return statistics.median(values) pressure_values [] filtered_p median_filter(pressure_values, lps.pressure)温度补偿与校准 虽然传感器内部已做了温度补偿但在要求极高的场合你可以自己建立一个简单的二维查表补偿。在恒温箱中记录传感器在不同温度、不同标准气压下的输出值与标准值对比得到误差表。在实际使用时根据当前温度和气压读数通过插值法从误差表中查找并修正误差。这对于科学级应用是必要的步骤。功耗优化实战 对于电池供电的户外气象站让传感器持续以25Hz工作显然太浪费。最佳实践是使用单次转换模式并结合微控制器的深度睡眠。// Arduino 示例 (伪代码) #include LowPower.h // 使用低功耗库 void setup() { lps.setDataRate(LPS25_RATE_ONE_SHOT); // 设置为单次模式 } void loop() { // 1. 触发一次测量 lps.startOneShotMeasurement(); // 2. 等待测量完成数据手册会给出最大转换时间例如约40ms delay(50); // 3. 读取数据 sensors_event_t pressure, temp; lps.getEvent(pressure, temp); // 4. 处理数据存储、发送等 logData(pressure.pressure, temp.temperature); // 5. 让单片机进入深度睡眠例如睡眠5分钟 LowPower.powerDown(SLEEP_5MIN, ADC_OFF, BOD_OFF); // 6. 5分钟后单片机被唤醒loop函数重新开始触发下一次测量 }在这种模式下传感器大部分时间处于微安级的休眠电流单片机也深度睡眠整个系统的平均电流可以降到极低水平用一颗小容量电池就能工作数月。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2613162.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!