夜雨聆风学习资料网

ARTICLE · 1227337

手搓AI智能药盒:到点提醒、开盖记录、忘吃通知家人,全程数据不出局域网

手搓AI智能药盒:到点提醒、开盖记录、忘吃通知家人,全程数据不出局域网

本期导读:家里有老人每天要吃三四种药,忘吃、漏吃、重复吃是常事。市面上智能药盒要么只响铃不记录,要么数据要上传到厂商云端,隐私条款写得含糊。这篇文章给你一条完整的开源路径:用一块ESP32-C3开发板加一个舵机、一个霍尔传感器和一块OLED屏,做一个能定时提醒、检测开盖、记录服药历史的智能药盒。基础配置成本约80-100元,接入Home Assistant后,忘吃药可以自动通知家人。

先声明:这不是医疗器械,不能替代医嘱,不能用于任何诊断或剂量决策。

一、你能做到什么

用一块ESP32-C3加几个简单元件,你能做到这些:

定时提醒 到点OLED显示"该吃XX药了",蜂鸣器发出提示音,对应药格的LED亮起

开盖检测 霍尔传感器检测到药盒盖被打开,自动记录"已服药"事件

忘吃通知 超过设定时间未开盖,Home Assistant自动推送手机通知,或发送给家人

服药历史 所有开盖事件记录到Home Assistant,可以查看每天的服药情况

多药格管理 每个药格独立LED指示,提醒时只亮对应药格的灯,避免拿错

你需要的:ESP32-C3开发板 + DS3231 RTC模块 + SH1106 OLED屏 + 霍尔传感器 + 蜂鸣器 + LED。

你需要的时间:从1小时到半天,取决于是否需要焊接和3D打印外壳。

重要声明:本方案是服药提醒和记录工具,不是医疗器械。它不诊断疾病、不建议剂量、不替代医生或药师的判断。药物存储请遵循药品说明书的要求。

二、两个方案怎么选
对比维度
MEDI-SYNC(推荐入门)
Shaztech Pilldispenser(进阶)
主控板
ESP32-C3
ESP32
核心成本
约80-100元
约200-350元(含触摸屏、DFPlayer、PCB)
提醒方式
OLED显示 + 蜂鸣器 + LED
触摸屏 + 语音播报 + 舵机出药
服药检测
霍尔传感器检测开盖
舵机旋转出药+称重
控制方式
BLE App + Web
触摸屏 + Web + Telegram
Home Assistant
通过BLE或MQTT间接接入
有现成集成
3D打印
项目提供CAD文件
项目提供STL文件(MakerWorld)
最适合
想快速跑通、成本低
想要完整出药机构、有3D打印机

建议:从MEDI-SYNC开始。成本低、接线简单、不需要3D打印也能用(可以用现成的塑料药盒改装)。跑通之后再决定是否升级到Shaztech的完整出药方案。

三、MEDI-SYNC方案:从零件到跑通
3.1 硬件清单
组件
推荐型号
关键参数
参考价格
主控板
ESP32-C3 SuperMini
RISC-V单核,WiFi加BLE
15-25元
RTC时钟
DS3231模块
正负2ppm精度,带电池备份
10-15元
显示屏
SH1106 OLED 1.3寸
I2C接口,128x64
15-25元
霍尔传感器
3144或A3144
检测药盒盖开合
3-5元
蜂鸣器
有源蜂鸣器5V
提醒音
3-5元
LED
5mm LED 2到4个
每格药对应一个
2-5元
电阻
220欧姆 4个
LED限流
2元
磁铁
小圆磁铁
安装在药盒盖上
3-5元
面包板加杜邦线
半尺寸加套装
原型接线
10-15元

基础配置总成本:约63-102元

重要提醒:DS3231模块需要安装CR2032纽扣电池。第一次使用时,先装电池再上电,否则RTC可能无法保持时间。电池寿命约2-3年,电量耗尽后时间会重置,需要重新配置。

3.2 接线方案

MEDI-SYNC使用I2C总线连接DS3231和SH1106:

组件
ESP32-C3引脚
说明
DS3231 SDA
GPIO 8
I2C数据
DS3231 SCL
GPIO 9
I2C时钟
DS3231 VCC
3.3V
不要接5V
DS3231 GND
GND
共地
SH1106 SDA
GPIO 8
与DS3231共用I2C
SH1106 SCL
GPIO 9
与DS3231共用I2C
霍尔传感器 VCC
3.3V
霍尔传感器 GND
GND
霍尔传感器 OUT
GPIO 4
数字输入
蜂鸣器正极
GPIO 5
有源蜂鸣器
蜂鸣器负极
GND
LED 1
GPIO 6
经220欧姆接LED正极
LED 2
GPIO 7
经220欧姆接LED正极
LED 3
GPIO 10
经220欧姆接LED正极

