• Sonuç bulunamadı

ARDUINO WIFI SHIELD İLE ÇALIŞMAK

N/A
N/A
Protected

Academic year: 2022

Share "ARDUINO WIFI SHIELD İLE ÇALIŞMAK"

Copied!
14
0
0

Yükleniyor.... (view fulltext now)

Tam metin

(1)

ARDUINO WIFI SHIELD İLE ÇALIŞMAK

MALZEMELER: ARDUİNO IDE, BİLGİSAYAR, ARDUINO MEGA, ARDUINO WIFI SHIELD, CONNECTIFY

Arduıno WIFI SHIELD iLE çalışmak

malzemeler: arduino Ide, bilgisayar, ARDUINO MEGA, Arduıno wıfı shıeld, CONNECTIFY

Arduino gömülü sistemlerinde kullanılan bir diğer shield(katman) yapısı ise kablosuz ağ uygulamaları yapmamızı sağlayan Wi-Fi (Wireless Fidelity) yapılarıdır. Genel olarak internet üzerinden kontrol yapmamızı sağlayan birkaç basit yönerge ile kablosuz özelliklerine bağlanabiliyoruz. Her zaman olduğu gibi Arduino gömülü sistemlerine özel olarak tasarlanmış uyumlu yapısı ve internet

ortamında yer alan çeşitli örnek ve kod kütüphanelerinin yer alması WiFi shield’ın kullanılmasını hem cazip hale getiriyor hem de esnek bir kullanım sağlıyor. Genel olarak 5V ile çalışır ve 802.11b/g standartını kullanır. WEP, WPA2 bağlantılarını Arduino’nun SPI portu ile yapar ve Arduino’ya

kendisinin üzerinde bir mikro boyutta hafıza kartı olduğunu söyler. Ayrıca FTDI bağlantı kablo noktası ile seri Debug işlemi yapılabileceği gibi mini-USB portu ile de WiFi yazılımını güncelleyebiliyoruz. Yeni üretilmiş shield’ların üzerinde MAC adresleri yazar. Bu adresler donanıma ait benzersiz bir adres olup donanımın kimliğidir. Bizim ürünümüzde hegzadecimal olarak 90-A2-DA-0F-0D-D2 adresi etiketli.

Şekil 1: Arduino Wi-Fi Shield’ın kutusundan çıkartılması

3

(2)

[Pick the date] Page 2 Şekil 2: Arduino Wi-Fi Shield’ın üstten görünüşü

Şekil 3: Arduino Wi-Fi Shield’in MAC adresi ve alt görünüşü

(3)

[Pick the date] Page 3 Şekil 4: Arduino Mega ile birleştirildiğindeki görünüşü

İŞLEM 1: BULUNABİLİR BİR AĞIN ÖZELLİKLERİNE ULAŞMAK

Shield’ı yerleştirdikten sonra Arduino IDE’de File>>Example>>WiFi>>ConnectNoEncryption seçiyoruz ve gelen kodlarda ssid[]=’’ kısmında iki ayraç arasına bilgisayarımızın da gördüğü ağ adını yazıyoruz ve ardından kodları yükleyip seri monitörü çalıştırıyoruz.

Şekil 5: KYKWIFI isimli ağın özellikleri

(4)

[Pick the date] Page 4

İŞLEM 2: ORTAMDA YER ALAN WIFI CIHAZLARINI ARAMAK

Arduino’ya Wi-Fi Shield’ı eklediğimizde bilgisayarımızdan Arduino IDE’yi başlatıp sırasıyla

File>>Example>>WiFi>>ScanNetworks örneğini açıyor ve Arduino’ya yüklüyoruz. Program bize 10 saniyede bir yenileme yaparak internet kapsaması sunan WiFi modemleri listeleyecektir. Seri monitörü açtığımızda ilk satırda bizim Wi-Fi Shield’ın MAC adresi yazacaktır. Daha sonradan listelenen modemlerin sinyal güçlerini ve herhangi bir şifre içerip içermediğini gösterecektir.

Şekil 6: Ortamda yer alan kablosuz ağ sunucularının listelenmesi

