Skip to content

Latest commit

 

History

History
348 lines (222 loc) · 15.2 KB

chapter-14.asc

File metadata and controls

348 lines (222 loc) · 15.2 KB

Java ME 8 Embedded ve Raspberry PI

Gömülü sistem teknolojilerinde hiç şüphesiz Raspberry PI önemli bir çığır açtı. Boyutunun küçük ama özelliklerinin çok olduğu bu küçük elektronik board, gömülü sistemlere olan ilgi ve alakayı da arttırdı.

Gömülü sistemler tarafında böyle bir durum var iken, Java tarafında da Java programlama dili ve ortamının 8. versiyonu Java SE 8 piyasaya sürüldü. Java ME (Mobile Edition) ise, uzunca bir süredir suskundu. Fakat geçtiğimiz günlerde Java ME 8 sürümü Oracle tarafında yayınlandı. (Bkz. java-me-8-released) Bu sürüm ile artık, Raspberry PI gibi çeşitli gömülü sistem aygıtlarında Java ME 8 kullanılabilmektedir.

Şu anda Java ME 8’in desteklediği platformlar aşağıdaki gibidir;

  • Raspberry Pi Model B on Debian Linux

  • Freescale FRDM-K64F on mbed

  • Qualcomm IoE platform based on QSC6270T and Brew MP

Java ME 8, gömülü cihazlarda düşük bellek tüketimi ve gömülü sistemlere odaklı geliştirilmi çeşitli API’leri ile karşımıza çıkıyor. Bunlar;

  • JSON API

  • Async HTTP API

  • OAuth 2.0 API

  • JSR 75 (File Connection API)

  • JSR 120 (Wireless Messaging API)

  • JSR 172 (Web Services API)

  • JSR 177 (Security and Trust Services API)

  • JSR 179 (Location API)

  • JSR 280 (XML API)

Ayrıca Java ME ile çalıştığınız gömülü sistemin donanımsal birimlerini yönetebiliyoruz. Örneğin; GPIO, I2C, SPI, UART

Java ME 8 ile Raspberry PI üzerinde LED yakma

Bir programlama dili öğretilirken genelde ilk adım Hello World ifadesini konsola çıktılamaktır. Gömülü sistemlerin Hello World 'ü ise, bir LED’i yakmaktır. Biraz daha detaylandırırsak, cihazın GPIO (Genel amaçlı giriş çıkış) pinlerini yönetmektir.

Gömülü sistemlerde genel olarak bir pin, hem giriş hem de çıkış olarak kullanılabilmektedir. Şahsım Raspberry PI Model B Revision 1 sahibiyim ve onda 8 adet GPIO pini bulunuyor. Bu pinleri hem giriş, hem de çıkış olarak kullanabilmekteyiz.

Donanımsal Gereksinimler

Yapacağımız uygulamada, merkezde Raspberry PI olmak üzere çeşitli donanımsal araç-gerece ihtiyacımız olacak. Bunları aşağıdaki gibi detaylandırabiliriz;

Raspberry PI

Raspberry PI Model B (Revision 1 veya Revision 2). Bende eski olan Revision 1 bulunuyor. Revision 2’de GPIO pin sayısının daha fazla olduğunu ve birkaç ufak değişikliğin olduğunu görüyorum (Bkz. upcoming-board-revision).

Henüz Raspberry PI’niz yok ise, Farnell veya RS Components gibi firmalardan elde edebilirsiniz. 75 € gümrük sınırını aşmadığı için en uygun elde etme biçimi bu. Fakat robotistan gibi yerli girişimlerden elde etmekte mümkün.

Bread Board

Bread board, elektronik devreleri kolay bir biçimde kurabilmek ve test edebilmek için üretilmiş basit ama önemli bir araç.

breadboard
Figure 1. Bread Board

Aslında olay çok basit, kenarlarda ikişer adet boylu boyunca uzanan 4 hat bulunyor. Ortada ise, ikiye bölünmüş enlemesine uzanan hatlar var. Hatlar üzerindeki noktalarda ise, kablo, pin, led, buton gibi bileşenleri yerleştirip, çıkarabileceğiniz delikler bulunuyor. Yani içerisi şöyle;

breadboard inside
Figure 2. Bread Board hatları

