Vegyes témakörök. 10. Robotvezérlés WiFi kapcsolaton keresztül. Hobbielektronika csoport 2018/ Debreceni Megtestesülés Plébánia

Hasonló dokumentumok
Vegyes témakörök. 11. Robotvezérlés WiFi kapcsolaton keresztül 2. rész. Hobbielektronika csoport 2018/2019. Debreceni Megtestesülés Plébánia

Hálózati architektúrák és Protokollok GI Kocsis Gergely

Hálózati architektúrák és Protokollok GI Kocsis Gergely

Rétegezett architektúra HTTP. A hálózatfejlesztés motorját a hálózati alkalmazások képezik. TCP/IP protokoll készlet

Hálózati architektúrák és Protokollok GI Kocsis Gergely

Számítógépes Hálózatok GY 8.hét

Hálózati architektúrák laborgyakorlat

Hálózati architektúrák laborgyakorlat

Hálózati architektúrák és Protokollok MI 7,8. Kocsis Gergely

Számítógépes Hálózatok GY 3-4.hét

Hálózatkezelés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Hálózatkezelés / 20

1. Gyakorlat: Telepítés: Windows Server 2008 R2 Enterprise, Core, Windows 7

URL-LEL ADOTT OBJEKTUM LETÖLTÉSE (1) URL-LEL ADOTT OBJEKTUM LETÖLTÉSE

Számítógép hálózatok

HTML és CSS. Horváth Árpád május 6. Óbudai Egyetem Alba Regia M szaki Kar (AMK) Székesfehérvár

Számítógépes Hálózatok. 4. gyakorlat

20. Tétel 1.0 Internet felépítése, OSI modell, TCP/IP modell szintjenek bemutatása, protokollok Pozsonyi ; Szemenyei

Számítógépes hálózatok I.

Számítógépes Hálózatok. 3. gyakorlat

A 35/2016. (VIII. 31.) NFM rendelet szakmai és vizsgakövetelménye alapján.

Hálózati architektúrák és Protokollok PTI - 7. Kocsis Gergely

Számítógépes Hálózatok. 5. gyakorlat

Gyors telepítési kézikönyv

Hálózatos adatbázis-kapcsolódási problémák és azok javítása

WLAN router telepítési segédlete

Az internet ökoszisztémája és evolúciója. Gyakorlat 1

Számítógépes Hálózatok GY 3.hét

WLAN router telepítési segédlete

HTML sablon tervezése

Informatika 1 CSS. Kovács Kristóf, Pálovics Róbert, Wettl Ferenc november 4. Budapesti M szaki Egyetem

WLAN router telepítési segédlete

Algoritmus terv. 1. Algoritmus általános áttekintése. 2. Inputok és outputok definiálása. 3. Folyamatok meghatározása. 4. Programozási utasítások

Multimédia 2017/2018 II.

Gyors üzembe helyezési kézikönyv

3G185 router Li-ion akkumulátor Usb kábel Telepítési útmutató.

Ross-Tech HEX-NET. A VCDS Mobile működéséhez csak egy böngésző, és WiFi csatlakozás szükséges.

Számítógépes Hálózatok GY 4.hét

2014 UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

WLAN router telepítési segédlete

Kommunikáció Androidon Mobilinternet Wifi

Számítógépes Hálózatok. 3. gyakorlat

1. Ismerkedés a Hyper-V-vel, virtuális gépek telepítése és konfigurálása

Alkalmazás rétegbeli protokollok:

A Wireshark program használata Capture Analyze Capture Analyze Capture Options Interface

Netis vezeték nélküli, N típusú, router

Hálózati architektúrák és Protokollok GI - 9. Kocsis Gergely

Hálózati architektúrák és Protokollok GI - 8. Kocsis Gergely

Gyors üzembe helyezési kézikönyv

Alapfogalmak, WWW, HTTP

TP-LINK Router Wireless M7350

Bevezető. Servlet alapgondolatok

