FC2ブログ

ESP32とSSD1306で「変数」を表示しようとしたら・・・

少し前、ESP32 に0.96インチのちっちゃな有機ELディスプレイ(SSD1306)を接続し、 “Hello World” を表示することに成功しました。

“Hello World”ってのは文字列ですよね。今回は、文字列ではなく変数(データ?)を表示しようとしたらかなり苦労した、というお話。

先ずは、分かり易くするために、極力シンプルな形でシリアルモニタに表示した例から。

シリアルモニタに表示
上のプログラムは、1秒ごとにカウントアップしていき、それをシリアルモニタに表示するというもの。で、その結果が右側のウィンドウで、特に何の問題も無く表示されます。

これをそのまま表示先を有機ELディスプレイに変えるだけだよねってやったのが、これ。

表示できない
コンパイルの途中でエラーになってしまいました。

「no matching function for call to ・・・・」うーん、なんのことかさっぱり。検索してみても、「これだ!」って回答は見つけられず。

いや、言いたいことは何となく分かるような気はします。「drawString」じゃないよってことなのかなって思うのだけど、じゃあ何なのってのが分からない。

この辺は、プログラムに慣れている人にとっては当然のことなのだと思うけど、素人のにわかカプルグラマーにとっては、なかなか乗り越えるのが難しい壁。

今回色々と検索していて思ったのは、ESP32 とSSD1306を組み合わせた記事がそれほど多くないってこと。当初は、もっとザクザク出てくると思っていたのだけど。

そして、たまに見つけた情報では、この辺のことが「皆さん周知の事実だから解説不要」とし、それをベースに更に難しいことを記述されているので、私にはチンプンカンプン。

といった苦労の末、何とか見つけたヒントからたどり着いた回答がこちら。


問題の回答は14行目。変数を String() で扱えば良かったのです。

うーむ、分かってしまえば本当に簡単なことだったのだけど、ここに行きつくまでは結構大変でした。ま、こういうことってありがちですけどね。

ディスプレイには刻々と変化する数値が表示されています。

データ表示
(右隅にあるのはATtiny85ですが、今回の内容とは無関係なので無視して下さい)

因みに、前回の “Hello World” の時には、ディスプレイのSDAをGPIOの22へ、そしてSCLをGPIOの18へと接続していました。

これで特に何の問題も無く表示できていたのですが、今回はSDAをGPIO21、SCLはGPIO22へと変更しています。それは、こんなデータを見つけたから。

SCLとSDA
キチンと規定されているにもかかわらず、そこから敢えて外す必要もないかなと。ま、ちょっと気持ち悪いなって程度のことなんだけど。


M5Stack とお友達に -- (3)「Hello World」

前回、Arduino IDE でM5Stack用の開発環境を構築したので、さっそくスケッチを書きこんでみましょう。

一番気になるのは、M5StackにはESP32が組み込まれているわけですが、プログラム的には全く同じものなのかってこと。 ESP32用のプログラムがそのまま動くのか?

サンプルスケッチを見てみましょう。

「スケッチ例」→「M5Stack」→「Basics」へと進み、「HelloWorld」を選択。

スケッチ例から

最もシンプルなプログラムの一つなので、必要な要素が一目で分かりますね。

これで見ると、ESP32用のスケッチをM5Stack用に移植する際に(加える)必要があるのは、1行目の「include<M5Stack.h>」と5行目の「M5.begin()」だけのようです。

HelloWorld3
「M5.Power.begin()」は、「バッテリーを使うなら・・・」ってことかな。

上のスケッチをM5Stackへと書き込むと、ディスプレイに「Hello World」と白い文字で印字されます。が、文字が小さい!この文字の大きさは、若者向けですね。

ってことで、年寄りは文字の大きさを変更してみようかと。ついでにフォントカラーも。

10行目は、文字の大きさも色も指定しないデフォルト状態。

12行目から、色とフォントの大きさをセットで変えながら4種類追加してみました。

その結果がこちら。

M5stack hello world

