ESP-8266でBトレ(第1回 ハードウェア編その1)

まずはESP-8266でPWMの動作を確認する

いきなりですが、ESP-8266を動かすための丁寧な解説はネット上にすでにたくさんありますので省略します。注意点としては、

  1. ちゃんと電流がとれる電源を用意すること(いろいろ試すつもりなら 5V1A 6V1AくらいのACアダプタと3.3Vレギュレータで電源を用意しておくと安心です)

  2. USB-シリアル変換は信頼できるチップがついたもので、かつロジックレベルが3.3Vのものを使うこと

  3. プルアップ、プルダウンの抵抗はまじめにつなぐこと

  4. パソコンのシリアルコンソールのボーレートは115200bpsにすること

  5. シリアルコンソールはエンターキーで送信するように設定すること

  6. ボーレートがあっていても、ESP-8266の起動時にシリアルコンソールへ謎の文字が出力されるが気にしないこと

くらいです(おじさんは1,2以外に全部はまりました(^^;)。

Hello world

ESP8266とBD6231Fは、たとえばこんなふうに直結すれば簡単に動作させることができます(試す場合はESP8266のプラス側とBD6231Fのプラス側を接触させないように注意してくださいね、私はうっかりやってしまいESP8266を一つ壊しました)

f:id:cacao1:20151129113335j:plain

アナログポートを節約する

でも、これだと1つのモータードライバに2つのGPIOを使用します。ESP8266のPWMが可能なGPIOは10本で、うち2本はシリアルポート、2本はIO拡張用のI2cに使いますので、残りは6本となり、セクション3つ分ということになります。これではちょっと寂しいので、モータドライバ1つを1つのGPIOと1つのデジタルポートで動かすようにしました、こんな感じ(このままではダメ、理由は少し下に)。

f:id:cacao1:20151129113550j:plain

これで一つのESP8266で6つのセクションをコントロールできます。デジタルポートは入手が容易なIOエクスパンダMCP23017を利用しました。ポイントマシンの切り替えや在線検知、信号の点灯などにも使う予定です。1個で16個の入出力が増設でき、最大8個までつなげます。

f:id:cacao1:20151129115844j:plain

ただ、この構成にすると、プログラムが暴走した場合などに、列車も暴走する(PWMがONになりっぱなしになる)恐れがありますので、IOエクスパンダの1ポートをプログラムから短いサイクルでOn/Offするようにし(HeartBeat信号)、この出力をワンショットマルチで引き延ばして、HEARTBEATが出続けている間はONになる信号(ALIVE信号)を作りました。これとPWM信号のANDをとったものをBD6231Fに入れることにより、万一プログラムが暴走したらHEATBEATが途切れてALIVEがOffになり、列車がとまります。

f:id:cacao1:20151129120042j:plain

ここまでで、回路は次のようなものになりました(クリックで拡大します...にしても、また手描きかよ)。

f:id:cacao1:20151129114854j:plain

プログラムはGitにでも上げようと思いますが、まだssidipアドレスが直書きなのと、デバッグ用のSerial.Println()だらけなのでしばらくお待ちくださいね。

おまけ(部品について)

使っている部品についてちょっとメモ書きします

  • USB-シリアル変換はツール工房さんのUSB-234X(リンク)にピンヘッダを取り付けて使っています。 f:id:cacao1:20151129113922j:plain

  • 3.3Vレギュレータは秋月電子(リンク)で買いました。コンデンサも付属している親切商品です。値段が同じなら大きいほうがオトク?ACアダプタからの降圧幅が大きい場合は放熱板もあったほうがよさげです。 f:id:cacao1:20151129114059j:plain

  • ACアダプタも秋月で買いました。Bトレなら走行電源と合わせても1Aで十分ですが、ESP-8266は200mAくらいは使うと見ておいたほうがよく、その他の回路やLEDの分も考慮するともう少し大きめでもいいかもしれません。 f:id:cacao1:20151129114338j:plain