Vytvoření vlastního čidla pro otevřený systém expLORA

Systém expLORA je plně otevřený a modulární IoT ekosystém, který umožňuje vývojářům a nadšencům vytvářet vlastní senzorová řešení. Jednou z největších výhod expLORA systému je jeho otevřenost - veškerý hardware i software je open source, což otevírá neomezené možnosti pro vlastní úpravy a rozšíření.
Proč vytvářet vlastní čidla pro expLORA?
- Měření specifických veličin, které standardní čidla nepodporují
- Optimalizace spotřeby energie pro konkrétní aplikace
- Přizpůsobení formátu dat a četnosti přenosů podle vlastních potřeb
- Možnost integrace do stávající infrastruktury expLORA
- Plná kontrola nad hardwarem i softwarem
Dva přístupy k vytváření vlastních čidel
Pro vytvoření vlastního čidla kompatibilního se systémem expLORA existují dvě hlavní cesty, které si později podrobněji popíšeme:
- Využití existující struktury protokolu - čidlo implementuje standardní protokol expLORA, jako například protokol CLIMA. Tento přístup nevyžaduje žádné změny v bráně a je okamžitě kompatibilní s existující infrastrukturou.
- Vytvoření vlastního typu čidla - čidlo používá vlastní formát dat a protokol, což vyžaduje úpravu kódu brány pro správné zpracování dat. Tento přístup nabízí maximální flexibilitu, ale vyžaduje dodatečnou implementaci na straně brány.
Doporučený hardware pro rychlý start
Pro jednoduchý začátek s vývojem vlastního čidla doporučujeme využít hardware z expLORA Gateway Lite, který již obsahuje ESP32 a LoRa modul RFM95W s potřebnou anténou.
Pro vytvoření jednoduchého teplotního čidla stačí pouze:
- Teplotní senzor DS18B20 připojený na GPIO12
- Rezistor 4.7kΩ jako pull-up mezi datovým pinem DS18B20 a napájením
Tato kombinace poskytuje kompletní řešení pro monitorování teploty s dlouhým dosahem a nízkou spotřebou energie, které lze snadno integrovat do expLORA ekosystému pomocí jednoho z výše uvedených přístupů.
V následujících částech si podrobně popíšeme oba přístupy k vytváření vlastních čidel, včetně ukázkového kódu a potřebných úprav.
Přístup 1: Využití existující struktury protokolu (CLIMA)
První přístup využívá existující protokol expLORA CLIMA, který je nativně podporován všemi expLORA bránami. Tato metoda je ideální, pokud chcete rychle vytvořit kompatibilní senzor bez nutnosti upravovat kód brány.
Výhody CLIMA protokolu:
- Okamžitá kompatibilita se všemi expLORA bránami
- Žádné úpravy na straně brány
- Standardizovaný formát dat
- Automatické dekódování a zobrazení v uživatelském rozhraní
Implementace teplotního čidla s CLIMA protokolem
Tento příklad ukazuje, jak implementovat teplotní čidlo s ESP32 a DS18B20, které odesílá data v kompatibilním formátu CLIMA protokolu:
Konfigurace protokolu
V kódu definujeme konstanty pro CLIMA protokol:
// Sensor constants
#define SENSOR_TYPE_CLIMA 0x01 // CLIMA sensor ID
#define SERIAL_NUMBER 0x123456 // Unique serial number for this sensor
#define DEVICE_KEY 0xABCD1234 // Encryption key (device-specific)
Struktura paketu CLIMA
Paket CLIMA protokolu má standardizovanou strukturu:
void buildPacket(uint8_t *packet, int16_t temperature) {
// Add random byte at the beginning
packet[0] = generateRandomByte();
// Device type (CLIMA)
packet[1] = SENSOR_TYPE_CLIMA;
// Serial number (3 bytes)
packet[2] = (SERIAL_NUMBER >> 16) & 0xFF;
packet[3] = (SERIAL_NUMBER >> 8) & 0xFF;
packet[4] = SERIAL_NUMBER & 0xFF;
// Battery voltage (2 bytes) in mV
uint16_t batteryVoltage = 3300; // 3.3V as an example
packet[5] = (batteryVoltage >> 8) & 0xFF;
packet[6] = batteryVoltage & 0xFF;
// Number of values (3 for CLIMA - temperature, pressure, humidity)
packet[7] = 3;
// Temperature value (2 bytes - signed integer in hundredths of degrees)
packet[8] = (temperature >> 8) & 0xFF;
packet[9] = temperature & 0xFF;
// Pressure value (2 bytes - unsigned integer in tenths of hPa)
uint16_t pressure = 10000; // 1000.0 hPa
packet[10] = (pressure >> 8) & 0xFF;
packet[11] = pressure & 0xFF;
// Humidity value (2 bytes - unsigned integer in hundredths of percent)
uint16_t humidity = 0; // 0.00 %
packet[12] = (humidity >> 8) & 0xFF;
packet[13] = humidity & 0xFF;
// Calculate checksum (simple XOR of all previous bytes)
packet[14] = calculateChecksum(packet, 14);
}
Důležité je, že i když měříme pouze teplotu, odesíláme všechny tři hodnoty, které očekává protokol CLIMA (teplota, tlak, vlhkost). Pro neměřené hodnoty použijeme konstantní hodnoty, které brána rozpozná a zobrazí.
Kompletní implementace
Kompletní implementace zahrnuje:
- Inicializaci a čtení ze senzoru DS18B20
- Sestavení paketu podle CLIMA protokolu
- Šifrování dat pro bezpečný přenos
- Odeslání dat přes LoRa
- Přechod do režimu hlubokého spánku pro úsporu energie
Celý proces se opakuje každých 15 minut, což zajišťuje pravidelné měření s optimální spotřebou energie.
Přístup 2: Vytvoření vlastního typu čidla
Druhý přístup spočívá ve vytvoření zcela nového typu čidla s vlastním formátem dat. Tento přístup nabízí maximální flexibilitu, ale vyžaduje úpravy na straně brány pro správné zpracování dat.
Výhody vlastního typu čidla:
- Maximální flexibilita ve formátu dat
- Možnost optimalizace velikosti paketu pro specifické potřeby
- Úplná kontrola nad zpracováním dat na straně brány
- Možnost implementace nestandardních funkcí a protokolů
Implementace vlastního DS18B20 čidla
Tento příklad ukazuje, jak implementovat teplotní čidlo s vlastním typem senzoru:
Definice vlastního typu senzoru
// Sensor constants
#define SENSOR_TYPE_DS18B20 0x51 // DIY DS18B20 sensor ID
#define SERIAL_NUMBER 0x123456 // Unique serial number for this sensor
#define DEVICE_KEY 0xABCD1234 // Encryption key (device-specific)
Struktura vlastního paketu
Paket má jednodušší strukturu, protože odesíláme pouze teplotu:
void buildPacket(uint8_t* packet, int16_t temperature) {
// Add random byte at the beginning
packet[0] = generateRandomByte();
// Device type (DS18B20)
packet[1] = SENSOR_TYPE_DS18B20;
// Serial number (3 bytes)
packet[2] = (SERIAL_NUMBER >> 16) & 0xFF;
packet[3] = (SERIAL_NUMBER >> 8) & 0xFF;
packet[4] = SERIAL_NUMBER & 0xFF;
// Battery voltage (2 bytes) in mV
uint16_t batteryVoltage = 3300; // 3.3V as an example
packet[5] = (batteryVoltage >> 8) & 0xFF;
packet[6] = batteryVoltage & 0xFF;
// Number of values (1 for DS18B20 - just temperature)
packet[7] = 1;
// Temperature value (2 bytes - signed integer in hundredths of degrees)
packet[8] = (temperature >> 8) & 0xFF;
packet[9] = temperature & 0xFF;
// Calculate checksum (simple XOR of all previous bytes)
packet[10] = calculateChecksum(packet, 10);
}
Požadované úpravy na bráně
Pro správné fungování vlastního typu čidla je nutné upravit kód brány expLORA, aby dokázala rozpoznat a zpracovat nový typ senzoru. Tyto změny jsou dostupné v následujícím commitu:
https://github.com/Pajenicko/expLORA-Gateway-Lite/commit/ab84ba3c6fc0f48b05f633b6888df16e3517fa95
Hlavní úpravy zahrnují:
- Přidání rozpoznávání senzoru typu 0x51 (DIY DS18B20)
- Implementaci správného dekódování teplotní hodnoty z vlastního formátu paketu
- Aktualizaci zpracování dat pro podporu formátu s jednou hodnotou
- Přidání vhodné vizualizace nebo ukládání dat z DIY DS18B20 senzoru
Srovnání obou přístupů
Funkce | CLIMA implementace | DIY DS18B20 implementace |
---|---|---|
ID typu senzoru | 0x01 | 0x51 |
Počet přenášených hodnot | 3 (teplota, tlak, vlhkost) | 1 (pouze teplota) |
Velikost paketu | 15 bytů | 11 bytů |
Kompatibilita s bránou | Funguje se standardní bránou | Vyžaduje úpravu brány |
Využití paměti | Vyšší | Nižší |
Energetická náročnost přenosu | Vyšší (větší paket) | Nižší (menší paket) |
Závěr
Systém expLORA díky své otevřenosti nabízí vývojářům dvě cesty pro integraci vlastních senzorů:
- Využití existujícího CLIMA protokolu - jednodušší implementace s okamžitou kompatibilitou, ideální pro rychlé prototypování a standardní aplikace.
- Vytvoření vlastního typu čidla - flexibilnější přístup s možností optimalizace, vhodný pro specifické aplikace s důrazem na efektivitu a úsporu energie.
Obě metody využívají stejný hardwarový základ a základní knihovny, liší se pouze v implementaci protokolu a ve zpracování dat na straně brány. Pro začátek doporučujeme vyzkoušet první přístup, který nevyžaduje žádné úpravy brány, a postupně přejít k vytvoření vlastního typu čidla podle konkrétních potřeb vašeho projektu.
Kompletní zdrojové kódy pro obě implementace a popis protokolu jsou dostupné na GitHub repozitáři expLORA-Sensors.