Serwisy partnerskie:
Close icon
Serwisy partnerskie

Pobieranie danych z serwera internetowego za pomocą Arduino Wi-Fi

Article Image
Poradnik pokazujący krok po kroku jak pobrać dane z serwera internetowego używając Arduino Wi-Fi.
1. Praktyczny Kurs Arduino - przewodnik po artykułach składających się na kurs 2. Czym jest Arduino? 3. Porównanie Arduino z Raspberry Pi 4. Instalacja sterownika Arduino w systemie Windows 5. Generowanie pliku hex w Arduino 6. Jak wgrać bootloader w Atmega328? 7. Rozpoczęcie pracy z oprogramowaniem Arduino 8. Rozpoczęcie programowania w Arduino 9. Programowe resetowanie Arduino 10. Wprowadzenie do Arduino UNO 11. Wprowadzenie do Arduino NANO 12. Wprowadzenie do Arduino Pro Mini 13. Wprowadzenie do Arduino Mega 2560 14. Wprowadzenie do Arduino Due 15. Wprowadzenie do Arduino Lilypad 16. Wprowadzenie do ATmega328 17. Biblioteka Arduino dla Proteusa 18. Projekt płytki drukowanej Arduino UNO dla Proteus ARES 19. Biblioteka Arduino Lilypad dla Proteusa 20. Odczyt z portu szeregowego Arduino 21. Projektowanie układów LCD z Arduino 22. Łączenie klawiatury z Arduino 23. Wartość ADC na LCD przy użyciu Arduino 24. Symulacja czujnika ultradźwiękowego w Proteusie 25. Połączenie czujnika ultradźwiękowego z Arduino 26. Wiele czujników ultradźwiękowych z Arduino 27. Czujnik temperatury 18B20 z Arduino 28. Jak używać 18B20 w Proteus ISIS? 29. Łączenie LM35 z Arduino w Proteusie 30. Współpraca siedmiosegmentowego wyświetlacza z Arduino w Proteusie 31. Łączenie czujnika PIR z Arduino 32. Współpraca czujnika płomienia z Arduino 33. Interfejs NRF24L01 z Arduino 34. NRF24L01+ i Arduino - Response Timed Out 35. Połączenie RFID RC522 z Arduino 36. Komunikacja Bluetooth z Arduino przy użyciu HC05 37. Sterowanie serwomotorem za pomocą Arduino w Proteusie 38. Projekt sterowania sygnalizacją świetlną przy użyciu Arduino 39. Przewijanie tekstu na matrycy LED 8×8 z użyciem Arduino 40. Inteligentny system oszczędzania energii 41. Komunikacja USB pomiędzy Androidem i Arduino 42. Automatyka domowa z użyciem XBee i Arduino 43. Domowy system bezpieczeństwa oparty na GSM 44. Wysyłanie SMS-ów za pomocą Arduino UNO i SIM900 45. Odbieranie SMS-ów za pomocą komend AT przy użyciu Arduino 46. Projekt rozpoznawania głosu przy użyciu EasyVR Shield 47. Rozpoczęcie pracy z programem EasyVR Commander 48. Połączenie EasyVR z Arduino UNO 49. Błąd szkolenia - niepowodzenie rozpoznawania w EasyVR 50. Połączenie XBee z komputerem 51. Wprowadzenie do modułu XBee 52. Interfejs XBee z Arduino 53. Rozpoczęcie pracy z kamerą Pixy 54. Jak zainstalować oprogramowanie kamery Pixy - PixyMon 55. Aktualizacja firmware kamery Pixy do najnowszej wersji 56. Jak wytrenować kamerę Pixy za pomocą komputera 57. Sterowanie kierunkiem obrotu silnika prądu stałego za pomocą Arduino 58. Sterowanie prędkością obrotów silnika prądu stałego za pomocą Arduino 59. Sterowanie kierunkiem obrotu silnika krokowego za pomocą Arduino 60. Sterowanie prędkością obrotów silnika krokowego za pomocą Arduino 61. Pobieranie danych z serwera internetowego za pomocą Arduino Wi-Fi 62. Wprowadzenie do Arduino YUN 63. Dostęp do serwera Linux Arduino YUN za pomocą Putty
Rozwiń cały spis treści Zwiń spis treści

