2016年6月30日木曜日

kindle本:IchigoJamとJavaScriptではじめるIoTプログラミング




 IchigoJamとJavaScriptではじめるIoTプログラミングを出版しました。IchigoJamをIoTデバイスとして活用する方法を解説しています。プログラミング言語には、JavaScript(Node.js)を使用しています。内容は、次のような構成になっています。

1章 開発環境のセットアップ
 1.1 ハードウェアのセットアップ
 1.2 ソフトウェアのセットアップ
 1.4 実験回路
2章 dweet.ioを使用する
 2.1 dweet.ioを使用するための準備をする
 2.2 LEDをリモート制御する
 2.3 センサーデータを収集・可視化する
3章 PubNubを使用する
 3.1 PubNubを使用するための準備をする
 3.2 LEDをリモート制御する
 3.3 センサーデータを収集・可視化する
4章 Adafruit IOを使用する
 4.1 Adafruitを使用するための準備をする
 4.2センサーデータを収集・可視化する
 4.3 センサーデータを監視・通知する
 4.4 LEDをリモート制御する
5章 Ubidotsを使用する
 5.1 Ubidotsを使用するための準備をする
 5.2 センサーデータを収集・可視化する
 5.3 ウィジェットを作成する
 5.4 センサーデータを監視・通知する
6章 その他のサービスの利用
 6.1 IFTTTを使ってセンサーデータをGoogleドライブに記録する
 6.2 M2Xを使ってセンサーデータを収集・可視化す

2016年6月27日月曜日

PythonでArduinoを制御する

 前記事のついでに、PythonでArduinoを制御する方法を説明します。

 PythonでArduinoを制御するには、 pySerial、Python Firmata、pyFirmataなどを使いますここでは、「pyFirmata」を使う方法を解説します。他の方法は、Playgroundを参照してください。

※操作例は、Windows PCを基本とします。
Python(2.7)はインストール済のこととします。

○Arduinoのセットアップ
 「Arduinoのセットアップ」の手順で、Arduinoをセットアップします。

pyFirmataのインストール
 次のように操作して、pyFirmataをインストールします。

①コマンドプロンプトを起動します。
②次のコマンドを入力します。

「pip install pyFirmata

 または

「easy_install -U pyFirmata

※Windows環境でユーザー名に2バイト文字(漢字など)を使用している場合、pipは使えないようです。

○使用例
 13ピンに接続したLEDを点灯させるには、次のように操作します。 

①コマンドプロンプトから「python」と入力してPythonを起動します。
②次のコマンドを入力します。

>>> from pyfirmata import Arduino, util[Enter]
>>> board = Arduino('COM3')[Enter]
>>> board.digital[13].write(1)[Enter]

 ※COMポートの指定は、ご自身の環境に合わせて変更してください。

PythonでIchigoJamを制御する

 PythonでIchigoJamを制御する方法を説明します。
 PythonはBASICと同じように、1行リターンでコードを実行していくこともできるので、BASICからステップアップするため言語としてお勧めです。

※操作例は、Windows PCを基本とします。
※PCとIchigoJamの接続は、「Node-REDでIchigoJamを制御する」を参照してください。

○Pythonのインストール
 Python2.7.11(2016年6月現在)をダウンロードしてインストールします。

pySerialのインストール
 次のように操作して、pySerialをインストールします。

①コマンドプロンプトを起動します。
②次のコマンドを入力します。

「pip install pyserial」

 または

「easy_install -U pyserial」

※Windows環境でユーザー名に2バイト文字(漢字など)を使用している場合、pipは使えないようです。

○使用例
 コマンドプロンプトを起動し、「python」と入力し、Pythonを起動します。
  ※COMポートの指定は、ご自身の環境に合わせて変更してください。
・コマンド送信
  PCからIchigoJamにコマンドを送信するには、次のようにコマンドを入力します。

