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:

  1. 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.
  2. 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í:

  1. Přidání rozpoznávání senzoru typu 0x51 (DIY DS18B20)
  2. Implementaci správného dekódování teplotní hodnoty z vlastního formátu paketu
  3. Aktualizaci zpracování dat pro podporu formátu s jednou hodnotou
  4. 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ů:

  1. Využití existujícího CLIMA protokolu - jednodušší implementace s okamžitou kompatibilitou, ideální pro rychlé prototypování a standardní aplikace.
  2. 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.