ESP8266-01の接続(その3)

Arduino Pro Mini 3.3V, 8MHz から、EASP8266-01を経由してWiFiに接続するにあたって、いくつかの条件を満たしたいと考えていました。

  1. Arduino Pro Miniと、ESP8266との間は、デフォルトのまま、115200 baudのシリアル通信速度で通信したい。
  2. この本来のシリアル通信の他に、FTDI経由で Arduino Pro Miniに色々なコマンドを打ち込んだりして、ESP8266との通信(WiFi通信)をインタラクティブに実験したい。そのため、2つめのシリアル通信ポートをSoftwareSerialのライブラリを使って実現したい。
  3. Arduino Pro Miniの本来のシリアル通信は、ATmega328Pのデバイスに搭載されているハードを使っているので、115200 baud以上の通信でも問題ないが、SoftwareSerialのライブラリのシリアル通信では、このスピードが出ないという記事が沢山投稿されている。せいぜい9600baud程度が実用的な速度という記事もあり(8MHz のArduinoに於いて)、とても 115200 baudを期待することはできそうにも無い。
  4. FTDI経由のWiFi実験用、インタラクティブな操作(シリアル入出力)は、9600baud程度でも問題ないと思われる。
  5. Arduinoにプログラムを書き込むときには、FTDIから高速で書き込みたい。

このような条件を、Arduinoへのプログラム時と、プログラム後の実行時で、FTDIの接続を変更することにより実現することにしました。

【Arduinoへのプログラム時】

接続は、下図の通り、FTDIのTXをProMiniのRXI, FTDIのRXをProMiniのTXOに接続し、USBからの電源は、FTDIへの電源供給のみとして、Pro Miniは、ESP8266との接続を考慮して、別電源の3.3Vから取っています。(もちろん、GNDはFTDIとPro Miniの間で接続しておく必要があります)

Pro Miniの基板端には、FTDIのピン配列に合わせたピンが出ていますが、下の写真のように、プロとボードの接続を使いたかったため、このFTDI用のピンは使わず、側面にあるTXO端子(D0), RXI端子(D1)のピンにジャンパーで接続しています。

なお、FTDIからのDTR信号をProMiniのDTRピン(GRNピン)に接続した場合、Pro Miniの基板内で、下記のように 0.1uFを経由してリセット端子に接続される事により、ATmegaへの書き込み時に自動的にリセットが掛かるようになっています。うまく考えられているなぁ、と感心します。

ただ、ArduinoのIDEからスケッチが書き込まれる直前(コンパイルが終わった直後)に、タイミング良く、Pro Miniに搭載されているリセットスイッチを、チョンと押してやると、書き込みは正常にできますので、このDTRの接続は必須ではないです。(チョン・・のタイミングは、ちょっと気を使いますが・・・)

imageDSC09727

これで、FTDI経由でPro Miniのプログラミングが出来ることを確認できました。

次は、SoftwareSerialライブラリを使った、二つ目のシリアルポートを構築したスケッチを用意して、プログラムが終わった時点で、FTDIの接続を変更して、二つ目のシリアルポートを、「シリアルモニタ」に繋いでみようと思います。

この切替えを、少しでも楽にするために、最小限の接続 (TXとRXだけ)で、FTDIをつなぎたかった訳です。 (残念ながら、手元にFTDI が一つしか無いため・・・。もう一つ、買う必要あり・・・)

【二つ目のシリアルポートを構成する】

ESP8266-01とArduino Pro Mini 3.3Vを接続してみた (その1)

WiFiのモジュール ESP8266-01と、Arduino Pro Mini 3.3V, 8MHzを接続して、ネットワーク経由で色々な遊びを始めてみることにしました。

【ESP8266-01モジュール】  (参考にさせて頂いたページ

ESP8266モジュールの中では最も小さくて端子数の少ないESP-01タイプで実験をしてみます。モジュール仕様はこのページを参考にしました。 これによると、なかなか強力なスペックです。

  • このモジュール単体でホストコントローラーとして動作可能
  • 2本のGPIOピンを直接センサー等に接続することも可能
  • I/Oは 3.6V耐圧なので、5V回路とは直接接続不可能。
  • 電源電圧は 3.3V
  • 初期ボーレートは 115200 baudに設定されている
  • TCP/IPプロトコル・スタックを内蔵
  • 802.11b/g/n対応
  • 通常動作時の消費電流は 70mA程度
  • ピーク時の消費電流は 300mA程度
  • パワーダウン時の消費電流は、 10uA以下
  • 802.11b時のRF出力は +19.5dBm
  • WPA, WPA2対応

このモジュールに搭載されているICは、ESP8266EX(WiFiコントローラー)と、Berg MicroのSerial EEPROM:25Q80ASSIG)の2つ。

