Arduino Wi-Fi Shield İle Çalışmak

Transkript

Arduino Wi-Fi Shield İle Çalışmak
ARDUINO WIFI SHIELD İLE ÇALIŞMAK
MALZEMELER: ARDUİNO IDE, BİLGİSAYAR, ARDUINO MEGA, ARDUINO WIFI SHIELD, CONNECTIFY
3
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ı
Ş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üşü
[Pick the date] Page 2
Ş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
[Pick the date] Page 3
İŞ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ı
[Pick the date] Page 4
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";
char pass[] = "rilekez5";
//Modeminizin SSID adını aynen yazın
// 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);
[Pick the date] Page 5
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>");
[Pick the date] Page 6
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;}
[Pick the date] Page 7
Şekil 9: Arduino IDE ve Seri monitör çıktısı
Şekil 10: Connectify programı ve seri monitörde kayıt tutmaları
[Pick the date] Page 8
Ş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
[Pick the date] Page 9
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.
[Pick the date] Page 10
Ş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"
char ssid[] = "Connectify-me";
// Buraya bir isim verebilirsiniz.
// 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) {
Serial.println("WiFi shield not present");
if ( fv != "1.1.0" )
; } if (WiFi.status() == WL_NO_SHIELD) {
while (true);} String fv = WiFi.firmwareVersion();
Serial.println("Please upgrade the firmware");
while ( status != WL_CONNECTED) {
Serial.println(ssid);
Serial.print("Attempting to connect to 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/");
[Pick the date] Page 11
client.print(FEEDID);
client.println(".csv HTTP/1.1");
client.print("X-ApiKey: ");
client.println(APIKEY);
client.println(USERAGENT);
client.println("Host: api.xively.com");
client.print("User-Agent: ");
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.println(thisData);}
else {
client.print("sensor1,");
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
[Pick the date] Page 12
Ü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.
[Pick the date] Page 13
Ş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
[Pick the date] Page 14

Benzer belgeler