Java Socket Server 〜ラズパイで動かすサーバーを作る1〜

今回からは、ラズパイで動かすサーバーを作ろうと思います。
作成するサーバーはMicrobit→ラズパイ→Midi音源で使用できる様に作成します。目的は「フリーハンドで音源を鳴らす仕組み」を作ることです。
早い話が、「マイクロビットから音源を鳴らしたい」ということです。

サーバーの用途

JavaのSocket Serverはマイクロビットからメッセージを受けてラズパイでMIDIメッセージを作成し、音源に送信するという形で使用します。

仕様について

  1. Javaサーバーでメッセージを受ける
  2. 受けたメッセージにより複数パターンのMIDIメッセージを作る
  3. 作成したMIDIメッセージをMIDI音源へ送信する

接続方法

マイクロビット ー ラズパイ
これは、Bluetoothで接続してメッセージを送受信する想定です。
ラズパイ ー MIDI音源
これはラズパイとMIDI音源をMIDIインターフェースで接続してメッセージの送信を行う想定です。

どうやって実現するか?

マイクロビットからメッセージを送信するのは問題なくいけそうです。このリンクを見て、シリアルデータの送信ができる様なのです、というか前に試しました
なので、マイクロビット〜という部分は後回しにします。

まずは、Java Serverを作る

ここに至ります。Java Serverがこの仕組み(システム)の中核になるのでここから作成して行きます。
<起動する環境>
ラズパイ状で起動するので、コンパイル(ビルド)はラズパイ上でやる必要があります。なので以下の様な処理手順を踏みます。

  1. ラズパイでGithubにアップロードしたJavaファイルをダウンロード(PULL)してビルドする仕組みを作ってしまいます。
  2. Mavenを使用します。これのプラグインでJARファイルを出力する様に設定します。
  3. PC上で作成したJavaServerをGitにアップロード(PUSH)します。
  4. ラズパイを起動した時に、Githubからプルしてビルドをする様に起動スクリプトを作成します。
  5. そして、Java Serverを起動してマイクロビットからのメッセージを待機

Java Socket Server

サーバーと聞いて皆さんは何を想像するでしょうか?
サーバーはパソコンのことではなくアプリケーションのことです。入力を待機しているアプリケーションのことをサーバーと呼びます。
というわけで、マイクロビットからのメッセージを待機するサーバーを作るということで入力がマイクロビットから送られてくるもの(データ)なのでシリアルデータ(バイト配列)になります。マイクロビットのブロックコードではラジオカテゴリの中にあります。
そして、MIDIデータを作成し送信するというのがこのサーバーの役目になります。

まとめる

  1. ラズパイ上でJavaServerが起動する
  2. マイクロビットからシリアルデータが送信される
  3. シリアルデータを読み取り、MIDIメッセージを作成
  4. ラズパイに接続したMIDI音源にMIDIを送信する

こんな感じで動くものを作成するためにJavaで極小サーバーを作成します。低レベルAPIのSocketを使用するので処理内容などは自由自在に作ることができます。
逆に高レベルAPIの場合は中身はいじれないけど、決まった形の処理は簡単に作ることができます。

高レベルAPIと低レベルAPI

高レベルは人間に近く、低レベルは機械に近いという意味です。人間に近いということは、細かい処理などがひとまとまりになっています。
例えば、「DBサーバーにアクセスする」というのを1行実現することができる。この様なAPIは高レベルです。
逆に、「DBサーバーにアクセスするためにDBコネクションを取得するためのネットワークを検索する」という処理を行うAPIは低レベルなAPIです。
あくまで「Application Programing Interface」なのでjavaでいうなら「そのクラスは高レベルか?、低レベルか?」という違いでしかありません。話をするのに伝えやすいのでこのことを記載しました。

とりあえずSocket Serverを作る

今回は、少し長くなってしまったので次回作成します。
イントロダクション的なことを記載しました。

でわでわ。。。



投稿者:

takunoji

音響、イベント会場設営業界からIT業界へ転身。現在はJava屋としてサラリーマンをやっている。自称ガテン系プログラマー(笑) Javaプログラミングを布教したい、ラスパイとJavaの相性が良いことに気が付く。 Spring framework, Struts, Seaser, Hibernate, Playframework, JavaEE6, JavaEE7などの現場経験あり。 SQL, VBA, PL/SQL, コマンドプロント, Shellなどもやります。

コメントを残す