>>> import serial[Enter]
>>> ser = serial.Serial('COM31', 115200)[Enter]
>>> ser.write('LED1\r\n')[Enter]

※コマンドは改行コード(\r\n)を付けて送信します。

・データの受信
 Ichigojamに次のプログラムを入力し、実行します。

10 ?ANA(2)
20 WAIT 100
30 GOTO 10

 IchigoJamの出力データを受信するには、次のようにコマンドを入力します

>>> import serial[Enter]
>>> ser = serial.Serial('COM31', 115200)[Enter]
>>> while True:[Enter]
...[TAB]print ser.readline().replace('\n',"")[Enter]
...[Enter]

※「print ser.readline().replace('\n',"")」は[TAB]でインデントします。

2016年6月25日土曜日

Node.jsでIchigoJamを制御する

 Node.jsでIchigoJamを制御する方法を説明します。
 Node.jsを使うことで、PCとIchigojamを連携させて、さまざまなWebサービス(IoTプラットフォーム、メール、クラウドストレージなど)を利用したアプリケーションを作成できます。

※操作例は、Windows PCを基本とします。
※PCとIchigoJamの接続は、「Node-REDでIchigoJamを制御する」を参照してください。

○Node.jsのインストール
 Node.js V4.4.6(2016年6月現在)をダウンロードして、インストールします。

○serialportのインストール
 次のように操作して、serialportモジュールをインストールします。
①作業のフォルダ(例「JS」)を作成します。
②コマンドプロンプトを起動し、作業用のフォルダに移動します。
③「npm install serialport」と入力します。
 
 serialportの詳細は、以下のページを参照してください。

○基本プログラム
 COMポートの指定は、ご自身の環境に合わせて変更してください。

・コマンド送信
 PCからIchigoJamにコマンドを送信するプログラムは、次のように書きます。



・データ受信
 Ichigojamの出力データを受信するプログラムは、次のように書きます。



○応用例
 socket.ioを使って、ローカルのWebサーバーから、IchigojamのLEDを制御する例を紹介します。

・socket.ioインストール
①コマンドプロンプトを起動し、作業用のフォルダに移動します。
②「npm install socket.io」と入力します。

・プログラム
  次のJavaScript「ichigo_led.js」とHTMLコード「index.html」を入力し、作業用のフォルダに保存します。



・動作の確認
①コマンドプロンプトを起動し、作業用のフォルダに移動します。
②「node ichigo_led.js」と入力します。
③ブラウザを起動し、「http://localhost:3000」にアクセスします。
④[ON]ボタンのクリックでLEDが点灯し、[OFF]ボタンのクリックでLEDが消灯することを確認します。

2016年6月23日木曜日

IchigoJamとPCの通信をBluetoothで無線化する

 IchigoJamとPCのシリアル通信を、Bluetoothモジュールで無線化する方法を説明します。

Bluetoothモジュール
SparkFun Bluetooth Modem - BlueSMiRF Silver(スイッチサイエンス)
 価格が高いのがネックです。Mete Goldにいたっては、Raspberry Pi 3が買えちゃうぐらいの値段です。技適マークが付いていないBluetoothモジュールなら安価で販売されていますが...。


○配線

 回路図では、Mate Silverとなっていますが、Mate Goldでも同じです。
SilverとGoldはピン配列が異なるので、注意してください。
 

○Bluetoothデバイスのペアリング
 次のように操作して、PCとBluetoothデバイスをペアリングします。
①[スタート]→[設定]を選択します。
②「デバイス」をクリックし、「Bluetooth」を選択します。
③[Bluetooth] をオン(機種によっては必要ない) にし、デバイスを選び、[ペアリング] を選択します。
④パスコード「1234」を入力し、[次へ]をクリックします。

○COM(シリアル)ポートの確認
 Bluetoothデバイスに使用されているCOMポートを確認するには、次のように操作します。
