Uporaba razvojnega okolja Arduino za izdelavo merilnega vozlišča na modulu ESP8266

Similar documents
MODERIRANA RAZLIČICA

PROGRAMSKO OKOLJE ZA NAČRTOVANJE PROGRAMIRLJIVIH VEZIJ S POMOČJO RAZVOJNE ENOTE

RAK413 UART WiFi Module Datasheet V1.9

RAK411 SPI-WIFI Module

190V3.

226V3L.

Internet of Things. a practical component-oriented approach. What is IoT (wikipedia):

Tjaša Lemut Novak in Lea Sobočan

AIFA TECHNOLOGY CORP.

I, you, we, they + have + glagol v 3. obliki. He, she, it + has + glagol v 3. obliki

UNIVERZA V LJUBLJANI Fakulteta za elektrotehniko. Robert Urankar. Pametni rastlinjak DIPLOMSKO DELO VISOKOŠOLSKEGA STROKOVNEGA ŠTUDIJA

"MAKING THE INSTRUMENTS ZITHER " OF MODEL A PUD-BJ»FROM IDEA TO PRODUCT«

Analiza in primerjava storitvenih platform za internet stvari

RAZVOJ SISTEMA VSEBIN NA ZAHTEVO NA PLATFORMI XBMC

Alice EduPad for Tiva or MSP432 TI ARM Launchpad. User s Guide Version /23/2017

Alice EduPad Board. User s Guide Version /11/2017

Industrial Wi-Fi Access Point and Client - DM500

Work-in-Progress:Experience of Teaching Internet-of-Things Using TI ARM based Connected Launchpad

Prihodnost, načrtovanje in razvoj brezžičnih širokopasovnih omrežij

Distributed by Pycom Ltd. Copyright 2016 by Pycom Ltd. All rights reserved. No part of this document may be reproduced, distributed, or transmitted

POVZETEK 7 ABSTRACT 9 1. UVOD OPREDELITEV PODROČJA IN OPIS PROBLEMA NAMEN, CILJI IN HIPOTEZE NALOGE 11

RF4432 wireless transceiver module

LOGIČNI ANALIZATOR ZA VODILO CAN S SPLETNIM VMESNIKOM

Programirljiva logika

WF43 Datasheet. Amp ed RF Technology, Inc.

Lecture (04) Arduino Microcontroller Programming and interfacing. By: Dr. Ahmed ElShafee

Designing and Implementing an Affordable and Accessible Smart Home Based on Internet of Things

IOT BASED ENERGY METER RATING

Mestna občina Celje Komisija Mladi za Celje HIŠNA AVTOMATIKA RAZISKOVALNA NALOGA. AVTOR Jakob Jug. MENTOR: Gregor KRAMER, univ. dipl. ing.

INVENTEK SYSTEMS ISM4390-L57 Embedded Serial-to-Wi-Fi Module es-wifi Data Sheet

Getting Started with Launchpad and Grove Starter Kit. Franklin Cooper University Marketing Manager

Wireless Cloud Camera TV-IP751WC (v1.0r)

ETR mm. 31mm. 91mm. Wireless-N 3G Router & Client Bridge PRODUCT DESCRIPTION

The Haply Development Kit

Chunghwa Telecom Laboratories. CHT IoT Smart Platform and Ameba. Two-Way Communication Application. Case Instruction Document

The Serial Port is Dead! Long Live the Serial Port! USB Serial Port Breadboard Experiments with the FTDI FT232R

RF4432F27 wireless transceiver module

Tehnološki razvoj dostave televizijskih vsebin in vsebin na zahtevo končnemu uporabniku

RAK5270(1080P)Video Module

MBUS 10 RS232 TO MBUS LEVEL CONVERTER

ASKEY b/g n WLAN adaptor WLU6113-D69 OPERATION MANUAL

Five-Input Universal Switcher with Wireless Presentation Link

IoT Based Controlling and Monitoring of Smart City

Be a part of the circuit. Brick'R'knowledge. Set overview.

Načrtovanje vgrajenih sistemov na čipu Xilinx Zynq

Avtomatsko videotestiranje opremljenosti plošč tiskanega vezja

LED STATUS OPIS SYS NE GORI NAPRAVA NE DELUJE ALI PA NIMA NAPAJANJA UTRIPA PRAVILNO DELOVANJE WPS

PROBLEM LONDONSKEGA STOLPA

ET-REMOTE DISTANCE. Manual of ET-REMOTE DISTANCE

Tehnologija programirljivih vezij. Načrtovanje digitalnih el. sistemov. Programirljiva vezja (PLD) Programirljiva vezja (CPLD)

JTAGcable II In Circuit Emulator for Atmel AVR microcontrollers. User s Guide REV 1.0. Many ideas one solution

RAK566 HDMI-in Video Module

Psevdonaključni podatkovni izvor z bitno hitrostjo 10 Gbit/s in dolžino zaporedja

Instruction manual Universal Fieldbus-Gateway UNIGATE IC - RS

WLn-LINK-OEM HARDWARE MANUAL

digitalno televizijo s»časovnimi TV funkcijami«- povsod po Sloveniji

Arduino LED Matrix Control. Controlling lots of LEDs

196V4L.

Dynamic Animation Cube Group 1 Joseph Clark Michael Alberts Isaiah Walker Arnold Li

WizFi250 Datasheet. Introduction. Features. WizFi250 Datasheet v English. Datasheet History

DX-10 tm Digital Interface User s Guide

Single cable multiswich programmer PC102W

Usermanual. P2K-HL3E1 1080p HDMI Extender over IP P2K-HL3E1-P 1080p HDMI Extender over IP with PoE P2K-HRSL3E1 / P2K-LHRS1E3

USER MANUAL Nokia 5110 LCD

Netzer AqBiSS Electric Encoders

Navodila za uporabo ComBox.L. Nizkoenergijski Logger visokega dometa

Cena v EUR Mesečna naročnina za paket Začetni paket* 16,00 EUR Osnovni paket* 18,00 EUR Razširjeni paket* 22,00 EUR Premium paket* 28,00 EUR

User Manual for ICP DAS WISE Monitoring IoT Kit -Microsoft Azure IoT Starter Kit-

Operation Guide Version 2.0, December 2016

Lab Task 3. Soldering the PCB

Operation Guide Version 1.0, December 2015

Configuration Vestas VMP3500

Register your product and get support at 65PUS PUS9809. Navodila

Measure the value of water flow using water flow sensor and DC water pump 12 V interfacing with Arduino uno

Osnovna pravila. Davanje i prihvatanje kritike. Sadržaj. Šta je to kritika?

B. The specified product shall be manufactured by a firm whose quality system is in compliance with the I.S./ISO 9001/EN 29001, QUALITY SYSTEM.

Embedded System Training Module ABLab Solutions

WF52 Datasheet. Amp ed RF Technology, Inc.

Kaj je v škatli. Leto modela. Velikost zaslona (palci, po diagonali) Velikost zaslona (centimetri, po diagonali)

LandRake HYC V 4006-MIMO Series 4GHz PTP / NATO Mobile Mesh Series

Internet of Things - IoT Training

Part 2 -- A digital thermometer or talk I2C to your atmel microcontroller

HEART ATTACK DETECTION BY HEARTBEAT SENSING USING INTERNET OF THINGS : IOT

Datasheet. 5 GHz airmax AC AP. Models: LAP-120, LAP-GPS. High-Performance Sector AP. Up To 450+ Mbps Real TCP/IP Throughput

DATA SHEET. 32 x 32 DVI / HDMI /SDI Matrix, OMM Contents. OMM-2500 (Ver. 1.0)

Altum Series DATASHEET

IRIG-B PTP Clock Converter Output Module Hardware Installation Manual

An Integrated EMG Data Acquisition System by Using Android app

Getting Started With the imx Developer s Kit

STA2051E VESPUCCI 32-BIT SINGLE CHIP BASEBAND CONTROLLER FOR GPS AND TELEMATIC APPLICATIONS 1 FEATURES. Figure 1. Packages

Datasheet IVU.box.touch

ART6212 Datasheet. Amp ed RF Technology, Inc.

Max. 4K Capabilities. Chroma Sampling 4:4:4. 4:2: bit³

Linux+Zephyr: IoT made easy

Color Programmable Control Board

Keysight Technologies U3801A/02A IoT Fundamentals Applied Courseware. Data Sheet

Raspberry Pi debugging with JTAG

236V4.

TV Character Generator

MODERIRANA RAZLIČICA

Transcription:

Univerza v Ljubljani Fakulteta za elektrotehniko Matej Selan Uporaba razvojnega okolja Arduino za izdelavo merilnega vozlišča na modulu ESP8266 Diplomsko delo Mentor: doc. dr. Marko Meža, univ. dipl. inž. el. Somentor: viš. pred. dr. Urban Burnik Ljubljana, 2016