Informatika 1. Informatika el adás. Kovács Kristóf, Pálovics Róbert. Budapesti M szaki Egyetem november 13.

fájl-szerver (file server) Az a számítógép a hálózatban, amelyen a távoli felhasználók (kliensek) adatállományait tárolják.

Számítógépes Hálózatok GY 6.hét

Ja J v a a v a há h l á óz ó a z t a i al a ka k l a maz ma á z s á o s k o Socket, URL

Fábián Zoltán Hálózatok elmélet

Tűzfalak működése és összehasonlításuk

Dr. Varga Imre Debreceni Egyetem, Informatikai Kar. Socket-programozás. C nyelven, Linux alatt

Web-fejlesztés NGM_IN002_1

Modbus kommunikáció légkondícionálókhoz

OpenBSD hálózat és NAT64. Répás Sándor

applikációs protokollok

Számítógépes hálózatok

Memória játék. Felhasználói dokumentáció

Rohonczy János: World Wide Web - Világháló

KÉPZETT VILLANYSZERELŐ SZAKEMBER

Internet-hőmérő alapkészlet

Flash és PHP kommunikáció. Web Konferencia 2007 Ferencz Tamás Jasmin Media Group Kft

Az adott eszköz IP címét viszont az adott hálózat üzemeltetői határozzákmeg.

Dr. Varga Imre. Socket-programozás. C nyelven

Adatbázis-kezelés ODBC driverrel

JavaServer Pages (JSP) (folytatás)

SSL VPN KAPCSOLAT TELEPÍTÉSI ÚTMUTATÓ

ConnectAlarm alkalmazás Központ/modul programozási segédlet V1.0

Újrakonfigurálható eszközök

M2M Pro3 450MHz LTE Telepítési útmutató - kivonat

Tűzfal megoldások. ComNETWORX nap, I. 30. ComNETWORX Rt.

Számítógépes Hálózatok. 8. gyakorlat

Az internet ökoszisztémája és evolúciója. Gyakorlat 4

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

Számítógép labor V. Egyszer Web szerver. Dokumentáció. Készítette: Ács Gergely (K4C03M)

COMET webalkalmazás fejlesztés. Tóth Ádám Jasmin Media Group

Tájékoztató. Használható segédeszköz: -

15. Tétel. Extran et olyan biztonsá gos, privát, intranet hálózat amely internet protokol lok segítség ével teszi lehetővé a

Gyors Telepítési Útmutató N típusú, Vezeték Nélküli, ADSL2+ Modem DL-4305, DL-4305D

Tili-Toli játék. Felhasználói dokumentáció

Adatátviteli rendszerek Mobil IP. Dr. habil Wührl Tibor Óbudai Egyetem, KVK Híradástechnika Intézet

Forgalmi grafikák és statisztika MRTG-vel

A webhelyhez kötődő szoftverek architektúrája

Beállítások 1. Töltse be a Planet_NET.pkt állományt a szimulációs programba! A teszthálózat már tartalmazza a vállalat

9. Gyakorlat: Network Load Balancing (NLB)

Elektronikus levelek. Az informatikai biztonság alapjai II.

Kommunikációs rendszerek programozása. Switch-ek

Lokális hálózatok. A lokális hálózat felépítése. Logikai felépítés

Üzenet küldése Programs (Bal soft key) Inbox New MMS Menu Insert Picture Text Audio A szerkesztés után:

Netis Vezetékes ADSL2+, N Modem Router Gyors Telepítési Útmutató

Jelen leírás csak a DSC NEO központok és 3G2080 kommunikátor beállításait tartalmazza a ConnectAlarm mobilalkalmazáshoz.

Az internet ökoszisztémája és evolúciója. Gyakorlat 1

Adabáziselérés ODBC-n keresztül utasításokkal C#-ban

Netis vezeték nélküli, N típusú Router Gyors Telepítési Útmutató

Átírás:

Vegyes témakörök 10. Robotvezérlés WiFi kapcsolaton keresztül Hobbielektronika csoport 2018/2019 1 Debreceni Megtestesülés Plébánia

