Internet věcí je propojení běžných zařízení do sítě, kde spolu mohou komunikovat a sdílet data bez přímého zásahu člověka. Zařízení (např. senzory, termostaty, osvětlení, kamery, meteostanice) posílají údaje přes Wi-Fi, Bluetooth nebo jiné protokoly do cloudu, kde se data ukládají, vyhodnocují nebo dál zpracovávají. Například:
Firebase je cloudová platforma od Googlu, která umožňuje jednoduše ukládat a číst data z aplikací nebo IoT zařízení přes internet. Pro IoT se často používá Realtime Database – databáze, kde se data mění okamžitě a lze je číst i zapisovat přes jednoduché HTTP požadavky (GET, PUT).
Základní vlastnosti:
Užitečné odkazy:
Arduino Nano 33 IoT je moderní vývojová deska s vestavěným Wi-Fi modulem u-blox NINA-W102 a procesorem SAMD21 (ARM Cortex-M0+). Oproti klasickému Arduinu UNO má tedy:
Díky tomu se hodí pro IoT projekty, kde Arduino posílá data do internetu nebo přijímá příkazy z telefonu či webové aplikace.
Dále si přes Library manager nainstalujte knihovnu WifiNINA.
Kód demonstruje připojení Arduina k Wi-Fi, čtení a zápis hodnot do Firebase pomocí protokolu HTTPS a jednoduchého JSON formátu.
#include <WiFiNINA.h>
#include <Arduino_JSON.h>
const char* ssid = "FrenGP.Cz-Vyuka";
const char* password = "zde_vlozte_heslo";
const char* host = "arduino-pokus-default-rtdb.firebaseio.com";
const int httpsPort = 443;
WiFiSSLClient client;
// --------------------------------------------------
// Připojení k Wi-Fi
void connect_to_wifi() {
Serial.print("Připojuji se k WiFi: ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
WiFi.begin(ssid, password);
}
Serial.println("\nWiFi připojena!");
Serial.print("IP adresa: ");
Serial.println(WiFi.localIP());
}
// --------------------------------------------------
// Získání dat z Firebase (GET)
String get_data_from_firebase(String path) {
if (client.connect(host, httpsPort)) {
Serial.println("Připojeno k Firebase (GET)");
String url = path + ".json";
client.println("GET " + url + " HTTP/1.1");
client.print("Host: "); client.println(host);
client.println("Connection: close");
client.println();
// přeskočení hlaviček
while (client.connected()) {
String line = client.readStringUntil('\n');
if (line == "\r") break;
}
String payload = client.readString();
client.stop();
return payload;
} else {
Serial.println("Nepodařilo se připojit k Firebase (GET)!");
return "";
}
}
// --------------------------------------------------
// Odeslání dat do Firebase (PUT)
bool send_data_to_firebase(String path, String value) {
if (client.connect(host, httpsPort)) {
Serial.println("Připojeno k Firebase (PUT)");
String url = path + ".json";
client.println("PUT " + url + " HTTP/1.1");
client.print("Host: "); client.println(host);
client.println("Connection: close");
client.println("Content-Type: application/json");
client.print("Content-Length: ");
client.println(value.length());
client.println();
client.println(value);
// přeskočení hlaviček
while (client.connected()) {
String line = client.readStringUntil('\n');
if (line == "\r") break;
}
String response = client.readString();
client.stop();
Serial.print("Odpověď Firebase: ");
Serial.println(response);
return true;
} else {
Serial.println("Nepodařilo se připojit k Firebase (PUT)!");
return false;
}
}
// --------------------------------------------------
// Převedení JSON odpovědi na číslo
int parse_number(String payload) {
JSONVar data = JSON.parse(payload);
if (JSON.typeof(data) == "number") {
return (int)data;
} else {
Serial.println("Chyba při čtení JSONu");
return -999;
}
}
// --------------------------------------------------
void setup() {
Serial.begin(115200);
while (!Serial);
connect_to_wifi();
}
// --------------------------------------------------
void loop() {
// 🔹 1. Zápis hodnoty do Firebase
float teplota = 12.3;
String value = String(teplota, 1); // druhý argument udává počet desetinných míst
send_data_to_firebase("/Temperature_10", value);
// 🔹 2. Čtení z Firebase
String json = get_data_from_firebase("/Slider_10");
int precteno = parse_number(json);
Serial.print("Přečtená hodnota: ");
Serial.println(precteno);
delay(2000);
}
send_data_to_firebase("/Temperature_xxx", value); kde xxx bude číslo vaší Arduino sady. Protože mikrokontroler použitý v Arduino Nano IoT neumožňuje 5V vstup, použijte pro napájení potenciometru 3,3V z pinu +3V3.get_data_from_firebase("/Slider_xxx"); (opět za xxx dosaďte číslo své sady) a nastavujte podle toho jas LEDky připojené k Arduinu (funkcí analogWrite)