今回は、Javaで作るAPサーバーを作り始めます。
ちなみに、APサーバーというのは画面を表示しないサーバーのことだと思ってくれればOKです。
現状
前回までにやった事は以下になります。
ここまでで、ラズパイに作成したソースをGit hubにアップしておけばあとはラズパイで起動できるようになりました。
目的の確認
今度は、核になるサーバーを作ります。確認のため全体の処理フローを以下に示します。
雑な絵ですが、つまるところは
- マイクロビットから何かしらのメッセージをラズパイに送る
- ラズパイで受けたメッセージからMidiメッセージを生成
- 生成したメッセージをラズパイに接続したMidi音源に送信
この様な形で、マイクロビットをコントローラーにした、Midiプレーヤーを作ろうと考えてます。イメージは下の様な感じです。
![](http://zenryokuservice.com/wp/wp-content/uploads/2019/10/スクリーンショット-2019-10-08-20.19.29-300x200.png)
Javaサーバー
今回作成するものは、上記の「2」にある様に、ラズパイで起動して、メッセージの受信と送信を行うものにします。
リクエストとレスポンス
余談ではありますが、今回作成するものは受信と送信を行うのですが、この仕組みは身近にあるものなので記載しておきます。
ホームページ開くのと同じ
余りに身近になったこのテクノロジーは、TCP/IPなどと呼ばれるネットワーク技術をベースにしています。送受信するメッセージがhttpメッセージです。
httpリクエストの例
httpの詳細には触れませんが、大雑把に、リクエストとレスポンスがありサーバーへ送信するメッセージをリクエスト、サーバーが返すメッセージをレスポンスと呼びます。
スマホで検索したページを開く時
- スマホを開いてブラウザアプリを起動します
- http://www.google.co.jpにアクセスします。
- この時にスマホから上のURLへGETリクエストを送信
- レスポンスとして、スマホで見ているHTML(であろう)ファイルをダウンロード
- ブラウザで表示
というような手順を踏みます。
これと同じ様にJavaサーバーも動く
- マイクロビットからBluetooth経由でhttpでないがメッセージ(データ)を送信
- ラズパイのJavaサーバーがそのデータを受け取る
- 何かしらの処理をしてMidi音源にUSB経由でMidiメッセージを送信
- Midi音源が鳴る
こんな風に動かそうと思いこの計画を立てました。
JavaServerの仕様
全体の流れとしては上記の通りです。これを実現するために、どーしたら良いか?考えます。
前提
- マイクロビットは、シリアルデータ通信を行う事が出来る事を確認済み
今後は、以下の事を確かめていきます
- ラズパイでマイクロビットとBluetooth通信を行う為のペアリングが出来る事を確認
- ラズパイからUSBでMidi音源にMidiメッセージを送信出来る事を確認
この部分は、後々に確かめようと思います。
理由
- 早くJavaサーバーを作り、ラズパイで動かしたいから
- もし前提が通らなくても、他の事に使えるので、作り損はない
こんな感じです。
プログラム設計
お待ちかね、プログラム設計です。今回はJavaのSocketを使用したサーバーを作ります。ソケットは昔からある低レベAPIで、送信データの内容全てをコントロール出来ます。逆に言うと全部自分で作る…という事です。
[ソケットの扱い](https://docs.oracle.com/javase/jp/8/docs/api/java/net/Socket.html)に関しては次回以降やります。
でわでわ…
## 関連ページ
1. [Javaで通信処理を行う](https://zenryokuservice.com/wp/2019/07/20/java-socket-%e3%80%9c%e6%a5%b5%e5%b0%8f%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc%e3%81%a7%e9%80%9a%e4%bf%a1%e3%81%ae%e5%9f%ba%e6%9c%ac%e3%82%92%e5%ad%a6%e3%81%b6%e3%80%9c/)
2. [極小サーバーを作る](https://zenryokuservice.com/wp/2018/09/14/java-network-socket%e3%80%9c%e6%a5%b5%e5%b0%8f%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc%e3%80%9c/)