内容
# 工业级GPIO扩展器 – MCP23017




> 工业级16通道I/O扩展器,安装在DIN导轨上的PCB。采用MCP23017,光隔离输入,ULN2803A高电流输出,硬件地址选择和7段显示。设计用于PLC扩展和工业自动化。
[](https://youtu.be/AG7PeMTG8dg)
---
## ✨ 特性
- 🧠 **MCP23017** – 16位I²C I/O扩展器
- 🔌 **I²C 接口** – 同一总线上最多8个设备(128个GPIO)
- 🛡️ **光隔离输入** – 8个24V工业输入,使用TLP291-4
- ⚡ **高电流输出** – 8个5V/24V可选输出,使用ULN2803A
- 🔢 **硬件地址选择** – 3位滑动开关(0-7)
- 📟 **7段显示** – 显示当前I²C地址
- 💡 **LED指示灯** – 所有16个I/O通道的状态指示灯
- 🔋 **灵活电源** – 5V/24V可选,通过I²C或外部电源供电
- 🏗️ **DIN导轨安装** – 103mm × 60mm PCB,带3D打印外壳
- 🔍 **工业保护** – 反极性保护,TVS二极管,PTC熔丝,光隔离
---
## 📁 仓库内容
| 文件夹 | 描述 |
|--------|-------------|
| 📂 [`/GERBER`](https://github.com/BEEMB/Industrial-GPIO-Expander-MCP23017/tree/main/Hardware/GERBER) | 可直接用于生产的Gerber文件 |
| 📄 [`/Schematic`](https://github.com/BEEMB/Industrial-GPIO-Expander-MCP23017/tree/main/Hardware/Schematic) | PDF + 图片导出 |
| 🖥️ [`/PCB_Layout`](https://github.com/BEEMB/Industrial-GPIO-Expander-MCP23017/tree/main/Documentation%20/PCB%20Layout) | PCB视图(顶部/底部/层) |
| 📁 [`/3D_Models`](https://github.com/BEEMB/Industrial-GPIO-Expander-MCP23017/tree/main/Hardware/3D_Models) | DIN导轨外壳STL文件 |
| 📸 [`/Images`](https://github.com/BEEMB/Industrial-GPIO-Expander-MCP23017/tree/main/Documentation%20/Images) | 实物照片 + 3D渲染图 |
| 📁 [`/Software`](https://github.com/BEEMB/Industrial-GPIO-Expander-MCP23017/tree/main/Software) | Arduino测试代码 |
---
## 🛒 如何订购
1. 将Gerber文件上传到 [**JLCPCB**](https://jlcpcb.com/?from=TIP)
2. 选择:`FR-4` 材料 / `1.6mm` 厚度 / `ENIG` 表面处理
3. **PCB规格:**
- 层数:2
- 尺寸:103mm × 60mm
- 颜色:所有颜色价格相同
4. 如果您计划自己组装,请添加模板
5. 将STL文件上传到 **JLC3DP** 以获取外壳
| 参数 | 选择 |
|-----------|-----------|
| 3D技术 | FDM |
| 材料 | PLA-P |
| 颜色 | 黑色或灰色 |
---
## 🔧 如何组装
### SMD组装(热板/回流焊):
1. 通过模板涂抹焊膏
2. 安装元件(从最小的开始)
3. 在热板上回流焊(245°C峰值)
4. 在显微镜下检查是否有桥接
### 通孔组装:
1. 插入端子块、连接器和开关
2. 用温度控制的电烙铁焊接每个引脚
3. 修剪多余的引脚
4. 用异丙醇清洁
### 组装顺序:
1. **SMD元件** (0603电阻/电容 → IC → 光耦合器)
2. **通孔元件** (端子块 → 连接器 → 开关)
3. **最终检查** 和清洁
---
## 💻 如何编程
### 1️⃣ 设置I²C地址
- 使用3位滑动开关(A0,A1,A2)
- 地址 = (A0 × 1)+ (A1 × 2)+ (A2 × 4)
- 在7段显示屏上确认
### 2️⃣ 连接I²C
```
MCU → I2C_IN 连接器(右下角)
- VCC
- GND
- SDA
- SCL
```
### 3️⃣ 上传Arduino程序
```cpp
#include <Wire.h>
#define MCP_ADDR 0x20
void setup() {
Wire.begin();
// 设置所有GPIOA为输出
Wire.beginTransmission(MCP_ADDR);
Wire.write(0x00); // IODIRA
Wire.write(0x00); // 所有输出
Wire.endTransmission();
}
void loop() {
// 循环输出
for(int i = 0; i < 8; i++) {
Wire.beginTransmission(MCP_ADDR);
Wire.write(0x12); // GPIOA
Wire.write(1 << i);
Wire.endTransmission();
delay(500);
}
}
```
### 4️⃣ 选择开发板
- **Arduino IDE:** 选择`Arduino Uno`或兼容的开发板
- **库:** Wire库(内置)
---
## ⭐ 特别访问
您可以通过此链接直接访问此电路文件: [Altium在线访问](https://diy-guy-chris.365.altium.com/designs/B946E0F8-08BB-44F3-9F6D-7489046B26EA)
---
## 📺 观看教程
[🎥 点击此处观看完整的YouTube视频](https://youtu.be/AG7PeMTG8dg)
---
## 📜 许可证
MIT © Chris – Electronics Every Day
---
## 🙌 支持
如果您尝试了这个项目,请分享您的制作!
⭐ 如果您觉得这个项目有用,请给它点赞。
---
## 关于
🔍 工业级16通道GPIO扩展器,安装在DIN导轨上的PCB。采用MCP23017,光隔离输入,ULN2803A高电流输出,硬件地址选择和7段显示,可选5V/24V电源。适用于PLC扩展和工业自动化。
[YouTube教程链接](https://youtu.be/AG7PeMTG8dg)
### 主题
`工业自动化` `GPIO扩展器` `MCP23017` `I2C` `DIN导轨` `PLC` `工业I/O` `开放硬件` `嵌入式系统` `Arduino` `自动化`