Facebook RSS Feed
 

.NET Micro Framework: USB Flash Disk Kullanımı

-USB Flash Diskler genellikle veri taşıma, yedek alma ve multimedia dosyalarının transferinde kullanılmaktadır. Hareketli parçası olmaması ve küçük boyutları nedeniyle kullanımı yaygındır. .NET Micro Framework ile mikrodenetleyicinin USB Host özelliğini kullanarak kolaylıkla flash disklere erişim sağlayabiliriz.

Ön Gereksinimler

Uygulamayı geliştireceğiniz mikrodenetleyicinin USB Host özelliğinin bulunması gerekiyor. Ben bu örneği GHI Electronics'in USBizi geliştirme kartını kullanarak geliştirdim. Şu anda GHI Electronics'in USBizi 100 chipseti dışındaki tüm modellerinde USB Host özelliği bulunmaktadır.

Çalışma Mantığı

USB Flash Diskler uygulama çalışırken takılıp çıkarılabilir olduğundan, dosya sistemini USB cihazın bağlanma eventinde başlatacağız. Geriye kalan işlemler ise komut satırı mantığıyla benzerlik göstermektedir. Örneğimizde sisteme USB cihazı bağlandığında klasör oluşturma, taşıma, silme ve Stream Writer ile txt dosyası oluşturup bu dosyayı satır satır okumayı göreceğiz.

Kullanacağınız flash diskte önemli verileriniz varsa projeyi denemeden önce yedek almayı unutmayın.

Uygulama Kodları

Bir .NET Micro Framework 4 Console Application oluşturduktan sonra, proje referanslarına aşağıdaki 6 dosyayı ekleyelim:
- System.IO.dll
- Microsoft.SPOT.IO.dll
- GHIElectronics.NETMF.IO.dll
- GHIElectronics.NETMF.USBizi.dll
- GHIElectronics.NETMF.System.dll
- GHIElectronics.NETMF.USBHost.dll

Daha sonra Program.cs dosyasına aşağıdaki kodları ekleyerek uygulamayı çalıştırabilirsiniz.

using System;
using System.IO;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.IO;
using GHIElectronics.NETMF.IO;
using GHIElectronics.NETMF.USBHost;
 
namespace MFUSBFlashDisk
{
    class Program
    {
        static PersistentStorage ps;
 
        public static void Main()
        {
            //Çıkarılabilir sürücü Event'lerini belirleyelim
            RemovableMedia.Insert += RemovableMedia_Insert; //Sürücü yerleştirildiğinde
            RemovableMedia.Eject += RemovableMedia_Eject;   //Sürücü çıkarıldığında
 
            //USB Host Eventlerini Belirleyelim
            USBHostController.DeviceConnectedEvent += DeviceConnectedEvent;
 
            //Main Thread'i uyutalım
            Thread.Sleep(Timeout.Infinite);
        }
 
        //USB Cihazı Bağlandığında
        static void DeviceConnectedEvent(USBH_Device device)
        {
            if (device.TYPE == USBH_DeviceType.MassStorage) //Veri Depolama Cihazıysa
            {
                Debug.Print("USB Disk Bağlandı.");
 
                ps = new PersistentStorage(device); //Çıkarılabilir depolama cihazı oluşturalım
                ps.MountFileSystem();               //Dosya sistemini başlatalım
            }
        }
 
