SlideShare une entreprise Scribd logo
1  sur  53
Télécharger pour lire hors ligne
ESP8266Wi-Fi modul za $3
SUT, 28. 4. 2015
Adam Hořčica, Vojtěch Suk
Ahoj, já jsem
ESP8266
Kdo jsme…
Adam
‒ Bastlíř
‒ Programátor
‒ Správce projektu
MacGyver
Vojta
‒ Hračička
‒ Správce projektu
MacGyver
… a co vám přinášíme
• MQTT – Protože bez IoT by to dnes nebylo cool & in
– Co to je, jak to funguje a jak to použít
– Demo
• ESP8266 – HW
– Specifikace, zajímavosti, zapojení
– Demo (ošmatej si sám)
• ESP8266 – The easy way
– AT, Lua, uPy, Arduino, …
– Demo
• ESP8266 – Pro opravdové muže vývojáře
– SDK
– MQTT klient demo
MQTT
Protokol pro IoT
ADAM
MQTT
• Pub-Sub
• Broker x Client
– Publikace zprávy s předmětem (topic)
– Odebírání všech zpráv s daným předmětem
– Obsah zprávy je TXT
• Malé datové nároky
• Postavené nad TCP/IP
Pub/Sub
PUB
SUB
SUB
SUB
Broker
PUB: /greatings
Předmět (topic)
• Publikace
/hierarchická/struktura/xyz/123
• Odebírání
– Přesný předmět:
/hierarchická/struktura/xyz
– Wildchar:
/hierarchická/+/+/xyz
/hierarchická/struktura/#
/+/struktura/#
Předmět (topic)
/sensory/budovaA/mistnost123/teplota
/sensory/budovaA/mistnost123/+
/sensory/budovaA/#
/sensory/budovaA/+/teplota
/sensory/+/+/teplota
Quality of Service
• Co se stane se zprávou v případě poruchy:
QoS ⓿ … nemusí být doručena vůbec
QoS ❶ … může být doručena vícekrát
QoS ❷ … bude doručena právě jednou
Retain
• Příznak trvalé zprávy
• Broker si ji zapamatuje
• První co dostanu po sub
• Je možné smazat zasláním null zprávy
„Poslední vůle“ (will)
• Co se stane, když mě někdo zabije odpojí
• Zpráva, kterou broker zašle při nečekaném
odpojení klienta
• will-topic
• will-payload
• will-qos
• will-retain
Mosquitto
• Broker (mosquitto)
• C++, multiplatformní
• Klient:
– mosquitto_pub
– mosquitto_sub
• http://mosquitto.org
• Demo: iot.eclipse.org:1883
Node Red
• Grafický jazyk + runtime
• Tok zpráv od vstupu do výstupu
– API, HW, online service
• Implementace v node.js
• http://nodered.org/
• https://learn.adafruit.com/raspberry-pi-hosting-node-red/what-is-node-red
Demo
• http://iot.siliconhill.cz
• Mosquitto konzolový klient
• MQTT Spy
• MQTT Hive web client
• NodeRed
• Like-o-meter
ESP8266 HW
Železo
VOJTA
ESP8266
• WiFi SoC
• 32 bit RISC CPU
• GPIO, I2C, ADC, SPI, PWM, UART, RTC, JTAG
ESP8266
• Vyrábí Espressif Systems
• Postaveno na xTensa od Tensilica
• Moduly od od různých výrobců
ESP8266
• Vyžaduje 3,3 V napájení
• GPIO jsou 5 V tolerantní
• Při příjmu odběr 60-62 mA
• Při vysílání až 215 mA
CPU
• 80 MHz
• 96 kB data RAM
• 64 kB instuction ROM (bootloader od výrobce)
• 64 kB instruction RAM (cache pro SPI flash)
• 4 sleep módy
CPU
• Boot módy
• Na daných pinech nutný PullUp
MTDO GPIO0 GPIO2 Mode Description
L L H UART Download code from UART
L H H Flash Boot from SPI Flash
H x x SDIO Boot from SD-card
WiFi
• Podpora 802.11b/g/n (2.4 GHz)
• WPA/WPA2 (pouze PSK)
• Až 20 dBm (při 802.11b, jinak 16 dBm)
• Antena diversity
Periferie
• Až 16 GPIO pinů
• 10 bitový ADC
• SPI (použitá pro externí FLASH paměť)
• UART
• RTC
• SDIO 2.0
Dostupný HW
• eBay, Alibaba,…
• Liší se jen počtem GPIO a anténou
Dostupný HW
• U většiny modulů je potřeba další PCB
• Nebo použít ESP-12 development board
Vlastní HW
• Stačí jen několik málo součástek
• QFN32 pouzdro
• Impedanční přizpůsobení
Vlastní HW
Zapojení
• Pro boot do aplikace
– MDTO -> Log0, GPIO0 -> Log1, GPIO2 -> Log1
– CH_PD na Log1
• Pro bootloader
– MDTO -> Log0, GPIO0 -> Log0, GPIO2 -> Log1
– CH_PD na Log1
Demo
• Nechat kolovat…
ESP-01 ESP-07
ESP8266
The easy way
ADAM
Jak s modulem komunikovat
• Sériová linka
– Bootloader má 76923 Bd
– Aplikace typicky 9600 nebo 115200 Bd
• Ale co dál…
– AT
– Terminál (Lua, uPy, Frankenstein)
– Programování (Arduino, C SDK)
AT příkazy
• Je tam od výroby
• Pokud máte svůj MCU
< AT+CWMODE=1 -- Nastaví Clinet mode
> OK
< AT+CWLAP -- Seznam AP
> +CWLAP:(0,"WiFi",-91,"ac:a3:1e:d1:c7:e0",1)
< AT+CWJAP="WiFi","heslo" -- Připojit k AP
> OK
…
Lua
• FW s interpretrem vyššího jazyka
• V současnosti nejpropracovanější
• Dva projekty:
– Čistý interpret
https://github.com/nodemcu/nodemcu-firmware
– Podpora cloudu
http://nodelua.org/
• IDE ESPlorer
http://esp8266.ru/esplorer/
µPython
• Silně ve vývoji!
• Aktuálně v3.4.0
• Velký potenciál…
https://github.com/micropython/micropython/tree/master/esp8266
Frankenstein
• FW pro „*nix guys“
• Klasický terminál (ala busybox, cisco, XPort)
• Musí se kompilovat (make menuconfig && make)
https://github.com/nekromant/esp8266-frankenstein
Arduino IDE
• Kdo by neznal Arduino
• Port Arduino knihoven pod ESP8266 SDK
• Včetně podpory z Arduino IDE
http://www.arduinesp.com/
Demo
• Co chcete vidět?
ESP8266 SDK
Pro opravdové muže vývojáře
VOJTA
ESP8266 SDK - součásti
• Xtensa lx106 toolchain
• ESP8266 IoT SDK
• Open source componenty
– lwIP
– Contiki
– axTLS
– wpa_supplicant
– net80211/ieee80211
https://github.com/pfalcon/esp-open-sdk
Co nabízí
• Vlákna
• Časovače
• Práci s WiFi
• SPI read, write
• TCP/UDP stack
• JSON
• GPIO, UART, PWM, I2C
Sekce paměti
• .text – Program v IRAM (max 32Kb)
• .irom0.text – Program ve SPI FLASH (ICACHE)
• .data – Data v DRAM (inicializované)
• .bss – Data v DRAM (neinicializované)
• .rodata – Read only Data v DRAM
ESP8266 SDK - sestavení
• Vyžaduje GNU/POSIX
• Pro ubuntu je nutné instalovat:
make unrar autoconf automake libtool gcc g++ gperf flex bison texinfo gawk
ncurses-dev libexpat-dev python sed
• Poté jen spustit kompilaci:
make STANDALONE=y
Vytvoření binárek
• Program je potřeba rozdělit
• .text zapisujeme na adresu 0x00000
• .irom0.text podle Linker scriptu (většinou 0x40000)
• Můžeme použít nástroj esptool:
./esptool.py elf2image app.elf
Upload firmware
• Za pomoci UARTu
• Nutný bootloader mód
• Lze využít naříklad esptool
./esptool.py -p /dev/ttyS0 write_flash 0x00000 app-0x00000.bin 0x40000 app-0x40000.bin
/esptool.py --port /dev/ttzS0 write_flash 0x00..
Connecting...
Erasing flash...
Writing at 0x00009400... (100 %)
Erasing flash...
Writing at 0x00070800... (100 %)
Leaving...
Příklady kódu
• Hello world
• Použití časovače
• Použití vláken
• GPIO
• TCP server
Ukázka kódu
void ICACHE_FLASH_ATTR user_init() {
uart_div_modify(0, UART_CLK_FREQ / 115200);
os_printf("Hello worldrn");
}
Časovač
LOCAL volatile os_timer_t some_timer;
LOCAL void ICACHE_FLASH_ATTR timerCallback(void *arg){
// periodicky spouštěný kód
}
LOCAL void ICACHE_FLASH_ATTR init(){
os_timer_disarm(&some_timer);
os_timer_setfn(&some_timer, (os_timer_func_t *) timerCallback, NULL);
os_timer_arm(&some_timer, 2500, 1);
}
Vlákna
#define MQTT_TASK_PRIO 0
#define MQTT_TASK_QUEUE_SIZE 1
LOCAL os_event_t procTaskQueue[TASK_QUEUE_SIZE];
LOCAL void ICACHE_FLASH_ATTR ThreadTask(os_event_t *e){
os_delay_us(1000); // prostor pro váš kód
system_os_post(MQTT_TASK_PRIO, 0, 0);
}
LOCAL void ICACHE_FLASH_ATTR user_init(){
system_os_task(ThreadTask, TASK_PRIO, procTaskQueue, TASK_QUEUE_SIZE);
system_os_post(MQTT_TASK_PRIO, 0, 0);
}
GPIO
LOCAL void ICACHE_FLASH_ATTR user_init(){
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_GPIO2); // set mapping to GPIO2
GPIO_OUTPUT_SET(2, 1); // set GPIO2 to OUTPUT and Log1
os_delay_us(250000);
GPIO_OUTPUT_SET(2, 0); // set GPIO2 to OUTPUT and Log0
os_delay_us(250000);
GPIO_DIS_OUTPUT(2); // GPIO2 to INPUT
PIN_PULLUP_EN(PERIPHS_IO_MUX_GPIO2_U); // enable Pullup on GPIO2
if(GPIO_INPUT_GET(2) == 1){ // is GPIO2 set?
os_printf("uprn");
}
}
TCP server
LOCAL void ICACHE_FLASH_ATTR webserver_listen(void *arg) {
struct espconn *pesp_conn = arg;
espconn_regist_recvcb(pesp_conn, webserver_recv); // callback to recv function
espconn_regist_reconcb(pesp_conn, webserver_recon); // callback on reconnection start function
espconn_regist_disconcb(pesp_conn, webserver_discon); // callback on disconnected function
}
LOCAL void ICACHE_FLASH_ATTR user_init(){
LOCAL struct espconn esp_conn;
LOCAL esp_tcp esptcp;
esp_conn.type = ESPCONN_TCP;
esp_conn.state = ESPCONN_NONE;
esp_conn.proto.tcp = &esptcp;
esp_conn.proto.tcp->local_port = 80;
espconn_regist_connectcb(&esp_conn, webserver_listen);
//#define SERVER_SSL_ENABLE
#ifdef SERVER_SSL_ENABLE
espconn_secure_accept(&esp_conn);
#else
espconn_accept(&esp_conn);
#endif
}
Demo
• Ukázka SDK + MQTT klient
> mosquitto_sub –t /questions
Adam Hořčica (@horcicaa)
Vojtěch Suk (@VojtechSuk)
http://macgyver.siliconhill.cz/kontakt.html
Vice na:
http://macgyver.siliconhill.cz/wiki/projekty/esp8266