II

ZAHVALA Iskreno se zahvaljujem mentorju, doc. dr. Marku Meži, univ. dipl. inž. el., za vso izkazano podporo in usmerjanje pri izdelavi diplomske naloge. Zahvaljujem se tudi somentorju, viš. pred. dr. Urbanu Burniku. Zahvaljujem se tudi družini za vso podporo in razumevanje. III

KAZALO ZAHVALA... III KAZALO SLIK... V KAZALO TABEL... VI SEZNAM UPORABLJENIH SIMBOLOV... VII POVZETEK... VIII ABSTRACT... IX 1 UVOD... 1 2 ANALIZA PODROČJA... 3 2.1 Obstoječe rešitve... 3 2.2 Konfiguracija modula v drugo omrežje... 5 3 UPORABLJENA OPREMA IN POSTOPKI POVEZAVE... 8 3.1 Mikroračunalnik... 8 3.2 Modul ESP8266... 9 3.3 Serijski vmesnik FTDI 232... 10 3.4 Senzor temperature in vlage modul DHT11... 11 3.5 Protokol TCP/IP... 12 3.6 Protokol I2C... 13 3.7 Povezava UART... 14 4 IZDELAVA NAMIZNE APLIKACIJE ZA BREZŽIČNO MERJENJE TEMPERATURE 15 4.1 Oprema in priklop... 16 4.2 Priprava modula za Arduino IDE posodobitev mikrokode modula (Firmware)... 20 4.3 Povezovanje z okoljem Arduino IDE... 23 4.4 Povezovanje modula ESP8266 z obstoječim omrežjem in prižiganje LED diode... 24 4.5 Brezžična vremenska postaja... 29 4.6 Prikaz izmerjenih podatkov... 32 4.7 Diskusija... 33 5 ZAKLJUČEK... 34 VIRI IN LITERATURA... 36 IV

KAZALO SLIK Slika 1: Shema naprav in povezav.... 2 Slika 2: Slika serijskega vmesnika v programu Arduino in izpis osnovnega ukaza AT.... 7 Slika 3: Modul ESP8266-01 [7]... 9 Slika 4: Serijski vmesnik FTDI 232 [3].... 10 Slika 5: Modul DHT11, senzor temperature in vlage.... 11 Slika 6: Diagram poteka meritve.... 15 Slika 7: Modul in njegovi pini [7]... 16 Slika 8: Nepraktičnost modula.... 17 Slika 9: Posamezna vezava pina.... 17 Slika 10: Možnost preklopa med 5 V in 3,3 V [33].... 18 Slika 11: Regulator napetosti.... 19 Slika 12: Vezava elementov.... 19 Slika 13: Vezava za posodobitev mikrokode [41].... 20 Slika 14: Zavihek Delovanje v programu ESPFlasher.... 21 Slika 15: Zavihek Konfiguracija v programu ESPFlasher.... 21 Slika 16: Zavihek Dodatno.... 21 Slika 17: Program za preverjanje ESPlorer in uspešno posodobljena koda [42].... 22 Slika 18: Nastavitve v Arduino IDE [5]... 23 Slika 19: Prikaz na serijskem vmesniku v programu Arduino IDE.... 28 Slika 20: Prikaz delovanja prižiganja in ugašanja LED diode.... 28 Slika 21: Diagram poteka meritev.... 29 Slika 22: Vezava senzorja DHT11 na modul ESP8266.... 30 Slika 23: Rezultat meritev, prikazan na pametnem telefonu.... 32 V

KAZALO TABEL Tabela 1: Najpogostejše izvedbe modulov in njihove lastnosti [26]... 4 Tabela 2: Najpogostejši ukazi AT in njihova funkcija [17].... 6 Tabela 3: Tabela pinov in njihovo delovanje.... 10 VI

SEZNAM UPORABLJENIH SIMBOLOV SIMBOL ANGLEŠKA RAZLAGA SLOVENSKI PREVOD SoC System on Chip sistem na čipu DIY Do It Yourself naredi sam IDE Integrated Development Enviroment integrirano razvojno okolje Wi-Fi brezžična tehnologija IoT Internet of Things internet stvari UART Universal Asynchronous asinhronska serijska komunikacija Receiver/Transmitter GPIO General Purpose Input/Output splošno namenski vhodno-izhodni priključek USB Universal Serial Bus univerzalno serijsko vodilo TCP/IP Transmission Control Protocol/Internet Protocol protokol za nadzor prenosa / internetni protokol ROM Read - Only Memory vrsta notranjega pomnilnika, iz katerega lahko med obratovanjem podatke beremo, ne moremo pa jih vanj zapisovati; so vanj zapisani pred obratovanjem EPROM Erasable Programmable Read - Only Memory zbrisljiv in programirljiv bralni pomnilnik je vrsta bralnega pomnilnika, ki omogoča večkratni zapis podatkov I2C Inter Integrated Circuit medsebojno integrirano vodilo MCU, qc, Microcontroller mikrokrmilnik uc, MCU CPU Central Processin Unit osrednja procesna enota JSON JavaScript Object Notation zapis predmetov JavaScript SSID Service Set Identifider ime omrežja AT AT Commands ukazi AT SDK Software Development Kit strojno razvojno okolje SPI Serial Peripheral Interface Bus standard za sinhronsko serijsko povezavo, deluje v dvosmernem načinu ISP Internet Service Provider ponudnik internetnih storitev VII

POVZETEK V diplomskem delu je predstavljena zasnova sistema za merjenje temperature in relativne vlage s pomočjo modula ESP8266 z brezžičnim spletnim dostopom do rezultatov meritev. Za merjenje temperature in vlažnosti skrbi digitalni merilni senzor DHT11, modul ESP8266 pa poleg osnovnih funkcij, potrebnih za prenos podatkov, zagotavlja tudi preprost strežnik za konfiguriranje. Sestavni deli naloge so analiza področja, modul ESP8266, serijski vmesnik FTDI, protokoli za povezovanje in ostala strojna oprema. Na koncu je predstavljena tudi izdelava namizne aplikacije s pomočjo razvojnega okolja Arduino. Ključne besede: ESP8266, Wi-Fi, DHT11, FTDI, Arduino IDE, IoT VIII

ABSTRACT In this thesis the concept of the system for measurement of temperature and humidity based on ESP8266 module is presented that provides wireless Web access to measurement results. A digital sensor DHT11 is used to measure temperature and humidity while the ESP8266 module provides, among the basic functions of wireless data access, also a simple configuration server. The thesis includes an analysis of the field, and describes the module ESP8266, the serial interface FTDI, the protocol for connection and other required hardware. At the end, the creation of the application using Arduino development environment is presented Key words: ESP8266, Wi-Fi, DHT11, FTDI, Arduino IDE, IoT IX

1 UVOD Živimo v času, ko nas sodobna tehnologija spremlja na vsakem koraku: v napravah za domačo rabo, na cesti med vožnjo z avtomobilom, v trgovini med nakupovanjem, na delovnem mestu, v industriji, v laboratorijih, med dopustom na morju, skratka vsepovsod. Vse to nam omogoča hiter razvoj računalniške tehnologije in spremljajoče programske opreme. V vseh teh tehnologijah najdemo procesorje, mikroprocesorje, mikrokrmilnike in porazdeljene procesorske sisteme, katerih hiter razvoj omogoča boljšo izvedbo prej neuporabnih algoritmov in s tem izboljšane funkcije. Mikrokrmilniki so tudi glavni elementi IoT, internet stvari, izraza, ki ga v zadnjem času velikokrat zasledimo [1]. Zajema omrežje elektronskih elementov in senzorjev ter njihovo povezljivost med seboj. Vsak posameznik namreč stremi k temu, da vse naredi čim ceneje oziroma sam. In prav tu je glavni poudarek na napravah DIY [2], med katere lahko prištejemo tudi modul ESP8266. Njegovi glavni prednosti sta cena, stane le okoli tri evre, in preprosto programiranje. Izraz DIY oziroma naredi sam lahko zajema zasnovo ideje, njeno uresničitev oziroma sestavljanje, upravljanje in nadzor naprave brez pomoči strokovnjakov ali usposobljenih delavcev. V drugem delu diplomske naloge sta predstavljeni konfiguracija modula in posodobitev mikrokode na modulu. Dodana so tudi posamezna razvojna orodja za posodobitev kode. V tretjem delu so predstavljeni vsi elementi, ki so bili uporabljeni pri sestavljanju namizne aplikacije za merjenje temperature. Predstavljeni so tudi protokoli za komunikacijo med modulom in senzorjem ter povezavo z brezžičnim omrežjem. V četrtem delu je predstavljeno sestavljanje namizne aplikacije za brezžično merjenje temperature v razvojnem okolju Arduino (slika 1). Predstavljena je tudi tovarniška posodobitev mikrokode. Slika 1 prikazuje primer uporabe modula ESP8266 v realnem okolju. Senzor temperature in vlage ter LED dioda sta priklopljena vsak na svoj modul ESP. Posamezni modul ESP se vključuje v lokalno brezžično omrežje, preko DHCP dobi naslov IP. Modul, na katerem je senzor vlage in temperature, je konfiguriran v načinu, da prejema podatke s senzorja in jih kot spletni strežnik/servis na vratih TCP 80 prikazuje v živo. Drugi modul je tudi konfiguriran v 1