①[スタート]→[設定]を選択します。
②「デバイス」をクリックし、「Bluetooth」を選択します。
③「その他のBluetoothオプション」をクリックします。
④「COMポート」タブを選択します。
⑤目的のBluetoothデバイスの名前に対応する方向が「発信」のCOMポートを確認し、[OK]ボタンをクリックします。
 


○ボーレートの変更について
 SparkFunのBluetoothモジュールのデフォルトのボーレートは、115200bpsです。IchigoJamとの通信には、ボーレートを変更する必要がありませんが、参考までにボーレートを変更する方法を説明します。たとえば、ボーレートを9600bpsに変更するには、次のように操作します。

①Bluetoothモジュールの電源をオンします。
②「Startup/Config Timer」モード(赤色のLED(Stat LED)が1秒間に2回点滅)中に、通信ソフト(TeraTermなど)を起動し、BluetoothモジュールのCOMポートに接続します。
③「$$$」と入力し、「Configuration」モードにします。
※「Configuration」モードに入ると、「CMD」と文字列が返され赤色のLED(Stat LED)が1秒間に10回点滅し、緑色のLED(Connect LED)が点灯します。
④「SU,96[Enter]」と入力します。
 ※96:9600、576:57600、1152:115200のように、「0」を省略して指定します。
⑤「---」と入力して、「Configuration」モードから抜けます。

2016年6月21日火曜日

Node-RED+IchioJam+IFTTTでIoT - センサー・データの収集

 Node-REDを使用して、IchigoJamで計測したアナログデータを、IFTTTのレシピ(Maker)にポストする方法を説明します。
 IFTTTのレシピの作成方法は、「IFTTTを使ってセンサー・データをGoogleドライブ(スプレッドシート)に記録する(Arduino編)」の「IFTTTの準備」を参照してください。

○フローの作成

①「serial」(input)「function」「http request」ノードを次のように配置、接続します。

②「serial」ノード(output)のプロパティを表示して通信に使用するポートを選択し、[鉛筆]ボタンをクリックし、「add split character to output messages」のチェックをオンにし、[Update]ボタンを」クリックします。


③「function」ノードのプロパティを表示し、次のコードを入力します。


④「http request」ノードのプロパティを表示し、[Method]を「POST」に設定し、[URL]に次の形式のURLを入力します。


 [Event_Name]には、レシピのEvent Nameを、[Your Key]には、Keyを入力します。


⑤「Deploy」をクリックし、フローをデプロイします。



○BASICプログラムの入力
 IchigoJamに次のプログラムを入力し、実行します。

10 ?ANA(2)-860
20 WAIT 100
30 GOTO 10

※ここでは、温度センサーなどは接続せずに、「アナログ入力値-860」をデータとして送信することとします。

○動作の確認
  Googleドライブに接続し、「IFTTT\Maker\<イベント名>」 フォルダの「IFTTT_Maker_Events」シートを開きます。
 

2016年6月18日土曜日

Node-RED+IchigoJam+Adafruit IOでIoT

 Node-RED+IchigoJam+Adafruit IOでデータ送受信を行う方法を説明します。


○データの送信
◇Adafruit IOの準備
 次にように操作して、Adafruit IOのフィード、ダッシュボード、ブロックを作成します。

1.Feed(フィード)の作成
 次のように操作して、データを取得するためのFeedを作成します。
①Adafruit IOにサインインし、「Welcome Dashboard」を表示します。
②[MY DASHBOARDS]をクリックします。
③「Your Feeds」→[CREATE FEED]をクリックします。
④「NAME」に「Temperature」と入力し、[CREATE FEED]をクリックします。

2.Dashboard(ダッシュボード)の作成
 次のように操作して、デバイスの制御に使用するDashboardを作成します。
①「Your Dashboards」→[CREATE DASHBOARD]をクリックします。
②「DASHBOARD NAME」にダッシュボードの名前を入力し、[CREATE DASHBOARD ]をクリックします。

3.blockの作成
 次のように操作して、データを表示するためのgauge(ゲージ)を作成します。