W dzisiejszym poście, jak sama nazwa wskazuje, zobaczymy jak w prostych krokach pobrać dane z serwera internetowego za pomocą Arduino Wi-Fi. Pobieranie danych z serwera WWW za pomocą nakładki (shield) Arduino Wi-Fi zawsze sprawiało inżynierom problem. Nie jest to tak trudne zadanie, jak się zwykle uważa. W dzisiejszym wpisie stworzę mały projekt, w którym będę sterował dwoma prostymi LEDa przez serwer internetowy. To naprawdę bardzo ciekawy projekt i kiedy go ukończyłem, miałem ochotę krzyknąć Hurra!

Arduino Wi-Fi Shield służy do połączenia płytki Arduino z Wi-Fi. Po połączeniu się z Wi-Fi, za pomocą tej nakładki można wykonywać wiele zadań. Możemy na nim zbudować kompletny serwer, a także używać go jako klienta. Serwery zaprojektowane na Arduino Wi-Fi Shield są zazwyczaj dość proste, ponieważ nie posiadają dużej mocy obliczeniowej do obsługi ciężkich zadań serwerów. Arduino Wi-Fi Shield jest najczęściej używany w projektach automatyki domowej, gdzie urządzenia domowe są kontrolowane przez Wi-Fi. Może być również używany do celów związanych z bezpieczeństwem. Krótko mówiąc, ma wiele zastosowań i jest szeroko wykorzystywany.

W dzisiejszym projekcie, użyjemy Arduino UNO do celów programistycznych i połączymy z nim dwa LEDy, a następnie będziemy sterować nimi poprzez serwer internetowy. Używając tego serwera internetowego, będziemy włączać i wyłączać te diody na komendę. Aby sterować LEDami z serwera internetowego, musimy zaprojektować dwie rzeczy:

  • Online Web Server (Internetowy serwer WWW)
  • Arduino Web Client (Klient sieciowy Arduino)
Uwaga: Kompletny projekt został wysłany do wszystkich zapisanych członków. Jeśli chcemy uzyskać kod tego projektu, należy zapisać się do naszej listy mailingowej, a zostanie on automatycznie do nas wysłany.

Opis projektu

Przede wszystkim wyjaśnię, co robimy i co chcemy osiągnąć. W kwestii sprzętu, będziemy używać:

Wykaz elementów
Ilość
Symbol
Nazwa/opis/gdzie kupić

Ich rozmieszczenie i konfiguracja pinów zostały przedstawione w sekcji Arduino Web Client. Ułożymy je w taki sposób, aby dwa LEDy były zamontowane na nakładce Arduino UNO. W serwerze WWW zaprojektujemy prostą stronę, która będzie posiadała cztery przyciski, którymi będą:

  • LED 1 ON
  • LED 1 OFF
  • LED 2 ON
  • LED 2 OFF

Kiedy ktoś otworzy stronę i naciśnie któryś z tych przycisków, na LEDach zostanie wykonane odpowiednie zadanie, np. jeśli ktoś naciśnie przycisk LED 1 ON, to LED 1 obecny na płytce Arduino włączy się, a kiedy ktoś naciśnie przycisk LED 1 OFF, to LED ten się wyłączy i ta sama funkcja zostanie wykonana dla drugiego LEDa. Nie będzie żadnego fizycznego połączenia pomiędzy sprzętem a serwerem internetowym, jedynym połączeniem będzie Wi-Fi. Nakładka Arduino musi mieć dostępne połączenie Wi-Fi. Wtedy osoba z dowolnego miejsca na świecie może je kontrolować. Omówmy teraz te dwie części, jedną po drugiej.

Online Web Server (Internetowy serwer WWW)

Zaprojektowałem serwer internetowy na mojej własnej stronie The Engineering Projects. Jest to strona napisana w PHP, którą umieściłem na moim serwerze. Aby stworzyć tę stronę, wystarczy wykonać poniższe kroki:

Utworzyć notatnik i zmienić jego nazwę na ArduinoWiFi.php, a następnie zapisać plik w miejscu, do którego będziemy mieć łatwy dostęp.

Zapisujemy plik ponownie i nasza strona jest gotowa do załadowania. Owa strona internetowa będzie działać jako serwer sieciowy dla urządzenia Arduino i będzie wysyłać do niego polecenia.

