基于 Arduino UNO 与 ThingShield 的 SmartThings 红外网关
项目简介
利用 Arduino UNO 和 SmartThings ThingShield 构建一个红外网关,将普通红外遥控器接入 SmartThings 智能家居生态。只需极少元件,即可实现用电视遥控器控制智能灯泡、开关等设备,是探索 SmartThings 平台的绝佳入门项目。
核心硬件
| 元器件 | 数量 | 说明 |
|---|---|---|
| Arduino UNO | 1 | 主控制器 |
| SmartThings ThingShield | 1 | Zigbee 通信模块,直插 UNO |
| IR 接收二极管 (TSOP38238 等) | 1 | 接收遥控信号,数据脚接 D11 |
| IR 发射 LED | 1 | 发射红外码,接 D9(PWM) |
| 100Ω 电阻 | 1 | 可选,IR LED 限流 |
ThingShield 关键信息
- 通过 Zigbee 协议连接 SmartThings Hub
- 拨码开关选择串口引脚:
0,1或2,3(本项目用3,2作为 SoftwareSerial RX/TX) - 占用 Arduino 引脚 6(内部用途)
- 板载 RGB LED 可指示状态
软件依赖
- Ken Shirriff IRremote 库:GitHub,需按标准方式安装
- 修改 IRremoteInt.h:将定时器改为使用引脚 9(避免与 ThingShield 串口冲突)
- SmartThings Arduino 库:处理 Zigbee 通信与设备回调
接线指南
- ThingShield 直接插在 Arduino UNO 顶部
- IR 接收器:VCC→5V,GND→GND,OUT→D11
- IR 发射 LED:阳极→D9,阴极→GND(可串联 100Ω 电阻)
- ThingShield 拨码开关拨至
2,3位置(使用 SoftwareSerial)
SmartThings 云端配置(三步走)
步骤 1:创建自定义设备类型
- 登录 SmartThings IDE → My Device Types → New SmartDevice
- 名称填
Ir Bridge(注意空格) - 添加属性:
recStatus、buttonAStatus、buttonBStatus、buttonAHex、buttonACode、buttonBHex、buttonBCode、lastButton - 添加命令:
record、buttonA、buttonB - 粘贴设备类型代码(见下方),保存并发布
步骤 2:将 ThingShield 关联到新设备类型
- ThingShield 上电,长按 Switch 键 6 秒进入配对模式
- SmartThings App 点击 Add Device,再短按一次 Switch 完成配对
- IDE 中 Devices 列表找到该设备,Edit → Type 选择
Ir Bridge,Update
步骤 3:创建并发布 SmartApp
- IDE → My SmartApps → New SmartApp,名称任意
- 粘贴 SmartApp 代码(见下方),注意引用设备类型时用驼峰命名
device.IrBridge - Save → Publish → For Me
使用流程
- 手机 App 中安装该 SmartApp,选择 IR 设备与要控制的开关
- 进入设备详情页,点击齿轮图标
- 点击 Record 按钮(变红),再点击欲编程的按钮(变黄)
- 对准 IR 接收器按下遥控器对应键
- 按钮变绿表示学习成功,Record 恢复白色
- 此后按遥控器该键即可切换关联的智能开关
代码结构说明
Arduino 端核心逻辑
setup():初始化串口、IR 接收、ThingShield 通信、板载 LEDloop():轮询smartthing.run()处理云端下发;irrecv.decode()接收红外并上报编码messageCallout():解析云端下发的发射指令(含协议类型 NEC/SONY/RC5/RC6 + 码值 + 位数),调用irsend重发- 支持协议:NEC、Sony、RC5、RC6、RAW
- 板载 RGB LED 指示:蓝=接收中,红=发射中,绿=成功
设备类型 解析逻辑
parse():收到 Arduino 上报的十六进制码,若处于学习模式则存入对应按钮属性;若匹配已存码值则触发button.A或button.B事件record():切换学习模式,红/白背景指示buttonA()/buttonB():学习模式下标记待编程按钮(黄色);正常模式下发射存储码值
SmartApp 逻辑
- 订阅
button.A/button.B事件 - 收到事件时切换对应开关状态
进阶扩展建议
- 增加更多可编程按钮(扩展设备类型属性)
- 支持更多红外协议(Panasonic、JVC 等)
- 集成温湿度传感器,复用 ThingShield 实现多功能传感节点
- 设计 3D 打印外壳,制作成品级红外网关
完整代码获取
三段代码均在下方代码区:Arduino Sketch (C++)、Device Definition、SmartApp。复制到对应 IDE 窗口即可使用。
制造工艺
- 树莓派与Python构建机器人:完整指南
- 树莓派自平衡Segway搭建全攻略
- Arduino Nano高速摄影控制器 – 定格水滴碰撞瞬间
- K30 CO₂ 传感器:室内空气质量实时监测
- 基于 1Sheeld 与 Arduino 的盲聋人士沟通辅助系统
- 智能存钱罐:Arduino Nano 控制硬币识别器实现余额显示
- Arduino + HC-05 蓝牙控制 LED:MIT App Inventor 手机 App 开发全攻略
- Arduino Cloud 集成:随时随地监控家中温度
- MAX30100脉搏血氧传感器与Arduino接入指南:获取PPG波形与SpO2
- 使用 Nextion 显示屏构建 Fridgeye 应用:分步指南
- 构建明天劳动力:智能自动化如何提升员工体验
- 可靠性互联网中的数据驾驭:高效管理策略