如何解决ESP32 - 连接到 MCP23009即使连接返回成功,也无法将 OUTPUT 设为 HIGH ( 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 固定它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。