Contenu connexe

En vedette

Posíláme e-mail (tentokrát pro roboty)
Posíláme e-mail (tentokrát pro roboty)Posíláme e-mail (tentokrát pro roboty)
Posíláme e-mail (tentokrát pro roboty)Adam Hořčica
 
Android - vývoj, distribuce a propagace
Android - vývoj, distribuce a propagaceAndroid - vývoj, distribuce a propagace
Android - vývoj, distribuce a propagaceAvast Software
 
Hackathony v České republice
Hackathony v České republiceHackathony v České republice
Hackathony v České republiceAndrej Probst
 
Seznámení s agilním přístupem - A first look at the Agile
Seznámení s agilním přístupem - A first look at the AgileSeznámení s agilním přístupem - A first look at the Agile
Seznámení s agilním přístupem - A first look at the AgilePrincipal engineering s.r.o.
 
Sedm zabijáků inovaci ve velkých firmách
Sedm zabijáků inovaci ve velkých firmáchSedm zabijáků inovaci ve velkých firmách
Sedm zabijáků inovaci ve velkých firmáchZdeněk Macháček
 
New Media, Big Data, IoT aneb jak to je?!
New Media, Big Data, IoT aneb jak to je?!New Media, Big Data, IoT aneb jak to je?!
New Media, Big Data, IoT aneb jak to je?!Josef Šlerka
 
