MF ile RSS Okuma

24 Mar 2009 In: .net, .Net Micro Framework, Tahoe-II

RSS nediri burada anlatmayacagım, 2005 yılında YazGeliştir de bu konu ile ilgili bir makalem yayınlanmıştı. RSS nedir ve C# ile RSS verilerini okuma ile ilgili linkten bilgi edinile bilir.

Ben size bunu MF ile nasıl gerçekleştiriz onu anlatacagım. Ilk olarak yapılması gereken MF cihazına IP aldırmak, bunun 2 yöntemi var;

1- Dynamic olarak DHCP üzerinden otomatik almasını saglamak
2- Static olarak ag'da alması gereken IP yi biz vermeliyiz.

Dinamik olarak IP alması için : 

    NetworkInterface[] nicler = NetworkInterface.GetAllNetworkInterfaces();
                    foreach (NetworkInterface nic in nicler)

                    {
                        nic.EnableDhcp();
                        //DHCP etkin
                    }

Statik olarak Manuel IP yi atamak için :

       NetworkInterface[] nicler = NetworkInterface.GetAllNetworkInterfaces();
                     foreach (NetworkInterface nic in nicler)
                    {
                        nic.EnableStaticIP("192.168.2.8", "255.255.255.0", "192.168.2.254");
                    }


Bilgidiniz üzere RSS kaynakları aslında XML dosyaları, tek yapmamız gereken adresden XML i indirmek ve nodelarına göre gerekli alanları göstermek.
Şu namespacleri projenize eklemeniz gerekiyor;

using System.IO;
using System.Xml;
using Microsoft.SPOT.Net;
using Microsoft.SPOT.Net.NetworkInformation;

Bu kütüphanelerle dosyayı inidirip XML nodlarına parçalayacagız. Ben metinleri bir TextFlow la görüntülemeyi uygun gördüm ama, ListBox ile etkileyici bir görünüm yakalana bilir.
ListBox 'ın Itemlarının haber başlıkları görüntülenip, yön tuşları ile degişme eventınada haberin içerigini görüntüleme işlemi saglana bilir.

XML dosyasını download etmek için gerekli Request ve dönen Responce işlemlerini Micheal Schwarz a ait RSSReader.cs ile gerçekleştirdim. Buradan indirebilirsiniz.

Dönen XML in "Title" nodundaki bilgileri alıp görüntüleyen kodlar şu şekilde :

                    string xmlsi = RssReader.GetXML("hhttp://www.sabah.com.tr/rss/anasayfa.xml", String.Empty);
                    byte[] data = System.Text.UTF8Encoding.UTF8.GetBytes(xmlsi);
                    MemoryStream strm = new MemoryStream(data); 
                    XmlTextReader xml = new XmlTextReader(strm);

                    while (xml.Read()) 
                     {
                         if (xml.NodeType == XmlNodeType.Element && xml.Name == "title")
                         {
                             text.TextRuns.Add(xml.ReadElementString(), Resources.GetFont(Resources.FontResources.small), Colors.Red);
                             text.TextRuns.Add(TextRun.EndOfLine);
                         }
                    } 

Bu da ekran çıktısı. Kolay gelsin...


Micheal Schwarz ın XML i download edecek requesti gönderen ve response olarak donen byte ları XML dosyasına çeviren kodu  RssReader.cs (10,50 kb)


Türkçe karakter problemi var :)
Michael Schwarz gerçekten harikalar yaratıyor. Tahoe-II üzerine basit bir web server geliştirmiş ve bunuda http://www.control-my-world.com/. üzerinden yayınlıyor.

Ayrıca web server Digi'nin RF ile haberleşen(XBee) bir sıcaklık sensorunden bilgi alıp onuda gösteriyor.

Michael 'ın bir çok toolkiti bulunmakta, bu web serverinde kaynak kodlarını bulabileceginiz mschwarztoolkit ini indirebilirsiniz. Micro Framework ile ilgili yaptıgı diger çalışmaları netmicroframework.blogspot.com adresinden takip edebilirsiniz.
Ben ne kadar arzulasamda katılmak kısmet olmadı bu yarışmaya. Aklıma gelen hiç bir projeyi begenmedim ama şuan yarışmaya katılan projeleri görünce keşke ben hiç bu kadar detaylı düşünmeseydim diyorum.

Herneyse artık geçti. Size yarışmaya katılan bir kaç projeyi bildirmek istedim.

 1. Blair Leduc un projesi çok hoş kendisi projesine "a bedside digital assistant" diye isim vermiş. Yatagınızın baş ucunda bir cihaz düşünün;

- Dijital resim çerçevesi
- FM Radio
- Alarm
- RSS feedler üzerinden haberleri okusun, hava durumunu, günlük kurları görüntülesin

