[電子工作]ESP32の使い方

ーーーー目次ーーーー

1.ESP32とは?

2.Arduino IDEのESP32環境の使い方

3.ESP32でWiFiを使おう

4.ESP32でBluetoothを使おう

5.MicroPythonを使ってみよう

6.ESP32の活用

ーーーーーーーーーー

1.ESP32とは?

  中国のEspressif Systems Pte.(ESP)社が開発したマイコンで、240MHzのXtensa 32bit LX6プロセッサを

 2個搭載し、520KBのRAMを持ち、何と802.11b/g/n(Max.150Mbps)のWiFiとBluetooth v4.2に対応し、1000円

 未満で買えてしまうという、とんでもなくコストパフォーマンスの高いマイコンです。

 WiFiやBluetoothに対応し、PCやスマートフォン等から無線で制御できるため、まさにIoTのためのマイコンです。

 上記写真は、次の通り。

    左:新型のESP-WROOM-32D搭載。 ESP社のESP32-DevKitC-32D。 1,480円。

    右:旧型のESP-WROOM-32搭載。 HiLetgo社(製造はAi-Thinker社)のNodeMCU ESP-32S。 960円。

  注意.この2つは、ピンアサインは一緒ですが、外形サイズが異なり、ESP32-DevKitC-32Dの方が

      2.54mmだけ(ユニバーサル基板で1列分)幅が広いです。そのため私は、下の写真のように、

      1列と2列のピンヘッダ(メス)の組み合わせにして、両方装着できるようにしています。

 

  IoT Express Mk IIやESPDuino-32と呼ばれるArduino互換のコネクタを持つボードもありますが、ピン配置に

 互換性はありませんので購入時には、ご注意ください。一般には、上の写真のようなDIPタイプのボードに搭載

 されたものが、様々なメーカーから販売されています。それを自分で半田付けすれば、ピン配置を変更できます。

  私が作ったものはこれ。LCD、OLED、SDカードなどを使ったArduino用シールドが動作しました。

    

 

  Arduino IDEで開発可能で、多くの方がESP32の性能を出せるようにライブラリを作っているので、多くの

 プログラムが、無茶苦茶高速に動作します。

  最近、ESP-32Dと呼ばれる新型が出ていますが、安価な製品は旧型のESP-32が使われています。しかし、

 新型には、シングルコアのものや、クロックを160MHzに落としたものもあるので、どうしても新型が欲しい方は、

 国内の信用できる販売店から購入することをお勧めします。

  なお、私が設計したGS-0001:2.8型LCDタッチパネルボードもありますので、よろしければESP32の評価に

 購入をご検討下さい。(アナログジョイスティック、液晶パネル、SDカード、タッチパネル、圧電スピーカなど搭載)

 

