Server setup. #include <SPI.h> #include <Ethernet.h> boolean incoming = 0;

Podobne dokumenty
Server setup. #include <SPI.h> #include <Ethernet.h> boolean incoming = 0;

Paweł Rajba,

Tworzenie stron internetowych z wykorzystaniem HTM5, JavaScript, CSS3 i jquery. Łukasz Bartczuk

Pogadanka o czymś, co niektórzy nazywają AJAX

Czym jest AJAX. AJAX wprowadzenie. Obiekt XMLHttpRequest (XHR) Niezbędne narzędzia. Standardowy XHR. XHR z obsługą baz danych

Podstawy programowania w języku JavaScript

AJAX. Wykonał: Marcin Ziółkowski, AGH Kraków, AiR rok 5.

Klawiatura matrycowa

Schemat blokowy architektury AVR

Protokół HTTP. 1. Protokół HTTP, usługi www, model request-response (żądanie-odpowiedź), przekazywanie argumentów, AJAX.

Uwaga: dioda na wyjściu 13 świeci gdy na wyjście podamy 0.

Aplikacje WWW. Możliwość wykorzystania elementów interfejsu użytkownika znanych z aplikacji Windows tj. wskaźniki postępu.

Laboratorium 1. Wzorce oprogramowania lab1, Zofia Kruczkiewicz

Zastosowanie modułu Wi-Fi ESP-12 (1)

Plan wykładu. 1. Protokół FTP. 2. Protokół HTTP, usługi www, model request-response (żądanie-odpowiedź), przekazywanie argumentów, AJAX.

PHP: bloki kodu, tablice, obiekty i formularze

Bazy Danych i Usługi Sieciowe

Wybrane działy Informatyki Stosowanej

Krótki kurs JavaScript

LABORATORYJNY SYSTEM CYFROWY PROGRAMOWANY PRZEZ ETHERNET OPARTY NA MAGISTRALI SPI

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

Zaawansowane aplikacje internetowe AJAX. Wykład prowadzi: Marek Wojciechowski AJAX

Systemy internetowe. Wykład 3 PHP. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

Instrukcja konfiguracji urządzenia Comarch TNA Gateway Plus

DOM SAX AJAX. SAX,DOMiAJAX. Bartłomiej Świercz. Katedra Mikroelektroniki i Technik Informatycznych. Łódź, 11 kwietnia 2010

Zaawansowane aplikacje internetowe

Pilot RF 4-kanałowy + odbiornik XY-DJM-5V umożliwia zdalne sterowanie do czterech urządzeń. Nadajnik pilot MX804. Odbiornik XY-DJM.

TECHNOLOGIE SIECI WEB

Zajęcia 4 - Wprowadzenie do Javascript

HttpRequest Aplikacja Czat

Tworzenie Stron Internetowych. odcinek 10

Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

Prosty system alarmowy z Arduino

CZYM JEST JAVASCRIPT?

OpenLaszlo. OpenLaszlo

Aktywne i dynamiczne strony WWW. Elementy projektowania stron WWW. Część 3. Formularze HTML przykład. Formularze HTML. dr inŝ.

Aplikacje WWW - laboratorium

Wykład 5: PHP: praca z bazą danych MySQL

Zaawansowane bazy danych i hurtownie danych studia zaoczne II stopnia, sem. I

Technika mikroprocesorowa materiały do laboratorium. Autor: Dorota Rabczuk

Wybrane działy Informatyki Stosowanej

Specyfikacja API 1.0. Specyfikacja kontroli Konta systemu CashBill z wykorzystaniem API opartego na REST

Systemy internetowe Wykład 3 PHP

Język C. Wykład 9: Mikrokontrolery cz.2. Łukasz Gaweł Chemia C pokój 307

Wybrane działy Informatyki Stosowanej

SUM Edukacja Techniczno Informatyczna Języki i Systemy Programowania. Wykład 2. dr Artur Bartoszewski - WYKŁAD: Języki i Systemy Programowania,

Umieszczanie kodu. kod skryptu

Systemy Wbudowane. Arduino C. Arduino C - stałe. Arduino C - Stałe. Arduino C - Stałe. Funkcje matematyczne. Arduino C - Stałe

JavaScript obiektowość

Techniki WWW. (HTML, CSS, JavaScript) Dr inż. Marcin Zieliński WYKŁAD 7. Środa 15:30-17:00 sala: A-1-04