Teraz musimy załadować tę stronę na jakąś witrynę, aby mogła zacząć działać. Aby to zrobić, musimy mieć jakąś domenę internetową i hosting. Ja mam mój na Godaddy. Można również użyć niektórych bezpłatnych usług hostingowych.

To, co robi ten kod, to de facto używanie systemu plików. Kiedykolwiek dowolny przycisk na tej stronie zostanie naciśnięty, tworzy on wówczas po prostu plik txt z literą. W tym kodzie, gdy ktoś naciśnie przycisk LED 1 ON, znak "1" jest zapisywany w pliku txt. Analogicznie znak "2" jest zapisywany w pliku txt po naciśnięciu przycisku LED 1 OFF i tak dalej.

Uwaga: Gdy załadujemy stronę internetową na the serwer WWW, a następnie naciśniemy jakaś przycisk, należy sprawdzać sieciową lokację, w której umieściliśmy naszą stronę.

W tej samej lokacji musimy znaleźć plik data.txt. Jeśli nie możemy znaleźć pliku data.txt to należy wygenerować go samodzielnie, ponieważ w niektórych serwerach internetowych generowanie takich plików automatycznie nie jest dozwolone.

Skończyliśmy z częścią dot. serwera internetowego. Teraz przejdźmy do części klienta sieciowego Arduino.

Arduino Web Client (Klient sieciowy Arduino)

W pierwszej kolejności należy umieścić Arduino Wi-Fi Shield nad Arduino UNO, jak pokazano na poniższym zdjęciu:

Teraz trzeba umieścić dwa LEDy na Arduino UNO. Konfiguracja pinów dla tych LEDów jest pokazana na poniższym rysunku:

  • Dwie diody podłączone są do pinów nr 3 i 4 płytki Arduino UNO i są podciągnięte w dół.
  • Teraz połączamy płytkę Arduino UNO z komputerem i wgrywamy do niej poniższy szkic (program).
#include <SPI.h>

 #include <WiFi.h>

char ssid[] = “EvoWingle-12F3“; // your network SSID (name)

 char pass[] = “093B3453“; // your network password (use for WPA, or use as key for WEP)

 int keyIndex = 0; // your network key Index number (needed only for WEP)

int status = WL_IDLE_STATUS;

 char server[] = “www.theengineeringprojects.com“; // name address for Google (using DNS)

 String location = “/Examples/data.txt HTTP/1.0“;

 char inString[500]; // string for incoming serial data

 int stringPos = 0; // string index counter

 byte statusLed = 0;

 char c;

 int led1 = 3;

 int led2 = 4;

 WiFiClient client;

unsigned long lastConnectionTime = 0; // last time you connected to the server, in milliseconds

 boolean lastConnected = false; // state of the connection last time through the main loop

 const unsigned long postingInterval = 10*1000; // delay between updates, in milliseconds

void setup() {

 //Initialize serial and wait for port to open:

 Serial.begin(9600);

 pinMode(led1,OUTPUT);

 pinMode(led2,OUTPUT);

digitalWrite(led1, LOW);

 digitalWrite(led2, LOW);

// check for the presence of the shield:

 if (WiFi.status() == WL_NO_SHIELD) {

 Serial.println(“WiFi shield not present”);

 // don’t continue:

 while(true);

 }

// attempt to connect to Wifi network:

 while ( status != WL_CONNECTED) {

 Serial.print(“Attempting to connect to SSID: “);

 Serial.println(ssid);

 // Connect to WPA/WPA2 network. Change this line if using open or WEP network:

 status = WiFi.begin(ssid, pass);

// wait 10 seconds for connection:

 delay(10000);

 }

 Serial.println(“Connected to wifi”);

 printWifiStatus();

Serial.println(“nStarting connection to server…”);

 // if you get a connection, report back via serial:

 if (client.connect(server, 80)) {

 Serial.println(“connected to server”);

 // Make a HTTP request:

 client.print(“GET “);

 client.println(location);

 client.println(“Host: theengineeringprojects.com”);

 // client.println(“Connection: close”);

 client.println();

 //readPage();

 }else{

 Serial.println(“connection failed”);

 }

 }

 void loop(){

while (client.available()) {

 c = client.read();

 Serial.write(c);

 CheckingStatus();

 }

if (!client.connected() && lastConnected) {

 Serial.println();

 Serial.println(“disconnecting.”);

 client.stop();

 }

 if(!client.connected() && (millis() – lastConnectionTime > postingInterval)) {

 PingRequest();

 }

 lastConnected = client.connected();

 }

 void PingRequest(){

 if (client.connect(server, 80)) {

 // Serial.println(“connected to server”);

 // Make a HTTP request:

 client.print(“GET “);

 client.println(location);

 client.println(“Host: theengineeringprojects.com”);

 client.println(“Connection: close”);

 client.println();

 //readPage();

 lastConnectionTime = millis();

 }else{

 //Serial.println(“connection failed”);

 client.stop();

 }

 }

 void CheckingStatus(){

 inString[stringPos] = c;

 if(c == ‘*’)

 {

 statusLed = inString[stringPos - 1];

 stringPos = 0;

 // Serial.write(statusLed);

 delay(500);

 UpdatingStatus();

 // delay(500);

 // client.flush();

 // delay(10000);

 //PingServer();

 }

 stringPos ++;

}

