首页
/ ESP-HomeKit设备中MCP23017扩展板的使用问题与解决方案

ESP-HomeKit设备中MCP23017扩展板的使用问题与解决方案

2025-06-28 03:50:53作者:蔡怀权

问题背景

在使用ESP8266 D1 mini与MCP23017 I2C扩展板时,用户遇到了通道B无法正常工作的问题。具体表现为:

  • 通道A(GPA)作为输入工作正常
  • 通道B(GPB)无论作为输入还是输出都无法正常工作
  • 尝试了多个MCP23017芯片,问题依旧存在

硬件连接配置

用户采用了以下硬件连接方式:

  • 供电:3.3V
  • 地址引脚A0-A2接地,I2C地址为0x20
  • 复位引脚连接3.3V(可选用4.7K电阻)
  • I2C接口:
    • SCL连接GPIO5(D1)
    • SDA连接GPIO4(D2)
  • 功能引脚:
    • GPB7(引脚8)作为输出控制继电器
    • GPA0(引脚21)作为触摸模块输入

原始配置脚本分析

用户最初使用的HAA配置脚本如下:

{
  "c": {
    "c": 1,
    "ic" : [ [ 5, 4, 80, 1, 1] ],
    "mc" : [ [ 0, 32, 258, 0 ] ],
    "io": [ 
        [[ 100], 6, 0,1],
        [[108, 115], 2]
    ],
    "b": [ [ 0, 5 ] ],
    "u": 1, "m":30,"sn":"AtticBathroom"
  },
  "a": [
      {
        "t": 1,
        "s": 5,
        "0": { "r": [ [ 115, 0 ] ] },
        "1": { "r": [ [ 115, 1 ] ] },
        "b": [ [ 100 ] ]
      }
  ]
}

问题诊断与解决方案

经过分析,发现HAA固件中存在一个关于MCP23017通道B输出的bug。开发者确认该问题将在后续版本中修复。在等待修复期间,可以采取以下解决方案:

  1. 临时解决方案

    • 使用通道A(GPA)作为输出
    • 使用通道B(GPB)作为输入
    • 修改配置脚本,移除不必要的IO声明
  2. 推荐的工作配置

{
"c": {
"c": 1,
"ic" : [ [ 5, 4, 80, 1, 1] ],
"mc" : [ [ 0, 32, 0, 256 ] ],
"io": [
[[ 0, 115 ], 6]
],
"b": [ [ 0, 5 ] ],
"u": 1, "m":30,"sn":"AtticBathroom"
},
"a": [
{
"t": 1,
"s": 5,
"0": { "r": [ [ 100, 0 ] ] },
"1": { "r": [ [ 100, 1 ] ] },
"b": [ [ 115 ] ]
}
]
}

技术要点说明

  1. MCP23017配置

    • "mc" : [ [ 0, 32, 0, 256 ] ] 表示:
      • 第一个0:设备索引
      • 32:I2C地址(0x20)
      • 0:通道A方向寄存器配置(0=输出)
      • 256:通道B方向寄存器配置(256=0x100=所有引脚输入)
  2. 输入配置

    • "io": [ [[ 0, 115 ], 6] ] 将GPB0(115)配置为输入
  3. 输出控制

    • 动作部分配置GPA0(100)作为输出控制

最佳实践建议

  1. 对于当前版本的HAA固件:

    • 优先使用通道A作为输出
    • 通道B可用于输入功能
    • 避免在IO数组中重复声明已在MCP数组中配置的引脚
  2. 硬件连接建议:

    • 确保I2C总线上拉电阻已正确安装
    • 检查MCP23017的供电稳定性
    • 复位引脚建议通过电阻连接至VCC
  3. 固件更新:

    • 关注HAA固件更新,v12.12.5及以后版本已修复此问题

总结

通过合理配置MCP23017的通道分配和HAA脚本参数,可以绕过当前固件版本中的通道B输出bug。开发者已确认该问题在v12.12.5版本中得到修复,建议用户在条件允许时升级固件以获得完整功能支持。

登录后查看全文
热门项目推荐

项目优选

收起
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
338
1.19 K
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
899
535
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
188
266
kernelkernel
deepin linux kernel
C
22
6
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
140
188
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
375
387
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.09 K
0
note-gennote-gen
一款跨平台的 Markdown AI 笔记软件,致力于使用 AI 建立记录和写作的桥梁。
TSX
86
4
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
7
0
arkanalyzerarkanalyzer
方舟分析器:面向ArkTS语言的静态程序分析框架
TypeScript
115
45