①右上の[+](Create a new block)をクリックします。
②ゲージの[CREATE]をクリックします。
③「Temperature」フィードの「CHOOSE」をクリックし、[NEXT STEP>]をクリックします。
④[CREATE BLOCK]をクリックします。
⑤右上の[DONE EDITING]ボタンをクリックします。

フローの作成
①次のように「serial」(input)、「mqtt」(output)ノードを接続し、フローを作成します。
 
②「serial」(input)ノードのプロパティを表示して通信に使用するポートを選択し、[鉛筆]ボタンをクリックし、「add split character to output messages」のチェックをオンにし、[Update]ボタンを」クリックします。
 
※他の項目が図の設定内容と異なる場合、図と同じになるように変更してください。

③「mqtt(output)ノードのプロパティを表示して[鉛筆]ボタンをクリックします。
④[Server]に「io.adafruit.com 」と入力します。
 

⑤「Security」タブを選択し、「Username」のAdafruit IOのユーザー名を、「Password」のAIO KEYを入力し、[Update]ボタンをクリックします。AIO KEYは、ダッシュボード右上の鍵アイコン(Your secret AIO KEY)をクリックすると確認できます。

⑥[Topic]にトピック名を「<ユーザー名>/feeds/<フィード名>」の形式で入力し、[OK]ボタンをクリックします。
 

⑦「Deploy」をクリックし、フローをデプロイします。


BASICプログラムの入力
 IchigoJamに次のプログラムを入力し、実行します。

10 ?ANA(2)-860
20 WAIT 100
30 GOTO 10

※ここでは、温度センサーなどは接続せずに、「アナログ入力値-860」をデータとして送信することとします。

動作の確認
①ブラウザで作成したDashboard(ダッシュボード)を表示します。
②ゲージにデータが表示されることを確認します。
 


○データの受信(LEDの制御)
◇Adafruit IOの準備
 次にように操作して、Adafruit IOのフィード、ダッシュボード、ブロックを作成します。
1.Feed(フィード)の作成
 次のように操作して、デバイスの制御に使用するFeedを作成します。
①Adafruit IOにサインインし、「Welcome Dashboard」を表示します。
②[MY DASHBOARDS]をクリックします。
③「Your Feeds」→[CREATE FEED]をクリックします。
④「NAME」にフィード名(ここでは「LED」とします)を入力し、[CREATE FEED]をクリックします。

2.Dashboard(ダッシュボード)の作成
 次のように操作して、デバイスの制御に使用するDashboardを作成します。
①「Your Dashboards」→[CREATE DASHBOARD]をクリックします。
②「DASHBOARD NAME」にダッシュボードの名前を入力し、[CREATE DASHBOARD ]をクリックします。

3.blockの作成
 次のように操作して、デバイスの制御に使用するblock(トグルボタン)を作成します。
①右上の[+](Create a new block)をクリックします。
②トグルボタンの[CREATE]をクリックします。
③「LED」フィードの「CHOOSE」をクリックし、[NEXT STEP>]をクリックします。
④[CREATE BLOCK]をクリックします。


















 「BOTTON ON TEXT」と「BOTTON ON TEXT」は、オン/オフの状態を示す文字列と同時に、送信されるメッセージになります。この場合、オンにしたときには「ON」、オフにしたときは「OFF」という文字列が送信されます
⑤ページをリロードします。
フローの作成
①次のように「mqtt」(input)、「function」、「serial」(output)ノードを接続し、フローを作成します。
 
②「mqtt」(input)ノードのプロパティを表示して[鉛筆]ボタンをクリックします。
③[Server]に「io.adafruit.com 」と入力します。
④「Security」タブを選択し、「Username」のAdafruit IOのユーザー名を、「Password」のAIO KEYを入力し、[Update]ボタンをクリックします。AIO KEYは、ダッシュボード右上の鍵アイコン(Your secret AIO KEY)をクリックすると確認できます。
⑤[Topic]にトピック名を「<ユーザー名>/feeds/<フィード名>」の形式で入力し、[OK]ボタンをクリックします。
 

