Arduino(Ethernet Shield)'nun Web Server Olarak Kullanımı
Problem
Arduino ve Ethernet Shiled ile web server elde etmek istiyoruz. Örneğin, web browser ?ımızda Arduino analog pinlerine bağlı sensörlerimizden ölçtüğümüz değerleri görüntülemek istiyoruz.
Çözüm
Önceki twitter yazımızdaki gibi ilk önce Ethernet ve IP ayarlarımızı yapacağız ardından analog Pin?lerden okunulan değerleri, program içerisinde girdiğimiz IP adresini Web Browser?ımıza girerek görüntüleyeceğiz.
Gerekli Olan Elemanlar
–Arduino Uno veya benzeri?
-Kablo veya jumper kullanın daha pratik olur.
-Bir tane de kitabınız olsun başucunuzda. Arduino hakkında yazılmış tek Türkçe kitap olan Elektronik Mühendisi Coşkun Taşdemir?in kitabı burada kullandığımız analoglar hakkında detaylı bilgileri almanızı sağlayacaktır.
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; /* Media Access control – ortam erişim kontrolü, 6 byte?tan oluşmakta ethernet donanım adresi diyebiliriz Ethernet modulleri üzerinde de yazılır. Robotistan Ethernet Module sayfasında alttan çekilen fotoğrafta yeralmakta – (Şekil-1) */
Şekil-1 Arduino Ethernet Shield alt kısım (MAC adress)
byte ip[] = { 192, 168, 1, 177}; // cihaz IP adresimiz.
EthernetServer server(80); /* PC?miz için varsayılan telnet portumuz hadi biz buna HTTP Kontrol Portu diyelim(port 80).*/
void setup()
{
Ethernet.begin(mac, ip); /* sadece mac ve ip başlatmak yeterli. Eğer yukarıda gateway ve subnet?te belirtseydik burada onlarıda eklerdik(mac,ip,gateway,subnet) şeklinde ve onları da başlatmış olurduk.*/
server.begin(); /*bu komut server?ımızı azarlar ve gelen bağlantıları dinlemesini emreder*/
}
void loop()
{
EthernetClient client = server.available(); /* Eğer web browser’ın okumak için hiçbir data?sı yok ise bu nesne (aşağıda örnek kod içerisinde belirtildiği üzere) bir if ifadesi içerisinde false olarak değerlendirilecek. Hadi devam edelim şimdi istemciye şartlarımızı söyleyelim bilgilerimizi alacak bir sensör bilgisi bile bizim için önemli, ağırdan satalım onun için. */
if (client) {
boolean current_line_is_blank = true; /* bir http isteği boş bir satır ile biter*/
while (client.connected()) {
if (client.available()) {
char c = client.read();
/*eğer satır sonuna gelindi ise ve bu satır boş ise http isteğimiz sona erdi demektir. Dolayısıyla bir cevap gönderebiliriz. */
if (c == ‘\n’ && current_line_is_blank) {
client.println(“HTTP/1.1 200 OK”); // standart http yanıt başlığı gönderir
client.println(“Content-Type: text/html”);
client.println();
for (int i = 0; i < 7; i++) { /*Döngümüzü yazıyoruz kaç tane sensör varsa o kadar değişken giriyoruz döngü içerisine o kadar input değeri vardır.
/*web browser?a analog input?lardan okunan değerlerimizi yazdırmak istiyoruz. */
client.print(“analog input “);
client.print(i); //hangi analog input olduğu yazılsın.
client.print(” is “);
client.print(analogRead(i));/* i. inci analog pine bağlı sensörden okunan değeri browser?a yazdırıyoruz.*/
client.println(“<br />”); /* browser?ımızda(?html?den hatırlarız.) bir satır atlatalımda veriler birbirine girmesin*/
/** Bu ?client.print? lardan sonra şu şekilde çıkışlar görüntüleyeceğiz.
?Analog input 0 is 0.06
Analog input 1 is 0.7?
Analog input 2 is 0.7?
Analog input 3 is 0.7?
Analog input 4 is 0.7?
Analog input 5 is 0.7?
Analog input 6 is 0.7?
?
**/
}
break;
}
if (c == ‘\n’) {
current_line_is_blank = true;// Yeni bir satıra başlıyoruz.
} else if (c != ‘\r’) {
current_line_is_blank = false;
}
}
}
delay(1);// browser?ımıza verileri almak için biraz zaman verelim
client.stop();
}
}
SONUÇ
Böylelikle arduino analog pinlerinden okuduğumuz değerleri Ethernet module aracılığı ile web browser?ımızda local IP adresimiz üzerinden görebileceğiz. Daha ucuz Ethernet Shield’ler kullanarak bu işlemleri yapabilirsiniz. Bunun için İsmail Buçgün‘ün yazmış olduğu yazıyı da okuyabilirsiniz . Yazı da belirtilen Arduino bağlantılarını kullanarak gayet ucuz bir web server elde edebilirsiniz. Kolay gelsin.
Kaynaklar
– http://arduino.cc/en/Reference/ServerAvailable
– http://arduino.cc/en/Reference/ClientConnected
– http://arduino.cc/it/Reference/ClientAvailable
– http://arduino.cc/it/Reference/ClientRead
– http://arduino.cc/en/Reference/Ethernet
–Arduino cookbook**

