IoT Express MKⅡ のプログラムの書き込み

Wi-Fi アルデューノ IoT Express MK Ⅱを購入してみました。
Arduino IDEでスケッチをコンパイルしてFlash メモリに書き込もうとしましたが エラー終了してしまいます。(図1.参照)

図1. 書き込みエラーが発生した画面

販売元のAitendo のホームページを見ると書き込みモードに変更するボタン操作が不要(?)と書かれています。
でも、もしかしたら必要かとも思い、書き込みボタンをクリックする前にRSTとMODEボタンを押して先にRSTを解除してからMODEボタンをはなすとIoT Express MK Ⅱボードは、Download 待ち状態になりました。(図2. Download待ち状態、シリアルポートをTera Termで観測)
この状態でも、まだエラーが発生します。(書き込みが出来ません!)

図2. Download 待ちの状態

ネットで検索してみると以下の様な同様の問題と思われる記事を見つけました。
http://http://www.paku-net.com/?p=18814
を参考にしてRSTとMODEボタンの操作を以下の様に行いました。

① Arduino IDEの書き込みボタンをクリックします
② Arduino IDE画面の下の部分に表示されるメッセージが
Connecting・・・・____・・・・____・・・・____
と表示されているタイミングで RSTとMODEボタンを押してRSTを先にはなして、その後でMODEボタンをはなします。
これで Download 状態になります
③ 後は、自動的にスケッチが書き込まれて完了するのを待ちます

この操作で、書き込みに成功しました。結局、書き込みモードに変更するボタン操作が必要で、且つ、そのタイミングが重要になっていました。

注:以前、トラ技2017年11月号の付録についていた基板で組み立てたものは、最初に書き込みモードに変更しておいてから、Arduino IDEの書き込みボタンをクリックしても、問題なく書き込めました。
どうも、Flash書き込み用のファームウェアのバージョンアップで仕様が変わったように思われます。

DL_IoTE

図3.  トラ技2017年11月号付録の基板で組み立てたボードの Download待ち状態

図2. と比べると boot:0x2 の値が異なります。Wi-Fi アルデューノIoT Express MK Ⅱ は、この値が boot:0x3 になっています。(図2. と図3.を比べてみると分かります。)
書き込み時の動作の違いは、この boot 用のファームウェアの相違によるもだと思われます。従いまして、外観には関係はありませんが今回確認に使用した2つのボードの写真を図4.に示します(左側がトラ技2017年11月号付録基板で組み立てたボード、右側がWi-Fiアルデューノ IoT Express MK Ⅱ のボードです)。

Wi-Fiアルデューノの外観

図4. Wi-Fi アルデューノ IoT Expressと同 MK Ⅱ の外観

Arduinoプログラムでサクッと Wi-Fi Lチカしてみる(しかし問題がありました)

Wi-Fi アルデューノ をWebサーバにしてパソコンやスマートフォンのWebブラウザからIoT ExpressのLEDをON/OFFできるようになります。

Web_server

そのサンプルスケッチは、トランジスタ技術社のWebサイトからアーカイブファイル(TR1711I.zip)としてダウンロード(http://toragi.cqpub.co.jp/tabid/831/Default.aspx)できます。このファイルを解凍すると TR1711I > 2-1 WiFIi LED ON_OFF > i_LEDblink.ino > i_LEDblink.ino.ino (Arduino スケッチファイル)として使用できます。このファイルをArduino IDEで開いてWi-Fiのアクセスポイントの ssid と password を動作環境に合せて書き換えてコンパイルしてボードに書き込みます。そして動作させるとWeb ブラウザに表示されるON/OFFボタンを押してもうまく点灯/消灯動作ができませんでした。
(どちらのボタンを押してもチラッとLEDが一瞬光って消えてしまう現象でした。)

いろいろ調べた結果ですが、サンプルスケッチ内の loop() 関数内に書かれている条件判定文に、不具合らしきものを見つけました。
その場所を以下に示します。

// Check to see if the client request was “GET /H” or “GET /L”:
if (line.indexOf(“GET /?on”)==0) {
digitalWrite(2, HIGH);               // GET /H turns the LED on
}
if (line.indexOf(“GET /?off”)==0) {
digitalWrite(2, LOW);                // GET /L turns the LED off
}

上のスケッチ文の赤文字の部分が欠落しているためではないかと思われます。
スケッチを修正した後の動作では、ONボタンでLEDが点灯、OFFボタンでLEDが消灯してくれるようになりました。