ArduinoによるOLED表示機の作り方(ソフトウェア編-1)
Arduino IDEのインストール方法は色んな方々か分かりやすい記事を書かれているのでweb検索すれば困ることは無いと思いますが、一応、推薦しておくサイトを列挙しておきます。
ステップbyステップでとても丁寧なインストール説明です。
win、mac、linux 対応で書かれています。
Arduino IDEの起動
インストールが終わったらArduino IDE(以降 IDE)を起動します。マイコンのプログラム開発環境としてはシンプルで良いと思います。バリバリ開発したい人はVScodeにArduinoプラグインを入れるなどしてください。
< シンプルで使いやすいIDE >
グラフィックライブラリの登録
小型OLED、LCD用の(SSD1306などの)ドライバがあるグラフィックライブラリとしてはAdafruit のものと、本日紹介するu8glib/u8g2が有名だと思います。
u8glibとu8g2は、バージョンの違いでu8g2が新しく色々と機能が増えているようです。今回はシンプルに文字を表示したいだけですのでu8glibを使っていきます。
では早速IDEに登録してみましょう。
「ツール」->「ライブラリを管理」でライブラリマネージャというのが開きます。
検索Windowに「u8glib」と入力すると、
こんな感じに見えてきます。u8glibの項目の「インストール」ボタンを押すとライブラリがインストールされます。U8g2はドライバの種類も増えているのでu8glibでは対応していないチップのOLED/LCDを使う場合はU8g2から探してみると良いかもしれません。
Hello World で動作確認
グラフィックライブラリのインストールが終わったら実際に動かしてみます。OLEDの接続は先日の記事を参考にしてください。
「ファイル」->「スケッチ例」->「U8glib」->「Hello World」を選択してみます。
Hello Worldとは、プログラミングを始めるときの第一歩に使用するお決まりのモノですね。
新しいIDEが開きます。沢山のコードが書かれていますが、殆どはコメントアウトされたものです。
行の先頭に//っては、C,C++言語ではおなじみですよね。 その行はコメントという意味です。
今回使うOLEDのSSD1306チップの128x32ピクセルの行を探します。
「ctrl」+「f」で検索Windowが開くので SSD1306_128X32で検索しても良いでしょう。
上のように3行ありますね。// コメントのところに詳細が書かれています。
「SW SPI」
「HW SPI」
「I2C / TWI」 で、今回のはI2C接続なので
3行目のところの行の先頭の // を消します。
これがソースコード上、唯一の変更点です。
u8glibは様々なICに対応したドライバを持っているので、どれを使うか指定しています。
ボードとプロセッサの設定
コンパイルする前に、ボードとCPUを設定しておきます。
今回のボードはArduino Pro mini 互換だったので「Arduino Pro or Pro Mini」を選択します。
プロセッサは「ATmega328P(5V, 16MHz)」です。3.3V仕様のボードもあるんですね。間違って買ってしまったら色々と大変かも。
プロセッサの1行下のシリアルポートってのは、書込み機のポートの事です。今回はArduino UNOを書込み機として使用しているため「UNO」のポートを選択しています。専用のUSBシリアル変換器を使う場合はそのポートを選択してください。
コンパイルとプログラム書込み
次にコンパイルと書込みです。この矢印ボタンを押すとコンパイルと書込みをやってくれます。
一度目のコンパイルは、ちょっと時間がかかります。1分くらい。
書込みが終わりました。
OLEDに「Hello World!」と表示されていればOKです。
ソースコードをいじった所は「//」を消しただけです。意外と簡単でしたね。
フォントや文字を変えてみる
コードをスクロールしていくと以下のようなところが出てきます。
u8g_font_unifont ってのが今、表示したフォントです。
ドキュメント\Arduino\libraries\U8glib\src\clib\u8g.h というソースの中に同梱されているフォント一式が書いてあります。
/*
Free-Universal Regular
r: Reduced char set (codes 32 - 128)
n: Numbers (codes 42 - 57)
no char: Full set (codes 32 - 255)
*/
とコメントに書いてあるとおり、フォント名の末尾に「r」が書いてあるものが通常の英数字です。数字だけなら「n」です。Full setはどんな時に使うのでしょうかね。
例えば、
u8g.setFont(u8g_font_04b_03r);
にすると、
めっちゃ小さい! これはこれで楽しめそうです。
何気に等幅フォントではなくプロポーショナルフォントになっているところがニクイですね。
u8g.drawStr( 0, 22, "Hello World!");
というところの"Hello World!" という文字を変えると表示される文字が変わります。
0, 22, は文字を描画する位置(X,Y)の指定です。適当に数値を変えてみるとわかると思います。
表示領域の原点「0,0」から文字を書こうとすると画面の上側にはみ出てしまうので、縦方向はフォントの高さよりも大きくする必要があります。
思ったよりも記事が長くなったので、本日はここまで。
次回はUART信号を受信して、OLEDに数字を表示するところを説明しようと思います。
にほんブログ村
ブログランキングに参加中です。 めざせ1位!
もしよろしければ「ぽちっと」お願いします。
« Arduino UNOでArduino ProMiniにプログラムを書く方法 | トップページ | ArduinoによるOLED表示機の作り方(ソフトウェア編-2) »
「電子ボリューム」カテゴリの記事
- MUSES72323 Balanceボリュームの表示機追加について(2022.12.24)
- MUSES72323 バランスボリュームもうじき頒布開始(2022.11.26)
- MUSES72323バランスボリューム基板 進捗(3)(2022.05.14)
- MUSES72323バランスボリューム基板 進捗(2)(2022.05.08)
- MN型ボリュームとは(2022.05.03)
「Arduino」カテゴリの記事
- MUSES72323 Balanceボリュームの表示機追加について(2022.12.24)
- BlueSnowDACにIRリモコンを増設する方法 Seeeduino XIAO(メニュー操作編)(2021.11.27)
- BlueSnowDACにIRリモコンを増設する方法 Seeeduino XIAO(ソフトウェア編)(2021.11.24)
- BlueSnowDACにIRリモコンを増設する方法 Seeeduino XIAO(準備とハードウェア編)(2021.11.23)
- ArduinoによるOLED表示機 電流削減に挑戦してみました(2021.02.21)
コメント
« Arduino UNOでArduino ProMiniにプログラムを書く方法 | トップページ | ArduinoによるOLED表示機の作り方(ソフトウェア編-2) »
値段と入手性と、使う機能の範囲から考えますと、Seeeduino XIAOで取り込むことをお勧めします。
秋月で580円でUSBソケット付きで書き込みも楽になりますし、十分小さいですので。
https://akizukidenshi.com/catalog/g/gM-15178/
投稿: DR.KSK | 2021年2月15日 (月) 10時07分
DR.KSKさん
情報ありがとうございます。 こんなモノもあるのですね。ぜひ挑戦してみてください。
電流が10mAよりも小さいと ProMiniよりも良くなりそうです。
うちにESP32基板もあるのですが、ベースボードを含んだ電流が100mAとProMiniの10倍もあって全然いけてないことが分かりました。
目標というか理想は、コントローラに使っているPICと同様の1mA切りですね。
投稿: たかじん | 2021年2月15日 (月) 22時08分