Top/電子工作/ESP32

ESP32

  中国の Espressif Systems 社が作成したマイクロコントローラで、次の特徴を持つ。

開発用ボード

  ESP32用の開発ボードはいくつかある。今回は、Switchscience の ESPr Developer 32 を使用する。
   中国の安いボード(ESP-32S ESP-32 Development Board,以下 中国ボード)を買った。これを使ったときの違いも書く。

使用前の準備

  1. ピンヘッダの半田付け
    まずはこれから。これをしないと、プロトタイピングできない。

  2. Arduino IDE のダウンロードと初期設定
    • ポータブルな環境にするには、"Windows ZIP file for non admin install"を選択する。
      もちろん献金してよい。しかし、献金しなくても "Just Donwload" ボタンでファイルを取得できる。
      1.8.5 が最新版(2018-08-16 (木) 17:44:23時点)

    • Switchscience の解説ページを参照して、Arduino IDE で ESP32 ボードを使えるようにする。
      • ファイル > 環境設定
        設定タブの「追加のボードマネージャーのURL:」に
        https://dl.espressif.com/dl/package_esp32_index.json 
        を書き込み OK をクリックする。

        ※ 更新については、githubに掲載されている json データの URL(例えば
        https://github.com/espressif/arduino-esp32/releases/download/1.0.1-rc1/package_esp32_dev_index.json )
        を貼り付け古いパッケージを削除して、これをインストールする。

        ※ ファイルは次の場所に格納されるようである。
        C:\Users\[ユーザー名]\AppData\Local\Arduino15\packages\esp32\hardware

      • ツール > ボード:"Arduiono/Genuin Uno" にマウスのポインターを合わせ、
        現れたタブからボードマネージャを選んでクリック。窓に、ESP32 を入力すると、
        "esp32 by Expressif Systems"が現れる。これをクリックし、「インストール」をクリックする。
        ボードの定義がダウンロードされてインストールされる。

        中国ボードの場合には、CP2102 というチップを使ってパソコンと通信する。そのドライバは
        自動的にインストールされない。そのため、対応したドライバをあらかじめインストールする。
        Silicon labsのページから、適切なものをダウンロードし、 展開してインストーラを起動すれば
        導入できる。

      • ツール > ボード:"Arduiono/Genuin Uno" にマウスのポインターを合わせ、
        ESP32 Dev Module を選択する。

      • ツール > シリアルポート
        それらしい COM3 などを選択する。選択しないと通信できない。

  3. はまったところ
    1. コンパイルがエラーで止まる。
      Mc Afee のウィルス対策ソフトのリアルタイムスキャンが影響している。これを止めると、コンパイルできる。

    2. ツール > シリアルポートで選べない。
      USB Type B micro のコネクタが深く刺さっていないと、COMポートが認識できない。
      ちなみに、シリアル通信のデバイスドライバは、Windows が勝手にインストールしてくれる。

    3. コンパイルが遅い
      このページ(Arduino IDEのビルドを速くする|オブジェクトファイルの出力先を固定する)
      参照して変更すると、少し早くなったように思う。

    4. プログラムの書き込みに失敗する
      主に中国ボードの場合
      • シリアルモニタが開いていたら、これを閉じる。
      • 繰り返してみる。
      • 通信速度を 115200 に落としてみる。
      • グラウンドになっているところを指で触ってみる。
        私の環境では再現性なくときどき失敗していた。USBコネクタの金属部分に触れると調子が良くなる。

    5. 永遠にメッセージを吐き続ける
      rst:0x3 (SW_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
      configsip: 0, SPIWP:0xee
      clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
      理由はよくわからない。
      • 対策1: GNDの接続をチェックする。
        GND が浮いていると同様の現象が発生することがわかった。GND がきちんと接続されているかチェックする。

      • 対策2:github から esptool.py (python プログラム)を取得して実行する。
        github の esptool.py
        python 環境があるなら
        pip3 install esptool
        で導入し、
        esptool.py -p /dev/ttyUSB0 -b 115200 erase_flash
        などとする。(ただし、Linux の場合)

テストプログラム

  接続できたと思ったら、次のプログラム(Arduino ではスケッチと呼ぶ)を試してみる。

  1. Arduino としての機能
    次のスケッチを実行し、ツール > シリアルモニタ でシリアルモニタ(別枠の窓)を表示させる。
    右下の通信速度を、スケッチ中の 115200bps に変更する。
    void setup() {
      Serial.begin(115200);
    }
    
    void loop() {
      Serial.println("Hello World.");
      delay(1000); 
    }
    うまくいけば、1秒(1000ミリ秒)に1回、"Hello World." と表示される。

  2. Wi Fi としての機能
    ファイル > スケッチ例 > (EES32 Dev Module 用のスケッチ例から) Wi Fi > Wi Fi Scan を選択する。
    次のスケッチが表示される。
    #include "WiFi.h" 
    
    void setup()
    {
        Serial.begin(115200);
    
        // Set WiFi to station mode and disconnect from an AP if it was previously connected
        WiFi.mode(WIFI_STA);
        WiFi.disconnect();
        delay(100); 
    
        Serial.println("Setup done");
    }
    
    void loop()
    {
        Serial.println("scan start");
    
        // WiFi.scanNetworks will return the number of networks found
        int n = WiFi.scanNetworks();
        Serial.println("scan done");
        if (n == 0) {
            Serial.println("no networks found");
        } else {
            Serial.print(n);
            Serial.println(" networks found");
            for (int i = 0; i < n; ++i) {
                // Print SSID and RSSI for each network found
                Serial.print(i + 1);
                Serial.print(": ");
                Serial.print(WiFi.SSID(i));
                Serial.print(" (");
                Serial.print(WiFi.RSSI(i));
                Serial.print(")");
                Serial.println((WiFi.encryptionType(i) == WIFI_AUTH_OPEN)?" ":"*");
                delay(10);
            }
        }
        Serial.println(""); 
    
        // Wait a bit before scanning again
        delay(5000);
    }
    うまくいけば、無線LANの情報が表示されるはずである。

  3. その他
    1. ホール素子
      ファイル > スケッチ例 > (EES32 Dev Module 用のスケッチ例から) ESP32 > Hall Sensor
      内蔵のホールセンサの値(磁場に関係した量)を表示できる。

    2. タッチセンサ
      ファイル > スケッチ例 > (EES32 Dev Module 用のスケッチ例から) ESP32 > Touch > Touchread
      GPIO4 のピンからケーブルを伸ばすと、それに接触したかどうかで判定できる。
      いわば、タッチセンサ―として機能する。それを試すプログラム。

SPI で気圧センサ BME280 の値を読みとる

     ▼(ひらく)...

NTP で時刻を取得する

     ▼(ひらく)...

IFTTT を利用する

     ▼(ひらく)...

Google スプレッドシートに記録する(未完)

     ▼(ひらく)...

Smart Config

     ▼(ひらく)...

Bluetooth と Bluetooth LE 周り(未完)

     ▼(ひらく)...

サーボモーターSG90

     ▼(ひらく)...

デュアルコアの活用

     ▼(ひらく)...

ESP32-CAM

     ▼(ひらく)...

添付ファイル: fileTEST.ino 77件 [詳細]

トップ   編集 凍結 差分 添付 複製 名前変更 リロード   新規 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-04-11 (日) 15:04:46