• Anasayfa
  • Eğitimler
    • JavaScript Eğitimi
    • Angular 2 Eğitimi
    • React.js Eğitimi
    • Java 8 Eğitimi
    • Java EE 7 Eğitimi
    • Spring Framework Eğitimi
    • Git Eğitimi
  • Online Eğitimler
    • Online React.js Eğitimi
    • Online Angular 2 Eğitimi
    • Online Spring Boot Eğitimi
  • Referanslar
  • Hakkında
  • İletişim
KodEdu
  • Anasayfa
  • Eğitimler
    • JavaScript Eğitimi
    • Angular 2 Eğitimi
    • React.js Eğitimi
    • Java 8 Eğitimi
    • Java EE 7 Eğitimi
    • Spring Framework Eğitimi
    • Git Eğitimi
  • Online Eğitimler
    • Online React.js Eğitimi
    • Online Angular 2 Eğitimi
    • Online Spring Boot Eğitimi
  • Referanslar
  • Hakkında
  • İletişim

Java ME 8 ile Raspberry PI Uygulaması Geliştirmek

  • Posted by Kodedu
  • Categories backend, Genel, Uncategorized, Yazılar
  • Date 22 Kasım 2014

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

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

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

Kablo, Led, GPIO Extension Board

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

starter kit.jpg
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

javame8 sdk plugin install.png
Şekil 1. 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.jpg
Şekil 2. 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.jpg
Şekil 3. 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.jpg
Şekil 4. 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.jpg
Şekil 5. 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.png
Şekil 6. 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.
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)
  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.png
Şekil 7. 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.png
Şekil 8. Manage Device Connections

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

add device connection.png
Şekil 9. 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.png
Şekil 10. Java Me Ebdedded Application seçilmesi

Adım 2

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

javame step 2.png
Şekil 11. 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.png
Şekil 12. 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

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.

embedded external device.png
Şekil 13. 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.png
Şekil 14. jdk.dio.DeviceMgmtPermission izni veriliyor

Bu yetki cihazı yönetme yetkisi vermektedir.

permission 2.png
Şekil 15. 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

  1. Java ME Embedded Getting Started Guide
  2. RaspberryPi GPIO
  3. wiringPi

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

Tag:backend, java8, javame, raspberry pi

  • Share:
author avatar
Kodedu

Previous post

Java 8 - CompletableFuture ile Asenkron Programlama
22 Kasım 2014

Next post

Asciidoc Cheatsheet - Hızlı Başlangıç
20 Aralık 2014

You may also like

api-logo
Swagger Nedir? Neden kullanılır?
10 Ekim, 2018
spring-cli-logo
Spring CLI ile Spring Boot Projeleri Hazırlamak
21 Ağustos, 2017
eureka_architecture
Spring Cloud Netflix ve Eureka Service Discovery
3 Temmuz, 2017

    1 Comment

  1. Mustafa
    13 Aralık 2016
    Cevapla

    Merhaba gnuwin32 kullanımı nasıldır. İçerisinde 1200 adetten fazla materyal mevcut ve “SCP” içerisinde bulamadım.

Leave A Reply Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta listesine kayıt olun!






Gözde yazılar

Java Mimarisiyle Kurumsal Çözümler : Kurumsal Java Kitabı
16Eyl2012
Java API for JSON Processing – Stream bazlı JSON Üretmek ve Tüketmek
06Ağu2013
AsciidocFX projesi Duke’s Choice Award 2015 ödülünü kazandı
28Eki2015
Knockout.js – Hesap Makinesi Örneği
02Şub2013

Son Yazılar

  • Java’da Record’lar 27 Ocak 2020
  • Swagger Nedir? Neden kullanılır? 10 Ekim 2018
  • Spring CLI ile Spring Boot Projeleri Hazırlamak 21 Ağustos 2017
  • Spring Cloud Netflix ve Eureka Service Discovery 3 Temmuz 2017
  • Online React.js Eğitimi ardından (15-25 Mayıs 2017) 31 Mayıs 2017

Son Yorumlar

  • Coupling ve Cohesion Kavramları Nedir? için Hilal
  • Naïve Bayes Sınıflandırma Algoritması için Rahman Usta
  • Naïve Bayes Sınıflandırma Algoritması için Mete
  • YAML Nedir? Neden YAML Kullanmalıyız? için kara
  • JWT (JSON Web Tokens) Nedir? Ne işe yarar? için Furkan

Get Java Software

Arşivler

Bizi takip edin

React.js Eğitimi Başlıyor
11-22 Eylül, 2017
Eğitmen
Rahman Usta
İletişim

merhaba@kodedu.com

  • Hakkında
  • Gizlilik Politikası
  • İletişim
  • Referanslar
Kodedu Bilişim Danışmanlık
Cemil Meriç mah. Çelebi sok.
No:16/3 Ümraniye/İSTANBUL
Tel: 0850 885 38 65
Alemdağ V.D.: 8960484815

KODEDU © Tüm hakları saklıdır.