WebのCGIにPOSTする形で測定データの蓄積を行います。
以下のような方におすすめです。
・制限の多い外部のクラウドサービスを使わず、自前の環境だけで手軽に室内の状況を蓄積したい
・インターネットに接続せず、ローカルネットワーク接続の社内サーバーやRaspberry Piなどにデータ蓄積を行いたい
・AWSやAzureなどの新しいIoTクラウドについていけないか、一から勉強する時間はないが、一昔前に流行ったPerl等のCGIならデータ分析まで含めて高度な分析ができるまでプログラムに自信がある。
こちらで紹介するサンプルコードをセットアップすれば、この例のようにWebに測定値がCSV形式でアップロードされます。

ここでご紹介するプログラムや手法は、全て1データごとにカンマで区切ったテキストファイル(CSVファイル)となりますが、このプログラムを応用して、Oracle等と連携するように作ることで高度な解析を行うことも可能となります。
(1)CGIの設置ができるレンタルサーバーを契約し、設置に必要な情報を集めます。
レンタルサーバーとは、ホームページなどを作る際に契約するWebサーバーです。
ホスティングサービスと呼ばれることもあります。
契約すると、通常以下のようなログイン情報が発行されます。

| 外部サーバーを使わない場合は、Raspberry PiやWebサーバーアプリを適切にセットアップし、LANを介して別のPCから閲覧可能であることを確認します。 |
(2)FTPソフトをダウンロードしてログインの設定をし、サーバーに接続します。
(3)以下のテキストを丸々コピーし、ファイル名【aaa.html】で保存します。
<HTML>
<HEAD><TITLE>表示テスト</TITLE></HEAD>
<BODY>表示テスト</BODY>
</HTML>(4)FTPソフトを操作して、トップの階層にフォルダ名【xeta】でフォルダを作成します。
(5)フォルダxetaにaaa.htmlをアップロードします。
(6)ブラウザでアクセスして、「表示テスト」と書かれたページが表示されるか確認します。
| レンタルサーバープロバイダーから発行されたURLが、 https://www.stagia.co.jp/~ohmizo/ である場合、上記説明通りに操作をしていれば、以下のアドレスでaaa.htmlが表示されるはずです。 https://www.stagia.co.jp/~ohmizo/xeta/aaa.html |
(7)表示の確認ができたら、aaa.htmlと同じ場所に、こちらのファイルを展開(解凍)したものをアップロードします。
※リンク先のコンテンツは、最新のNorton360でウイルスチェックを実施しています。
※ファイル名が【 recieve.cgi 】であることを確認します。
テキストエディタ等で開くと、以下の内容であることが確認できます。
!/usr/bin/perl
( $sec , $min , $hour , $day , $mon , $year ) = localtime( time );
$seq0=@ARGV[0];
$seq1=@ARGV[1];
$seq2=@ARGV[2];
$seq3=@ARGV[3];
$seq4=@ARGV[4];
$seq5=@ARGV[5];
$seq6=@ARGV[6];
$seq7=@ARGV[7];
$seq8=@ARGV[8];
$seq9=@ARGV[9];
$seqa=@ARGV[10];
$secb=@ARGV[11];
open(OUT,">> sensorlog.txt");
$year=$year+1900;
$mon=$mon+1;
print OUT "$year,$mon,$day,$hour,$min,$sec,$seq0,$seq1,$seq2,$seq3,$seq4,$seq5,$seq6,$seq7,$seq8,$seq9,$seqa,$seqb\n";
close(OUT);| 1行目の「!/usr/bin/perl」は、テキストで書かれたプログラムコードを、コンピュータ(サーバー)で実行可能なバイナリに変換するソフトがインストールされた場所を示します。 ホスティングプロバイダー(レンタルサーバー)によって場所が異なるため、確認してください。 ※多くの場合は「!/usr/bin/perl」ですので、不明な場合はこのままの状態でお試しください。 |
| 上記ソースコードをコピーアンドペーストした場合、ブラウザの文字表示制御の都合で ” 記号などが全角になることで動作しない場合があります。 必ずダウンロードリンクからダウンロードしたファイルを使用してください。 |
(8)FTPソフトで【 recieve.cgi 】を選択した状態で、アクセス権限を変更する操作をします。
| アクセス権限の変更のしかたは、FTPソフトの操作説明などをご覧ください。 変更したいファイルの上にマウスカーソルを乗せた状態で右クリック(Macの場合2本指クリック)で表示されることが多いです。 FTPソフトでアクセス権限の変更機能がないものはまずないので、見つからなくても落ち着いて探してみてください。 |
Windows向けで有名なFTPツール「FFFTP」を使用した例は、以下の通りです。
a.アクセス権限の変更を行いたいファイルにカーソルを乗せた状態で右クリックし、「Change Permission…」(権限変更)をクリックします。

