ARTICLE · 1227337
手搓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开始。成本低、接线简单、不需要3D打印也能用(可以用现成的塑料药盒改装)。跑通之后再决定是否升级到Shaztech的完整出药方案。
基础配置总成本:约63-102元
重要提醒:DS3231模块需要安装CR2032纽扣电池。第一次使用时,先装电池再上电,否则RTC可能无法保持时间。电池寿命约2-3年,电量耗尽后时间会重置,需要重新配置。
MEDI-SYNC使用I2C总线连接DS3231和SH1106:
I2C地址确认:SH1106的I2C地址通常是0x3C,DS3231的地址是0x68。两个地址不冲突,可以共用I2C总线。如果你的模块地址不同,用I2C扫描工具确认。
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屏应显示时间和设备状态。
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中可以看到服药历史。
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/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
















































































