Croduino NOVA kao AP(Access point)

Početnik si s Croduinom. Ili s elektronikom? Za oko ti je zapeo određeni modul, ali ne znaš kako ga koristiti? Bez brige, tu je KKM! Kako Koristiti Module (KKM) je serija blog tutorijala e-radionice na kojoj ćeš pronaći sve što ti treba kako bi započeo rad sa svojim omiljenim modulom. Tutorijali obuhvaćaju: tehničke karakteristike, princip rada, upute kako povezati modul s Croduinom te osnovni kod. Sve ostalo prepuštamo tebi na maštu.

UVOD

 
Sigurno ste nekada imali ideju da napravite projekt kojim kontrolirate uređaje putem pametnog telefona ili računala, a sada vam donosimo tutorijal u kojemu opisujemo baš to. Koristit ćemo Croduino Nova 2 kao AP(access point) kako bi se mogli povezati na njega te upravljati nekim uređajima(npr. rasvjetom u našem slučaju). Što je AP, te kako postaviti Croduino Nova 2 da radi kao AP te upravljati uređajima povezanim na njegove pinove opisano je u nastavku tutorijala.

ŠTO JE AP?

 
AP(access point ili wireless AP) ili pristupna točka je uređaj koji omogućuje drugim uređajima da se pomoću neke vrste komunikacije( najčešće WiFi) spajaju na njega te imaju pristup internetu preko toga uređaja. Naša wireless kućna mreža je jedan primjer AP na koji se spajamo s raznim uređajima te imamo pristup internetu. S Croduino Nova 2 nećemo omogućiti pristup internetu nego ćemo na omogućiti da upravljamo Croduino pinovima odnosno uređajima koji su spojeni na te pinove.
Kada se povežemo s mobilnim uređajem ili računalom putem WiFi mreže na naš Croduino potrebno je otvoriti web stranicu u pregledniku unoseći IP adresu (ako nismo mijenjali u WiFI biblioteci je postavljena na 192.168.4.1).
Ovo je slično kao server način rada Croduino Nova 2 jedino što se ovdje ne spajamo na lokalnu mrežu nego sa Croduinom kreiramo lokalnu mrežu( odnosno AP) na koju se mogu spojiti drugi uređaji. Prednost ovoga je što ne moramo imati poseban uređaj (ruter) na kojem bi kreirali lokalnu mrežu te povezali Croduino i mobilni uređaj ili računalo.

ARDUINO KOD

 
Ako do sada niste dodali Croduino Nova 2 u Arduino IDE, te ako prvi puta koristite Croduino Nova 2 onda pogledajte tutorijal kako programirati Croduino Nova 2 iz Arduino IDE.
U kodu koristimo biblioteku ESP8266WiFi, ali ju nije potrebno instalirati jer kada dodamo u bord manager ESP8266 modul onda se instalira i ova biblioteka.
Za korištenje Croduina NOVA kao AP nije potrebno ništa mijenjati na njemu samo uploadamo odgovarajući kod te Croduino postaje AP. Kako bi testirali rad na pin 4 i 5 ćemo spojiti LED diode s odgovarajućim otpornikom za svaku diodu. Kada se povežemo na Croduino, te odemo na web stranicu trebali bi dobiti prikaz kao na slici. Kada kliknemo na LED ON palimo LED diodu, a s LED OFF gasimo LED diodu koja je povezana na pin 4. Isto to imamo i za led diodu koja je povezana na pinu 5, a ispred svake grupe tipki se ispisuje stanje LED diode kojom upravljanju tipke.
 

 
Dolje na slici vidimo kako izgleda prikaz na mobitelu za jednu LED diodu i kao što vidimo sve je odgovarajuće veličine jer smo u kodu za web stranicu dodali dio koji skalira prikaz stranice ovisno o uređaju na kojem se prikazuje.
 

