普段Arduinoを使った電子工作を楽しんでいます。
Arduinoは電子工作初心者の方でも扱いやすく作られた便利なマイコンボードだと思います。
私の場合ですが、Arduinoとの出会いが電子工作を始めるキッカケとなりました。
まさにArduino Loveって感じなんですが、そんな方多いのではないでしょうか?
Arduino以外にも電子工作で便利に使えるマイコンボードはいろいろとあります。
ESPシリーズのマイコンボードもその一つで、Arduinoの扱いに少し慣れてくると使ってみるのは面白いと思います。
定番マイコンの一つとも言えるESPシリーズのボードは多くの種類(バージョン等)がリリースされています。
Arduinoと比べると少しこのあたり分かりにくい感じがしますが、ESPシリーズのマイコンボードでは「ESP-WROOM-32」シリーズなどが非常にメジャーな評価/開発ボードになると思います。
技適が取得されたWi-FiやBluetoothモジュールが搭載されているのは魅力的です。
そしてArduinoには、このようなBluetoothやWi-Fiなど無線機能が標準では搭載されていません。
そのためArduinoで無線通信を使いデータのやり取りをしたい場合、それに対応するモジュールを接続する必要があります。
例えばBluetoothで通信したい場合、HC-05などBluetoothモジュールを接続すれば可能となります。
また、nRF24L01という無線モジュールを使って無線通信する事も出来ます。
そしてWi-Fiを使った無線通信をしたい場合も同様です。
今回ESP8266(ESP-01)という小型Wi-Fiモジュールを使ってみたいと思います。
ESP-01は約24.8mm×14.3mmと非常に小型なWi-Fi機能が搭載されたモジュールです。
Wi-Fi機能を持たないArduinoやRaspberry Pi Picoなどのマイコンに接続する事によりWi-Fi機能を持たせることが出来ます。
そしてこのESP-01が面白いのは、Arduinoなどと接続しWi-Fiモジュールとして使う以外にもESP-01単体にスケッチを書き込みArduinoとして動かすことも出来ます。
ESP-01にスケッチを書き込みこれ単体で動かすことが出来ればWi-Fi機能が搭載されているので、例えば温湿度センサーと接続してスタンドアロンで動かしWi-Fi経由でPCからモニターするなんてことも出来ます。
この投稿をInstagramで見る
ESP-01の主な使用用途はこの2つに別れます。
- ESP-01にスケッチを書き込み、これ単体で動かす
- Arduinoなど無線機能を持たないマイコンボードと接続しWi-Fiモジュールとして使う
今回は①のESP8266(ESP-01)に簡単なスケッチを書き込みこれ単体で動かすテストをしてみたいと思います。
ESP-01に初期状態で書き込まれているプログラム(ファームウェア)にスケッチを上書きする形で行うので、ATコマンドやArduinoと接続してWi-Fiモジュールとして使うことが出来なくなります。
もちろん初期状態のプログラムを書き直し戻すことにより②の用途でも使用出来ますが、それに関しては別記事でご紹介したいと思います。
この投稿をInstagramで見る
目次
ESP8266(ESP-01)の基本的な使い方
ESPシリーズのマイコンについて書き出すと本記事だけでは収まらなくなりますが、ESP8266(ESP-01)を使う前に少しだけESPシリーズのマイコンについて簡単に見ておきます。
ESPシリーズのマイコンには、ESP32シリーズ以外にESP8266シリーズなどがあります。
ESP8266は、CPUとWi-Fi機能が搭載されたESP8266EXというチップが搭載され、これにメモリやパターンアンテナ、シールドなどを取り付けモジュール化したものが「ESP-WROOM-02」にあたり、日本の技適を取得したWi-Fiモジュールになります。
さらにBluetooth機能を持たせWi-FiとBluetooth両方の機能を一つのモジュールに収めたものがESP-WROOM-32となります。
ESP32のマイコンボードはいくつか持っていますが、ESP32-DevKitC-32Dなど使われている方多いと思います。
技適が取得されたWi-FiとBluetoothモジュールが搭載されているので、日本国内でも合法的に電波を飛ばす事が出来るマイコンボードになります。
そして今回ご紹介するESP-01はESP8266が搭載された小型Wi-Fiモジュールになります。
ESP-WROOM-02の小型版という位置付けに近いかと思います。
非常に小型で安価(1個200円くらい)なWi-Fiモジュールですが使いやすく、ArduinoなどWi-Fi機能を持たないマイコンボードと接続しその機能を持たせることも出来ます。
技適が取得されていないのは残念ですが、冒頭でご紹介したBluetoothモジュールなどと同様にArduinoでは便利に使えるWi-Fiモジュールになるかと思います。
Arduinoにも慣れてきたので無線機能が充実したESP32シリーズのマイコンなども使ってみたいという方の取っ掛かりにもいいかもしれませんね。
ESP8266(ESP-01)とは?
ESP8266(ESP-01)は、約24.8mm×14.3mmと非常に小型なWi-Fiモジュールです。
開発元はAI-Thinker社となりEspressif System社のESP8266が搭載されたWi-Fiモジュールとなります。
Wi-Fi機能を標準で持たないArduinoなどのマイコンボードと接続してシリアルでのやり取りでその機能を持たせる用途で使えます。
またESP-01が面白いのは、Arduinoのスケッチを書き込むことによりこれ単体で動かすことも出来るところです。
開発環境もArduino IDEがそのまま使うことが出来るので手軽に試すことが出来ます。
今回はESP-01にスケッチの書き込みを行ったり実行したりする基本的な使い方をご紹介します。
ESP-01のピン配列
まずESP-01の接続端子を見ておきます。
ESP-01には8本の端子があり、その動作電圧(ロジックレベル)は3.3Vとなっています。
Arduinoの場合5Vですが、ESP-01では3.3Vなのでその点だけ注意が必要です。
ESP-01は非常に小型なWi-Fiモジュールとなりますが、GPIOピン(入出力端子)がGPIO0~GPIO3までの計4本が使えます。
Arduinoのスケッチを書き込むことにより、Arduino同様にこれらGPIO端子を使ったやり取りが行えます。
ESP-01はArduinoなどのボードとシリアルで接続しWi-Fiモジュールとして使われることが多いと思います。
その場合、GPIO3がRXピン、GPIO1がTXピンとして動作します。
またスケッチの書き込みの際もこの2本のシリアルピンが使われます。
RXピン/TXピンはスケッチ書き込み後、GPIO3/GPIO1としても使えるので、残りの汎用入出力ピンGPIO0とGPIO2を合わせて計4本のGPIOピンが使えることになります。
小型Arduinoみたいな感じで動かすことが出来るのは面白いですね!
端子 | 用途 |
VCC | 電源(3.3V/最大3.6V) |
GND | GND |
RX (GPIO3) | シリアルインターフェース(受信)、GPIO3として使用も可能 |
TX (GPIO1) | シリアルインターフェース(送信)、GPIO1として使用も可能 |
CH_PD | 基本的に3.3V(HIGH)で使用 |
RST | リセットピン(GNDレベルに落とすとリセットされます) |
GPIO0 | 汎用入出力ピン(起動時のモード切替にも使用) |
GPIO2 | 汎用入出力ピン |
そしてESP-01の起動時(電源投入時)のGPIO0ピンの状態により、[プログラム書き込みモード]と[プログラム実行モード]の2つの起動モードがあります。
GPIO0ピンをGND(LOW)に接続し起動するとスケッチの書き込みを行う[プログラム書き込みモード]で起動し、GPIO0ピンを3.3V(HIGHまたは未接続の状態)で起動するとESP-01に既に書き込まれたスケッチを動かす[プログラム実行モード]で動きます。
ESP-01の起動モードについて
ESP-01は8本の接続端子しかありませんが、スケッチを書き込むことによりArduinoとして動作させることが出来ます。
そして小型なモジュールなのでArduinoのようにUSB−シリアル変換器(USB-TTL変換モジュール)はもちろん搭載されていません。
そのため、スケッチの書き込みの際にはUSB−シリアル変換モジュールやArduinoと接続してスケッチの書き込みを行う必要があります。
また、ESP-01にファームウェアやスケッチを書き込むための専用プログラマーというものも数種類販売されています。
しかし私の手元にあるものは全く機能せず、調べてみると同様な事が多いようでハードウェアの修正等必要な場合が多いようなのであまりオススメは出来ないと思います。
そして先述のようにESP-01は起動時(電源投入時)のGPIO0ピンの状態により、[プログラム書き込みモード]と[プログラム実行モード]の2つの起動モードに分かれます。
ESP-01にスケッチを書き込む際は[プログラム書き込みモード]でESP-01を起動させる必要があり、また書き込まれたスケッチを実行するには[プログラム実行モード]で起動する必要があります。
具体的には後述しますが、それぞれのモードでの接続はこのようになります。
[プログラム書き込みモード]の接続
まずスケッチをESP-01に書き込むための[プログラム書き込みモード]での接続です。
ESP-01の動作電圧は3.3Vとなっています。
駆動電源としてVCC(3.3V)・GNDを接続します。
CH_PDは基本的にVCC(3.3V)に接続します。
ここまでは[プログラム書き込みモード]または[プログラム実行モード]で同じです。
異なるのは、起動時(電源投入時)のGPIO0ピンの状態で起動モードが変わってきます。
GPIO0をGNDに接続し電源を投入すると[プログラム書き込みモード]で起動し、あとはTXピン/RXピンを使ったシリアルでのやり取りでスケッチの書き込みを行えます。
プログラム書き込みモードの接続 | |
VCC | 3.3V |
GND | GND |
TX | USB-シリアル変換モジュールのRX |
RX | USB-シリアル変換モジュールのTX |
CH_PD | 3.3V |
GPIO0 | GND |
[プログラム実行モード]の接続
また、GPIO0をHIGH(または未接続でも問題ありません)に接続し電源を投入すると通常の[プログラム実行モード]で起動しESP-01に既に書き込まれているスケッチを動かすことが出来ます。
このモードを切り替える必要があるのが少し面倒ではあります。
プログラム実行モードの接続 | |
VCC | 3.3V |
GND | GND |
CH_PD | 3.3V |
GPIO0 | 3.3V(HIGH)または未接続 |
これがESP-01の2つの起動モードになります。
詳しい接続方法は後述します。
先にESP-01にスケッチを書き込むためのArduino IDEの設定を行っていきます。
Arduino IDEを用いたESP8266(ESP-01)の環境設定
ESP8266(ESP-01)モジュールの基本的な概要が伝わったところで、実際にESP-01にスケッチを書き込んで簡単なテスト動作をさせてみたいと思います。
ESP-01のスケッチの書き込みには、Arduinoの開発環境となるArduino IDEがそのまま使えます。
Arduino IDEのインストールがまだという方はこちらの記事も参考にして下さい。
また今回は割愛しますが(別記事で紹介する予定です)、ESP-01はATコマンドを使いモジュールの設定等を行うことも出来ます。
ESP-01には、このATコマンドでのやり取りを行うためのファームウェアが初期状態で書き込まれています。
今回テスト動作でESP-01に簡単なスケッチを書き込んでテスト動作させてみようと考えています。
これは初期状態で書き込まれているファームウェアに新たにスケッチを上書きする形となるため、ATコマンドでのやり取りが行えなくなってしまう点だけ注意して下さい!
初期状態で書き込まれているファームウェアをあらたに書き込むことにより戻すことは簡単ですが、今回は割愛し別記事で紹介したいと思います。
この投稿をInstagramで見る
Arduino IDEを使いESP-01にスケッチを書き込むには、ESP8266に対応したボード情報をインストールする必要があります。
まずArduino環境でESP-01にスケッチを書き込めるようにするためにArduino IDEの設定を行います。
やり方は簡単です!
ボードマネージャURLの追加
[メニュー]から[設定(Preferences)] へと進み[追加のボードマネージャのURL]を選択します。Mac版を使っていますがWindows版でも同様の手順となります。
新たな行に次のURLを追加します。
https://arduino.esp8266.com/stable/package_esp8266com_index.json
ボード情報のインストール
次に[ツール]→[ボード]→[ボードマネージャ]へと進みます。
検索ボックスにESP8266と入力すると、[esp8266 by ESP8266Community]が見つかると思います。
これをインストールして完了です!
インストールが完了すると、先程の[ボード]の項目に[ESP8266Boards]が追加され表示されます。
これを選択すると多くのESPボードが一覧で出てきます。
ESP-01にスケッチを書き込む場合、[Generic ESP8266 Module]を選択する事によりArduinoの時と同様にスケッチを書き込むことが出来ます。
【スケッチの書き込み①】USB−シリアル変換モジュールを使ってスケッチを書き込む!
それでは実際にESP-01にスケッチを書き込んでみたいと思います。
しかしESP-01にはArduinoボードのようにスケッチを書き込むための装置が搭載されていません。
スケッチの書き込み方法にはいくつかありますが、USB−シリアル変換モジュールを使うのが便利だと思います。
また、Arduinoボードを経由して書き込むことも可能です。
この2通りの書き込み方法をご紹介していきます。
シリアル通信(UART通信)に関してはこちらの記事も参考にして下さい!
まずUSB−シリアル変換モジュールを使った書き込み方法です。
今回こちらのFTDI USB-シリアル変換モジュールを使いました。
3.3V or 5Vの切り替えができマイコンを使ったやり取りで使うことがよくあるので持っている方多いと思います。
ESP-01とUSB−シリアル変換モジュールとの接続
ESP-01との接続はこのようになります。
ESP-01は3.3V動作となるモジュールです。
USB−シリアル変換モジュール側の電圧を3.3Vにしておくのをお忘れなく!
シリアルでのデータのやり取りなのでESP-01とUSB−シリアル変換モジュールとの接続は、TX-RX/RX-TXの通常の接続となります。
CH_PDは基本的に常にHIGH状態(3.3V)にしておきます。
HIGHにしておかないと、スケッチの書き込み及び実行ができません。
あと[プログラム書き込みモード]にする必要があるのでGPIO0ピンをGNDに接続しておきます。
ESP-01 | USB-シリアル変換モジュール |
VCC | VCC(3.3V) |
GND | GND |
TX | RX |
RX | TX |
CH_PD | VCC(3.3V) |
GPIO0 | GND |
以上の接続でUSB−シリアル変換モジュールをPCと接続し通電するとESP-01は[プログラム書き込みモード]で起動してスケッチの書き込みを行うことが出来ます。
また、このようなESP-01専用のブレークアウトボードというものも販売されています。
ブレッドボードに固定でき接続端子がプリントされているので分かりやすく便利です!
以上接続が出来ればPCと接続しスケッチを書き込みます。
Arduinoの[ボード]設定は[Generic ESP8266 Module]を選択します。
細かい設定項目は特にデフォルト設定で問題ありません。
あとは[シリアルポート]を選択すれば通常通りスケッチの書き込みが行なえます。
簡単なテストスケッチを書き込んでみます。
Lチカ(Blink)がよさそうですね。
[ファイル]→[スケッチ例]から[01.Basics]内にある[Blink]を選択します。
BlinkはマイコンのオンボードLEDを点灯させるためのテストスケッチです。
BlinkスケッチのLED_BUILTINの指定で点灯しない場合は下記のように直接GPIO1を指定すると点灯します。
あとは通常通り[アップロード]ボタンをクリックしてスケッチをESP-01に書き込みます。
書き込みには少し時間がかかります。
書き込んだスケッチの実行にはESP-01を[プログラム実行モード]で起動する必要があります。
その前にArduinoを介してESP-01にスケッチを書き込む方法も見ておきます。
【スケッチの書き込み②】Arduinoを使ってスケッチを書き込む!
ESP-01へのスケッチの書き込みには、Arduinoボードを使って行うことも出来ます。
必要ない方はこの項目は飛ばして下さい!
多くのArduinoボードにはUSB−シリアル変換器が搭載されています。
これを使えばESP-01への書き込み装置としても使えます。
こちらではArduino Unoを使いますが、他のArduinoボードでも同様となります。
まずArduino Unoに空スケッチを通常の手順で書き込んでおきます。
これはArduino内に既に書き込まれているスケッチがシリアルでのやり取りを行うものだと書き込みが上手くいかなくなるためです。
そして接続です。
Arduino Unoとの接続はこのようになります。
先程のUSB−シリアル変換モジュールとの接続と異なるのは、TXとRXの接続です。
TX-TX/RX-RXというように繋げています。
Arduinoを経由してスケッチの書き込みを行うというより、Arduinoに搭載されているUSB−シリアル変換器(UnoではATmega16U2が搭載されています)のみを使ったやり取りとなるのでこのように接続しています。
ESP-01 | Arduino Uno |
VCC | 3.3V |
GND | GND |
TX | TX(D1) |
RX | RX(D0) |
CH_PD | 3.3V |
GPIO0 | GND |
接続後、Arduinoに通電するとESP-01が[プログラム書き込みモード]で起動します。
あとは[ボード]設定は先ほどと同様に[Generic ESP8266 Module]を選択します。
[シリアルポート]は今回Arduino Unoを経由して書き込みを行うので[Arduino Uno]を選択します。
これでESP-01にスケッチの書き込みが行なえます。
【補足】
少し補足ですが、上記回路図ではシリアルの接続(TX/RX)はArduino Unoと直結させています。
Arduinoのロジックレベルは5VでESP-01は3.3Vなので、厳密にはESP-01のRXラインはレベルシフターなどを使い電圧の調整をした方がいいと思いますが・・・面倒なので直結で接続しましたが、特に動作に問題がありませんでした。
このあたりは自己判断でお願いします。
抵抗2本を使って分圧する簡単な方法が使えます。
抵抗値は特に重要ではありませんが、Arduinoの5VをESP-01に入力する3.3Vになるように抵抗値を計算して下さい。
書き込まれたスケッチの実行
ESP-01にスケッチの書き込みが完了しました。
それでは書き込まれたスケッチを単独で動作させてみます。
ESP-01に書き込まれたスケッチを動かすには、[プログラム実行モード]で起動する必要があります。
GPIO0ピンをHIGH(3.3V)または未接続して電源を投入すると[プログラム実行モード]で起動します。
VCC(3.3V)とGNDの接続にプラスしてCH_PDをVCCに接続するだけです。
スケッチの実行 | |
VCC | 3.3V |
CH_PD | 3.3V |
GND | GND |
ESP-01のオンボードLED(青色LED)が1秒間隔で点滅するのが確認できると思います。
こんな小さなモジュールですがArduinoと同じように動かすことが出来るのは驚きですね!
今回テストスケッチBlinkを使いオンボードLEDの点灯を行いましたが、汎用GPIOピンとして用意されているGPIO0とGPIO2の2本とTXピンはGPIO1、RXピンはGPIO3として使うことも出来るので合計4本のGPIO端子が使えることになります。
少しスケッチを変えて4本のLEDをLチカさせてみました。
この投稿をInstagramで見る
小さなモジュールですが4本のGPIOピンが使え、Arduinoのスケッチを書き込み単体で動作させることが出来ます。
このサイズのマイコンを単独で動作させることが出来るのは面白く、アイデア次第で便利に使えそうですね。(ESP-01に対応したモジュールも多数販売されています)
スケッチ書き込み時にエラーが発生する場合について
ESP-01にスケッチを書き込む際に何度かエラーが発生しました。
ESP-01には先述のように電源投入時の接続により[プログラム書き込みモード]と[プログラム実行モード]の2つの起動モードがあります。
VCC・GNDの接続以外にCH_PD端子は常にVCC(HIGH)に接続し、GPIO0ピンがGNDに接続されていると[プログラム書き込みモード]となり、GPIO0ピンをHIGH(またはフロート未接続)だと[プログラム実行モード]で起動するのはこれまで説明してきた通りです。
しかし接続に問題がない場合でもスケッチの書き込みエラーが発生することが何度かありました。
これは電流不足が原因?となる場合が多いようです。
ESP-01はWi-Fi無線モジュールとなり消費電力が結構高くなっています。
そのため接続している電源電圧(3.3V)に問題がなくても電流が不足する場合があり動作が不安定になることがあります。
これはUSB−シリアル変換モジュールを使った場合やArduino経由で書き込みをする場合の両方で発生しました。
ESP-01が起動している時にはボードの赤色LED(インジケーターランプ)が点灯しますが、これが薄暗く点灯している場合、おそらく電流不足になっています。
USB−シリアル変換モジュールを使っている場合、PCを再起動すれば改善する場合もあります。
またArduinoを経由した書き込みの場合の3.3V端子は最大電流が50mAほどと少し弱力なため、このように動作が不安定になる場合は外部電源を用意し電源供給を行えば安定動作させることが出来ます。
私は動作が不安定になる場合には直流安定化電源を使っていましたが、このようなブレッドボード用電源があると5V以外に3.3Vの電圧を作り出すことが出来るので便利だと思います。
また、小型な3.3Vレギュレータモジュールを使えばArduinoの5V端子から安定した3.3Vの電源を作り出すことも出来るので便利です。
【追記】スケッチ書き込みボードを作ってみました!
ESP-01にスケッチを書き込むための専用プログラムボードというものは販売されていますが、ボードのバージョン?(ロット?)によっては配線の変更やスイッチの取り付けなど手を加える必要があるようです。
この改造は多くの方がやられているようですが、面倒なのでESP-01にスケッチを書き込む(または書き込まれたスケッチを実行する)ためのボードを製作しました。
リセット端子およびGPIO0端子にタクトスイッチとプルアップ抵抗を付けただけの簡単な回路構成のボードですが、同様なものをユニバーサル基板などを使い1枚作っておくとESP-01を便利に使うことが出来ると思います。
この投稿をInstagramで見る
まとめ
今回①のESP8266(ESP-01)を単体で動かす場合のスケッチ書き込みや実行方法をご紹介しました。
- ESP-01にスケッチを書き込み、これ単体で動かす
- Arduinoなど無線機能を持たないマイコンボードと接続しWi-Fiモジュールとして使う
ESP-01単体でArduinoとして動かすことが出来るのは面白く、アイデア次第で面白く使えそうですね。
実用的な作例などご紹介できればよかったのですが、長くなりましたので別機会にしたいと思います。(Wi-Fi機能を使えばこんな感じで使えます!)
この投稿をInstagramで見る
また今回ご紹介できませんでしたが、②の無線機能を持たないArduinoのWi-Fiモジュールとして使うことも出来ます。
この投稿をInstagramで見る
技適の話で言うとESP-WROOM-32などのマイコンボードでは技適が取得されたWi-Fi/Bluetoothの無線機能が使えるわけですが・・・Arduinoの場合、技適が取得された無線モジュールがあまりないのが残念なところです。
技適が取得されていませんが、ESP-01は非常に小型&安価で入手出来るWi-FiモジュールなのでArduinoの学習用としては便利に使えますね。
最後に!
ESP-01の基本的な使い方でした。
ArduinoのWi-Fi化に使えるということで、これまで気付いた事をまとめてみました。
ESP-01自体は特に新しいモジュールではなく、ESP-01シリーズはESP-14まで多くのモデルが出ているようです。
最近ではESP-WROOM-32のような技適が取得がされWi-FiやBluetoothが使えるマイコンボードがあります。
しかしESP-01は非常に安価で小型なモジュールなので無線機能を持たないArduinoに接続して使うことができ、技適が取得されていない点を除けば便利に使えるモジュールだと思います。
また、ESP-01単体でArduinoのスケッチを動かすことが出来るのも面白く魅力的ですね!
小型なモジュールですがWi-Fi機能が搭載されGPIOピンも使えるので、センサーなどを取り付け完全にスタンドアロンで動作させPCやスマホからWi-Fi経由でモニターするなんていう使い方も出来ます。
そのためのオプションモジュールも多数販売されています。
少し長くなったので、ATコマンドでの設定やWi-Fi機能に関してはまた別記事でご紹介できればと思います。
Arduinoに接続してWi-Fi機能を持たせれば、PCやスマホから操作する事も出来るので面白いですね!
この投稿をInstagramで見る
WeMos D1 R32を使えば、Arduino IDEで書いたプログラムをusb接続することなく、BluetoothやWi-Fiを用いて書き込むことができるという認識でお間違い無いでしょうか。ドローンにmpu6050というセンサを搭載し、角速度などを測定したいです。Arduinoとうsb接続されているとPCとArduinoコードの長さ問題で測定が難しいです。また、他の方法があったらご教授いただきたいです。よろしくお願いします。