2.Arduino IDEのESP32環境の使い方

 (1)Arduino IDEのインストール

   まず、Arduino IDEをインストールしてください。

   その後、ファイルー環境設定の追加のボードマネージャのURLに

     https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

   を追加し、ツールーボードのボードマネージャで「esp32」等で検索し、インストールします。

   (注意.私のサンプルを実行する場合、バージョン1.0.6を選んで下さい。)

   詳細は、Arduino IDEのESP32開発環境Installation instructions using Arduino IDE Boards Manager

   を参考にして下さい。

 

 (2)いきなり注意点

   最初に注意点を記載します。特に、Arduinoを使った経験のある方が引っ掛かり易いので、必ず読んで下さい。

   1.動作が不安定、WiFiがつながらない(シリアルモニタで「Brownout detector was triggered」のメッセージが出続ける)

     USBの電源供給が不足しています。太いUSBケーブルを使用し、PCのコネクタに直結か、電源を持つHUBに

     接続して下さい。

 

   2.ピンアサインが、他のArduino互換機と違う

     ピン番号は、基板に書かれているIOxxのxxになります。詳細はこちらを参照。

     ハードウェアSPIはディフォルトで次の端子に割り振られています。(SDカードの使い方はこちらを参照)

       SCK:IO18

       MOSI:IO23

       MISO:IO19

       SS:IO5(pull-up付き)

     I2Cはディフォルトで次の端子に割り振られています。

       SDA:IO21

       SCL:IO22

 

   3.ボードに書き込む時、IO0/Bootと書かれているボタンを押す

     →(スケッチ−マイコンボードに書き込む)を実行すると、

      ......______......___

     と表示されます。その時、一部ボードではIO0/Bootと書かれているボタンを押し続け、書き込みが

     開始されたら離して下さい。なお、ESP32-DevKitC-32Dではボタンを押さなくても書き込めました。

 

 (2)サンプルの実行

   ・LEDを点滅するサンプルを実行

     ボードとPCをUSBケーブルで接続します。(PCのコネクタに直接接続することを推奨)

     ツール−ボード で接続しているボードを選びます。そして、ツール−シリアルポート で

     ボードのCOMポート番号を選びます。

     ファイル−スケッチ例−01.Basic−Blink を選びます。

     →(スケッチ−マイコンボードに書き込む)を選ぶと、プログラムをコンパイルし、ボードに転送し

     (必要ならIO0/Bootボタンを押してから離す)、ボード上のLEDが点滅します。

     delay(時間(ms)); の時間を変更すると、点滅の時間が変化します。

     LED_BUILTINが定義されていないというエラーが出る場合は、LEDの繋がっている端子番号(IOxx)

     に変更して下さい。

 

   ・デバッグ方法

     サンプルコードに、「Serial.print」のコマンドが書かれています。ツール−シリアルモニタ を起動して

     マイコンボードに書き込んで実行するとメッセージが表示されます。これを使用することで、

     表示デバイスが無くても、プログラムの実行状況が確認できます。

     なお、Serial.begin(115200); のレートとシリアルモニタのレートは一致させて下さい。

 

   ・ネットからライブラリをダウンロード

     スケッチ−ライブラリをインクルード−ライブラリを管理 を選び、検索ウインドに使いたいデバイス名

     やシールドの名前を入れると、各ライブラリが見つかります。ESP32に最適化されたライブラリを

     探したい時はキーワードに「ESP32」を入れておくことをお勧めします。

     そこで、インストールを選べば、ライブラリがダウンロードされ、スケッチ例に追加されます。

     なお、ダウンロードされたライブラリは、次のフォルダーに格納されます。

       Windows:「Users\ユーザー名\Documents\Arduino\」又は「PC\ドキュメント\Arduino\」

       Linux:「~/Arduino/」

 

   ・手でライブラリを追加

     標準ライブラリにはなくても、ネットにArduino IDEのライブラリやサンプルが置かれている場合が

     あります。その場合、手で次のフォルダーにコピーすれば、Arduino IDEのスケッチブックに追加できます。

       Windows:「Users\ユーザー名\Documents\Arduino\」又は「PC\ドキュメント\Arduino\」

       Linux:「~/Arduino/」

     また、「Arduino\libraries」の下にコピーすれば、スケッチ例に追加できます。

 

 (3)アプリケーション例

   GS-0001:2.8型LCDタッチパネルボード

     ESP32に、2.8型240x320のLCDパネル、SDカードソケット、リチウムイオン電池及び充電/昇圧回路、

     圧電スピーカ、アナログジョイスティック、ボタンを接続したもので、ESP32を使って様々なソフトを

     動かせるプラットフォームを開発しました。下の写真は試作機で、量産版はこちら

    

   ・GPS

     U-blox社製NEO-6Mとアンテナのモジュールを1000円台で購入し、1.8型128x160のLCDパネル、

     microSDカードソケット、リチウムイオン電池及び充電/昇圧回路、ボタンを接続し、GPSロガー

     を作成しました。9600bpsのUARTで出力されるテキストを読み出し、LCDパネルに表示、SDカード

     に書き込みを行うだけなので、AVRマイコンでも十分です。今回は、ESP32を40MHz(!)動作させ、

     840mAhバッテリで約4時間動作しました。

     なお、NEO-6Mを使ったGSPモジュールは1000円台で売られていますが、古い製品なので

     バックアップ用のボタン型リチウム2次電池が過放電で劣化していてうまく充電できなかったり、

     ちょっとしたアンテナの向きで衛星を捕捉できなかったりするので、本格的に使いたい場合は、

     もっと新しいモジュール(2000円台で購入可能!)を選んだ方が良いかもしれません。

     なお、ちゃんとロックさえすれば、7,8個の衛星を捕捉し、1m以内の精度で座標がとれます。

     (標高は10mを超える誤差があります。)ランニングの走行距離や速度も良い精度で採れました。

   

 

