Visual Studio Arduino W5100 Ethernet Shield Uygulaması

Başlatan crazy, 26 Eylül 2016, 20:08:50

crazy

Merhaba uygulama ile arduino ethernet shiled W5100  internet üzerinden led yakıp röle kontrolu  yapabilirsiniz.Analog pinlerinden okunan değerleri v.s görebilirsiniz.
Program kodları http://elektro-blogger.blogspot.com.tr/2015/03/arduino-ve-c-kullanarak-adim-adim.html alıntıdır.
Sadece arduinodan  visual studio programna  veri gönderimi için  kodlar eklenmiştir.
Arduinodan gelen veri paketini  visual stuido  da  ayırmak için yardımcı olan @muhittin_kaplan  hocama teşekkür ederim.

Arduino   Kodları
#include <SPI.h>
//#include <EthernetV2_0.h>
#include <Ethernet.h>

//Arduino 13,12,11,10 ve 4 pinleri W5100 bağlantıları için
//4 nolu pin w5100 dışarı cikartilip çıkış olarak kullanilabilir.sd karti kullanmiyacak iseniz....
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};//mac adresi tanımlı
IPAddress ip(169, 254, 48, 220); //arduinomuzun ip si
IPAddress gateway(192, 168, 1, 1); //alt ağ geçidi
IPAddress subnet(255, 255, 255, 0);//alt ağ maskesi
EthernetServer server(80);//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(13, OUTPUT); //13 nolu pine ledimizi bağlayacağız output yaptık
  pinMode(2, OUTPUT); //2 nolu pine ledimizi bağlayacağız output yaptık
  pinMode(3, OUTPUT); //3 nolu pine ledimizi bağlayacağız output yaptık
  pinMode(5, OUTPUT); //5 nolu pine ledimizi bağlayacağız output yaptık
  pinMode(6, OUTPUT); //6 nolu pine ledimizi bağlayacağız output yaptık
  pinMode(7, OUTPUT); //7 nolu pine ledimizi bağlayacağız output yaptık
  pinMode(8, OUTPUT); //8 nolu pine ledimizi bağlayacağız output yaptık
  pinMode(9, OUTPUT); //9 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


    switch (thisChar) {
      case 'a':
        digitalWrite(2, HIGH); //2 nolu pine baglı olan ledi yak
        break;
      case 'A':
        digitalWrite(2, LOW); //2 nolu pine bağlı ledi söndür
        break;
      case 'b':
        digitalWrite(3, HIGH); //3 nolu pine baglı olan ledi yak
        break;
      case 'B':
        digitalWrite(3, LOW); //3 nolu pine bağlı ledi söndür
        break;
      case 'c':
        digitalWrite(5, HIGH); //5 nolu pine baglı olan ledi yak
        break;
      case 'C':
        digitalWrite(5, LOW); //5 nolu pine bağlı ledi söndür
      case 'd':
        digitalWrite(6, HIGH); //6 nolu pine baglı olan ledi yak
        break;
      case 'D':
        digitalWrite(6, LOW); //6 nolu pine baglı olan ledi söndür
        break;
      case 'e':
        digitalWrite(7, HIGH); //7 nolu pine baglı olan ledi yak
        break;
      case 'E':
        digitalWrite(7, LOW); //7 nolu pine baglı olan ledi söndür
        break;
      case 'f':
        digitalWrite(8, HIGH); //8 nolu pine bağlı ledi yak
        break;
      case 'F':
        digitalWrite(8, LOW); //8 nolu pine baglı olan ledi söndür
        break;
      case 'g':
        digitalWrite(9, HIGH); //9 nolu pine baglı olan ledi yak
        break;
      case 'G':
        digitalWrite(9, LOW); //9 nolu pine baglı olan ledi söndür
        break;
      default:
        for (int analogChannel = 0; analogChannel <= 5; analogChannel++)
        {
          int sensorReading = analogRead(analogChannel);
          client.print((String) + ("WW") + (analogChannel) + ( "  " ) + (sensorReading));
          delay(60);


        }
    }
  }
}