        static void RemovableMedia_Insert(object sender, MediaEventArgs e)
        {
            if (e.Volume.IsFormatted) //Dosya sistemi biçimlendirilmişse
            {
                Debug.Print(e.Volume.RootDirectory + " Sürücüsü Bağlandı.");
 
                //Klasör İşlemleri
                //Çalışma klasörünü USB cihazın root klasörü (\USB) olarak ayarlayalım
                Directory.SetCurrentDirectory(e.Volume.RootDirectory);
 
                //Çalışma klasörünü yazdıralım
                Debug.Print("Çalışma Klasörü: " + Directory.GetCurrentDirectory());
 
                Directory.CreateDirectory(@"Klasor1"); //Klasor1 klasörü oluştur
                if (Directory.Exists(@"Klasor2"))      //Klasor2 klasörü varsa
                {
                    Directory.Delete(@"Klasor2");        //Klasor2 klasörünü sil
                }
 
                Directory.Move(@"Klasor1"@"Klasor2"); //Klasor1 klasörünü Klasor2'ye taşı
 
                Debug.Print("Klasör Listesi:");
                foreach (string klasor in Directory.GetDirectories(@"\USB"))
                {
                    Debug.Print(klasor); //Tüm klasörlerin isimlerini yazdır
                }
 
                //Dosya işlemleri
                if (File.Exists(@"DB.txt")) //DB.txt dosyası varsa
                {
                    File.Delete((@"DB.txt")); //DB.txt dosyasını sil
                    Debug.Print("Dosya silindi.");
                }
 
                //Stream Writer kullanarak DB.txt dosyası oluştur
                using (StreamWriter w = new StreamWriter(@"DB.txt"))
                {
                    for (int i = 1; i < 6; i++)
                    {
                        w.WriteLine(i); //1'den 5'e kadar her satıra bir numara yaz
                    }
                }
                Debug.Print("Dosya oluşturuldu.");
 
                //Stream Reader kullanarak DB.txt dosyasını oku
                using (StreamReader r = new StreamReader(@"DB.txt"))
                {
                    if (r.BaseStream.Length > 0) //Dosya doluysa
                    {
                        for (int i = 0; i < 5; i++)
                        {
                            Debug.Print(r.ReadLine()); //Her satırı yazdır
                        }
                    }
                }
 
                Debug.Print("Dosya Listesi:");
 
                foreach (string dosya in Directory.GetFiles(@"\USB"))
                {
                    Debug.Print(dosya); //Tüm dosyaların isimlerini yazdır
                }
            }
 
            else
            {
                //Dosya sistemi FAT değilse kullanıcıyı uyar
                Debug.Print("Dosya sistemi FAT32 yada FAT16 değil.");
            }
        }
 
        static void RemovableMedia_Eject(object sender, MediaEventArgs e)
        {
            //Dosya sistemi serbest bırakıldığında uyarı göster
            Debug.Print(e.Volume.RootDirectory + " Sürücüsü Çıkarıldı.");
        }
    }
}

Uygulamayı cihaz üzerinde çalıştırdığınızda, Visual Studio Immediate Window'da aşağıdaki satırları göreceksiniz.

USB Disk Bağlandı.
\USB Sürücüsü Bağlandı.
Çalışma Klasörü: \USB
Klasör Listesi:
\USB\Klasor2
Dosya oluşturuldu.
1
2
3
4
5
Dosya Listesi:
\USB\DB.txt

Uygulama çalışırken flash diski çıkarırsanız, aşağıdaki mesaj görünecektir:

\USB Sürücüsü Çıkarıldı.

Flash diski yeniden bağladığınızda, işlemler yeniden başlayacaktır. Immediate Window'da göreceğiniz GC ile başlayan satırlar, Garbage Collector'ın kaynak temizliği sonrası raporlarıdır. O satırları önemsemeyin.




 
Hoşgeldiniz!
Son güncelleme: 25.12.2016
-
Yeni Teknik Yazılar
Latte Panda İncelemesi
Turta IoT HAT İncelemesi
USB Gamepad Kullanımı
GPIO Kullanımı
VEML6075 UV Sensör Kullan...
-
İlgili Gruplar
.NET MF ve Gadgeteer FB Grubu
İst. IoT & Wearables Meet-up
-
 

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.Copyright © 1999 - 2017, Umut Erkal. Bu materyal, "Creative Commons Public Licence" ile sunulmuştur.
Kaynak göstererek ve ücretsiz olarak, aynı şartlar altında paylaşabilir ve kullanabilirsiniz. | Kullanım Sözleşmesi