Merhabalar, .Net micro framework ile Google maps i kullanmayı inceleyecegiz.

İlk olarak cihazımıza IP veriyoruz bunun için :

    foreach (NetworkInterface nic in nics)
    {
            nic.EnableStaticIP("192.168.2.8", "255.255.255.0", "192.168.2.254");
    }
 
Cihazımıza IP verince map.google.com dan gerekli dataları donwload etmek için WebClient.cs i projemize ekliyoruz.Ben bunu internetten almıştım, kendinizde yazabilirsiniz. Ama Elze Kool un çok iyi Web Client i var.
İstedigimiz koordinat daki resmi download edip görüntülemek için :

        double lat = 37.060383;
        double lot=37.374287;
        int zoom = 12;
        public void ciz(double lat, double lot, int zoom)
        {
            string size = "320x240";
            Bitmap screen = new Bitmap(SystemMetrics.ScreenWidth, SystemMetrics.ScreenHeight);
            try
            {
               
                WebClient client = new WebClient("maps.google.com", 80);
                Bitmap map = client.GetContent(
                     "/staticmap?center=" + lat.ToString() + "," + lot.ToString() + "&zoom=" + zoom + "&size=" + size + "&maptype=mobile",
                     WebClient.ContentType.Image, WebClient.HttpVersion.V_11) as Bitmap;
                screen.DrawImage(0, 0, map, 0, 0, map.Width, map.Height);
                screen.Flush();
            }
            catch (SocketException se)
            {
               
            }
        }
Kullandım ben. WPF le görselligi arttırmak mümkün.İşte bir kaç örnek :


Buda benim Tahoe II deki hali :
Kullandım ben. WPF le görselligi arttırmak mümkün.İşte bir kaç örnek :

Buda benim Tahoe II deki hali


Daha fazla açıklama için http://www.codeproject.com/KB/dotnet/UsingGoogleMapInMF.aspx

Bu arada langtitude ve longtitude bilgilerini bir GPS cihazından okunsa (seri port üzerinden örnegi çok), bir navigator ( navigasyon ) cihazı üretile bilir. Tabii google earth ( maps ) üzerinden verileri almak için bir GPRS modeme ihtiyaç olacaktır. Yada SD card a bütün Türkiye nin haritaları yüklenebilir, bu şekilde offline çalışabilir.

Benim yaptıgım uygulamada standart yön tuşları ile ekranda gezile bilmekte ve ekrandaki zoom in ve zoom out ile yakınlaşma uzaklaşma yapıla bilmektedir.

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

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

 

 

Daha önceki yazımda Micro framework e bir giriş yapmıştık ama sanırım olayın backgroundunu pek incelemedik.
Jens Kühner kitabında çok güzel bir şekilde .Net Microframework ün tanımını yapmıştı:

"The Microsoft .NET Micro Framework is a small and efficient .NET runtime environment used to run managed code on devices that are too small and resource constrained for Windows CE and the .NET Compact Framework.

The .NET Micro Framework enables you to write embedded applications for small, connected, embedded devices with Visual Studio and C#. That means you can now use the same development tools and language that you use to build desktop and smart device (PDA and smartphone) applications to develop applications for microcontrollers. The .NET Micro Framework also provides an extensible hardware emulator for rapid prototyping and debugging.

The .NET Micro Framework requires no underlying operating system. A scaled-down version of the Common Language Runtime (TinyCLR) sits directly on the hardware, so the framework is often called a bootable runtime. The runtime has a small footprint; it uses only a few hundred kilobytes of RAM and does not require the processor to have a memory management unit (MMU). Therefore, the .NET Micro Framework can run on small and inexpensive 32-bit processors without consuming a lot of power."

Platformu biraz daha tanıyalım istedim, bildiginiz gibi yanlızca yazılım yönü yoktur platformun birde donanım kısmı var. 
Dünyada bir çok CPU üreticisi olmasına ragmen, şu an için işlemcisini MF boardına port eden çok az firma var. Donanım üreticileri kendi işlemcilerini veya piyasada ki başka ARM işlemci üreticilerinden aldıkları işlemciyi, RAM, ROM ve besleme elemanlarını bir araya getirip kendi board larını oluşturuyorlar.

MF de yazılan kodların çalışması için 32 bitlik ARM bir işlemci ve 64K den az RAM yeterli oluyor. MMU olmaması, CE cihazlarından daha ucuza gelmesini saglıyor.
Bu yüzden MF yüklü cihazlar düşük maliyetli, yüksek beceri gerektiren, yanlızca bir fonksiyona atanmış ve baglanabilir sistemler için iyi bir tercih.

Potansiyel uygulama alanları çok. POS cihazlarından tutun da, medikal cihazlar, ev veya endüstriyel otomasyonlar, otomotiv ve PC baglantılı görev verebileceginizi her yerde kullanılabilir. Akıllı, baglantı halinde ve kolay yönetilebilen bir cihaza ihtiyacınız varsa ve buna uygulama geliştirmek te kolay olsunsa buyurun size MF yüklü cihazlar.

Üzerinde ARM işlemci bulunan bütün Single-Board-Computer lara uygulanma imkanı var. Şu an board olarak satılan ve içine MF port edilmiş cihazlardan bir kaçı üreten firmalar şunlar :
 
  • Aug-electronics  (ATMEL AT91SAM9261 üzerinde)
  • Crossbow  (Marvell PXA271 XScale ARM tabanlı)
  • Device Solutions  (Meridian 100 Mhz, 4 Mb flash, 8 Mb RAM, 16 GPIO, SPI, I2C, 2xUART. üzerinde)
  • Digi  (NS7520, NS9215, NS9210 işlemcileri üzerine)
  • emtrion  (Atmel AT91RM9200 üzerinde)
  • GHI  (ARM 7 işlemciler üzerine <75 Mhz)
  • SJJ Micro (Cirrus Logic EP9302 ARM9 200MHz)

    Neredeyse hepsinin developer kitleri var. Bazılarının yanlızca single-boardlarıda var. Developer kitler $200 ile $500 arasında degişiyor. Üzerinde sundukları donanımlara göre fiyatlar çeşitli. Single-Boardlar ile 50$ civarlarında.
  • 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...