月曜日 7 25, 2016

Devie I/OをJava SEで利用してシリアル通信 - BLEビーコンの利用

Device I/O APIを利用してJava SE上でシリアル通信を行う方法を紹介します。

Java Day 2016のキーノートのデモでは、ドローンに搭載したゲートウェイでBLEのビーコンを利用して受信した温度/湿度センサーのデータをシリアル通信で取得しました。

ここではその方法を説明します。

ハードウェア環境は、

ソフトウェア環境は、

を利用します。

まずDevice I/Oのバイナリを生成します。

Atmark Techno社から開発キットをダウンロードしてセットアップしてください。開発キットATDEの入手およびセットアップ方法はこちらを参照してください。

次にJava SE 8のJDK(32ビットLinux/x86版)をダウンロードして、セットアップしたATDE内で展開します。

最後にこちらを参考にしてDevice I/Oのソースコードを入手して、ATDE内に展開してビルドしてください。 ビルドが成功するとbuild/deviceio/lib配下に以下のファイルが生成されます。

  • ext/dio.jar
  • arm/libdio.so

これでJava SE 8でDevice I/Oを利用する環境が整いました。

実際に利用できるか試してみましょう。

まずは次のようなUARTを利用するサンプルコードUARTServer.javaをコンパイルしてUARTServer.classを作成します。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.channels.Channels;
import java.util.logging.Level;
import java.util.logging.Logger;
import javaday.db.Sensor;
import jdk.dio.DeviceConfig;
import jdk.dio.DeviceDescriptor;
import jdk.dio.DeviceManager;
import jdk.dio.uart.UART;
import jdk.dio.uart.UARTConfig;

public class UARTServer {

    private UART uart = null;

    private Thread launcher = null;
    private boolean running = false;

    public UARTServer() {

        UARTConfig config = new UARTConfig("ttyACM0",
            DeviceConfig.DEFAULT,
            115200,
            UARTConfig.DATABITS_8,
            UARTConfig.PARITY_NONE,
            UARTConfig.STOPBITS_1,
            UARTConfig.FLOWCONTROL_NONE);

        launcher = new Thread() {

            public void run() {
                try {
                    uart = (UART)DeviceManager.open(config);
                    InputStream is = Channels.newInputStream(uart);
                    StringBuffer buffer = new StringBuffer();

                    while (running) {

                        char result = (char)is.read();

                        if((result == '\n') || (result == '\r')) {
                            if(buffer != null) {
                                System.out.println(buffer.toString());
                                System.out.println("Buffer Length: " + buffer.toString().length());

                            }

                            buffer = null;
                        } else {
                            if(buffer == null)
                                buffer = new StringBuffer();
                            buffer.append(result);
                        }

                    }

                } catch (IOException ex) {
                    Logger.getLogger(UARTServer.class.getName()).log(Level.SEVERE, null, ex);
                } catch (Exception ex) {
                    Logger.getLogger(UARTServer.class.getName()).log(Level.SEVERE, null, ex);
                } finally {
                    closeUART();

                }
            }

        }

    }

    private void start() {
        running = true;
        launcher.start();
    }

    private void stop() {
        running = false;
    }