SD Kart

Raspberry PI’yi satın aldığımda SD Kartı yanında gelmişti, fakat şuan bu uygulama yapılıyor mu bilmiyorum. İşletim sisteminin kurulması için SD kart gerekmektedir.

Adaptör

5V çıkışlı microusb adaptör tercih edebilirsiniz.

Wifi adapter

Raspberry PI’de ethernet girişi bulunuyor fakat, çalışma ortamınızda kablonuz yok ise bir mini wifi bileşeni almak en iyi çözüm olacaktır.

wifi

Kablo, Led, GPIO Extension Board

Bu gereçleri Ebay üzerinden toplu olarak elde etmiş idim. Raspberry PI Starter Kit

starter kit
Note
Ebay ile uzakdoğu ülkeleri üzerinden verilen siparişler yaklaşık 15-30 gün arasında ulaşmaktadır.

HDMI Kablosu

Raspberry PI üzerinde HDMI çıkışı bulunmaktadır. Ben HDMI destekli bir televizyon kullandım. Bu maksatla 2 metrelik bir HDMI kablosu almayı tercih ettim.

Klavye ve Maus

USB destekli bir klavye ve maus olmalıdır.

Yazılımsal Gereksinimler

Java ME 8 ile başlarken Netbeans veya Eclipse IDE’lerini kullanabiliriz. Bir anti-eclipser olarak Netbeans kullanmayı tercih ettim :)

Java ME 8 SDK

Java ME 8 SDK’yi şuanlık sadece Windows ortamında kullanabiliyoruz. Java ME SDK 'yı bu adresten edinerek sistemimize kurabiliriz.

Java ME 8 Plugin (Netbeans veya Eclipse)

Java ME SDK Plugins sayfasından Java ME SDK Plugins for NetBeans indiriyoruz. İndirdiğimiz, zip dosyasını bir istediğimiz bir dizine ayıklayıp, içindeki .npm uzantılı eklentilerin hepsini yüklüyoruz.

Tools > Plugins > Downloaded

javame8 sdk plugin install
Figure 3. Java ME 8 SDK Netbeans Pluginin Kurulması
Java ME 8 Embedded

Raspberry PI üzerine kurmak üzere yaklaşık 3.5 MB’lik Java ME 8 Embedded' indiriyoruz. ( Not: Birazdan kurulumundan bahsedeceğiz.)

Raspbian OS Kurulması

İlk iş olarak, Raspberry PI SD kartı üzerine, Debian tabanlı bir işletim sistemi (Raspian) kurulmalıdır. http://www.raspberrypi.org/downloads/ sayfasından indirilerek talimatları ile kurulmalıdır. Sonrasında ise, network bağlantısı sağlanmalıdır.

Devrenin Kurulması

Raspberry PI’nin tüm portlarını bread board ile entegre etmek için, GPIO extension kiti ve ara kablosu kullanmak kolaylık sağlayacaktır.

gpio extension cable
Figure 4. GPIO Extension kablosunun Raspi’ye takılması

Sonrasında ise GPIO extension kiti kablonun öteki ucuyla beraber bread boarda takılmalıdır.

gpio extension breadboard
Figure 5. GPIO Extension’in bread boarda takılması

Sonrasında, bir LEDin katot (-) ucu bir direnç ile birlikte, bread board üzerindeki mavi (toprak) hattına bağlanmalıdır. Burada Starter Kit içinden çıkan 560 ohm luk direnci kullandık.

direnc led
Figure 6. Direnç ve LEDin takılması

Bir sonraki aşamada ise LEDin anod (+) ucuyla, P0-P7 arası portlardan herhangi birisini, bir kablo ile birleştiriyoruz. Bu uygulamada P5 portunu tercih ettin.

anod p5
Figure 7. LED ve portun birbirine bağlanması

Bu aşamada devrenin kurulması tamamlanmış oluyor.

Java ME 8’in Raspberry PI’ye Yüklenmesi

Raspberry PI’ye bir Network bağlantısı ile ilişkilendirdikten sonra, çalıştığımız makineden Raspiye bir SSH bağlantısı kurarak tüm ihtiyaçlarımızı çalışma makinamiden gerçekleştirebiliriz.