Hálózati kommunikáció socketek használatával A socket (csatlakozó) a számítógépes hálózaton két folyamat közötti kétirányú kommunikáció végpontja A kommunikáció kliens szerver viszonylatban történik: A szerver létrehoz egy socket-et (amelyhez egy vagy több kliens csatlakozhat) és kapcsolódásra vár Ha egy kliens csatlakozik egy szerver egy socket-jéhez, akkor létrejön a kapcsolat és megkezdődhet a kommunikáció Az általunk használt IPv4 socket-ek egy 32 bites IP címből és egy port számmal címezhetők (AF_INET címformátum) Az általunk használt IPv4 socket-ek TCP (SOCK_STREAM) vagy UDP (SOCK_DGRAM) típusú üzenetcsomagokat továbbíthatnak Hobbielektronika csoport 2018/2019 2 Debreceni Megtestesülés Plébánia

Milyen protokollt használjunk? A SOCK_STREAM socketek a TCP (Transmission Control Protocol) szintű adatforgalmat végzik. A TCP biztosítja, hogy az adatok sorrendtartón és hibamentesen érkezzenek meg. Az átvitti adatok értelmezése az alkalmazási szinten további protokoll használatát igényelheti (pl. HTTP, FTP, SMTP, NFS, Telnet stb.) Adatbeágyazódás: az átvitti adathoz minden réteg hozzáteszi, vagy lehámozza a maga fejlécét vagy keretét. Például HTML alkalmazási, TCP szállítási, IP hálózati, Ethernet/WiFi adatkapcsolati réteg Mi most a HTTP protokoll megvalósításával fogunk foglalkozni ETHERNET/WiFi IP TCP HTTP ADAT Hobbielektronika csoport 2018/2019 3 Debreceni Megtestesülés Plébánia

HTTP protokoll leegyszerűsítve A kliens egy GET paranccsal lekér egy oldalt (pl. GET / HTTP/1.1), illetve további információt is küldhet, a kérelmet üres sor zárja le A szerver egy HTTP fejlécet küld, melyet egy üres sor zár, majd elküldi a kért információt (a kért HTML oldal kódját) GET / HTTP/1.1 Host: 192.168.4.1 Connection: keep-alive Cache-Control: max-age=0 User-Agent: Mozilla/5.0 (Linux; Android 4.4.4; HM 1S) Accept: text/html Accept-Encoding: gzip, deflate Accept-Language: hu,en GET /?led=on HTTP/1.1... HTTP/1.1 200 OK Content-Type: text/html Connection: close <!DOCTYPE html> <html> <head> <title>az oldal címe</title> <!-- további fejléc-információk--> </head> <body> <p>első bekezdés</p> <p>második bekezdés</p> </body> </html> Hobbielektronika csoport 2018/2019 4 Debreceni Megtestesülés Plébánia

webserver_simple.py A legegyszerűbb webszerver a micropython mintapéldákból való, de több helyen megváltoztattiuk! import network import usocket as socket ap = network.wlan(network.ap_if) # Access point mód konfigurálása ap.active(true) ap.config(essid="esp-ap") # Alapértelmezett jelszó: micropython CONTENT = b"""\ HTTP/1.0 200 OK Hello #%d from MicroPython! """ # TCP socket konfigurálása és engedélyezése a HTTP portra s = socket.socket(socket.af_inet, socket.sock_stream) s.bind(('', 80)) s.listen(5) # HTTP port # várakozási sor hossza print("listening, connect your browser to http://<this_host>:80/") Folytatás a következő oldalon! Hobbielektronika csoport 2018/2019 5 Debreceni Megtestesülés Plébánia

counter = 0 while True: res = s.accept() client_sock = res[0] client_addr = res[1] Kliensként egy böngészővel csatlakoztunk Probléma: a számláló kettiesével lépked webserver_simple.py print("client Address: ",client_addr) req = client_sock.recv(4096) print("request:") print(req) client_sock.send(content % counter) client_sock.close() counter += 1 Hobbielektronika csoport 2018/2019 6 Debreceni Megtestesülés Plébánia

