IchigoJam×さくらのIoTβLTEモデムで照度値をAmbientへ転送

IchigoJamにさくらのIoT Platform βを接続する実験の続編です。今回は、IchigoJamからLTEモジュールの属性を読み込む機能を追加し、照度センサ値をIoTクラウドサービスAmbientへデータ転送する実験を行いました。
昨年11月に実験を行った時は、IchigoJamからの属性読み取りが出来ませんでした。例えば、LTEモジュールの電源を投入した直後や、省電力化のためにLTEモジュールの電源のON/OFFを制御していた場合、LTEモジュールの接続状態を取得できないので、適切に測定結果を送信することが出来ませんでした。
前回の実験:
IchigoJamにさくらのIoT Platformβ用の「LTEモジュール」へ接続し、
遠隔地の照度を測るワイヤレス・センサの実験の様子
今回は、IchigoJamのベータ版ファームウェアを使って属性の読み取りを行う実験と、Ambientへのデータ転送を行う方法について説明します。

さくらのIoT Platform β用 LTE通信モジュール

さくらのIoT Platformβ用のLTEモジュールは、携帯電話事業者ソフトバンク社の4Gネットワークに対応したIoT製品組み込み用のLTE通信モジュールです。
「プラットフォーム」と名付けられている通り、通信モジュールだけでなく、ソフトバンクの4G用SIMカード、IoT用のクラウドサービスのセットで提供されています。
さくらのIoT Platform β用のLTE通信モジュールAX-919-1とブレイクアウトボードAX-920-1を組み合わせたときの様子。ソフトバンクの4Gネットワークに対応したSIMカードも実装されている(規約上、SIMカードの取り外しはできない)。
さくらのIoT Platformβ販売元:
  ・さくらの通信モジュール(LTE)-β版 -定価9,960円
  ・ブレイクアウトボード(検証ボード)-β版 -定価5,000円
Arduino用シールドも8000円で販売されていますが、私はモジュールとブレイクアウトボードを購入し、Arduino用のピン配列に変換する中継基板を製作しました(後述)

さくらIoTの読み取りに対応したIchigoJam用のベータ版ファームウェアが公開に