Raspberry PI ile SSH bağlantısı kurarken ve Raspberry PI’ye Java ME 8’i transfer ederken çeşitli Linux araçlarına ihtiyaç duymaktayız. Gereken Linux komutlarını Windows ortamında kullanabilmek için gnuwin32 projesinden faydalanabiliriz.

  • gnuwin32 indirilir.

  • İndirilen .exe bir dizine ayıklanır.

  • Ayıklanılan dizine konsoldan geçilir ve download.bat çalıştırılır.

  • download.bat sonrası install.bat çalıştırılır. Belirli bir süre sonra yükleme tamamlanır ve Linux komutlarını taklit eden araçlar ayıklanan /gnuwin32/bin dizininde belirir.

gnuwin32 bin
Figure 8. Gnuwin32 Linux Araçları

Bu dizin içindeki tüm araçlara, her konsol dizininden erişebilmek için /bin dizini Environment Variables (Sistem değişkenleri) ‘a eklenir.

Ardından gnuwin32 içindeki scp aracıyla Java ME’yi Raspiye göndeririz.

$ cd /Downloads (1)
$ scp oracle-jmee-8-1-rr-raspberrypi-linux-bin.zip pi@192.168.2.61:/home/pi/jmee (2)
  1. Java ME indirilen dizine geçilir.

  2. scp aracıyla Java ME /home/pi/jmee dizinine transfer edilir.

Note
192.168.2.61 adresi, Raspberry PI’nin almış olduğu IP adresidir.

Java ME’nin Çalıştırılması

Raspberry PI’ye gönderilen zip dosyası ayıklanarak, Java ME agent çalıştırılır. Fakat öncesinde SSH ile Raspberry PI’ye bağlantı kurulmalıdır.

$ ssh pi@192.168.2.61 (1)
$ pi@192.168.2.61's password: raspberry (2)
  1. 192.168.2.61 adresindeki pi kullanıcı olarak bağlanılıyor

  2. Şifre giriliyor

SSH ile bağlantı kurduktan sınra Java ME’yi ayıklayıp çalıştırabiliriz.

$ cd /home/pi/jmee (1)
$ unzip oracle-jmee-8-1-rr-raspberrypi-linux-bin.zip (2)
$ cd /bin (3)
$ sudo ./usertest.sh (4)
  1. /pi/home/jmee dizinine geçiliyor.

  2. zip dosyası ayıklanıyor.

  3. /bin dizinine geçiliyor.

  4. usertest.sh scripti root yetkisiyle çalıştırılıyor.

Bu aşamada Raspberry PI üzerinde bir Java agent çalışmaya başlıyor. Sonrasında ise Java ME SDK içerisindeki Device Manager ile Raspberry PI’ye uzak bağlantı kurabiliyoruz.

Device Manager’a Rapberry PI Tanıtmak

Java ME SDK içinde hem emülator hem de gerçek makineleri yönetebiliyoruz. Biz gerçek bir Raspberry PI cihazını yöneteceğimiz için, Device Manager’a uzaktaki Raspiyi tanıtmalıyız. Device Manager aracı, Java ME SDK yüklediğiniz dizinde /bin dizininde yer almaktadır.

device manager
Figure 9. Device Manager

device-manager.exe aracını çalıştırarak, uzaktaki Raspberry PI cihazını ona tanıtabiliriz. Küçültülmüş sistem penceresinde bulunan Device Manager 'a sağ tuşluyoruz ve Manage Device Connections menüsünü seçiyoruz.

device manager icon
Figure 10. Manage Device Connections

Ardından Raspberry PI’nin almış olduğu IP adresini yazarak onu çalışma makinemize tanıtıyoruz.

add device connection
Figure 11. Add Device Connection

Bu aşamada, Raspberry PI üzerinde Java ME 8’i çalıştırmış ve sistemimize tanıtmış oluyoruz. Şimdi ise uygulamamızı yazıp, Raspberry PI üzerinde çalıştırabiliriz.

Java ME 8 Embedded Projesinin Oluşturulması

Java ME 8 Embedded projesini Netbeans 8.0.1 ile hazırlayacağız. Bu aşamada Java ME pluginlerinin ve Java ME SDK’nin eksik olmadığından emin olmalıyız.

