Croduino NOVA kao client (a.k.a. Kako otvoriti web stranicu s Croduino NOVA?)

Kratak uvod

Prva stvar koju ćete vjerojatno napraviti s Vašom brand-new Croduino NOVOM je otvoriti web stranicu. Vjerojatno da provjerite jel se stvarno ta mala pločica može povezati na internet putem WiFija i stvarno funkcionira. Pa ćete otvoriti nekakvu web stranicu. Ili ćete htjeti poslati podatke u obliku URL-a na nekakvu bazu(tipa data.sparkfun.com ili dweet.io). U ovom mini-projektu ćemo napraviti upravo to, otvoriti stranicu identično kako bismo to napravili u browseru. Samo što će ovdje Croduino NOVA oponašati browser i davati nam rezultat u Serial Monitoru. Sve ovo znači da je pločica client. Ono što drugo može biti je server, a to bi značilo da se na nju povezujemo putem drugih uređaja, tj. da ona pruža usluge drugim uređajima.

esp12

Arduino kod

Kroz popis svega što nam treba za projekt nećemo prolaziti, jer se radi o Croduino NOVA i kompjuteru s Arduino IDE instaliranim i ubačenim ESP8266 board-sima. Tj., da ste u mogućnosti programirati Croduino NOVU.
 
Jej, krenimo! Ovako izgleda naš Arduino kod. Kopirajte ga u Arduino IDE, odaberite ispravne opcije za Croduino NOVA(Tools->Board->Generic ESP8266 Board, Tools->Flash size->4M(1M SPIFFS)-, Tools->Reset Method->nodemcu, Tools->Board->*Vaš Serial port za Croduino NOVA*). Stisnite upload i gledajte plavu i crvenu LEDicu kako bljeskaju :)

#include "ESP8266WiFi.h"
 
const char* ssid     = "your-ssid";  // naziv Vaše WiFi mreže
const char* password = "your-password"; // lozinka Vaše WiFi mrežu
 
const char* host = "google.com"; // stranica koju želimo otvoriti. Ovdje napisite samo domenu, bez path-a
 
void setup() {
  Serial.begin(115200); // započinjemo serijsku komunikaciju
  delay(10);
   
  WiFi.begin(ssid, password); // za početak se povezujemo na WiFi mrežu
   
  while (WiFi.status() != WL_CONNECTED) { // sve dok se NOVA ne poveže na WiFi mrežu
    delay(500);                           // ispisujemo točkice u Serial monitoru
    Serial.print(".");                    // čisto zbog nas, da znamo što se događa
  }
 
  Serial.println("Povezani smo na WiFi! IP adresa je: ");  
  Serial.println(WiFi.localIP()); // ispisuje lokalnu WiFi adresu NOVE
  Serial.print("Sada se povezujem na ");
  Serial.println(host); // URL stranice na koju se povezujemo
   
  WiFiClient client; // kreiramo objekt klase WiFiClient za TCP konekciju
  if (!client.connect(host, 80)) // 80 je port na kojega se povezujemo
                                 // HTTP port, gotovo uvijek ćete koristiti 80
  {  
    Serial.println("Ne mogu se spojiti na stranicu.."); // ako je spajanje neuspješno
    return; // završi s izvođenjem programa
  }
   
  String url = "/";    // budući da smo sada samo povezani na server(stranicu), 
                       // trebamo još otvoriti nešto s nje (path)
                       // želimo početnu google stranicu, pa neka bude samo /
   
  Serial.print("Povezani smo na stranicu. Sada cemo otvoriti URL: ");
  Serial.println(url);
   
  // Ovo salje zahtjev(GET request) stranici. Istu stvar radi browser u pozadini
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" + 
               "Connection: close\r\n\r\n");
  delay(10);
   
  // Čitamo odgovor servera na naš zahtjev te taj isti odgovor printamo u Serial monitor
  while(client.available()){
    String linija = client.readStringUntil('\r'); // printa liniju po liniju
    Serial.print(linija);
  }
   
  Serial.println("Gotovo. Prekidamo konekciju.");
}
 
void loop() { // u loop-u ne radimo ništa, dosta je jednom učitati stranicu
}

Sve što preostaje je pogledati rezultat našeg očitavanja u Serial monitoru. Na početku imamo odgovor od servera, sličan obliku u kojemu smo mi poslali naš GET zahtjev. Nakon toga dobivamo čisti HTML kod stranice koje smo htjeli otvoriti koji započinje s . Ovisno o stranici koju otvaramo, naravno, dobit ćemo HTML kod za svaku od njih. Ako šaljemo nekakve informacije ne neki server(tipa data.sparkfun.com), dobit ćemo odgovor našem zahtjeva, koji će obično sadržavati informacije kao što su: jel zahtjev ispravan, vrijeme primanja zahtjeva, jedinstveni kod zapisa u bazi itd. To izgleda nekako ovako:

Screen Shot 2016-08-18 at 13.34.54

Čini se da na google.com/ postoji redirect na http://www.google.hr/?gfe_rd=cr&ei=H521V4q4NKns8wfxs4rgBw, u mom slučaju. Vi ćete dobiti malo drukčiji gfe_rd. Imajte na umu da na ovaj način ćete moći ovoriti stranice koje rade na https-u, tj. koriste SSL certifikat(kao npr. e-radionica.com).

TO JE TO

Ozbiljno. Povezali smo se na web stranicu i dobiti kod. Ili smo nešto poslali. Naš Croduino NOVA uistinu je bio client na internetu.

Što napraviti kada ne radi?

Može biti da ste ukucali krivi SSID ili lozinku za Vašu WiFi mrežu. To će izgledati nekako ovako(so fix it!):

Screen Shot 2016-08-18 at 13.43.13

Ako se probate spojiti na web stranicu koja radi preko HTTPS protokola, tj. ima SSL certifikat, nećete dobiti odgovor. U ovome trenu ne pokrivamo otvaranje stranica na HTTPS-u koristeći Croduino NOVA.
Screen Shot 2016-08-18 at 13.47.20

Što dalje?

- Croduino NOVA kao server
- Pošaljite informacije na bazu na internetu i očitajte ih s udaljene lokacije

One thought on “Croduino NOVA kao client (a.k.a. Kako otvoriti web stranicu s Croduino NOVA?)”

  • Mladen Dugacki
    Mladen Dugacki 13.11.2016 at 22:25

    Molio bi deteljnije objasnjenje o povezivanju CRODUINO-NOVA na internet kao server. Kako mi je poznato ruter dobiva dinamicki IP. Postoje stranice koje daju trenutnu IP vaseg rutera, ali to nije rjesenje.
    Isto tako znam da postoje servisi koji rjesavaju navedeni problem, jasno uz odredjenu pretplatu. U koliko znate takav servis javite mi.
    Unapred zahvaljujem.

    Reply
Leave a Reply