Struktury, I2C a komunikace mezi více Arduino deskami
Strukturovaná komunikace mezi více deskami může být realizována například pomocí I2C sběrnice.
Jako začátečníci jste se určitě už setkali s ukázkovými programy pro jednotlivé moduly. Avšak další bod je kombinace jednotlivých příkladů do jednoho společného programu, abyste mohli například data ze senzoru teploty DHT11 zobrazit na OLED displeji.
Použil jsem moduly z těchto návodů:
https://navody.dratek.cz/navody-k-produktum/teplotni-senzor-dht11.html
https://navody.dratek.cz/navody-k-produktum/oled-displej-ssd1306.html
A právě tyto 2 moduly jsem vybral pro videonávod, kde komentuji celý postup:
Vytvořený ukázkový kód pak můžete stáhnout zde:
// Kombinace OLED displeje a DHT senzoru ////////// OLED // připojení knihovny U8glib #include "U8glib.h" // inicializace OLED displeje z knihovny U8glib U8GLIB_SSD1306_128X64 mujOled(U8G_I2C_OPT_NONE); // proměnná pro uchování času poslední obnovy displeje long int prepis = 0; ////////// DHT senzor // připojení knihovny DHT #include "DHT.h" // nastavení čísla pinu s připojeným DHT senzorem #define pinDHT 5 // odkomentování správného typu čidla #define typDHT11 DHT11 // DHT 11 //#define typDHT22 DHT22 // DHT 22 (AM2302) float tep; float vlh; // inicializace DHT senzoru s nastaveným pinem a typem senzoru DHT mojeDHT(pinDHT, typDHT11); void setup(void) { ////////// OLED // pro otočení displeje o 180 stupňů // stačí odkomentovat řádek níže // mujOled.setRot180(); ////////// DHT senzor // zapnutí komunikace s teploměrem DHT mojeDHT.begin(); } void loop(void) { // porovnání uloženého a aktuálního času // při rozdílu větším než 100 ms se provede // obnovení displeje, čas můžeme nastavit dle potřeby if (millis()-prepis > 250) { // následující skupina příkazů // obnoví obsah OLED displeje mujOled.firstPage(); do { // funkce vykresli vykreslí žádaný obsah vykresli(); } while( mujOled.nextPage() ); // uložení posledního času obnovení prepis = millis(); } // zde je místo pro další příkazy pro Arduino // volitelná pauza 10 ms pro demonstraci // vykonání dalších příkazů delay(10); } // funkce vykresli pro nastavení výpisu informací na OLED void vykresli(void) { tep = mojeDHT.readTemperature(); vlh = mojeDHT.readHumidity(); // nastavení písma, toto písmo umožní vypsat // přibližně 15x4 znaků mujOled.setFont(u8g_font_unifont); // nastavení pozice výpisu v pixelech // souřadnice jsou ve tvaru x, y // souřadnice 0, 0 je v levém horní rohu // OLED displeje, maximum je 128, 64 mujOled.setPrintPos(0, 10); if (isnan(tep) || isnan(vlh)) { // při chybném čtení vypiš hlášku mujOled.print("Chyba pri cteni z DHT senzoru!"); } else { // výpis textu na zadanou souřadnici mujOled.print("Vypis teploty:"); mujOled.setPrintPos(0, 25); mujOled.print(tep); mujOled.print(" stC"); mujOled.setPrintPos(0, 40); mujOled.print("Vypis vlhkosti:"); mujOled.setPrintPos(40, 55); mujOled.print(vlh); mujOled.print(" %"); } }
Vysíláno živě na https://www.twitch.tv/bastlir/
Strukturovaná komunikace mezi více deskami může být realizována například pomocí I2C sběrnice.
Kromě Arduino IDE lze vytvářet a upravovat Arduino sketche i online ve službě Arduino Create.