Adım 1

File > New Project menüsü takip edilir ve Java Me Ebdedded > Java Me Ebdedded Application seçilir.

javame step 1
Figure 12. Java Me Ebdedded Application seçilmesi

Adım 2

Proje ismi ve gerekliyse diğer kısımlar düzenlenir.

javame step 2
Figure 13. Proje Ayarları

Adım 3

Bu adımda oluşan proje gözlemlenir ve JavaMeRaspi adında Midlet türünden bir sınıfın oluşturulduğu görülür.

javame step 3
Figure 14. Proje görünümü

Midlet sınıfı içinde startApp() ve destroyApp() adında iki gövdesiz metod bulunmaktadır. startApp() uygulama çalışmaya başladığında, destroyApp() ise, uygulama sonlandığında otomatik olarak koşturulmaktadır.

Uygulamanın Yazılması

Artık projeyi oluşturduğumuza göre JavaMeRaspi sınıfını düzenleyebiliriz.

public class JavaMeRaspi extends MIDlet {

    @Override
    public void startApp() {

        try {

            start(); // (1)

        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    private void start() throws IOException {

        GPIOPin led5 = DeviceManager.open(24); // (2)

        while (true) { // (3)

            led5.setValue(true); // (4)
                bekle(1000); // (5)
            led5.setValue(false); // (6)
                bekle(1000); // (7)

        }

    }

    private void bekle(int sure) {
        try {
            Thread.sleep(sure); // (8)
        } catch (InterruptedException ex) {
            ex.printStackTrace();
        }
    }

    @Override
    public void destroyApp(boolean unconditional) {
        // Uygulama sonlandı
    }
}
  1. start(); metodu ile akış başlatılıyor.

  2. Port 5, nesnel olarak temsil ediliyor.

  3. Sonsuz bir döngü kuruluyor.

  4. Port 5 enerjilendiriliyor. Led yanıyor.

  5. 1 saniye bekleniyor.

  6. Port 5 'in enerjisi kesiliyor.

  7. 1 saniye bekleniyor.

  8. Tanımlanan milisaniye kadar süre bekletiyor.

Bu noktada neden Port 5 için 24 numarasını tercih edildiğini merak edebilirsiniz. Raspberry PI’nin her portu için birer numarası bulunuyor. Bunlar;

Port Numara

GPIO0

17

GPIO1

18

GPIO2

R1:21 / R2:27

GPIO3

22

GPIO4

23

GPIO5

24

GPIO6

25

GPIO7

4

Note
R1 : Revision 1
R2 : Revision 2
Daha detaylı pin bilgileri için

Projeye Aygıtı Tanıtmak

Uygulama tamam, şimdi Device Manager’a tanıtılan Raspiyi Netbeans projesine tanıtmalıyız. Bunun için projeye sağ tuşlayarak Properties penceresine gidiyoruz ve Platform kısımından EmbeddedExternalDeviceX seçili olduğundan emin oluyoruz.

embedded external device
Figure 15. EmbeddedExternalDeviceX’in Tanıtılması

Uygulama İzinlerini Tanımlamak

Java ME uygulamaları gömülü sistem üzerinde çalışacakken, geliştiriciden sistemin hangi özelliklerini kullanmaya yetkin olacağına dair izinleri talep etmektedir. Bu sebeple uygulamamıza iki adet izin eklemeliyiz. Bunlar;

jdk.dio.gpio.GPIOPinPermission ve jdk.dio.DeviceMgmtPermission 'dir.

permission 1
Figure 16. jdk.dio.DeviceMgmtPermission izni veriliyor

Bu yetki cihazı yönetme yetkisi vermektedir.

permission 2
Figure 17. jdk.dio.gpio.GPIOPinPermission izni veriliyor

Bu yetki ise GPIO pinlerini kontrol etme yetkisi vermektedir.

Bu iki izin verildikten sonra tüm adımları tamamlamış oluyoruz.

Uygulamanın Çalıştırılması

Projeye sağ tuşlayarak Run dediğimizde, 5 numaralı porta bağlanan kırmızı LED’in birer saniye arayla yanıp söndüğünü görüyoruz.

Faydalanılan Kaynaklar

Tekrar görüşmek dileğiyle..