Lekce 5
Pátá lekce Arduino kurzu pro začátečníky: naučíte se naskenovat sběrnici I²C a zjistit adresu připojeného zařízení. Ukážeme si zapojení, kód do Arduino IDE i to, jak Arduino vypíše nalezené I²C adresy do sériového monitoru – hodí se vždy, když neznáte přesnou adresu svého displeje nebo čidla.
Popisek obrázku: I²C zařízení (zde LCD 1602) připojíte čtyřmi vodiči. GND na GND, VCC na 5 V, datový vodič SDA na pin A4 a hodinový SCL na pin A5 (na Arduino Mega jsou to piny 20 a 21).
| I²C zařízení | Arduino Uno | Arduino Mega |
|---|---|---|
| GND | GND | GND |
| VCC | 5V | 5V |
| SDA | A4 | 20 |
| SCL | A5 | 21 |
Každé zařízení na sběrnici I²C má svou jedinečnou adresu, přes kterou s ním Arduino komunikuje – posílá příkazy a přijímá data. Skener postupně zkouší oslovit všechny možné adresy (1 až 126) a sleduje, která adresa odpoví. Nalezená zařízení pak vypíše jako hexadecimální číslo do sériového monitoru. Tuto 7bitovou adresu pak použijete třeba ve funkci Wire.begin. Zařízení můžete připojovat i odpojovat za chodu – skener se opakuje každých pár vteřin.
// Skener sběrnice I2C
// Email: podpora@laskakit.cz · Web: laskakit.cz
// připoj knihovnu
#include <Wire.h>
void setup() {
Wire.begin();
Serial.begin(9600);
while (!Serial); // Leonardo: počkat na sériový monitor
Serial.println("\nI2C Skener");
}
void loop() {
byte error, address;
int nDevices;
Serial.println("Skenování...");
nDevices = 0;
for (address = 1; address < 127; address++) {
// vrácená hodnota Wire.endTransmission()
// říká, zda zařízení potvrdilo adresu
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0) {
Serial.print("I2C zařízení nalezeno na adrese 0x");
if (address < 16) {
Serial.print("0");
}
Serial.print(address, HEX);
Serial.println(" !");
nDevices++;
} else if (error == 4) {
Serial.print("Neznámá chyba na adrese 0x");
if (address < 16) {
Serial.print("0");
}
Serial.println(address, HEX);
}
}
if (nDevices == 0) {
Serial.println("Žádné I2C zařízení nenalezeno\n");
} else {
Serial.println("Hotovo\n");
}
delay(5000); // počkat 5 vteřin
}
Wire.h je součástí Arduino IDE, takže ji nemusíte instalovat. Pokud hlásí chybu, zkontrolujte, že máte v IDE vybranou správnou desku.QK čemu slouží I²C skener?