Visual Studio Kodları
using System;
using System.IO;
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;
using System.Net.Sockets;
using System.Threading;//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
        string readData = null;

        public Form1()
        {
            MessageBox.Show("Program açılıyor"); // baglantı saglanırsa ekrana baglantı saglandı bilgisi basılıyor

            CheckForIllegalCrossThreadCalls = false;
            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_1(object sender, EventArgs e)
        {
            //MessageBox.Show("yandı");
            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_1(object sender, EventArgs e)
        {
            //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 button1_Click_1(object sender, EventArgs e)
        {
            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("b");//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 button2_Click(object sender, EventArgs e)
        {
            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("B");//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 button3_Click_1(object sender, EventArgs e)
      {
          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("c");//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 button4_Click_1(object sender, EventArgs e)
        {
            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("C");//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 button5_Click_1(object sender, EventArgs e)
        {
            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("d");//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 button6_Click(object sender, EventArgs e)
    {
        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("D");//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 button7_Click(object sender, EventArgs e)
    {
        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("e");//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 button8_Click(object sender, EventArgs e)
    {
        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("E");//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 button9_Click(object sender, EventArgs e)
    {
        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("f");//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 button10_Click(object sender, EventArgs e)
           {
               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("F");//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 button11_Click_1(object sender, EventArgs e)
             {
               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("g");//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 button12_Click_1(object sender, EventArgs e)
             {
            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("G");//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 baglan_Click_1(object sender, EventArgs e)
        {
            //MessageBox.Show("baglantı saglandı"); // baglantı saglanırsa ekrana baglantı saglandı bilgisi basılıyor
            try
            {
                arduinom.Connect("169.254.48.220", 80);// 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
                timer1.Start();

                // t = new Thread(new ThreadStart(arduino_oku));// threadi arduino oku fonksiyonuna baglıyoruz
                // t.Start();// baglantı saglandıktan sonra thread basladı
                Thread ctThread = new Thread(getMessage);
                ctThread.Start();


            }
            catch (Exception)// 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
            }
        }


        private void getMessage()
        {
            NetworkStream serverStream = arduinom.GetStream();

            while (true)
            {
                byte[] inStream = new byte[1024];
                int bytesRead = serverStream.Read(inStream, 0, inStream.Length);
                readData = System.Text.Encoding.ASCII.GetString(inStream, 0, bytesRead);
               msg();
            
            }
        }


        private void msg()
        {

            if (readData.Substring(0, 4) == "WW0 ")
            {

                label1.Text = readData.Substring(4, readData.Length - 4);

            }
            else if (readData.Substring(0, 4) == "WW1 ")
            {
                label2.Text = readData.Substring(4, readData.Length - 4);
            }

            else if (readData.Substring(0, 4) == "WW2 ")
            {
                label3.Text = readData.Substring(4, readData.Length - 4);
            }
            else if (readData.Substring(0, 4) == "WW3 ")
            {
                label4.Text = readData.Substring(4, readData.Length - 4);
            }
            else if (readData.Substring(0, 4) == "WW4 ")
            {
                label5.Text = readData.Substring(4, readData.Length - 4);
            }
            else if (readData.Substring(0, 4) == "WW5 ")
            {
                label6.Text = readData.Substring(4, readData.Length - 4);
            }

        }
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {

        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            timer1.Interval = 500;
            NetworkStream serverStream = arduinom.GetStream();
            byte[] gonderi = System.Text.Encoding.ASCII.GetBytes("2");
            serverStream.Write(gonderi, 0, gonderi.Length);
            serverStream.Flush();
        }



        private void Form1_Load(object sender, EventArgs e)
        {

        }

       

        
    }

}





muhittin_kaplan


crazy

Sağolun hocam  CheckForIllegalCrossThreadCalls = false; komutunu dahil etmeyince  program açıldıktan bir süre duruyordu.Fakat bu komutun kullanımı iyi değilmiş.CheckForIllegalCrossThreadCalls = false; iptal edip  aşadaki gibi kullanırsak program sorunsuz çalıışıyor.

private void msg()
        {
            if (this.InvokeRequired) this.Invoke(new MethodInvoker(msg));

             else if (readData.Substring(0, 4) == "WW0 ")
             {

                 label1.Text = readData.Substring(4, readData.Length - 4);

             }
             else if (readData.Substring(0, 4) == "WW1 ")
             {
                 label2.Text = readData.Substring(4, readData.Length - 4);
             }

             else if (readData.Substring(0, 4) == "WW2 ")
             {
                 label3.Text = readData.Substring(4, readData.Length - 4);
             }
             else if (readData.Substring(0, 4) == "WW3 ")
             {
                 label4.Text = readData.Substring(4, readData.Length - 4);
             }
             else if (readData.Substring(0, 4) == "WW4 ")
             {
                 label5.Text = readData.Substring(4, readData.Length - 4);
             }
             else if (readData.Substring(0, 4) == "WW5 ")
             {
                 label6.Text = readData.Substring(4, readData.Length - 4);
             }


        }

antison

Peki Visual Basic üzerinden arduinoya "a" yada "b" değilde "123" sayısını göndermek istersek nasıl bir yol izlemeliyiz.