Systemy Wbudowane. Arduino C. Arduino C - stałe. Arduino C - Stałe. Arduino C - Stałe. Funkcje matematyczne. Arduino C - Stałe

Część I Powtórka z technologii internetowych...15

Hybrydowe aplikacje webowe

Zaawansowany kurs języka Python

Spis wzorców. Działania użytkownika Strona 147 Obsługa większości Działań użytkownika za pomocą kodu JavaScript przy użyciu metod obsługi zdarzeń.

Ajax. 1. Wprowadzenie. 2. Aplikacja serwerowa

Wprowadzenie do programowania urządzeń Arduino (Arduino dla Informatyków)

ZAAWANSOWANE BAZY DANYCH I HURTOWNIE DANYCH MySQL, PHP

Przykłady tworzenia aplikacji komponentowych w technologii JavaServer Faces 2.1 na podstawie

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Wyrażenie include(sciezka_do_pliku) pozwala na załadowanie (wnętrza) pliku do skryptu php. Plik ten może zawierać wszystko, co może się znaleźć w

Zaawansowane aplikacje internetowe laboratorium

Sterownik Spid Pant 8 i Ant 8. Podręcznik użytkowania

Pętle while, for, do while, instrukcje break, continue, switch 1. Pętle

Zastosowanie technologii Ajax w ramach technologii JavaServer Faces wg

Nazwa implementacji: Pamięć i zręczność - zapamiętaj kolejność. Autor: Krzysztof Bytow

Opis do danych z Lan Kontrolera V Dane wysyłane przez http POST ze strony Events Config po wciśnięciu przycisku Save Config.

Scenariusz Web Design DHTML na 10 sesji. - Strony statyczne I dynamiczne. - Dodawanie kodu VBScript do strony HTML. Rysunek nie jest potrzebny

XML extensible Markup Language. część 5

Przykład. Podaj nazwę domenową hosta a odczytaj jego adres IP, lub odwrotnie:

Wprowadzenie do języka Java

Architektury systemów rozproszonych LABORATORIUM. Ćwiczenie 1

Programowanie obiektowe

Programowanie obiektowe

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Języki i metody programowania Java INF302W Wykład 2 (część 1)

Aplikacja Sieciowa wątki po stronie klienta

Zaawansowane Techniki WWW (HTML, CSS i NODE.JS)

1. Aplikacja LOGO! App do LOGO! 8 i LOGO! 7

Sprawozdanie Sieci komputerowe i bazy danych Laboratorium nr 4

Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

Co to jest NODE.JS? Nowoczesne środowisko programistyczne

Materiały do laboratorium MS ACCESS BASIC

Kontrola sesji w PHP HTTP jest protokołem bezstanowym (ang. stateless) nie utrzymuje stanu między dwoma transakcjami. Kontrola sesji służy do

Informatyka I. Wykład 3. Sterowanie wykonaniem programu. Instrukcje warunkowe Instrukcje pętli. Dr inż. Andrzej Czerepicki

Kurs WWW 1. Paweł Rajba

Google Web Toolkit Michał Węgorek ZPO 2009

Zdalne wywołania procedur. Jarosław Kuchta Programowanie Współbieżne

Popularne dostępne rozwiązania. Najpopularniejsze środowiska programistyczne:

Tworzenie witryn internetowych PHP/Java. (mgr inż. Marek Downar)

Zdarzenia Zdarzenia onload i onunload

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Ćwiczenie 8. Kontrolki serwerowe

ASP.NET MVC. Podstawy. Zaawansowane programowanie internetowe Instrukcja nr 3

XML extensible Markup Language. część 5

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Realizacja Aplikacji Internetowych 2013 laboratorium cz. 2 K.M. Ocetkiewicz

NoSQL Not Only SQL: CouchDB. I.Wojnicki, NoSQL. Apache CouchDB has started. Time to relax. Przetwarzanie dokumentów i widoków.

Transkrypt:

Server setup #include <SPI.h> #include <Ethernet.h> boolean incoming = 0; byte mac[] = 0x00, 0xAA, 0xBB, 0xCC, 0xDA, 0x02 ; IPAddress ip(192,168, 0, 230); EthernetServer server(80); void setup() pinmode(2, OUTPUT); Ethernet.begin(mac, ip); server.begin(); Serial.begin(9600);

