月刊I/O 2022年5月号『Raspberry Piで作る電子工作』に記事を掲載して頂きました!

【Arduino】小型Wi-FiモジュールESP8266(ESP-01)をArduinoのソフトウェアシリアルで使う手順!ATコマンドによるボーレート(通信速度)の変更方法!

Arduinoには無線機能が搭載されていないため、その機能を持たせるためには対応するモジュールと接続する必要があります。

BluetoothやWi-Fi、その他通信方式での無線モジュールは多数ありますが、ESP8266(ESP-01)はArduinoで使える便利な小型Wi-Fiモジュールになります。
技適が取得されていないモジュールなのでその使用には注意が必要ですが、非常に小型なモジュールでArduinoとの接続や製作物への組み込みもしやすく、安価なモジュールなのでArduinoの学習用としても最適です!

Wi-FiモジュールESP-01はArduinoとはUARTシリアルでデータのやり取りを行います。
そのため接続は簡単です。

ArduinoとESP-01をハードウェアシリアルで接続した簡単な作例をいくつかブログでご紹介しました。

【Arduino】小型Wi-FiモジュールESP8266(ESP-01)の基本的な使い方!スケッチの書き込み&モジュール単体で動かす基本的な方法!
【Arduino】Wi-FiモジュールESP-01を使いArduinoをスマホ「RemoteXYアプリ」で操作してみる![ESP8266(ESP-01)/HC-05/HC-06など]
ESP8266(ESP-01)にスケッチを書き込みスマホアプリからWi-Fi経由で動かしてみる!

しかしArduinoのソフトウェアシリアルを使った接続の方が都合がいい場合もあります。

Arduinoのボードにもよりますが、例えば一般的によく使われるArduino Unoではハードウェアシリアルとして使える端子はデジタルピンD0(RX)/D1(TX)の1系統しかありません。

このハードウェアシリアル端子をESP-01との接続で使うと、スケッチの書き込みの際に毎回この端子の接続を外してからスケッチの書き込みを行わないとエラーが出てしまいます。
また、製作やテスト段階ではデバッグのためにシリアルモニタを使いたい場合などもあります。
そのような理由からESP-01とArduinoとの接続をソフトウェアシリアルを使って接続した方が都合がいい場合があります。

Arduinoには搭載されているマイコンチップと直結されているハードウェアシリアル端子がありますが、ライブラリを使いソフトウェア的に空いているデジタルピンをシリアル端子に割り当てることも出来ます。
このソフトウェアシリアルを使えば、ArduinoとWi-FiモジュールESP-01との接続にハードウェアシリアル端子を使わず空けておくことが出来ます。

ESP-01のデフォルトのボーレート(通信速度)は115200bpsとなっています。
そしてArduinoのソフトウェアシリアルは最大で115200bpsはサポートされているようですが、この通信速度ではハードウェアシリアルを使った接続の時よりデータのやり取りが安定して行えない場合があるので、ボーレートを下げて接続するのが望ましくなります。

ESP-01のボーレートの変更にはATコマンドを使って行います。
今回、ArduinoとWi-FiモジュールESP-01をソフトウェアシリアルで接続を行う場合の手順を見ていきたいと思います。

ESP-01のボーレートを変更しArduinoとソフトウェアシリアルで接続する手順!

ESP-01のファームウェアの確認

ESP8266(ESP-01)は初期状態ではATコマンドを受け付けるファームウェアが書き込まれていて、Arduinoなど無線機能を持たないマイコンボードと接続するWi-Fiモジュールとして使うことが出来ます。

またESP-01は非常に小型なWi-Fiモジュールですが、ESP8266EXチップやメモリ・クロック用のクリスタルなどが搭載されているのでArduinoのスケッチを書き込むことにより単体で動かすこともできます。

これは初期状態で書き込まれているファームウェアに上書きする形でスケッチを書き込みます。

ESP-01のボーレート(通信速度)の変更は『ATコマン』を打ち込んで行います
そして先述のようにESP-01に何かしらのスケッチを既に書き込んでいる場合、初期状態のファームウェア(ATコマンドが使えるもの)に上書きされ消されてしまうため、ファームウェアを戻す作業が必要となってきます。

もしESP-01に既にスケッチを書き込んでいる場合は、まず初期状態のファームウェアに戻す必要があります。
初期状態のファームウェアに戻す作業はこちらの記事を参考にして下さい。

【Arduino】小型Wi-FiモジュールESP8266(ESP-01)のファームウェアを更新する!初期状態に戻しATコマンドを使えるようにする!
MEMO
スケッチの書き込みを行っていない場合、この作業は必要ありません!

ESP-01のボーレート(通信速度)を変更する!

冒頭でお話したように、ESP-01のデフォルトのボーレート(通信速度)は115200bpsとなっています。

Arduinoのソフトウェアシリアルは最大115200bpsの速度はサポートされているようですが・・・この通信速度ではデータの取りこぼしやミスなど発生しやすくなるため、ソフトウェアシリアルでの接続を行う場合はボーレートを下げるのが望ましくなります。

Arduinoのソフトウェアシリアルに関して詳しくはこちらの記事も参考にして下さい。

Arduino入門編㉘ ソフトウェアシリアルを使ってみる!

そしてESP-01のボーレートの変更は、ATコマンド』を打ち込み変更することが出来ます。
それではやっていきます。

