Özür

31 Mar 2009 In: yeni
1 haftadır sitemde teknik bir sıkıntı vardı. Yazdıgınız yorumlar ve iletişimden gönderdiginiz mailler malesef bana ulaşmadı. Şimdi giderildi sorun.
Bildiren arkadaşa teşekkurler.

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.

 

Yıllık olarak yapılan takvimde istenilen gün ve zamanlarda GPIO portunu açan ve kapatan uygulama. LED yerine Röle kullanılarak 220v ile çalışan cihazları kontrol edilebilir.

Açılış ve kapanış saat leri arasında GPIO pininde elektrik vardır, kapanış saati geldiginde pinden keser. İstenilirse toplam çalışma zamanlarını tesbit edip, aylık olarak raporlaya bilir.4'erli grup halindeki butonlarla başlangıç ve bitiş zamanlarını ayarlıyorsunuz.

 

micro framework

 

 

Timer methodu için http://blogs.msdn.com/netmfteam/archive/2008/03/04/using-the-dispatcher.aspx  deki yöntemi kullandım. Tabii bizim uygulama için bir kaç yerini özelleştirmek gerekti. İsteyene tam kaynak kodlarını verebilirim.

public class Timer
{
      public  string zaman="";
      private Text textView;
      private DateTime start;
      private DispatcherTimer dispatchTimer;
      public Timer(Text text)
      {
      textView = text;
      textView.TextContent = new TimeSpan(0).ToString();
      start = DateTime.Now;
      }

      public void Start()
      {
          dispatchTimer = new DispatcherTimer(textView.Dispatcher);
          dispatchTimer.Tick += new EventHandler(UpdateTimerText);
          dispatchTimer.Interval = new TimeSpan(0, 0, 5);
          dispatchTimer.Start();
      }

     public void UpdateTimerText(object sender, EventArgs e)

     {
        textView.TextContent = DateTime.Now.ToString();
        int acsaat = 0, acdak = 0,kasaat=0,kadak=0;
        kasaat = Convert.ToInt16(zaman.Substring(19, 5).Substring(0, 2));
        kadak = Convert.ToInt16(zaman.Substring(19, 5).Substring(3, 2));
        acsaat=Convert.ToInt16(zaman.Substring(12, 5).Substring(0,2));
        acdak = Convert.ToInt16(zaman.Substring(12, 5).Substring(3, 2));
        if (DateTime.Now.Hour == acsaat && DateTime.Now.Minute == acdak)
           Kontrol.Write(true);

        if (DateTime.Now.Hour == kasaat && DateTime.Now.Minute == kadak)
           Kontrol.Write(false);
      }


Video su aşagıda

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...