İŞLEM 3: ARDUINO’YA BAĞLI BİR SİSTEMİN DURUMUNU İNTERNETTEN İZLEYEN WEB SERVER UYGULAMASI İLE DENETLENEN BİR BUTONUN BASILIP BASILMADIĞININ İNTERNETTEN TAKİBİ

Bu uygulamamızla Arduino Mega üzerine Arduino WiFi Shield oturtarak Arduino’nun 2 numaralı ucundan bir hat çekerek anahtarlama düzeneği devresini şekil 7’deki gibi kuruyoruz.

Şekil 7: Arduino’ya dışarıdan bağlanan buton ve direncin (10k) Frtizing’de çizilen board şeması

(5)

[Pick the date] Page 5

Devredeki buton bizim için fiziksel ortamda kontrolünü sağladığımız bir yüksek gerilim merkezinin kapısına denk olduğunu düşünelim. Kapının izinsiz açıldığı durumlarda internete kapının açıldığının haberi göndermek için Arduino’nun 2 numaralı bacağının özel kullanım şekli olan interrupt (kesme) özelliğinden faydalanıyoruz. Buna göre yazılımıda yer alan sürekli sorgulama bloğu zamana bağlı olarak devamlı kontrol ettiğinde eğer kapının açık olduğunu fark ederse internet sitesini güncelleyerek kapının açıldığını belirtecek. Kapının eski konumuna dönmesi için Arduino’yu resetlememiş gerektiğini unutmayalım.

Öncelikle çalıştığımız ortamda kablosuz ağ hizmetinin bulunması gerektiğini unutmayın. SSID olarak adlandırılan değer bizim kablosuz ağımıza daha önceden verdiğimiz isimdir. Bunu öğrenmek için windows’tayken bir ağa bağlan sayfasına tıklayıp bağlı bulunduğumuz/bulunacağımız ağın adını görebiliriz. Şekil 8’de bizim SSID’imiz KYKWIFI olarak yer almaktadır.

Şekil 8: Kablosuz modemin bize sunduğu bağlantı adı SSID olarak geçmektedir.

Şimdi ise Arduino IDE’ye yazacağımız kodlara bir gözatalım:

#include <SPI.h>

#include <WiFi.h>

char ssid[] = "Connectify-me"; //Modeminizin SSID adını aynen yazın char pass[] = "rilekez5"; // Varsa şifresini buraya yazın.

int status = WL_IDLE_STATUS;

boolean door_status = false; //Başlangıçta kapının kapalı olduğunu belirtiyoruz.

WiFiServer server(80);

(6)

