Meteostanica s Nucleo Board: Rozdiel medzi revíziami
Zo stránky SensorWiki
Bez shrnutí editace |
|||
(255 medziľahlých úprav od 2 ďalších používateľov nie je zobrazených) | |||
Riadok 1: | Riadok 1: | ||
__NOTOC__ | |||
'''Balogh:''' | |||
* výborne opísané senzory, tak som si to predstavoval | |||
* výstup vlastne neviem aký by z toho mal byť | |||
* dokumentácia je zrejme nedokončená | |||
{| | {| | ||
|'''Autori:''' | |'''Autori:'''|| Kamila Vavríková, Martin Herceg | ||
|- | |- | ||
|'''Študijný odbor:''' | |'''Študijný odbor:'''|| Aplikovaná mechatronika a elektromobilita || 1. Ing. (2018) | ||
|} | |} | ||
Riadok 20: | Riadok 28: | ||
* Napíšte základný demonštračný program využívajúci vaše funkcie | * Napíšte základný demonštračný program využívajúci vaše funkcie | ||
* Vymyslite a demonštrujte vhodnú aplikáciu | * Vymyslite a demonštrujte vhodnú aplikáciu | ||
= '''Komponenty''' = | = '''Komponenty''' = | ||
Na vypracovanie sme | |||
Na vypracovanie sme použili nasledujúce komponenty: | |||
* 1 x Vývojovú dosku X-NUCLEO-IKS01A1 | * 1 x Vývojovú dosku X-NUCLEO-IKS01A1 | ||
* 1 x Vývojová doska Acrob | * 1 x Vývojová doska Acrob | ||
Riadok 29: | Riadok 39: | ||
* 1 x Mini USB kábel | * 1 x Mini USB kábel | ||
* Prepojovacie kábliky | * Prepojovacie kábliky | ||
* | * Software - Arduino IDE | ||
== '''Doska X-NUCLEO-IKS01A1''' == | == '''Doska X-NUCLEO-IKS01A1''' == | ||
[[Súbor:X-Nucleo-IKS01A1.jpg]] | Je MEMs inerciálna vývojová doska, ktorá môže byť použitá na rozšírenie systému SMT32 Nucleo. Je tiež kompatibilná s Arduino UNO R3. | ||
[[Súbor:X-Nucleo-IKS01A1.jpg | 500px]] | |||
::::'''Obr. 1: Vývojová doska X-Nucleo-IKS01A1''' | |||
Riadok 42: | Riadok 55: | ||
* HTS221: capacitive digital relative humidity and temperature | * HTS221: capacitive digital relative humidity and temperature | ||
== '''Vývojová doska Acrob''' == | |||
== '''Vývojová doska Acrob (Arduino Compatible Robot)''' == | |||
Jedná sa o riadiacú jednotku s mikropocesorom ATmga328 s 32KB Flash pamäte, 2KB SRAM pamäte a 1 KB EEPROM pamäte. Dosku je možné programovať v jazyku C alebo Arduino a teda je možné ju programovať pomocou Arduino IDE. | |||
[[Súbor:AcrobBoard.jpg]] | [[Súbor:AcrobBoard.jpg]] | ||
:::::'''Obr. 2: Vývojová doska Acrob''' | |||
Technické parametre vývojovej dosky nájdete tu: [http://senzor.robotika.sk/sensorwiki/index.php/Acrob_technical_description Klik] | Technické parametre vývojovej dosky nájdete tu: [http://senzor.robotika.sk/sensorwiki/index.php/Acrob_technical_description Klik] | ||
== '''Basic Breakout 5V (Sparkfun DEV-09716) USB mini to serial 6pin''' == | == '''Basic Breakout 5V (Sparkfun DEV-09716) USB mini to serial 6pin''' == | ||
[[Súbor:Basic_Breakout_5V.jpg| | Jedná sa o plošnú dosku, ktorá obsahuje čip, ktorý umožňuje prevod USB na UART rozhranie. | ||
[[Súbor:Basic_Breakout_5V.jpg|250px]] | |||
::'''Obr. 3: Basic Breakout 5V''' | |||
Technické parametre nájdete tu: [https://www.sparkfun.com/products/9716 klik] | Technické parametre nájdete tu: [https://www.sparkfun.com/products/9716 klik] | ||
= '''Analýza''' = | |||
Na realizáciu Meteostanice, ktorá bude merať teplotu vzduchu, atmosferický tlak a vlhkosť vzduchu sme využili senzor '''HTS221''' a senzor '''LPS25HB*''' Na komunikáciu budeme využívať '''zbernicu I2C'''. | |||
== '''Zbernica I2C''' == | |||
I2C je dvojvodičová obojsmerná sériová zbernica používajúca vodiče SCL a SDA. Úlohou '''SCL''' vodiča je prenášať hodinové signály, úlohou '''SDA''' vodiča je prenášať sériové dáta. Na komunikáciu využíva master - slave komunikáciu. | |||
''' | Obe linky (SDA, SCL) musia byť pripojené na kladný pól napájacieho napätia prostredníctvom tzv. pull-up rezistorov (výstup typu otvorený kolektor). Tým je zabezpečená práca liniek SDA a SLC v obidvoch smeroch. Pokiaľ by došlo ku kolízii, poškodili by sa iba úrovne signálu a nie vysielacie obvody. Spätnou väzbou je zaistené, že obvod môže pracovať aj ako vysielač, aj ako prijímač. | ||
[[Súbor:I2C-vysiela-primac.png]] | |||
:::::'''Obr. 4: Zapojenie liniek''' | |||
V priebehu jedného hodinového cyklu SLC je prenesený práve jeden dátový bit. Dáta privedené na linku SDA musia zostať nemenné po celú dobu taktovania kladného impulzu hodín SLC. Pri SLC=1 sú totiž zmeny SDA chápané ako riadiaci signál. | |||
[[Súbor:I2c-prenos_bitov.png]] | |||
::::::'''Obr. 5: Prenos bitu po zbernici I2C''' | |||
K označeniu začiatku a konca prenosu nie sú používané prídavné riadiace linky, ale dva špeciálne stavy zbernice. ŠTART prenosu (S) je oznámený zostupnou hranou SDA pri SLC=1. STOP prenosu (P) je definovaný nábežnou hranou SDA pri SLC=1. Pokiaľ je zbernica v neaktívnom stave, sú signály SDA a SLC v log. 1 (jednotke). | |||
[[Súbor:I2c-startstop_bit.png]] | |||
:::::'''Obr. 6: START a STOP bit pri I2C zbernici''' | |||
Pri prenose nie je počet dátových bitov prenesených medzi START a STOP z vysielača do prijímača obmedzený. Každý dátový bajt (8bitov) je nasledovaný jedným potvrdzovacím bitom ACK (A). ACK predstavuje log. 0 (nulu) vloženú na zbernicu prijímačom, spojenú s potvrdzovacím hodinovým impulzom. Prijímač, ktorý je adresovaný, musí generovať ACK po prijatí každého bajtu. | |||
[[Súbor:I2C-ACK.png]] | |||
:::::::::'''Obr. 7: Potvrdzovací ACK bit pri zbernici I2C''' | |||
V našom projekte je doska Acrob master a senzory HTS221 a LPS25HB* sú podriadené (slave). Master môže z podriadeného zariadenia údaje čítať alebo naň údaje zapisovať. Prenos údajov môže začať iba Master zariadenie. | |||
Viac informácií o I2C zbernici je možné nájsť napr. na: | |||
* [https://www.scribd.com/document/86999221/I2C-UM10204 I2C-bus specification and user manual] | |||
* [http://dlnware.com/theory/I2C-Address-Allocation-Table I2C Address Allocation Table ] | |||
== '''Senzor HTS221''' == | == '''Senzor HTS221''' == | ||
HTS221 sníma relatívnu vlhkosť a teplotu vzduchu. Obsahuje snímač a zmiešaný signál ASIC na poskytovanie informácií o meraní prostredníctvom digitálnych sériových rozhraní. Snímač pozostáva z dielektrickej štruktúry kondenzátora, ktorá je schopná detekovať zmeny relatívnej vlhkosti. Na komunikáciu používa I2C alebo SPI zbernicu. | |||
[[Súbor:Puzdro-hts221.PNG]] | |||
::::'''Obr. 8: Púzdro senzora HTS221''' | |||
'''Parametre:''' | |||
* Napájacie napätie: 1,7 až 3,6 V | |||
* Prevádzková teplota: -40 až +120 °C | |||
* Rozsah merania vlhkosti: 0 až 100% | |||
* Presnosť merania teploty: ±0,5 °C, 15 až +40°C | |||
* Presnosť merania vlhkosti: ±3.5% rH, 20 až 80% rH | |||
'''Schéma zapojenia senzora (na vývojovej doske X-NUCLEO-IKS01A1):''' | |||
[[Súbor:HTS221-color.PNG]] | |||
:::::::::'''Obr. 9: Schéma zapojenia HTS221''' | |||
'''Rozloženie pinov senzora:''' | |||
[[Súbor:HTS221-pin_connection.png]] | |||
::::::::::::'''Obr. 10: Rozloženie pinov HTS221''' | |||
'''Komunikácia pomocou I2C zbernice:''' | |||
Ako sme už spomínali vyššie senzor HTS221 v pracuje ako podriadený (v režime slave) a doska Acrob pracuje ako pán (v režime master). Štartovacia transakcia na zbernici začína cez signál START (ST). Po štartovacej podmienke sa vysiela na zbernicu 7 bit číslo ktoré predstavuje adresu slave zariadenia s ktorým chceme komunikovať. Adresa slave zariadenia je doplnená 1 bitom (Read / Write). Na obrázku môžeme vydieť, ako sa skladá vzor bitov na čítanie / zápis. | |||
[[Súbor:I2C_address_-_HTS221.png]] | |||
:::::::::'''Obr. 11: Skladanie bitov pri I2C komunikácii - HTS221''' | |||
Údaje sa prenášajú v bajtovom formáte (DATA). Každý prenos údajov obsahuje 8 bitov. Počet prenesených bajtov na prenos je neobmedzený. Údaje sa najskôr prenášajú najvýznamnejším bitom (MSB). | |||
== '''Senzor LPS25HB*''' == | |||
LPS25HB je piezoelektrický snímač absolútneho tlaku, ktorý funguje ako digitálny výstupný barometer. Zariadenie obsahuje senzorový prvok a rozhranie IC, ktoré komunikuje cez I2C alebo SPI zo snímacieho prvku s aplikáciou. Senzor taktiež umožňuje získavať dáta o teplote. | |||
[[Súbor:Pyzdro-LPS25HB.PNG]] | |||
::::'''Obr. 12: Púzdro senzora LPS25HB''' | |||
'''Parametre:''' | |||
* Napájacie napätie: 1,7 až 3,6 V | |||
* Prevádzková teplota: -30 až +105 °C | |||
* Rozsah merania tlaku: 260 až 1260 hPa | |||
* Presnosť merania tlaku: ±1 hPa, 0 až +80°C | |||
'''Schéma zapojenia senzora (na vývojovej doske X-NUCLEO-IKS01A1):''' | |||
[[Súbor:LPS25HB-color.PNG]] | |||
:::::::::'''Obr. 13: Schéma zapojenia LPS25HB''' | |||
'''Rozloženie pinov senzora:''' | |||
[[Súbor:LPS25HB-pin_conection.PNG]] | |||
:::::::::::::::'''Obr. 14: Rozloženie pinov LPS25HB''' | |||
'''Komunikácia pomocou I2C zbernice:''' | |||
Tak isto ako v prípade senzora HTS221 aj senzor LPS25H pracuje ako podriadený (v režime slave). taktiež princíp je rovnaký čiže štartovacia transakcia začína signálom START (ST) - kde sa vysiela na zbernicu 7 bit číslo (adresa slave zariadenia). Táto adresa je ďalej doplnená jedným bitom (R/W). | |||
Adresa slave (SAD) priradená k LPS25HB je 101110xb. SDO / SA0 sa môže použiť na zmenu menej významného bitu adresy zariadenia. Ak je SA0 pripojená k napájaciemu zdroju, LSb je '1' (adresa 1011101b), inak, ak je SA0 pripojená k zemi, hodnota LSb je '0' (adresa 1011100b). Toto riešenie umožňuje pripojiť a osloviť dve rôzne zariadenia LPS25HB na rovnakých linkách I2C. | |||
Na obrázku (Obr. 15) môžeme vydieť, ako sa skladá vzor bitov na čítanie / zápis. | |||
[[Súbor:I2C_address_-_LPS25HB.png]] | |||
:::::::::'''Obr. 15: Skladanie bitov pri I2C komunikácii - LPS25HB''' | |||
Údaje sa prenášajú v bajtovom formáte (DATA). Každý prenos údajov obsahuje 8 bitov. Počet prenesených bajtov na prenos je neobmedzený. Údaje sa najskôr prenášajú najvýznamnejším bitom (MSB). | |||
'''Interpretovanie údajov o tlaku:''' | |||
Údaje o tlaku sú uložené v 3 registroch: | |||
* PRESS_OUT_H (2Ah) | |||
* PRESS_OUT_L (29h) | |||
* PRESS_OUT_XL (28h) | |||
Hodnota je vyjadrená ako dvojkový doplnok, číže ak chceme získať tlak v hPa, zoberieme dvojkový doplnok slova a podelíme ho hodnotou 4096 hPa. | |||
[[Súbor:LPS25HB-vyppocet_tlaku.png]] | |||
:::::::'''Obr. 16: Výpočet hodnoty tlaku - LPS25HB''' | |||
= '''Riešenie''' = | = '''Riešenie''' = | ||
Po zoznámení sa z jednotlivými komponentami, ktoré potrebuje na zostavenie výslednej aplikácie sme sa pustili do zapájania hardware-ových častí. Zapojenie vývojových dosiek môžeme vidieť na obrázku (Obr. 17). Napájanie je realizované pomocou mini USB kábla, ktorý sa pripája do plošnej dosky Basic Breakout 5V (Sparkfun DEV-09716), ktorá je pripojená na rozhranie FTDI na vývojovej doske Acrob. | |||
[[Súbor:Diagram_zapojenia-iks01A1_to_acrob.png]] | |||
[[Súbor: | :::::::::::::::'''Obr. 17: Znázornenie zapojenia HW komponentov''' | ||
'''Fotky z fyzickej realizácie zapojenia:''' | |||
<gallery> | |||
Súbor:Meteo-nucleo_pohlad_z_hora.jpg| Pohľad z hora | |||
Súbor:Meteo-nucleo_pohlad_z_boku.jpg| Pohľad z boku | |||
</gallery> | |||
=== Algoritmus a program === | === Algoritmus a program === | ||
Program pre aplikáciu Meteostanice sme napísali v programovacom prostredí Arduino IDE. Program využíva knižnice pre obsluhu senzorov HTS221 a LPS25HB. | |||
'''Vývojový diagram programu:''' | |||
[[Súbor:Diagram_meteo-nucleo.jpg]] | |||
::'''Obr. 18: Vývojový diagram aplikácie''' | |||
Na obrázku vyššie (Obr. 18) môžeme vidieť vývojový diagram programu, ktorý popisuje jednotlivé stavy počas behu nášho programu. | |||
'''Zdrojový kód aplikácie:''' | |||
<source lang="C++"> | |||
/** | |||
* Source code: Arduino IDE | |||
*/ | |||
// Includes libraries for HTS221 and LPS25HB sensors. | |||
#include <HTS221Sensor.h> | |||
#include <LPS25HBSensor.h> | |||
// Includes library for I2C communicate | |||
#include <Wire.h> | |||
// Defining symbolic constants | |||
#define DEV_I2C Wire | |||
#define SerialPort Serial | |||
// Components | |||
HTS221Sensor *HumTemp; | |||
LPS25HBSensor *PressTemp; | |||
void setup() | |||
{ | |||
// Initialize serial for output. | |||
SerialPort.begin(115200); | |||
// Initialize I2C bus. | |||
DEV_I2C.begin(); | |||
// Initlialize components. | |||
HumTemp = new HTS221Sensor (&DEV_I2C); | |||
HumTemp->Enable(); | |||
PressTemp = new LPS25HBSensor(&DEV_I2C); | |||
PressTemp->Enable(); | |||
// Prints text to the serial port | |||
SerialPort.print("| SEMESTRÁLNY PROJEKT - METEOSTANICA |"); | |||
SerialPort.print("\n"); | |||
SerialPort.print("| ----------------------------------- |"); | |||
SerialPort.print("\n"); | |||
} | |||
void loop() | |||
{ | |||
// Read humidity and temperature. | |||
float humidity, temperature; | |||
HumTemp->GetHumidity(&humidity); | |||
HumTemp->GetTemperature(&temperature); | |||
// Read pressure. | |||
float pressure, temperature2; | |||
PressTemp->GetPressure(&pressure); | |||
PressTemp->GetTemperature(&temperature2); | |||
// Prints output data to the serial port | |||
SerialPort.print(" Vlhkost vzduchu : "); | |||
SerialPort.print(humidity, 2); | |||
SerialPort.print(" [%] "); | |||
SerialPort.print("\n"); | |||
SerialPort.print(" Teplota vzduchu : "); | |||
SerialPort.print(temperature, 2); | |||
SerialPort.print(" [C] "); | |||
SerialPort.print("\n"); | |||
SerialPort.print(" Atmosfericky tlak : "); | |||
SerialPort.print(pressure, 2); | |||
SerialPort.print(" [hPa] "); | |||
SerialPort.print("\n\n"); | |||
delay(5000); | |||
} | |||
</source> | |||
Zdrojový kód aplikácie: [[Médiá:Meteo-nucleo.c|meteo-nucleo.c]] | |||
'''Funkcie, ktoré vykonávajú prístup k hodnoám teploty vzduchu a vlhkosti vzduchu:''' | |||
Obidve funkcie sú súčasťou arduino knižnice podporujúcej senzor HTS221. Knižnicu je možné stiahnúť z oficiálneho repozitára stm32duino na githube. | |||
<source lang="c"> | <source lang="c"> | ||
/* | /** | ||
* @brief Read HTS221 output register, and calculate the temperature | |||
* @param pfData the pointer to data output | |||
* @retval HTS221_STATUS_OK in case of success, an error code otherwise | |||
*/ | |||
HTS221StatusTypeDef HTS221Sensor::GetTemperature(float* pfData) | |||
{ | |||
int16_t int16data = 0; | |||
// Read data from HTS221. | |||
if ( HTS221_Get_Temperature( (void *)this, &int16data ) == HTS221_ERROR ) | |||
{ | |||
return HTS221_STATUS_ERROR; | |||
} | |||
*pfData = ( float )int16data / 10.0f; | |||
return HTS221_STATUS_OK; | |||
} | |||
</source> | |||
<source lang="c++"> | |||
/** | |||
* @brief Read HTS221 output register, and calculate the humidity | |||
* @param pfData the pointer to data output | |||
* @retval HTS221_STATUS_OK in case of success, an error code otherwise | |||
*/ | |||
HTS221StatusTypeDef HTS221Sensor::GetHumidity(float* pfData) | |||
{ | |||
uint16_t uint16data = 0; | |||
// Read data from HTS221. | |||
if ( HTS221_Get_Humidity( (void *)this, &uint16data ) == HTS221_ERROR ) | |||
{ | |||
return HTS221_STATUS_ERROR; | |||
} | |||
*pfData = ( float )uint16data / 10.0f; | |||
return HTS221_STATUS_OK; | |||
return | |||
} | } | ||
</source> | </source> | ||
Github link: [https://github.com/stm32duino/HTS221 stm32duino / HTS221] | |||
'''Funkcia, ktorá vykonáva prístup k hodnote atmosferického tlaku:''' | |||
Funkcia je súčasťou arduino knižnice podporujúcej senzor LPS25HB. Knižnicu je možné stiahnúť z oficiálneho repozitára stm32duino na githube. | |||
<source lang="c"> | |||
/** | |||
* @brief Read LPS25HB output register, and calculate the pressure in mbar | |||
* @param pfData the pressure value in mbar | |||
* @retval LPS25HB_STATUS_OK in case of success, an error code otherwise | |||
*/ | |||
LPS25HBStatusTypeDef LPS25HBSensor::GetPressure(float* pfData) | |||
{ | |||
int32_t int32data = 0; | |||
// Read data from LPS25HB. | |||
if ( LPS25HB_Get_Pressure( (void *)this, &int32data ) == LPS25HB_ERROR ) | |||
{ | |||
return LPS25HB_STATUS_ERROR; | |||
} | |||
*pfData = ( float )int32data / 100.0f; | |||
return LPS25HB_STATUS_OK; | |||
} | |||
</source> | |||
Github link: [https://github.com/stm32duino/LPS25HB stm32duino / LPS25HB] | |||
== '''Overenie''' == | |||
Po nahratí programu do nami realizovanej Meteostanice Nucleo si môžeme pozrieť hodnoty v Arduino IDE v v okne Serial monitoru. | |||
[[Súbor:Serial-monitor_meteo-nucleo.png]] | |||
:::::::'''Obr. 19: Hodnoty zobrazené v Arduino IDE Serial Monitor''' | |||
Jednotlivé merané veličiny boli vykreslené v prostredí Matlab. Každá veličina je vykreslená samostatne kvôli rôznemu rozsahu osi y. | |||
Na jednotlivých grafom môžeme vidieť piky, ktoré sú spôsobené testovaním senzorov a to tým spôsobom, že sme dýchli na senzory, čím sa zmenila teplota vzduchu, vlhkosť vzduchu a tlak vzduchu. | |||
[[Súbor:untitled1.jpg | 450px]] | |||
[[Súbor:untitled2.jpg | 450px]] | |||
[[Súbor:untitled.jpg | 450px]] | |||
Uložené dáta z ktorých boli vykreslené grafy: [[Média:Data-meteo-nucleo.txt|data.txt]] | |||
Zdrojový kód (Matlab): [[Médiá:ZadanieGrafy.m|grafy.m]] | |||
= '''Vízia komplexnej aplikácie Meteostanice''' = | |||
Keďže takto realizovaná aplikácia Meteostanice, nie je moc vhodná na použitie v reálnom svete, popíšeme si ako by sme inak mohli realizovať takúto aplikáciu. Keďže chceme aby aplikácia bola komplexne navrhnutá, čo znamená, že okrem čítania dát zo senzorov chceme aby vedela aj ukladať namerané dáta napr. do databázy, ďalej aby vedela jednoduchým spôsobom zobrazovať aktuálne hodnoty (ale aj hodnoty namerané v minulosti) napr. prostredníctvom webovej aplikácie, kde by sme si mohli tieto dáta prezerať, prípadne sa pozrieť na grafický priebeh vývoja hodnôt v čase. Takto realizovaná aplikácia by sa už dala v reálnom svete celkom dobre použiť. Čo teda potrebujeme na to aby sme si vedeli takúto aplikáciu urobiť? | |||
No keď si to podrobnejšie rozoberieme, tak určite budeme potrebovať nejaký web server s databázou, ktorý niekde budeme musieť nainštalovať. Na to by sme mohli použiť napríklad jednodoskový počítač Raspberry Pi 3. Raspberry pi je počítač, na ktorom môže bežať operačný systém založený na báze linuxu, najčastejšie to je operačný systém '''Raspbian''' a je možné naň inštalovať rôzny software. Viac o Rasperry Pi je možné sa dočítať napr. na oficiálnych stránkach tu: [https://www.raspberrypi.org/ Klik]. | |||
Čiže budeme potrebovať nainštalovať: | |||
* Samotný operačný systém Raspbian | |||
* Databázu (prípadne aj klienta) | |||
* Python a framework Flask (web framework) | |||
== '''Raspbian''' == | |||
Informácie ako nainštalovať operačný systém raspbian nájdeme na dokumentačných stránkach tu: [https://www.raspberrypi.org/documentation/installation/installing-images/ Instaling operating system images] | |||
== '''Databáza''' == | |||
Použijeme napr. MySQL databázový server, ktorý má podporu prácu s databázou z pythonu. Samozrejme po nainštalovaní bude potrebné databázu nakonfigurovať, ako napr. nastavenie hesla a pod. Taktiež pre prácu z databázou je vhodné si nainštalovať aj nejakého databázového klienta ako napr. HeidiSQL (Windows), MySQL Workbench, DBeaver, ktorý nám uľahčí vyvorenie tabuliek v databáze, do ktorých budeme ukladať naše dáta. | |||
'''Inštalácia databázového servera na Raspebrry Pi:''' | |||
<source lang="bash"> | |||
sudo apt-get install mysql-server python-mysqldb | |||
</source> | |||
Zdroje: | |||
* [https://www.mysql.com/ MySQL Official Page] | |||
* [http://raspberrywebserver.com/sql-databases/using-mysql-on-a-raspberry-pi.html Using MySQL on a Raspberry Pi] | |||
== '''Python a Flask''' == | |||
Python je vyšší programovací jazyk a Flask je mikro webový framevork napísaný v Pythone. | |||
'''Inštalácia mikro web frameworku Flask:''' | |||
<source lang="bash"> | |||
sudo apt-get install python-pip | |||
pip install flask | |||
</source> | |||
'''Inštalácia podpory pre websockety:''' | |||
<source lang="bash"> | |||
sudo pip install eventlet | |||
sudo pip install flask-socketio | |||
</source> | |||
Zdroje: | |||
* [https://www.python.org/ Official Python Page] | |||
* [http://flask.pocoo.org/ Official Flask Page] | |||
* [https://naucse.python.cz/lessons/intro/flask/ Webové aplikace vo Flask] | |||
* [https://sjaustirni.gitbooks.io/vy-py/content/content/1-instalacia-a-priprava/#in%C5%A1tal%C3%A1cia-a-pr%C3%ADprava Inštalácia a príprava flask] | |||
= | '''Adresárová štruktúra flask aplikácie:''' | ||
<source lang="bash"> | |||
/meteo-nucleo | |||
├── app.py | |||
├── config.cfg | |||
├── templates/ | |||
│ ├── index.html | |||
└── static/ | |||
└── style.css | |||
</source> | |||
* app.py - samotná aplikácia napísaná vo Flask (pythone) | |||
* config.cfg - konfiguračný súbor pre databázu | |||
* index.html - html šablona webovej aplikácie | |||
* style.css - kaskádové štýly webovej aplikácie | |||
'''Obsah súboru:''' ''app.py'' | |||
<source lang="python"> | |||
from flask import Flask, render_template | |||
import MySQLdb | |||
import ConfigParser | |||
app = Flask(__name__) | |||
config = ConfigParser.ConfigParser() | |||
config.read('config.cfg') | |||
# Configuration Database | |||
myhost = config.get('mysqlDB', 'host') | |||
myuser = config.get('mysqlDB', 'user') | |||
mypasswd = config.get('mysqlDB', 'passwd') | |||
mydb = config.get('mysqlDB', 'db') | |||
# TODO: Source codes our application Meteo - Nucleo | |||
# TODO: Read data from sensors HTS221 and LPS25HB | |||
# TODO: Save data to Database | |||
# TODO: Other codes | |||
# ... | |||
@app.route('/') | |||
def index(): | |||
return render_template('index.html', async_mode=socketio.async_mode) | |||
if __name__ == '__main__': | |||
app.run(host="0.0.0.0", port=80, debug=True) | |||
</source> | |||
'''Obsah súboru:''' ''config.cfg'' | |||
<source lang="text"> | |||
[mysqlDB] | |||
host = localhost | |||
db = databaseName | |||
user = userName | |||
passwd = userPassword | |||
</source> | |||
'''Obsah súboru:''' ''templates/index.html'' | |||
<source lang="html"> | |||
<!DOCTYPE HTML> | |||
<html> | |||
<head> | |||
<title>Application Name</title> | |||
<!-- | |||
... | |||
--> | |||
</head> | |||
<body> | |||
<h1>Our Application Meteo- Nucleo</h1> | |||
<!-- | |||
TODO: Display value from sensors | |||
TODO: Display progress of the measured values in the charts | |||
... | |||
--> | |||
</body> | |||
</html> | |||
</source> | |||
Zdroje: | |||
* [https://blog.miguelgrinberg.com/post/easy-websockets-with-flask-and-gevent Easy WebSockets with Flask and Gevent] | |||
* [https://tutorials.technology/tutorials/61-Create-an-application-with-websockets-and-flask.html Create an application with websockets and flask] | |||
* [https://www.zdrojak.cz/clanky/web-sockets/ Web Sockets] | |||
Na realizáciu by sme mohli využiť namiesto vývojovej dosky Acrob, Raspberry Pi 3, ku ktorému by sme pripojili dosku X-NUCLEO-IKS01A1. Ako prepojiť tieto dve zariadenia je popísané napr. na stránke tu: [http://hackman.club/temperature-and-humidity-with-x-nucleo-iks01a1-hts221/ klik], kde je aj popísané akým spôsobom by bolo realizované čítanie dát zo senzora HTS221, prostredníctvom I2C zbernice. Obdobne by sme realizovali aj čítanie dát so senzora LPS25HB či ostatných senzorov nachádzajúcich sa na vývojovej doske NUCLEO-IKS01A1. | |||
Takto realizovaná aplikácia by sa už dala v reálnom svete celkom dobre použiť. Na záver len dodáme, že táto vízia ma naozaj slúžiť ako vízia prípadnej realizácie takejto aplikácie. V skratke vysvetľuje a popisuje čo je potrebné na samotnú realizáciu. | |||
= '''Literatúra''' = | |||
* Datasheets k doske X-NUCLEO-IKS01A1: [http://www.st.com/en/ecosystems/x-nucleo-iks01a1.html klik] | |||
* Datasheets k HTS221: [http://www.st.com/en/mems-and-sensors/hts221.html klik] | |||
* Github repozitár k HTS221 [https://github.com/stm32duino/HTS221 klik] | |||
* Datasheets k LPS25HB: [http://www.st.com/en/mems-and-sensors/lps25hb.html klik] | |||
* Github repozitár k LPS25HB [https://github.com/stm32duino/LPS25HB klik] | |||
* I2C zbernica [http://www.kiwiki.info/index.php/Synchr%C3%B3nna_komunik%C3%A1cia_I2C klik] | |||
* Vývojová doska Acrob [http://senzor.robotika.sk/sensorwiki/index.php/Acrob_technical_description klik] | |||
* Datasheets k plošnej doske SparkFun FTDI Basic Breakout - 5V [https://www.sparkfun.com/products/9716 klik] | |||
__TOC__ |
Aktuálna revízia z 22:06, 29. máj 2018
Balogh: * výborne opísané senzory, tak som si to predstavoval * výstup vlastne neviem aký by z toho mal byť * dokumentácia je zrejme nedokončená
Autori: | Kamila Vavríková, Martin Herceg | |
Študijný odbor: | Aplikovaná mechatronika a elektromobilita | 1. Ing. (2018) |
Zadanie
Využitím dosky X. MEMS Inertial Nucleo board zostavte Meteostanicu, ktorá bude merať teplotu vzduchu, vlhkosť vzduchu a atmosferický tlak.
Úlohy
- Nájdite si k senzorom datasheet
- Nájdite si schémy zapojenia dosky
- Na základe predošlých vedomostí navrhnite spôsob pripojenia k riadiacej jednotke
- Napíšte základný demonštračný program využívajúci vaše funkcie
- Vymyslite a demonštrujte vhodnú aplikáciu
Komponenty
Na vypracovanie sme použili nasledujúce komponenty:
- 1 x Vývojovú dosku X-NUCLEO-IKS01A1
- 1 x Vývojová doska Acrob
- 1 x Basic Breakout 5V (Sparkfun DEV-09716) USB mini to serial 6pin
- 1 x Mini USB kábel
- Prepojovacie kábliky
- Software - Arduino IDE
Doska X-NUCLEO-IKS01A1
Je MEMs inerciálna vývojová doska, ktorá môže byť použitá na rozšírenie systému SMT32 Nucleo. Je tiež kompatibilná s Arduino UNO R3.
- Obr. 1: Vývojová doska X-Nucleo-IKS01A1
Zoznam senzorov, ktoré sa nachádzajú na doske:
- LSM6DS0: MEMS 3D accelerometer (±2/±4/±8 g) + 3D gyroscope (±245/±500/±2000 dps)
- LIS3MDL: MEMS 3D magnetometer (±4/ ±8/ ±12/ 16 gauss)
- LPS25HB*: MEMS pressure sensor, 260-1260 hPa absolute digital output barometer
- HTS221: capacitive digital relative humidity and temperature
Vývojová doska Acrob (Arduino Compatible Robot)
Jedná sa o riadiacú jednotku s mikropocesorom ATmga328 s 32KB Flash pamäte, 2KB SRAM pamäte a 1 KB EEPROM pamäte. Dosku je možné programovať v jazyku C alebo Arduino a teda je možné ju programovať pomocou Arduino IDE.
- Obr. 2: Vývojová doska Acrob
Technické parametre vývojovej dosky nájdete tu: Klik
Basic Breakout 5V (Sparkfun DEV-09716) USB mini to serial 6pin
Jedná sa o plošnú dosku, ktorá obsahuje čip, ktorý umožňuje prevod USB na UART rozhranie.
- Obr. 3: Basic Breakout 5V
Technické parametre nájdete tu: klik
Analýza
Na realizáciu Meteostanice, ktorá bude merať teplotu vzduchu, atmosferický tlak a vlhkosť vzduchu sme využili senzor HTS221 a senzor LPS25HB* Na komunikáciu budeme využívať zbernicu I2C.
Zbernica I2C
I2C je dvojvodičová obojsmerná sériová zbernica používajúca vodiče SCL a SDA. Úlohou SCL vodiča je prenášať hodinové signály, úlohou SDA vodiča je prenášať sériové dáta. Na komunikáciu využíva master - slave komunikáciu.
Obe linky (SDA, SCL) musia byť pripojené na kladný pól napájacieho napätia prostredníctvom tzv. pull-up rezistorov (výstup typu otvorený kolektor). Tým je zabezpečená práca liniek SDA a SLC v obidvoch smeroch. Pokiaľ by došlo ku kolízii, poškodili by sa iba úrovne signálu a nie vysielacie obvody. Spätnou väzbou je zaistené, že obvod môže pracovať aj ako vysielač, aj ako prijímač.
- Obr. 4: Zapojenie liniek
V priebehu jedného hodinového cyklu SLC je prenesený práve jeden dátový bit. Dáta privedené na linku SDA musia zostať nemenné po celú dobu taktovania kladného impulzu hodín SLC. Pri SLC=1 sú totiž zmeny SDA chápané ako riadiaci signál.
- Obr. 5: Prenos bitu po zbernici I2C
K označeniu začiatku a konca prenosu nie sú používané prídavné riadiace linky, ale dva špeciálne stavy zbernice. ŠTART prenosu (S) je oznámený zostupnou hranou SDA pri SLC=1. STOP prenosu (P) je definovaný nábežnou hranou SDA pri SLC=1. Pokiaľ je zbernica v neaktívnom stave, sú signály SDA a SLC v log. 1 (jednotke).
- Obr. 6: START a STOP bit pri I2C zbernici
Pri prenose nie je počet dátových bitov prenesených medzi START a STOP z vysielača do prijímača obmedzený. Každý dátový bajt (8bitov) je nasledovaný jedným potvrdzovacím bitom ACK (A). ACK predstavuje log. 0 (nulu) vloženú na zbernicu prijímačom, spojenú s potvrdzovacím hodinovým impulzom. Prijímač, ktorý je adresovaný, musí generovať ACK po prijatí každého bajtu.
- Obr. 7: Potvrdzovací ACK bit pri zbernici I2C
V našom projekte je doska Acrob master a senzory HTS221 a LPS25HB* sú podriadené (slave). Master môže z podriadeného zariadenia údaje čítať alebo naň údaje zapisovať. Prenos údajov môže začať iba Master zariadenie.
Viac informácií o I2C zbernici je možné nájsť napr. na:
Senzor HTS221
HTS221 sníma relatívnu vlhkosť a teplotu vzduchu. Obsahuje snímač a zmiešaný signál ASIC na poskytovanie informácií o meraní prostredníctvom digitálnych sériových rozhraní. Snímač pozostáva z dielektrickej štruktúry kondenzátora, ktorá je schopná detekovať zmeny relatívnej vlhkosti. Na komunikáciu používa I2C alebo SPI zbernicu.
- Obr. 8: Púzdro senzora HTS221
Parametre:
- Napájacie napätie: 1,7 až 3,6 V
- Prevádzková teplota: -40 až +120 °C
- Rozsah merania vlhkosti: 0 až 100%
- Presnosť merania teploty: ±0,5 °C, 15 až +40°C
- Presnosť merania vlhkosti: ±3.5% rH, 20 až 80% rH
Schéma zapojenia senzora (na vývojovej doske X-NUCLEO-IKS01A1):
- Obr. 9: Schéma zapojenia HTS221
Rozloženie pinov senzora:
- Obr. 10: Rozloženie pinov HTS221
Komunikácia pomocou I2C zbernice:
Ako sme už spomínali vyššie senzor HTS221 v pracuje ako podriadený (v režime slave) a doska Acrob pracuje ako pán (v režime master). Štartovacia transakcia na zbernici začína cez signál START (ST). Po štartovacej podmienke sa vysiela na zbernicu 7 bit číslo ktoré predstavuje adresu slave zariadenia s ktorým chceme komunikovať. Adresa slave zariadenia je doplnená 1 bitom (Read / Write). Na obrázku môžeme vydieť, ako sa skladá vzor bitov na čítanie / zápis.
- Obr. 11: Skladanie bitov pri I2C komunikácii - HTS221
Údaje sa prenášajú v bajtovom formáte (DATA). Každý prenos údajov obsahuje 8 bitov. Počet prenesených bajtov na prenos je neobmedzený. Údaje sa najskôr prenášajú najvýznamnejším bitom (MSB).
Senzor LPS25HB*
LPS25HB je piezoelektrický snímač absolútneho tlaku, ktorý funguje ako digitálny výstupný barometer. Zariadenie obsahuje senzorový prvok a rozhranie IC, ktoré komunikuje cez I2C alebo SPI zo snímacieho prvku s aplikáciou. Senzor taktiež umožňuje získavať dáta o teplote.
- Obr. 12: Púzdro senzora LPS25HB
Parametre:
- Napájacie napätie: 1,7 až 3,6 V
- Prevádzková teplota: -30 až +105 °C
- Rozsah merania tlaku: 260 až 1260 hPa
- Presnosť merania tlaku: ±1 hPa, 0 až +80°C
Schéma zapojenia senzora (na vývojovej doske X-NUCLEO-IKS01A1):
- Obr. 13: Schéma zapojenia LPS25HB
Rozloženie pinov senzora:
- Obr. 14: Rozloženie pinov LPS25HB
Komunikácia pomocou I2C zbernice:
Tak isto ako v prípade senzora HTS221 aj senzor LPS25H pracuje ako podriadený (v režime slave). taktiež princíp je rovnaký čiže štartovacia transakcia začína signálom START (ST) - kde sa vysiela na zbernicu 7 bit číslo (adresa slave zariadenia). Táto adresa je ďalej doplnená jedným bitom (R/W).
Adresa slave (SAD) priradená k LPS25HB je 101110xb. SDO / SA0 sa môže použiť na zmenu menej významného bitu adresy zariadenia. Ak je SA0 pripojená k napájaciemu zdroju, LSb je '1' (adresa 1011101b), inak, ak je SA0 pripojená k zemi, hodnota LSb je '0' (adresa 1011100b). Toto riešenie umožňuje pripojiť a osloviť dve rôzne zariadenia LPS25HB na rovnakých linkách I2C.
Na obrázku (Obr. 15) môžeme vydieť, ako sa skladá vzor bitov na čítanie / zápis.
- Obr. 15: Skladanie bitov pri I2C komunikácii - LPS25HB
Údaje sa prenášajú v bajtovom formáte (DATA). Každý prenos údajov obsahuje 8 bitov. Počet prenesených bajtov na prenos je neobmedzený. Údaje sa najskôr prenášajú najvýznamnejším bitom (MSB).
Interpretovanie údajov o tlaku:
Údaje o tlaku sú uložené v 3 registroch:
- PRESS_OUT_H (2Ah)
- PRESS_OUT_L (29h)
- PRESS_OUT_XL (28h)
Hodnota je vyjadrená ako dvojkový doplnok, číže ak chceme získať tlak v hPa, zoberieme dvojkový doplnok slova a podelíme ho hodnotou 4096 hPa.
- Obr. 16: Výpočet hodnoty tlaku - LPS25HB
Riešenie
Po zoznámení sa z jednotlivými komponentami, ktoré potrebuje na zostavenie výslednej aplikácie sme sa pustili do zapájania hardware-ových častí. Zapojenie vývojových dosiek môžeme vidieť na obrázku (Obr. 17). Napájanie je realizované pomocou mini USB kábla, ktorý sa pripája do plošnej dosky Basic Breakout 5V (Sparkfun DEV-09716), ktorá je pripojená na rozhranie FTDI na vývojovej doske Acrob.
- Obr. 17: Znázornenie zapojenia HW komponentov
Fotky z fyzickej realizácie zapojenia:
-
Pohľad z hora
-
Pohľad z boku
Algoritmus a program
Program pre aplikáciu Meteostanice sme napísali v programovacom prostredí Arduino IDE. Program využíva knižnice pre obsluhu senzorov HTS221 a LPS25HB.
Vývojový diagram programu:
- Obr. 18: Vývojový diagram aplikácie
Na obrázku vyššie (Obr. 18) môžeme vidieť vývojový diagram programu, ktorý popisuje jednotlivé stavy počas behu nášho programu.
Zdrojový kód aplikácie:
/**
* Source code: Arduino IDE
*/
// Includes libraries for HTS221 and LPS25HB sensors.
#include <HTS221Sensor.h>
#include <LPS25HBSensor.h>
// Includes library for I2C communicate
#include <Wire.h>
// Defining symbolic constants
#define DEV_I2C Wire
#define SerialPort Serial
// Components
HTS221Sensor *HumTemp;
LPS25HBSensor *PressTemp;
void setup()
{
// Initialize serial for output.
SerialPort.begin(115200);
// Initialize I2C bus.
DEV_I2C.begin();
// Initlialize components.
HumTemp = new HTS221Sensor (&DEV_I2C);
HumTemp->Enable();
PressTemp = new LPS25HBSensor(&DEV_I2C);
PressTemp->Enable();
// Prints text to the serial port
SerialPort.print("| SEMESTRÁLNY PROJEKT - METEOSTANICA |");
SerialPort.print("\n");
SerialPort.print("| ----------------------------------- |");
SerialPort.print("\n");
}
void loop()
{
// Read humidity and temperature.
float humidity, temperature;
HumTemp->GetHumidity(&humidity);
HumTemp->GetTemperature(&temperature);
// Read pressure.
float pressure, temperature2;
PressTemp->GetPressure(&pressure);
PressTemp->GetTemperature(&temperature2);
// Prints output data to the serial port
SerialPort.print(" Vlhkost vzduchu : ");
SerialPort.print(humidity, 2);
SerialPort.print(" [%] ");
SerialPort.print("\n");
SerialPort.print(" Teplota vzduchu : ");
SerialPort.print(temperature, 2);
SerialPort.print(" [C] ");
SerialPort.print("\n");
SerialPort.print(" Atmosfericky tlak : ");
SerialPort.print(pressure, 2);
SerialPort.print(" [hPa] ");
SerialPort.print("\n\n");
delay(5000);
}
Zdrojový kód aplikácie: meteo-nucleo.c
Funkcie, ktoré vykonávajú prístup k hodnoám teploty vzduchu a vlhkosti vzduchu:
Obidve funkcie sú súčasťou arduino knižnice podporujúcej senzor HTS221. Knižnicu je možné stiahnúť z oficiálneho repozitára stm32duino na githube.
/**
* @brief Read HTS221 output register, and calculate the temperature
* @param pfData the pointer to data output
* @retval HTS221_STATUS_OK in case of success, an error code otherwise
*/
HTS221StatusTypeDef HTS221Sensor::GetTemperature(float* pfData)
{
int16_t int16data = 0;
// Read data from HTS221.
if ( HTS221_Get_Temperature( (void *)this, &int16data ) == HTS221_ERROR )
{
return HTS221_STATUS_ERROR;
}
*pfData = ( float )int16data / 10.0f;
return HTS221_STATUS_OK;
}
/**
* @brief Read HTS221 output register, and calculate the humidity
* @param pfData the pointer to data output
* @retval HTS221_STATUS_OK in case of success, an error code otherwise
*/
HTS221StatusTypeDef HTS221Sensor::GetHumidity(float* pfData)
{
uint16_t uint16data = 0;
// Read data from HTS221.
if ( HTS221_Get_Humidity( (void *)this, &uint16data ) == HTS221_ERROR )
{
return HTS221_STATUS_ERROR;
}
*pfData = ( float )uint16data / 10.0f;
return HTS221_STATUS_OK;
}
Github link: stm32duino / HTS221
Funkcia, ktorá vykonáva prístup k hodnote atmosferického tlaku:
Funkcia je súčasťou arduino knižnice podporujúcej senzor LPS25HB. Knižnicu je možné stiahnúť z oficiálneho repozitára stm32duino na githube.
/**
* @brief Read LPS25HB output register, and calculate the pressure in mbar
* @param pfData the pressure value in mbar
* @retval LPS25HB_STATUS_OK in case of success, an error code otherwise
*/
LPS25HBStatusTypeDef LPS25HBSensor::GetPressure(float* pfData)
{
int32_t int32data = 0;
// Read data from LPS25HB.
if ( LPS25HB_Get_Pressure( (void *)this, &int32data ) == LPS25HB_ERROR )
{
return LPS25HB_STATUS_ERROR;
}
*pfData = ( float )int32data / 100.0f;
return LPS25HB_STATUS_OK;
}
Github link: stm32duino / LPS25HB
Overenie
Po nahratí programu do nami realizovanej Meteostanice Nucleo si môžeme pozrieť hodnoty v Arduino IDE v v okne Serial monitoru.
- Obr. 19: Hodnoty zobrazené v Arduino IDE Serial Monitor
Jednotlivé merané veličiny boli vykreslené v prostredí Matlab. Každá veličina je vykreslená samostatne kvôli rôznemu rozsahu osi y. Na jednotlivých grafom môžeme vidieť piky, ktoré sú spôsobené testovaním senzorov a to tým spôsobom, že sme dýchli na senzory, čím sa zmenila teplota vzduchu, vlhkosť vzduchu a tlak vzduchu.
Uložené dáta z ktorých boli vykreslené grafy: data.txt
Zdrojový kód (Matlab): grafy.m
Vízia komplexnej aplikácie Meteostanice
Keďže takto realizovaná aplikácia Meteostanice, nie je moc vhodná na použitie v reálnom svete, popíšeme si ako by sme inak mohli realizovať takúto aplikáciu. Keďže chceme aby aplikácia bola komplexne navrhnutá, čo znamená, že okrem čítania dát zo senzorov chceme aby vedela aj ukladať namerané dáta napr. do databázy, ďalej aby vedela jednoduchým spôsobom zobrazovať aktuálne hodnoty (ale aj hodnoty namerané v minulosti) napr. prostredníctvom webovej aplikácie, kde by sme si mohli tieto dáta prezerať, prípadne sa pozrieť na grafický priebeh vývoja hodnôt v čase. Takto realizovaná aplikácia by sa už dala v reálnom svete celkom dobre použiť. Čo teda potrebujeme na to aby sme si vedeli takúto aplikáciu urobiť?
No keď si to podrobnejšie rozoberieme, tak určite budeme potrebovať nejaký web server s databázou, ktorý niekde budeme musieť nainštalovať. Na to by sme mohli použiť napríklad jednodoskový počítač Raspberry Pi 3. Raspberry pi je počítač, na ktorom môže bežať operačný systém založený na báze linuxu, najčastejšie to je operačný systém Raspbian a je možné naň inštalovať rôzny software. Viac o Rasperry Pi je možné sa dočítať napr. na oficiálnych stránkach tu: Klik.
Čiže budeme potrebovať nainštalovať:
- Samotný operačný systém Raspbian
- Databázu (prípadne aj klienta)
- Python a framework Flask (web framework)
Raspbian
Informácie ako nainštalovať operačný systém raspbian nájdeme na dokumentačných stránkach tu: Instaling operating system images
Databáza
Použijeme napr. MySQL databázový server, ktorý má podporu prácu s databázou z pythonu. Samozrejme po nainštalovaní bude potrebné databázu nakonfigurovať, ako napr. nastavenie hesla a pod. Taktiež pre prácu z databázou je vhodné si nainštalovať aj nejakého databázového klienta ako napr. HeidiSQL (Windows), MySQL Workbench, DBeaver, ktorý nám uľahčí vyvorenie tabuliek v databáze, do ktorých budeme ukladať naše dáta.
Inštalácia databázového servera na Raspebrry Pi:
sudo apt-get install mysql-server python-mysqldb
Zdroje:
Python a Flask
Python je vyšší programovací jazyk a Flask je mikro webový framevork napísaný v Pythone.
Inštalácia mikro web frameworku Flask:
sudo apt-get install python-pip
pip install flask
Inštalácia podpory pre websockety:
sudo pip install eventlet
sudo pip install flask-socketio
Zdroje:
Adresárová štruktúra flask aplikácie:
/meteo-nucleo
├── app.py
├── config.cfg
├── templates/
│ ├── index.html
└── static/
└── style.css
- app.py - samotná aplikácia napísaná vo Flask (pythone)
- config.cfg - konfiguračný súbor pre databázu
- index.html - html šablona webovej aplikácie
- style.css - kaskádové štýly webovej aplikácie
Obsah súboru: app.py
from flask import Flask, render_template
import MySQLdb
import ConfigParser
app = Flask(__name__)
config = ConfigParser.ConfigParser()
config.read('config.cfg')
# Configuration Database
myhost = config.get('mysqlDB', 'host')
myuser = config.get('mysqlDB', 'user')
mypasswd = config.get('mysqlDB', 'passwd')
mydb = config.get('mysqlDB', 'db')
# TODO: Source codes our application Meteo - Nucleo
# TODO: Read data from sensors HTS221 and LPS25HB
# TODO: Save data to Database
# TODO: Other codes
# ...
@app.route('/')
def index():
return render_template('index.html', async_mode=socketio.async_mode)
if __name__ == '__main__':
app.run(host="0.0.0.0", port=80, debug=True)
Obsah súboru: config.cfg
[mysqlDB]
host = localhost
db = databaseName
user = userName
passwd = userPassword
Obsah súboru: templates/index.html
<!DOCTYPE HTML>
<html>
<head>
<title>Application Name</title>
<!--
...
-->
</head>
<body>
<h1>Our Application Meteo- Nucleo</h1>
<!--
TODO: Display value from sensors
TODO: Display progress of the measured values in the charts
...
-->
</body>
</html>
Zdroje:
Na realizáciu by sme mohli využiť namiesto vývojovej dosky Acrob, Raspberry Pi 3, ku ktorému by sme pripojili dosku X-NUCLEO-IKS01A1. Ako prepojiť tieto dve zariadenia je popísané napr. na stránke tu: klik, kde je aj popísané akým spôsobom by bolo realizované čítanie dát zo senzora HTS221, prostredníctvom I2C zbernice. Obdobne by sme realizovali aj čítanie dát so senzora LPS25HB či ostatných senzorov nachádzajúcich sa na vývojovej doske NUCLEO-IKS01A1.
Takto realizovaná aplikácia by sa už dala v reálnom svete celkom dobre použiť. Na záver len dodáme, že táto vízia ma naozaj slúžiť ako vízia prípadnej realizácie takejto aplikácie. V skratke vysvetľuje a popisuje čo je potrebné na samotnú realizáciu.
Literatúra
- Datasheets k doske X-NUCLEO-IKS01A1: klik
- Datasheets k HTS221: klik
- Github repozitár k HTS221 klik
- Datasheets k LPS25HB: klik
- Github repozitár k LPS25HB klik
- I2C zbernica klik
- Vývojová doska Acrob klik
- Datasheets k plošnej doske SparkFun FTDI Basic Breakout - 5V klik