Wed Sep 21 21-25-02

このICがモジュールの肝となるデバイスですね。(仕様書はこちら

Wed Sep 21 21-22-57

このBerg MicroのICは型名から見ると、

  • 3.0V Serial Flash with 4KB uniform-sector, dual and quad I/O
  • 8Mbit (1024kx8)

という事がわかります。(メーカーは違いますが仕様書はこちら)。 このEEPROMに8266用のFirmwareが保存されているという事ですね。

ESP8266の消費電流がピークで 300mAも必要というなので、Arduino Pro Miniに搭載されている3.3V レギュレーター(Pro Miniの回路図上に最大150mAという記載があります) や、FTDIに搭載されているレギュレーターでは足りません。

まずは、実験なので手元にある、プロトボード用の電源モジュールを使って電源を供給することにします。

DSC09701

 

【まずは、シリアル通信の確認から】

まずは、Arduino Pro Miniは接続せず、FTDI (3.3V)を使って、ESP8266とのシリアル通信を確立させ、ATコマンドが動作するかどうかの確認からはじめます。本当は、RESETも、CH-PDも独立でPULL-UPしておく方が良いと思いますが、プロトボードの接続を楽にするために、サボりました。

Picture of ESP8266-01 Pins

ESP8226_01_BootOptions.jpg

ESP-01のモジュールのGPIOピン二本の設定を変えることにより、通常ブートモード(内部のEEPROMからの起動)と、EEPROMへの書き込みモードの切り替えができます。まずは、普通に立ち上げる確認なので、GPIO-0は、Hにしておきます。(ネットの情報だと、GPIO-2はオープンのままにしてある例もありますが、とりあえず、GPIO-0と直接繋いでおきます)

CH-PDのピンは、8266をパワーダウンモードに切り替えるための信号なので、通常動作モードのときには、Hにしておかないといけません。

RESETピンの扱いがちょっと自信ないです。ESP8266-01モジュールの回路図をネット上で探しましたが、現時点、それらしき物は見つかっておらず、この基板内で ESP8266デバイスのリセットピンが、どのように処理されているのか分からないためです。単純に端子に出てきているだけかもしれません。

【接続図】

image

FTDIとの接続は、シリアル通信の向きを間違えなければ大丈夫でしょう。もちろん、FTDIの電圧セレクターは、3.3Vにしておきます(間違えると ESP8266が死ぬのでは・・と思われます・・)

DSC09703

 

【TeraTermで接続】

まずは、定番のターミナルソフト、TeraTermで接続してみます。TeraTermを起動し、以下の設定をします。

  • FTDIの接続されているUSBに割り当てられたシリアルポート番号を指定
  • 115200baud, 8bit, non-parity, 1-stop bit, flow制御=none
  • 送信の改行コードは”CR+LF”
  • 文字コードは UTF-8 (不要かも)

電源アダプターからの電源を供給し、USBも接続してみると、文字化けした画面の後に、”Ready”という表示が出るときがあったり、こんな画面が出て止まってしまう時があったり・・・(追記:後で調べてみたら、この表示は 76.8kbpsで出力されているものらしい・・・でも何故、表示されるんだろう・・?)

image

やっぱり、ESP8266へのリセットが正しくかかっていないと思われ、とりあえず強制的に、ESP8266モジュールのRESETピンをGNDに落として見ると、ぐちゃぐちゃに文字化けした表示の後に、必ず、”Ready”が表示されるようになりました。

image

ここで、”AT”と叩いてみると、めでたしめでたし、”OK”表示が出ました。

image

試しに、GPIO-2の接続を外してオープンにしても、同様に動作したので、当面GPIO-2はオープンのままにしておくことにします。

それにしても、なぜ、リセット後の文字が激しく化けるのか?スッキリしなかったので、色々試してみましたが、全然だめ。ネットで色々探してみたら、「リセット後の通信は76.8kbpsで行われる」という記述がありました。手元に76.8kbpsのターミナルソフトが無いので、事実かどうか調べることは出来ませんが、まぁ、readyの所からは、115200baudで正常に通信できるので、今の時点ではこれでOKとしておきます。(なぜ76.8kbpsになっているのか、理由は全く分かりません)

【ArduinoのIDEからシリアルモニタで接続】

やはり、リセット直後の文字化けは起こりますが、CR/LFにした上で、”AT” + Enterを送信すれば、ちゃんと下記のように “OK”が返ってきました。めでたしめでたし。

image

とりあえず、これで、ESP8266-01とのシリアル通信が出来ることは確認できました。

試しに、ATコマンドを幾つか確認し、我が家のWIFIアクセスポイントにも接続してみましたが、問題なく一発で接続されました。このATコマンドの詳細は次回に・・・。

image

【次に続く】

Arduino Pro Mini と FTDIとの接続

eBayに注文していた Arduino Pro Mini 3.3V 8MHz のモジュールが届いたので、早速動作確認をしてみることにしました。

Arduino Pro Mini 3.3V 8MHz AtMega328P】 5個で$8.56でした。(from China)

DSC09687

同梱されていたピンヘッダーをはんだ付けした後の写真です。

FTDI232 5V/3.3V 切り替え付き】 1個で $4.98 (from US Seller)

DSC09686

こちらは、ピンヘッダーがはんだ付けされた状態で納品されました。  ProMiniが3.3V仕様なので、電圧選択用のジャンパーを、 3V側に変更する必要があります(写真では上側が 3.3V設定・・・シルク印刷が見にくい・・・)

【ピン配列と接続】

当然ながら説明書などは同梱されていないので、ネットで接続情報を調べてみましたが、なんとなくスッキリしないので、回路図から確認してみました。

image

ヘッダーに印刷されている信号名は、GRN, TXO, RXI, VCC, GND, BLKとなっていますが、回路図とは、一見して全然一致しているように思えません。ただ、ネットのいろんな情報を見ると、順番通りつなぐ・・・となってます・・・。

FTDI-BASIC の回路図はこれ。(FT232Rの仕様書

image

これを接続すると、こんな感じになりますが、結局わかりにくくなっているのは、Pro Miniの基板上の印刷のせい・・という気がします。なぜ、BLK (Black)とかGRN (Green)という名称になっているか・・・? FTDIケーブルの線の色という記載がありました。 (FTDIケーブルの回路図)。

1ピンと2ピンは、Pro Miniの基板上でショートされているので、FTDI側のCTS(Clear To Send)は強制的にGNDに接続される事になり、負論理のCTSなので、「常に送信可」状態という事になります。(ハンドシェークは無し)

  AtMega328 のピン名 Pro Mini基板上ネット信号名 Pro Mini回路図上(JP1)の端子名 印刷の信号名 信号向き FTDIのピン名 FT232RLのピン名
6 RESET DTR DTR GRN DTR DTR
5 TXD RX-I RXI TXO RX-I RXD
4 RXD TX-O TXD RXI TX-O TXD
3 VCC VCC VCC VCC VCC VCC
2 GND GND CTS GND CTS CTS
1 GND GND GND BLK GND GND

6ピンは、FTDI側から新しいArduinoのスケッチを書き込んだときに、ArduinoをAuto-Resetするために使われているようです。(ここに説明あり)

という事で、なんとかスッキリしたので、実際に接続して、LEDをBlinkするスケッチを書き込んでみました。

DSC09689

IDEのツールメニューから、以下の設定をします。

  • ボード:Arduino Pro or Pro Mini
  • プロセッサ: ATmega328 (3.3V, 8 MHz)

超基本のLED Blinkのスケッチをコンパイル、書き込みをしたら、正常(1秒毎の点滅)に動作しました。まずは、Pro Mini 3.3V, 8MHzと FTDI 3.3Vの接続は無事確認できました。

追記:別のパソコンで同じ実験をしてみたら、USBシリアルポートの認識をしてくれませんでした。FTDIチップのドライバーページから実行形式のセットアップファイルをダウンロードして、インストールしたら、正常に動作しました。

さて、次は、ESP8266の接続実験です。

【次回へ】