ARCHITEKTURA SYSTEMÓW WBUDOWANYCH - LABORATORIUM Ćwiczenie 4. Temat: Serwer stron WWW jako interfejs komunikacyjny z Systemem Wbudowanym. 1. Wstęp Możliwość uruchomienia serwera stron WWW pracującego na systemie wbudowanym umożliwia stworzenie wygodnego i przejrzystego interfejsu użytkownika, za pomocą którego operator może sterować urządzeniem. Takie rozwiązanie ogranicza koszty budowy urządzenia związane z elementami interfejsu użytkownika (ekran LCD, klawiatura, matryca dotykowa), ale również może skrócić czas przygotowania oprogramowania budowanego urządzenia. żądanie odpowiedź żądanie odpowiedź Rys.1. Idea interfejsu użytkownika oparta na serwerze stron WWW. W proponowanym rozwiązaniu przeglądarka internetowa pracująca na dowolnym komputerze PC lub Smartfonie wysyła żądanie do serwera stron WWW pracującego na systemie wbudowanym. 1
W odpowiedzi system wbudowany przesyła do przeglądarki internetowej stronę www zawierającą informację wskazane w żądaniu. W ogólności informacje te mogą zostać zaprezentowane w formie tekstowej, tabelarycznej a nawet graficznej. W przypadku platformy Intel Galileo Gen2 serwer WWW można zrealizować na wiele sposobów, ale do najpopularniejszych należą: Stworzenie serwera stron WWW przy użyciu środowiska Arduino IDE Stworzenie serwera stron WWW za pomocą środowiska Node.js zainstalowanym na platformie Galileo i pracującej pod kontrolą systemu Linux Yocto Wykorzystanie programowania w języku Pyton pod kontrolą systemu Linux Yocto. Wykorzystanie środowiska Intel XDK. Za pomocą serwera stron WWW na platformie Intel Galileo można sterować: Sterować stanami portami GPIO i PWM. Wyświetlać wartości stanów portów cyfrowych i analogowych, Wysyłać komunikaty do systemu wbudowanego. 2. Budowa platformy Intel Galileo Gen2 Intel Galileo jest platformą kompatybilną z Arduino Uno R3 opartą o procesor klasy x86 Intel Quark X1000 (32-bitowy system klasy Intel Pentium) o prędkości taktowania 400 MHz. Procesor posiada 16 KBytes pamięci cache pierwszego poziomu. Platforma Galileo posiada pamięci 512 KB SRAM, 256MB DRAM DDR3 oraz 8MB pamięci flash na lekką dystrybucję linuxa (Yocto). Bardziej rozbudowane systemy operacyjne takie jak np. Linux Yocto, Linux Debian, Windows można umieścić na karcie microsd. Płyta Galileo posiada również zegar RTC z możliwością podtrzymania ustawień zegara poprzez zewnętrzne napięcie zasilające 3V. Intel Galileo posiada interfejsy komunikacyjne charakterystyczne dla mikrokontrolerów: Magistrala I2C - piny SDA i SCL, Magistrala SPI - domyślnie z prędkością 4 MHz, Szeregowy interfejs UART - z programowalną prędkością (piny RX i TX), 14 pinów cyfrowych GPIO - z czego 6 może zostać wykorzystanych jako źródło sygnału PWM, 6 analogowych wejść - oznaczonych symbolami A0-A5, podłączonych do 12-bitowego przetwornika analogowo-cyfrowego AD7298. Dzięki temu, że układ wyprowadzeń pinów jest identyczny jak w Arduino R3, platforma Intel Galileo może korzystać z bogatej oferty rynkowej modułów Shield (tzw. Skorupki) przygotowanych dla platformy Arduino. Programowanie portów odbywa się podobnie jak dla pozostałych platform Arduino w śwodowisku Arduino IDE oraz dodatkowo z poziomu zainstalowanego w pamięci flash lub na karcie pamieci Linuksa Yocto, Linuxa Debian lub systemu Microsoft Windows m.in. w językach C/C++, Python oraz Bash. 2
Złącze Ethernet Złącze terminala Linux Złącze USB CLIENT Złącze USB HOST Złącze zasilacza Złącze kart SD Złącze zgodne ze standardem modułów (Shield) Arduino Rys.2. Platforma Intel Galileo Gen2. 3. Stanowisko laboratoryjne Stanowisko laboratoryjne składa się z komputera PC, Płyty ewaluacyjnej Intel Galileo Gen2 (Rys.2), zestawu okablowania i podstawowych czujników współpracujących z płytą Intel Galileo- Grove Starter Kit Plus Intel IoT Edition (Rys. 3) oraz czytnika kart pamięci micro SD (Rys.4). Zestaw Grove Starter Kit Plus Intel IoT Edition oprócz okablowania niezbędnego do uruchomienia i korzystania z Intel Galileo Gen2 zawiera: Płytkę przejściową (Base Shield) umożliwiającą dołączenie czujników do Intel Galileo, alfanumeryczny wyświetlacz ciekłokrystaliczny (2 linie po 16 znaków) z podświetleniem RGB, przycisk monostabilny, potencjometr obrotowy, moduł przekaźnika elektromagnetycznego, moduł buzera, moduł mikrofonu pojemnościowego, czujnik natężenia światła, czujnik temperatury (termistor), sensor dotykowy, serwomechanizm, trzy diody elektroluminescencyjne (niebieska, zielona i czerwona) współpracujecie z modułem LED Socket Kit, adapter zasilania bateryjnego. broszura informacyjna. 3
Rys.3. Zestaw czujników i przewodów zestawu Grove Starter Kit Plus Intel IoT Edition Rys.4. Czytnik kart micro SD wykorzystywany na laboratorium 4. Przygotowanie obrazu systemu Linux Yocto i konfiguracja Terminala Linux Pobrać ze strony internetowej http://www.intel.com/support/galileo/sb/cs-035101.htm obraz systemu operacyjnego Linux Yocto (SD-Card Linux Image). Pobrany plik umieścić w folderze E:/SW. 4
Sformatować kartę micro SD za pomocą czytnika kart pamięci (w formacie FAT32). Za pomocą programu 7zip rozpakować pobrane archiwum i jego zawartość na karę pamięci micro. Procedura przygotowania karty SD może trwać kilka minut. Po jej zakończeniu należy zweryfikować zawartość karty SD, która powinna być taka jak na rysunku 5. Rys.5. Zawartość karty SD z systemem Linux Yocto Podłącz kabel FTDI zgodnie z rysunkiem 6 upewniając się, że czarny przewód zostanie połączony z zaciskiem GND w złączu kołkowym. Wtyk USB podłącz do portu komputera PC. Sprawdź w Menadżerze Urządzeń systemu Windows numer portu COM, pod którym widziany będzie interfejs UART1 platformy Intel Galileo Gen2. Rys. 6. Sposób podłączenie kabla FTDI (UART TTL 3,3V -> USB) do platformy Intel Galileo Gen2 5
Uruchom program terminala Tera Term, a następnie z menu File wybierz opcję New connection. W pojawiającym się oknie zaznacz pozycję Serial i wybierz port COM odczytany w Menadżerze Urządzeń. Następnie z menu Setup wybierz opcję Serial port i ustaw prędkość transmisji na 115200 bodów. W ten sposób program Terminala Tera Term został skonfigurowany do pracy z Intel Galileo Gen2. Umieść przygotowaną kartę SD w odpowiednim gnieździe na płycie Intel Galileo Gen2. Podłącz przewód sieciowy do złącza Ethernet a następnie podłącz zasilanie, zaczekaj na uruchomienie się systemu Yocto i zaloguj się do niego jako root. Podłącz płytę Intel Galileo Gen2 do komputera PC za pomocą przewodu micro USB i złącza USB client (Rys. 2). W konsoli systemu Linux (w oknie programu Tera term) sprawdź mac adres przewodowej karty sieciowej (eth0) płyty Galileo Gen2 oraz adres IP jaki został przydzielony jej przez serwer DHCP za pomocą polecenia: Ifconfig -a Po wydaniu powyższego polecenia powinno wyświetlić się okno jak na rysunku 7. Zapisz w protokole adres MAC oraz adres IP będą one potrzebne w dalszej części laboratorium. Rys.7. Efekt działania polecenia ifconfig 6
5. Tworzenie i przygotowanie serwera strony WWW w Arduino IDE. Poprawność podłączenia przewodów sprawdź uruchamiając program Arduino IDE. Ustaw odpowiedni port COM pod którym widziana jest w Menadżerze urządzeń platforma intel Galileo Gen2 i wgrajc przykładowy program (tzw. sketch ) Bink (Plik -> Przykłady -> 01.Basics). Stwórz nowy Sketch w środowisku Arduino IDE. Uruchomienie serwera WWW poprzedza konfiguracja sieci ethernet poprzez funkcję Ethernet.begin(), która jako argument przyjmuje adres MAC karty siecowej oraz adres IP pod którym platforma Intel Galileo będzie widziana w sieci Ethernet. Jako należy użyć adresów odczytanych wcześniej w konsoli Linux za pomocą polecenia ifconfig. Adresy MAC oraz adresy IP muszą być unikalne w sieci LAN. Oprócz konfiguracji wspominanych adresów w środowisku Arduino IDE należy również wskazać port, pod którym portem będzie widziany nasz serwer (domyślnie port numer 80). Można tego dokonać za pomocą funkcji EthernetServer server(80). Ostatnim krokiem jest uruchomienie serwera WWW za pomocą funkcji server.begin(). Całość konfiguracji I uruchomienia serwera WWW można dokonać obszarze funkcji setup(), która może wyglądać następująco (znaki XXX i XX zastępują odpowiednie bajty adresów): byte mac[] = { 0xXX, 0xXX, 0xXX, 0xXX, 0xXX, 0xXX }; IPAddress ip(xxx,xxx,xxx,xxx); EthernetServer server(80); void setup() { Ethernet.begin(mac, ip); server.begin(); } Treść strony WWW w tzw sketchu środowiska Arduino IDE przekazuję się w polu funkcji loop() za pomocą funkcji client.println(), która można wywoływać wielokrotnie (dla kolejnych linii kodu HTML strony internetowej). Funkcja loop() może przyjąć postać: void loop() { EthernetClient client = server.available(); client.println("<h1> Hello World!!! </h1>"); client.stop(); } W ten sposób zostaje już uruchomiony serwer WWW na platformie Intel Galileo. Kolejnym etapem jest rozbudowane programu o dodatkowe funkcjonalności takie jak wyświetlanie wartości wielkości mierzonych przez określone czujniki czy też dodanie możliwości ustawiania portów GPIO poprzez interfejs WWW. Ze sposobem odczytu i prezentacji stanów przetworników analogowo-cyfrowych zapoznaj się poprzez analizę przykładowych sketch-ów dostępnych w środowisku Arduino IDE w polu Plik -> Przykłady -> Ethernet (np. WebServer). Zapoznaj się również ze sposobem sterowania portami GPIO 7
korzystając z przykładowych programów znajdujących się w folderze E:\SW\WebSerwer oraz z przewodników znajdujących się na stronach: http://startingelectronics.org/tutorials/arduino/ethernet-shield-web-server-tutorial/ http://startingelectronics.org/articles/arduino/switch-and-web-page-button-led-control/ 6. Zadanie końcowe. 1. Napisz sketch w środowisku Arduino IDE realizujący serwer strony WWW. Strona powinna umożliwiać włączanie/wyłączanie przekaźnika (Relay), sterowanie jasnością diody LED (poprzez porty PWM), prezentować stan przełącznika (Button) podłączonego do portu cyfrowego oraz wyświetlać zmierzoną temperaturę (w C) i natężenie światła (w LUX) za pomocą sensorów z zestawu Grove Starter Kit Plus Intel IoT Edition. Do realizacji zadania będzie potrzebna elementarna wiedza z zakresu składni języka HTML. Można korzystać z kursów HTML dostępnych w Internecie, np.: http://www.kurshtml.edu.pl. Składnie funkcji z biblioteki Ethernet.h można odnaleźć na stronie: http://www.arduino.cc/en/reference/homepage. 8
LABORATORIUM ARCHITEKTURY SYSTEMÓW WBUDOWANYCH Ćwiczenie 4 Serwer stron WWW jako interfejs komunikacyjny z Systemem Wbudowanym. Data: Godzina: Imię i Nazwisko Numer indeksu Grupa dziekańska 1. Mac Adres: 2. Adres IP: 9