3.ESP32でWiFiを使おう

 (1)WiFiでESP32にアクセスしよう

   スケッチ例−WiFi−SimpleWiFiServer を選びます。この中の、

    const char* ssid = "yourssid";

    const char* password = "yourpasswd";

   をご自分のネット環境の、SSID及びパスワードに変更します。例えば、

    const char* ssid = "aterm-xxx-g";

    const char* password = "12345678";

   のような感じです。2.4GHz(802.11b/g/n)のみの対応で、チップの消費電力が増えるのでUSB

   の電源に注意して下さい。(太いUSBケーブルで、PCのコネクタに直結することを推奨)

   また、このサンプルはIO5でLEDをON/OFFするように作られています。IO5にLEDを接続するか、

   サンプルの「5」を他の端子番号(NodeMCU-32Sの場合は「2」)に変更して下さい。(3カ所あり)

   →(スケッチ−マイコンボードに書き込む)が終了したら、シリアルモニタを開いて、ENボタンを押して

   再起動します。シリアルモニタに、

    Connecting to aterm-xxx-g

    ..

    WiFi connected.

    IP address:

    192.xxx.xxx.xxx

   と表示されれば接続OKです。

   次にPC/タブレット/スマホ等のブラウザから、「http://192.xxx.xxx.xxx」にアクセスすると、

    Click here to turn the LED on pin 5 on.

    Click here to turn the LED on pin 5 off.

   と表示されます。ここで、それぞれのhereを押すことで、LEDをON/OFFすることができます。

 

   このサンプルを参考にすれば、PC/タブレット/スマホからESP32を簡単に制御することができます。

   次の写真は、私が作成したWiFiオセロ。左がESP32側の画面で、右がPCのブラウザの画面。

   PCやスマホからESP32上でオセロができます。(ESP32の液晶パネルが無くても使えます)

   これはGS-0001:2.8型LCDタッチパネルボードでも動作し、ソースコードはこちら

   

 

 (2)SDカードを使ったWebサーバーを立ち上げよう

   私は、Raspberry Pi等のLinuxマシンがあると、家庭内Webサーバーを立ち上げるのですが、

   何とESP32でも簡単に実現できます。

   まず、SDカードコネクタをSPIモードで次の端子に接続します。(プルアップ抵抗無しでOKでした)

    CLK:IO18

    CMD/DI:IO23

    DAT0/DO:IO19

    DAT3/CS:IO5

   次に、index.htmをはじめ、HTMLファイルや各種画像ファイルなど、HPのデータをSDカードに

   コピーし、コネクタにセットします。

   次に スケッチ例−WebServer−SDWebServer を選びます。この中の、

    const char* ssid = "**********";

    const char* password = "**********";

   を上記と同様に、ご自分のネット環境の、SSID及びパスワードに変更します。

   →(スケッチ−マイコンボードに書き込む)が終了したら、シリアルモニタを開いて、ENボタンを押して

   再起動します。シリアルモニタに、

    Connecting to aterm-xxx-g

    ..

    WiFi connected.

    IP address:

    192.xxx.xxx.xxx

   と表示されれば接続OKです。

   次にPC/タブレット/スマホ等のブラウザから、「http://192.xxx.xxx.xxx」にアクセスすると、

   index.htmが起動し、HPを開くことができます。但し、画像データが複数あると、タイムアウト

   するためか、一部データが読み込めないようです。でもまあ、OS無しでSDカードのWebサーバー

   を立ち上げることができるとは、思いませんでした。

 

 (3)ネットから時間を取得しよう

   スケッチ例−ESP32−Time−SimpleTime を選びます。この中の、ssidとpasswordを上記と

   同様に書き換えます。更に、日本の標準時間に変換するため、

    const long gmtOffset_sec = 3600*9; // JST

    const int daylightOffset_sec = 0;

   に書き換えると、シリアルモニタに現在の時刻が表示されます。LCDパネルなどに表示すると、

   時計のできあがり。

   

 

 (4)WiFi Webカメラを作ろう

   ESP32にカメラを接続すると、なんと、WiFi対応のWebカメラも出来てしまいます。

   秋月電子通商で、OV2640使用200万画素カメラ(B0011)を1,180円で買いました。このカメラは

   解像度1600x1200で、RAWやJPEGで出力可能なもので、ESP32との接続例が多くあります。

   下の写真のようにブレッドボードで接続します。電源は、2.5V〜3.0Vとなっていますが、絶対最大定格は

   4.0Vなので、一先ず+3.3Vを接続しました。(保証は致しません。)使用する端子が多いので、RSTにはEN、

   PWDNにはGNDを接続しました。(これらを接続しなくても、コマンド制御可能です。)

   スケッチ例−ESP32−Camera−CameraWebServer を選びます。この中の、ssidとpasswordを上記と

   同様に書き換えます。そして、同時に読み込まれている、「camera_pin.h」のピンアサインを自分の

   接続した端子に合わせます。その後、必ず、 ファイル−名前を付けて保存 を行いましょう。(終了時に

   消えてしまいます。)

   →(スケッチ−マイコンボードに書き込む)を行うと、

     「スケッチが大きすぎます。」

   というエラーが出ることがあります。この場合は、 ツール−ボード で「ESP32 Wrover Module」を選択し、

     Partition scheme : "Huge APP (3MB No OTA)"

   に設定して下さい。これで書き込めるはずです。

   シリアルモニタに、

    WiFi connected

    Starting web server on port: '80'

    Starting stream server on port: '81'

    Camera Ready! Use 'http://192.xxx.xxx.xxx' to connect

   と表示されれば接続OKです。

   次にPC/タブレット/スマホ等のブラウザから、「http://192.xxx.xxx.xxx」にアクセスすると、写真の右の

   ような映像が現れ、「StartStream」ボタンを押すと、動画が開始されます。

   なお、電源、接続がシビアなようで、ノイズがのることが多いです。 その場合、

    config.xclk_freq_hz = 20000000; → config.xclk_freq_hz = 10000000;

   のようにXCLKの周波数を落とすと、少し安定しました。でも、長時間使用すると高温になり、カメラが

   停止することがあります。これは、下の実装版でも同じです。

   また、Resolutionですが、PSRAMを持っていないESP32-WROOMでは、SVGA(800x600)までしか撮影

   できません。ESP32-WROVERのようにPSRAMを持っているボードでは、XGA〜UXGAも欠けずに

   出力可能です。(PSRAMについては、こちらを参照)

   なお、カメラ(B0011)は、ゆするとカタカタ音が鳴るし、ピントは右端しか合っておらず、中央〜左は

   どの距離でもボケボケ。でも、針状のものでレンズ横のボンドを取り除き、指でまわせばピントが

   合いました。

   また、横筋のノイズが発生します。これは、電源や電波状態で、改善する場合があります。

   なお、これと同等の機能を持ち、PSRAMを搭載したESP32-CAMと呼ばれるものも売られています。

