「Microsoft Azure」カテゴリーアーカイブ

【第5回】IBM Cloud と Raspberry Pi を用いたエアコン制御 ー Raspberry Pi の設定2

<目次>

  1. 初回概要
  2. IBM Cloud の設定
  3. LINE Platform の設定
  4. Raspberry Pi の設定
  5. Raspberry Pi の設定

今回は、Raspberry Pi におけるNode-RED・スピーカー・赤外線基盤の設定方法をご紹介します。

▼ Raspberry Pi の設定 ▼

< Node-REDのインストール >

1. 左上の黒い四角のアイコンをクリックし、ターミナルを開きます。

※ ターミナルは、コマンドという命令文を用いてRaspberry Pi の操作や設定を行う為のツール です。

2. 「sudo apt-get install nodered」コマンドを実行し、Node-REDをインストールします。

3. 「update-nodejs-and-nodered」コマンドを実行し、Node-REDを最新版にアップデートします。

4. 「sudo systemctl enable nodered.service」コマンドを実行し、Raspberry Pi 起動時に自動でNode-REDも起動するように設定します。

< Node-REDの設定 >

1. ターミナルにて、「cd $HOME/.node-red」「npm install node-red-contrib-scx-ibmiotapp」コマンドを実行し、Node-REDにIBM IoT Platform をインストールします。

※ うまくいかない場合「sudo npm install -g node-red-contrib-scx-ibmiotapp」コマンドを実行します。

以下、参考サイトです。Node-REDに他のパッケージを追加する方法が載っています。

Nodeの追加

2. 左上のラズベリーのアイコン→「プログラミング」 →「 Node-RED 」を選択し 、Node-RED を起動します。

3. ターミナル画面右上のURLをコピーします。

4. Webブラウザで先程のURLを開きます。このとき、開いたページがNode-REDの設定画面になります。

5. Node-RED設定画面の右上メニューより「読み込み」→「クリップボード」をクリックします。

6. 本投稿のページ最後に記載しているテキストをコピーします。

7. 先程のテキストを読み込み枠に貼り付け、「読み込み」をクリックします。

8. 読み込むと以下の画面が表示されます。

9. 「websocket out」をクリックし編集画面を開きます。

「URL」項目の「鉛筆マーク」をクリックします。

第2回 IBM Cloud の設定の際に決めた「ホスト名」を、<ホスト名>部分に入力します。

10. 「IBM IoT」をクリックし、「API Key」項目の「鉛筆マーク」をクリックします。

第2回 IBM Cloud の設定の際に表示された「APIキー」と「認証トークン」をそれぞれ「API Key」と「API Token」欄に入力する。

※ 大文字英語「O」と数字「0」の区別に注意。

11. 右上の「デプロイ」をクリックし、IBM Cloud との接続を確認します。

接続できている場合、「websocket in」,「 websoket out」,「IBM IoT」の下に接続済みが表示されます。

※ 上記の一つでも切断になっている場合は、どこかにエラーがあるので、7のステップからやり直してみてください。

< 音声機器のセットアップ >

1. ターミナルを開き、「sudo apt-get install swig3.0 python-pyaudio python3-pyaudio sox」コマンドを実行します。

2. 「pip install pyaudio」コマンドを実行します。

※ portaudioがないエラーが発生した場合:「sudo apt-get install portaudio19-dev」コマンドを実行し、再び「pip install pyaudio」コマンドを実行します。

3. 「sudo apt-get install libatlas-base-dev」コマンドを実行します。

< 音声機器の動作確認 >

1. 「aplay -l」コマンドを実行し、音声を発生する機器の「card」と「device」の数字をメモする。

2. 「arecord -l」コマンドを実行し、音声を聞き取る機器の「card」と「device」の数字をメモする。

3. 「nano ~/.asoundrc」コマンドを実行し、以下を入力します。

※ 但し、「playback.pcm」項目の「hw:」以降の数字は1で確認したcardとdeviceの値をコンマで区切って入力する。また、「capture..pcm」項目の「hw:」以降の数字は2で確認したcardとdeviceの値コンマで区切って入力する。

