Token导航 LogoToken导航TokenDH.com
Mcp23009 E logo
运维云端未说明官方级别未说明来源级核验

Mcp23009 E

MCP Server

用于控制MCP23009E I/O扩展器的完整Arduino库,支持GPIO配置、中断和Pin兼容API。

工具数

0

提示词数

0

GitHub Stars

0

资源数

0
C++云端部署Docker

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

steamicc

提供方

steamicc

最后核验

2026/5/17 20:20

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

详细介绍

MCP23009E Arduino库

完整的Arduino库,用于控制具有GPIO配置、中断和Pin-compatible API的MCP23009E I/O扩展器。

特性

  • 完全GPIO控制:将引脚配置为输入/输出、读/写级别
  • 电阻:内置上拉支撑
  • 中断支持:回调系统的硬件中断
  • 针兼容API: MCP23009Pin 类类似于Arduino的数字引脚
  • 主动低支撑: MCP23009ActiveLowPin 用于LED和类似负载
  • 注册访问权限:用于高级使用的低级注册访问

安装

Arduino 集成开发环境

  1. 以ZIP格式下载此库
  2. 在Arduino IDE中: 草图包含库添加。ZIP库
  3. 选择下载的ZIP文件

平台IO

添加到您的 platformio.ini:

lib_deps =
    https://github.com/steamicc/MCP23009E.git

快速开始

基本用法

#include 
#include 

MCP23009E mcp(Wire, MCP23009_I2C_ADDR);

void setup() {
    Serial.begin(115200);
    mcp.begin();  // Initialize I2C and MCP23009E

    // Configure a GPIO as input with pull-up
    mcp.setup(7, MCP23009_DIR_INPUT, MCP23009_PULLUP);

    // Read the level
    uint8_t level = mcp.getLevel(7);
    Serial.println(level ? "HIGH" : "LOW");

    // Configure a GPIO as output
    mcp.setup(0, MCP23009_DIR_OUTPUT);
    mcp.setLevel(0, MCP23009_LOGIC_HIGH);
}

void loop() {
    // Your code here
}

针兼容API

#include 
#include 

MCP23009E mcp(Wire, MCP23009_I2C_ADDR);

// Create Pin objects (mode will be configured after I2C initialization)
MCP23009Pin button(mcp, 7);
MCP23009Pin led(mcp, 0);

void setup() {
    Wire.begin();
    mcp.begin();

    // Configure pin modes after mcp.begin()
    button.pinMode(INPUT_PULLUP);
    led.pinMode(OUTPUT);

    // Use just like Arduino digital pins!
    led.high();
    if (button.digitalRead() == LOW) {
        led.low();
    }
}

void loop() {
    led.toggle();
    delay(500);
}

活动低LED

对于连接在VCC和GPIO之间的LED(推荐配置):

3.3V → [LED] → [Resistor 220-330Ω] → GPIO
#include 
#include 

MCP23009E mcp(Wire, MCP23009_I2C_ADDR);

// Create active-low LED pin (logic is automatically inverted)
MCP23009ActiveLowPin led(mcp, 0);

void setup() {
    Wire.begin();
    mcp.begin();

    // Configure pin mode after mcp.begin()
    led.pinMode(OUTPUT);
}

void loop() {
    led.high();   // LED turns ON (GPIO goes LOW)
    delay(500);
    led.low();    // LED turns OFF (GPIO goes HIGH)
    delay(500);
}

为什么活性低? MCP23009E每个引脚可以吸收25mA的电流,但只能产生约1mA的电流。主动低配置允许适当的LED亮度。

错误处理

所有I2C操作都会自动跟踪错误。关键操作后的检查:

#include 
#include 

MCP23009E mcp(Wire, MCP23009_I2C_ADDR);

void setup() {
    Serial.begin(115200);
    mcp.begin();

    // Check if device is connected
    if (!mcp.isConnected()) {
        Serial.println("MCP23009E not found!");
        Serial.print("Error code: ");
        Serial.println(mcp.getLastError());
        while(1);  // Halt
    }

    // Configure GPIO and check for errors
    mcp.setup(0, MCP23009_DIR_OUTPUT);

    if (mcp.getLastError() != MCP23009_OK) {
        Serial.println("Configuration failed!");
    }
}

void loop() {
    // Read and check for errors
    uint8_t value = mcp.getLevel(7);

    if (mcp.getLastError() == MCP23009_OK) {
        Serial.println(value ? "HIGH" : "LOW");
    } else {
        Serial.println("Read error!");
    }

    delay(1000);
}

API 参考

MCP23009E级

构造函数

