「Simple Commander」の制作【第2-1回】

2018.02.26

ラボ研究員 竹島

本連載は6回の予定でしたが、予定が狂いました。【試作】は2回に分けてお送りします。

まずは前回のおさらいから
前回は、作りたいものについて、こんな感じのモノ、といったことを考えました。
主なコンセプトは以下の2点でした。

・簡単で多少融通が利く入力デバイス
・部品点数をできるだけ少なくしたい

ボタン1つの入力と数字1桁の出力でMQTTサーバにメッセージを送るデバイスが作りたかったことをお伝えしました。

今回は、前回イメージしたモノを作るにあたり、どんな部品を使えばいいかを考え、本当に実現できるかを実験で確かめる、という【試作】について話をしたいと思います

【試作】

部品を選定し、仮で回路を組んでみて、 考えてたことが実現できるかどうかを試してみる工程。
使う予定の部品のデータシートを集めてきて読むのが結構大変。
ブレッドボード(*1)を使うので、半田付けはまだ必要ない。

必要な機能の構成要素として、次のものがあげられます。

・演算/制御機能
・通信機能
・ボタン入力
・LED出力

演算・制御機能と通信機能の部品選定

作るものは単純であれども、
演算・制御機能(要するにCPU)がないと動きません。CPUは機能や性能、信頼性(*2)によってコストに大きく影響する部品でもあるので、慎重に選ぶ必要があります。

要件を整理してみます、

・Simple Commanderには性能や信頼性に関する要求はないので、ソフトウェア開発の容易さのみを考慮して、Arduino(*3)で開発したい。
・入出力の制御用にデジタル入力1点とデジタル出力3点が最低限必要。
・通信機能としては、プロトコルがMQTTと決まっているので、有線EthernetかWiFiが必要。
 →どこにでも設置できるようにしたいのでWiFiが理想。
・普通のArduinoは意外と大きいので、できるだけ小さいものがいい。

これすべてを満たしたい!

そんなうまい話が・・・、ありました。

ESP-WROOM-02というモジュールで、ESP8266EXを搭載したWiFiモジュールです。
技適マーク(*4)がついているので日本国内での使用も安心。

特長

・IEEE 802.11b/g/n に対応(2.4GHz)。
・低消費電力の32bit MCUを搭載。
・最大12本のGPIO(実質6本)。
・TCP/IPのプロトコルスタックを搭載。
・(H)SPI、UART、I2C、I2S、IrDA、PWMなどさまざまなインターフェースを搭載。
・FCC、CE、工事設計認証取得済。

仕様

・電源電圧 3.0-3.6V。
・消費電流 平均 80mA。
・18mm×20mm×3mm。
・Wi-Fi mode station/softAP/SoftAP+station。
・セキュリティ WPA/WPA2。
・暗号化 WEP/TKIP/AES。

価格

・本体のみ 1個 ¥550(税込)。
・DIP化キット付き 1セット ¥650(税込)。
 (いずれも秋月電子の価格)

試作に着手

早速試してみましょう(*5)。
データシートのダウンロードはお約束です。これがないとあっという間に壊してしまいます。情報はとても大事。すごく大事。

まずはピン配置を確認。

組み込みシステム用のチップは、1本のピンに複数の機能が割り当ており、プログラムで切り替えられるようになっています。

例えばNo.11のピンは、シリアル通信用の信号受信機能とデジタル入出力機能のどちらかを選べます。

それぞれのピンの使い方は、もうちょっと後で考えることにして、とりあえず興味がある機能について調べます。

一番興味があるのは「どうやってWiFiで通信するのか?」なので、プログラムを書き込んで動かしてみたいと思います。

回路の作成

プログラムを書き込むための回路.png

上図の回路をブレッドボード上に組みました(*6)。

1番ピンは

電源 +3.3Vに接続します。CPUやWiFiチップの電源になります。

2番ピンは

EN(Chip enable pin)という信号で、このモジュールの機能の活性化状態を指定します。Active highと書いてあるので、+3.3Vに接続すると活性化し、0Vに接続すると不活性化します。活性化させるため、+3.3Vに接続します。

6番ピン(GPIO15)と8番ピン(GPIO0)は、

モジュールの動作モードを設定するピン(*7)です。

8番ピンを+3.3Vに接続するとプログラム実行モード、0Vに接続するとプログラム書き込みモードになります。

9番ピンは

電源0Vに接続します。このモジュールにはGNDピンが3本ありますが、モジュールの中で全部つながっているので、手抜きして1本だけつなげます。

11番ピンと12番ピンは、