I2C地址确认:SH1106的I2C地址通常是0x3C,DS3231的地址是0x68。两个地址不冲突,可以共用I2C总线。如果你的模块地址不同,用I2C扫描工具确认。

3.3 烧录固件

MEDI-SYNC项目使用Arduino框架编写。你需要安装Arduino IDE和ESP32开发板支持(方法与之前的ESP32-CAM教程相同)。

需要安装的库:

Adafruit_SH110X(OLED显示)

RtcDS3231(RTC时钟)

ESP32Servo(如果你后续加舵机)

Step 1:从GitHub克隆或下载MEDI-SYNC项目:

git clone https://github.com/krishnanbasudeo/medi-sync-smart-pill-box.git

Step 2:用Arduino IDE打开 firmware/esp32-c3/medi_sync_firmware/medi_sync_firmware.ino。

Step 3:选择开发板为 ESP32-C3 Dev Module,选择正确的串口。

Step 4:点击上传。烧录完成后,OLED屏应显示时间和设备状态。

3.4 使用BLE Android App配置

MEDI-SYNC项目包含一个Android App,通过BLE连接药盒并配置服药时间表。App的源码在项目的 android/ 目录中。

使用流程:

Step 1:在Android手机上安装项目提供的APK(从项目的Releases页面下载,或自行用Android Studio编译)。

Step 2:打开App,点击"Connect",搜索并连接名为"MEDI-SYNC"的BLE设备。

Step 3:在App中添加服药时间表,设置每味药的名称、服药时间(如08:00、12:30、18:00)、对应药格编号。

Step 4:保存后,药盒会自动同步时间表。到设定的时间,OLED会显示提醒信息,对应药格的LED亮起,蜂鸣器发出提示音。

Step 5:打开药盒盖取药时,霍尔传感器检测到磁场变化,记录"已服药"事件,App中可以看到服药历史。

四、进阶:接入Home Assistant实现忘吃通知家人

MEDI-SYNC的原生方案通过BLE App记录服药历史,但如果你想把提醒和记录接入Home Assistant,有两条路径:

路径一:直接使用Shaztech Pilldispenser的HA集成。Shaztech项目提供了现成的Home Assistant集成(由demrios开发),项目地址在GitHub上可搜索到。安装集成后,药盒会作为HA设备出现,你可以查看每个药格的服药状态、设置自动化、通过Telegram接收提醒。

路径二:用ESPHome重新实现提醒逻辑(更轻量)。如果你不需要BLE App和OLED复杂界面,可以用ESPHome的YAML配置一个极简版服药提醒器。参考PillMinder项目的思路(Hackster.io上的ESP8266版本),用按钮加LED加HA自动化实现计数提醒。

以下是一个ESPHome YAML配置的核心片段(可直接复制修改):

esphome:

  name: pill-reminder

esp32:

  board: esp32-c3-devkitm-1

i2c:

  sda: GPIO8

  scl: GPIO9

  scan: true

time:

  - platform: ds1307

    id: rtc_time

    address: 0x68

    update_interval: 60s

display:

  - platform: sh1106_i2c

    address: 0x3C

    id: oled

    lambda: |-

      it.strftime(0, 0, id(rtc_time).now(), "%H:%M");

      it.print(0, 20, "服药提醒");

binary_sensor:

  - platform: gpio

    pin:

      number: GPIO4

      mode: INPUT_PULLUP

    id: lid_sensor

    name: "药盒开盖"

    filters:

      - delayed_on: 100ms

    on_press:

      then:

        - logger.log: "药盒已打开"

        - homeassistant.service:

            service: notify.mobile_app

            data:

              message: "药盒已打开,服药记录已更新"

output:

  - platform: ledc

    pin: GPIO5

    id: buzzer_out

switch:

  - platform: output

    name: "蜂鸣器"

    output: buzzer_out

代码可上下滑动查看完整内容

然后在Home Assistant中设置自动化:

alias: "到点提醒吃药"

trigger:

  - platform: time

    at: "08:00:00"

action:

  - service: switch.turn_on

    target:

      entity_id: switch.蜂鸣器

  - delay: "00:00:10"

  - service: switch.turn_off

    target:

      entity_id: switch.蜂鸣器

  - service: notify.mobile_app

    data:

      message: "该吃早上的药了。打开药盒后请确认。"