b.Owner、Group、OthersそれぞれのExecute(実行権限)にチェックを入れ、有効にします。
殆どのFTPツールでは、3桁の番号を入れる場所があります。
ここに「755」と入力することで、自動的にチェックが入る場合があります。
※この3桁の番号は、すべてのFTPソフトで共通です。

これで、サーバー側のセットアップは終わりです。
続いてH10のセットアップをします。
| ここでは、H10にプログラムを書き込む作業を行います。 プログラムの書き込みにはarduinoを使用します。 arduinoのインストール及び設定については、こちらのページをご覧ください。 ※ESP-IDFやmbedをご使用の方は中級〜上級者ですので、書き込みソフトのインストール及び設定についての説明は省略します。 |
| H10にプログラムを転送する時は、副MCUを常時通電モードで動作させなければならないため、DCジャックに電源を供給する必要があります。 バックアップ電源用の乾電池は無くても動作しますので、ここでは外しておきます。 |
(1)まずは、こちらからプログラムをダウンロードして圧縮を展開(解凍)してください。
※このリンク先のコンテンツは、最新のNorton360でウイルスチェックを実施しています。
※こちらプログラムは動作済みのものとなります。
WiFiのSSIDとパスワード、アップロード先のURLのみマスクしています。
| 必ずこちらのダウンロードリンクからダウンロードしたプログラムをご使用ください。 本ページ記載のプログラムを範囲選択してコピーをすると、見た目は全く同じであってもブラウザ特有の処理で、一部の記号が似ている他の文字に変換されて表示されることがあるため、プログラムとして認識されず、H10への転送に失敗します。 |
(2)ダウンロードしたプログラムをメモ帳やテキストエディタで開き、全てコピーします。
(3)Arduinoを開きます。

※Arduinoを初めて開いた時は、このような初期プログラムが編集画面に書かれていますが、こちらは消して構いません。
以降に行う操作でエラーの原因になるため、見えない空白(スペース)も含めて完全に削除してください。
(4)(2)でコピーしたプログラムをそのまま貼り付けます。

難解な文字が詰まっていて戸惑うかもしれませんが、今は気にしないでください。
プログラムの解説はこちらにご用意しておりますので、動作確認後にご覧ください。
プログラムの上の方に
const char ssid[] = "*********";
const char passwd[] = "********";
const char* host = "www.***********.com";と書かれています。
この部分を、以下のように編集します。
| const char ssid[] | お使いのWiFiアクセスポイントのSSIDを入力します。 |
| const char passwd[] | お使いのWiFiアクセスポイントのパスワードを入力します。 |
| const char* host | レンタルサーバーのドメイン名 例)https://www.stagia.co.jp/~ohmizo/xeta/recieve.cgiがアドレスの場合、www.stagia.co.jpの部分だけ書きます。 |
※元から入っている数字やアルファベット以外の文字や記号(特に各入力要素の前後にある ”ダブルクォーテーション記号” は間違って消しやすいため、気をつけてください。)
次に、少し下の方までスクロールさせます。
String url = "/***/record.cgi";この部分を、レンタルサーバーのURLからドメイン名を省いた部分に書き換えます。
例えば、フルのURLがhttps://www.stagia.co.jp/~ohmizo/xeta/recieve.cgi
の場合、/~ohmizo/xeta/recieve.cgi
となります。
これでプログラムの準備は完了です。
MCUを駆動させるために必要な最低限の処理や、アップロード処理などは既にできているので、この2点を編集するだけで完成です。
(1)H10を一度もパソコンに接続したことがない場合は、こちらのページを参考にセットアップをします。
(2)ジャンパピンを書き込みモードに変更します。