pcm.!default{

type asym

playback.pcm{

type plug

slave.pcm “hw:1,0”

}

capture.pcm{

type plug

slave.pcm “hw:1,0”

}

}

4. 「Ctrl」+「x」を入力し終了します。保存画面が開きますので「y」を入力し保存を選択します。保存するファイル名が表示されます。変更せずに「Enter」を入力します。

5. エクスプローラーを開き、piファイルの下にtempファイルを作成します。

※ 録音したデータを保存する場所です。

6. 「arecord –r 32000 –d 3 /home/pi/temp/out.wav」コマンドを実行すると、ターミナルに録音中が表示されます。録音中が表示されている間に音を記録してくれるので、何か音を記録させます。

7. 「aplay /home/pi/temp/out.wav」コマンドを実行し、先程の録音データが再生できることを確認します。

※ 音量調整は「alsamixer」コマンドを実行する。

【第4回】IBM Cloud と Raspberry Pi を用いたエアコン制御 ー Raspberry Pi の設定1

<目次>

  1. 初回概要
  2. IBM Cloud の設定
  3. LINE Platform の設定
  4. Raspberry Pi の設定
  5. Raspberry Pi の設定

今回は、Raspberry Pi の設定方法をご紹介します。

※Raspberry Pi ー 電子部品を本体に接続することによって様々な機能(音声認識・気象観測等)を実装できるコンピュータ。

▼   Raspberry Pi の設定   ▼

<OSインストール>

1. NOOBS タグの 「Download ZIP」を選択し、Raspberry Pi で使用するOSをダウンロードします。

Download NOOBS for Raspberry Pi

2. タウンロードしたデータをSDカードに展開します。

 

3. SDカードを取り出し、Raspberry Pi にセットします。

4. Raspberry Pi を起動します。

※電源に接続すると自動で起動します。

5. Raspbian[RECOMMENDED]を選択し、「Install」をクリックします。OSのインストールが始まります。

※私は2時間程度かかりました。

6. インストール中に、画面下の選択欄から使用言語を日本語に設定します。

7. 起動後、ダイアログが表示されます。ダイアログの「Next」をクリックします。

8. 国・言語・時間が日本のものであることを確認し、「Next」をクリックします。

9. Raspberry Pi で使用する任意のPasswordを入力し、「Next」をクリックします。

10. Wifi の設定を行い、「Next」をクリックします。

※有線LANを使う場合、設定は不要です。そのまま「Skip」をクリックします。

※設定し忘れた場合、画面右上の両矢印のアイコンからいつでも設定できます。

11. 「Next」をクリックし、アップデートを行います。

※私は1時間程度かかりました。

12. セットアップを行う為に「Reboot」をクリックし、再起動します。

以上でRaspberry Pi のセットアップは完了です。


次回は、Raspberry Pi 内のシステムやインターフェースの設定方法をご紹介します。

【第3回】IBM Cloud と Raspberry Pi を用いたエアコン制御 ー LINE Platformの設定

目次

  1. 初回概要
  2. IBM Cloud の設定
  3. LINE Platform の設定
  4. Raspberry Pi の設定
  5. Raspberry Pi の設定

今回は、LINE Bot の作成と設定についてご紹介します。

※ LINE Bot とは、LINE上でのユーザーの発言に対して自動応答するプログラムです。

▼   LINE Bot の設定   ▼

< LINE Bot の作成 >

1. LINE Developers サイトから、お持ちのLINEアカウントでログインします。

LINE Developers

2. 開発者名とメールアドレスを任意に登録します。

 

3. 新規 Channel 作成画面のサイドメニューから「新規プロバイダー作成」をクリックします。

4. 任意のプロバイダー名を入力し、「確認」→「作成」をクリックします。

5. プロバイダーが作成された後、Messaging API 欄の「チャネル作成する」をクリックします。

