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を作る

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

でわでわ。。。



Microbit 工作〜ソフトシンセを鳴らす1〜

Microbitを使用して、iPadなどのiOS系のデバイスからMIDIデータ送信による、音楽再生ツールを作成しようと考えています。

Micribit工作

マイクロビットでどのようにやるかというと・・・
シンプルに、MIDIデータを送信しループしてデータを送信し続けるというものです。これが作れたら、iPadを使って簡単な伴奏をiPadにやらせて、自分はアドリブの練習をしようと考えています。

設計

仕様としては、Aボタン押下により伴奏を行う時のキー(ハ長調とかイ長調など)を選択します。#(シャープ)とかb(フラット)は面倒なので、キーは以下のものにしようと考えています。

C(ハ長調), D(ニ長調), E, F, G, A, B

以上の7つを考えています。

ちょっと妄想

月曜日〜日曜までと考えてCから始まりBで一週間を終わるようなイメージ、毎日キーを変えて同じ練習してもいいし、例えば、Cメジャー(ハ長調)キーの伴奏に合わせて、Am(イ短調)のスケールを合わせても良いし。。。うーん楽しそうだ!

楽しむために

ちょいと頑張ってみようか?ってかMicrobitはブロックコードでいろんなことができるので、実装はそんなに大変でないと思います。間違いなく前回作成したDBからカテゴリ情報を取得してくるよりは楽です。。。なぜかというとJSとPHPは癖が強く、「〜の場合は〜のやり方」でないと動かない時が結構あり。。。じゃPHPとか使うなよ!と怒られそうですが、他に手がなく。。。
PHPとかJSは、なんだかんだ言って付き合っている悪友のような。。。そんな感じです(笑)
ちなみに今、記載しているブログもPHPを使用しているWordPressを使用しています。

Microbitを始める

参考にするページはこちらです。下のようなページです。

学校などでプログラミング教育を行なっているようです。以前アメリカのどこだか忘れたけど、音楽に合わせて踊るなど(教育チャンネルでやっているようなもの)でプログラムの動きと体の動きを同じようにして「〜したらどうなる?」みたいなことをしているのを日本とアメリカでテレビ電話しながら互いのやっていることを動画にて共有することをやっている所のに参加したことがあります。
まさにグローバル!はっきり言って何を言っているのかわからなかった(笑)
英語の勉強も大切ですね。。。

当たり前な話ですが、Microbitは購入する必要があります。これは値段的には¥2,500くらいです。

なので、手軽に購入ができます。これを使用して世界的に「プログラミング教育」を行なっていますが、自分の思うところはScratchでも良いと思います。実際にプログラムを作って、動かす時にPC上で動かすのではなくIot的に使用するというのなら間違いなくMicrobitだと思います。
「とりあえずやってみるかな?」というのならScratchで十分だと思います。

Microbit買いました。

自分は、買ってしまった方なのですが、買ってよかったと思っています。
実際のところ、Scratchだとできることに限界があり、画面上(ブラウザ上)で何かをするというものです。
WebBluetoothを使用してPCからBluetooth接続というもの悪くないと思います。
しかし、手を動かして「Microbitを手に持って振ってみる」とかそういう物理的な動きでアプリケーションを動かそうとするのならMicribitでないとできません。というか面倒なことになります。

Microbitの良いところ

下の動画のように、電気が繋がらなくなってもの手回し発電機で動かすことができます。

そして、C++での実装も可能です。これにはMakeCodeというウェブサイトから実行することができます。
ここでは、C++コードを使用できます。
ブロックから一気に飛びすぎでは?と思ってしまいますが、マイコンボードであるMicrobitでは当然な話です。

通常のPCのようにメモリが多いわけでないので最小限のプログラムで作成する必要があります。
いづれにしろ、アイディアが鍵を握りますので、趣味としてもとても魅力的だと思います。

でわでわ。。。

関連ページ

  1. microbitからwebserverまでの旅
  2. Microbitで遊ぶ〜シリアル通信をする〜
  3. Microbitで遊ぶ〜ボタンを押す〜
  4. Microbitで遊んでみる
  5. MicrobitでHttpリクエストを飛ばすためのメモ


Microbit花火〜MicrobitからWebServerまでの旅〜

イントロダクション

マイクロビットで作成したプログラムから全世界にメッセージを送ろう!