さくらのIoT用LTEモジュールからの読み取りに対応したIchigoJam用のベータ版ファームウェア1.2β40とβ42がリリースされましたので、LTEモジュールが接続状態にあることを確認するための属性読み取りが可能になりました。
ファームウェア     さくらのIoT Platformβへの接続性           _
IchigoJam 1.2.1    データ送信のみ可能(状態の確認や受信が出来ない)
IchigoJam 1.2β42  属性読み取り、データ送信、データ受信の全てが可能
IchigoJam 1.2β40ではI2CRコマンドで属性読み取りが可能に、またβ42では引数の一部を省略可能になりました。β42の新表記では、以下のようにI2Cアドレス、メモリアドレス、送信バイト数の順に引数を記述することが出来ます。
(旧)従来表記の例: i2cw(79,#700,1,#701,N)
(新)省略表記の例: i2cw(79,#700,N+1)
β42に従来表記を使用しても使用可能であり、上位互換コマンドとなっています。
今回は、従来のIchigoJamファーム1.1.1および1.2.1との互換性を考慮し、新表記ではなく旧表記を使用しました。

古い IchigoJam ファームウェア Ver 1.1.1が使用されている市販キット製品。
   左=IchigoJam コアセット(秋月電子通商)
   右=IchigoJam用コンピュータ電子工作学習キット IF ICH-KIT・Personal Computer基板(CQ出版社)

IchigoJam用のプログラム「ワイヤレス照度センサ」

前回のプログラムをもとに属性読み取り機能を追加したプログラムを以下に示します。修正した部分は行番号100~150の部分です。
従来のIchigoJam Ver 1.1.1や1.2.1を使用していた場合は行番号200へジャンプし、センサ値の送信のみを行います(※今回、対応した属性読み取り機能は使いません)。
new
1 cls:?”SAKURA IoT
2 ?”アナログ ニュウリョク A=BTN
3 ?”I2C SDA ポート IN3
4 ?”I2C SCL ポート EX1/SCL
5 W=600:?”ソクテイ カンカク W=”;W
6 ‘ CC BY Wataru Kunino
rem https://bokunimo.net/ichigojam/
100 ‘INIT
110 ifver()<12240goto200
120 poke#700,1,0,1
130 ifi2cr(79,#700,3,#780,4)?”‘”;:waitW:goto120
140 ifpeek(#782)<>128?”.”;:waitW:goto120
150 ?”Connected”

200 ‘DATA
210 A=ana(0):?”ana(0)=”;A
220 poke#700,32,10,0,73,A&255,A>>8,0,0,0,0,0,0:N=11:gsb900
300 ‘SEND
310 rem poke#700,34,0:N=1:gsb900
320 poke#700,36,0:N=1:gsb900
390 led0:waitW:led1:goto100
900 ‘I2C
910 C=0:forI=0toN
920 C=C^peek(#700+I):next
930 N=N+1:poke#700+N,C:
940 ifi2cw(79,#700,1,#701,N)?”E”         :’ -> ifi2cw(79,#700,N+1)?”E
950 forI=0toN:?peek(#700+I);
960 ?” “;:next:?

970 rtn

“ltr”>

IchigoJam 1.1.1および、1.2.1、1.2β42で動作を確認。
後述のPersonal Computer基板や秋月電子通商のIchigoJamコアキットなどでは、
IchigoJam 1.1.1が、純正のIchigoJam TなどではIchigoJam 1.2.1が実装されている。
これらすべてのIchigoJamで動作することを確認した。
行番号900番台はLTEモジュールからデータを送信する処理部(機器ドライバ部)です。この処理部では受信処理を行っていないので、古いファームウェア(IchigoJam 1.1.1や1.2.1)でも動作します。
プログラムをIchigoJamマイコンへ転送し、前回(https://bokunimo.net/blog/ichigojam/103/)と同じように照度センサを接続すれば、ワイヤレス照度センサの完成です。

IchigoJamを制御したい場合の参考情報

ワイヤレスLEDのようにインターネット側からIchigoJamを制御したい場合は、受信処理が必要になります。受信にも対応したサンプルプログラムについては、IchigoJamの開発者である福野さんのブログで紹介されています。こちらを使用すれば、一つの機器ドライバ部で属性読み取り、データ受信、データ送信の全てが可能です(IchigoJamファームウェアには1.2β42を使用する)。
blink a LED via web on IchigoJam
 
900 @I2C
910 M=PEEK(#701)+2
920 C=0:FOR I=0 TO M-1:C=C^PEEK(#700+I):NEXT:POKE#700+M,C
930 IF I2CR(79,#700,M+1,#780,N+1) STOP
940 C=0:FOR I=0 TO N-1:M=PEEK(#780+I):C=C^M:?M;” “;:NEXT:?
950 IF C!=PEEK(#780+N) OR PEEK(#780)!=1 STOP
960 RTN

I2Cのプルアップ抵抗に注意

下図は、CQ出版社から販売されている「IchigoJam用コンピュータ電子工作学習キット(IF ICH-KIT)」のPersonal Computer基板を使って、さくらのIoTプラットフォームβのLTEモジュールを接続した場合の一例です。
I2C信号の電圧を1.8Vに変換するために秋月電子通商のAE-PCA9306を使用しています。ただし、私の実験では、プルアップ抵抗が1kΩと低いので、液晶やEEPROMなどが動作しなくなりました。Personal Computer基板に10kΩのプルアップ抵抗を実装しているので、AE-PCA9306側のプルアップ抵抗を外すと良いでしょう。他のマイコンボードでもプルアップ抵抗を10kΩくらいにしたほうが良いでしょう。
LTEモジュールとマイコンボードとの間に、中継用の基板を挟む3枚構造。中継用の基板にはI2C信号のレベル変換用に秋月電子通商のAE-PCA9306を実装した。プルアップ抵抗が1kΩと低いので、他のI2C通信へ影響することがあるので、プルアップ抵抗を取り外すか基板裏面のパターンを切断する。また、Arduino用のI2C信号は5Vで、IchigoJamの3.3Vと合わないので、中継基板に電圧切り替えスイッチを実装した。
一見しただけでは、なんの実験を行っているかが分からない地味な写真。基板裏面にもモジュールの名称やロゴのシルク印刷が欲しいところ。

IoTセンサ用クラウドサービスAmbientへデータを送信する

Ambientは、アンビエントデーター株式会社 (AmbientData Inc.)が提供しているIoTセンサ用のクラウドサービスです。センサなどから送信したデータを簡単にグラフ化し、パソコンだけでなくスマートフォンからも閲覧することが出来ます。
アンビエントデータ株式会社が提供しているIoTセンサ用のクラウドサービスAmbientの表示例。センサ値をHTTP(json形式)でアップロードすると、簡単にグラフ化して閲覧することが可能になる。
今回、さくらのIoTプラットフォームへ送信した照度センサ値を、Ambientへ転送してみました。しかし、今のところ、さくらのIoTプラットフォームから、直接、転送することは出来ません。
そこで、さくらのIoTからAmbientへ転送する機器については、自宅などに設置したRaspberry Piを使用します。
もちろん、照度センサを搭載したIchigoJam側はRaspberry Piとは別の遠隔地へ設置することができます。
IchigoJam ――(4G網)―→ さくら ――(WebSocket)―→ Raspberry Pi ――(HTTP)―→Ambient
Raspberry Pi用のスクリプトは、以下のコマンドでダウンロードできます。
ダウンロード方法:
$ cd RaspberryPi/network/sakura
実行方法:
$ ./sakuraToAmbient.sh            (予め、トークンなどを追記してください)
最新版:
スクリプトは、以下のようになります。TOKENと、AmbientChannelId、AmbientWriteKeyの部分については、それぞれのサービスから取得して、スクリプトを書き換えてください。
#!/bin/bash
TOKEN=”xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”       # Sakura IoT トークン
AmbientChannelId=100                                # Ambient チャネルID
AmbientWriteKey=”0123456789abcdef”   &
nbsp;              # Ambient ライトキー(16桁)
DEVICE=”sakra_1″                                    # 識別名
INTERVAL=20                                         # 送信間隔(20秒以上を推奨)
while true; do
DATA=`curl –max-time $INTERVAL -s -N \
-H ‘Sec-WebSocket-Version: 13’ \
-H “Sec-WebSocket-Key: $(head -c 16 /dev/urandom | base64)” \
-H “Connection: Upgrade” \
-H “Upgrade: websocket” \
https://api.sakura.io/ws/v1/${TOKEN}`
# 参考文献 http://hateda.hatenadiary.jp/entry/debugging-websocket-using-curl
if [ -n “$DATA” ]; then
DATE=`echo $DATA\
|tr ‘,’ ‘\n’\
|grep \”datetime\”\
|head -1\
|cut -c13-31\
|tr “-” “/”\
|tr “T” ” “`
DATE=`date –date “${DATE} UTC” “+%Y/%m/%d %H:%M:%S”` # UTCをJST(等)へ変換
VALUE=`echo $DATA\
|tr ‘{‘ ‘\n’\
|grep “\”channel\”\:0″\
|head -1\
|tr ‘,’ ‘\n’\
|grep \”value\”\
|head -1\
|cut -c9-`
if [ -n “$VALUE” ]; then
echo ${DATE}”, “${DEVICE}”, “${VALUE}
JSON=”{\”writeKey\”:\”${AmbientWriteKey}\”,\”d1\”:\”${VALUE}\”}”
#   echo $JSON
curl -s ambidata.io/api/v2/channels/${AmbientChannelId}/data\
-X POST -H “Content-Type: application/json” -d ${JSON} # データ送信
fi
fi
done
このスクリプトをRaspberry Pi上で実行すると、変数TOKENに設定されたトークンを使って、さくらのIoTサーバから測定値を取得し、Ambientへ転送します。
転送間隔はINTERVALで設定します。初期値は20秒です。IchigoJamの測定間隔Wよりも長い時間に設定してください。
IchigoJam測定間隔 W/60 (秒) < 転送間隔 INTERVAL (秒)
準備が出来たら、Raspberry Piでスクリプトを動作させた状態で、遠隔地にIchigoJam×さくらIoTのセンサを設置して実験してみましょう。
IchigoJamからソフトバングの4G網経由で送信した照度データを、Raspberry Piで受信し、BashスクリプトでAmbientへ転送した時の様子。IoTセンサのデータを簡単にグラフ化(Ambientの特長)することができた。
このスクリプトではcurlコマンドによる簡易的な方法でWebSocketを受信しています。受信データは転送間隔毎に処理しますが、その処理のたびにWebSocketの接続を切断し、再接続する動作となっています。
Curlコマンドを使ってWebSocket接続した状態のまま受信後のread処理をする記述方法が分からなかったので、このような実装となっています。ご存知の方は、教えていただけると嬉しいです。
例えば「curl ~~ | while read DATA; do ~~ ;done」のような感じで動かせないかと考えていましたが、うまくいかないのです。

今後

現時点では、さくらのIoTプラットフォームβ用のLTEモジュールには、省電力機能が備わっていません。このため、乾電池などで長期間の駆動を行うには、IchigoJamからLTEモジュールの電源供給をFETスイッチなどで制御する必要があります。
また、LTEモジュール単独で動作可能なGPIOモードがあれば、IchigoJam不要でワイヤレスセンサを製作できるようになるかもしれません。
このあたりはLTEモジュール側のファームウェアで対応されると思うので、その様子を見ながら、次のステップに進みたいと思っています。

Raspberry Pi Zeroへ接続することも可能。 Raspberry Pi Zeroのピンへの変換には市販品(ITEAD RPI Arduino Shield Add-on)を使用した。

右上:自作したArduinoシールド用の中継基板。スイッチはI2C信号の電圧切り替え(3.3V/5V)
下:Raspberry PiとArduinoシールドの変換基板(今回の記事では使用しない)
by ボクにもわかるIchigoJam用 IchigoSoda / sakura.io
https://bokunimo.net/ichigojam/sakura.html

ESP-WROOM-02ワイヤレスカメラからYahoo!ジオシティーズへFTP転送

トランジスタ技術2017年3月号の「スピード実習4 Wi-Fiカメラ」で撮影した写真をラズベリーパイへ転送するサンプルを改良し、Yahoo! ジオシティーズへのアップロードに成功しましたので、お知らせいたします。
   Wi-Fiカメラ ⇒ 無線LANアクセスポイント ⇒ インターネット ⇒ Yahoo! ジオシティーズ
LAN内のFTP転送には何の問題もなかったのですが、インターネット上のFTPサーバへ接続すると、ログイン時のパスワードが認証できなかったり、PASVモードへの移行が出来なかったり、ESP8266がハングアップしたりといった問題があったので、サンプル・プログラムを修正しました。

スピード実習4 Wi-Fiカメラとは

ESPモジュールから、ラズベリーパイへ撮影した写真を転送するサンプルを製作する実習です。製作方法は雑誌の回路図もしくは、下記の情報を参考にしてください。
パーツセットの紹介:
CQ出版社が公開している回路図:

乾電池で動作するWi-Fiカメラ。スピード実習4では、撮影した写真をラズベリーパイへ送信する実験についてトランジスタ技術2017年3月号に紹介していた。今回、写真をYahoo!ジオシティーズのFTPサーバへ転送する実験に成功。修正したサンプル・プログラムを配布する。

修正版のサンプルプログラムを配布します

修正したプログラムは、下記からダウンロードすることが出来ます。
または

FTPに関する設定方法

プログラムの31行目から34行目を修正してください。FTP_DIRにチルダ「~」があると接続できませんので、「""」のように何も書かないか、既存のディレクトリ名を入力してください。他のサンプルと同様に無線LANアクセスポイントなどの設定も必要です。

#define FTP_TO "118.151.255.220"                    // Yahoo! ジオシティーズのFTPアドレス
#define FTP_USER "yahoo id"                          // お手持ちのYahoo! IDを設定 
#define FTP_PASS "password"                         // Yahoo のパスワード(※平文で送信されます)
#define FTP_DIR ""                                         // ディレクトリ

その他の方法と比べて

Raspberry Pi Zeroが国内で、Zero Wが海外で発売されました。これに中国などで$10前後で販売されているRaspberry Pi Zero用のカメラモジュールを接続すれば、$15~$20でワイヤレスカメラを製作することも可能です。
課題は消費電力でしょう。Raspberry Pi Zero Wの消費電力は動作時0.5W以上、待機時であっても180mWと大きいのです。Raspberry Pi を、ESP8266モジュールのように単三アルカリ乾電池で長時間駆動させるのは、まだまだ難しいでしょう。
参考文献
対策方法について知りたい方は、GitHubやgitコマンドでftp.inoの差分を確認ください。最終的には、ネットで得られた情報をヒントに調整を行いました。参考にした情報についてもソースftp.inoに記載してあります。
ボクにもわかるIoTモジュールESP8266
筆者によるESP8266サポートページ
by ボクにもわかる電子工作
https://bokunimo.net/

わずか$8。Raspberry Pi 用の格安カメラを組み込んでみた

純正のRaspberry Pi専用カメラだと高価なので加工してケースに入れるのには躊躇してしまいます。
格安カメラだと加工ししたり接着して専用カメラにしてしまったとしても惜しくありません。

中国でわずか$8で販売されているRaspberry Pi用カメラをRaspberry Piのケースに組み込んでみました。

格安カメラモジュールをApple Pi 基板に接着剤で固定し、Raspberry Pi用のケースへ組み込んだ。Apple Pi基板とケースについても組み込みるように加工が必要。大切なRaspberry Pi本体については加工不要で、接続、配線が可能。

純正のカメラと同様に「raspistill」コマンドで撮影することが出来ます。
raspistill -n -o photo.jpg
例えば、下記のサンプルのシャットダウン部分にraspistillコマンドを追加すれば、ボタン操作でシャットダウンしたときの操作者の写真を保存することができます。
Raspberry Pi用 Apple Pi を実用的に使うサンプルスクリプト

5Mピクセルの高解像度撮影が可能

撮影を実行すると、数秒後に2592×1944(4:3)の5Mピクセルの高解像度写真がファイルとして保存されます。下図は撮影した写真を圧縮したものです。実用的なカメラとして十分に使えそうです。
ただし、被写体に接近するとピントが合わずにぼけてしまいます。(ピント調整部は接着剤で固定されており、調節できない)

格安カメラで撮影した写真の例。被写体が近いので、ややピントが甘くなっている。5Mピクセルの高解像度を生かせていないが、ブログ用の写真であれば十分に利用できるレベル。

以下で販売されていますが、海外からの発送につき、リスクと時間を要する点に注意してください。
海外発送・送料込 US $7.85 (Ali Express)
海外発送・送料込み 950円 (Amazon)
by ボクにもわかるRaspberry Pi

無線内蔵 Raspberry Pi Zero W の消費電力を測定してみました。

Raspberry Pi Zero W の消費電力を測定してみました。
 起動後、しばらくした状態    100 mA(無線OFF)
 Bluetooth と Wi-Fi をON     125 mA
 SSH接続状態           125 mA (変わらず)

 SSH+PING動作状態       125~130 mA
 ネットワーク連続アクセス中   180 ~270mA
 スタンバイ(シャットダウン後)   36.2mA
条件:USB接続機器無し、無線LANアクセスポイントへ接続状態
(ただし、Raspberry Pi本体はアルミ箔で覆った状態・電波はUSBケーブルからのわずかな漏れで通信)

イギリスから輸入したRaspberry Pi Zero W。 本体価格が£8.00 で、送料と手数料が£5.50。EU離脱とは無関係にイギリスの通貨はポンド(£1 ≒ 140円・購入時)なので、1900円ほど支払った。

(追記)
「起動後、しばらくしたときの電流」は無線ONで125mAでした。しかし、何人かの方が80mA程度の測定結果を公表しています。
電圧が低下している可能性が考えられたので、念のため確認してみました。コア電圧については、シールド状態では測定しにくかったので無線OFF時のみ測定しました(無線=内蔵のBluetoothとWi-Fi)。
  入力電圧 4.99V(無線 OFF)、4.99V(無線 ON)
  DCDC出力 3.32V(無線 OFF)、3.33V(無線 ON)
  コア電圧 1.81V(無線 OFF)
問題なさそうです。

by ボクにもわかるRaspberry Pi Zero W


手持ちの各種Raspberry Piの比較表です。Pi Zero Wは、Pi Zeroに比べて、動作時だけでなく、待機時(スタンバイ時)の電流が増えているようです。
Model 発売時期 発売
価格
無線 プロセッサ DMIPS RAM USB
ポート数
拡張
GPIO
消費電流
(平均~最大)
Raspberry Pi 3
Model B
2016年 2月 $35 64bit ARM
Cortex-A53
2763 1 GB 4 ports 40 Pin 300mA~2.5A
OFF時:80mA
Raspberry Pi 2
Model B
2015年 2月 $35 × 32bit ARM
Cortex-A7
1710 1 GB 4 ports 40 Pin 250mA~1.8A
OFF時:70mA
Raspberry Pi
Model B
2012年 2月 $35 × 32bit ARM
1176
875 256 MB 2 ports 26 Pin 310mA~0.5A
OFF時:110mA
Raspberry Pi
Zero W
2017年 2月 $10 32bit ARM
1176
1250 512 MB Micro
1 port
40 Pin 130mA~0.3A
OFF時:40mA
Raspberry Pi
Zero
2015年11月 $5 × 32bit ARM
1176
1250 512 MB Micro
1 port
40 Pin 80mA~0.2A
OFF時:20mA
※ 平均消費電力とOFF時消費電力は実測値

ESP-WROOM-02などの実験が可能なIoT回路百科事典パーツセット

ESP-WROOM-02を中心とした実験が可能な「IoT回路百科事典パーツセット」がCQ出版社から発売されました。
製作時に便利な説明書を出版社のホームページからダウンロードすることが出来ます。この資料には、トランジスタ技術3月号で紹介した個々の実験のパーツリストや回路図、部品実装図が掲載されています。「無料で公開」されているので、雑誌の中から少しだけ実験してみたい方は、説明書だけでもダウンロードしていただければと思います。
CQ出版社の販売ページ:
説明書(回路図・パーツリスト・部品実装図):
パーツセットは、一通りすべてを製作してみたい方や、講習会や研修などを検討中の方などにおすすめの商品です。パーツリストに合わせて自分で部品を集める手間が省けます。
トランジスタ技術3月号に掲載したすべての実験が行えるように、ESPモジュール3個や、EcOcean機器、シリアルJPEGカメラ、ファームウェア書き込み済のIchigoJamマイコン、音声合成IC、ACリレー、小型液晶(8×2文字)、標準液晶(16×2文字)、人感センサ、加速度センサ、温度センサ、照度センサ、ドアセンサ、赤外線リモコン受信モジュール、赤外線LED、フルカラーLEDなどが付属しています。
(ラズベリー・パイ本体と周辺機器、LTE通信機、乾電池などは含まれていません。)
セットが豪華につき、価格は送料・消費税込みで24,840円です。少し高価に感じられるかもしれませんが、自分で部品を集めて購入した場合と比べてみても、ほとんど変わりません。
一式を揃える手間を考えれば、価値あるセットだと思います。全実験に挑戦してみたい方、講習会での利用や、その事前検討用に一式を揃えたい方は、ぜひ、ご検討ください。
ご興味をもっていただければ、さいわいです。

IoT回路百科事典パーツセット IoT100-TGSET

説明書の一例(IchigoJamマイコン):
ボクにもわかるESPモジュール:
by ボクにもわかる電子工作
https://bokunimo.net/
筆者によるESP8266サポートページ:

http://shop.cqpub.co.jp/hanbai/books/I/I000215.jpg

価格24,840円(税込)
     2017年3月3日発行
【直接販売商品】
好評発売中!
http://shop.cqpub.co.jp/hanbai/books/I/I000215.html