⑥「function」ノードのプロパティを表示し、次のコードを入力します。

 

⑦「serial」(output)ノードのプロパティを表示して通信に使用するポートを選択し、[鉛筆]ボタンをクリックし、「add split character to output messages」のチェックをオンにし、[Update]ボタンを」クリックします。
 
※他の項目が図の設定内容と異なる場合、図と同じになるように変更してください。

⑧「Deploy」をクリックし、フローをデプロイします。

動作の確認
①ブラウザで作成したDashboard(ダッシュボード)を表示します。
②トグルボタンのONでLEDが点灯、OFFでLEDが消灯することを確認します。

2016年6月17日金曜日

Node-RED+IchigoJam+dweet.ioでIoT - LEDの制御

 Node-RED+IchigoJam+dweet.ioで、IchigoJamのオンボードLEDをネットワーク経由でオン・オフする方法を説明します。

○データ送信用HTMLの作成
 次のHTMLコードの入力し、データ送信用HTMLの作成します。


「thingName」には任意の固有名を指定します。ここでは、「ichigojam-led-onoff」としています。


○フローの作成

①「inject」「http request」「function」「serial」(output)「debug」ノードを次のように配置、接続します。
 ※「debug」ノードは無くても構いません。

②「inject」ノードのプロパティを表示し、[Repeat]を「interval」に設定し、[every]を「10」「seconds」に設定します。
「http request」ノードのプロパティを表示し、[Method]を「GET」、[Return]を「a parsed JSON object」に設定し、[URL]に次の形式のURLを入力します。


 「my-thing-name」には任意の固有名を指定します。ここでは、「ichigojam-led-onoff」としています。

「function」ノードのプロパティを表示し、次のコードを入力します。


⑤「serial」ノード(output)のプロパティを表示して通信に使用するポートを選択し、[鉛筆]ボタンをクリックし、「add split character to output messages」のチェックをオンにし、[Update]ボタンを」クリックします。
 
※他の項目が図の設定内容と異なる場合、図と同じになるように変更してください。

⑥「Deploy」をクリックし、フローをデプロイします。


○動作の確認
①ブラウザでデータ送信用HTMLを開きます。
②[ON]ボタンのクリックでLEDが点灯、[OFF]ボタンのクリックでLEDが消灯することを確認します。

Node-REDでIchigoJamを制御する

 Node-REDでIchigoJamを制御する方法を説明します。
 Node-REDを使うことで、Adafruit IO、IFTTT、M2XなどのIoTプラットフォームとのデータの送受信が簡単にできるようになります。
 
 Node-REDのインストール方法は、次の記事の①②手順を参照してください。

○PCとIchigoJamの接続
 Node-REDでIchigoJamを制御するには、シリアル通信を使います。USBシリアル変換ケーブルなどで、PCとIchigoJamを接続します。


 上記ケーブルを使用した場合は、次のように接続します。

ケーブル
IchigoJam
RXD(白)
TXD
TXD(緑)
RXD
VCC(赤)
CN5の1ピン
GND(黒)
CN5の5ピン


















○LEDの制御その1
 まず、基本として、IchigoJamのオンボードのLEDをオン・オフするフローを作成します。

①「inject」ノードを2つ、「serial」ノード(output)を次のように配置、接続します。
 
②1つ目の「inject」ノードのダブルクリックし、プロパティを表示します。
③「string」を選択します。
 
④「Payload」に「LED1」と入力し、[OK]ボタンをクリックします。
 
Payload(msg.payload)は、Node-REDで処理するデータを格納するプロパティ(変数)です。ここでは、IchigoJamのBASIC命令の「LED1」を格納しています。