načinu spletnega strežnika/servisa na vratih TCP 81, tu pa preko spletnega brskalnika vklapljamo ali izklapljamo LED diodo. Da se prikaže uporabnost globalno, je treba dostopnost do podatkov senzorjev in upravljanje LED diode omogočiti v Internetu in ne samo v lokalnem omrežju. To se izvede s pomočjo usmerjanja vrat TCP na brezžičnem usmerjevalniku. Pri ISP smo naročili statični naslov IP, na usmerjevalniku pa smo nastavili usmeritve vrat TCP, kot prikazuje slika. Na statični naslov IP smo usmerili zapis, da sedaj do senzorjev oziroma upravljanja LED diode lahko dostopamo kjer koli v internetu z vpisom imena in vrat TCP, v našem primeru je to vreme.vijolice.com. Možne so tudi druge rešitve, na primer več senzorjev/naprav, priključenih na isti modul ESP, in kompleksnejša konfiguracija spletnega strežnika. Slika 1: Shema naprav in povezav. 2

2 ANALIZA PODROČJA 2.1 Obstoječe rešitve Na področju integriranih modulov za brezžično tehnologijo imamo kar nekaj možnosti izbire, ki se razlikujejo po funkcionalnostih in predvsem ceni. V tabeli 1 [26] imamo prikazane najpogostejše izvedbe modulov. Kot je razvidno, so cenovno najugodnejši moduli ESP8266 različnih proizvajalcev, ki po funkcionalnosti ne zaostajajo dosti za konkurenco. Vsi moduli ponujajo standarde Wi-Fi 802.11 b/g, novejši ESP8266 pa še dodatno n, ki omogočajo teoretične prenosne hitrosti do 108Mbit/s. Seveda je več kot dovolj standard g, ki omogoča prenosne hitrosti do 54 Mbit/s. Prav tako vsi moduli omogočajo enkripcijo WPA2 PSK [27], ki je standard za varovanje brezžičnih omrežij. Moduli ESP se lahko uporabijo kot dostopna točka P2P Wi-Fi [28], enako tehnologijo uporabljajo tudi pametni mobilni telefoni z operacijskim sistemom Android. Vsi moduli v tabeli so lahko v načinu odjemalca ali strežnika, mi smo ga uporabili kot način strežnika. Če na kratko povzamemo, kot prikazuje tabela 1, je razmerje med ceno in dobljenimi funkcionalnostmi vsekakor na strani modulov ESP. Če pa imamo kakšno zahtevano funkcionalnost, ki ni v teh modulih, moramo najti druge, dražje rešitve. 3

WiFly Shield Wi-Fi Shield Huzzah CC3000 ESP-01 ESP-12 Huzzah ESP8266 Proizvajalec Sparkfun Arduino.cc Adafruit Espressif Espressif Adafruit čip/modul Wi-Fi RN-131C HDG204 CC3000 ESP8266 ESP8266 ESP8266 standardi Wi-Fi 802.11 b/g 802.11 b/g 802.11 b/g 802.11 b/g/n 802.11 b/g/n 802.11 b/g/n TCP in TCP in TCP in TCP in Paketi TCP in UDP UDP TCP in UDP UDP UDP UDP Način Klient & Klient & Klient & Klient & delovanja Strežnik Strežnik Klient & Strežnik Strežnik Strežnik Sočasni priklopi neznano 4 4 5 5 5 Način P2P, P2P, dostopne točke Da neznano ne Soft-AP Soft-AP Arduino Arduino Shield 66x53 Shield 26,22x40,45x2,95 21x11 24x16 25x38 Velikost mm 66x53 mm mm (zaznamek 1) mm mm mm Vmesnik SPI SPI SPI do vključno WPA2- PSK TTL serijski do vključno WPA2- PSK Enkripcija do vključno WPA2-PSK do vključno WPA2-PSK Tok v mirovanju 4 ua <10 ua < 10 ua 210 ma približno Oddajni tok (maksimalno) 210 ma 350 ma 215 ma 215 ma približno približno Prejemni tok 40 ma 60 ma 60 ma Tabela 1: Najpogostejše izvedbe modulov in njihove lastnosti [26]. TTL serijski do vključno WPA2- PSK Digitalni pini 10 0 0 2 9 9 Analogni pini 8 0 0 0 1 1 Ostali pini SPI 0 0 0 0 0 Programabilni mikrokontroler ne da ne da da da Dodatne funkcionalnosti Micro SD kartica 2 anteni Cena (ameriški dolar) $69.95 $84.95 $34.95 od $2.75 do $6.95 Klient & Strežnik P2P, Soft- AP TTL serijski do vključno WPA2- PSK Zaznamek 4 Zaznamek 4 Zaznamek 4 od $3.37 $6.95 $9.95 4

2.2 Konfiguracija modula v drugo omrežje Modul ESP8266 lahko konfiguriramo v omrežje oziroma zaženemo na več načinov. Problem nastane, ko modul, ki je že sprogramiran za neko omrežje, prenesemo v drugo brezžično omrežje in ga tam poskušamo zagnati. Po vsej verjetnosti ne bo deloval, saj imamo v programu nastavljeno ime prejšnjega brezžičnega omrežja in geslo. Verjetnost, da imata dva različna brezžična usmerjevalnika nastavljeno isto ime in geslo, je skoraj ničelna. Problem pri programiranih čipih je, da vnesemo točno določeno omrežje in geslo tako, da ga moramo ob postavitvi v drugo omrežje na novo programirati. Za modul ESP obstajata dva tipa mikrokode, to sta AT [30] in SDK [31]. Mikrokode AT so nabori ukazov AT, s katerimi se izvaja komunikacija neposredno s strojno opremo. Drugi tip mikrokode je razvojno okolje SDK, s pomočjo katerega napišemo želeni program. Obstaja množica verzij, ki jih dobimo na spletu [29], v katerih so navedene spremembe mikrokode glede na prejšnjo, starejšo verzijo. V novejših verzijah so dodane zmogljivejše funkcionalnosti, odpravljene so morebitne napake, pri razvojnih okoljih pa dodane nove verzije knjižnic. Eden od preprostejših načinov je, da se uporabi programsko okolje Arduino [5], kot smo storili tudi mi. Prednost tega načina je, da programsko okolje Arduino preveri morebitne sintaksne napake, še preden ga naložimo, pa tudi serijski vmesnik se nastavlja grafično po čarovniku. Drugače pa lahko uporabimo najpreprostejšo beležnico, na primer Notepad, in tam napišemo program za čip, ki ga nato prenesemo z najpreprostejšimi orodji, ki se uporabljajo za serijsko povezovanje. Tako je na primer v starejših Windowsovih operacijskih sistemih HyperTerminal, ali pa zelo priljubljeno orodje za konfiguracijo in upravljanje omrežne opreme Putty. Ko smo serijsko povezani na modul s programom, na primer Putty, lahko komuniciramo z njim oziroma mu dajemo navodila z ukazi AT. 5

Konfiguracija modula z ukazi AT S serijskega vmesnika se povežemo na modul in ga z ukazi AT neposredno upravljamo s programom za serijsko komunikacijo, ki ga nastavimo na hitrost 115.200 baudov. Najprej vnesemo ukaz AT+GMR, ki nam izpiše podatke o modulu, kot prikazuje slika 2. Kot je razvidno s slike, nam ukaz izpiše različico mikrokode AT in SDK, proizvajalca ter dan in uro izdelave modula. V tabeli 2 [17] so prikazani najpogostejši ukazi AT in njihova funkcija. Po posodobitvi mikrokode lahko kateri od ukazov AT ne delujejo več oziroma delujejo še novi, ki so se dodali z novejšo posodobitveno različico. UKAZ OPIS TIP AT+GMR podatki o osnovni modulu AT+RST ponovno osnovni zaženi modul AT+CWMODE način Wi-Fi Wi-Fi AT+CWJAP AT+CWLAP dodaj dostopno točko seznam Wi-Fi Wi-Fi dostopnih točk AT+CWQAP izklop Wi-Fi dostopne točke AT+CWSAP nastavitev Wi-Fi parametrov dostopne točke AT+ stanje TCP/IP CIPSTATUS povezave AT+ nastavitev TCP/IP CIPSTART povezave TCP ali UDP AT+CIPSEND AT+CIPCLOSE pošiljanje podatkov prekinitev TCP/IP TCP/IP povezave TCP ali UDP AT+CIFSR pridobitev TCP/IP naslova IP AT+CIPMUX nastavitev več TCP/IP povezav AT+ nastavi kot TCP/IP CIPSERVER strežnik +IPD prejeti podatki Tabela 2: Najpogostejši ukazi AT in njihova funkcija [17]. 6

