Arduino-ESP32

久々に、ESP32で遊んでみます。

今回のターゲットのボードは

https://www.google.com/search?q=wemos+wifi+%26+bluetooth+battery+esp32

で見つかるものによく似ているのですが、微妙に違うようにも思います。とりあえず、写真のイメージが同じに見えるところにあった端子表をコピペしておくことにしました。

次に、ArduinoにESP32の開発環境を用意しますが、手順は前回とほぼ同じでgithubにあるarduino-esp32を組み込みます。 「Menu → プログラミング → Arduino」でArduino IDEを起動します。次にArduino IDEの「ファイル→環境設定」で「追加のボードマネージャのURL」に

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

を指定して、ボードマネージャで esp32 を検索してインストールします。前回はバージョン1.0.2でしたが、現在は1.0.4になっているようです。

インストールしたら、「ツール」⇒「ボード」⇒「ESP32 Arduino」⇒「WeMos WiFi & Bluetooth Battery」を選択します。

試しに、自分の中の定番のサンプルの SimpleTime を動かしてみます。サンプルをダウンロードして、SSIDとパスワードを設定、ビルドして書き込もうとするとエラーになります。

ImportError: No module named serial

で、ぐぐると、pyserial が無いから、esptool が云々・・・というらしいので、

$ sudo apt-get install python3-pip
$ sudo pip3 install pyserial
$ sudo pip3 install setuptools
$ sudo pip3 install esptool

とやっても解決しないのでした。

まさかと思って、Python2 の方で pyserial をインストールしてみます。

$ sudo apt-get install python-pip
$ sudo pip install pyserial

で、無事に書き込めました。(そろそろ、Python2は引退してほしいところですが・・・)

ただし、このボードでは書き込みの際にはブートモードに手動で移行してやる必要があるようで、Bootを押しながらENを押してリセットを行い、書き込みが始まるまではBootを押したままにする必要があるようです。

次に、githubにあるThingPulse OLED SSD1306ライブラリを使ってOLEDのテストをします。説明に、

You can either download this library as a zip file and unpack it to your Arduino/libraries folder or find it in the Arduino library manager under “ESP8266 and ESP32 Oled Driver for SSD1306 display”. For mbed-os a copy of the files are available as an mbed-os library.

とありますので、コードをZIPでダウンロードしてZIPファイルを展開、展開されたesp8266-oled-ssd1306-masterディレクトリを丸ごと~/Arduino/libraries の下に移動します。移動したら、ライブラリマネージャで「ESP8266 and ESP32 Oled Driver for SSD1306 display」が存在するのを確認できました。

そのスケッチ例で SSD1306SimpleDemoというのがあるので、これをロードします。端子表ではGPIO5がOLEDのSDA、GPIO4がOLDのSCLに繋がっているようなので、OLEDの初期化部分を以下のように修正します。

// Initialize the OLED display using Arduino Wire:
//SSD1306Wire display(0x3c, SDA, SCL); // ADDRESS, SDA, SCL - SDA and SCL usually populate automatically based on your board's pins_arduino.h
SSD1306Wire display(0x3c, 5, 4); // ADDRESS, SDA, SCL - If not, they can be specified manually.

さらに、もとのソースのままだと長手方向が上になり、なんとなく気持ち悪いので、ソースコード中の

display.flipScreenVertically();

をコメントアウトして、画面を上下逆にします。

これでとりあえず、ESP32とOLEDは使えるようになりました。

OLEDなのですが、正直なところ、常時表示させる用途には向いてないと思っています。この記事で作成したカメラはOLEDに常時IPアドレスなどを表示しっぱなしにしていたのですが、点灯していることが多い画素と、ほとんど点灯履歴のない画素で明るさが異なるようになってしまいました。ですので、OLEDは一時的に表示する用途が向いていると思います。(常時表示であれば、従来型の液晶のほうが向いていると思う)

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)