
Cuprins:
2025 Autor: John Day | [email protected]. Modificat ultima dată: 2025-01-23 15:04

Buna ziua
Salutari bune.. !!
Eu (Somanshu Choudhary) în numele Dcube se aventurează să controleze relele prin protocolul I2C folosind Arduino nano și MCP23008.
Pasul 1: Prezentare generală

- Dispozitivul MCP23X08 oferă extindere I / O paralelă de 8 biți, de uz general, pentru aplicații de magistrală I2C sau SPI.
- MCP23X08 constă din mai multe registre de configurație pe 8 biți pentru selectarea intrării, a ieșirii și a polarității. Masterul de sistem poate activa I / O-urile ca intrări sau ieșiri scriind biții de configurare I / O. Datele pentru fiecare intrare sau ieșire sunt păstrate în registrul de intrare sau ieșire corespunzător. Polaritatea registrului de port de intrare poate fi inversată cu registrul de inversare a polarității. Toate registrele pot fi citite de masterul de sistem.
- LINK DE FIȘE DE BAZĂ:
Pasul 2: De ce aveți nevoie / linkuri

1. Arduino Nano LINK:
2. Ecran pentru Arduino Nano LINK:
3. Cablu USB de tip A la Micro tip B lung de 6 picioare
4. I²C Cablu LINK:
5. Opt relee controlate SPDT I²C
6. LINK-ul adaptorului:
Pasul 3: Diagrama circuitului


Pasul 4: Programare - I


- În acest cod, folosesc Paradigma de programare a funcțiilor
- Am folosit diferite file pentru definirea funcțiilor și apelarea funcției
COD SUB TABUL q:
// Cod de apelare funcție simplă
#include setup nul ()
{
// Adresa I2C a MCP23008
#define MCP_ADDR 0x20
// Alătură-te I2C Bus ca master
Wire.begin ();
// Porniți comunicarea în serie și setați rata de transmisie
Serial.begin (9600);
// Începeți transmisia cu dispozitivul dat pe magistrala I2C
Wire.beginTransmission (MCP_ADDR);
// Selectați IODIR - ÎNREGISTRARE REGISTRE I / O
Wire.write (0x00);
// Selectați operația necesară (ieșire)
Wire.write (0x00);
// Selectați registrul CONFIGURARE
Wire.write (0x05);
// Selectați operațiunea necesară
Wire.write (0x0E);
// încheie transmisia
Wire.endTransmission ();
}
bucla nulă ()
{
a1_on ();
întârziere (1000);
a1_off ();
întârziere (1000);
a2_on ();
întârziere (1000);
a2_off ();
întârziere (1000);
a3_on ();
întârziere (1000);
a3_off ();
întârziere (1000);
a4_on ();
întârziere (1000);
a4_off ();
întârziere (1000);
a5_on ();
întârziere (1000);
a5_off ();
întârziere (1000);
a6_on ();
întârziere (1000);
a6_off ();
întârziere (1000);
a7_on ();
întârziere (1000);
a7_off ();
întârziere (1000);
a8_on ();
întârziere (1000);
a8_off ();
}
COD SUB TAB Q1:
// Acest cod trebuie să pornească și să oprească releul 1 la bord
void a1_on () {
// Începeți transmisia
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x01);
întârziere (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read ();
Wire.endTransmission ();
// Ieșire pe ecran
Serial.print ("valoare GPIO:");
Serial.println (GPIO, BIN);
}
nul a1_off ()
{
// Începeți transmisia
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x00);
întârziere (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read ();
Wire.endTransmission ();
// Ieșire pe ecran
Serial.print ("valoare GPIO:");
Serial.println (GPIO, BIN);
}
COD SUB TAB Q2:
// Acest cod trebuie să pornească și să oprească releul 2 de la bord
nul a2_on () {
// Începeți transmisia
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x02);
întârziere (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read ();
Wire.endTransmission ();
// Ieșire pe ecran
Serial.print ("valoare GPIO:");
Serial.println (GPIO, BIN);
}
nul a2_off ()
{
// Începeți transmisia
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x00);
întârziere (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read ();
Wire.endTransmission ();
// Ieșire pe ecran
Serial.print ("valoare GPIO:");
Serial.println (GPIO, BIN);
}
COD SUB TAB q3: // Acest cod trebuie să pornească și să oprească releul 3 de la bord
nul a3_on ()
{
// Începeți transmisia
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x04);
întârziere (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read ();
Wire.endTransmission ();
// Ieșire pe ecran
Serial.print ("valoare GPIO:");
Serial.println (GPIO, BIN);
}
nul a3_off ()
{
// Începeți transmisia
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x00);
întârziere (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read ();
Wire.endTransmission ();
// Ieșire pe ecran
Serial.print ("valoare GPIO:");
Serial.println (GPIO, BIN);
}
Pasul 5: Programare - II