6. 各項目を以下のように設定し、規約への同意にチェックした後「作成」をクリックします。

  • アプリ名:任意のアプリ名を入力
  • アプリ説明:任意のアプリ説明を入力
  • プラン:「フリー」を選択
  • 大業種・小業種:適切な項目を選択
  • メールアドレス:お知らせを受け取るメールアドレスを入力

< LINE Bot の設定 >

1. 作成したMessaging API をクリックします。

2. 作成した Bot の「Channel 基本設定の画面」→「メッセージ送受信設定」→「アクセストークン(ロングターム)」から「再発行」をクリックします。

3. 表示されるポップアップウィンドウから「再発行」をクリックし、アクセストークンをメモします。

※アクセストークンは IBM Cloud とデータの送受信を行うために使用します。

4. 「Webhook 送信」の「利用する」を選択し「更新」をクリックします。

5. 「Webhook URL」 に「https://<ホスト名>.mybluemix.net/sample」を入力し「更新」をクリックします。

(ホスト名は IBM Cloud で設定したものを入力します。)

(ホスト名の大文字は小文字として入力します。)

6. 「LINE@機能の利用」→「自動応答メッセージ」→「利用しない」を選択し「更新」をクリックします。

※IBM Assistant にて応答メッセージを送受信する為、LINEの自動応答メッセージは無効にします。

7. 「友だち追加時あいさつ」→「利用しない」を選択し「更新」をクリックします。

8. QR コードから友だち追加します。

9. IBM Cloud のダッシュボード画面から Node-RED を開きます。

10. Pre Line Message API ノードを編集し、<token>枠に LINE Developer でメモしたアクセストークンを設定します。


以上で LINE Bot の設定は完了です。

次回は、Raspberry Pi の設定についてご紹介します。

MS Project ガントチャート IDが全部表示されない

当社は、小規模から大規模の案件全てMS Projectにて、プロジェクトの管理をしています。

タスクの追加、リソースの割り当てを一通り行った後、一部タスクを新たに他の新規のリソースに割り当てたところ、ガントチャートで一部のIDが表示されなくなってしまった。タスクのフィルターはすべて選択になっているにも関わらず。

m2

ただし、ガントチャート(進捗管理)ではすべてのIDが出て表示される。

m3

1時間ぐらい悩み、タスクのフィルターで、”すべてのフィルターをクリアー”を
実行したら表示された。
フィルターの何か変はゴミが残ってたのかも。今更ですが、今後は、”すべてのフィルターをクリアー”をすると覚えておこう。

m34png

 

 

Nexus5x,6P のカメラ reverse landscapに対応

Nexus5x及び6Pで、QRコード読み取り,3D 行先コンパス ARでカメラ画像が、180度回転表示するバグを修正しました。

Nexus 5Xのイメージセンサーは設計上の部品配置の都合で、他のAndroid端末と異なり逆(reverse landscape)に取り付けられているとのことで、rotationが未設定のアプリはpreviewが反転するようになった。
http://qiita.com/tomoima525/items/f59d345ea40c36244f9b

当アプリも180度回転表示してしまいました。

元々は、
camera.setDisplayOrientation(90)
で90度回転させて縦表示するようにしていたのですが、
Nexus5xだと、
camera.setDisplayOrientation(90 + 180)
にしないとだめで、

camera2 APIを利用すれば全自動ですが、
最終、以下のコードを追加して対応致しました。

    int numCameras = Camera.getNumberOfCameras();
    int cameraID;
    int back_camera_flg = 0;

    int index = 0;
    Camera.CameraInfo cameraInfo;
    int result = 0;

    while (index < numCameras) {
      cameraInfo = new Camera.CameraInfo();
      Camera.getCameraInfo(index, cameraInfo);
      if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT && back_camera_flg == 0){
        result = (cameraInfo.orientation) % 360;
        result = (360 - result) % 360;
        Log.w(TAG,"----- CAMERA INFO FRONT " + result );
      }
      if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_BACK) {
        back_camera_flg = 1;
        result = (cameraInfo.orientation + 360) % 360;
        Log.w(TAG,"----- CAMERA INFO BACK " + result );
        break;
      }
      index++;
    }
     //camera.setDisplayOrientation(90);
    camera.setDisplayOrientation(result);
    //
    camera.setParameters(parameters);
  }