İstemez miydiniz? Hatta e-maillerinizi bile okuyabilir (bunu ben uydurdum Smile)

Cihazın prototipini geliştirmeye devam ediyor, buyrun şekli şemali

HardwareProto1

 2. Bu proje Paul Hubner a ait. Proje ise bir GSTaTS - gökyüzündeki nesneleri (uçak, balon, uydu, gezengenler, yıldızler, vb.) izleme ve takip etme. Adım adım anlatmış projesini. Oldukca teferruatlı işin yazılım kısmından hariç, donanım kısmı daha çok efor ister bence. Donanımda hem mekanik hem elektronik oldugu için ekstra zorluk.  

 

 

 3. Proje ise Ian Lee ye ait. Projenin adı  "invisible dog fence"  yani eviniz için "görünmez köpek çiti". Köpeginize arazinizdeki hangi alanlara izin verdiyseniz oralarda kalmasını saglıyor. Bahçeli bir eviniz varsa ve siz evinizin bahçesinde parti verecekseniz, köpegi sabit bir yerde tutabiliyorsunuz.

Red Zone is Alive!


Karşılaştıkca buraya yazmaya devam edecegim.

 

.Net Micro Framework cihazlar ile yapılaca bilecek örnek uygulamaların sayısı her geçen gün artmakta. Elze Kool un sitesinde Dare to Dream Different Challenge yarışması için hazırladıgı prototipde kullanacagı GSM modülü için hazırladıgı sınıfı yayınlamış. Cihazın özellikleri burada.
Açıkcası bende test etmek için can atıyorum, bu kart sayesinde 

-GPS Tracking
-GPS DataLogger
-Telemetri (uzaktan veri okuma)
-GPS ile üzerinde GSM modulu sayesinde online izleme ve çeşitli tetikleme işlemleri gerçekleştirilebilir.

GPS üzerinden alınan verilerle, yerleştirildigini nesnenin

-Belirli bir hızı geçtiginde
-Belirli bir mesafesi kat ettiginde
-Belirli bir bölgeden başka bölgeye nakil oldugunda 
-Veya ayarlanmış periyotlarda düzenli şekilde veri gönderimi gibi durumlarda

GSM modülündeki SMS veya GPRS ile online haber verebilir, çeşitli bilgileri iletebilir. Bu iki modülün tek çatıda birleşmesi kartın yeteneklerini elbette arttırıyor.
Elze nin örnek uygulaması heyecanla bekliyorum.

 

Telit firmasının ürünlerini Türkiye'de Epsilon Teknoloji Ltd. Şti. firmasından temin edebilirsiniz.


.Net Micro Framework Serial Port

Merhabalar, bu uygulamada micro framework platformunda seri port haberleşmesinin nasıl gerçekleştigini görecegiz.

Bunu görmek için 2 uygulamamız var birisi PC mizde çalışan veri gonderip almaya yarayan uygulamamız, digeri ise TahoeII üzerinde çalışan yine seri porttan veri geldiginde gösteren ve sag tuşa( SW8) bastıgımızda DateTime.Now dan saniye bilgisini gönderen uygulama.

Masa üstünde klasik aşagıdaki kodla COM portu açar ve veri bekleriz

        private void Form1_Load(object sender, EventArgs e)
        {
            sp1 = new SerialPort("COM6", 9600, Parity.None, 8, StopBits.One);
            sp1.Open();
            sp1.DataReceived += new SerialDataReceivedEventHandler(verigeldi);
        }

Açtıkdan sonra veri geldiginde 

string okunan = sp1.ReadLine();

okuruz ve textboxda görüntüleriz.

textBox2.Text = okunan;

PC gönderme işleminde ise sp1 açık iken

sp1.WriteLine(textBox1.Text);

ile göndermek mümkün. Masa üstünde işlem bu kadar, MF tarafındada aynısının yapılması gerekiyor.

CreateWindow fonksiyonundan önce 

SerialPort c1 = new SerialPort("COM1", 9600);
public Window CreateWindow()
        {
            mainWindow = new Window();
            mainWindow.Height = SystemMetrics.ScreenHeight;
            mainWindow.Width = SystemMetrics.ScreenWidth;
            mainWindow.Background = new SolidColorBrush(Colors.Black);

            text = new Text();
            text.Font = Resources.GetFont(Resources.FontResources.calibri);
            text.TextContent = "Seri Test Deneme v0.1";
            text.HorizontalAlignment = Microsoft.SPOT.Presentation.HorizontalAlignment.Center;
            text.VerticalAlignment = Microsoft.SPOT.Presentation.VerticalAlignment.Center;
            text.Width = 200;

...

...

...

            c1.ReadTimeout = 800;
            c1.Open();
            c1.DataReceived += new SerialDataReceivedEventHandler(okumaoldu);
       }