ブレッドモード版 実装版

 

4.ESP32でBluetoothを使おう

 (1)Bluetoothでシリアル(COMポート)として接続しよう

   スケッチ例−BluetoothSerial−SerialToSerialBT を選びます。

   →(スケッチ−マイコンボードに書き込む)が終了したら、PCやタブレット等からBluetooth機器を

   検索すると、「ESP32test」という機器が見つかりますので、接続します。そして、COMポートが

   2つ現れたら、接続成功です。やはり、USBケーブルの電源に注意!

   実際には、2つのCOMポートの内、一方だけが有効で、PC側でTeraterm等のターミナルソフトを

   起動(通信速度は設定不要と思われます)すると、ESP32のシリアルモニタとの間で文字がやり取り

   できます。1つのCOMポートで双方向通信可能です。

 

 (2)シリアル以外(HID等)で接続する方法はややこしいので、ネットで検索して、その記事を参考にして下さい。

   下記の写真は、ESP32とタッチパネル付き液晶を使ったBluetoothキーボードです。初期の接続が不安定

   である点とキーが小さすぎてスタイラスペンが無いと押しにくい点が課題ですが、キーボードとして使えます。

   写真の左は通常状態で、右はShiftを押した状態です。Ctrl+Alt+Delも入力できます。

   これはGS-0001:2.8型LCDタッチパネルボードでも動作し、ソースコードはこちら

  

 

