ラズパイ(RPi)でMicrobitからのBluetooth経由でのデータ(ボタン押下、メッセージなど)を受信するために、以下の準備をします。
Javaサーバーを立ててモニョモニョやろうと考えているのですが。。。具体的には、MIDIメッセージをMIDI音源に送信して音を鳴らす。ということ考えています。
イメージとしてはこんな感じです。
Bluetooth通信
MIcrobitからのBluetooth通信を行うのには、リンク先のサイトを参考にしてみるとBluetoothサービスを使用してやるようです。
そして、問題のJavaサーバー側を実装しようと思い色々と調べていたら。。。
Mavenを使おう(失敗)
上のような考えに至りました。理由は以下の通りです。
使用できるAPIをMaven(Gladleなど)でインストールして実行したほうが早い
そして、以下のライブラリをダウンロード(POM使用)します。
詳細に関してはこちらのリンクを参照してください。POMファイルにコピペできます。
- blueCove
- javax.microedition: midpの方はビルドエラー
調べてみると、2の方はJavaMEのライブラリのようでした。
つまりは、JavaMEで開発しましょうという事になりました(笑)
JavaME
調べてみると、開発するOSに依存するようです。(まぁそうなるよなぁ。。。)なので開発するのにはライブラリなどまとまったものをインストールするほうが楽だろうという判断に至りました。
調べた結果
色々調べて見たらMacOSでやる場合は、自分の描いているようにPCで開発、テスト、実機へデプロイと言うのができないようです。。。。
J2ME開発をやるならばWindowsで。。。と言うとこ炉に至りました。
以下は調べて見た結果です。
NetBeensで環境構築はWindowsのみ
以下は失敗した記事です。結局はNetBeensを使用してやるのが良いとなりました。
なので、以下の環境で開発する方向でやる事にします。
- Exlipseのプラグインを使用する
- PC(Mac)上で作成したものをラズパイにインストールする、もしくはソースをラズパイでPULLしてコンパイル、実行ファイル作成
上のような方法で開発する方向で行こうと思います。
なので、以下の手順で行います。
- ここのページからEclipseプラグイン(JavaME SDK)をダウンロード
Eclipseにプラグインを追加する
Macの場合はEclipseでやらないほうが良い
サポートされているのがv3.0までのようで。。。
そんなわけで以前使っていたIntelliJ IDEAを使用してやろうと思います。
しかし、調査が先になります。
とりあえずMac版をダウンロードします。
そして、オープンソースな方を選びます。
そして、APPストア以外のインストールなので、ファインダーから開き、右クリック(controlボタンを押しながら)して開きます。
最終的にはこんな感じでJ2MEのプラグインをインストールしました。
以下失敗したものです
理解するまでに時間がかかりましたが。。。
どうやら上のプラグイン(SDK)をインストールする事で、Mavenのエラーを解消できたみたいです。なので下のような実装をしてもビルドエラーが出なくなりました。
import java.io.IOException; import javax.bluetooth.L2CAPConnection; import javax.bluetooth.L2CAPConnectionNotifier; import javax.microedition.io.Connector; /** * BluetoothAPIを使用して実装する。 * @author takunoji * * 2019/10/06 */ public class Main { public static void main(String[] args) { try { L2CAPConnectionNotifier server = (L2CAPConnectionNotifier) Connector.open("btl2cap://localhost:3B9FA89520078C303355AAA694238F08;name=L2CAP Server1"); L2CAPConnection cliCon = (L2CAPConnection)server.acceptAndOpen(); } catch (IOException e) { /* Handle the failure to setup a connection. */ } } }
参考にしたものはJSR82のソースの入ったZIPファイルをダウンロードした時に付いていたPDFにあるソースです。
そして、プラグイン(SDK)をインストールした時に名前が一致しなかったので、インストールしたものを下に記載しておきます。
まとめ
今までやったことを整理して、まとめます。
正しい作業フローは以下のようになります。
- プラグイン(SDK)をEclipseにインストールする
- MavenでBluetoothAPI(BlueCove, javax.microeditionなど)をインストールする(POMファイル使用)
作成したPOMファイルは以下のようなものができました。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>zenryokuservice</groupId> <artifactId>socket.server</artifactId> <version>0.0.1-SNAPSHOT</version> <properties> <java.version>1.8</java.version> <maven.compiler.target>${java.version}</maven.compiler.target> <maven.compiler.source>${java.version}</maven.compiler.source> </properties> <repositories> <repository> <id>microedition</id> <name>microedition</name> <url> https://mvnrepository.com/artifact/javax.microedition/midp</url> </repository> <repository> <id>microemu-extensions</id> <name>jsr82</name> <url>https://mvnrepository.com/artifact/org.microemu/microemu-jsr-82</url> </repository> <repository> <id>bluecove</id> <name>bluecove</name> <url>https://mvnrepository.com/artifact/net.sf.bluecove/bluecove</url> </repository> </repositories> <dependencies> <dependency> <groupId>org.microemu</groupId> <artifactId>microemu-jsr-82</artifactId> <version>2.0.4</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>net.sf.bluecove</groupId> <artifactId>bluecove</artifactId> <version>2.1.0</version> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <mainClass>zenryokuservice.socket.server.SocketServerBasic</mainClass> <classpathPrefix>dependency-jars/</classpathPrefix> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> <executions> <execution> <id>make-assembly</id> <!-- this is used for inheritance merges --> <phase>package</phase> <!-- bind to the packaging phase --> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>2.5.1</version> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory> ${project.build.directory}/dependency-jars/ </outputDirectory> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>