ここに来るまでに色々と調べていた中で、文字の大きさ指定に小数点を使っていたのを見たような気がしたので、Size(2)の次にSize(2.5)としてみましたが、大きさは同じですね。

ってことで、フォントサイズは整数での指定しかできないようです。(1)は小さすぎる。(4)は大き過ぎる。使うとしたら(2)と、場面によっては(3)って感じでしょうか。

次回、「Hello World」の次は、やっぱり「Lチカ」でしょうね。


ラズベリーパイ 4 --(9)VNC 解像度変更放浪の旅-その3

ラズパイ4をVNCで操作する際の解像度を変更出来ずにアチコチをさ迷っていますが、前回なんとなくアスペクト比が問題なのかも、って思い始めたところ。

でも、sudo nano /boot/config.txt で設定を隅から隅まで探してみましたが、アスペクト比に関する項目(sdtv_aspect)は、どこにも見当たりませんでした。

なので、設定の最後に自分で付け加えてみました。

アスペクト比変更
デフォルト(4:3)から、sdtv_aspect=3 で 16:9 に設定。

これでいけるのかと、sudo raspi-config で DMT Mode 82 に設定してラズパイ再起動。

config6

ワクワクしながら待ちましたが、結果はダメ。相変わらず 4:3 でしか表示されません。

そろそろ諦めの境地に。というか、ディスプレイいっぱいに表示してしまうと、それはそれで扱いにくいし、返って 4:3 の方が便利なのではって思い始めたところ。

ただ、上の Choose screen resolution の中にある設定で、1600×1200は大きすぎるし、1024×768 は少し小さいかも。この間の解像度はないのかとページ内を探すと、

アスペクト比変更
hdmi_mode=32 の 1280×960で設定してみましょう。

再び sudo nano /boot/config.txt から設定に入り、hdmi_mode= の数値を32に変更。

mode 32

はい。やっぱり 4:3 なら問題なく設定できるんですね。

1280×960

うーむ、なんかモヤモヤは残るけど、実用的にはこれで多分何の問題も無いと思う。

ということで、解像度変更放浪の旅はこれにて終了。

次回で、設定関連も一区切りとしましょう。


ラズベリーパイ 4 --(7)VNC 解像度変更放浪の旅-その1

前回、ラズパイ4からHDMIケーブルを外しても、VNC Viewer でラズパイのデスクトップが開くようになりました。

ここで、これまで何度かトライしても成功しなかった解像度の変更に再(々...)取り組み。

現在、VNC Viewer で見えているラズパイのデスクトップ。「1024×768」のようです。

解像度が変わらない
「1920×1080」のディスプレイに対して、これ以上大きくならない(ウィンドウを広げると、拡大されて粗くなるだけ)。

解像度を変更すべく、ラズパイデスクトップのMENU⇒設定⇒RapberryPiの設定へと入ってみたけど、そこには解像度に関する項目が無かったということは以前お伝えした通り。

ということで、今度はLXTerminal のコマンドで設定画面へとアクセスしてみます。

LXTerminal を起動させ、sudo raspi-config(呪文のようですが、「sudo」はUNIX系コマンドの一つ、「raspi-config」は、ラズパイの設定のこと)と入力。

config3

設定画面が現れるので、7行目の「Advanced Options」を選択して Enter。

config4

続く画面で、5行目の「Resolution」を選択して Enter。

config5

解像度の選択画面になります。

config6

ここでディスプレイの解像度と同じ「1920×1080」を選択し、左右の矢印キーで<了解>を選択、そしてLXTerminal を終了してからラズパイを再起動。

が、何も変化なし。最初の画面のままです。

更にもう一歩。

前回、VNCの「Cannot currently show.....」問題を解決した boot 設定(sudo nano /boot/config.txt)に入ります。

そして、「uncomment to force a console size.」ってのをやってみます。具体的には、その下の2行の先頭の「#」を削除します。

config7

が、これまた何の変化も起こらず。

ということで、解像度変更の旅は次回へと続きます。


<< topページへこのページの先頭へ >>