2019年1月11日金曜日

Arduino:Wemos ESP32 Lolinを動かしてみる(途中)

なんだこれすげえ安(ry

Wemos Lolin ESP32という感じの型番でAliexpressで売ってたコレなんですが、ESP32ベースで単色OLEDディスプレイ付きで1200円くらいなんですよ!(当時)

まあパチモンらしいんですけども。。。

ESP32ベースなのでWifiと接続できちゃいますし、ESP32には技適マーク付きで国内使用も問題なし!これはいい!ということで1個購入してみました。

例によっていろいろ先人の知恵を拝借するわけですが、結論から言うと残念ながらOLEDパネルの部分は初期不良で動作しなかったのです……。現在ショップに問い合わせ中なんですが、

私:すいません。先日購入したものが動かなかったのですがどうしたらいいですか?(ショップによって違うであろう対処方法について聞いたつもり)
店:写真撮って送ってください。
私:(外付けのOLEDを接続して、ESP32部分は動いているが、内臓のOLEDは動いていないことがわかる写真を送付)
店:なるほど。それで我々はどうしたらいいですか?
私:動作するものを送るか、返金処理してほしい。
店:(現状回答なし)←今ココ
というわけで、待ちの状態です。どうなるかなー。

で、上述の「外付けのOLEDを接続して動作確認」の部分ですが、最初は先日書いたUNO R3の時に使ったAdafruitのライブラリとテストプログラムを使ったんですが動かなかったのです。
で、まずは動くことを確認せねば、ということで、wemos とかでググりまして、
こちらのページにたどり着きました。
ここの情報で

  • ESP8266 Oled Driver for SSD1306 の中の SSD1306ClockDemo が使えそうなこと
  • 内蔵OLEDを制御しているI2Cピンアサインは SCL/SDA=IO4/IO5であること

を教えていただきましたので、ブレッドボードで信号を引き出して外付けのOLEDパネルに接続したところ、外付けは動いてるけど内蔵は動いていない、という状況が確認できた、ということになります。

さて、今後WemosでなくてもESP32+OLEDの組み合わせでモニターとして使っていきたいと思うと、どうにかして文字列を画面に表示できるようにしておきたいわけです。

で、Adafruitのライブラリは上記で失敗していますし、簡単にググったところによると最新のAdafruitのライブラリではディフォルトのI2Cポート以外に設定するのは難しい、みたいな記載を見つけました。

そこで調べを進めると、どうやらSSD1306のライブラリ自体で文字まで表示できる模様。

ああ、、、元ネタどこのページで拾ったのか忘れてしまった……。

ですが、結論としては、これで表示した文字って等幅フォントではなくプロポーショナルフォントだったんです。それってちょっと使いにくいような……。

ということで、Adafruitのライブラリを使えるようにする調査をもう少しまじめにやってみました。結論として、


  • Adafruit_SSD1306.hの↓の部分の修正(128_64をイキにする)


  • ssd1306_128x64_i2c.inoの修正
  1. (下の画像に入ってないけど)#define OLED_RESET 4→0
  2. (Wire.begin()→Wire.begin(5,4)
  3. display.begin(~,0x3D) → 0x3c) 


これで動きました!
スペシャルサンクス←ココ

ただ、どうもAdafruitのライブラリは、フォントをメインメモリ上に置いちゃうらしくてメインメモリを圧迫してしまう可能性があるので、これをSPIFFSに移動することはできないかなー、とか考えています。


0 件のコメント:

コメントを投稿