arduino ethernet shield ile kontrol etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster



Son günlerde sıkça gelen sorular üzerine Arduino ve c# arasında ethernet portu kullanarak basit bir led acma ve kapama devresi uygulamasını bu yazımızda ele alacagız.

Ethernet ile haberlesme bilgiyi uzak mesafelere taşımak için oldukça kullanışlı bir haberleşme metodu.Arduino ile gerçekleştirilen birçok projede ethernet shield yardımı ile internet üzerinden haberleşme sağlandığını görüyoruz.İsterseniz şimdi gelin kendi uygulamamıza geçelim.

Uygulamamızda kullandığımız materyeller

1 adet arduino uno

1 adet seed studio ethernet shield

1 adet 330 ohm direnç

2 adet kablo

1 adet ethernet kablosu




Yukarıda da görüldüğü üzere programımızda 3 adet buton tanımladık.Bağlan butonuna bastıgımızda programda yazmıs olduğumuz ethernet socketi üzerinden bilgisayarımız ve arduino arasında socket programlama sayesinde bir port açılacak.

Sonrasıda yak butonuna bastığımızda arduinomuzdaki led devremiz yanacak.Söndür butonuna bastığımızda ise arduinomuza baglı olan led devresi sönecek.

Peki bu olayı nasıl sağlayacağız ?

Arduino IDE üzerindeki örnek programlardan ethernet kütüphanesi içerisinde bulunan chat serverdan üzerinde bir kaç ufak değişiklik yaparak yararlanacağız.

Bu durumda ne olacak ?

Arduinomuz bizden veri alıp-gönderebilen bir server konumunda olacak ve bunun karşılığında bizim bilgisayarımızda çalışan program ise client özelliği taşıyacak.

Sistem nasıl çalışacak ?

Biz client tarafında arduinomuza socket üzerinden ethernet fiziksel alt yapısı ile "a" harfini mesaj olarak gönderdiğimizde arduinoda ledimiz yanacak."A" harfini gönderdiğimizde ise arduinoda ledimiz sönecek.

Gelilim arduino tarafındaki kodlarımıza:

#include <SPI.h>
#include <EthernetV2_0.h>//ethernet kutuphanemiz eklendi
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };//mac adresi tanımlı
IPAddress ip(192,168,1, 177);//arduinomuzun ip si
IPAddress gateway(192,168,1, 1);//alt ağ geçidi
IPAddress subnet(255, 255, 255, 0);//alt ağ maskesi
EthernetServer server(23);//Haberleşeceğimiz port numarası
boolean alreadyConnected = false; // Client baglımı değilmi ? değişkenimiz
#define W5200_CS 10
#define SDCARD_CS 4
void setup() {
pinMode(SDCARD_CS,OUTPUT);
digitalWrite(SDCARD_CS,HIGH);
Ethernet.begin(mac, ip, gateway, subnet);// Ethernet portumuzu başlatıyoruz
server.begin();// server başlatıldı clientı bekliyoruz
pinMode(7,OUTPUT);//7 nolu pine ledimizi bağlayacağız output yaptık}
void loop() {
EthernetClient client = server.available();//Client isteği geldiğinde client adında programımız baglanacak
if (client) {// program baglandımı ?
if (!alreadyConnected) //Program önceden bağlımıydı ? bağlantı geldi ise
client.flush();
alreadyConnected = true;//Şu anda bağlı bilgisini true yap
}
if (client.available() > 0) {//Client bağlı mı ?
char thisChar = client.read();//Client bağlı ise gelen veriyi tek karakterlik değişken içine al
if(thisChar=='a')//gelen veri "a" ise
{
digitalWrite(7,HIGH);//7 nolu pine baglı olan ledi yak
}
if(thisChar=='A')// gelen veri "A" ise
{
digitalWrite(7,LOW);//7 nolu pine bağlı ledi söndür
}
}
}
}

Peki c# tarafında kodlarımız neler gelin birde onları iredeleyelim.

using System;
using System.Collections.Generic;
using System.ComponentModel;using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;//Eklediğimiz .net için socket kütüphanemiz
namespace WindowsFormsApplication7
{
public partial class Form1 : Form
{
System.Net.Sockets.TcpClient arduinom = new System.Net.Sockets.TcpClient(); //arduinom adında yeni bir tcp client tanımladık
public Form1()
{
InitializeComponent();
yak.Enabled=false;//baslangıcta hata ile basmamak icin inaktif olsun baglantı olmadan veri gondermeye kalkmayayım
sondur.Enabled=false; //baslangıcta hata ile basmamak icin inaktif olsun baglantı olmadan veri gondermeye kalkmayayım
 }
private void yak_Click(object sender, EventArgs e)// yak butonumuz tıklandıgında
{
NetworkStream serverStream = arduinom.GetStream();//server stream adında iletişim ağı kurduk ve arduino adındaki client ile ilişkilendirdik
byte[] gonderi = System.Text.Encoding.ASCII.GetBytes("a");//byte olarak bir gönderi oluşturduk ve encoding tipini ascii belirledik verilerimizi bu stream üzerinden yollayacağız
serverStream.Write(gonderi, 0, gonderi.Length);//outStream ile göndereceğimiz veriyi tcp üzerinden arduinoya gönderiyoruz.
serverStream.Flush();//veriyi gönderdikten sonra tcp hattımızı temizliyoruz.
}
private void sondur_Click(object sender, EventArgs e)// sondur butonumuz tıklandıgında
{
//yukarıda belirttiğimiz işlemi led "A" göndermek için tekrarlıyoruz
NetworkStream serverStream = arduinom.GetStream();
byte[] gonderi = System.Text.Encoding.ASCII.GetBytes("A");
serverStream.Write(gonderi, 0, gonderi.Length);
serverStream.Flush();
}
private void baglan_Click(object sender, EventArgs e)// baglan butonumuz tıklandıgında
{
try
{
arduinom.Connect("192.168.1.177", 23);// 23 portu üzerinde arduino ip si ile baglanmayı deniyoruz
MessageBox.Show("baglantı saglandı"); // baglantı saglanırsa ekrana baglantı saglandı bilgisi basılıyor
baglan.Enabled = false;//2 kere baglanamayacağımızdan baglan butonunu inaktif edeiyoruz
yak.Enabled=true;// baglantı var veri gonderebilirim yak aktif olsun
sondur.Enabled=true; //baglantı var veri gonderebilirim sondur aktif olsun
}
catch (Exception a)// baglantı kurulamadı ise
{
MessageBox.Show("baglantı yok tekrar baglanmayı deneyiniz");//baglantı yok tekrar baglan uyarısı ekrana bastırılıyor
yak.Enabled=false;// baglantı yok veri gonderemem yak butonu inaktif olsun
sondur.Enabled=false;//baglantı yok veri gonderemem sondur butonu inaktif olsun
baglan.Enabled = true;//baglan butonu aktif olsun tekrar baglanmayı deneyebileyim
}
}
}
}


Özetlemek gerekirse

Arduinomuz server,programımız ise client oldu.İkisi arasında arduinomun 192.168.1.177 ip sini ve 23 nolu portu kullanarak iki nokta arasında tcp bir baglantı sagladık.Sonrasında ise bu baglantı içerisinde bir stream tanımlayarak arduinomuza veri göndermek sureti ile :) 7 nolu pinimizi kontrol etmiş olduk.

Umarım yararlı bir yazı olmuştur.Bir sonraki yazımızda yeniden görüşmek dileği ile.
ELEKTRO BLOGGER A HOŞGELDINIZ

ARAMA YAP

EN COK OKUNANLAR

- Copyright © ELEKTRO-BLOGGER Blogger