⑤2つ目の「inject」ノードのダブルクリックしてプロパティを表示し、「string」を選択し、「Payload」に「LED0」と入力し、[OK]ボタンをクリックします。
「serial」ノード(output)のダブルクリックしてプロパティを表示し、通信に使用するポートを選択し、[鉛筆]ボタンをクリックします。
 
⑦「add split character to output messages」のチェックをオンにし、[Update]ボタンを」クリックします。
 
※他の項目が図の設定内容と異なる場合、図と同じになるように変更してください。
「Deploy」をクリックし、フローをデプロイします。
 
⑨「inject」ノードの「LED1」の左側のボタンをクリックしてLEDが点灯、inject」ノードの「LED0」の左側のボタンをクリックしてLEDが消灯することを確認します。
 


○LEDの制御その2
 LEDを5秒間隔で点滅させるフローを作成します。
①「inject」「function」「serial」(output)「debug」ノードを次のように配置、接続します。
 
「debug」ノードは無くても構いません。
②「inject」ノードのプロパティを表示し、[Repeat]を「interval」に設定し、[every]を「5」「seconds」に設定します。
 
③「function」ノードのプロパティを表示し、[Function]に次のコードを入力します。


 
④「serial」ノード(output)のプロパティを表示して通信に使用するポートを選択し、[鉛筆]ボタンをクリックし、「add split character to output messages」のチェックをオンにし、[Update]ボタンを」クリックします。
※他の項目が図の設定内容と異なる場合、図と同じになるように変更してください。

⑤「Deploy」をクリックし、フローをデプロイします。
※デプロイすると、5秒間隔でLEDが点滅します。

2016年6月12日日曜日

Symaマルチコプターのカメラ&PIRモーションセンサーで簡易防犯カメラ - IchigoJam偏

 IchigoJamでも、SymaマルチコプターのカメラPIRモーションセンサーで簡易防犯カメラを作ってみました。

○回路・配線図
 

 カメラの電源(3.3V)は、IchigoJamの3.3V電源では容量不足のため、別電源から供給する必要があります。

○プログラム


  スライドスイッチで静止画/動画モードを切り替えます(要再実行) 。


Symaマルチコプターのカメラ&PIRモーションセンサーで簡易防犯カメラ - Arduino偏

SymaマルチコプターのカメラとPIRモーションセンサーで簡単防犯カメラを作ってみました。

Symaマルチコプターのカメラの制御方法は、前記事を参照してください。

○回路・配線図
 
○プログラム(スケッチ)
FlexiTimer2をインストールしてください。


 スライドスイッチで静止画/動画モードを切り替えます(要リセット)。

Symaマルチコプターに付いているカメラの制御 ー Arduino偏

 SymaのマルチコプターX5シリーズに付いているカメラ(SDカードに記録するタイプ)をArduinoで制御してみました。このカメラは、AliexpressでSDカード(4G)、カードリーダー付きで1500円程度で購入できます。
 
○カメラのコントロール方法
 制御端子(黄色)に300ms以下のパルス(アクティブLOW)入力で静止画撮影を、300ms以上のパルス入力で動画撮影を開始します。動画撮影は再度パルスを入れると停止します。

○回路図
 

○プログラム(スケッチ)
FlexiTimer2インストールしてください。




2016年6月9日木曜日

FMラジオモジュールの制御 - Arduino偏

 Arduinoはライブラリがあるので、RRD-102 v2.0(FMラジオモジュール)の制御も簡単にできます。


 Radioのほうが機能も、サポートするチップも多くお勧めです。

○ライブラリのインストール
 Radioライブラリをダウンロードしてインストールします。

○回路・配線図
  PCからのUSB給電の場合、電源にノイズが乗りFMの受信に影響します。このため、RRD-102 v2.0の3.3Vは別電源から供給するのが望ましいです。

・FMラジオ
 
※I2Cのロジックレベル変換の部品は適当なモノで書いています。実際には、次の部品を使用しました。

・キーパッド
 
 

○プログラム