QRコード読み取り バージョンアップしました。 ズームイン、ズームアウト 1.3.0

QRコード読み取り バージョンアップしました。

・カメラのズーム機能を実装しました。

15m先のバーコードが読めるというバーコードリーダを見て、それならということで、ズームイン、ズームアウトを実行しました。
ポスターに近寄らなくても、ズームインでQRコードが読み取れます。
(android 2.3.3の旧機種でも動作します!)

https://play.google.com/store/apps/details?id=jp.co.seiwa.zxing.client.android

※ついでに、開発ツールをEclipseからAndroid Stadio 2.1.2に移行しました。

B_2016-06-12-12-08-48
<ズームイン↓>
B_2016-06-12-12-08-56

インターンシップ報告

星和テクノロジーに、10/1~10/30までインターンシップで、HALの学生さん2名を受け入れて、本日無事 成果発表となり修了致しました。指導・受講ともにご苦労様でした。

システム開発を行うにあたって、開発計画~概要・詳細設計、レビュー、リリース、プレゼンを経験して頂きました。

【WEBアプリケーション:phpによる数独作成】
DSC_0060

【Redmineプラグイン開発 redmaine_issue_history_tabs(機能拡張)】
DSC_0062

※当社は、Redmineにて、プロジェクト管理、タスク管理、進捗管理、情報共有を行っています。
今回、改修頂いた機能を実際使って行きます。

Android 3D行先コンパス AR 修正 ver1.11

3D行先コンパス AR

バグ修正
1)NECの10インチタブレット LifeTouch(LT-TLX5W1AB)X,Y,Z軸がおかしいバグ修正

device_angle = getWindowManager().getDefaultDisplay().getRotation();
device_angle がSurface.ROTATION_270でした。通常のスマホだと、Surface.ROTATION_0です。
とういうことは、タブレットによっては、Surface.ROTATION_90やSurface.ROTATION_180があるかも。

「メモ」
remapCoordinateSystemの第二、第三引数は、いまいち、机上(思考)と端末座標、OPENGL座標が結びつかないので、例によって総当たり(24通りの中から)でピックアップしました。

AXIS_X, AXIS_Y
AXIS_X, AXIS_Z
AXIS_X, AXIS_MINUS_Y
AXIS_X, AXIS_MINUS_Z

AXIS_Y, AXIS_X
AXIS_Y, AXIS_Z
AXIS_Y, AXIS_MINUS_X
AXIS_Y, AXIS_MINUS_Z

AXIS_Z, AXIS_X
AXIS_Z, AXIS_Y
AXIS_Z, AXIS_MINUS_X
AXIS_Z, AXIS_MINUS_Y

AXIS_MINUS_X, AXIS_Y
AXIS_MINUS_X, AXIS_Z
AXIS_MINUS_X, AXIS_MINUS_Y
AXIS_MINUS_X, AXIS_MINUS_Z  Surface.ROTATION_270

AXIS_MINUS_Y, AXIS_X
AXIS_MINUS_Y, AXIS_Z
AXIS_MINUS_Y, AXIS_MINUS_X
AXIS_MINUS_Y, AXIS_MINUS_Z

AXIS_MINUS_Z, AXIS_X     Surface.ROTATION_0
AXIS_MINUS_Z, AXIS_Y
AXIS_MINUS_Z, AXIS_MINUS_X
AXIS_MINUS_Z, AXIS_MINUS_Y

switch (device_angle){
case Surface.ROTATION_0:
//スマートフォン(縦)
SensorManager.remapCoordinateSystem( inR, SensorManager.AXIS_MINUS_Z, SensorManager.AXIS_X, outR );
break;
case Surface.ROTATION_270:
//タブレット横にセンサーが設定されているもの 10インチタブレット縦
SensorManager.remapCoordinateSystem( inR, SensorManager.AXIS_MINUS_X, SensorManager.AXIS_MINUS_Z, outR );
break;
default:
SensorManager.remapCoordinateSystem( inR, SensorManager.AXIS_MINUS_Z, SensorManager.AXIS_X, outR );
break;
}