プログラム書き込みモードではプログラム転送用、プログラム実行モードではデバッグメッセージ出力用として使うため、USB シリアルコンバータを介してUSBに接続します。

15番ピンは

ハードウェアリセット信号です。0Vに接続するとプログラムの実行が止まり、CPUが初期状態にリセットされます。今はプログラムを実行したいので+3.3Vに接続します。

IDEのインストール

回路を組んだら、パソコン側をセットアップします。
パソコンには、Arduinoの開発ツール(IDE)をインストールします。インストーラをダウンロードして起動します。
ESP-WROOM-02のプログラムを作るときは、ちょっとした追加手順がいりますが、紙面の都合でここでは紹介できません。「Arduino ESP-WROOM-02」で検索してください。

プログラミング

セットアップが終わったら、プログラムを組みます。Webサーバとして動くサンプルとしてIDEに添付された<helloworld_wifi.ino>(下図を参照)を使います。

2018021903e.png


setup()関数の中でアクセスポイントへの接続とhttpサーバの初期化を行っています。
httpサーバがリクエストを受け付けた場合のコールバック関数がIni_HTTP_Response()です。
Serial.println()でデバッグ文を出力しています。IDEのシリアルモニタ機能を使ってデバッグします。

プログラムの書き込み

プログラムの書き込みは、IDEの「マイコンボードに書き込む」を使います。

9番ピンを0Vに接続して電源をONにし、すかさず上記メニューを選択すると書き込みが開始します。
するはずなんですが・・・

①書き込めない

配線が間違っていました。実は、最初は手抜きしてENを接続していませんでした。

②書き込めない

配線が間違っていました。実は、最初は手抜きしてRSTを接続していませんでした。

③書き込めない

配線が間違っていました。TxDとRxDを逆に接続してました

やっと書き込めました。

が、ときどき失敗します・・・、

書き込みにもコツがあって、慣れるまでは何度かやり直しが必要になるかもしれません。

ここまでで、だいぶ試行錯誤しました。なんでダメなのかわからないので、検索しまくったんですが、なかなか自分と同じ状況になっている人がいなく苦労しました。

実行!

電源をいったんOFFにし、9番ピンを+3.3Vに接続しなおして電源ONにすると、アクセスポイントにつながって80ポートでLISTENし始めるはずですが・・・、

ここからまたしても試行錯誤が始まります。

④シリアルモニタに変な文字が出力される

いわゆる文字化けですね。シリアルモニタの通信速度やプログラムの通信速度を変更して化けない設定を探します。

⑤勝手にリセットされる

起動時の初期化メッセージと"Connecting to <ssid>"が表示されたあと、勝手にリセットされて初期化メッセージに戻る、を延々と繰り返していました。

調べましたが原因がわからないのであきらめて、また後日。

日を改めて調査したところ、このモジュールはWiFiを初期化する瞬間に電力を大量に消費することがわかりました。3.3Vを生成する回路の出力電流が足りなかったため、電圧がドロップしてリセットがかかっていたようです。

電源回路を変更して再チャレンジすると、"WiFi connected"と、DHCPで払いだされたIPアドレスが表示されました。

⑥何も表示されない

WiFiルータで端末間通信を許可していませんでした。許可して再度アクセスしてみます。

⑦ブラウザに"Hello World"が表示された!

WiFiの調査だけで16時間以上かかりました。

WiFiがつながったので、検証終了です。

GPIOについては、「できないわけがない」ということで検証をしませんでした。
このことが後になってトラブルを起こすのですが・・・、その話は改めて。

今回はここまでです。他の部品の検証は、次回に回します。乞うご期待。

あとがき

*1 ブレッドボードとは、電子回路試作用に半田付けをせずに部品を穴に差し込むだけで回路を組むことができる画期的なツールです。

*2 組み込みシステムの信頼性は、ノイズ耐性や温度範囲等の周辺の環境に対する項目を評価することが多いです。

*3 Arduinoとは、簡単に試作品が作れるように考えられたマイコンボードです。オープンソースで設計されているので、類似品が沢山あります。

*4 技術基準適合証明と技術基準適合認定のいずれかあるいは両者の認証がなされていることを表示するマーク。

*5 秋葉原を散策中に見つけて衝動買いしたモジュールが、たまたま手元にありました。

*6 USB シリアルコンバータ。シリアル信号(RS-232Cの信号)をUSBのCOMモードに変換する機器です。RS-232Cは12Vですが、ESP-WROOM-02は3.3Vで通信します。

*7 7番ピンも動作モード設定ピンの一つですが、未接続でも動くので手抜きしています。

  • LINE
  • Mail