Slika 2: Slika serijskega vmesnika v programu Arduino in izpis osnovnega ukaza AT. Orodja za razvoj programske kode Tako kot pri mikrokodah obstaja cela množica orodij za razvoj programske kode. Zaradi samostojnega razvoja posameznikov in skupin je nemogoče zajeti cel spekter ponujenih možnosti. Veliko razvojnih orodij je na voljo na spletu, na repozitorijih GIT [44], kjer lahko dobimo vse podrobne informacije glede modula in njegove posodobitve. Nekaj namenskih orodij za razvoj programske opreme je naštetih spodaj [45]: ESP8266 Arduino, ESP8266 NodeMCU Lua, Javascript for ESP8266, ESP8266 IoT. Razvojna okolja SDK: ESP Ellipse SDK, ESP8266 GCC SDK, ESP8266 Lubuntu SDK, ESP8266 Open SDK. 7

3 UPORABLJENA OPREMA IN POSTOPKI POVEZAVE 3.1 Mikroračunalnik Mikroračunalnik je računalnik, zgrajen na osnovi mikroprocesorja. Je zamenjava za nekoč diskretne tehniške sisteme in je prisoten skoraj povsod: na področju osebnih računalnikov, v avtomobilski industriji, v gospodinjstvu, na področju zabavne elektronike itd. Sestavljajo ga mikroprocesor, programski pomnilnik, podatkovni pomnilnik in periferni oziroma zunanji vmesniki [32]. Mikroprocesor, ki upravlja delovanje mikroračunalnika, je centralna procesna enota, izdelana v tehnologiji VSLI na enem ali na nekaj v celoto sestavljajočih polprevodniških čipih. Vsebuje krmilno enoto, enoto za obdelavo podatkov (ALU) ter notranjo shrambo zanje. Vsebuje tudi vmesnik za priključitev na okolico (sistemsko vodilo). Programski pomnilnik je pomnilnik, iz katerega mikroprocesor bere ukaze, jih interpretira in jih nato izvaja. Podatkovni pomnilnik je pomnilnik, v katerem so shranjeni podatki, ki jih procesor uporablja za obdelavo. Periferni vmesniki so vmesniki, s katerimi mikroračunalnik vzpostavlja povezavo z okolico. Prednost mikroračunalniških sistemov pred diskretnimi je v tem, da so mikroračunalniški sistemi sestavljeni iz manj komponent, razvoj je preprostejši in hitrejši, pri razvoju je manjša možnost napak, testira se jih lažje in so cenejši. Zaradi univerzalnosti so hitreje prilagodljivi spremembam. Zaradi manj elementov so preprostejši za vzdrževanje, tako da lahko isto elektroniko uporablja več različnih naprav. Mikrokrmilnik je računalnik, ki ima vse komponente mikroračunalnika vgrajene v isti čip. Je sistem na enem integriranem vezju, ki ima poleg procesorja vgrajene enote za interakcijo z okolico. To so vhodno-izhodne enote, pretvorniki A/D in D/A, komunikacijske linije itd. 8

3.2 Modul ESP8266 Wi-Fi modul ESP8266 (slika 3) je samostojni sistem na čipu (SoC) [43], ki ima vključen protokolni sklad TCP/IP in s tem sposobnost pošiljanja podatkov po brezžični internetni povezavi po protokolu TCP/IP [22]. Modul lahko deluje kot samostojna aplikacija, lahko pa zagotavlja brezžično povezavo drugemu aplikacijskemu procesorju. Modul je izdelalo kitajsko podjetje Espressif Systems, masovna prodaja pa se je začela ob koncu leta 2013. Vse bolj je priljubljen zaradi svojih zmožnosti in predvsem nizke cene, saj stane le okrog tri evre [7]. Lastnosti modula so: integriran protokolni sklad TCP/IP, komunikacija po protokolu I2C, 32-bitni procesor, 80 Mhz, 64 kb ukaznega spomina, 96 kb podatkovnega spomina, IEEE 802.11 b/g/n Wi-Fi (WEP, WPA WPA2), komunikacija UART, priklop samo na napetost 3,3 V, 2 večnamenska priključka GPIO. Slika 3: Modul ESP8266-01 [7]. 9

Vcc GND Tx CH_PD GPIO 0 GPIO 2 Rx RST napajanje, 3,3 V ozemljitev oddajnik zagon delovanja nalaganje kode priklop senzorja sprejemnik ponovni zagon Tabela 3: Tabela pinov in njihovo delovanje. 3.3 Serijski vmesnik FTDI 232 Vmesnik FTDI (Future Technology Devices International) (slika 4) omogoča serijsko povezavo med računalnikom in modulom ESP8266 ter s tem tudi njegovo programiranje [33]. Napaja se s povezavo z računalnikom, izhodno napetost pa lahko preklapljamo med dvema vrednostma. To je med 5 V in 3,3 V. V našem primeru smo uporabili 3,3 V. Za komunikacijo in programiranje uporablja le linije Tx (oddajnik), Rx (sprejemnik) in GND (ozemljitev). Za pravilno delovanje smo morali namestiti prave gonilnike, ki jih najdemo na spletu. Slika 4: Serijski vmesnik FTDI 232 [3]. 10

3.4 Senzor temperature in vlage modul DHT11 Modul DHT11 (slika 5) je osnovni, nizkocenovni senzor temperature in vlage. Za merjenje uporablja kapacitivni senzor vlažnosti in element NTC (termistor), pri katerem se s spreminjanjem temperature spreminja upor, rezultate pa pošilja na podatkovni pin senzorja [34]. Senzor je preprost za uporabo, vendar je pri branju podatkov potrebna dobra časovna uskladitev, saj se podatki pošiljajo samo po eni podatkovni liniji. Senzor vsebuje meritev vlažnosti, ki temelji na kapacitivnosti, in merilno komponento temperature NTC, vse skupaj pa je povezano na zmogljiv mikrokrmilnik. Senzor ob nizki ceni, stane približno evro, ponuja dokaj dobro kakovostno meritev. Enojna podatkovna linija omogoča preprosto priključitev v sistem, senzor pa je zaradi svoje velikosti, saj je majhen in priročen, primeren za različne namene. Lastnosti: relativna vlaga: 20 90 % RH, natančnost: 5 % RH, temperatura: 0 50 C, natančnost: 2 C, hitrost meritev: sekundni interval. Slika 5: Modul DHT11, senzor temperature in vlage. 11

3.5 Protokol TCP/IP Protokol TCP/IP je standardiziran protokolni sklad, ki skrbi za komunikacijo med napravami v omrežju Internet. Uporablja se tudi za komunikacijo naprav v domačem zasebnem omrežju, ki ni povezano v omrežje Internet. Sestavljata ga dva sloja oziroma kombinacija internetnega protokola (IP Internet Protocol) in protokola nadzora nad prenosom (TCP Transmission Control Protocol). TCP imenujemo višji sloj, IP pa nižji sloj [22]. Protokol TCP zagotavlja, da se informacije med prenosom preko spleta ne izgubijo ter da se podatki na poti po medmrežju ne spremenijo ali po naključju ali namenoma. Ob morebitnem neuspelem pošiljanjem podatkov, torej da podatki niso prispeli na cilj, poskrbi za njihovo vnovično pošiljanje, da jih naslovnik prejme v celoti in pravilno. Na začetku prenosa poskrbi, da se podatki združijo v pakete, če pa so podatki oziroma paketi preveliki, jih razbije na več manjših delov. Te manjše dele na cilju ponovno sestavi v pravilni vrstni red. Poleg tega pa kljub milijonom hkratnih pogovorov med računalniki omogoča nemoteno delovanje dodatnih komunikacij. Protokol IP določa način pretoka podatkov preko strojne opreme in obliko informacij na poti med računalniki. IP zagotavlja načine prepoznavanja vsakega računalnika v Internetu, saj pozna naslov IP pošiljatelja in prejemnika. Vse to z namenom, da lahko uporabniki ugotovijo, od kod je informacija prišla oziroma kam gre. Hitrost prenosa podatkov se meri v megabitih na sekundo (Mb/s) in je odvisna predvsem od števila izgubljenih paketov, saj se mora vsak tak paket poslati znova. Paketi se lahko na poti izgubijo zaradi počasnih usmerjevalnikov, napake na strojni opremi ali slabega signala brezžične povezave [38]. 12

