Post on 17-Mar-2018
IoT Hackathon / Teplotni senzor@RDPanek
Ruzni vyrobci / ruzne technologieDrahe / nekomunikuji spolu / ruzne UX ovladani
Pro nektere zde IoT konciPrototyp musime pretvorit v pouzitelne reseni
Lze postavit i to, co nelze koupitplatformy / moduly / open-hardware
Shieldy rozsiruji schopnostiNekonecne moznosti vlastni vyroby
Univerzalni PCB / Nepajive polePrototypovani
Univerzalni PCBRychle zhotoveni a prototypovani
PCB
Dratovanihmmmm
Raspberry Pi
ESP8266 / ATMEGA 328P / ATtiny / ...Software
ESP8266Software• NodeMCU eLua • NodeLua (+ NodeLua Web IDE) • ESP8266 BASIC • MicroPython • Espruino (JavaScript) • Arduino esp8266 (GitHub)
Espressif Systems • AT prikazy • OTA update • 802.11 (b +20dBm) /g/n, TCP/
IP stack, 2.4GHz, support WPA/WPA2
• STA/AP/STA+AP • 32-bit MCU • Deep sleep power < 10uA • Wake up and transmit packets
in < 2ms • PWM, GPIO, UART, I2C, ... • EEPROM !!!
ESP8266 familyGPIO / Memory / Software / Connectivity
ESP8266 blizsi pohledPCB kompaktibilita
Development boards
ESP8266 redukceLze zasadit do nepajiveho pole, ci PCB a lze zvolit typ ESP
WEMOS D1
WEMOS D1 minipinout
WEMOS D1 minishields
WEMOS D1 minishields
WEMOS D1 mini shieldsVyhody / nevyhody koupeneho / vlastniho shieldu
SchemataRuzna interpretace zapojeni
Teplotni senzorWemos D1 mini, OLED, DualBase, Protoboard, LDR, LED,
DS18B20, rezistors
Use caseESP8266 PCB + 3D print, DHT22 shield, OLED shield - LDR - DS18B20 - dualbase, smokeTester, PIR senzor - buzzer, rellay
Use case - Turris OmniaOpen-source, 1.6Ghz 2core, 2GB RAM, 8GB flash, 5 x Gbit LAN, 1 x Gbit WAN, 2 x USB 3.0, Mini PCI Express, mSATA, Wi-Fi 802.11 a/c/b/g/n, GPIO, OpenVrt, AutoUpdater, HoneyPot, programmable RGB, Cryptochip
LXC container - ElasticsearchTurris Omnia hosti LXC konteiner s Elasticsearch a jako persistentni uloziste se pouziva dodatecne pridany 120GB mSata disk
Interpretace loguSenzory odesilaji namerene hodnoty do Elasticsearch
a pomoci Kibany se provadi agregace a vizualizace dat
BlynkPomoci widgetu lze sledovat hodnoty na mobilnim telefonu, ktere jsou aktualne namereny - ci zadavat prikazy ( rozsvit svetlo )
REST API
Webova aplikaceHTML, CSS, Javascript
Proces vyvojeOd prototypovani po finalni produkt
Od prototypu po finalni vyrobek ( bastleni )Nepajive pole / 3D tisk / ATtiny85 - Atmel
O krok dale ( bastleni )Bezdratove ovladani zasuvky 433MHz
O krok dale ( bastleni )Znovupouzitelnost / replikace
Pomucky ( bastleni )
Pristroje ( bastleni )Pajeni
Tutorial: https://youtu.be/fYz5nIHH0iY?t=8m24s
Pristroje ( bastleni )Horkovzdusne pajeni
Pristroje ( bastleni )Laboratorni zdroj
Soucastky ( bastleni )Pouzdra, schemata, orientace, baleni
Soucastky ( bastleni )Schemata, datasheets
Pristroje ( bastleni )Metody mereni, Multimetr
Pristroje ( bastleni )Metody mereni, Osciloskop
Kontrukce ( bastleni )Stejneho vysledku lze dosahnout pomoci, MCU a vhodneho modulu, nebo skladbou dalsich soucastek
Pinout ( bastleni )Funkce a moznosti jednotlivych vyvodu
Sbernice ( bastleni )
Programovani ( bastleni )
https://www.arduino.cc/en/Reference/HomePage
http://www.pridopia.co.uk/pi-doc/ESP8266ATCommandsSet.pdfhttp://cristiansteib.github.io/Sim800l/info/SIM800+Series_AT+Command+Manual_V1.09.pdf
AT Commands
Prototyp ( bastleni )Prevedeni myslenky k funkcni prototyp / software
Eagle / schema
Eagle / priprava PCB
Eagle / priprava PCB
Prototyp ( bastleni )Vytisteni na papir a zkouska rozmisteni soucastek
Postup vyvojeNaskladneni soucastek /
E-shopy / pouzdra soucastek
Prototyp ( bastleni )Tvorba PCB
Prototyp ( bastleni )Osazovani PCB
Prototyp ( bastleni )Prusa MK2 / 3D tisk
Prototyp ( bastleni )3D tisk
Prototyp ( bastleni )Finalizace
Teplotni senzorZadani - postavte teplotni senzor z dostupnych soucastek, ktery• se pripoji k Wi-Fi a nastaveni si ulozi • nastavi limit mereni na 30000ms a nastaveni ulozi • zmeri teplotu • blika LED diodou po 200ms
• 1x start zarizeni • 2x uspesne pripojeno k Wi-Fi • 3x neuspesne pripojeno k Wi-Fi • 4x nepodarilo se zjistit cas ze site
• blika LED diodou po 50ms • 1x namerena hodnota byla odeslana do Elasticsearch • 2x namerenou hodnotu se nezdarilo odeslat
• Zmeri hodnotu osvetleni • Na OLED displeji vypise
• IP adresu pro pripojeni • Notifikaci o startu zarizeni • Notifikaci o (ne) uspesnem nahrani konfigurace • Namerenou teplotu • Informaci o neuspesnem odeslani namerenych
hodnot do Elasticserach • Informaci o neuspesnem zjisteni casu z NTP
• Zjisti dostupnost Elasticsearch • Odesle namerenou hodnotu do Elasticsearch a
zvaliduje odpoved • U zarizeni by melo jit zmenit URI Elasticsearch a
interval mereni
Pripravene stavebnice
V baleniWemosD1 mini, Oled display, prototype board, dualbase, rezistory, LDR, LED, Dallas DS18B20
Prakticke cviceni - WemosD1 mini
• step1: Serial link example
• step2: OLED example
• step3: LED example
• step4: LDR example
• step5: LDR and LED example
• step6: LDR & OLED & LED (bug)
• step7: dallas example
• step8: dallas and led example
• step9: dallas & led & oled
• step10: wifi-manager example
https://github.com/rdpanek/arduino/commits/hackathon
• step11: wifi-manager & LED status example
• step12: wifi-manager & LED status & OLED RSSI
& IP example
• step13: wifi-manager & OLED & Dallas & IF
Statement (bug)
• step14: Dallas & OLED and custom font
• step15: SPIFFS & ArduinoJSON example
• step16: wifi-manager & NTP example
• step17: wifi-manager & web-server example
• step18: wifi-manager ang GET request example
Priprava a pajeniVyzkousime si sestaveni celeho zarizeni a napajime hrebeny na dualbase shield
PajeniVyzkousime si sestaveni celeho zarizeni a napajime hrebeny na dualbase shield
PajeniPripajime prvni a posledni pin pro ukotveni, pote zbyle piny
PajeniPripraveny dualbase shield s pripajenymi hrebeny
PajeniVyzkousime si sestaveni celeho zarizeni a napajime WemosD1mini a protoboard shield
PajeniVyzkousime si sestaveni celeho zarizeni a napajime WemosD1mini - opet prvne prvni a posledni pin
PajeniVyzkousime si sestaveni celeho zarizeni a napajime protoboard shield - opet prvne prvni a posledni pin
PajeniVyzkousime si sestaveni celeho zarizeni a napajime OLED display
Zarizeni je pripraveno na oziveni. Muzeme nahrat prvni kod z Arduino IDE
Arduino IDEhttps://www.arduino.cc/download_handler.php
Nastaveni Arduino IDE
Vyber desky
Pridani podpory pro desky s ESP8266Soubor > Vlastnosti > Spravce dalsich desek URLhttp://arduino.esp8266.com/stable/package_esp8266com_index.json Nastroje > Vyvojovych desek > Manazer Desek > ESP > Instalace
Pripojeni zarizeni
Po pripojeni zarizeni k pocitaci bude zarizeni reprezentovano dalsim portem- po pripojeni zarizeni blikne modrou diodou- Upload Speed: 115200- po odpojeni zarizeni a znovu zapojeni - zkontrolovat nastaveny PORT a zvolenou Vyvojovou desku
Zaklady se sketch_jan24a.ino
Prakticke cviceni - step1: Serial link example
Nastroje > Seriovy monitor > 115200- pri uploadu sketche do zarizeni blika modra
led dioda
Prakticke cviceni - step2: OLED examplePocitadlo
Prakticke cviceni - step2: OLED exampleProhledneme si pozorne spodni stranu shieldu
Prakticke cviceni - step2: OLED example
squix78/esp8266-oled-ssd1306
Tento PC > Dokumenty > Arduino > libraries
Prakticke cviceni - step3: LED example
Prakticke cviceni - step3: LED example
Prakticke cviceni - step3: LED examplePodle barevneho oznaceni rezisotru vybereme ten spravny a podle pinu v kodu jej napajime na dany pin do protoboardu
Prakticke cviceni - step3: LED examplePripajime rezistor, stejne tak LED diodu
Prakticke cviceni - step3: LED examplePripajeny rezistor a LED dioda
Prakticke cviceni - step3: LED examplePropojime rezistor a diodu cinem, nakonec katodu s GND
Prakticke cviceni - step3: LED examplePo uploadu software bude LED dioda blikat
Prakticke cviceni - step4: LDR example
Prakticke cviceni - step4: LDR examplePripajime rezistor a LDR podle predchoziho schematu
Prakticke cviceni - step4: LDR examplePripajime rezistor a LDR podle predchoziho schematu
Prakticke cviceni - step4: LDR examplePripajime rezistor a LDR podle predchoziho schematu
Prakticke cviceni - step4: LDR example
Prakticke cviceni - step5: LDR and LED example
Prakticke cviceni - step6: LDR & OLED & LEDHodnota LDR se vypisuje na displej a dioda se rozsviti, pokud hodnota LDR klesne pod uvedenou mez
Prakticke cviceni - step6: LDR & OLED & LED (bug)
Prakticke cviceni - step7: dallas example
Prakticke cviceni - step7: dallas example
Prakticke cviceni - step7: dallas examplePripajime rezistor a teplotni cidlo
Kompletne osazeny prototype shieldKonec pajeni - kazdy osazeny prototype shield muze vypadat jinak
Kompletne osazeny prototype shieldKonec pajeni - kazdy osazeny prototype shield muze vypadat jinak
Kompletne osazeny prototype shieldKonec pajeni - kazdy osazeny prototype shield muze vypadat jinakKompletne osazeny prototype shieldKonec pajeni - kazdy osazeny prototype shield muze vypadat jinak
Konec pajeni - kazdy osazeny prototype shield muze vypadat jinak
Kompletne osazeny prototype shieldKonec pajeni - kazdy osazeny prototype shield muze vypadat jinak
Prakticke cviceni - step8: dallas and led example
Prakticke cviceni - step8: dallas and led examplePokud teplota dosahne 30 C, rozsviti se LED dioda, pokud teplota klesne pod 30 C, LED dioda zhasne
Prakticke cviceni - step9: dallas & led & oled
Prakticke cviceni - step9: dallas & led & oledTeplota se vypise na displej
Prakticke cviceni - step10: wifi-manager example
Prakticke cviceni - step10: wifi-manager example
Prakticke cviceni - step10: wifi-manager example
Prakticke cviceni - step10: wifi-manager example
Prakticke cviceni - step10: wifi-manager example
Prakticke cviceni - step11: wifi-manager & LED status example
Prakticke cviceni - step11: wifi-manager & LED status example
Prakticke cviceni - step12: wifi-manager & LED status & OLED RSSI & IP example
Prakticke cviceni - step12: wifi-manager & LED status & OLED RSSI & IP example
Prakticke cviceni - step13: wifi-manager & OLED & Dallas & IF Statement (bug)
Prakticke cviceni - step13: wifi-manager & OLED & Dallas & IF Statement (bug)Teplota se vypise na displej
Prakticke cviceni - step13: wifi-manager & OLED & Dallas & IF Statement (bug)IP adresa se vypise na displej
Prakticke cviceni - step13: wifi-manager & OLED & Dallas & IF Statement (bug)IP adresa se vypise na displej
Prakticke cviceni - step13: wifi-manager & OLED & Dallas & IF Statement (bug)Volna pamet se vypise na displej
Prakticke cviceni - step13: wifi-manager & OLED & Dallas & IF Statement (bug)RSSI se vypise na displej
Prakticke cviceni - step14: Dallas & OLED and custom font http://oleddisplay.squix.ch/#/home
Prakticke cviceni - step14: Dallas & OLED and custom font
Prakticke cviceni - step14: Dallas & OLED and custom fontPro zobrazeni teploty vyberte velky a dobre citelny font
Prakticke cviceni - step15: SPIFFS & ArduinoJSON example https://github.com/esp8266/Arduino/blob/master/doc/filesystem.md
Prakticke cviceni - step15: SPIFFS & ArduinoJSON example
{ "nazevZarizeni": "Teplomer", "pocetTeplomeru": 1, "namerenaTeplota": 24 }
Promenne
JSON
Promenne
String nazevZarizeni = "Teplomer"; int pocetTeplomeru = 1; float namerenaTeplota = 25.00;
nazevZarizeni = json["nazevZarizeni"].as<String>(); pocetTeplomeru = json["pocetTeplomeru"]; namerenaTeplota = json["namerenaTeplota"];
Restart zarizeniUlozeni konfigurace
Nacteni konfigurace
String konfiguracniSoubor = "/konfigurace.json";
String konfiguracniSoubor = "/konfigurace.json";
Prakticke cviceni - step15: SPIFFS & ArduinoJSON example
Prakticke cviceni - step15: SPIFFS & ArduinoJSON example Bug: nazevZarizeni = json["nazevZarizeni"]
reseni v /examples
Prakticke cviceni - step15: SPIFFS & ArduinoJSON example
Prvni spusteni
Ulozeni bylo uspesne. nazevZarizeni: Teplomer pocetTeplomeru: 1 namerenaTeplota: 25.00 Nacteni konfigurace bylo uspesne. -- start --
Druhe spusteni
FS File: /konfigurace.json, size: 71B
nazevZarizeni: Teplomer pocetTeplomeru: 1 namerenaTeplota: 25.00 Nacteni konfigurace bylo uspesne. -- start --
Prakticke cviceni - step16: wifi-manager & NTP example
Prakticke cviceni - step16: wifi-manager & NTP example
Prakticke cviceni - step17: wifi-manager & web-server example
Prakticke cviceni - step18: wifi-manager and GET request example ( REST-API )
Arduino libraries
Odeslani namerenych hodnot do Elasticsearch
{ "location": "most", "heap": 26800, "rssi": -70, "senzor": "temperature", "val": 28.94, "ntpDateTime": "2017-01-26T12:15:03.000Z"}
{ "_index": "iot-2017.01.26", "_type": "iot", "_id": "AVnas4ukhWsDiAH10Jux", "_version": 1, "result": "created", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "created": true}
POST {{protocol}}://{{server}}:{{port}}/iot-YYYY-MM-DD/iotURI
Request Response
Sestavte request a validujte response, ze ulozeni bylo uspene. Vyreste strategii odeslani namerenych hodnot, pokud se odeslani nezdari.