webserver_simple.py kimenete Mindig két GET parancs érkezik, ezért dupláz a számláló! Listening, connect your browser to http://<this_host>:80/ Client Address: ('192.168.4.2', 50038) Request: b'get / HTTP/1.1\r\nHost: 192.168.4.1\r\nConnection: keep-alive\r\ncache-control: max-age=0\r\nsave-data: on\r\nupgrade-insecure-requests: 1\r\nUser-Agent: Mozilla/ 5.0 (Linux; Android 4.4.4; HM 1S) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Mobile Safari/537.36\r\nDNT: 1\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/ *;q=0.8\r\naccept-encoding: gzip, deflate\r\naccept-language: hu-hu,hu;q=0.9,en- US;q=0.8,en;q=0.7\r\n\r\n' 44 Client Address: ('192.168.4.2', 50039) Request: b'get /favicon.ico HTTP/1.1\r\nHost: 192.168.4.1\r\nConnection: keep-alive\r\ npragma: no-cache\r\ncache-control: no-cache\r\ndnt: 1\r\nSave-Data: on\r\nuser- Agent: Mozilla/5.0 (Linux; Android 4.4.4; HM 1S) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Mobile Safari/537.36\r\nAccept: image/webp,image/apng,image/*,*/*;q=0.8\r\nreferer: http://192.168.4.1/\r\naccept- Encoding: gzip, deflate\r\naccept-language: hu-hu,hu;q=0.9,en-us;q=0.8,en;q=0.7\r\ n\r\n' 44 Mielőtt a hiba kijavításához fognánk, nézzünk meg egy alkalmazást! Hobbielektronika csoport 2018/2019 7 Debreceni Megtestesülés Plébánia

led_switch.py A Random Nerd Tutorials mintapéldája egy webszerver alkalmazást mutat be a http_server_simplistic.py mintapélda átdolgozásával A program segítségével a NodeMCU kártya beépítetti LED-jét fogjuk kapcsolgatni (GPIO2 láb, alacsony szint esetén világít). Itti most csak az AP interfészt használjuk (IP = 192.168.4.1) import usocket as socket from machine import Pin import network ap = network.wlan(network.ap_if) ap.active(true) ap.config(essid="esp-ap") led = Pin(2, Pin.OUT) # socket library # We need a pin for the LED # network library # Access Point interface # Make it active # define new SSID # LED is at GPIO2 def web_page(): # combine text and data if led.value() == 1: gpio_state="off" else: gpio_state="on" html = """... blabla, lásd külön lapon!... return html Folytatás a következő oldalon! Hobbielektronika csoport 2018/2019 8 Debreceni Megtestesülés Plébánia

led_switch.py s = socket.socket(socket.af_inet,socket.sock_stream) # s is a TCP socket s.bind(('', 80)) # accept connection at port 80 s.listen(5) # max. length of waiting que while True: conn, addr = s.accept() # wait for a client, return a stream print('got a connection from %s' % str(addr)) request = conn.recv(4096) # read incoming request request = str(request) # convert it to string print('content = %s' % request) led_on = request.find('/?led=on') # look for ON command led_off = request.find('/?led=off') # look for OFF command if led_on == 6: # switch ON LED if needed print('led ON'); led.value(0) if led_off == 6: # switch OFF LED if needed print('led OFF'); led.value(1) response = web_page() # get actualized HTML content conn.send('http/1.1 200 OK\n') # send HTTP header first conn.send('content-type: text/html\n') conn.send('connection: close\n\n') conn.sendall(response) # send HTML data conn.close() # close connection Folytatás a következő oldalon! Hobbielektronika csoport 2018/2019 9 Debreceni Megtestesülés Plébánia