3.6 Protokol I2C Protokol I2C (Inter-Integrated Circuit) je komunikacijski protokol, ki se najpogosteje uporablja za način komunikacije med integriranimi vezji znotraj zahtevnih elektronskih naprav [35]. Za komunikacijo med vezji uporablja dve liniji, se pravi samo dve podatkovni žici: serijska linija za podatke (SDA Serial Data), ki služi za prenos podatkov in ukazov, serijska linija za uro (SCL Serial Clock) je taktni signal, ki sinhronizira prenos in določa hitrost komunikacije. Vsako vezje, ki je spojeno na vodilo, vsebuje naslov in lahko deluje kot sprejemnik ali kot oddajnik. Komunikacije med vezji upravlja nadzorna enota, ki jo imenujemo gospodar (MASTER). Nadzorna enota je največkrat mikrokontroler, ki generira takt podrejeni enoti, ki jo imenujemo suženj (SLAVE), in ji pošilja različne ukaze in podatke. Podrejena enota lahko prav tako pošilja podatke nadzorni enoti, vendar samo, ko gospodar to zahteva. Komunikacija poteka s hitrostjo prenosa podatkov 100 kbit/s v standardnem načinu ali 400 kbit/s v hitrem načinu. Vsi prenosi se začnejo s START in končajo s STOP, oboje pa upravlja gospodar. Podatki se vedno prenašajo v 8-bitnih (bajtnih) enotah. Prvih sedem bitov sestavlja naslov naprave, s katero želimo komunicirati, osmi bit pa določa, ali želimo v napravo pisati ali z njo brati. Sprejemnik ob negativnih prehodih SCL sprejme bit za bitom. Po vsakem osmem poslanem bitu sledi deveti, ki je SCL takt oziroma potrditveni bit, s katerim sprejemna stran potrdi sprejem sporočila. To stori tako, da serijsko linijo za prenos podatkov potegne na logično 0 in jo s tem sprosti. Pošiljatelj podatkov mora postaviti naslednji bit na podatkovno linijo za toliko časa, kolikor je SCL v stanju 0, in čaka, da se sprosti, da lahko pošlje naslednji podatek. Če sprejemnik SDA ne postavi na 0, to pomeni, da podatka ni sprejel in je treba prenos ponoviti tako, da gospodar generira STOP ali ponovljeni START [36]. 13

3.7 Povezava UART UART (Universal Asynchronous Receiver/Transmitter) je način serijskega prenosa podatkov z dogovorjeno hitrostjo in v dogovorjeni obliki. Gre za komunikacijo med dvema različnima napravama z različnima funkcijama. Komunikacija poteka po dveh linijah, in sicer: RXD sprejemnik in TXD oddajnik. Pri povezavi UART gre za pošiljanje zlogov informacij kot samostojnih bitov od prve naprave k drugi, ki sprejete bite ponovno sestavi v zloge. Zato so signali na transportni poti, ki jih pripravijo namenska integrirana vezja, lahko poljubne oblike (RS232, RS485, RS422, RS423) [37]. Prenos podatkov poteka asinhronsko, se pravi, da napravi nista v stalni sinhronizaciji z urnim signalom, zato se tudi ne uporablja linije za uro. V sinhronizaciji sta samo takrat, ko namerava pošiljatelj poslati informacijo prejemniku. Informacija se začne z začetnim bitom, ki pove prejemniku, da se morata njuna urna signala sinhronizirati. Ko prejemnik prejme končni bit, se prenos konča. Pošiljatelj in prejemnik morata imeti podatke o hitrosti prenosa podatkov, ki jo merimo v baudih (Bd). Standardne vrednosti prenosa podatkov so 4800, 9600, 19200, 38400, 57600, 115200. Napravi povežemo tako, da signal RXD ene naprave povežemo na signal TXD druge naprave in obratno. 14

4 IZDELAVA NAMIZNE APLIKACIJE ZA BREZŽIČNO MERJENJE TEMPERATURE V tem poglavju je predstavljena izdelava namizne aplikacije za brezžično merjenje temperature in vlage. Na začetku sta predstavljena oprema in postopek priklopa, v nadaljevanju pa priprava modula za Arduino IDE. V tem delu je predstavljena posodobitev mikrokode modula. Po posodobitvi mikrokode je modul pripravljen za povezavo z brezžičnim omrežjem. Na začetku ga povežemo v omrežje in za preprost preizkus delovanja uporabimo aplikacijo prižiganja in ugašanja LED diode. Sledi povezava s senzorjem temperature in vlage ter prikaz izmerjenih rezultatov na osebnem računalniku ali pametnem telefonu. Senzor preko enojnega vodila povežemo na modul, ki prebrane podatke preko usmerjevalnika pošilja v brezžično omrežje, kjer podatke preberemo. Podatke lahko prebiramo samo v lokalnem omrežju. Za prebiranje podatkov globalno je bilo treba pri ponudniku internetnih storitev naročiti statični naslov IP. Nanj smo usmerili naš zapis DNS, preko katerega lahko dostopamo do naših meritev kjer koli v Internetu. Postopek je prikazan na sliki 6. Slika 6: Diagram poteka meritve. 15

4.1 Oprema in priklop V praktičnem delu diplomske naloge bomo predstavili izdelavo poceni aplikacije za brezžično merjenje temperature. Na začetku je treba izbrati zahtevam primeren modul ESP8266. Obstaja veliko različnih modulov ESP8266, od najbolj preprostih do tistih, ki ponujajo več vhodov in izhodov (GPIO). Prvi modul, ki se je pojavil na tržišču konec leta 2013, je bil modul ESP8266-01 (slika 7) Slika 7: Modul in njegovi pini [7]. Ta modul je zagotovo najbolj popularen, saj je bil prvi na voljo, je zelo majhen in stane le okoli dva do tri evre. Je pa res, da tudi ostali niso dražji za več kot evro. Njegova 16

pomanjkljivost je, da ima samo dva splošnonamenska pina (GPIO) in je zelo nepraktičen za priklop na preizkuševalno ploščico (breadboard). Glej sliko 8. Slika 8: Nepraktičnost modula. Problem rešimo z izdelavo adapterja ali pa še bolj preprosto s priklopom vsakega posameznega pina na preizkuševalno ploščico, kot smo to storili mi. Glej sliko 9. Slika 9: Posamezna vezava pina. Nesmiselna bi bila misel, da modul samo priklopimo na ustrezno napetost, priklopimo vse komponente, ga zaženemo in nam bo dal želene rezultate meritev. Najprej ga je treba ustrezno sprogramirati. Za programiranje bi lahko uporabili razvojno ploščo Arduino. Modul ESP8266 pa ponuja možnost programiranja popolnoma samostojno, se pravi brez uporabe razvojne plošče. Poleg cene je to tista lastnost, zaradi katere je tako popularen in zanimiv. Za povezavo z računalnikom bomo uporabili vmesnik USB FTDI 232. Seveda mora biti vmesnik 17

kompatibilen z našim modulom. Najpomembnejše je, da mora imeti možnost priklopa na napetost 3,3 V, saj v nasprotnem primeru lahko modul uničimo. Naš FTDI ima to možnost, sicer bi morali za napajanje uporabiti kakšno drugo možnost. Možnost izbiranja napetosti je prikazana na sliki 10. Slika 10: Možnost preklopa med 5 V in 3,3 V [33]. Poleg napetosti na vmesniku moramo zagotoviti tudi samostojen vir napetosti za delovanje modula, saj napetost iz vmesnika preprosto ne bo dovolj. Namreč, pri povezovanju na brezžično dostopno točko modulu sunkovito naraste poraba. Za to smo za zagotavljanje neodvisnega vira napajanja uporabili regulator napetosti, kompatibilen s preizkuševalno ploščico. Glej sliko 11. 18

Slika 11: Regulator napetosti. Vhodno napetost, ki jo zahteva, to je 7 V 12 V, smo zagotovili s primernim napajanjem, to je z napajanjem iz omrežja (230 V), preko pretvornika napetosti, ki nam napetost nastavi na zahtevano. Možnost izbiranja napetosti na regulatorju (slika 10) smo nastavili na 3,3 V. Slika 12 prikazuje vezavo elementov in vseh posameznih pinov. Splošnonamenska pina 0 in 2 sta povezana na ozemljitev, vendar nikoli istočasno. GPIO 0 se uporablja pri preverjanju in nalaganju kode, GPIO 2 pa pri komunikaciji in pošiljanju podatkov. Vezava elementov je prikazana na sliki 12: Slika 12: Vezava elementov. 19

