💡 划重点

  • 一颗 ESP32-C3 搞定一切:控制、联网、驱动 OLED 显示屏与按键,稳定省电。
  • 四个物理按钮对应早/中/晚/睡前服药时间:操作零门槛,不用手机不用识字,按下去就打卡。
  • 一块 0.96 寸 OLED:清晰显示时间、已服次数、联网状态,老人一眼看清。
  • 飞书消息通知:每次打卡实时推送至子女/看护人的飞书群,失效立即提醒。
  • 物料总成本低于 50 元:所有元件均容易购买,适合批量制作送亲友。

需求洞察

我国 60 岁以上独居或空巢老人已超过 1.3 亿,慢性病服药管理是典型痛点。许多长辈每天需要服 3 至 4 种药,但经常忘记、重复服药或搞错时间。子女无法时刻陪伴,电话提醒既打扰又容易遗忘。传统智能药盒成本高、操作复杂,长辈难以接受。

本项目针对独居长辈,提供一个极简物理交互的打卡按钮盒。它不依赖手机 APP,不使用触摸屏,不需要记密码。按下对应时间段的按钮,盒子发出 LED 灯光和 OLED 文字反馈,同时通过 Wi-Fi 向飞书群发送一条“妈妈早间已服药”的通知。设备成本控制在 50 元以内,制作简单,适合学生、创客为长辈定制。

为什么值得做?因为它不仅解决了“忘记吃药”问题,更重要的是让子女获得真实的安心——看到一条打卡消息比任何智能药盒的统计数据都更有温度。同时,它用最低的技术门槛,实现了健康监测中最核心的行为记录功能,兼顾隐私与实用,完全符合养老场景的现实需求。

方案设计

整体方案分为四层:感知层、控制层、执行层、日志/联网层。

感知层

由 4 个物理按键(按钮 A、B、C、D)组成,分别对应早间、午间、晚间、睡前四个服药时段。按键采用微动开关,按下即接通 GPIO,触发中断或轮询检测。每个按键带有简易文字贴纸,方便老人识别。

控制层

ESP32-C3 作为主控,运行 Arduino 框架。它负责读取按键状态、驱动 OLED 显示、控制 LED 状态灯,并通过 Wi-Fi 连接互联网。ESP32-C3 的 RISC-V 内核功耗低,支持深度睡眠,可延长电池寿命,但本项目为常供电设计,保持实时响应。

执行层

日志/联网层

ESP32-C3 连接家中 2.4GHz Wi-Fi。打卡数据不上云,仅通过 Webhook 送到指定飞书群。为避免误触或重复推送,加入 1 分钟防抖与重复检测逻辑。若网络断开,设备会本地缓存最后一次打卡信息,待网络恢复后自动补发,并在 OLED 上显示离线提示图标。

物料清单

序号 物料名称 数量 用途 估算单价(元) 小计(元)
1 ESP32-C3 开发板 (合宙或微雪) 1 主控与 Wi-Fi 9.9 9.9
2 0.96 寸 OLED 屏幕 (I2C) 1 信息显示 7.5 7.5
3 6x6mm 微动开关 (带键帽) 4 服药时段按钮 1.2 4.8
4 5mm LED (绿色) 1 状态指示 0.2 0.2
5 5mm LED 限流电阻 220Ω 1 保护 LED 0.1 0.1
6 杜邦线、排针 若干 接线 2.0 2.0
7 面包板或洞洞板 1 固定结构 3.0 3.0
8 塑料外壳 (如 85x58x33mm) 1 成品外壳 8.0 8.0
9 Micro USB 线 + 5V 充电头 1 供电 5.0 5.0
合计 40.5

总计 40.5 元,留有近 10 元余量,符合 50 元目标成本。若已有供电线材,成本还可更低。

接线与结构

按题目建议接线,并微调说明理由:

结构设计:在塑料外壳上盖钻 4 个按键孔,按键帽通过内部热熔胶固定,周围贴上早/中/晚/睡前标签。OLED 屏幕嵌入右侧开窗,LED 置于上方小孔。内部使用洞洞板固定开发板和 OLED,用短线连接。底部留 Micro USB 供电口。整机可立于床头柜或餐桌。

