Samotný ovládač od Bosch Sensortec obsahuje inicializáciu komunikácie medzi mikrokontrolérom ESP32 a senzorom Bosch BME280 na I2C zbernici, umožňuje nastaviť dátové GPIO vývody pre signály SCL (Synchronizačné hodiny - hodinový signál) a SDA (Synchronizované dáta), ktoré komunikácia vyžaduje, definuje rýchlosť zbernice - hodinový signál v Hz.
Ovládač od Bosch Sensortec implementuje dva prevádzkové režimy senzora Bosch BME280, ktoré je možné použiť v programovej implementácii:
- normálny,
- vynútený (nazýva sa aj FORCED).
Normálny prevádzkový režim umožňuje využiť vyššie vzorkovanie nameraných údajov pre dosiahnutie presných meraní spoločne s nastavením koeficienta IIR (filter s nekonečnou impulznou odozvou) filtra, ktorý kompenzuje krátkodobé výkyvy tlaku vzduchu a teploty. Vzorkovanie je možné nastaviť v rozsahu 1 až 16-krát. Koeficient IIR filtra je možné nastaviť v rozsahu 0 až 16. Medzi jednotlivými vzorkami je možné nastavovať pauzu - tzv. StandBy čas, ktorý definuje pauzu medzi meraniami.
Hodnota sa nastavuje makrami, ktoré sú preddefinované v ovládači v rozsahu 1 až 4000 ms (možno nastaviť aj hodnoty 63, 125, 250, 500, 1000, 2000). Energeticky úspornejší je prevádzkový režim FORCED (tzv. vynútený). Nevyužíva koeficient pre IIR filter, nekompenzuje žiadnym spôsobom krátkodobé výkyvy tlaku a teploty vzduchu. Využíva vzorkovanie 1 krát pre každú meranú hodnotu, teda prvá nameraná hodnota je výsledkom danej meteorologickej veličiny.
Pri výpise a porovnaní oboch režimov je normálny prevádzkový mód stabilný a ponúka konzistentné merania pri kontrole výpisu na tri desatinné miesta (na tisíciny). Screenshot UART monitora nižšie poukazuje na konzistentnosť nameraných dát v režime NORMAL s frekvenciou záznamov každých 25 ms, teda 40 záznamov za sekundu. Teplota využíva 16-násobné vzorkovanie, tlak vzduchu (absolútny) a vlhkosť vzduchu 2-násobné vzorkovanie.
Nastavené makrá sú uložené (pri zmene prepísané) v súbore sdkconfig. K súboru dokáže pristúpiť aj hlavný program, kde je možné makrá pre podmienú kompiláciu použiť, vyžaduje sa však definovanie makra COMBINED_INIT_CODE, aby aplikácia mohla k makrám pristúpiť. V mojom prípade som definoval makro CONFIG_BME280_OPMODE a mohol som podmiene zvoliť kompiláciu programu na základe operačného režimu.
Hodnota 0x01 (hexadecimálna) je pre FORCED operačný režim, alebo 0x03 pre NORMAL operačný režim. Režim spánku je definovaný hodnotou 0x02, nakoľko som však tento režim nevyužil, nebol použitý ani pre výber operačného režimu, je však v Bosch Driveri dostupný. Cez menu sú konfigurovateľné aj iné makrá, napríklad definovanie vývodov pre I2C zbernicu (SDA, SCL), ktoré sú defaultne nastavené na hardvérové vývody I2C zbernice pre mikrokontróler ESP32. Ďalšími konfigurovateľnými údajmi bola: komunikačná I2C adresa senzora Bosch BME280.
Na základe logickej úrovne vývodu SD0 je jeho komunikačná adresa 0x76 (PULLDOWN), alebo 0X77 (PULLUP). Konfigurácia je rozdelené do dvoch submenu pod hlavným menu (Example BME280 Configuration). Používateľ konfiguruje I2C Master, t.j. vývody a rýchlosť komunikačnej I2C zbernice zvolením hodinového signálu v Hz (štandardne 100 kHz). Podmenu BME280 Sensor umožňuje nastaviť režim, adresu.
Na Githube je dostupný repozitár s celou programovou implementáciou senzorového uzla na ESP32 v prostredí ESP-IDF v4.2. Implementácia obsahuje naviac aj prenos dát na vzdialené webové rozhranie POST metódou s využitím bezpečného prenosového kanála cez HTTPS protokol. Celkovo je spustených 5 úloh s využitím operačného systému reálneho času FreeRTOS.
Celá programová implementácia využíva aj digitálny podpis pre overenie integrity stiahnutého firmvéru zo vzdialeného webového rozrhrania a taktiež má implementované hardvérové funkcionality Secure Boot V1 a Flash Encryption. Použité asymetrické kľúče pre ECDSA podpisovú schému firmvéru, šifrovací kľúč pre Secure Boot a AES symetrický kľúč pre Flash Encryption sú tiež v repozitári dostupné.
Implementácia: https://github.com/martinius96/ESP-IDF-OTA
Bosch Sensortec Driver: https://github.com/BoschSensortec/BME280_driver
Bosch Sensortec Driver dokumentácia:
https://downloads.ti.com/simplelink/esd/simplelink_cc13x2_sdk/2.20.00.71/exports/docs/thread/doxyge
Bosch BME280 dokumentácia:
https://readthedocs.org/projects/bme280/downloads/pdf/latest/