4.2 Priprava modula za Arduino IDE posodobitev mikrokode modula (Firmware) Mikrokoda je najosnovnejši program, ki je naložen na najnižjem programskem nivoju večine elektronskih naprav; predvsem v napravah, pri katerih ne spreminjamo strojne opreme. To je najosnovnejši program, ki na eni strani komunicira s strojno opremo, na drugi pa z uporabniško aplikacijo. Mikrokoda se praviloma nahaja v spominu, ki se ob izklopu naprave ohranja (ROM [23], EPROM [24]). Posodobitev se izvaja z namenom, da napravi dodamo funkcionalnosti, prepišemo napake v mikrokodi oziroma odstranimo pomanjkljivosti programa. Občasno tudi uporabniški programi zaradi novih funkcionalnosti zahtevajo posodobitev mikrokode. Najbolj poznano nam je posodabljanje ROM BIOS pri osebnih računalnikih. Pri posodabljanju obvezno potrebujemo pravo različico popravljene mikrokode in program, s katerim jo naložimo na strojno opremo. Če ne izberemo prave glede na tip strojne opreme, lahko dokončno uničimo napravo brez možnosti povrnitve v prejšnje stanje. Pri posodobitvi modula ESP8266-01 vezje priključimo v vezavo, kot nam prikazuje slika 13. Napravo priključimo s serijskim vmesnikom, potrebujemo pa tudi enega od številnih nalagalnih programov. Jaz sem se odločil za ESP8266Flasher, ki ga naložimo s spleta [39]. Slika 13: Vezava za posodobitev mikrokode [41]. V prvem zavihku, Delovanje, program zazna, na katerih serijskih vratih se nahaja naš modul. Slika 14 prikazuje že uspešno posodobljeno kodo. Zlasti pazljivi pa moramo biti, da so serijska vrata, ki jih je nastavil program, res prava, saj ob napačno nastavljenih vratih ne bomo dobili želenih rezultatov. 20

Slika 14: Zavihek Delovanje v programu ESPFlasher. V drugem zavihku (slika 15) izberemo binarni paket, ki vključuje posodobitev za točno določen tip strojne opreme. Ta paket smo prenesli s spleta [40]. Slika 15: Zavihek Konfiguracija v programu ESPFlasher. V zavihku Dodatno nam prikaže privzete nastavitve baudrate, velikost flash spomina, hitrost flash spomina, način SPI, ki jih lahko po potrebi tudi spremenimo. Možnosti so prikazane na sliki 16. Slika 16: Zavihek Dodatno. 21

Zadnja sta še zavihek, ki nam razkrije avtorja, ki je spisal program za posodabljanje mikrokode, in zavihek, v katerem so zapisani potek nalaganja in morebitne napake pri nalaganju. Na koncu smo za preverjanje pravilno naložene verzije mikrokode uporabili program ESPlorer (slika 17), ki smo ga prav tako prenesli s spleta [42]. Po zagonu programa se lepo vidi uspešno naložena mikrokoda, ki je identična posodobitvenemu paketu iz zavihka Konfiguracija v programu ESPFlasher (slika 15). Slika 17: Program za preverjanje ESPlorer in uspešno posodobljena koda [42]. 22

4.3 Povezovanje z okoljem Arduino IDE Po sestavi komponent se bomo lotili še programske opreme. Kot je bilo omenjeno, modul ESP8266-01 ponuja možnost programiranja in povezave v omrežje brez uporabe programske plošče, ampak samo s programskim razvojnim okoljem. Za programiranje bomo uporabili integrirano razvojno okolje Arduino IDE [5]. Namestimo ga z uradne strani proizvajalca in nastavimo svoje nastavitve. Sami smo si izbrali verzijo 1.6.5. Nastavitve so prikazane na sliki 18. Najpomembnejše nastavitve so vrata (port), v našem primeru COM5, in hitrost nalaganja serijskega vmesnika, ki je v našem primeru 115200 baudov. Za ciklično izvajanje programa moramo definirati dve funkciji, in sicer setup() in loop(). Prva nam služi kot začetna inicializacija nastavitev, kot so uporabniško ime, ime usmerjevalnika, druga pa se izvaja neprestano, dokler modul ne izgubi napajanja ali pa ga na novo ne sprogramiramo. Slika 18: Nastavitve v Arduino IDE [5]. 23

4.4 Povezovanje modula ESP8266 z obstoječim omrežjem in prižiganje LED diode Za povezovanje modula bomo uporabili kodo, ki jo bomo najprej preverili in nato preko programskega okolja Arduino namestili na modul. S tem bomo tudi preverili pravilno delovanje programskega okolja Arduino in naših nastavitev. Želimo povezati naš modul v obstoječe brezžično omrežje in izpisati naslov IP našega modula ESP8266. Sledi prižiganje in ugašanje LED diode preko spletnega brskalnika ali pametnega telefona. Nalaganje poteka preko splošnonamenskega pina 0 (GPIO 0), GPIO 2 je namenjen povezavi z LED diodo, kasneje bomo nanj priklopili senzor temperature in vlage. Po vezavi modula z LED diodo sledi preverjanje in nalaganje kode. Za nalaganje kode uporabimo GPIO 0, medtem ko je GPIO 2 takrat izklopljen. Po uspešnem preverjanju in nalaganju kode ugotovimo naslov IP modula (slika 19). Nato izklopimo napajanje modula, izklopimo GPIO 0 ter priklopimo GPIO 2 na anodo LED diode preko upora 330 omov, da ne pride do okvare diode. Katodo LED diode priklopimo na ozemljitev (slika 19). Primer v kodi in njena razlaga: // dodajanje knjižnice #include <ESP8266WiFi.h> // parametri WiFi const char* ssid = "*******"; // ime omrežja const char* password = "**********"; // geslo routerja // vzpostavitev povezave s strežnikom na vratih 81 WiFiServer server(81); // določitevpina 2 int output_pin = 2; void setup() { // začetek Arduinove setup() zanke // odpre vrata in nastavi hitrost na 115200 Serial.begin(115200); 24

delay(10); // počakaj 1 ms // pripravi GPIO 2 pinmode(output_pin, OUTPUT); // nastavi pin 2 kot izhod digitalwrite(output_pin, 0); // ugasni diodo // poveži z omrežjem Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status()!= WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); // zagon serverja server.begin(); Serial.println("Server started"); } // izpiši naslov IP Serial.println(WiFi.localIP()); void loop() { // začetek Arduinove loop() zanke // preveri povezavo z modulom WiFiClient client = server.available(); if (!client) { 25

return; } // počakaj na podatke Serial.println("new client"); while(!client.available()){ delay(1); } // preberi zahtevo String req = client.readstringuntil('\r'); Serial.println(req); client.flush(); // preveri zahtevo if (req.indexof("/on")!= -1){ digitalwrite(output_pin, 1); } else if (req.indexof("/off")!= -1) { digitalwrite(output_pin, 0); } client.flush(); // izpis na brskalniku String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n";// koda se doda vsem spodnjim vrsticam, pomeni pa odgovor strežnika, če je zahteva request v redu; 1.1 označuje verzijo, 200 pa je statusna kodahttp s += "<head>"; // klasična postavka html, dodamo naslov v html head // metapodatki so podatki v jeziku html, ki jih brskalnik ne prikaže, ko obiščemo določeno spletno stran, ampak so v ozadju kot nekakšne nastavitve s += "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">"; // v spletnih straneh lahko poleg klasičnega jezika html uporabimo tudi skripte; ta ukaz nas usmeri, kliče na skripto, ki se nahaja na določenem spletnem naslovu; js = skripta JavaScript, napisana v programskem jeziku javascript 26

s += "<script src=\"https://code.jquery.com/jquery-2.1.3.min.js\"></script>"; // link rel pomeni, da uporabi oblikovne (grafične) pripomočke z določene spletne strani; jih nima pri sebi, temveč pokaže na določeno stran s += "<link rel=\"stylesheet\" href=\"https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css\">"; // v programskem jeziku html se vse stvari zaključijo z»/«in ime ukaza oziroma področja; v našem primeru se»zapre«glava s += "</head>"; // container nima nobenega prav določenega pomena, je izbrana beseda za določeno oblikovanje css s += "<div class=\"container\">"; // h1 je headline 1, kot je v Wordu Naslov 1 s += "<h1>stikalo</h1>"; // oblikovno nova vrstica s += "<div class=\"row\">"; // gumb in kaj se zgodi, če kliknemo nanj s += "<div class=\"col-md-2\"><input class=\"btn btn-block btn-lg btn-primary\" type=\"button\" value=\"on\" onclick=\"on()\"></div>"; s += "<div class=\"col-md-2\"><input class=\"btn btn-block btn-lg btn-danger\" type=\"button\" value=\"off\" onclick=\"off()\"></div>"; // tu se določeno področje zapre zaradi»/«s += "</div></div>"; s += "<script>function on() {$.get(\"/on\");}</script>"; // to je funkcija, ki se kliče, če pritisnemo na ukaz ON, 3 vrstice višje, tam je z imenom uporabljena, tu pa deklarira, kaj naredi; v tem primeru vklopi. s += "<script>function off() {$.get(\"/off\");}</script>"; // pošlji odgovor client.print(s); delay(1); Serial.println("Client disconnected") 27