COD SUB TAB Q4:
// Acest cod trebuie să pornească și să oprească releul 4 la bord
nul a4_on ()
{
// Începeți transmisia
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x08);
întârziere (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read ();
Wire.endTransmission ();
// Ieșire pe ecran
Serial.print ("valoare GPIO:");
Serial.println (GPIO, BIN);
}
nul a4_off ()
{
// Începeți transmisia
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x00);
întârziere (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read ();
Wire.endTransmission ();
// Ieșire pe ecran
Serial.print ("valoare GPIO:");
Serial.println (GPIO, BIN);
}
COD SUB TAB Q5:
// Acest cod trebuie să pornească și să oprească releul 5 la bord
nul a5_on ()
{
// Începeți transmisia
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x10);
întârziere (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read ();
Wire.endTransmission ();
// Ieșire pe ecran
Serial.print ("valoare GPIO:");
Serial.println (GPIO, BIN);
}
nul a5_off ()
{
// Începeți transmisia
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x00);
întârziere (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read ();
Wire.endTransmission ();
// Ieșire pe ecran
Serial.print ("valoare GPIO:");
Serial.println (GPIO, BIN);
}
COD SUB TAB q6: // Acest cod trebuie să pornească și să oprească releul 6 de la bord
nul a6_on ()
{
// Începeți transmisia
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x20);
întârziere (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read ();
Wire.endTransmission ();
// Ieșire pe ecran
Serial.print ("valoare GPIO:");
Serial.println (GPIO, BIN);
}
nul a6_off ()
{
// Începeți transmisia
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x00);
întârziere (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read ();
Wire.endTransmission ();
// Ieșire pe ecran
Serial.print ("valoare GPIO:");
Serial.println (GPIO, BIN);
}
COD SUB TAB q7: // Acest cod trebuie să pornească și să oprească releul 7 de la bord
void a7_on () {
// Începeți transmisia
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x40);
întârziere (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read ();
Wire.endTransmission ();
// Ieșire pe ecran
Serial.print ("valoare GPIO:");
Serial.println (GPIO, BIN);
}
nul a7_off ()
{
// Începeți transmisia
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x00);
întârziere (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read ();
Wire.endTransmission ();
// Ieșire pe ecran
Serial.print ("valoare GPIO:");
Serial.println (GPIO, BIN);
}
COD SUB TAB q8: // Acest cod trebuie să pornească și să oprească releul 8 de la bord
nul a8_on () {
// Începeți transmisia
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x80);
întârziere (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read ();
Wire.endTransmission ();
// Ieșire pe ecran
Serial.print ("valoare GPIO:");
Serial.println (GPIO, BIN);
}
nul a8_off ()
{
// Începeți transmisia
Wire.beginTransmission (MCP_ADDR);
Wire.write (0x09);
Wire.write (0x00);
întârziere (1800);
Wire.requestFrom (MCP_ADDR, 1);
int GPIO = Wire.read ();
Wire.endTransmission ();
// Ieșire pe ecran
Serial.print ("valoare GPIO:");
Serial.println (GPIO, BIN);
}
Pasul 6: Video
Pentru întrebări suplimentare Simțiți-vă liber să vizitați site-ul nostru:
www.dcubetechnologies.com
Recomandat:
Releu I2C Met Arduino IDE: 5 pași

I2C Relay Met Arduino IDE: comand o releu plăcută, dar nu a existat nicio instrucțiune ArduinoIDE, doar Raspberry Pi e.o. Aflu cum să-l folosesc cu Arduino și vreau să-l împărtășesc, astfel încât să puteți economisi timp. Exemplu original RaspberryPi: wiki.52pi.com/index.php/DockerPi_4_Channel_R
Noțiuni introductive despre interfața senzorului I2C ?? - Interfață MMA8451 folosind ESP32s: 8 pași

Noțiuni introductive despre interfața senzorului I2C ?? - Interfața MMA8451 folosind ESP32s: În acest tutorial, veți afla totul despre cum să porniți, să conectați și să obțineți dispozitivul I2C (accelerometru) care funcționează cu controlerul (Arduino, ESP32, ESP8266, ESP12 NodeMCU)
Afișaj LCD I2C / IIC - Utilizați un LCD SPI pe afișajul LCD I2C Utilizând modulul SPI la IIC cu Arduino: 5 pași

Afișaj LCD I2C / IIC | Utilizați un LCD SPI pe afișajul LCD I2C Utilizarea modulului SPI la IIC cu Arduino: Bună băieți, deoarece un SPI LCD 1602 normal are prea multe fire pentru a se conecta, deci este foarte dificil să îl interfațați cu arduino, dar există un modul disponibil pe piață. convertiți afișajul SPI în afișajul IIC, deci trebuie să conectați doar 4 fire
Circuit intermitent cu bandă LED utilizând releu de 12V: 7 pași (cu imagini)

Circuit intermitent cu bandă cu LED-uri folosind releu de 12V: Hii prietene, astăzi voi face un circuit de clipire cu bandă cu LED-uri folosind releu de 12V și condensatori. Să începem
Controlul unui releu de pe telefonul dvs. utilizând Blynk: 4 pași

Controlul unui releu de pe telefonul dvs. folosind Blynk: În acest instructiv vă voi arăta cum puteți activa / dezactiva un releu de pe telefonul dvs. inteligent