Inhaltsverzeichnis:
2025 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2025-01-13 06:56
Hallo
Schöne Grüße..!!
Ich (Somanshu Choudhary) im Auftrag von Dcube Tech Ventures werde Relais über das I2C-Protokoll mit Arduino nano und MCP23008 steuern.
Schritt 1: Übersicht
- Das MCP23X08-Gerät bietet eine 8-Bit-Universal-I/O-Erweiterung für I2C-Bus- oder SPI-Anwendungen.
- Der MCP23X08 besteht aus mehreren 8-Bit-Konfigurationsregistern zur Auswahl von Eingang, Ausgang und Polarität. Der Systemmaster kann die E/As entweder als Eingänge oder als Ausgänge aktivieren, indem er die E/A-Konfigurationsbits schreibt. Die Daten für jeden Eingang oder Ausgang werden im entsprechenden Eingangs- oder Ausgangsregister gespeichert. Die Polarität des Input Port Registers kann mit dem Polarity Inversion Register invertiert werden. Alle Register können vom Systemmaster gelesen werden.
- DATENBLATT-LINK:
Schritt 2: Was Sie brauchen / Links
1. Arduino Nano-LINK:
2. Schild für Arduino Nano LINK:
3. USB-Kabel Typ A zu Micro Typ B 6 Fuß lang
4. I²C-Kabel LINK:
5. Acht SPDT I²C-gesteuerte Relais
6. Adapter-LINK:
Schritt 3: Schaltplan
Schritt 4: Programmierung - I
- In diesem Code verwende ich das Function Programming Paradigm
- Ich habe verschiedene Registerkarten für die Funktionsdefinition und den Funktionsaufruf verwendet
CODE UNTER TAB q:
// Einfacher Funktionsaufrufcode
#include void setup()
{
// I2C-Adresse des MCP23008
#define MCP_ADDR 0x20
// I2C Bus als Master beitreten
Wire.begin();
// Serielle Kommunikation starten und Baudrate einstellen
Serial.begin (9600);
// Beginnen Sie die Übertragung mit dem angegebenen Gerät auf dem I2C-Bus
Wire.beginTransmission(MCP_ADDR);
// Wählen Sie IODIR – I/O DIRECTION REGISTER-Register
Wire.write (0x00);
// Gewünschte Operation auswählen (Ausgabe)
Wire.write (0x00);
// Wählen Sie das CONFIGURATION-Register
Wire.write (0x05);
// Gewünschte Operation auswählen
Wire.write(0x0E);
// Übertragung beenden
Wire.endTransmission();
}
Leere Schleife ()
{
a1_on();
Verzögerung (1000);
a1_off();
Verzögerung (1000);
a2_on();
Verzögerung (1000);
a2_off();
Verzögerung (1000);
a3_on();
Verzögerung (1000);
a3_off();
Verzögerung (1000);
a4_on();
Verzögerung (1000);
a4_off();
Verzögerung (1000);
a5_on();
Verzögerung (1000);
a5_off();
Verzögerung (1000);
a6_on();
Verzögerung (1000);
a6_off();
Verzögerung (1000);
a7_on();
Verzögerung (1000);
a7_off();
Verzögerung (1000);
a8_on();
Verzögerung (1000);
a8_off();
}
CODE UNTER TAB q1:
// Dieser Code dient zum Ein- und Ausschalten von Relais 1 an Bord
void a1_on() {
// Übertragung beginnen
Wire.beginTransmission(MCP_ADDR);
Wire.write (0x09);
Wire.write (0x01);
Verzögerung (1800);
Wire.requestFrom(MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Ausgabe auf den Bildschirm
Serial.print ("GPIO-Wert:");
Serial.println (GPIO, BIN);
}
void a1_off()
{
// Übertragung beginnen
Wire.beginTransmission(MCP_ADDR);
Wire.write (0x09);
Wire.write (0x00);
Verzögerung (1800);
Wire.requestFrom(MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Ausgabe auf den Bildschirm
Serial.print ("GPIO-Wert:");
Serial.println (GPIO, BIN);
}
CODE UNTER TAB q2:
// Dieser Code dient zum Ein- und Ausschalten von Relais 2 an Bord
void a2_on() {
// Übertragung beginnen
Wire.beginTransmission(MCP_ADDR);
Wire.write (0x09);
Wire.write (0x02);
Verzögerung (1800);
Wire.requestFrom(MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Ausgabe auf den Bildschirm
Serial.print ("GPIO-Wert:");
Serial.println (GPIO, BIN);
}
void a2_off()
{
// Übertragung beginnen
Wire.beginTransmission(MCP_ADDR);
Wire.write (0x09);
Wire.write (0x00);
Verzögerung (1800);
Wire.requestFrom(MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Ausgabe auf den Bildschirm
Serial.print ("GPIO-Wert:");
Serial.println (GPIO, BIN);
}
CODE UNTER TAB q3:// Dieser Code dient zum Ein- und Ausschalten von Relais 3 an Bord
void a3_on()
{
// Übertragung beginnen
Wire.beginTransmission(MCP_ADDR);
Wire.write (0x09);
Wire.write (0x04);
Verzögerung (1800);
Wire.requestFrom(MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Ausgabe auf den Bildschirm
Serial.print ("GPIO-Wert:");
Serial.println (GPIO, BIN);
}
void a3_off()
{
// Übertragung beginnen
Wire.beginTransmission(MCP_ADDR);
Wire.write (0x09);
Wire.write (0x00);
Verzögerung (1800);
Wire.requestFrom(MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Ausgabe auf den Bildschirm
Serial.print ("GPIO-Wert:");
Serial.println (GPIO, BIN);
}
Schritt 5: Programmierung - II
CODE UNTER TAB q4:
// Dieser Code dient zum Ein- und Ausschalten von Relais 4 an Bord
void a4_on()
{
// Übertragung beginnen
Wire.beginTransmission(MCP_ADDR);
Wire.write (0x09);
Wire.write (0x08);
Verzögerung (1800);
Wire.requestFrom(MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Ausgabe auf den Bildschirm
Serial.print ("GPIO-Wert:");
Serial.println (GPIO, BIN);
}
void a4_off()
{
// Übertragung beginnen
Wire.beginTransmission(MCP_ADDR);
Wire.write (0x09);
Wire.write (0x00);
Verzögerung (1800);
Wire.requestFrom(MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Ausgabe auf den Bildschirm
Serial.print ("GPIO-Wert:");
Serial.println (GPIO, BIN);
}
CODE UNTER TAB q5:
// Dieser Code dient zum Ein- und Ausschalten von Relais 5 an Bord
void a5_on()
{
// Übertragung beginnen
Wire.beginTransmission(MCP_ADDR);
Wire.write (0x09);
Wire.write(0x10);
Verzögerung (1800);
Wire.requestFrom(MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Ausgabe auf den Bildschirm
Serial.print ("GPIO-Wert:");
Serial.println (GPIO, BIN);
}
void a5_off()
{
// Übertragung beginnen
Wire.beginTransmission(MCP_ADDR);
Wire.write (0x09);
Wire.write (0x00);
Verzögerung (1800);
Wire.requestFrom(MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Ausgabe auf den Bildschirm
Serial.print ("GPIO-Wert:");
Serial.println (GPIO, BIN);
}
CODE UNTER TAB q6:// Dieser Code dient zum Ein- und Ausschalten von Relais 6 an Bord
void a6_on()
{
// Übertragung beginnen
Wire.beginTransmission(MCP_ADDR);
Wire.write (0x09);
Wire.write (0x20);
Verzögerung (1800);
Wire.requestFrom(MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Ausgabe auf den Bildschirm
Serial.print ("GPIO-Wert:");
Serial.println (GPIO, BIN);
}
void a6_off()
{
// Übertragung beginnen
Wire.beginTransmission(MCP_ADDR);
Wire.write (0x09);
Wire.write (0x00);
Verzögerung (1800);
Wire.requestFrom(MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Ausgabe auf den Bildschirm
Serial.print ("GPIO-Wert:");
Serial.println (GPIO, BIN);
}
CODE UNTER TAB q7:// Dieser Code dient zum Ein- und Ausschalten von Relais 7 an Bord
void a7_on() {
// Übertragung beginnen
Wire.beginTransmission(MCP_ADDR);
Wire.write (0x09);
Wire.write (0x40);
Verzögerung (1800);
Wire.requestFrom(MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Ausgabe auf den Bildschirm
Serial.print ("GPIO-Wert:");
Serial.println (GPIO, BIN);
}
void a7_off()
{
// Übertragung beginnen
Wire.beginTransmission(MCP_ADDR);
Wire.write (0x09);
Wire.write (0x00);
Verzögerung (1800);
Wire.requestFrom(MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Ausgabe auf den Bildschirm
Serial.print ("GPIO-Wert:");
Serial.println (GPIO, BIN);
}
CODE UNTER TAB q8:// Dieser Code dient zum Ein- und Ausschalten von Relais 8 an Bord
void a8_on() {
// Übertragung beginnen
Wire.beginTransmission(MCP_ADDR);
Wire.write (0x09);
Wire.write (0x80);
Verzögerung (1800);
Wire.requestFrom(MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Ausgabe auf den Bildschirm
Serial.print ("GPIO-Wert:");
Serial.println (GPIO, BIN);
}
void a8_off()
{
// Übertragung beginnen
Wire.beginTransmission(MCP_ADDR);
Wire.write (0x09);
Wire.write (0x00);
Verzögerung (1800);
Wire.requestFrom(MCP_ADDR, 1);
int GPIO = Wire.read();
Wire.endTransmission();
// Ausgabe auf den Bildschirm
Serial.print ("GPIO-Wert:");
Serial.println (GPIO, BIN);
}
Schritt 6: Video
Für weitere Fragen besuchen Sie gerne unsere Website:
www.dcubetechnologies.com