Slika 19: Prikaz na serijskem vmesniku v programu Arduino IDE. Po uspešno preverjeni in naloženi kodi se nam na serijskem vmesniku prikažejo podatki, ki jih lahko razberemo s slike 19. Modul se je uspešno povezal v brezžično omrežje in izpiše se nam njegov IP naslov. V spletni brskalnik vtipkamo naslov IP modula in prikaže se nam možnost prižiganja in ugašanja LED diode (slika 20). Slika 20: Prikaz delovanja prižiganja in ugašanja LED diode. 28

4.5 Brezžična vremenska postaja Za postavitev brezžične vremenske postaje bomo poleg modula in ostalih gradnikov potrebovali tudi senzor temperature in vlage. Ker je cilj projekta cenena rešitev, bomo za merjenje temperature in vlage uporabili preprost in zelo poceni senzor DHT11, ki je podrobneje opisan v poglavju o uporabljeni strojni opremi. Senzor bomo priklopili na modul, ga povezali z omrežjem in rezultate prebirali na spletni strani ali pametnem telefonu. Diagram poteka je prikazan na sliki 21. Slika 21: Diagram poteka meritev. Diagram poteka na sliki 21 prikazuje izvedbo in potek meritve. Senzor temperature in vlage priklopimo preko enojnega vodila na modul ESP8266-01. V programsko razvojno orodje Arduino vnesemo kodo, jo preverimo in naložimo na modul. Modul bere podatke o temperaturi in vlagi in jih pošilja na spletno mesto, kjer jih lahko preberemo. Podatki se ne shranjujejo nikamor, saj so namenjeni samo trenutnemu odčitavanju. 29

Slika 22: Vezava senzorja DHT11 na modul ESP8266. Senzor priklopimo na preizkuševalno ploščo s pomočjo treh pinov (slika 22). Levi pin priključimo na ozemljitev, desni pin na napajanje, ki naj bo med 3,3 V in 5 V, srednji pin pa je namenjen komunikaciji z modulom oziroma pošiljanju podatkov in je v našem primeru priključen na GPIO 2 na modulu ESP8266-01 (slika 22). Senzor je priklopljen na modul direktno preko enojnega vodila brez vmesnika. V programsko kodo bomo dodali knjižnico DHT, ki je potrebna za delovanje senzorja, saj omogoča izpis temperature in vlage. Definirali bomo tudi, s katerega pina naj se berejo podatki, senzor za meritev temperature in ukaz za prikaz rezultatov. 30

Primer v kodi: // dodajanje knjižnice #include "DHT.h" // določitev pina #define DHTPIN 2 // definiranje senzorja #define DHTTYPE DHT11 // povezava senzorja DHT dht(dhtpin, DHTTYPE, 15);...... // branje vlage float h = dht.readhumidity(); // branje temperature float t = dht.readtemperature(); // preberi zahtevo String req = client.readstringuntil('\r'); Serial.println(req); client.flush(); 31

Ko priklopimo vse elemente in v modul preko Arduina zapišemo in zaženemo kodo, se nam preko spletne strani ali pametnega telefona prikaže želen rezultat, to sta izmerjena temperatura in vlaga. Slika 23 prikazuje vezavo in rezultat meritev na pametnem telefonu. Slika 23: Rezultat meritev, prikazan na pametnem telefonu. 4.6 Prikaz izmerjenih podatkov Obstaja veliko možnosti shranjevanja prikaza izmerjenih podatkov in njihovih obdelav. Odločili smo se za direkten prikaz na spletni strani ali preko pametnega telefona. Podatkov ne bomo shranjevali ali obdelovali. Ostali postopki so opisani v zadnjem poglavju. Direkten prikaz s senzorja Ta način je najpreprostejši, saj se podatki nikjer ne shranjujejo. Na modulu za brezžično povezavo z omrežjem konfiguriramo spletni strežnik z vsemi oblikovnimi in interaktivnimi funkcijami. Ta primer sem uporabil tudi sam. S preprostimi ukazi HTML CSS ustvarimo prijetno na pogled spletno stran, s katero na primer ugašamo in prižigamo LED diodo, ali preverimo trenutno temperaturo ali vlažnost prostora, v katerem se nahaja senzor. Spletna stran na modulu za povezavo je prilagojena tudi za prikaz ali uporabo na pametnih mobilnih napravah. 32

4.7 Diskusija Modul ESP8266 uspešno bere podatke s senzorja temperature in vlage ter jih pošilja na splet. Spletna stran tudi uspešno prikazuje izmerjene podatke, prav tako deluje tudi prikaz preko pametnega telefona. To je bil tudi namen diplomske naloge. Prvi problem se je pojavil pri povezovanju modula v brezžično omrežje. Ob napajanju z baterijami ali z dvema 2AA ali 3AAA je bilo treba zagotoviti napetost, ki ni smela nihati. Namreč pri povezovanju in pošiljanju podatkov v brezžično omrežje modulu sunkovito naraste poraba in se nam preprosto izklopi oziroma sesuje. To smo rešili z uporabo kondenzatorjev. Če je modul priključen preko napetostnega pretvornika v napetostno omrežje, uporaba kondenzatorjev ni potrebna. Drugi problem se je pojavil pri nalaganju kode preko razvojnega okolja Arduino. Držati se je bilo treba točno določenih procesov. Tu mislim predvsem na to, da ko preverjamo in nalagamo kodo, moramo imeti priključen samo pin GPIO 0. Ko pa vključimo serijski vmesnik, izključimo pin GPIO 0 in priključimo pin GPIO 2. Seveda moramo vse priklapljati ob ugasnjenem modulu. Problem je bil tudi pri povezavi s serijskim vmesnikom FTDI. Navodila so sicer bila, naj priključimo vmesnik URx in modul UTx ter obratno, vendar v nekaterih primerih povezava ni delovala oziroma se modul ni povezal v omrežje. Problem smo rešili tako, da smo povezali vse obratno, kot je bilo, in povezava je delovala. 33

5 ZAKLJUČEK V diplomskem delu smo predstavili sestavo namizne aplikacije IoT, ki s pomočjo modula ESP8266-01 bere podatke s senzorja temperature in vlage ter jih pošilja na splet. Predstavljena je vsa strojna oprema, ki je bila uporabljena pri sestavi aplikacije. Predstavljeno je tudi razvojno okolje, v katerem modul sprogramiramo ter mu naložimo kodo za zajem potrebnih podatkov. Aplikacija je zasnovana v DIY, se pravi naredi sam in čim bolj poceni. In prav modul ESP8266-01 zagotovo spada med te elemente. S prebiranjem diplomskega dela lahko ugotovimo, da postaja IoT tehnologija prihodnosti, saj nam ponuja neskončno možnosti za razvoj in programiranje, in to za zmerno ceno. Diplomsko delo je zasnovano kot navodilo za uporabnika, ki se prvič srečuje s tem načinom brezžične komunikacije. Veliko znanja sem pridobil s področja mikrokontrolerjev in njihovega načina komuniciranja z ostalimi napravami. Delo z modulom in njegovimi aplikacijami seveda še ni končano. Zaradi cene in preproste uporabe ter programiranja dopušča veliko možnosti odkrivanja novih funkcionalnosti. Na začetku seveda posodobitev mikrokode. Za posodobitev obstaja množica programov za nadgradnjo. Velika prednost, lahko pa tudi slabost je ta, da za posodobitve mikrokode modula ne obstajajo točno določeni predpisi, zato lahko vsak posameznik ali skupina razvije svoj program za posodabljanje mikrokode, prav tako tudi svoje popravke mikrokode. Odvisno od namena pa je, ali se to izkaže za prednost ali slabost. Naslednja točka prihodnjega dela je tudi prikaz izmerjenih podatkov. Mi smo prikazali najpreprostejšo, obstajajo pa seveda še druge. Dve izmed njih sta shranjevanje podatkov v oblak in lokalna baza podatkov. Za shranjevanje podatkov v oblak lahko zakupimo oblačni prostor pri multinacionalkah, kot je Google. Ta nam že ponuja vrsto API-jev, ki so neke vrsta dodatna funkcionalnost programov. Ti nam omogočajo poljubno prikazovanje in integracijo z ostalimi programskimi rešitvami. Podatke nalagamo v oblak. Kasneje jih lahko obdelujemo, pregledujemo in seveda prikazujemo. To je tudi največja prednost, ker lahko na primer za celo leto nazaj izračunamo povprečno, minimalno in maksimalno temperaturo ali vlago. Prednost je tudi ta, da nam ni treba v domačem okolju postavljati bazne in strežniške infrastrukture. Seveda pa imamo za določeno plačilo, kar je tudi pomanjkljivost tega načina shranjevanja in obdelave podatkov, 34

