ESP-01(ESP-01S)の基本的な起動方法、使い方について

Arduino/ESP32CP2102,ESP-01,ESP-01S,ESP8266,シリアルコンバータ,プルアップ,書き込み

また今回も在庫処分といいますか、今更感の強いESP8266について。

ESP8266モジュールの中でもひときわ小さいESP-01およびESP-01S。

手元にESP-01S(モドキ?)がありますのでこれをちょっと使ってみます。

esp-01s_basic01

何故モドキかっていうと、ESP-01Sの文字がシルク印刷されていないから。

恐らく模造品なんじゃないかな・・・

esp-01s_basic02

裏面はこんな感じ。

一応ピン配置のシルク印刷がありますね。

ESP-01とESP-01Sの使い方、違い

ESP8266が搭載されているESP-01のCH_PDピンは所謂ENピンってやつで、常にHIGHにしておく必要があります。

しかし無印のESP-01はCH_PDピンがプルアップされていないので、電源を繋いだだけでは起動すらしない。

その点、ESP-01Sはあらかじめ主要なピンに対してプルアップ抵抗が付いています。

あとはEEPROMが1MBなのかな?

下記サイトに詳しい解説がありました。

■ESP-01 and ESP-01S How program and use the Pins and Leds

この記事によると、無印ESP-01でプルアップされているのはRSTピンのみで、フラッシュロムからの通常起動に必要なGPIO0とGPIO2、CH_PDピンは自分でプルアップしないといけないみたい。

これに対しESP-01Sモジュールの方は、GPIO0、CH_PD、RSTが12kでプルアップされており、ボードLEDに繋がっているGPIO2はボードのLED分を考慮してか2k2 ohmでプルアップ済らしい。

周辺回路を作るのも面倒なので、これから購入する方は素直に値段もほぼ一緒なESP-01Sを購入される事をお勧めします。

ただ、プルアップ抵抗を好きに設置したい場合など、あまり無いかもしれないけど工夫して使いたい人にとってはESP-01の方が優れているのかな。

ESP-01の起動方法、書き込み方法

この様なUSBシリアルコンバータを使ってESP-01に書き込みます。

esp-01s_basic03

裏面はこんな感じ。

esp-01s_basic04

CP2102モジュールの様ですが、うんよくわかりませぬ。

とりあえずTXとRXがついててPCから認識されてマイコンとシリアルで通信してフラッシュロムに書き込むやつ。

そんな感じのやつ。

このシリアルコンバータのTXとESP-01のRXを、シリアルコンバータのRXとESP-01のTXを接続して書き込む訳ですが、ESP8266では書き込みモードにするのにひと手間かかるます。

起動時に、GPIO0をLOW、GPIO2をHIGIにして起動しなければいけないとの事。

ESP-01Sでははじめからこの2本のGPIOはプルアップされているので、GPIO0をGNDに接続したまま起動するだけで書き込みモード起動になるんですが

それでもめんどくさいですね

無印ESP-01はGPIO0もGPIO2もプルアップされていないので更に面倒。

無印は、普通に起動させるだけのためにCH_PD、GPIO0、GPIO2の3本をプルアップするための外部抵抗が3本ないと起動すらしないという感じ。

ESP-01、見た目的には簡単に使える様な体裁ではありますが、あまり初心者向けでは無い気がします。

起動モードについて

ESP-01(ESP8266)は以下のピンの状態で、通常起動と書き込みモードをセレクトする様です。

通常起動(EEPROM起動)

GPIO0 起動時にHIGH
GPIO2 起動時にHIGH

書き込みモード起動

GPIO0 起動時にLOW
GPIO2 起動時にHIGH

起動後はGPIO0もGPIO2もLOWになろうが関係ない様ですが、起動するために外部抵抗によってプルアップしておく必要がある以上、使い道も制限されそう。

うん、まんどくさい。

接続はつまりこう。

USBシリアルアダプタのTXを、ESP-01SのRXに接続
USBシリアルアダプタのRXを、ESP-01SのTXに接続
ESP-01SのGPIO0をLOWに(GNDに)接続
※更にUSBシリアルアダプタの3v3とGNDを、ESP-01Sの3v3とGNDに接続

この状態でリセットなり起動なりすると、書き込みモードで起動して書き込めるってさ。

無印のESP-01だと、これに加えてGPIO2とCH_PDもプルアップしておく必要あり。

書き込んだらGPIO0をHIGHにしてリセットすれば通常起動し出すと思う。

ESP-01へのプログラムの書き込みで問題発生

で、実際にPlatformIOでハロワを書き込んで見たんですが、、

書き込みには成功するも、起動後エラーになって動作しない。

Reconnecting to COM5 Connected!
flash read err, ets_unpack_flash_code
ets_main.c

見た感じ、フラッシュロムの内容を読み込めなかったのかな。

さてどうするかと調べていたら

■HACKADAY:Trouble Flashing Your ESP8266? Meet DIO And QIO

これねぇ、、

どうやらボードによって搭載されているフラッシュロムが違っているらしく

手元にあるボードの様に、出所不明な模造品の場合は高確率でフラッシュロムが違っているみたいです。

なんでフラッシュロムへの書き込み、アクセスモードをQIOからDOUTにしてくらさい、との事。

PlatformIOだと、デフォルトでは書き込みモードがQIOになっているらしくQIOで書き込んだけどなんかバグって読めねぇよ!的な事になっているっぽ。

そんなわけで、platformio.ini で下記の様に設定

board_build.flash_mode = dout

これで問題なく書き込み、起動ともにOKでした。

この様なケースでは、書き込みモードをDOUTにしてみてくだしあ。

各書き込みモードの簡単な説明は、こちらの方の記事が簡潔で最速にわかる。

■DIO, DOUT, QIO, QOUTって、なんなん?

簡潔且つ明瞭

こんな記事をサラっと書ける様にしたいものですね。

で、フラッシュメモリへのアクセスに利用するバス幅の設定っぽい。

そりゃフラッシュメモリが標準のとは違うのが付いてたらダメになりそうだよね;

ちなみにArduinoIDEだとデフォルトはDIOモードなんだっけ?

まとめると

うん、シンプルな構成とピン数で、ESP-01はもっと簡単に使えるかと思っていたら結構大変でした。

実際に利用できるGPIOについてもちょっと癖があるので、これからの人はあまりお勧めできないかも

でも小さいし、恐らくペリフェラルになんも付いて無いので省電力運用するにはいいのかも。

それと、マイコンってマイコンチップとEEPROMと、あと外部クリスタルだけで動くんや、へぇ~的な学びがある。

色々と勉強になります。

なんか長くなったので今日はこの辺で。