ESP32 - 连接到 MCP23009。即使连接 returns 成功 ( 0 ),也无法将 OUTPUT 设置为 HIGH

ESP32 - Connection to MCP23009. Can't get the OUTPUT to HIGH even if the connections returns succesful ( 0 )

我试图让 ESP32 与 I2C 一起工作,因为我身边有它,所以我选择了 MCP23009。 Schmeantic 在图像中 Image

我的代码如下:

#include <Wire.h> // specify use of Wire.h library.

#define MCPAddress  0x20 //I2C Address

#define IO_DIR_REG 0x00           // The Output Register
#define GPIO_REG 0x09             // The GPIO Register
#define IOCON 0x05                // Settings
#define SEQOP_REQ 0b00100000      // Disable address increment


#define I2C_SDA 21
#define I2C_SCL 22

int error;

void setup() 
{
  Serial.begin(115200); 
  delay(1000);
  Serial.println("Starting Wire");
  Wire.begin(I2C_SDA, I2C_SCL);

  Wire.setClock(100000); //Frequenz

  Wire.beginTransmission(MCPAddress); // Check if connection succesfull
  error = Wire.endTransmission();
  if(error == 0){
    Serial.println("Success");
  }else{
    Serial.println("Failure: ");
    Serial.print(error);
  }
  
  //Serial.println("Disable Auto-Address increment!");
  //writeBlockData(IOCON,SEQOP_REQ); //Experimental, didn't make it work
  
  Serial.println("Setting Outputs!");
  writeBlockData(IO_DIR_REG,0x00);
  
  Serial.println("Writing LOW!");
  writeBlockData(GPIO_REG,0x00);

}
 
void loop() 
{  
  Serial.println("Writing HIGH!");
  writeBlockData(GPIO_REG,0b11111111);
  delay(3000);
  
  Serial.println("Writing LOW!");
  writeBlockData(GPIO_REG,0b00000000);
  delay(3000);
}

int writeBlockData(uint8_t cmd, uint8_t val)
{
  Wire.beginTransmission(MCPAddress);
  Wire.write(cmd);
  Wire.write(val);
  delay(10);
  return Wire.endTransmission();
}

它相当简单,连接正常,因为当我读取 Wire.endTransmission() 时我只得到 0,但 LED 永远不会变高。不管我做什么。这是来自 MCP http://ww1.microchip.com/downloads/en/DeviceDoc/20002121C.pdf 的数据表 如果有人看到我的错误,我将不胜感激!我对使用 I2C 还很陌生,所以我并没有真正看到它。即使使用 Arduino 库也没有用。

谢谢和问候!

嗯,我没有阅读整个数据表。 MCP 具有漏极开路输出,因此转动二极管并将另一端放入 Vdd 固定它。