実行手順

  1. マイクロビットでPCにシリアル通信でメッセージを送る
  2. PCで受けたメッセージをPythonでWebServerへ飛ばす
  3. ここの画面に表示されることを確認する


マイクロビットのプログラミング方法

Microbitで遊ぶ〜シリアル通信をする〜

シリアル通信の方法

マイクロビットによるシリアル通信プログラムを作成し、接続したUSBで「マイクロビット」→「PC」へマイクロビットで作成したプログラムから文字を送信する。

Micro:bit Python 〜マイクロビット→PCへシリアル通信〜

関連ページ一覧

  1. Microbitで遊ぶ〜ボタンを押す〜
  2. Microbit Python 〜シリアル通信データを受け取る〜
  3. WebSocket in PHP And JS 〜レンタルサーバー上でのWebSocket〜
  4. Python websocket client〜WebSocket送信処理を作る〜

 

Micro:bit Python 〜マイクロビット→PCへシリアル通信〜

送信したことを確認する for Mac

  1. Microbitで「シリアル通信」プログラムを作る
  2. ターミナルを開き、「ls /dev/tty*」(最後はアスタリスク)とコマンドを入力する
  3. 表示されたファイル名をメモしておく
  4. GItから"websocketSernder.py"ファイルをダウンロードする(コピーも可)
  5. ダウンロードしたpyファイルを開き「# コーディング1」と書いている下にある「diviceName = ""」の「""」に2でメモしたファイル名を記入する(例:deviceName="/dev/tty.usbmodemFA132")
  6. http://zenryokuservice.com/project/index.phpをブラウザで開く(PC)
  7. ターミナルから「python3 websocketSernder.py」を起動する

websocketSernder.pyをダウンロードしたディレクトリまでターミナルで移動してください。

ターミナルの使い方

Step1. とりあえず開きます。

手段1

  1. コマンドキーとスペースを押下
  2. Terminal.app」と入力してEnterキーを押下

手段2

右の様なアイコンをクリックする 

Step2. websocketSernder.pyファイルの場所に移動する

  1. websocketSernder.pyの場所を確認する
  2. ダウンロードフォルダにあった場合は"cd Downloads"と入力してエンターキーを押下する
  3. 次のコマンドを入力してエンターキーを押下する「python3 websocketSender.py」
  4. Micro:bitからシリアルデータを送信する

 

上の様なプログラムを作成した場合は、「Aボタン」を押下するとシリアルデータを送信できる。

健闘を祈ります。


Micro:bit スマホでプログラミング〜ブラウザにアクセス〜

イントロダクション

今回は、マイクロビットで遊べるページを作成(コピペ)を作成しました。Micro:bit -> ブラウザで遊べます。

下のリンクにある手順を踏んで、今回はマイクロビットを使って上記のページにブラウザ経由でアクセスしようと思います。

  1. Micro:bit スマホでプログラミング〜Bluetoothの設定〜

参考:マイクロビットのページです。

上記のサイトにはHTMLを作成するような記述があるのですが、こちら(マイクロビットで遊べるページ)に作成したものを配置しておりますので、よかったら遊んで見てください。

参考サイトの手順を追いかけます。手順的には「図7-1-2-9.ペアリング方法の変更(3)」まで終わっている状態です。

※スマホアプリにBluetoothのブロックが表示されていなければMicro:bit スマホでプログラミング〜Bluetoothの設定〜に戻って手順を踏んでください。

スマホでプログラミング!

スマホでMicro:bitのアプリを開きます。※インストールはこちら

上部の「+」マークのある部分、もしくは「Pair a new microbit」と書いてある部分をタップします。

こんな感じの画面が表示されるのでボタンを3つ押します。

裏側(A,Bボタンのない方)のボタンを2〜3秒くらいしたら話します。すると

上記のようなパスワード?ペアリング時の確認キーです。が表示されますのでそれを入力して次へ

「Pairingsuccessful」と表示されるので「OK」

この画面の「Create Code」を押下します。

ブロックはないと思いますが、コーディング用の画面です。

こんな感じでコードを作成します。Bluetoothのタブを選択して作成してください。

こんな感じでコードを作成したら。。。コンパイルしてマイクロビットへ送信(ダウンロード)します。

やってみた感想

一旦は動くけど、一度ペアリングが切れた後に再接続がうまくいかなかったりする、ちょっと不安定な感じでした。実際にコード書いて遊ぶならばPCでやった方が無難かな?

関連ページ一覧