ile COM1 üzerinden okumaya hazır hale geliriz. Gelen veri bufferda tutulur. Onu göstermek için

switchlerden aşagıya basıldıgında görüntülemek için

        private void OnButtonUp(object sender, ButtonEventArgs e)
        {
            try
            {
                switch (e.Button)
                {
                    case Button.VK_DOWN:

  //alınan veriyi görüntülemek için
                        text.TextContent = "";
                        byte[] okunanb = new byte[20];
                        c1.Read(okunanb, 0, 20);
                        char[] okunanc = System.Text.UTF8Encoding.UTF8.GetChars(okunanb);

                        for (int i = 0; i < okunanc.Length; i++)
                            text.TextContent += okunanc[i];

                        c1.Close();
                        break;

                    case Button.VK_RIGHT:
//gönderim için
                        if(!c1.IsOpen)
                            c1.Open();

                        byte[] gond = System.Text.UTF8Encoding.UTF8.GetBytes("Saniye : "+DateTime.Now.Second.ToString()+"\n");
                        c1.Write(gond, 0, gond.Length);
                        //c1.Close();                       

                        break;
                }
            }
            catch (Exception ex)
            {
                text.TextContent ="HATA : "+ex.Message;
                //text.Invalidate();
            }
        }

 

Yukarıdaki kodda saga basınca veriyi gönderirir, alt tuşa baılınca görüntüler. Buradaki onemli nokta veri alırkende gönderirkende COM1 portu açık olmalı. En başta Open olarakda set edebilirsiniz. Diger onemli nokta bazı developer kitlerde SerialDataReceivedEventHandler handlerini COM portunu Open ettikten sonra Set etmeniz gerektigi.

Tahoe2 de ben bunu yaşamadım ama yinede belirteyim dedim AUG devkitlerde bu mevcut.

PC ile MF board arasındaki baglantıyı ise cross yaparak sagladım. Tıpkı şu şekilde 



Hepinize başarılar, sormak istedikleriniz olursa e-mail ile sorabilirsiniz.

Kolay gelsin...

 


Birinci resmin büyük hali için tıklayınız. İkinci resim için buraya. Ekran görüntüsü içinse buraya.

 



Aşagıdaki adresde şubat 2009 .NET Micro Framework SDK 3.0 ın döküman güncellemesi var.

.NET MF 2/2009 Doc Update

RTM Releasede eksik olan bazı sınıflar ve bir kaç güncel bilgilendirme içerir.

Download ettikten sonra,
WinXP de
- C:\Program Files\Microsoft .NET Micro Framework\v3.0\Documentation\NET MicroFramework Docs
Vistada ise
- C:\Program Files (x86)\Microsoft .NET Micro Framework\v3.0\Documentation\NET MicroFramework Docs

Ve VS yi yeniden başlatıyorsunuz.

.Net Micro Framework 3.0 ile VS2008 de geliştirilen basit bir GPIO ve Touch Screen örnek uygulaması videosu. Örnekde ki developer kit device solutions ın Tahoe II si.

 Kullandıgımız Tahoe boardın referansını VS a ekledikten sonra

using DeviceSolutions.SPOT.Hardware;

Herhangi bir GPIO için output tanımlıyoruz.

static OutputPort LED;

Yarattıgınız WPF window un constructorunda

LED = new OutputPort(Meridian.Pins.GPIO4, false);

 Bu işlemden sonra panel ve window üzerindeki buttonun click eventini yaratıyoruz

void button_Click(object sender, EventArgs e)

{
text1.TextContent = "+++ ACIK +++";
LED.Write(
true);
}

Bu button GPIO 4 portuna 1 yani (3.3v) gönderir.

diger button ilede  LED.Write(false);
ile yine 0v a çekeriz ve LED söner.

Dokunmatik ekranda üzerine tıklanan nesnenin görselini degiştirmek için özelleştirilmiş bir button objesi kullanıyoruz.

 

Ben Kimim ?

Celiker BahceciMerhabalar, ben Çeliker BAHÇECİ. 2004 den beri özel sektörde bilgisayar mühendisligi ve egitmenlik yapıyorum. Yine aynı yılın Ekim ayından beri sitemde .Net ile programlama ve hayat görüşüm ile ilgili makalelerimi yayınlıyorum. Blogum dışında Yazgelistir.com, mobilnedir.com gibi ineta kapsamındaki bir çok siteye Microsoft teknolojileri ile ilgili yazılar yazmaktayım.
Bu site ile sizinde hayatınızı anlamlandırmanızda bir parça katkımın olması dilegiyle...


Arşiv