5.MicroPythonを使ってみよう

  ファームウェアを書き換えることで、ESP32でMicroPythonを動かすことができます。

  ESP32は、ネットワークに接続できるので、MicroPythonを実行するプラットフォームとして優れています。

 

 (1)インストール方法

  公式サイトはこちらです。手順だけまとめると次の通り。COM番号は、各自の環境に合わせて下さい。

  なお、Pythonが実行できる環境が整ったPCやLinuxマシンで行う必要があると思います。

   1.esptoolをインストール

      >>pip install esptool

 

   2.COM番号を次の方法で調べる

    Windowsの場合(デバイスマネージャで調べてもOK)

      >>powercfg /devicequery all_devices

 

   3.ファームウェアのバックアップ

      >>esptool --chip esp32 --port COM3 read_flash 0 0x400000 esp32_firmware.bin

    参考.ファームウェアを元に戻したい場合は、次のコマンドで戻せます。

      >>esptool --chip esp32 --port COM3 write_flash 0 esp32_firmware.bin

 

   4.MicroPythonのファームウェアの書き込み

    こちらからファームウェアをダウンロード。長い名前のファイルは最新版ですが、安定動作を求めるなら

    バージョン名だけの短い名前のものをダウンロード下さい。

    次のコマンドでフラッシュメモリをイレーズします。

      >>esptool --port COM3 erase_flash

    その後、次のコマンドで書き込み。

      >>esptool --chip esp32 --port COM3 write_flash -z 0x1000 esp32_idf3-????????-v?.??.bin

 

   5.コマンドの実行、ファイル転送

    Windowsの場合:

      uPyCraftを、ここからダウンロード。実行して、「DLLが無い」のようなメッセージが出たら、

      MicrosoftのHPからVisualC++2010のラインタイムをダウンロードして、インストール下さい。

      ToolsーSerial でCOM番号を選択し、>>>にPythonのコマンドを打てば、実行できます。

      ファイルを作成し、転送して実行することも可能です。

      なお、「main.py」という名前でファイルを作成し、転送すれば、次回、ESP32を起動すると実行。

      詳しくは、ネットで検索下さい。

    Linuxの場合:

      私の環境ではuPyCraftが正しく動作しなかったため、screenやgtktermやampyを使用。

      インストールは次の通り。

        >>sudo apt install screen

        >>sudo apt install gtkterm

        >>sudo pip install adafruit-ampy

      主なコマンドは次の通り。「/dev/ttyUSB0」は各自の環境に合わせて変更下さい。

        >>screen /dev/ttyUSB0 115200  :REPLプロンプトに入る。

           何も表示されない時は、Ctrl+Cで実行停止。

           screenを終了する時は、Ctrl+Aの後にKを押し、Yを押す。

        >>gtkterm

          ConfigurationのPortで、Portに/dev/ttyUSB0、BaudRateに115200を設定

        >>ampy --port=/dev/ttyUSB0 ls  :ESP32内部のファイル一覧

        >>ampy --port=/dev/ttyUSB0 put ファイル名.py  :ESP32にファイルを転送

        >>ampy --port=/dev/ttyUSB0 run ファイル名.py  :ESP32でファイルを実行

 

 (2)MicroPythonでLCDパネル表示

   ネットを検索しても、正しくLCDパネルを制御できるライブラリが見つかりませんでしたので、

   自分で作ってみました。でも、所詮、Pythonはインタプリタなので、実行速度はメチャ遅です!

   ILI9163又はST7735を搭載したLCDパネルに対応します。端子番号は、機器に合わせて

   書き換えて下さい。また、パネル毎に青と赤が入れ替わったり、左右反転しますが、

   「ili.rotation(i)」の引数を(i+4)、(i+8)、(i+12)のどれかで正しく表示されるはずですので、お試しください。

   ILI9163_demo.py 7,749 2020/02/06

 

 (3)SDカードのアクセス

   こちらの方法で、アクセス可能。但し、1つのSPIを、SDカードとLCDパネルなど複数の機器で共有

   できません。私が作った基板は全部、共有しているので、残念。

     import machine, uos

     from machine import SPI, Pin

     sd = machine.SDCard(slot=2, sck=Pin(18), miso=Pin(19), mosi=Pin(23), cs=Pin(5))

      又は machine.SDCard(slot=3, sck=Pin(14), miso=Pin(12), mosi=Pin(13), cs=Pin(15))

     uos.mount(sd, '/sd')

     uos.listdir()

     uos.chdir('/sd')

     with open('test.txt', 'w') as file:

      file.write("Test")

     with open('test.txt', 'r') as file:

      print(file.read())

 

 (4)その他の注意点

   標準で動作周波数が160MHzになっています。240MHzにする場合は次の通り。

     import machine

     machine.freq()  #現状の周波数の読み出し

     machine.freq(240000000)

   その他、こちらを参照下さい。

 