led_switch.py A programmal egy web böngészőn keresztül kommunikálhatunk A HTML kód kibontva az alábbi listában olvasható A gombokra való kattintás után a GET parancs?led=on vagy?led=off paraméterrel egészül ki, ez teszi lehetővé a vezérlést """<html> <head><title>esp Web Server</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="icon" href="data:,"> <style> html {font-family: Helvetica; display:inline-block; margin: 0px auto; text-align: center;} h1 {color: #0F3376; padding: 2vh;}p{font-size: 1.5rem;}.button{display: inline-block; background-color: #e7bd3b; border: none; border-radius: 4px; color: white; padding: 16px 40px; text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}.button2{background-color: #4286f4;} </style> </head> <body> <h1>esp Web Server</h1> <p>gpio state: <strong>""" + gpio_state + """</strong></p> <p><a href="/?led=on"><button class="button">on</button></a></p> <p><a href="/?led=off"><button class="button button2">off</button></a></p> </body> </html>""" Hobbielektronika csoport 2018/2019 10 Debreceni Megtestesülés Plébánia

led_switch.py futtaatása Indítsuk el a led_switch.py programot a mikrovezérlőn! Csatlakozzunk egy WiFi eszközzel (pl. mobiltelefon) az alábbi paraméterekkel: SSID = ESP-AP, Password = micropython Csatlakozzunk egy böngészővel a 192.168.4.1 címre! Hobbielektronika csoport 2018/2019 11 Debreceni Megtestesülés Plébánia

