KKM: ENC28J60 ETHERNET
Početnik si s Dasduinom. 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 soldered 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 Dasduinom te osnovni kod. Sve ostalo prepuštamo tebi na maštu.
UVOD
U ovom tutorijalu ćemo se upoznati s ethernet modulom ENC28J60 koji nam omogućuje spajanje na Internet putem Dasduina. Modul možemo koristiti kada želimo upravljati nekim procesom ili uređajem preko interneta(lokalne mreže na koju je spojen modul i mobitel ili računalo s kojim mijenjamo parametre), ili ako želimo slati očitanja raznih senzora na neki web poslužitelj i tamo ih pohranjivati. Za korištenje modula potrebno je poznavati osnove HTML-a kako bi mogli napraviti jednostavne stvari s modulom i Dasduinom. Ako želimo da nam se na stranici podaci sa senzora prikazuju grafički morat ćemo koristiti i CSS, a ako želimo samo ispisati tekst dovoljan nam je HTML.
Karakteristike senzora:
•Napajanje: 3.3V ili 5V
•Komunikacija: SPI
•Ethernet konektor: HR911105A
KAKO MODUL RADI?
Za početak ćemo se upoznati s radom modula i načinom na koji ga spajamo na Dasduino i lokalnu mrežu. Modul na sebi ima ENC28J60 čip koji omogućuje komunikaciju između lokalne mreže i Dasduina. Čip s mikrokontrolerom komunicira preko SPI komunikacije što ga čini jednostavnim za spajanje i korištenje. Kako biste se bolje upoznali kako rade Internet protokoli koji se koriste za spajanje na Internet pomoću ovog i sličnih modula, te što su IP i MAC adrese možete pogledati tutorijal o Ethernet modulu W5100.
KAKO POVEZATI MODUL?
Modul je jednostavno povezati jer koristi SPI komunikaciju te je potrebno spojiti odgovarajuće pinove modula na pinove Dasduina zadužene za SPI komunikaciju. Na shemi vidimo gdje se koji pin modula povezuje na Dasduino, te je još stavljena i LED dioda na pin 4 kako bi odmah mogli testirati kod koji je dan u primjeru. Kako bi modul ispravno radio potrebno mu je dovesti vanjsko napajanje od 5V, ali je također potrebno spojiti GND pin napajanja sa GND pinom Dasduina kako bi imali referentnu točku.
ARDUINO KOD
Kako bi koristili ENC28J60 ethernet modul sa Dasduinom potrebno je preuzeti biblioteku koja služi za rad s ethernet modulom jer nam biblioteka koja je instalirana s Arduino Ide ne odgovara za naš modul. Biblioteka koju koristimo u primjeru i koju trebamo preuzeti je UIPEthernet. Ako ne znate kako instalirati biblioteku pogledajte tutorijal u kojemu je objašnjen postupak instalacije.
Primjer koda nam u web pretraživaču otvara web stranicu na kojoj imamo dvije tipke za paljenje i gašenje LED diode koja je spojena na pin 4. Na stranici se također ispisuje stanje LED diode kako bismo znali dali je upaljena ili ugašena.
#include "UIPEthernet.h" //uključujemo biblioteku UIPEthernet koja služi za rad s ENC28J60 ethernet shield-om
int
LED1=4;
//pin na koji spajamo LED diodu
int
val_LED1=0;
//varijabla u koju spremamo stanje LED diode
String
readString;
// string koji nam služi za spremanje zahtijeva korisnika koji posjećuje stranicu
EthernetServer server = EthernetServer(80);
//Inicijalizacija biblioteke koja izvršava sve funkcije vezane uz Web server (primanje zahtjeva, obrada zahtjeva i slanje podataka)
//80 unutar zagrada označava port naše web stranice (web stranice, odnosno HTTP uvijek ima port 80)
void
setup
()
{
pinMode
(LED1,
OUTPUT
);
//postavljamo pin na koji je spojena LED dioda kao izlazni
digitalWrite
(LED1,
LOW
);
//pin postavljamo na LOW, odnosno gasimo LED diodu
Serial.begin(9600);
//Inicijalizacija serijske komunikacije
uint8_t mac[6] = {0x00,0x01,0x02,0x03,0x04,0x05};
//postavljanje MAC adrese
IPAddress myIP(192,168,1,156);
//postavljanje IP adrese(ovu adresu upisujemo u web preglednik kako bi pristupili našoj stranici)
Ethernet.begin(mac,myIP);
//Inicijaliziraj biblioteku i Ethernet sa zadanom MAC adresom i IP adresom
server.begin();
//Server počinje s radom
Serial.print(F(
"Server je aktivan na IP adresi "
));
//Ispisi preko koje IP adrese možemo pristupiti našem serveru
Serial.print(Ethernet.localIP());
}
//funkcija u kojoj provjeravamo zahtjev sa stranice i palimo ili gasimo LED diodu
void
StateLED(EthernetClient cl)
{
//ako nam se u stringu vrati "on1" onda palimo LED diodu i ispisujemo poruku na Serial monitor
if
(readString.indexOf(
"on1"
) >0)
{
digitalWrite
(LED1,
HIGH
);
Serial.println(
"Upaljena LED dioda"
);
}
//ako nam se u stringu vrati "off2" onda gasimo LED diodu i ispisujemo poruku na Serial monitor
if
(readString.indexOf(
"off2"
) >0)
{
digitalWrite
(LED1,
LOW
);
Serial.println(
"Ugašena LED dioda"
);
}
}
//funkcija za promjenu stanja led diode na stranici(ako ju upalimo ili ugasimo)
void
Changetext(EthernetClient cl){
val_LED1 =
digitalRead
(LED1);
//u varijablu val_LED1 spremamo stanje pina na koji je spojena LED dioda
Serial.println(val_LED1);
//ispisujemo stanje pina na Serial monitor
if
(val_LED1 ==
HIGH
){
//provjeravamo dali je LED dioda upaljena
cl.println(
"ON"
);
//ispisujemo na stranici da je LED dioda upaljena
}
else
{
//ako LED dioda nije upaljena onda ispisujemo da je ugašena
cl.println(
"OFF"
);
}
}
void
loop
(){
//
EthernetClient client = server.available();
//Provjeravamo stanje servera, da li imamo nekoga tko nam se spojio na njega
//ako je netko spojen na server u while petlji provjeravamo dali je spojen i dok je čitamo njegove zahtjeve
if
(client) {
while
(client.connected()) {
if
(client.available()) {
char
c = client.read();
//čitamo znak po znak korisnikov zahtjev
if
(readString.length() < 100) {
//spremamo znak koji smo pročitali u String readString
readString += c;
}
//kada je zahtjev završen ispisujemo našu stranicu kao odgovor
if
(c ==
'\n'
) {
client.println(
"HTTP/1.1 200 OK"
);
//pošalji novu stranicu
client.println(
"Content-Type: text/html"
);
client.println(F(
"Connection: close"
));
client.println();
client.println(F(
"<!DOCTYPE HTML>"
));
client.println(F(
"<html>"
));
client.println(F(
"<title>Croduino Web server</title></html>"
));
client.println(F(
"Croduino web server :)"
));
client.println(
"<head>"
);
client.println(
"<meta http-equiv='refresh'content='3 ;url=$$$$'>"
);
//dio koda koji osvježava stranicu svake 3 sekunde
client.println(
"</head>"
);
client.println(
"<body>"
);
client.println(
"<h1>Kontrola LED diode sa Croduinom</h1>"
);
// tipke na našoj stranici
client.println(
"Stanje LED diode: "
);
StateLED(client);
//funkcija u kojoj provjeravamo stanje i palimo/gasimo LED diodu
Changetext(client);
//funkcija u kojoj ispisujemo stanje LED diode
//tipka za paljenje LED diode
client.println(
"<input type=button value=ON onmousedown=location.href='/on1'>"
);
client.println(
" "
);
//tipka za gašenje LED diode
client.println(
"<input type=button value=OFF onmousedown=location.href='/off2'>"
);
client.println(
" "
);
client.println(
"</body>"
);
client.println(
"</html>"
);
delay
(1);
//Pričekaj malo da korisnikov mobitel ili računalo primi Web stranicu
//Prekini vezu s korisnikom
client.stop();
readString=
""
;
//obrišemo String u kojem je bio spremljen korisnikov zahtjev kako bi se ponovno mogao spremiti drugi zahtjev
}
}
}
}
}