Sterowanie przez dopisanie do adresu URL ciągu $1 lub $2 void loop() EthernetClient client = server.available(); if (client) while (client.connected()) if (client.available()) char c = client.read(); if(incoming && c == ' ') incoming = 0; if(c == '$') incoming = 1; if(incoming == 1 && c== 1 ) digitalwrite(2, HIGH); if(incoming == 1 && c== 2 ) digitalwrite(2, LOW); //if (client.available()) //while (client.connected()) delay(10); client.stop(); //if (client)

Atrybut href w html u Atrybut href zawiera adres internetowy powiązanej strony The href attribute specifies the URL of the page the link goes to. a /a ograniczają fragment interpretowany jako adres URL w html u nie wszystkie znaki są znakami ascii i niektóre wymagają zamiany na ascii przez poprzedzenie ich backslashem - przykładem jest kombinacja \ client.println("<a href=\"/?lighton\"\">turn On Light</a>"); client.println("<a href=\"/?lightoff\"\">turn Off Light</a><br />");. if(readstring.indexof("?lighton") >0) digitalwrite(2, HIGH); // set pin 6 high else if(readstring.indexof("?lightoff") >0) digitalwrite(2, LOW); // set pin 6 low readstring=""; //clearing string for next read

void loop() EthernetClient client = server.available(); // Create a client connection if (client) buttonpress = digitalread(3); while (client.connected()) if (client.available()) char c = client.read(); if (dstring.length() < 30) dstring += c; if (c == '\n') client.println("http/1.1 200 OK"); //send new page client.println("content-type: text/html"); client.println(); client.println("</html></body>"); client.println("<br />"); client.println("<hr />"); client.println("</body></html>"); dstring = ""; //clearing string for next read delay(10); client.stop(); //stopping client

HTML components 2 alternative radiobuttons submit component links the L=0 or L=1 order to the URL address (HTTP demand) if (dstring.indexof("l=1") > 0) digitalwrite(ledpin, HIGH); // set the LED on LEDON = true; if (dstring.indexof("l=0") > 0) digitalwrite(ledpin, LOW); // set the LED on LEDON = false;.. client.println("<form method=get name=med><br>"); if (LEDON == false) client.println("<input type='radio' name='l' value='1'>led ON<br>"); client.println("<input type='radio' name='l' value='0' checked>led OFF<br>"); else if (LEDON == true) client.println("<input type='radio' name='l' value='1' checked>led ON<br>"); client.println("<input type='radio' name='l' value='0'>led OFF<br>"); client.println("<input type=submit value=submit></form>");

Sterowanie przez stronę z komponentami typu radio o nazwie L, których wartość 1 lub 0 jest przesyłana przez komponent submit i dołączana do żądania HTTP (URL) String dstring = String(30); boolean LEDON = true; void loop() EthernetClient client = server.available(); if (client) while (client.connected()) if (client.available()) char c = client.read(); dstring += c; if (c == '\n') if (dstring.indexof("l=1") > 0) digitalwrite(ledpin, HIGH); // set the LED on LEDON = true; if (dstring.indexof("l=0") > 0) digitalwrite(ledpin, LOW); // set the LED on LEDON = false;

client.println("http/1.1 200 OK"); //send new page client.println("content-type: text/html"); client.println(); client.println("</html></body>"); client.println("<form method=get name=mled><br>"); if (LEDON == false) client.println("<input type='radio' name='l' value='1'>led ON<br>"); client.println("<input type='radio' name='l' value='0' checked>led OFF<br>"); else if (LEDON == true) client.println("<input type='radio' name='l' value='1' checked>led ON<br>"); client.println("<input type='radio' name='l' value='0'>led OFF<br>"); client.println("<input type=submit value=submit></form><br>"); client.println("<br />"); client.println("<hr />"); client.println("</body></html>"); dstring = ""; delay(10); client.stop(); //stopping client //if (c == '\n') //if (client.available()) //while (client.connected()) //if (client)

AJAX - Asynchronous JavaScript + XML AJAX (Asynchronous JavaScript) jest techniką dynamicznej zmiany zawartości stron internetowych tworzonych w XML u. Strony korzystające z AJAX a mogą być modyfikowane asynchronicznie przez wymianę niewielkich pakietów danych między klientem a serwem w tle. Oznacza to możliwość uaktualniania fragmentów stron webowych bez przeładowywania całej strony. Klasyczne strony internetowe (nie używające AJAX a) muszą być przeładowywane w całości, jeśli zawartość ma się zmienić. AJAX jest używany przez: Google Maps, Gmail, YouTube, and Facebook.