6.ESP32の活用

  こちらのHPにESP32の注意点がまとめられていて、非常に助かります。その中でも注意すべき点や、

  私が動作確認して、動きが異なる点を記載しておきます。

 (1)ESP32のピンアサインについて

   一部端子は使用上の制約がありますので、次の表を参考に、ピンアサインを決めて下さい。

GPIO

専用端子

SD

SD_MMC

ADC

TOUCH

VDD3V

+3.3V

+3.3V

#EN

Reset (EN)

Reset

SVP

IO36 (Input only)

SENSOR_VP

(UltraLowNoiseAnalog)

ADC1-CH0

SVN

IO39 (Input only)

SENSOR_VN

(UltraLowNoiseAnalog)

ADC1-CH3

IO34

IO34 (Input only)

ADC1-CH6

IO35

IO35 (Input only)

ADC1-CH7

IO32

IO32

XTAL_32K_P

ADC1-CH4

TOUCH9

IO33

IO33

XTAL_32K_N

ADC1-CH5

TOUCH8

IO25

IO25

DAC_1

ADC2-CH8

IO26

IO26

DAC_2

ADC2-CH9

IO27

IO27

ADC2-CH7

TOUCH7

IO14

IO14

HSPICLK

CLK

ADC2-CH6

TOUCH6

IO12

IO12

HSPIQ

DAT2

ADC2-CH5

TOUCH5

GND

GND

GND

IO13

IO13

HSPID

DAT3

ADC2-CH4

TOUCH4

SD2

IO9 (for SPI Flash)

SPIHD

SD3

IO10 (for SPI Flash)

SPIWP

CMD

IO11 (for SPI Flash)

SPICS0

VDD5V

+5V

+5V

GND

GND

GND

IO23

IO23

VSPID

CMD/DI

IO22

IO22

VSPIWP

U0TX

IO1

UART_TXD