    private void closeUART() {
        try {
            if (uart != null) {
                uart.close();
            }
        } catch (Exception ex) {
            Logger.getLogger(UARTServer.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public static void main(String[] args) {
        UARTServer server = new UARTServer();
        server.start();
    }

}

次にプロパティファイルdio.propertiesを以下の内容で用意します。

100 = deviceType: uart.UART, controllerName:ttyACM0, name:ttyACM0, baudRate:115200, dataBits:8, parity:0, stopBits:1, flowControl:0, predefined:true

uart.UART = baudRate:115200, parity:0, dataBits:8, stopBits:1, flowControl:0, predefined:true

またポリシファイルjava.policyを以下の内容で用意します。

grant codeBase "file:${{java.ext.dirs}}/*" {
        permission java.security.AllPermission;
};
grant {
        permission java.security.AllPermission;
};

これですべての準備が整いました。作成したdio.jar, libdio.so, UARTServer.class, java.policy, dio.propertiesをゲートウェイの任意のディレクトリにすべてコピーし、Cypress社のSDKに含まれるBLEデータのレシーバであるBLE-USB Bridge and Debug BoardをゲートウェイのUSBに接続し、センサーを近くに置いて、

    % sudo java -Djava.security.policy=./java.policy -cp ./dio.jar -Djava.library.path=. -Djdk.dio.registry=./dio.properties UARTServer

と実行してください。

ターミナル上に取得したセンサーのデータが表示されます。


水曜日 6 22, 2016

Oracle Java ME Embedded 8.3のリリース

Oracle Java ME Embedded 8.3がリリースされました。

Cortex-M7を採用しているSTM32F7での評価が可能となっています。またIntel Galileo第2世代開発ボードでも利用可能です。

詳しくはこちらから。 また評価用バイナリはこちらからダウンロード可能です。

金曜日 4 29, 2016

Java Day Tokyo 2016

2016年5月24日(火)に今年もJava Day Tokyoが開催されます。

基調講演ではデバイスとしてIoTのゲートウェイの利用を紹介します。

また午後のセッションでは、 

  • JavaFXのポーティング
  • IoTデバイスでセキュリティを考慮したJavaの利用
  • ゲートウェイに対するJavaの要求
  • セキュアエレメントでJavaを利用するためのコアとなる技術 Global Platform のIoTでの取り組み

などを実施する予定です。 ご来場お待ちしています。

参加費は無料です。登録はこちらからお願いします。 

火曜日 10 06, 2015

Oracle Java ME Embedded 8.2のリリース

Oracle Java ME Embedded 8.2がリリースされました。

動作に必要なメモリ容量が大幅に削減されています。また従来のWindows用に加えLinux用のSDKもリリースされました。

詳しくはこちらから。

木曜日 9 10, 2015

Jigsaw Early Access

Jigsawモジュールシステムのearly accessが開始されました。

ダウンロードはこちらから

木曜日 8 06, 2015

Oracle Java ME Embedded 8.1 for STM32429I-EVAL プラットフォーム

STM32429I-EVAL用のJava ME 8.1のDeveloper Previewがリリースされました。

詳細はこちらから


金曜日 9 20, 2013

ハードフロートABI対応版 Java SE Embedded 7

組み込み向けのJava SEの最新版 Java SE Embedded 7 update 40が発表されました。

http://www.oracle.com/technetwork/java/javase/emb7u40-relnotes-2004166.html

今までのARM/Linux向けのJava実行環境バイナリでは、浮動小数点ABI がソフト(arm-sflt, arm-vfp-sflt)のみに対応していましたが、本アップデートにより、ハード(arm-vfp-hflt)にも対応しています。

水曜日 7 03, 2013

リコーMFPにJava SEを搭載

オラクルの顧客事例サイトに、株式会社リコー様のデジタル複合機(MFP)へのJava SE搭載事例が掲載されました。2003年からJava MEを採用頂いていましたが、2011年よりJava SEを搭載しています。この事例サイトでは、Java採用に至る背景や、Java MEからSEへの移行の経緯などが紹介されています。

株式会社リコー様
リコー、MFPを中核とした「オフィスの生産性向上」と「ワークスタイル変革」の提供を目指し、プリントエンジンを制御するコントローラにJava SE を搭載
株式会社リコーは、事業の中核となる画像&ソリューション事業において、MFPのプリントエンジンを制御するためのコントローラに、Java Platform, Standard Edition(Java SE)を搭載。顧客の課題解決やニーズに合わせた画像機器およびソリューションを提供することで、オフィスの生産性向上やワークスタイルの変革に貢献することを目指している。

水曜日 6 12, 2013

楽天が東光電気製ゲートウェイでデマンドレスポンス推進

2013年5月27日に、楽天株式会社様が、Java SE Embeddedを搭載した東光電気製ゲートウェイSTiNC IIを活用し、OpenADR準拠のデマンドレスポンスを推進すると発表しています。管理・制御ソフトウェアには、米国Wireless Glue Networks社のOpenADR対応Javaアプリケーションが使用されます。プレスリリースについては以下をご覧下さい。

プレスリリース「楽天、グローバルエンジニアリングと協業し、九州電力管内でOpenADR標準対応のデマンドレスポンスを推進—東光電気、米WGN社による新たなシステムを採用

東光電気様のSTiNC IIは、Java SE Embeddedを採用したARM Coretex-A8搭載Linuxゲートウェイ装置で、1-Wire (MicroLAN)やRS-485などの本体端子で直接センサー類に接続し、標準搭載のJavaアプリケーションでエネルギー管理が行なえます。

火曜日 6 04, 2013

オムロンのPLCにJava SEを採用

オラクルマガジンVol.16 2013年5月号の国内最新導入事例に、オムロン株式会社様の事例が掲載されました。産業用制御機器であるPLC (Programmable Logic Controller)にJava SEが採用されています。

オムロン株式会社様
最新FAコントローラの開発プラットフォームにJavaを採用
シンプル・確実・高速にデータベースと接続
オムロン株式会社(以下、オムロン)の事業の1つ、制御機器、およびファクトリーオートメーション(FA)システム事業を運営するインダストリアルオートメーションビジネスカンパニーは、FA用コントローラからセンサー、スイッチ、リレー、セーフティ機器まで、10万仕様を超える製品を提供。制御機器の分野において約40%という国内トップシェアを誇っている。さらなる競争優位性向上を目指して同カンパニーは、Sysmacマシンオートメーションコントローラ「NJシリーズ」のデータベース接続プラットフォームとして「Java Platform, Standard Edition(Java SE)」を採用した。

金曜日 5 31, 2013

Java Day Tokyo 2013

[2013年5月31日更新] 2013年5月14日(火)秋葉原UDXにてJava Day Tokyo 2013が開催されました。Java Embeddedのセッションもいくつかあり、展示コーナーではJava搭載のデバイスやデモを紹介しました。

OTNのページに当日のセッション資料と動画(一部を除く)が公開されています。Java Embeddedに関連するセッションを紹介します。

[L-1] 基調講演
Java Embeddedの開発責任者Nandini Ramaniらが、Java Embeddedを含む最新情報を紹介しました。

[B-2] Internet of ThingsにおけるJava: Small, Smart, Connected (Java ME Embedded)
Java MagazineのEmbedded特集号(第9号)のメイン特集で熱く語っているTerrence Barr (シニアテクノロジスト&製品マネージャー)が、Internet of Things (モノのインターネット)時代にJavaがいかに重要か、M2Mを支えるD2Dビジョンの紹介と、スマートデバイスに最適なJava ME Embedded (CLDCベースの新製品)について、Angela Caicedo(テクノロジスト エバンジェリスト)と共にデモを交えながら紹介しました。

[B-1] Raspberry Pi NightHacking (Java SE / JavaFXを楽しもう)
JavaFXで有名なStephen Chin(Javaテクノロジー アンバサダー)が、NetBeansとSceneBuilderを使ってJavaFXアプリケーションを作成し、安価なARMデバイスRaspberry Piで実行するデモを行ないました。後半にはAngela Caicedo(テクノロジスト エバンジェリスト)がLCDやセンサーを接続したRaspberry Piで奥行きのある3Dデモを紹介しました。

[C-3] Device to Data Centerを実現するJava Embedded Suite
D2Dの中でデバイスとデータセンターの中継の役割を果たすゲートウェイに最適な、Java SE、Java DB、GlassFish (Embedded版)を統合した新製品Java Embedded Suite、およびそのオプション製品である、リアルタイムにイベント処理を行なうOracle Event Processing (OEP) Embedded版(3月末にダウンロード公開開始)について紹介しました。このセッションの動画はありませんが、WebLogic Channelのレポート記事をご覧下さい。

[A-4] タブレット用のJavaFXアプリケーション開発
Jim Weaverが、MicrosoftのタブレットデバイスSurface Proを使い、JavaFXのマルチタッチ機能を使ったプログラミングについて紹介しました。


Java Embeddedデモ展示コーナー

火曜日 2 12, 2013

RICOH & Java Developer Challenge Plus 2012

2013年1月23日にリコー様の学生向けJavaプログラミングコンテスト「Ricoh & Java Developer Challenge Plus 2012」最終選考会が開催され、プレスリリースやレポートが公開されています。今年度の大会では、対象機器を従来の複合機のみからプロジェクターにも拡げ、タブレットやクラウドとも連携した様々な作品が発表されました。

オラクル賞は北見工業大学の「北見工業大学医療画像研究室+」チームが受賞し、トロフィ代わりの社員犬キャンディのぬいぐるみをはじめ、OracleやJavaのロゴ入りグッズ一式が授与されました。発表本番ではトラブルのためプロジェクターへの出力が正常に動作しなかったのですが、JavaFXを採用したことが評価されました。

その他の受賞チームや選考会の様子は以下のサイトをご覧下さい。

  • 2013年1月24日 株式会社リコー ニュースリリース「Javaビジネスアプリの学生プログラミングコンテスト - インタラクティブサイネージを提案した産業技術大学院大学がグランプリ獲得」
  • 2013年1月25日 マイナビニュース「挑戦することに意義がある!」
  • 2013年2月8日 いまじおボットが行く!! Vol.8「最終選考会 潜入レポート2012」
  • スマートグリッドをよりスマートにする組み込みJava

    ITmedia TechTargetジャパンにて、スマートグリッドにおける組み込みJavaのホワイトペーパー(PDF 18ページ)が公開されています。スマートメーター、コンセントレーター、ゲートウェイ、宅内ディスプレイ、スマート家電などにJavaがどのような役割を果たすかを解説しています。以下は目次からの抜粋です。

  • 新たなスマート・グリッドとJavaの役割
  • スマート・グリッドの実装に関する課題
  • ユーザー・インタフェース
  • スマート・グリッド・アプリケーションにおけるJavaとAndroid
  • リモート管理およびデバイス管理
  • ホワイトペーパー「スマート・グリッドをよりスマートにする組み込みJava」は、ITmedia TechTarget会員限定で無料でご覧頂けます。

    木曜日 11 22, 2012

    ARM Technology Symposium 2012

    2012年12月6日(木)、東京コンファレンスセンター品川において、アーム株式会社主催「ARM Technology Symposium 2012」が開催され、日本オラクルの組み込みJavaチームも出展します。

    セッションでは、最後の時間枠(17:20〜17:50) [C-7]で「デバイスからデータセンターにいたる開発に最適なJava Embedded on ARM」と題して、JavaOne San Francisco 2012で発表された内容を中心に、ARMに特化した組み込みJavaの最新情報を紹介します。

    展示ブースでは、ARM搭載デバイスを使った組み込みJavaのデモを展示します。

    参加費は無料です。ぜひ登録してご参加下さい。

    日曜日 11 18, 2012

    Javaコンテストから生まれたアプリ

    リコー様が開催した学生向けJavaプログラミングコンテスト「Ricoh & Java Developer Challenge 2011」で「かわいかったで賞」を受賞した作品「Nur-imagio ぬりまじお」のアイデアがiOSアプリ「ぬりえぱらぱら」として生まれ変わりました。ぬりえをカメラで撮影するとキャラクターがiPhone/iPad画面上を動き回り、印刷すればパラパラ漫画も作れます。

  • RICOH TAMAGO ParaPara「ぬりえぱらぱら」
  • Ricoh & Java Developer Challenge Plus 2012 - Twitter | Facebook
  • About

    日本オラクルのJavaチームから、デバイスに向けた最新情報をお送りしていきます。

    Search

    Archives
    « 7月 2016
         
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    26
    27
    28
    29
    30
    31
          
    Today