MCP23009E(TwoWire& wire = Wire, uint8_t address = MCP23009_I2C_ADDR)

主要方法

  • void begin(int resetPin = -1, int interruptPin = -1) -初始化设备
  • void reset() -硬件复位(需要复位引脚)
  • void setup(uint8_t gpx, uint8_t direction, uint8_t pullup, uint8_t polarity) -配置GPIO
  • void setLevel(uint8_t gpx, uint8_t level) -设置输出电平
  • uint8_t getLevel(uint8_t gpx) -读取输入电平

错误处理方法

  • MCP23009Error getLastError() -获取最后一个I2C错误代码
  • void clearError() -清除错误状态
  • bool isConnected() -检查设备是否在I2C总线上响应

错误代码:

  • MCP23009_OK (0) -成功
  • MCP23009_ERROR_I2C_WRITE (1) -I2C写入失败
  • MCP23009_ERROR_I2C_READ (2) -I2C读取失败
  • MCP23009_ERROR_INVALID_PIN (3) -无效的引脚号
  • MCP23009_ERROR_TIMEOUT (4) -I2C超时

中断方法

  • void interruptOnChange(uint8_t gpx, InterruptCallback callback) -注册更改回调
  • void interruptOnFalling(uint8_t gpx, SimpleCallback callback) -注册下降沿回调
  • void interruptOnRaising(uint8_t gpx, SimpleCallback callback) -注册上升沿回调
  • void disableInterrupt(uint8_t gpx) -禁用GPIO上的中断
  • bool processPendingInterrupts() - 在loop()中调用此函数 处理挂起的中断(如果已处理,则返回true)
  • void handleInterrupt() -低级中断处理程序(通常不直接调用)

注册访问权限

  • setIODIR(), getIODIR() -I/O方向寄存器
  • setGPPU(), getGPPU() -调出注册表
  • setGPIO(), getGPIO() -GPIO注册
  • 还有更多。..

MCP23009引脚等级

构造函数

MCP23009Pin(MCP23009E& mcp, uint8_t pinNumber, uint8_t mode = INPUT)

方法

  • void pinMode(uint8_t mode) -设置引脚模式(INPUT、OUTPUT、INPUT_PULLUP)
  • void digitalWrite(uint8_t value) -写高或低
  • uint8_t digitalRead() -读取引脚状态
  • void high() -将引脚设置为高
  • void low() -将引脚设置为低
  • void toggle() -切换引脚状态
  • void attachInterrupt(void (*callback)(), int mode) -附加中断
  • void detachInterrupt() -断开中断

MCP23009有源低引脚类

继承自 MCP23009Pin 具有用于主动低负载的反向逻辑。

构造函数

MCP23009ActiveLowPin(MCP23009E& mcp, uint8_t pinNumber, uint8_t mode = OUTPUT)

所有方法均与相同 MCP23009Pin,但逻辑会自动反转。

例子

该库包括几个示例:

基本示例

  • 基础 -读取D-PAD按钮并打印状态
  • LED_ActiveLow -控制LED处于活动低配置,并具有效果
  • 错误处理 -演示I2C错误检测和处理

中断示例

  • 中断基本 -使用一个按钮(下降/上升)进行简单的中断处理
  • 中断多路按钮 -处理来自多个按钮的中断(CHANGE模式)
  • 用Pin中断 -使用带中断和LED控制的Pin API

硬件注意事项

I2C地址

默认地址为 0x20。可以通过硬件引脚A0-A2进行更改。

当前限制

  • 吸收电流(IOL):每个引脚最大25mA
  • 源电流(IOH):每个引脚约1mA

推荐:对LED使用低电平配置(连接VCC和GPIO之间)。

引体向上

MCP23009E内置100kΩ上拉电阻器,每个引脚都可以启用。

兼容性

  • 阿尔杜伊诺:所有支持I2C的板
  • ESP32:已测试并正常工作
  • ESP8266:已测试并正常工作
  • STM32:已测试并正常工作
  • 其他:应在任何具有Wire库的平台上工作

许可证

此库根据MIT许可证发布。有关详细信息,请参阅LICENSE文件。

鸣谢

基于MCP23009E的MicroPython驱动程序。

贡献

欢迎投稿!请在GitHub上打开问题或提交拉取请求。

目录标签

目录标签

C++云端部署Docker本地部署GPIO控制中断支持Arduino库I2C设备硬件扩展

接入字段

传输方式(transport,传输协议)

未说明

鉴权方式(authType,认证方式)

none

工具数量(toolCount,工具数)

0

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

未说明none部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

仍需确认:installCommand

来源信息

继续浏览同类 MCP