i2c - ESP32 - 连接到 MCP23009。即使连接返回成功(0),也无法将 OUTPUT 设置为 HIGH
问题描述
我试图让 ESP32 与 I2C 一起工作,因为我有它,所以我拿了一个 MCP23009。Schmeantic 在图像中
我的代码如下:
#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 固定它。
推荐阅读
- postgresql - Psql 连接字符串 dbname 参数显然不起作用?
- c# - 使用 openXML 更新现有 Excel 文件的样式表
- python - 带有python的Google Drive API没有获取最新的目录
- amazon-web-services - AWS Auto Scaling 终止实例并使用新的根卷和 IP 创建第二个实例。自动缩放在这里有什么用?
- node.js - map函数后获取数据
- html - html css 分页符
- excel - 如何在两个给定的编号之间生成列表。在excel中
- c# - Elastic Search Nest - 比较两个字段
- javascript - 无法在本机反应的视图之间导航
- angular - RxJS Observables - 多个订阅者获取对同一个对象的引用