AJAX - obiekt XMLHttpRquest Technika AJAX wykorzystuje obiekt XMLHttpRquest (do odczytu danych z serwera) oraz język skryptowy Java do wyświetlania danych. Obiekt XMLHttpRequest służy do wymiany danych z serwerem w tle i uaktualniania danych na stronach internetowych bez ładowania ponownego całej strony. Tworzenie nowego obiektu klasy XMLHttpRequest variable = new XMLHttpRequest(); Odpowiedź serwera na żądanie http jest uzależniona od parametrów obiektu XMLHttpRequest (responsetext oraz responsexml): responsetext wysyła w odpowiedzi łańcuch (string), responsexml wysyła w odpowiedzi dane XML. Przykład odpowiedzi http w postaci łańcucha: client.println("document.getelementbyid(\"switch_txt\")\.innerhtml = this.responsetext;"); Przykład odpowiedzi http w postaci danych XML: document.getelementsbyclassname("switches")[0].innerhtml = this.responsexml.getelementsbytagname('switch')[0].childnodes[0].nodevalue;

Obiekt XMLHttpRquest zdarzenie onreadystatechange Po otrzymaniu żądania http sygnalizowanego zmianę parametru readystate obiekt XMLHttpRequest wywołuje zdarzenie onreadystatechange skojarzone z funkcją sprawdzającą zmiany na czujnikach podłączonych do serwera. Gdy parametr readystate przyjmie wartość 4, a parametr status wartość 200 OK odpowiedź http jest gotowa.

Dwa sposoby wywoływania funkcji sprawdzającej stan switch y ręczny i automatyczny //funkcja GetSwitchState() wywoływana po naciśnięciu przycisku buton client.println("<button type=\"button\"\onclick=\"getswitchstate()\">get Switch State</button>"); -------------------------------------------------------------------------------------------------------------------- //funkcja GetSwitchState() wywoływana automatycznie ze zdarzenia onreadystatechange client.println("function GetSwitchState() "); client.println("nocache = \"&nocache=\"\+ Math.random() * 1000000;"); client.println("var request = new XMLHttpRequest();"); client.println("request.onreadystatechange = function() "); void GetSwitchState(EthernetClient cl) if (digitalread(3)) cl.println("switch state: ON"); else cl.println("switch state: OFF");

/*sprawdzenie, czy żądanie HTTP zawiera łańcuch "ajax_switch ", co jest warunkiem wykonania funkcji GetSwitchState()*/ if (HTTP_req.indexOf("ajax_switch") > -1) GetSwitchState(client); /* funkcja GetSwitchState() jest skojarzona ze zdarzeniem onreadystatechange otrzymania żądania HTTP */ client.println("function GetSwitchState() ");. client.println("request.onreadystatechange = function() "); /* żądanie HTTP request.open("get", zawiera łańcuch "ajax_switch" warunkujący wykonanie funkcji GetSwitchState()*/ client.println("request.open(\"get\", \"ajax_switch\" + nocache, true);"); void GetSwitchState(EthernetClient cl) if (digitalread(3)) cl.println("switch state: ON"); else cl.println("switch state: OFF");

/*sprawdzenie, czy żądanie HTTP zawiera łańcuch "ajax_inputs", co jest warunkiem sterowania diodą z funkcji SetLEDs(); oraz odczytu wejść z funkcji XML_response(client); */ if (StrContains(HTTP_req, "ajax_inputs")) SetLEDs(); XML_response(client); /* żądanie HTTP request.open("get", odczytu wejść i sterowania wyjściem (dioda) umieszczone w funkcji skryptowej GetArduinoIO() pobieranej przy zdarzeniu onreadystatechange */ <script> function GetArduinoIO() request.onreadystatechange = function(). request.open("get", "ajax_inputs" + strled1 + nocache, true); </script> void SetLEDs(void) if (StrContains(HTTP_req, "LED1=1")) LED_state[0] = 1; // save LED state digitalwrite(6, HIGH); else if (StrContains(HTTP_req, "LED1=0")) LED_state[0] = 0; // save LED state digitalwrite(6, LOW); void XML_response(EthernetClient cl).. cl.print("<inputs>"); cl.print("<switch>"); if (digitalread(sw_arr[0])) cl.print("on"); else cl.print("off"); cl.println("</switch>"); cl.print("<led>"); if (LED_state[0]) cl.print("checked"); else cl.print("unchecked"); cl.println("</led>"); cl.print("</inputs>");