代码可上下滑动查看完整内容

再设置一条"忘吃通知"自动化:

alias: "未开盖通知家人"

trigger:

  - platform: time

    at: "08:30:00"

condition:

  - condition: state

    entity_id: binary_sensor.药盒开盖

    state: "off"

action:

  - service: notify.mobile_app

    data:

      message: "药盒在08:00提醒后30分钟内未被打开,请确认是否已服药。"

代码可上下滑动查看完整内容

五、关于Shaztech完整出药方案(进阶参考)

如果你想要一个能自动旋转出药的完整机构,Shaztech/Pilldispenser是一个更"硬核"的选择。项目包含:

10层药盘,每层30格,可容纳多种药物

SG90舵机驱动药盘旋转,DFPlayer Mini语音播报提醒

触摸屏界面,支持多用户颜色标识

WiFi配置,NTP自动校时

Telegram通知,到点未取药自动提醒

预编译固件(.bin文件),可以直接烧录

3D打印文件在MakerWorld免费提供

PCB Gerber文件可直接下单打样

成本估算:舵机10个、DFPlayer、触摸屏、PCB打样、3D打印,总计约200-350元。

重要提醒:Shaztech项目的出药机构涉及舵机旋转和药盘机械结构。首次测试时,务必在药格中不放任何真实药物的情况下运行一遍完整流程,确认出药口位置准确、不会卡药、不会把药推到错误的位置。确认机械动作正常后,再装入药物。

六、安全与合规提醒(请认真阅读)
这不是医疗器械

本方案是服药提醒和记录工具,不是医疗器械。它不诊断疾病、不建议剂量、不替代医生或药师的判断。服药方案必须由医生或药师确定,药盒只负责提醒和记录。

药物存储安全

药物应存放在避光、干燥、阴凉处,具体条件以药品说明书为准

如果使用3D打印外壳,建议使用食品级PLA或在内壁加装食品级内衬

药盒应放置在儿童和宠物接触不到的地方

不要将不同药物混放在同一个药格中,除非医生或药师明确允许

电气安全

舵机必须独立供电,不要从ESP32的GPIO取电

锂电池必须有保护板,不要使用无保护板的裸电芯

首次通电前用万用表确认没有短路

隐私保护

MEDI-SYNC通过BLE通信,数据不经过云端

如果你使用Telegram或手机推送通知,消息会经过第三方服务器,请知悉

服药历史属于敏感个人健康信息,如果接入云服务,请确认服务商的隐私政策

七、关于开源许可的说明

本教程参考了MEDI-SYNC、Shaztech/Pilldispenser、PillMinder等开源项目的实现思路。MEDI-SYNC的许可证请查看其GitHub仓库;PillMinder使用GPL-3.0许可。

如果你打算将本项目用于商业产品,请自行核实各依赖组件的许可证条款,以各项目官方仓库的LICENSE文件为准。本教程仅供个人学习使用。

八、你现在就可以做的三件事

第一件(今天,15分钟):打开GitHub搜索 krishnanbasudeo/medi-sync-smart-pill-box,查看项目的硬件清单和接线图。确认你手头是否有ESP32-C3开发板、DS3231和SH1106 OLED屏。

第二件(本周内,1小时):如果你有ESP32-C3,按第3.2节的接线表连接DS3231和SH1106,烧录MEDI-SYNC固件,确认OLED屏能显示时间。然后装一个霍尔传感器和一个磁铁,测试开盖检测是否正常。

第三件(本周内,2小时):在Home Assistant中设置第一条自动化,早上8点提醒吃药,30分钟后未开盖通知手机。先用LED代替蜂鸣器做测试,确认逻辑正确后再换成蜂鸣器。

关注「AI趋势实验室」,每周两期,帮你:

看懂AI圈正在发生什么

拿到可以直接照做的操作方案

把AI用出真实的结果

如果觉得这份手搓指南有用,请转发给那个家里有老人需要按时服药的朋友,他可能正需要这个。

END

注:本公众号AI趋势实验室 发布的所有内容,仅供学习、学术交流与参考之用,不构成任何商业、法律、投资、技术操作或其他专业建议。任何个人或机构若基于本公众号内容进行实践、应用、决策或其他操作,由此引发的风险、损失或法律责任,均需自行承担,本公众号及作者概不负责。本公告的最终解释权归AI趋势实验室所有。

相关学习资料