接続

今回Arduino IDEのシリアルモニタを使い、ATコマンドを打ち込みESP-01のボーレートを変更します。
接続にはUSB-シリアル変換モジュールを使います。

FTDI USB-シリアル変換モジュールは持っている方多いと思うので今回これを使います。

ESP-01のピン配列はこのようになっています。

そしてESP-01とUSB-シリアル変換モジュールとの接続はこのようになります。
シリアルでの接続なのでTX-RX/RX-TXという接続です。
またCH_PD端子は常にHIGH(3.3V)の状態に接続しておきます。(接続に関して詳しくはこちらの記事を参考にして下さい!)

ESP-01USB-シリアル変換モジュール
VCCVCC(3.3V)
GNDGND
CH_PDVCC(3.3V)
RXTX
TXRX

また、このようなESP-01専用のアダプターがあると接続に便利です!

ESP-01は3.3V動作のモジュールなので、USB-シリアル変換モジュールの出力を3.3Vに設定しておくのをお忘れなく!

MEMO
上記接続図ではリセットスイッチは入れていませんが、ESP-01の[RST]ピンとGND間にタクトスイッチを付けておくと上手くコマンドを受け付けない場合などでUSBケーブルの抜き差しをする手間がなくリセットをかけることが出来るので便利です!

ATコマンドを使いボーレートを変更する

ESP-01とUSB-シリアル変換モジュールとの接続ができたら、USBケーブルをPCと繋げ通電します。
Arduino IDEの[シリアルポート]を確認し、シリアルモニタを立ち上げます。
通信速度(ボーレート)を[115200bps]、[CRおよびLF]に設定します。

上部のボックスに[AT]と入力しリターンキーを押します。
ESP-01との接続に問題がなくATコマンドのやり取りが行える状態になっていれば[OK]とリターンが返ってきます。

ここからESP-01のボーレートを変更していきます。

ESP-01で使えるATコマンドはWi-Fi設定なども含めると結構多いのですが、今回ボーレートの変更のみに限定して行います。
一応ファームウェアのバージョンも確認しておきましょうか。

ボックスに[AT+GMR]と打ち込むとESP-01に書き込まれているファームウェアの確認が出来ます。

それではボーレートの変更です。
ソフトウェアシリアルでのボーレートは、9600bpsや19200bpsあたりだと思いますが・・・?
今回9600bpsに変更してみます。

[AT+CIOBAUD=9600]と打ち込みます。
[OK]とリターンがあればボーレートの変更は正常に完了しています。

一応確認しておきます。
ボーレートを9600bpsに変更したのでシリアルモニタの通信速度を9600bpsに変更し、同様に[AT]と打ち込み[OK]とリターンがあればボーレートが9600bpsに問題なく変更されているのが確認できます。

一連の流れはこのようになります。

いくつかのESP-01で試してみましたが、上記のコマンド[AT+CIOBAUD=◯◯]でボーレートの変更が出来ない場合がありました。
ファームウェアのバージョンの問題なのかハードウェア的な問題なのか分かりませんが、次のコマンドでもボーレートの変更が可能なので試して下さい!

[AT+UART_DEF=9600,8,1,0,0]

ATコマンドを受け付けない場合の対処法

上記接続に問題がない場合でも上手くATコマンドを受け付けてくれない場合があります。

既にESP-01に何かしらのスケッチを書き込んでいる場合は当然、先述のように初期状態で書き込まれていたファームウェアに戻す作業が必要となってきます。

しかしファームウェアに問題がない場合でも上手くATコマンドを受け付けてくれない場合、原因の多くは電流不足によるものだと思います。

ESP-01の消費電流は80mAほど必要なようですが、USB-シリアル変換モジュールからの供給だけでは不足する場合があるようです。
そのような場合は外部電源を用意する事により解決します。
安定化電源などをお持ちなら安定した3.3Vが作れるので簡単ですが、このようなブレッドボード用電源でも3.3Vの供給が出来るので便利です。

【電子工作】ブレッドボード用電源モジュールMB102を使った外部電源の作り方!5V/3.3Vの電圧を作れるので結構便利に使えます!

Arduinoとの接続

ESP-01のボーレートの変更が出来ました。
あとはArduinoとソフトウェアシリアルでの接続です。

Arduinoとの接続はこのようになります。
ソフトウェアシリアル端子をRX(D2)/TX(D3)に割り当てました。

スケッチはこのようになります。

あとはWi-Fiの設定等含めてスケッチを作成していけばと思います。(詳しくは割愛します)

Arduinoのソフトウェアシリアルに関してはこちらの記事も参考にして下さい。

Arduino入門編㉘ ソフトウェアシリアルを使ってみる!

最後に!

ESP-01は小型なWi-Fiモジュールで使いやすくArduinoとの相性も良く便利に使えます!

そしてテスト段階では何度もスケッチの修正やデバッグなどを行いますが、そのような場合でArduinoとはソフトウェアシリアルでの接続の方が都合がいい場合は多いと思うので参考になればと思います。

技適が取得されていないモジュールなのでその使用には注意が必要ですが、安価なモジュールなのでArduino学習用としても便利に使えます。

非常に小型なモジュールなので、既に製作した物への接続や組み込みもしやすくArduinoで便利に使えるWi-Fiモジュールです!

コメントを残す