ESP-8266でBトレ(第1回 ハードウェア編その1)
まずはESP-8266でPWMの動作を確認する
いきなりですが、ESP-8266を動かすための丁寧な解説はネット上にすでにたくさんありますので省略します。注意点としては、
ちゃんと電流がとれる電源を用意すること(いろいろ試すつもりなら
5V1A6V1AくらいのACアダプタと3.3Vレギュレータで電源を用意しておくと安心です)USB-シリアル変換は信頼できるチップがついたもので、かつロジックレベルが3.3Vのものを使うこと
プルアップ、プルダウンの抵抗はまじめにつなぐこと
パソコンのシリアルコンソールのボーレートは115200bpsにすること
シリアルコンソールはエンターキーで送信するように設定すること
ボーレートがあっていても、ESP-8266の起動時にシリアルコンソールへ謎の文字が出力されるが気にしないこと
くらいです(おじさんは1,2以外に全部はまりました(^^;)。
Hello world
ESP8266とBD6231Fは、たとえばこんなふうに直結すれば簡単に動作させることができます(試す場合はESP8266のプラス側とBD6231Fのプラス側を接触させないように注意してくださいね、私はうっかりやってしまいESP8266を一つ壊しました)
アナログポートを節約する
でも、これだと1つのモータードライバに2つのGPIOを使用します。ESP8266のPWMが可能なGPIOは10本で、うち2本はシリアルポート、2本はIO拡張用のI2cに使いますので、残りは6本となり、セクション3つ分ということになります。これではちょっと寂しいので、モータドライバ1つを1つのGPIOと1つのデジタルポートで動かすようにしました、こんな感じ(このままではダメ、理由は少し下に)。
これで一つのESP8266で6つのセクションをコントロールできます。デジタルポートは入手が容易なIOエクスパンダMCP23017を利用しました。ポイントマシンの切り替えや在線検知、信号の点灯などにも使う予定です。1個で16個の入出力が増設でき、最大8個までつなげます。
ただ、この構成にすると、プログラムが暴走した場合などに、列車も暴走する(PWMがONになりっぱなしになる)恐れがありますので、IOエクスパンダの1ポートをプログラムから短いサイクルでOn/Offするようにし(HeartBeat信号)、この出力をワンショットマルチで引き延ばして、HEARTBEATが出続けている間はONになる信号(ALIVE信号)を作りました。これとPWM信号のANDをとったものをBD6231Fに入れることにより、万一プログラムが暴走したらHEATBEATが途切れてALIVEがOffになり、列車がとまります。
ここまでで、回路は次のようなものになりました(クリックで拡大します...にしても、また手描きかよ)。
プログラムはGitにでも上げようと思いますが、まだssidやipアドレスが直書きなのと、デバッグ用のSerial.Println()だらけなのでしばらくお待ちくださいね。
おまけ(部品について)
使っている部品についてちょっとメモ書きします