Java ME 8 ile Raspberry PI Uygulaması Geliştirmek
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ç.
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;
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.
Kablo, Led, GPIO Extension Board
Bu gereçleri Ebay üzerinden toplu olarak elde etmiş idim. Raspberry PI Starter Kit
Not
|
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
- 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.
Sonrasında ise GPIO extension kiti kablonun öteki ucuyla beraber bread boarda takılmalıdır.
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.
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.
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.
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)
- Java ME indirilen dizine geçilir.
scp
aracıyla Java ME/home/pi/jmee
dizinine transfer edilir.
Not
|
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)
192.168.2.61
adresindekipi
kullanıcı olarak bağlanılıyor- Ş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)
/pi/home/jmee
dizinine geçiliyor.zip
dosyası ayıklanıyor./bin
dizinine geçiliyor.usertest.sh
scriptiroot
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.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.
Ardından Raspberry PI’nin almış olduğu IP adresini yazarak onu çalışma makinemize tanıtıyoruz.
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.
Adım 2
Proje ismi ve gerekliyse diğer kısımlar düzenlenir.
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.
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ı
}
}
start();
metodu ile akış başlatılıyor.Port 5
, nesnel olarak temsil ediliyor.- Sonsuz bir döngü kuruluyor.
Port 5
enerjilendiriliyor. Led yanıyor.- 1 saniye bekleniyor.
Port 5
‘in enerjisi kesiliyor.- 1 saniye bekleniyor.
- 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 |
Not
|
R1 : Revision 1R2 : Revision 2Daha 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.
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.
Bu yetki cihazı yönetme yetkisi vermektedir.
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..
Tag:backend, java8, javame, raspberry pi
1 Comment
Merhaba gnuwin32 kullanımı nasıldır. İçerisinde 1200 adetten fazla materyal mevcut ve “SCP” içerisinde bulamadım.