通常、副MCUは主MCUと接続されています。
この操作を行うことで、副MCUの接続先をUSBに変更して、ソフトウェアの書き込みができる状態にします。
この操作を忘れると、プログラムの書き込みができないのでご注意ください。
(3)H10とパソコンをUSBケーブルで接続します。

※必要に応じてArduinoの設定の中にあるCOMポートの設定を行います。
COMポートの番号を間違えると転送エラーになります。
H10を買い替えたり、パソコンを買い替えたり初期化したりすると番号が変わることが多いため注意が必要です。
| パソコンから認識されない場合、以下の内容をご確認ください。 ・ジャンパピンを書き込みモードにセットします。 →この操作をすることで、副MCUの通信先を主MCUからUSBコントローラ(パソコン)に切り替えて、パソコンから送られてくるプログラムを受信できる状態にします。 ・DCジャックにACアダプタを接続します。 →乾電池駆動(停電モードでの動作)では、2分に一度、20秒間しか副MCUの電源が入らないため、プログラムを書き込むことができません。 |
(4)H10のDCジャックからプラグを抜き、数秒待ってから挿し直し、5~10秒程度待ってから、Arduinoの【マイコンボードに書き込む】ボタンをクリックします。

| H10は、DCジャックから電源供給を開始して5秒後に副MCUに通電を開始します。 通電が開始されたら、主MCUから30秒以内に正しいデータフォーマットで返信が行われないと、フリーズしたと判断して副MCUを自動的に再起動します。 副MCUが再起動している間は、プログラムの転送はできません。 従って、DCジャックを挿し直したら、5~25秒の間にArduinoの【マイコンボードに書き込む】ボタンをクリックしてプログラムを転送します。 |
下半分の黒い部分に次のようなメッセージが表示されたら書き込み完了です。

| もしここで、上記のような画面ではなくエラーメッセージが表示される場合、以下の点を確認してください。 ・サンプルのコードをコピーアンドペーストする時、 – 間違えて余計な文字などを書き込んでいませんか? – ショートカットキー([Ctrl] or [command] + V)を連打して二重貼り付けしていませんか? – ショートカットキーを押し損ねてソースコードの末尾にVなどが入っていませんか? – Arduinoインストール直後に最初から入っているプログラム雛形の続きに貼り付けていませんか? – チャンネルキーやライトキーを書き換える際、誤ってダブルクォーテーション記号を消していませんか? – プログラムの中の空白部分(スペース)を誤って消した時、全角スペースを入れていませんか? ・ジャンパーピンのポジションを通常モードからプログラム書き込みモードに変更しましたか? ・DCジャックにACアダプタ等を接続していますか? →バックアップ乾電池での動作では書き込みできません。 ・DCジャックにACアダプタ等を差し込んでから5~25秒の間にプログラム書き込み操作をしていますか? 10分程度考えて原因にたどり着かなかった場合、ダウンロードしたプログラムコードを使って貼り付けるところからやり直した方が早いです。 その際、Arduinoの編集画面に書かれているプログラムコードはスペース記号1つ残らず完全に削除してから貼り付けます。 1行編集するごとに【マイコンボードに書き込む】を押しながら進めることで、エラーを特定しやすくする方法もあります。 |
正しくプログラムが書き込めたら、動作確認をします。
プログラム書き込み直後のH10は、基板上のジャンパピンがプログラム書き込みモードの位置になっているはずですので、ノーマルの位置に戻します。
H10からUSBコードを抜いて、DCジャックに接続されているACアダプタのコードを挿しなおします。
(1)H10のDCジャックにACアダプタを差し込みます。
(2)レンタルサーバーのURLのファイル名をhistory.txtに変えてアクセスします。
例えば、アップロード先URLが
https://www.stagia.co.jp/~ohmizo/xeta/recieve.cgi
ならば、末尾の部分だけ以下のように変更します。
https://www.stagia.co.jp/~ohmizo/xeta/history.txt
(3)ブラウザに以下のような表示が出れば成功です。