//uključujemo ESP8266WiFi biblioteku koja nam omogućuje rad s WiFijem na ESP8266 modulu
#include <ESP8266WiFi.h>
// postavljamo lozinku za naš AP( našu mrežu) i naziv našeg AP-a
const char AP_Password[] = "12345678";
const char AP_Name[] = "Croduino_AP";
//konstruktor za ESP866WiFi biblioteku kojemu predajemo broj porta za naš AP
WiFiServer server(80);
// Stingovi u kojima je spremljena web stranica koja će se prikazivati kada u preglednik unesemo IP adresu
String header = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n";
// string html1_1 nam služi za prikaz stranice te za podešavanje određenih parametara(boja, veličinu slova, veličinu tipki)
//na početku postavljamo skaliranje stranice kako bi nam se stranica na mobitelu prikazala u pravoj veličini
String html_1 = "<!DOCTYPE html><html><head><meta name='viewport' content='width=device-width,"
" initial-scale=1.0'/><meta charset='utf-8'><style>body {font-size:140%;}"
" #main {display: table; margin: auto; padding: 0 10px 0 10px; } h2,{text-align:center; }"
" .button { padding:10px 10px 10px 10px; width:100%; background-color: #4CAF50; font-size: 120%;}</style>"
"<title>AP LED</title></head><body><div id='main'><h2>Kontrola LED diode</h2>";
//String u koji spremamo status led diode( tekst koji se ispisuje kada je LED dioda upaljena odnosno ugašena)
String html_LED = "";//status 1 LED diode
String html_LED2=""; //status 2 LED diode
//postavljamo tipku za paljenje i gašenje diode
String html_2 = "<form id='F1' action='LEDON'><input class='button' type='submit' value='LED ON' ></form><br>";
String html_3 = "<form id='F2' action='LEDOFF'><input class='button' type='submit' value='LED OFF' ></form><br>";
//ovdje možemo dodati još koju tipku samo promijenimo naziv i id ( vidljivo u primjeru za drugu diodu)
String html1_4="<form id='F3' action='LED2ON'><input class='button' type='submit' value='LED 2 ON' ></form><br>";
String html1_5="<form id='F4' action='LED2OFF'><input class='button' type='submit' value='LED 2 OFF' ></form><br>";
//oznake za zatvaranje html koda
String html_end = "</div></body></html>";
// string u koji spremamo zahtjev klijenta( uređaj koji se poveže na naš AP)
String request = "";
int LED_Pin = 4; //pin na koji je povezana LED dioda
int LED2_Pin=5; //pin na koji je povezana 2 LED dioda
void setup()
{
pinMode(LED_Pin, OUTPUT); //postavljamo LED_Pin kao izlaz
pinMode(LED2_Pin, OUTPUT); //postavljamo LED2_Pin kao izlaz
//kreiramo naš AP s imenom i lozinkom koje smo postavili na početku
boolean conn = WiFi.softAP(AP_Name, AP_Password);
//pokrećemo server
server.begin();
}
void loop()
{
//provjeravamo dali imamo klijenta koji je povezan na naš AP(sve dok nema ponavljamo postupak provjere)
WiFiClient client = server.available();
if (!client) { return; }
//pročitamo prvu liniju zahtijeva klijenta koji je povezan na naš AP
request = client.readStringUntil('\r');
//provjeravamo dali u zahtjevu klijenta imamo LEDON te ako imamo palimo LED diodu
if ( request.indexOf("LEDON") > 0 ) { digitalWrite(LED_Pin, HIGH); }
//provjeravamo dali u zahtjevu klijenta imamo LEDOFF te ako imamo gasimo LED diodu
if ( request.indexOf("LEDOFF") > 0 ) { digitalWrite(LED_Pin, LOW); }
//provjeravamo zahtjev za drugi LED diodu
if ( request.indexOf("LED2ON") > 0 ) { digitalWrite(LED2_Pin, HIGH); }
if ( request.indexOf("LED2OFF") > 0 ) { digitalWrite(LED2_Pin, LOW); }
//provjeravamo stanje LED diode tako što očitavamo pin na koji je spojena te ovisno o rezultatu ispisujemo tekst dali je upaljena ili ugašena
if (digitalRead(LED_Pin) == HIGH) { html_LED = "LED dioda je upaljena<br><br>"; }
if(digitalRead(LED_Pin) == LOW) { html_LED = "LED dioda je ugašena<br><br>"; }
//provjera stana za drugu LED diodu
if (digitalRead(LED2_Pin) == HIGH) { html_LED2 = "LED2 dioda je upaljena<br><br>"; }
if(digitalRead(LED2_Pin) == LOW) { html_LED2 = "LED2 dioda je ugašena<br><br>"; }
client.flush();
// šaljemo klijentu naš html kod koji se njemu prikazuje kao web stranica( svaki string je dio stranice)
client.print( header );
client.print( html_1 );
client.print( html_LED );
client.print( html_2 );
client.print( html_3 );
//slanje koda za 2 LED diodu
client.print(html_LED2);
client.print(html1_4);
client.print(html1_5);
//ovdje dodati slanje koda za sve tipke( prije slanja html_end Stringa)
client.print( html_end);
delay(5);
}
Leave a Reply