30 元打造门磁 / 水浸 / 震动三合一低功耗传感器,休眠 160μA

30 元打造门磁 / 水浸 / 震动三合一低功耗传感器,休眠 160μA

2026-10-07 09:10:25 0点赞 0收藏 0评论

传感器功能包括门磁、水浸和震动(也可以是摇一摇、敲一敲、倾斜等30 元打造门磁 / 水浸 / 震动三合一低功耗传感器,休眠 160μA)。

目前实测待机功耗160μA,唤醒功耗41mA约3秒,电池是1500maH,每天唤醒算10次,预留 20% 保护,实际可用大概 260 天,距离期望目标2年差海了30 元打造门磁 / 水浸 / 震动三合一低功耗传感器,休眠 160μA

30 元打造门磁 / 水浸 / 震动三合一低功耗传感器,休眠 160μA

主要物料清单如下:

ESP32-C3模组 × 1
LIS2DW12TR 芯片 × 1
常开干簧管 + 磁铁 × 1
XC6206P332MR × 1
无源蜂鸣器 ×
PCB立创白嫖,全部加起来30元左右吧。


降不下来的160uA待机功耗
经我的祖传NJTY-T21L多功能高精度万用表测试,C3烧录固件后,功耗情况如下:
1、不安装C3和LIS2DW12TR情况下,外围的什么电阻、三极管什么的功耗为5.4μA,
2、将C3焊接上,不安装LIS2DW12TR的情况下功耗为30μA,
3、将C3取下,焊接上LIS2DW12TR,功耗为120μA
4、最后将C3和LIS2DW12TR都焊接上,睡眠功耗160μA30 元打造门磁 / 水浸 / 震动三合一低功耗传感器,休眠 160μA30 元打造门磁 / 水浸 / 震动三合一低功耗传感器,休眠 160μA30 元打造门磁 / 水浸 / 震动三合一低功耗传感器,休眠 160μA。

太疯狂了,反手打开豆包、kimi、deepseek一众大臣,经过多方会商后一致认为,我买的LIS2DW12TR是假货,好吧,我是相信的,因为毕竟购买价格才0.92元,于是在某个死鬼死鬼但据说保真的平台以将近高出10倍的价格出手了,到货后很激动,激动到热风枪风速100%把芯片吹消失了,死活找不到,又买一颗,毫无波澜的换上,结果还是160μA30 元打造门磁 / 水浸 / 震动三合一低功耗传感器,休眠 160μA

能力有限,实在没辙了。

LIS2DW12TR原理图LIS2DW12TR原理图门磁部分原理图门磁部分原理图

传感器配置页面传感器配置页面


睡眠部分代码

void prepareAndSleep(float batVoltage) { DEBUG_STEP("准备睡眠"); pinMode(PIN_LED, OUTPUT); digitalWrite(PIN_LED, HIGH); // LED 灭(低有效) pinMode(PIN_BUZZER, OUTPUT); digitalWrite(PIN_BUZZER, LOW); // 蜂鸣器关(高有效,LOW=关) // ---- LIS2DW12 最终写入 ---- writeReg(0x20, 0x30); delay(20); writeReg(0x34, currentThreshold & 0x3F); uint8_t ctrl1 = readReg(0x20); DEBUG_PRINT("CTRL1=0x%02X (应为 0x30)", ctrl1); if ((ctrl1 & 0x0C) == 0x04) { // mode=01 → High-Performance 模式 DEBUG_PRINT("错误:传感器在 HP Mode,尝试重新配置..."); writeReg(0x21, 0x40); delay(300); while(readReg(0x21) & 0x40) delay(10); writeReg(0x20, 0x30); delay(50); } clearInt(); DEBUG_PRINT("GPIO5 电平: %d", digitalRead(PIN_MOTION_INT)); deinitI2C(); delay(5); // ---- 输入脚全部浮空 pinMode(PIN_BAT_ADC, INPUT); gpio_pulldown_dis((gpio_num_t)PIN_BAT_ADC); gpio_pullup_dis((gpio_num_t)PIN_BAT_ADC); pinMode(PIN_BAT_EN, OUTPUT); digitalWrite(PIN_BAT_EN, LOW); gpio_pulldown_dis((gpio_num_t)PIN_I2C_SDA); gpio_pullup_dis((gpio_num_t)PIN_I2C_SDA); gpio_pulldown_dis((gpio_num_t)PIN_I2C_SCL); gpio_pullup_dis((gpio_num_t)PIN_I2C_SCL); pinMode(PIN_I2C_SDA, INPUT); pinMode(PIN_I2C_SCL, INPUT); pinMode(PIN_DOOR_STATE, INPUT); gpio_pulldown_dis((gpio_num_t)PIN_DOOR_STATE); gpio_pullup_dis((gpio_num_t)PIN_DOOR_STATE); pinMode(PIN_WATER, INPUT); gpio_pulldown_dis((gpio_num_t)PIN_WATER); gpio_pullup_dis((gpio_num_t)PIN_WATER); pinMode(PIN_DOOR_WAKE, INPUT); gpio_pulldown_dis((gpio_num_t)PIN_DOOR_WAKE); gpio_pullup_dis((gpio_num_t)PIN_DOOR_WAKE); if (wifiStarted) { esp_wifi_stop(); wifiStarted = false; } delay(10); // ---- 唤醒源(RTC 域,与引脚保持互不干扰)---- esp_sleep_disable_wakeup_source(ESP_SLEEP_WAKEUP_ALL); esp_deep_sleep_enable_gpio_wakeup(1ULL << PIN_DOOR_WAKE, ESP_GPIO_WAKEUP_GPIO_LOW); if (!waterLeakConfirmed) { esp_deep_sleep_enable_gpio_wakeup(1ULL << PIN_WATER, ESP_GPIO_WAKEUP_GPIO_LOW); } else { esp_sleep_enable_timer_wakeup((uint64_t)WATER_CHECK_INTERVAL * 1000000ULL); } if (!waterLeakConfirmed) { esp_sleep_enable_timer_wakeup((uint64_t)HEARTBEAT_INTERVAL * 1000000ULL); } gpio_pulldown_dis((gpio_num_t)PIN_MOTION_INT); gpio_pullup_dis((gpio_num_t)PIN_MOTION_INT); pinMode(PIN_MOTION_INT, INPUT); esp_deep_sleep_enable_gpio_wakeup(1ULL << PIN_MOTION_INT, ESP_GPIO_WAKEUP_GPIO_HIGH); pinMode(PIN_CONFIG_BTN, INPUT); // 睡眠期不检测按钮 → 浮空(关掉 INPUT_PULLUP) // ============ 关键:最后开全局 hold,锁定以上所有“确定状态” ============ // C3 上这是深睡保持引脚的唯一有效方式;不要在此之后调用 gpio_deep_sleep_hold_dis() gpio_deep_sleep_hold_en(); DEBUG_PRINT(">>> 进入深度睡眠 <<<"); fflush(stdout); uart_wait_tx_idle_polling(UART_NUM_0); delay(10); esp_deep_sleep_start(); }

现在用起来还是爽爽的,就是这160ua的睡眠电流让人不舒服,求大佬指导。

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
0评论

当前文章无评论,是时候发表评论了
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
0
扫一下,分享更方便,购买更轻松