vse shranjeno v oblaku. Predvsem pa nam ni treba skrbeti za varnost naših izmerjenih podatkov. Podobno kot v rešitvi v oblaku tudi pri uporabi lokalne baze podatkov shranjujemo podatke s senzorjev v bazo in jih pozneje obdelujemo in prikazujemo. Slabost ali včasih tudi prednost, odvisno od občutljivosti in količine zajetih podatkov, je ta, da imamo podatke shranjene v svojem omrežju. Seveda za zanesljivost potrebujemo precejšnjo strežniško in omrežno opremo, redundančno konfiguracijo in vzdrževanje podatkovne baze ter tudi spletno ali drugačno aplikacijo za prikaz. 35

VIRI IN LITERATURA [1] Wikipedia. Internet of Things. Dostopno na: https://en.wikipedia.org/wiki/internet_of_things, 10. 3. 2016. [2] Wikipedia, Do it Yourself. Dostopno na: https://en.wikipedia.org/wiki/do_it_yourself, 10. 3. 2016. [3] Mybotic, USB to UART converter. Dostopno na: http://www.mybotic.com.my/products/usb-to-uart-converter/856, 15. 3. 2016. [4] Aaron Ardiri, Is it possible to secure micro controllers used within IoT? Dostopno na: https://evothings.com/is-it-possible-to-secure-micro-controllers-used-within-iot/, 15. 3. 2016. [5] Uradna stran Arduino, Arduino Software. Dostopno na: https://www.arduino.cc/en/guide/environment, 10. 3. 2016. [6] Brian W. Evans, Arduino Programming Notebook. Dostopno na: http://playground.arduino.cc/uploads/main/arduino_notebook_v1-1.pdf, 11. 3. 2016. [7] Alan G. Smith, Introduction to Arduino. Dotopno na: http://www.princeton.edu/~ffab/media downloads_files/introarduinobook.pdf, 12. 3. 2016. [8] SparkFun Electronics, WiFi module ESP8266. Dostopno na: https://www.sparkfun.com/products/13678, 5. 3. 2016. [9] Neznan avtor, Arduino IDE. Dostopno na: https://github.com/esp8266/arduino, 8. 3. 2016. [10] Future Technology Devices International, Drivers. Dostopno na: http://www.ftdichip.com/, 1. 4. 2016. [11] Ray Burnette, ESP8266-01 using Arduino IDE. Dostopno na: https://www.hackster.io/rayburne/esp8266-01-using-arduino-ide-67a124, 1. 4. 2016. [12] Olimex, Kaj je Arduino? Dostopno na: https://www.olimex.com/products/duino/opensource-hardware, 1. 4. 2016. [13] Neznan avtor, HTTP. Dostopno na: https://www.w3.org/protocols/rfc2616/rfc2616- sec10.html, 2. 4. 2016. [14] Neznan avtor, HTML Head. Dostopno na: https://www.w3schools.com/html/html_head.asp, 2. 4. 2016. [15] Sheo Narayan, What is jquery and How to Start using jquery? Dostopno na: https://www.codeproject.com/articles/157446/what-is-jquery-and-how-to-start-usingjquery, 2. 4. 2016. 36

[16] Ray Burnette, First Impression on the ESP8266 Serial-to-WiFi Module. Dostopno na: http://rayshobby.net/first-impression-on-the-esp8266-serial-to-wifi-module/, 10. 4. 2016. [17] Neznan avtor, AT Commands. Dostopno na: https://nurdspace.nl/esp8266#at_commands, 10. 4. 2016. [18] Charles R. Hampton, Update the Firmware in Your ESP8266 Wi-Fi Module. Dostopno na: http://www.allaboutcircuits.com/projects/update-the-firmware-in-your-esp8266-wifi-module/, 12. 4. 2016. [19] Claudiu Matei, ESP8266 with AT Commands Connect from PC with PuTTY. Dostopno na: http://flower-platform.com/2015/12/16/esp8266-with-at-commandsconnect-from-pc-with-putty/, 12. 4. 2016. [20] Cristian, ESP8266 with AT Commands Flashing/Updating the Firmware. Dostopno na: http://www.flower-platform.com/2015/12/16/esp8266-with-at-commandsflashingupdating-the-firmware-step-by-step/#hardware-used, 12. 4. 2016. [21] Andrew Cross, AT Commands. Dostopno na: http://www.agcross.com/2015/09/theesp8266-wifi-chip-part-2-connecting-to-a-network/, 14. 4. 2016. [22] Wikipedia, TCP/IP protokol. Dostopno na: http://wiki.fmf.unilj.si/wiki/%c5%a0tevilka_ip, 20. 4. 2016. [23] Wikipedia, Bralni pomnilnik. Dostopno na: https://sl.wikipedia.org/wiki/bralni_pomnilnik, 20. 4. 2016. [24] Wikipedia, Električno zbrisljiv in programirljiv bralni pomnilnik. Dostopno na: https://sl.wikipedia.org/wiki/eeprom, 20. 4. 2016. [25] Terrye, Getting Started with ESP8266. Dostopno na: http://www.esp8266.com/wiki/doku.php?id=getting-started-with-the-esp8266, 21. 4. 2016. [26] Neznan avtor, Comparing IoT Wi-Fi Modules. Dostopno na: http://43oh.com/2015/06/comparing-iot-wi-fi-modules-esp8266-vs-cc3000-vs-rn131-vshdg204/, 21. 4. 2016. [27] Vangi Beal, WPA2-PSK. Dostopno na: http://www.webopedia.com/term/w/wpa2_psk.html, 21. 5. 2016. [28] Neznan avtor, Wi-Fi Peer-to-Peer. Dostopno na: https://developer.android.com/guide/topics/connectivity/wifip2p.html, 21. 5. 2016. [29] Neznan avtor, Espressif AT,SDK. Dostopno na: http://bbs.espressif.com/viewforum.php?f=46, 21. 5. 2016. [30] Wikipedia, AT commands. Dostopno na: https://en.wikipedia.org/wiki/motorola_phone_at_commands, 21. 5. 2016. 37

[31] Wikipedia, Software Development Kit. Dostopno na: https://en.wikipedia.org/wiki/software_development_kit, 21. 5. 2016. [32] Marko Munih, Mikrokrmilnik. Dostopno na: http://cpe-212-85-163-11.cable.telemach.net/electro/school/mmunih-mikrokrmilnik.pdf, 20. 3. 2016. [33] FTDI, FTDI Chip. Dostopno na: http://www.ftdichip.com/products/ics/ft232r.htm, 15. 3. 2016. [34] Neznan avtor, DHT11 Humidity & Temperature Sensor. Dostopno na: http://www.micropik.com/pdf/dht11.pdf, 15. 3. 2016. [35] Wikipedia, I2C protocol. Dostopno na: https://en.wikipedia.org/wiki/i%c2%b2c, 20. 4. 2016. [36] Neznan avtor, Osnove I2C protokola. Dostopno na: http://studentski.net/gradivo/ulj_fri_ri1_ars_sno_osnove_i2c_protokola_01?r=1, 21. 4. 2016. [37] Wikipedia, Universal asynchronous receiver/transmitter. Dostopno na: https://en.wikipedia.org/wiki/universal_asynchronous_receiver/transmitter, 15.4.2016. [38] Wikipedia, TCP/IP protokol. Dostopno na: http://wiki.fmf.unilj.si/wiki/%c5%a0tevilka_ip, 17. 4. 2016. [39] Neznan avtor, ESPFlasher. Dostopno na: https://github.com/nodemcu/nodemcuflasher/tree/master/win64/release, 22. 5. 2016. [40] J. Mattsson, Firmware documentation. Dostopno na: https://github.com/nodemcu/nodemcu-firmware/releases, 16. 4. 2016. [41] Neznan avtor, ESP8266 firmware update. Dostopno na: http://iotplayground.com/blog/2-uncategorised/35-esp8266-firmware-update, 22. 5. 2016. [42] Neznan avtor, ESPlorer. Dostopno na: http://esp8266.ru/esplorer/, 22. 5. 2016. [43] Wikipedia, System on a chip. Dostopno na: https://en.wikipedia.org/wiki/system_on_a_chip, 20. 3. 2016. [44] Neznan avtor, ESP8266_RTOS_SDK. Dostopno na: https://github.com/espressif/esp8266_rtos_sdk, 23. 5. 2016. [45] Neznan avtor, ESP8266 Firmware and SDK. Dostopno na: http://www.electrodragon.com/w/category:esp8266_firmware_and_sdk, 23. 5. 2016. 38