Továbbfejlesztési javaslat Robot irányításához például így írhatjuk át a HTML lapot (nyilván a firrmware-t is át kell írni hozzá) <html> <head> <title>esp WiFi robot</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="icon" href="data:,"> <style> html {font-family:helvetica;display:inline-block;margin:0px auto;text-align:center;} h1 {color: #0F3376; padding: 2vh;}p{font-size: 1.5rem;}.button {display: inline-block; background-color: #e7bd3b; border: none; border-radius: 8px; color: white; padding: 16px 40px; text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}.button2 {background-color: #4286f4;} </style> </head> <body> <h1>esp WiFi robot</h1> <p><a href="/?btn=f"><button class="button ">FWD</button></a></p> <p><a href="/?btn=l"><button class="button"><-</button></a> <a href="/?btn=s"><button class="button button2">stop</button></a> <a href="/?btn=r"><button class="button">-></button></a></p> <p><a href="/?btn=b"><button class="button">rev</button></a></p> </body> </html> Hobbielektronika csoport 2018/2019 12 Debreceni Megtestesülés Plébánia

httap_server.py A helyi hálózathoz a helyi routeren a STA_IF interfész segítségével tudunk kapcsolódni A fölösleges favicon.ico lekérésekhez egy hibaüzenetet defirniálunk import usocket as socket import network ssid = 'XXXXXX' password = 'xxxxxx' station = network.wlan(network.sta_if) station.active(true) station.connect(ssid, password) while station.isconnected() == False: pass print('connection successful') print(station.ifconfig()) ERR406 = "HTTP/1.0 406 Not Acceptable\r\n" A programnak itt csak a releváns sorait mutatjuk be! Folytatás a következő oldalon! Hobbielektronika csoport 2018/2019 13 Debreceni Megtestesülés Plébánia

httap_server.py Bemutatjuk a soronkénti kiolvasást és a favicon.ico lekérés kiszűrését a dupla számlálóléptetés elkerülésére counter = 0 while True: client_sock, client_addr = s.accept() req = client_sock.readline() print(req) mystr = req.decode('ascii') while True: h = client_sock.readline() if h == b"" or h == b"\r\n": break print(h) if mystr.find("/favicon") < 0: # Soronként olvasunk # text string átalakítás # beolvassuk többi sort is # ha nem favicon.ico lekérés client_sock.write(content % counter) # formázott kiíratás counter += 1 else: client_sock.write(err406) client_sock.close() # favicon.ico helyett hibaüzenet # a kapcsolat lezárása Hobbielektronika csoport 2018/2019 14 Debreceni Megtestesülés Plébánia

Vezérlés Android alkalmazással Andriy Baranov NodeMCU_Car projektje WiFi vezérlésű robot. A firrmware Arduino IDE alá készült, de a vezérlő Android alkalmazás HTTP protokolt használ, így mi is használhatjuk! Hobbielektronika csoport 2018/2019 15 Debreceni Megtestesülés Plébánia

Vezérlés Android alkalmazással Az Android alkalmazás a MIT AppInventor online fejlesztői környezetében készült, így telepítés nélkül mi is használhatjuk, ha például módosítani akarjuk (link: appinventor.mit.edu/explore/) és így tovább Hobbielektronika csoport 2018/2019 16 Debreceni Megtestesülés Plébánia

nodemcu_car.py A kommunikációt kipróbáló programnak itti csak a beérkező lekéréseket kiszolgáló részét mutatjuk be, a program eleje megegyezik a korábbiakkal while True: client_sock, client_addr = s.accept() # kapcsolódásra várunk print("client address:", client_addr) req = str(client_sock.readline()) while True: h = client_sock.readline() if h == b"" or h == b"\r\n": break print(h) print("request: ",req) if req.find("/?state=") > 0: print("command: ",req[14]) w = client_sock.write("http/1.0 200 OK\n") # az első sor a lekérés (GET) # beolvassuk a többi sort is # >0 ha volt State paraméter # a dekódolt parancs w = client_sock.write('content-type: text/html\n') w = client_sock.write('connection: close\n \n\n') client_sock.close() Hobbielektronika csoport 2018/2019 17 Debreceni Megtestesülés Plébánia

Tapasztalatok A NodeMCU_Car.apk alkalmazás is jól használható, bár a sebességállító csúszka mozgatása esetén túlterheli a webszervert Javaslat: semmi sem indokolja a csúszkaállás mozgatás közbeni kiküldését ezért a sebességet is a gombok lenyomásakor kellene kiküldeni Az ESP8266 MicroPython adaptáció nem alkalmas többszálú futtiatásra, ezért akadályozó tényező hogy a socket.accept() blokkoló várakozást jelent, közben más feladat nem végezhető. Megoldási lehetőségek: Periodikus, rövid idejű várakozás socket.settimeout() beállítással A select modul select.poll() osztályának használata a socket állapotának lekérdezésére, szintén timeout-tal A következő oldalakon bemutatunk egy-egy egyszerű példát a fentiek megvalósítására Hobbielektronika csoport 2018/2019 18 Debreceni Megtestesülés Plébánia

timeout.py Ez a program a ledswitch.py program módosítotti változata a socket.settimeout() használatának bemutatására import socket import select # Itt most nem használhatjuk a usocket modult! s = socket.socket(socket.af_inet, socket.sock_stream) s.bind(('', 80)) s.settimeout(0.5) # timeout értéke itt 0.5 sec s.listen(1)... while True: try: conn, addr = s.accept() # --- lekérés beolvasása, feldolgozása és válasz küldése --- conn.close() except OSError as er: # print(er) # --- Egyéb feladat végrehajtása --- Hobbielektronika csoport 2018/2019 19 Debreceni Megtestesülés Plébánia

polling.py Ez a program a ledswitch.py program módosítotti változata a select.poll() használatának bemutatására import usocket as socket import uselect as select... s = socket.socket(socket.af_inet, socket.sock_stream) s.bind(('', 80)) s.listen(1) p = select.poll() p.register(s,select.pollin) while True: fvdevent = p.poll(1000) # timeout értéke milliszekundumokban if fvdevent : conn, addr = s.accept() # --- lekérés beolvasása, feldolgozása és válasz küldése --- else: # --- Egyéb feladat végrehajtása --- Hobbielektronika csoport 2018/2019 20 Debreceni Megtestesülés Plébánia

NodeMCU kártya MicroPythonnal Hobbielektronika csoport 2018/2019 21 Debreceni Megtestesülés Plébánia