void UpdatingStatus(){

 if(statusLed == ’1')

 {

 digitalWrite(led1, HIGH);

 // Serial.write(‘OK’);

 }

 if(statusLed == ’2')

 {

 digitalWrite(led1, LOW);

 }

 if(statusLed == ’3')

 {

 digitalWrite(led2, HIGH);

 }

 if(statusLed == ’4')

 {

 digitalWrite(led2, LOW);

 }

 }

void printWifiStatus() {

 // print the SSID of the network you’re attached to:

 Serial.print(“SSID: “);

 Serial.println(WiFi.SSID());

// print your WiFi shield’s IP address:

 IPAddress ip = WiFi.localIP();

 Serial.print(“IP Address: “);

 Serial.println(ip);

// print the received signal strength:

 long rssi = WiFi.RSSI();

 Serial.print(“signal strength (RSSI):”);

 Serial.print(rssi);

 Serial.println(” dBm”);

 }
  • Przed nagraniem tego szkicu do naszego Arduino Shield, musimy zmienić kilka rzeczy, które napisałem pogrubioną czcionką w powyższym kodzie i wspomniałem poniżej:Teraz wszystko jest gotowe, więc włączamy swoje Arduino i upewniamy się, że ma połączenie z Wi-Fi, a następnie naciskamy przycisk LED 1 ON na swojej stronie internetowej. Jeśli wszystko poszło dobrze, to dioda na płytce Arduino zapali się.
    • SSID to nazwa naszego połączenia Wi-Fi,
    • pass to hasło do naszego połączenia Wi-Fi,
    • serwer to nazwa serwera, na którym strona jest umieszczana, czyli w moim przypadku jest to moja własna strona,
    • location jest lokalizacją pliku txt wygenerowanego przez stronę, powyższy kod strony wygenerował plik txt w tej samej lokalizacji i nadał mu nazwę data.txt więc po prostu go użyłem (ta część jest trochę zagmatwana, ale po dwukrotnym przeczytaniu będzie zrozumiała),
  • Dodałem komentarze w kodzie Arduino, ale jeśli mimo to pojawią się jakieś problemy, zachęcam do pytania w komentarzach, a postaram się je rozwiązać.
Uwaga: Przed rozpoczęciem czegokolwiek, najpierw należy uruchomić kod demo, który jest dostarczany z biblioteką Arduino i upewnić się, że nasza nakładka Arduino jest połączona z naszą siecią Wi-Fi. Należy podać link do pliku txt generowanego przez stronę, a nie do samej strony.

Artykuł Getting Data From Webserver using Arduino Wifi opracowano w wersji polskiej na podstawie współpracy z portalem www.theengineeringprojects.com.

1. Praktyczny Kurs Arduino - przewodnik po artykułach składających się na kurs 2. Czym jest Arduino? 3. Porównanie Arduino z Raspberry Pi 4. Instalacja sterownika Arduino w systemie Windows 5. Generowanie pliku hex w Arduino 6. Jak wgrać bootloader w Atmega328? 7. Rozpoczęcie pracy z oprogramowaniem Arduino 8. Rozpoczęcie programowania w Arduino 9. Programowe resetowanie Arduino 10. Wprowadzenie do Arduino UNO 11. Wprowadzenie do Arduino NANO 12. Wprowadzenie do Arduino Pro Mini 13. Wprowadzenie do Arduino Mega 2560 14. Wprowadzenie do Arduino Due 15. Wprowadzenie do Arduino Lilypad 16. Wprowadzenie do ATmega328 17. Biblioteka Arduino dla Proteusa 18. Projekt płytki drukowanej Arduino UNO dla Proteus ARES 19. Biblioteka Arduino Lilypad dla Proteusa 20. Odczyt z portu szeregowego Arduino 21. Projektowanie układów LCD z Arduino 22. Łączenie klawiatury z Arduino 23. Wartość ADC na LCD przy użyciu Arduino 24. Symulacja czujnika ultradźwiękowego w Proteusie 25. Połączenie czujnika ultradźwiękowego z Arduino 26. Wiele czujników ultradźwiękowych z Arduino 27. Czujnik temperatury 18B20 z Arduino 28. Jak używać 18B20 w Proteus ISIS? 29. Łączenie LM35 z Arduino w Proteusie 30. Współpraca siedmiosegmentowego wyświetlacza z Arduino w Proteusie 31. Łączenie czujnika PIR z Arduino 32. Współpraca czujnika płomienia z Arduino 33. Interfejs NRF24L01 z Arduino 34. NRF24L01+ i Arduino - Response Timed Out 35. Połączenie RFID RC522 z Arduino 36. Komunikacja Bluetooth z Arduino przy użyciu HC05 37. Sterowanie serwomotorem za pomocą Arduino w Proteusie 38. Projekt sterowania sygnalizacją świetlną przy użyciu Arduino 39. Przewijanie tekstu na matrycy LED 8×8 z użyciem Arduino 40. Inteligentny system oszczędzania energii 41. Komunikacja USB pomiędzy Androidem i Arduino 42. Automatyka domowa z użyciem XBee i Arduino 43. Domowy system bezpieczeństwa oparty na GSM 44. Wysyłanie SMS-ów za pomocą Arduino UNO i SIM900 45. Odbieranie SMS-ów za pomocą komend AT przy użyciu Arduino 46. Projekt rozpoznawania głosu przy użyciu EasyVR Shield 47. Rozpoczęcie pracy z programem EasyVR Commander 48. Połączenie EasyVR z Arduino UNO 49. Błąd szkolenia - niepowodzenie rozpoznawania w EasyVR 50. Połączenie XBee z komputerem 51. Wprowadzenie do modułu XBee 52. Interfejs XBee z Arduino 53. Rozpoczęcie pracy z kamerą Pixy 54. Jak zainstalować oprogramowanie kamery Pixy - PixyMon 55. Aktualizacja firmware kamery Pixy do najnowszej wersji 56. Jak wytrenować kamerę Pixy za pomocą komputera 57. Sterowanie kierunkiem obrotu silnika prądu stałego za pomocą Arduino 58. Sterowanie prędkością obrotów silnika prądu stałego za pomocą Arduino 59. Sterowanie kierunkiem obrotu silnika krokowego za pomocą Arduino 60. Sterowanie prędkością obrotów silnika krokowego za pomocą Arduino 61. Pobieranie danych z serwera internetowego za pomocą Arduino Wi-Fi 62. Wprowadzenie do Arduino YUN 63. Dostęp do serwera Linux Arduino YUN za pomocą Putty
Rozwiń cały spis treści Zwiń spis treści
Firma:
Tematyka materiału: Kurs Arduino, pierwsze kroki, Projekty Arduino, WiFi, ATmega32UC3, 802.11b/g
AUTOR
Źródło
www.theengineeringprojects.com
Udostępnij
Zobacz wszystkie quizy
Quiz weekendowy
Edukacja
1/10 Jak działa rezystor LDR?
Oceń najnowsze wydanie EdW
Wypełnij ankietę i odbierz prezent
UK Logo
Elektronika dla Wszystkich
Zapisując się na nasz newsletter możesz otrzymać GRATIS
najnowsze e-wydanie magazynu "Elektronika dla Wszystkich"