An introduction to workflow-based programming with Node-RED
An introduction to workflow-based programming with Node-REDAn introduction to workflow-based programming with Node-RED
An introduction to workflow-based programming with Node-REDBoris Adryan
 
Specifika vývoje aplikací pro internet věcí (Dmytro Trofymchuk)
Specifika vývoje aplikací pro internet věcí (Dmytro Trofymchuk)Specifika vývoje aplikací pro internet věcí (Dmytro Trofymchuk)
Specifika vývoje aplikací pro internet věcí (Dmytro Trofymchuk)eMan s.r.o.
 
IoT Open Source Integration Comparison (Kura, Node-RED, Flogo, Apache Nifi, S...
IoT Open Source Integration Comparison (Kura, Node-RED, Flogo, Apache Nifi, S...IoT Open Source Integration Comparison (Kura, Node-RED, Flogo, Apache Nifi, S...
IoT Open Source Integration Comparison (Kura, Node-RED, Flogo, Apache Nifi, S...Kai Wähner
 

En vedette (15)

PROJECT: Arduino 1
PROJECT: Arduino 1PROJECT: Arduino 1
PROJECT: Arduino 1
 
PROJECT: Arduino 2
PROJECT: Arduino 2PROJECT: Arduino 2
PROJECT: Arduino 2
 
Obhajoba
ObhajobaObhajoba
Obhajoba
 
Posíláme e-mail (tentokrát pro roboty)
Posíláme e-mail (tentokrát pro roboty)Posíláme e-mail (tentokrát pro roboty)
Posíláme e-mail (tentokrát pro roboty)
 
Android - vývoj, distribuce a propagace
Android - vývoj, distribuce a propagaceAndroid - vývoj, distribuce a propagace
Android - vývoj, distribuce a propagace
 
CSAS_v06
CSAS_v06CSAS_v06
CSAS_v06
 
TNPW2-2016-01
TNPW2-2016-01TNPW2-2016-01
TNPW2-2016-01
 
Hackathony v České republice
Hackathony v České republiceHackathony v České republice
Hackathony v České republice
 
Seznámení s agilním přístupem - A first look at the Agile
Seznámení s agilním přístupem - A first look at the AgileSeznámení s agilním přístupem - A first look at the Agile
Seznámení s agilním přístupem - A first look at the Agile
 
Sedm zabijáků inovaci ve velkých firmách
Sedm zabijáků inovaci ve velkých firmáchSedm zabijáků inovaci ve velkých firmách
Sedm zabijáků inovaci ve velkých firmách
 
New Media, Big Data, IoT aneb jak to je?!
New Media, Big Data, IoT aneb jak to je?!New Media, Big Data, IoT aneb jak to je?!
New Media, Big Data, IoT aneb jak to je?!
 
Vizualizace jako pomocník projektového managera
Vizualizace jako pomocník projektového manageraVizualizace jako pomocník projektového managera
Vizualizace jako pomocník projektového managera
 
An introduction to workflow-based programming with Node-RED
An introduction to workflow-based programming with Node-REDAn introduction to workflow-based programming with Node-RED
An introduction to workflow-based programming with Node-RED
 
Specifika vývoje aplikací pro internet věcí (Dmytro Trofymchuk)
Specifika vývoje aplikací pro internet věcí (Dmytro Trofymchuk)Specifika vývoje aplikací pro internet věcí (Dmytro Trofymchuk)
Specifika vývoje aplikací pro internet věcí (Dmytro Trofymchuk)
 
IoT Open Source Integration Comparison (Kura, Node-RED, Flogo, Apache Nifi, S...
IoT Open Source Integration Comparison (Kura, Node-RED, Flogo, Apache Nifi, S...IoT Open Source Integration Comparison (Kura, Node-RED, Flogo, Apache Nifi, S...
IoT Open Source Integration Comparison (Kura, Node-RED, Flogo, Apache Nifi, S...
 

Similaire à Mikro­kontrolér s Wi-Fi za $3! nejen pro IOT

eMan Dev Meetup: Postavte si chytrou domácnost (2.8.2016, Hradec Králové)
eMan Dev Meetup: Postavte si chytrou domácnost (2.8.2016, Hradec Králové)eMan Dev Meetup: Postavte si chytrou domácnost (2.8.2016, Hradec Králové)
eMan Dev Meetup: Postavte si chytrou domácnost (2.8.2016, Hradec Králové)eMan s.r.o.
 
Slovak Sun Training Day 2010 - OpenSolaris
Slovak Sun Training Day 2010 - OpenSolarisSlovak Sun Training Day 2010 - OpenSolaris
Slovak Sun Training Day 2010 - OpenSolarisMartin Cerveny
 
Základy reverse engineeringu a assembleru / KAREL LEJSKA, MILAN BARTOŠ [DEFEN...
Základy reverse engineeringu a assembleru / KAREL LEJSKA, MILAN BARTOŠ [DEFEN...Základy reverse engineeringu a assembleru / KAREL LEJSKA, MILAN BARTOŠ [DEFEN...
Základy reverse engineeringu a assembleru / KAREL LEJSKA, MILAN BARTOŠ [DEFEN...Security Session
 
CZNIC: Správa internetu, routing a IPv6
CZNIC: Správa internetu, routing a IPv6CZNIC: Správa internetu, routing a IPv6
CZNIC: Správa internetu, routing a IPv6Tomáš Holas
 
Sítě pro malé a střední podniky 2014
Sítě pro malé a střední podniky 2014Sítě pro malé a střední podniky 2014
Sítě pro malé a střední podniky 2014Vladimír Smitka
 
Bitcoin Trezor - hardware bitcoin wallet
Bitcoin Trezor - hardware bitcoin walletBitcoin Trezor - hardware bitcoin wallet
Bitcoin Trezor - hardware bitcoin walletSecurity Session
 
Základy technického vybavení počítačů
Základy technického vybavení počítačůZáklady technického vybavení počítačů
Základy technického vybavení počítačůMichal Černý
 
Czech Oracle Solaris Administrators Day 2011 - DTrace
Czech Oracle Solaris Administrators Day 2011 - DTrace Czech Oracle Solaris Administrators Day 2011 - DTrace
Czech Oracle Solaris Administrators Day 2011 - DTrace Martin Cerveny
 
Prezentace pro Učitel In 2016
Prezentace pro Učitel In 2016Prezentace pro Učitel In 2016
Prezentace pro Učitel In 2016Martin Maly
 
Produktová prezentace - TiCtOG
Produktová prezentace - TiCtOGProduktová prezentace - TiCtOG
Produktová prezentace - TiCtOGtomandr
 
Odpoledne se Seznamem II - Provozní bezpečnost
Odpoledne se Seznamem II - Provozní bezpečnostOdpoledne se Seznamem II - Provozní bezpečnost
Odpoledne se Seznamem II - Provozní bezpečnostchaplin06
 
Slovak Sun Training Day 2010 - DTrace
Slovak Sun Training Day 2010 - DTraceSlovak Sun Training Day 2010 - DTrace
Slovak Sun Training Day 2010 - DTraceMartin Cerveny
 
CBduino II - sensory
CBduino II - sensoryCBduino II - sensory
CBduino II - sensoryMichal Kočer
 
Czech Oracle Solaris Administrators Day 2011 - Solaris Express (OpenSolaris)
Czech Oracle Solaris Administrators Day 2011 - Solaris Express (OpenSolaris)Czech Oracle Solaris Administrators Day 2011 - Solaris Express (OpenSolaris)
Czech Oracle Solaris Administrators Day 2011 - Solaris Express (OpenSolaris)Martin Cerveny
 
OpenStack Czech User Group Meetup
OpenStack Czech User Group Meetup OpenStack Czech User Group Meetup
OpenStack Czech User Group Meetup Jaroslav Jacjuk
 
Rodina protokolů TCP/IP, téma 8: Protokol IPv6
Rodina protokolů TCP/IP, téma 8: Protokol IPv6Rodina protokolů TCP/IP, téma 8: Protokol IPv6
Rodina protokolů TCP/IP, téma 8: Protokol IPv6Jiří Peterka
 
Slasti Strasti Propasti Windows Mobile
Slasti Strasti Propasti Windows MobileSlasti Strasti Propasti Windows Mobile
Slasti Strasti Propasti Windows MobileRENESTEIN
 
Slovak SanEd Training Day 2012 - New Networking in Solaris 11
Slovak SanEd Training Day 2012 - New Networking in Solaris 11Slovak SanEd Training Day 2012 - New Networking in Solaris 11
Slovak SanEd Training Day 2012 - New Networking in Solaris 11Martin Cerveny
 
Rodina protokolů TCP/IP, téma 5: Protokol IPv4
Rodina protokolů TCP/IP, téma 5: Protokol IPv4Rodina protokolů TCP/IP, téma 5: Protokol IPv4
Rodina protokolů TCP/IP, téma 5: Protokol IPv4Jiří Peterka
 
SmartCard Forum 2008 - Programové vybavení OKsmart
SmartCard Forum 2008 - Programové vybavení OKsmartSmartCard Forum 2008 - Programové vybavení OKsmart
SmartCard Forum 2008 - Programové vybavení OKsmartOKsystem
 

Similaire à Mikro­kontrolér s Wi-Fi za $3! nejen pro IOT (20)

eMan Dev Meetup: Postavte si chytrou domácnost (2.8.2016, Hradec Králové)
eMan Dev Meetup: Postavte si chytrou domácnost (2.8.2016, Hradec Králové)eMan Dev Meetup: Postavte si chytrou domácnost (2.8.2016, Hradec Králové)
eMan Dev Meetup: Postavte si chytrou domácnost (2.8.2016, Hradec Králové)
 
Slovak Sun Training Day 2010 - OpenSolaris
Slovak Sun Training Day 2010 - OpenSolarisSlovak Sun Training Day 2010 - OpenSolaris
Slovak Sun Training Day 2010 - OpenSolaris
 
Základy reverse engineeringu a assembleru / KAREL LEJSKA, MILAN BARTOŠ [DEFEN...
Základy reverse engineeringu a assembleru / KAREL LEJSKA, MILAN BARTOŠ [DEFEN...Základy reverse engineeringu a assembleru / KAREL LEJSKA, MILAN BARTOŠ [DEFEN...
Základy reverse engineeringu a assembleru / KAREL LEJSKA, MILAN BARTOŠ [DEFEN...
 
CZNIC: Správa internetu, routing a IPv6
CZNIC: Správa internetu, routing a IPv6CZNIC: Správa internetu, routing a IPv6
CZNIC: Správa internetu, routing a IPv6
 
Sítě pro malé a střední podniky 2014
Sítě pro malé a střední podniky 2014Sítě pro malé a střední podniky 2014
Sítě pro malé a střední podniky 2014
 
Bitcoin Trezor - hardware bitcoin wallet
Bitcoin Trezor - hardware bitcoin walletBitcoin Trezor - hardware bitcoin wallet
Bitcoin Trezor - hardware bitcoin wallet
 
Základy technického vybavení počítačů
Základy technického vybavení počítačůZáklady technického vybavení počítačů
Základy technického vybavení počítačů
 
Czech Oracle Solaris Administrators Day 2011 - DTrace
Czech Oracle Solaris Administrators Day 2011 - DTrace Czech Oracle Solaris Administrators Day 2011 - DTrace
Czech Oracle Solaris Administrators Day 2011 - DTrace
 
Prezentace pro Učitel In 2016
Prezentace pro Učitel In 2016Prezentace pro Učitel In 2016
Prezentace pro Učitel In 2016
 
Produktová prezentace - TiCtOG
Produktová prezentace - TiCtOGProduktová prezentace - TiCtOG
Produktová prezentace - TiCtOG
 
Odpoledne se Seznamem II - Provozní bezpečnost
Odpoledne se Seznamem II - Provozní bezpečnostOdpoledne se Seznamem II - Provozní bezpečnost
Odpoledne se Seznamem II - Provozní bezpečnost
 
Slovak Sun Training Day 2010 - DTrace
Slovak Sun Training Day 2010 - DTraceSlovak Sun Training Day 2010 - DTrace
Slovak Sun Training Day 2010 - DTrace
 
CBduino II - sensory
CBduino II - sensoryCBduino II - sensory
CBduino II - sensory
 
Czech Oracle Solaris Administrators Day 2011 - Solaris Express (OpenSolaris)
Czech Oracle Solaris Administrators Day 2011 - Solaris Express (OpenSolaris)Czech Oracle Solaris Administrators Day 2011 - Solaris Express (OpenSolaris)
Czech Oracle Solaris Administrators Day 2011 - Solaris Express (OpenSolaris)
 
OpenStack Czech User Group Meetup
OpenStack Czech User Group Meetup OpenStack Czech User Group Meetup
OpenStack Czech User Group Meetup
 
Rodina protokolů TCP/IP, téma 8: Protokol IPv6
Rodina protokolů TCP/IP, téma 8: Protokol IPv6Rodina protokolů TCP/IP, téma 8: Protokol IPv6
Rodina protokolů TCP/IP, téma 8: Protokol IPv6
 
Slasti Strasti Propasti Windows Mobile
Slasti Strasti Propasti Windows MobileSlasti Strasti Propasti Windows Mobile
Slasti Strasti Propasti Windows Mobile
 
Slovak SanEd Training Day 2012 - New Networking in Solaris 11
Slovak SanEd Training Day 2012 - New Networking in Solaris 11Slovak SanEd Training Day 2012 - New Networking in Solaris 11
Slovak SanEd Training Day 2012 - New Networking in Solaris 11
 
Rodina protokolů TCP/IP, téma 5: Protokol IPv4
Rodina protokolů TCP/IP, téma 5: Protokol IPv4Rodina protokolů TCP/IP, téma 5: Protokol IPv4
Rodina protokolů TCP/IP, téma 5: Protokol IPv4
 
SmartCard Forum 2008 - Programové vybavení OKsmart
SmartCard Forum 2008 - Programové vybavení OKsmartSmartCard Forum 2008 - Programové vybavení OKsmart
SmartCard Forum 2008 - Programové vybavení OKsmart
 

Plus de Adam Hořčica

Projekty z rychlíku (Silicon Hill, HRuSHka 2014)
Projekty z rychlíku (Silicon Hill, HRuSHka 2014)Projekty z rychlíku (Silicon Hill, HRuSHka 2014)
Projekty z rychlíku (Silicon Hill, HRuSHka 2014)Adam Hořčica
 
Strahov podle Jiry (Silicon Hill, HRuSHka 2015)
Strahov podle Jiry (Silicon Hill, HRuSHka 2015)Strahov podle Jiry (Silicon Hill, HRuSHka 2015)
Strahov podle Jiry (Silicon Hill, HRuSHka 2015)Adam Hořčica
 
MacGyver - akce prvák 2010
MacGyver - akce prvák 2010MacGyver - akce prvák 2010
MacGyver - akce prvák 2010Adam Hořčica
 

Plus de Adam Hořčica (6)

Projekty z rychlíku (Silicon Hill, HRuSHka 2014)
Projekty z rychlíku (Silicon Hill, HRuSHka 2014)Projekty z rychlíku (Silicon Hill, HRuSHka 2014)
Projekty z rychlíku (Silicon Hill, HRuSHka 2014)
 
Strahov podle Jiry (Silicon Hill, HRuSHka 2015)
Strahov podle Jiry (Silicon Hill, HRuSHka 2015)Strahov podle Jiry (Silicon Hill, HRuSHka 2015)
Strahov podle Jiry (Silicon Hill, HRuSHka 2015)
 
Bluetooth Robot Car
Bluetooth Robot CarBluetooth Robot Car
Bluetooth Robot Car
 
Čtečky SH
Čtečky SHČtečky SH
Čtečky SH
 
Arduino Workshop
Arduino WorkshopArduino Workshop
Arduino Workshop
 
MacGyver - akce prvák 2010
MacGyver - akce prvák 2010MacGyver - akce prvák 2010
MacGyver - akce prvák 2010
 

Mikro­kontrolér s Wi-Fi za $3! nejen pro IOT

  • 1. ESP8266Wi-Fi modul za $3 SUT, 28. 4. 2015 Adam Hořčica, Vojtěch Suk
  • 3. Kdo jsme… Adam ‒ Bastlíř ‒ Programátor ‒ Správce projektu MacGyver Vojta ‒ Hračička ‒ Správce projektu MacGyver
  • 4.
  • 5. … a co vám přinášíme • MQTT – Protože bez IoT by to dnes nebylo cool & in – Co to je, jak to funguje a jak to použít – Demo • ESP8266 – HW – Specifikace, zajímavosti, zapojení – Demo (ošmatej si sám) • ESP8266 – The easy way – AT, Lua, uPy, Arduino, … – Demo • ESP8266 – Pro opravdové muže vývojáře – SDK – MQTT klient demo
  • 7. MQTT • Pub-Sub • Broker x Client – Publikace zprávy s předmětem (topic) – Odebírání všech zpráv s daným předmětem – Obsah zprávy je TXT • Malé datové nároky • Postavené nad TCP/IP
  • 9. Předmět (topic) • Publikace /hierarchická/struktura/xyz/123 • Odebírání – Přesný předmět: /hierarchická/struktura/xyz – Wildchar: /hierarchická/+/+/xyz /hierarchická/struktura/# /+/struktura/#
  • 11. Quality of Service • Co se stane se zprávou v případě poruchy: QoS ⓿ … nemusí být doručena vůbec QoS ❶ … může být doručena vícekrát QoS ❷ … bude doručena právě jednou
  • 12. Retain • Příznak trvalé zprávy • Broker si ji zapamatuje • První co dostanu po sub • Je možné smazat zasláním null zprávy
  • 13. „Poslední vůle“ (will) • Co se stane, když mě někdo zabije odpojí • Zpráva, kterou broker zašle při nečekaném odpojení klienta • will-topic • will-payload • will-qos • will-retain
  • 14. Mosquitto • Broker (mosquitto) • C++, multiplatformní • Klient: – mosquitto_pub – mosquitto_sub • http://mosquitto.org • Demo: iot.eclipse.org:1883
  • 15. Node Red • Grafický jazyk + runtime • Tok zpráv od vstupu do výstupu – API, HW, online service • Implementace v node.js • http://nodered.org/ • https://learn.adafruit.com/raspberry-pi-hosting-node-red/what-is-node-red
  • 16. Demo • http://iot.siliconhill.cz • Mosquitto konzolový klient • MQTT Spy • MQTT Hive web client • NodeRed • Like-o-meter
  • 18. ESP8266 • WiFi SoC • 32 bit RISC CPU • GPIO, I2C, ADC, SPI, PWM, UART, RTC, JTAG
  • 19. ESP8266 • Vyrábí Espressif Systems • Postaveno na xTensa od Tensilica • Moduly od od různých výrobců
  • 20. ESP8266 • Vyžaduje 3,3 V napájení • GPIO jsou 5 V tolerantní • Při příjmu odběr 60-62 mA • Při vysílání až 215 mA
  • 21. CPU • 80 MHz • 96 kB data RAM • 64 kB instuction ROM (bootloader od výrobce) • 64 kB instruction RAM (cache pro SPI flash) • 4 sleep módy
  • 22. CPU • Boot módy • Na daných pinech nutný PullUp MTDO GPIO0 GPIO2 Mode Description L L H UART Download code from UART L H H Flash Boot from SPI Flash H x x SDIO Boot from SD-card
  • 23. WiFi • Podpora 802.11b/g/n (2.4 GHz) • WPA/WPA2 (pouze PSK) • Až 20 dBm (při 802.11b, jinak 16 dBm) • Antena diversity
  • 24. Periferie • Až 16 GPIO pinů • 10 bitový ADC • SPI (použitá pro externí FLASH paměť) • UART • RTC • SDIO 2.0
  • 25. Dostupný HW • eBay, Alibaba,… • Liší se jen počtem GPIO a anténou
  • 26. Dostupný HW • U většiny modulů je potřeba další PCB • Nebo použít ESP-12 development board
  • 27. Vlastní HW • Stačí jen několik málo součástek • QFN32 pouzdro • Impedanční přizpůsobení
  • 29. Zapojení • Pro boot do aplikace – MDTO -> Log0, GPIO0 -> Log1, GPIO2 -> Log1 – CH_PD na Log1 • Pro bootloader – MDTO -> Log0, GPIO0 -> Log0, GPIO2 -> Log1 – CH_PD na Log1
  • 32. Jak s modulem komunikovat • Sériová linka – Bootloader má 76923 Bd – Aplikace typicky 9600 nebo 115200 Bd • Ale co dál… – AT – Terminál (Lua, uPy, Frankenstein) – Programování (Arduino, C SDK)
  • 33. AT příkazy • Je tam od výroby • Pokud máte svůj MCU < AT+CWMODE=1 -- Nastaví Clinet mode > OK < AT+CWLAP -- Seznam AP > +CWLAP:(0,"WiFi",-91,"ac:a3:1e:d1:c7:e0",1) < AT+CWJAP="WiFi","heslo" -- Připojit k AP > OK …
  • 34. Lua • FW s interpretrem vyššího jazyka • V současnosti nejpropracovanější • Dva projekty: – Čistý interpret https://github.com/nodemcu/nodemcu-firmware – Podpora cloudu http://nodelua.org/ • IDE ESPlorer http://esp8266.ru/esplorer/
  • 35. µPython • Silně ve vývoji! • Aktuálně v3.4.0 • Velký potenciál… https://github.com/micropython/micropython/tree/master/esp8266
  • 36. Frankenstein • FW pro „*nix guys“ • Klasický terminál (ala busybox, cisco, XPort) • Musí se kompilovat (make menuconfig && make) https://github.com/nekromant/esp8266-frankenstein
  • 37. Arduino IDE • Kdo by neznal Arduino • Port Arduino knihoven pod ESP8266 SDK • Včetně podpory z Arduino IDE http://www.arduinesp.com/
  • 39. ESP8266 SDK Pro opravdové muže vývojáře VOJTA
  • 40. ESP8266 SDK - součásti • Xtensa lx106 toolchain • ESP8266 IoT SDK • Open source componenty – lwIP – Contiki – axTLS – wpa_supplicant – net80211/ieee80211 https://github.com/pfalcon/esp-open-sdk
  • 41. Co nabízí • Vlákna • Časovače • Práci s WiFi • SPI read, write • TCP/UDP stack • JSON • GPIO, UART, PWM, I2C
  • 42. Sekce paměti • .text – Program v IRAM (max 32Kb) • .irom0.text – Program ve SPI FLASH (ICACHE) • .data – Data v DRAM (inicializované) • .bss – Data v DRAM (neinicializované) • .rodata – Read only Data v DRAM
  • 43. ESP8266 SDK - sestavení • Vyžaduje GNU/POSIX • Pro ubuntu je nutné instalovat: make unrar autoconf automake libtool gcc g++ gperf flex bison texinfo gawk ncurses-dev libexpat-dev python sed • Poté jen spustit kompilaci: make STANDALONE=y
  • 44. Vytvoření binárek • Program je potřeba rozdělit • .text zapisujeme na adresu 0x00000 • .irom0.text podle Linker scriptu (většinou 0x40000) • Můžeme použít nástroj esptool: ./esptool.py elf2image app.elf
  • 45. Upload firmware • Za pomoci UARTu • Nutný bootloader mód • Lze využít naříklad esptool ./esptool.py -p /dev/ttyS0 write_flash 0x00000 app-0x00000.bin 0x40000 app-0x40000.bin /esptool.py --port /dev/ttzS0 write_flash 0x00.. Connecting... Erasing flash... Writing at 0x00009400... (100 %) Erasing flash... Writing at 0x00070800... (100 %) Leaving...
  • 46. Příklady kódu • Hello world • Použití časovače • Použití vláken • GPIO • TCP server
  • 47. Ukázka kódu void ICACHE_FLASH_ATTR user_init() { uart_div_modify(0, UART_CLK_FREQ / 115200); os_printf("Hello worldrn"); }
  • 48. Časovač LOCAL volatile os_timer_t some_timer; LOCAL void ICACHE_FLASH_ATTR timerCallback(void *arg){ // periodicky spouštěný kód } LOCAL void ICACHE_FLASH_ATTR init(){ os_timer_disarm(&some_timer); os_timer_setfn(&some_timer, (os_timer_func_t *) timerCallback, NULL); os_timer_arm(&some_timer, 2500, 1); }
  • 49. Vlákna #define MQTT_TASK_PRIO 0 #define MQTT_TASK_QUEUE_SIZE 1 LOCAL os_event_t procTaskQueue[TASK_QUEUE_SIZE]; LOCAL void ICACHE_FLASH_ATTR ThreadTask(os_event_t *e){ os_delay_us(1000); // prostor pro váš kód system_os_post(MQTT_TASK_PRIO, 0, 0); } LOCAL void ICACHE_FLASH_ATTR user_init(){ system_os_task(ThreadTask, TASK_PRIO, procTaskQueue, TASK_QUEUE_SIZE); system_os_post(MQTT_TASK_PRIO, 0, 0); }
  • 50. GPIO LOCAL void ICACHE_FLASH_ATTR user_init(){ PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_GPIO2); // set mapping to GPIO2 GPIO_OUTPUT_SET(2, 1); // set GPIO2 to OUTPUT and Log1 os_delay_us(250000); GPIO_OUTPUT_SET(2, 0); // set GPIO2 to OUTPUT and Log0 os_delay_us(250000); GPIO_DIS_OUTPUT(2); // GPIO2 to INPUT PIN_PULLUP_EN(PERIPHS_IO_MUX_GPIO2_U); // enable Pullup on GPIO2 if(GPIO_INPUT_GET(2) == 1){ // is GPIO2 set? os_printf("uprn"); } }
  • 51. TCP server LOCAL void ICACHE_FLASH_ATTR webserver_listen(void *arg) { struct espconn *pesp_conn = arg; espconn_regist_recvcb(pesp_conn, webserver_recv); // callback to recv function espconn_regist_reconcb(pesp_conn, webserver_recon); // callback on reconnection start function espconn_regist_disconcb(pesp_conn, webserver_discon); // callback on disconnected function } LOCAL void ICACHE_FLASH_ATTR user_init(){ LOCAL struct espconn esp_conn; LOCAL esp_tcp esptcp; esp_conn.type = ESPCONN_TCP; esp_conn.state = ESPCONN_NONE; esp_conn.proto.tcp = &esptcp; esp_conn.proto.tcp->local_port = 80; espconn_regist_connectcb(&esp_conn, webserver_listen); //#define SERVER_SSL_ENABLE #ifdef SERVER_SSL_ENABLE espconn_secure_accept(&esp_conn); #else espconn_accept(&esp_conn); #endif }
  • 52. Demo • Ukázka SDK + MQTT klient
  • 53. > mosquitto_sub –t /questions Adam Hořčica (@horcicaa) Vojtěch Suk (@VojtechSuk) http://macgyver.siliconhill.cz/kontakt.html Vice na: http://macgyver.siliconhill.cz/wiki/projekty/esp8266