核心代码

使用 Arduino IDE,基于 ESP32-C3 板卡包,需要安装 U8g2(OLED)和 WiFiHTTPClientArduinoJson 等库。


#include <WiFi.h>
#include <HTTPClient.h>
#include <U8g2lib.h>
#include <ArduinoJson.h>

const char* ssid = "your_ssid";
const char* password = "your_password";
const char* webhook = "https://open.feishu.cn/open-apis/bot/v2/hook/xxxxx";

U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE, /* SCL=*/ 9, /* SDA=*/ 8);

const int btnPins[] = {0, 1, 2, 3};
const char* medTimes[] = {"早间", "午间", "晚间", "睡前"};
const int LED = 10;
int lastBtnStates[4] = {HIGH, HIGH, HIGH, HIGH};
unsigned long lastSent[4] = {0};
const unsigned long debounceDelay = 60000; // 1分钟防抖

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) { delay(500); }
  u8g2.begin();
  pinMode(LED, OUTPUT);
  for (int i = 0; i < 4; i++) pinMode(btnPins[i], INPUT_PULLUP);
}

void sendFeishu(String msg) {
  if (WiFi.status() == WL_CONNECTED) {
    HTTPClient http;
    http.begin(webhook);
    http.addHeader("Content-Type", "application/json");
    DynamicJsonDocument doc(200);
    doc["msg_type"] = "text";
    doc["content"]["text"] = msg;
    String body;
    serializeJson(doc, body);
    http.POST(body);
    http.end();
  }
}

void loop() {
  u8g2.clearBuffer();
  u8g2.setCursor(0, 14);
  u8g2.print("服药打卡");
  for (int i = 0; i < 4; i++) {
    int reading = digitalRead(btnPins[i]);
    if (reading == LOW && lastBtnStates[i] == HIGH && (millis() - lastSent[i] > debounceDelay)) {
      lastSent[i] = millis();
      digitalWrite(LED, HIGH);
      String msg = "【妈妈】已服" + String(medTimes[i]) + "药物";
      sendFeishu(msg);
      delay(2000);
      digitalWrite(LED, LOW);
    }
    lastBtnStates[i] = reading;
    // 显示打卡状态
    u8g2.setCursor(10, 30 + i*10);
    if (millis() - lastSent[i] < 60000) {
      u8g2.print(medTimes[i]); u8g2.print(": 已服");
    } else {
      u8g2.print(medTimes[i]); u8g2.print(": 未服");
    }
  }
  u8g2.sendBuffer();
  delay(200);
}

代码说明:使用内部上拉,按键接低有效。1分钟防抖防止重复漏服。成功打卡后 LED 亮 2 秒,飞书推送消息。OLED 动态显示各时段状态。

调试步骤

  1. 硬件测试:先用万用表检查各按键与 LED 连接,确保无短路。USB 供电看 ESP32-C3 指示灯正常。
  2. OLED 测试:上传简单的 U8g2 例程,确认 I2C 地址 0x3C 正常显示中文。
  3. Wi-Fi 连接:修改 SSID 和密码,通过串口监视器查看连接状态,观察 OLED 上是否显示已连接。
  4. 飞书机器人:创建飞书群机器人,复制 Webhook 地址填入代码,测试手动调用是否收到消息。
  5. 整体联调:按下按钮,看 LED 是否亮、OLED 对应时段是否变为“已服”,飞书群是否收到正确文本。测试一分钟内重复按压是否被屏蔽。
  6. 外壳组装:确认所有功能正常后,断电装入外壳,用热熔胶固定按钮和屏幕,封装即可。

设计图

药品服用打卡按钮盒结构flow
1
感知输入 (4个时段按键)
2
控制处理 (ESP32-C3 防抖与状态判断)
3
执行反馈 (OLED 显示 + LED 闪烁)
4
数据上报 (Wi-Fi -> 飞书机器人 -> 子女手机)

流程图展示了从老人按下按钮到子女收到通知的完整链路,所有模块围绕低成本、高可靠的思路紧密配合。