Conectarea mai multor Arduino - Cum se transferă date
Se poate întâmpla să doriți să conectați mai multe Arduino. Există mai multe posibilități pentru aceasta. Conexiunea prin interfața I2C este foarte convenabilă. Puteți afla cum să faceți acest lucru aici.

I2C înseamnă Inter-Integrated Circuit și se pronunță I-Square-C sau I-To-C. Acesta este un standard dezvoltat inițial de Philips pentru comunicarea între diferite circuite integrate (circuite integrate). Un IC, master, ar trebui să preia controlul diferitelor IC-uri periferice. Această procedură este cunoscută sub numele de magistrală master-slave.
I2C are nevoie doar de două linii de date: SCL, ceasul serial (Serial Clock Line) și SDA, seria de date serial (Serial Data Line). Din fericire, placa Arduino este deja echipată cu ea. Pinul SDA este intrarea analogică 4, pinul SCL este intrarea analogică 5. În plus, pinii Arduino UNO R3 sunt, de asemenea, scoși afară pe partea stângă a pinilor digitali. Cu toate acestea, acestea sunt aceleași conexiuni ca A4 și A5.
După cum am menționat, I2C este un sistem master-slave. Asta înseamnă că una dintre plăcile Arduino trebuie să devină un maestru. Toate celelalte plăci Arduino primesc propria adresă.
Conectați mai multe Arduinos: schemă de circuit
Practic, pinii A4 și A5 ai tuturor plăcilor Arduion și GND sunt conectați. În plus, două rezistențe ar trebui conectate ca pull-up-uri pentru liniile SDA și SCL.
Arduino-urile pot fi fie furnizate prin surse de alimentare separate, fie prin alimentare USB, fie printr-o sursă de alimentare externă puternică. Nu vă recomand să utilizați priza de alimentare a unui Arduino, deoarece o diodă limitează debitul maxim de curent la un amper. Cu multe Arduino puteți trece repede peste el. Cu toate acestea, este esențial să se asigure polaritatea corectă cu acest tip de operație!
Conectați mai multe Arduinos: Master Code
Pentru a putea utiliza interfața I2C, biblioteca Wire trebuie integrată: include Wire a fost predecesorul Arduino și funcționalitatea I2C este conținută în această bibliotecă. Codul este alcătuit practic din două funcții principale: trimiterea datelor și primirea datelor.
Există o buclă for în buclă. Cu fiecare rulare, este comunicată o altă placă Arduino conectată. Funcția sendData este numită mai întâi în bucla for. Acesta primește ca adresă adresa țintă, placa destinatarului și o valoare între 0 și 255. Acesta este un exemplu de date care poate fi evaluat de destinatar.
Apoi se numește funcția primitData. Adresa țintă este transferată din nou. În funcția în sine, o cerere este trimisă mai întâi către placa de recepție. (Maestrul trebuie să trimită aceste solicitări către Arduino-urile conectate, astfel încât datele să poată fi trimise înapoi.) Acum sunt solicitate două pachete de date. Fiecare trebuie să fie în intervalul de valori de la 0 la 255 (adică un BYTE). Acestea sunt transferate într-o matrice multidimensională care poate fi utilizată ulterior în program. Aici trebuie înțeles doar ca exemplu. Ambele pachete de date sunt încă transmise către interfața serială și pot fi verificate pe monitorul serial.
Acum să ne uităm la ce arată pe de altă parte: în modulele slave.
Conectați mai multe Arduino: cod sclav
Așa cum era de așteptat, acest cod este destul de pasiv și așteaptă un mesaj de la master. Două evenimente sunt legate în configurare:
Funcția receiveEvent este apelată la primirea datelor. În acesta, datele primite sunt scrise pur și simplu în variabila x. LED-ul de pe pinul 13 clipește apoi la fel de des ca variabila x este mare. Din nou doar exemplar.
Funcția requestEvent este executată atunci când comandantul solicită date. Scrie două date într-o matrice: propria adresă și valoarea curentă pe pinul analogic 0. Deoarece această valoare este în intervalul de la 0 la 1023, este împărțită la patru pentru a fi transferată în domeniul țintă de la 0 la 255 (BYTE).
Este important ca fiecare placă Arduino sclavă să aibă propria adresă. Am conectat patru Arduino sclav aici și le-am numerotat de la 2 la 5.
Apropo, 112 plăci Arduino ar trebui să poată fi conectate și adresate cu ușurință.
Și acum aș fi foarte interesat de ceea ce faci cu el. Nu ezitați să scrieți asta în comentarii:-)
În concluzie, există de fapt o discuție foarte interesantă cu privire la faptul dacă termenii stăpân și sclav sunt încă adecvați. Personal, mi se pare de înțeles și foarte distractiv să citesc comentariile uneori extrem de polarizante.