Mcp23017: Skirtumas tarp puslapio versijų
Jump to navigation
Jump to search
(nerodoma viena tarpinė versija, sukurta to paties naudotojo) | |||
7 eilutė: | 7 eilutė: | ||
= ESP32 Wiring = | = ESP32 Wiring = | ||
− | * SDA | + | [[Vaizdas:D8fddce06241296363242bc44a0fffc8804a5295 2 641x500.jpg]] |
− | * SCL | + | [[Vaizdas:Esquema.png]] |
− | * | + | |
− | * | + | * Board 3.3V output to MCP23017 Vdd |
− | * | + | * Board ground/GND to MCP23017 Vss |
− | * | + | * Board SCL (pin 22) to MCP23017 SCL |
− | * | + | * Board SDA (pin 21) to MCP23017 SDA |
+ | * MCP23017 SCL to 4.7 KΩ resistor connected to 3.3V | ||
+ | * MCP23017 SDA to 4.7 KΩ resistor connected to 3.3V | ||
+ | * MCP23017 A0 to ground | ||
+ | * MCP23017 A1 to ground | ||
+ | * MCP23017 A2 to ground | ||
+ | * MCP23017 reset to 1K resistor connected to 3.3V | ||
+ | |||
+ | == I2C Scanner == | ||
<Syntaxhighlight lang="cpp"> | <Syntaxhighlight lang="cpp"> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
#include <Wire.h> | #include <Wire.h> | ||
− | void setup() | + | |
− | + | void setup() { | |
− | Serial.begin (115200); | + | Wire.begin(); |
− | + | Serial.begin(115200); | |
+ | Serial.println("\nI2C Scanner"); | ||
} | } | ||
− | void | + | |
− | + | void loop() { | |
− | + | byte error, address; | |
− | Serial.println (" | + | int nDevices; |
− | + | Serial.println("Scanning..."); | |
− | + | nDevices = 0; | |
− | for ( | + | for(address = 1; address < 127; address++ ) { |
− | { | + | Wire.beginTransmission(address); |
− | Wire.beginTransmission ( | + | error = Wire.endTransmission(); |
− | + | if (error == 0) { | |
− | { | + | Serial.print("I2C device found at address 0x"); |
− | Serial.print (" | + | if (address<16) { |
− | Serial. | + | Serial.print("0"); |
− | Serial.print (" | + | } |
− | Serial.print ( | + | Serial.println(address,HEX); |
− | Serial.println (")"); | + | nDevices++; |
− | + | } | |
+ | else if (error==4) { | ||
+ | Serial.print("Unknow error at address 0x"); | ||
+ | if (address<16) { | ||
+ | Serial.print("0"); | ||
+ | } | ||
+ | Serial.println(address,HEX); | ||
+ | } | ||
+ | } | ||
+ | if (nDevices == 0) { | ||
+ | Serial.println("No I2C devices found\n"); | ||
+ | } | ||
+ | else { | ||
+ | Serial.println("done\n"); | ||
+ | } | ||
+ | delay(5000); | ||
} | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | == Example code == | ||
+ | |||
+ | <syntaxhighlight lang="cpp"> | ||
+ | // Install library first | ||
+ | #include <Adafruit_MCP23X17.h> | ||
+ | |||
+ | #define LED_PIN 0 // MCP23XXX pin LED is attached to | ||
+ | |||
+ | Adafruit_MCP23X17 mcp; | ||
+ | |||
+ | void setup() { | ||
+ | Serial.begin(115200); | ||
+ | //while (!Serial); | ||
+ | Serial.println("MCP23xxx Blink Test!"); | ||
+ | |||
+ | // uncomment appropriate mcp.begin | ||
+ | if (!mcp.begin_I2C()) { | ||
+ | //if (!mcp.begin_SPI(CS_PIN)) { | ||
+ | Serial.println("Error."); | ||
+ | while (1); | ||
+ | } | ||
+ | |||
+ | // configure pin for output | ||
+ | mcp.pinMode(LED_PIN, OUTPUT); | ||
+ | Serial.println("Looping..."); | ||
} | } | ||
− | Serial. | + | |
− | + | void loop() { | |
− | Serial.println (" | + | Serial.println("Turn on"); |
− | + | mcp.digitalWrite(LED_PIN, HIGH); | |
− | + | delay(1000); | |
− | + | Serial.println("Turn off"); | |
− | + | mcp.digitalWrite(LED_PIN, LOW); | |
− | + | delay(1000); | |
+ | Serial.println("loop again"); | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> |
Dabartinė 10:58, 26 lapkričio 2022 versija
This port expander provides you 16 more GPIOs and cost you around 1€. And because it communicates via I²C it only uses two GPIOs of your ESP8266 and you can address up to 8 MCP23017. That makes up to 126 additional GPIOs.
ESP32 Wiring[keisti]
- Board 3.3V output to MCP23017 Vdd
- Board ground/GND to MCP23017 Vss
- Board SCL (pin 22) to MCP23017 SCL
- Board SDA (pin 21) to MCP23017 SDA
- MCP23017 SCL to 4.7 KΩ resistor connected to 3.3V
- MCP23017 SDA to 4.7 KΩ resistor connected to 3.3V
- MCP23017 A0 to ground
- MCP23017 A1 to ground
- MCP23017 A2 to ground
- MCP23017 reset to 1K resistor connected to 3.3V
I2C Scanner[keisti]
#include <Wire.h>
void setup() {
Wire.begin();
Serial.begin(115200);
Serial.println("\nI2C Scanner");
}
void loop() {
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++ ) {
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0) {
Serial.print("I2C device found at address 0x");
if (address<16) {
Serial.print("0");
}
Serial.println(address,HEX);
nDevices++;
}
else if (error==4) {
Serial.print("Unknow error at address 0x");
if (address<16) {
Serial.print("0");
}
Serial.println(address,HEX);
}
}
if (nDevices == 0) {
Serial.println("No I2C devices found\n");
}
else {
Serial.println("done\n");
}
delay(5000);
}
Example code[keisti]
// Install library first
#include <Adafruit_MCP23X17.h>
#define LED_PIN 0 // MCP23XXX pin LED is attached to
Adafruit_MCP23X17 mcp;
void setup() {
Serial.begin(115200);
//while (!Serial);
Serial.println("MCP23xxx Blink Test!");
// uncomment appropriate mcp.begin
if (!mcp.begin_I2C()) {
//if (!mcp.begin_SPI(CS_PIN)) {
Serial.println("Error.");
while (1);
}
// configure pin for output
mcp.pinMode(LED_PIN, OUTPUT);
Serial.println("Looping...");
}
void loop() {
Serial.println("Turn on");
mcp.digitalWrite(LED_PIN, HIGH);
delay(1000);
Serial.println("Turn off");
mcp.digitalWrite(LED_PIN, LOW);
delay(1000);
Serial.println("loop again");
}
ESP8266[keisti]
https://medium.com/@wilko.vehreke/more-gpios-for-the-esp8266-with-the-mcp23017-b89f5e15cde3