もし、Surface.ROTATION_90やSurface.ROTATION_180場合は崩れます。
zahyou2
2)N,S,E,Wのテクスチャーが正しく表示されないバグ修正

OpenGL ES1.0では、テクスチャーの1辺のサイズは2のn乗でなければならない。
96 x 96にしていました。(Nexus5,7 ,Xperiaだと、これでも正しく表示できますが、NECの10インチタブレット LifeTouch Android 4.0.1は仕様どおり表示できません。)

3)カメラSurfaceViewがGoogleMapのViewより下に隠れて表示されないバグ修正。

NECの10インチタブレット LifeTouchで発生。
OpenGLのSurfaceViewは、mOpenglView.setZOrderOnTop(true)でトップに持ってきているのですが、
カメラSurfaceViewが端末およびアプリのタイミングにより中途半端になるようで、mCameraview.setZOrderMediaOverlay(true) を設定しました。

もし、SurfaceViewを3つ以上使う場合は対処不明です。

 

Android 3D行先コンパス AR リリースしました。

3D行先コンパス AR

icon

info-2

・カメラ上に3Dのコンパスを表示しています。
・Google Mapで行先を設定すると、目的地への方角、距離、天気を表示します。
・天気予報は、OpenWeather APIを使用。 精度はあまりよくありませんが、world wideです。
http://openweathermap.org/
・コンパスがずれていると思われる時は8の字(メビウスの輪)キャリブレーションを行って下さい。
http://www.s3sensor.com/s3/calibration/
これでほぼ直ります。(iPhone,Android)
※これでほぼ直ります。機械を信用しすぎてはダメです。最終自分の勘を信じましょう。。。
5月に会社でシンガポール旅行があるので、これで迷わずにキャンパス内を歩けるかと。
http://www.nus.edu.sg/campusmap/pdf/nus_kent_ridge_coloured.pdf

================================
2.3.4 / 4.1.2 / 4.4.4 Xperia,Nexus 5,Nexus 7(タブレット)で動作確認済みですが、
NECの10インチタブレット LifeTouch(LT-TLX5W1AB)では、X,Y,Z軸がなぜかおかしく
今のところ正しく動作しません。

表示は端末を縦固定、カメラも90度回転して使用してします。その関係か
remapCoordinateSystem()の第二、第三引数は、デバイスのX軸、Y軸がそれぞれ指している世界座標系の
方向を指定するのですが、机上で思った設定をしてもどうもうまく定まらず、トライ&エラーで
最終 remapCoordinateSystem( inR, SensorManager.AXIS_MINUS_Z, SensorManager.AXIS_X, outR );
で動作するようになりました。

もしかして、getRotation()でチェックして、それぞれの端末環境によって、第二、第三引数
を替えないといけないのかもしれません。
https://github.com/kvirair/Compass-View-Library/blob/master/src/garin/artemiy/compassview/library/CompassSensorsActivity.java
(NECの10インチタブレットが正しいのかも。今後の検討)

【追記】
http://d.hatena.ne.jp/yellow_73/20110815
にあるように、Androidのタブレット機では横長基準でセンサを仕掛けているものがあります。携帯電話機なら縦長基準。
そういうことですか。。また、改修しておきます。(4/14)

参考:
remapCoordinateSystem() の第二、第三引数の決定
http://blogs.yahoo.co.jp/count_zero_blog/62278295.html
モーションセンサー その3
http://into.cocolog-nifty.com/pulog/2011/10/android029-3-se.html
三次元コンパスを作ってみた
http://android20092009.blog67.fc2.com/blog-entry-41.html
ソースコード参照させて頂きました。OPENGLの部分
Androidでテキストをマーキー表示するカスタムビューの作り方
http://d.hatena.ne.jp/mingos/20110215/1297788794
ソースコード参照させて頂きました。