[Pick the date] Page 6 void setup() {

Serial.begin(9600); //Seri monitöre 9600 Baud Rate ile haberleşiyoruz.

attachInterrupt(0, setDoorStatus, RISING);

while ( status != WL_CONNECTED) {

Serial.print("SSID ADLI MODEMi ARIYORUM: ");

Serial.println(ssid);

status = WiFi.begin(ssid,pass);

delay(8000); //8 saniye boyunca modemin var olup olmadığı aranır}

server.begin();

printWifiStatus(); //Modeme bağlanınca bildirim alınır}

void loop() {

WiFiClient client = server.available(); //Gelen bilgiler okunur if (client) {

Serial.println(“Yeni Client");

boolean currentLineIsBlank = true;

while (client.connected()) { if (client.available()) { char c = client.read();

Serial.write(c);

if (c == '\n' && currentLineIsBlank) { client.println("HTTP/1.1 200 OK");

client.println("Content-Type: text/html");

client.println("Connnection: close");

client.println();

client.println("<!DOCTYPE HTML>");

client.println("<html>");

(7)

[Pick the date] Page 7

client.println("<meta http-equiv=\"refresh\" content=\"5\">");

if (door_status == false){

client.print("KAPI NORMALDE KAPALI");

client.println("<br />");

client.write(c); } else { client.print("ALARM! KAPI ACILDI KONTROL EDIN! ");}

client.println("<br />");

client.println("</html>");

break; } if (c == '\n') {

currentLineIsBlank = true;}

else if (c != '\r') {

currentLineIsBlank = false; }}}

delay(1);

client.stop(); //Bağlantıyı kapatır Serial.println("client disonnected");}}

void printWifiStatus() { Serial.print("SSID: ");

Serial.println(WiFi.SSID());

IPAddress ip = WiFi.localIP();

Serial.print("IP Address: ");

Serial.println(ip);

long rssi = WiFi.RSSI();

Serial.print("signal strength (RSSI):");

Serial.print(rssi); Serial.println(" dBm");}

void setDoorStatus() { door_status = true;}

(8)

[Pick the date] Page 8 Şekil 9: Arduino IDE ve Seri monitör çıktısı

Şekil 10: Connectify programı ve seri monitörde kayıt tutmaları

(9)

[Pick the date] Page 9 Şekil 11: Android cihazımızdan uzaktan kontrol etme işlemi

Aynı anda modeme hangi cihazlar bağlı ise herbir cihaz 192.168.55.101 numaralı IP adresini varsayılan tarayıcılarında çalıştırdıklarında aynı durumu okur ve erişirler. Bu çalışmamızda Connectify uygulamasının 90 dakikalık bir deneme sürümünü kullandık. Android cihazda ve bilgisayardaki tarayıcımızda görüntüledik.

İŞLEM 4: ARDUINO’YA BAĞLI BİR SİSTEMİN DURUMUNU İNTERNETTEN İZLEYİP ZAMANA BAĞLI GRAFİK ÇİZDİREN PROJE

Eğer bir tesisin sıcaklığını uzaktan ölçmek istersek bunu Arduino ile nasıl yapardık? Özelikle bu konu başlı başına #InternetOfEverything veya #InternetOfThings konusuna girmektedir. Bu konu ile ilgili günümüzde halen daha birçok araştırma yapılmakta ve yeni servis sağlayıcıları ortaya

çıkmaktadır.

Öncelikle Arduino Mega ile Arduino WiFi Shield’i birleştiriyoruz. Bilgisayara USB B tipi kablo ile bağlıyoruz. Bu çalışmamızı gerçekleştirirken bağlı bulunduğumuz KYKWIFI’nin standartları gereği çalışmamıza pek uygun olmamaktadır çünkü WIFI shield için SSI gibi bir oturum açma hizmetiyle şimdilik ilgilenmiyoruz. Bunun oluşturduğu kod satırları oldukça fazla olabileceği için daha hızlı ve

(10)

[Pick the date] Page 10

esnek bir kullanım sunan www.Connectify.me programını kullandık. Bu programı internet stesinden indirip bilgisayarınıza kurunuz. Programı çalıştırıp Arduino’nun bu ağa bağlanmasını sağlayalım.

Şekil 12: Connectify.me kurulumu için internetten indirme ekranı

Şekil 13: Connectify programının çalıştırılmasıyla WiFi shield üzerinde LINK LED’i yeşil olacaktır.

(11)

[Pick the date] Page 11

Şimdi ise Arduino’yu istediğimiz işi yapması için programlayacağımız kodları yazalım:

#include <SPI.h>

#include <WiFi.h>

#define APIKEY "nnnn" // xively API no

#define FEEDID nnnn // Xively Apı no

#define USERAGENT "My Arduino Project" // Buraya bir isim verebilirsiniz.

char ssid[] = "Connectify-me"; // Kablosuz modemin SSID adı char pass[] = "*****"; // internet bağlantısı için ağ şifresi

int status = WL_IDLE_STATUS; WiFiClient client;

IPAddress server(216,52,233,121); //char server[] = "api.xively.com";

unsigned long lastConnectionTime = 0;

boolean lastConnected = false;

const unsigned long postingInterval = 10*1000;

void setup() { Serial.begin(9600); while (!Serial) { ; } if (WiFi.status() == WL_NO_SHIELD) { Serial.println("WiFi shield not present"); while (true);} String fv = WiFi.firmwareVersion();

if ( fv != "1.1.0" ) Serial.println("Please upgrade the firmware");

while ( status != WL_CONNECTED) { Serial.print("Attempting to connect to SSID: ");

Serial.println(ssid); status = WiFi.begin(ssid, pass); delay(10000); } printWifiStatus();} void loop() { int sensorReading = analogRead(A0);

while (client.available()) { char c = client.read(); Serial.print(c); } if (!client.connected() && lastConnected) {

Serial.println(); Serial.println("disconnecting."); client.stop();}

if (!client.connected() && (millis() - lastConnectionTime > postingInterval)) { sendData(sensorReading); } lastConnected = client.connected();}

void sendData(int thisData) { if (client.connect(server, 80)) { Serial.println("connecting..."); client.print("PUT /v2/feeds/");

(12)

[Pick the date] Page 12

client.print(FEEDID); client.println(".csv HTTP/1.1"); client.println("Host: api.xively.com");

client.print("X-ApiKey: "); client.println(APIKEY); client.print("User-Agent: ");

client.println(USERAGENT); client.print("Content-Length: ");

int thisLength = 8 + getLength(thisData); client.println(thisLength);

client.println("Content-Type: text/csv"); client.println("Connection: close");

client.println(); client.print("sensor1,"); client.println(thisData);}

else { Serial.println("connection failed"); Serial.println(); Serial.println("disconnecting.");

client.stop(); } lastConnectionTime = millis(); }

int getLength(int someValue) { int digits = 1; int dividend = someValue / 10;

while (dividend > 0) { dividend = dividend / 10; digits++; }

return digits;} void printWifiStatus() { Serial.print("SSID: "); Serial.println(WiFi.SSID());

IPAddress ip = WiFi.localIP(); Serial.print("IP Address: "); Serial.println(ip);

long rssi = WiFi.RSSI(); Serial.print("signal strength (RSSI):"); Serial.print(rssi); Serial.println(" dBm");}

Kodlarla ilgili daha detaylı bilgi için: http://arduino.cc/en/Tutorial/WiFiXivelyClientString Sistemimizi internet üzerinden izlememiz için Xively.com sitesinden ücretsiz geliştirici (developer) üyeliği alıyoruz.

Şekil 14: Xively.com sitesine üyelik kayıt formu

(13)

[Pick the date] Page 13

Üyeliğinizi mail adresinize giden onaylama bağlantısına tıklayarak aktifleştirip internet sayfasına geri geldiğinizde üst tarafta yer alan “Develop” yazısına tıklıyoruz. Arduino cihazımızı tanımlıyoruz. Bu kısımdan Public Device seçiyoruz ki elde ettiğimiz verileri internetten açık olarak takip edelim.

Şekil 15: Xively’de yeni cihaz oluşturmak

Yeni cihazımızı oluşturduktan sonra API KEY numaramızı ve FEED ID numaramızı öğrenip Arduino IDE’de ilgili yere yerleştiriyoruz.

(14)

[Pick the date] Page 14 Şekil 16: API KEY ve FEED ID’yi öğrenip Arduino IDE’ye tanıtıyoruz.

Aşağıda bizim uygulamamızda yer alan ve yaklaşık olarak değer aldığımız çıktılar var.

Şekil 17: Çevirimiçi olarak elde ettiğimiz grafiklerin 5’er dakikalık veya 30’ar dakikalık çizimi

Referanslar

Benzer Belgeler

Arduino DUE kartı diğer kartlardan çok daha farklı olup 32 Bit işlemciye sahip ilk Arduino modelidir.. Üzerinde ARM mimarisine sahip 32 Bitlik işlemci

■ 21-Arduino Delay, DelayMicroseconds, Milis ve Micros Komutlarının Kullanımı. ■

ARDUİNO UYGULAMALARI 2. Mustafa

HC-SR04 ultrasonik sensör ile mesafe ölçümü ve ekranda gösterilmesi devresinde kullanılan malzemeler. Ad

Dijital bir pin çıkış olarak ayarlandığında, ayarlanan pine LOW veya HIGH yazmak için kullanılır.. LOW değeri pini 0V (GND) seviyesine çeker, HIGH değeri ise arduino

Blink programını Arduino’ya atmak için aşağıdaki fotoğrafta kırmızı daire içerisine aldığımız, üzerinde sağa doğru ok olan butona tıklıyoruz.. Böylece, konsolun

Kodla(Ma)nisa Arduino Eğitim sunumu

Kızılötesi ışınım yapacak olan ledler TS EN 120002 ‘ İnfrared ışık yayan diyotlar, infrared ışık yayan diyot dizileri’, alıcı devre olarak fototransistörler