U0RX

IO3

UART_RXD

IO21

IO21

VSPIHD

GND

GND

GND

IO19

IO19

VSPIQ

DAT0/DO

IO18

IO18

VSPICLK

CLK

IO5

IO5

VSPICS0

DAT3/CS

IO17

IO17

IO16

IO16

IO4

IO4

HSPIHD

DAT1

ADC2-CH0

TOUCH0

IO0

IO0 (BOOT)

Boot

ADC2-CH1

TOUCH1

IO2

IO2

HSPIWP

DAT0

ADC2-CH2

TOUCH2

IO15

IO15

HSPICS0

CMD

ADC2-CH3

TOUCH3

SD1

IO8 (for SPI Flash)

SPID

SD0

IO7 (for SPI Flash)

SPIQ

CLK

IO6 (for SPI Flash)

SPICLK

 

 (2)SDとSD_MMCの違い

   ESP32は3つのSPIコントローラを搭載していますが、ユーザーが使えるのはVSPIとHSPIです。この内、

   VSPIは多くのLCDパネルや"SD.h"のライブラリで使用でき、HSPIは"SD_MMC.h"のライブラリで使用

   可能です。ここでは、SDカードをそれぞれのポートに接続して使用する方法について説明します。

  ・SD(VSPI接続):信号数少ない。LCDパネル等と端子を共有可能。

   ピンアサイン 

SD card

ESP32

DAT2

-

DAT3

5

CMD

23

VCC

+3.3V

CLK

18

GND

GND

DAT0

19

DAT1

-

   プログラム例

#include "FS.h"

#include "SD.h"

#include "SPI.h"

void setup(){

pinMode(MISO, PULLUP);

Serial.begin(115200);

if(!SD.begin()){

Serial.println("Card Mount Failed");

return;

}

・・・

   スケッチ例

    ファイル−スケッチ例−SD(esp32)−SD_Test

 

  ・SD_MMC(HSPI接続):信号数多い。原理上は高速。(実効速度は不明)

   ピンアサイン

     多くの記事に、DAT0〜DAT3にプルアップ抵抗が必要と書かれていますが、私のテストでは、

     全くダメで、逆にCLKにプルアップ抵抗を付けるだけで動くようになりました。 

SD card

ESP32

DAT2

12

DAT3

13

CMD

15

VCC

+3.3V

CLK

14 (約47KΩの抵抗で+3.3Vにプルアップ)

GND

GND

DAT0

2

DAT1

4

   プログラム例

#include "FS.h"

#include "SD_MMC.h"

void setup(){

pinMode(2, PULLUP);

pinMode(4, PULLUP);

pinMode(12, PULLUP);

pinMode(13, PULLUP);

Serial.begin(115200);

if(!SD_MMC.begin()){

Serial.println("Card Mount Failed");

return;

}

・・・

   スケッチ例

    ファイル−スケッチ例−SD_MMC−SDMMC_Test

 

 (3)PSRAM

   PSRAMは、一般には疑似SRAMの事で、ESP32の記事でよく出てくるPSRAMは、SPIインタフェースを

   持つ8pinのシリアルSRAMの事のようです。ESP32-WROVERや、ESP32の一部のボードに4MB(32Mbit)の

   PSRAMが実装されていますが、ESP32-WROOMベースの開発ボードには載っていませんのでご注意下さい。

   ESP32-CAMには4MBのPSRAMが搭載されています。

   PSRAMを使う時に使用するコマンドは次の通り。

  ・psramFound() : trueならPSRAMが実装されています。falseなら、実装されていません。

  ・ps_malloc(サイズ) : PSRAM上にメモリを確保

 

Arduinoの紹介はこちら。 

 

Arduino IDEで液晶パネル、タッチパネル、SDカードを使う方法は、こちら。

 

「STM32の性能を発揮するには?」はこちら

 

「ESP32-CAMの使い方」はこちら

 

「GS-0001:ESP32 2.8型LCDタッチパネルボード」はこちら