Grove Beginner Kit For Arduino(以下、Beginner Kit)検証報告の10番目です。前回の記事はこちらです。
hirocom777.hatenadiary.org
画像データを表示する
前回はOLED ディスプレイで、図形と文字を同時に表示してみました。今回は画像データを表示してみようと思います。OLEDディスプレイにはXBM形式形式の画像ファイルを表示する機能があります。
XBM形式の画像ファイル
XBM形式の画像ファイルというものを、僕は今回初めて知りました。これは、画像をC言語の配列として表現したファイル形式です。C言語のソースリストに組み込んで使うことが出来ます。今回は、以下の画像データを表示してみましょう。
100×50ピクセルのモノクロビットマップファイルです。このファイルをXBM形式に変換するには以下のサイトを利用するのがよいでしょう。
www.online-utility.org
此方のサイトを開いて『ファイルの選択』を押すと、ファイルを開くダイアログが表示されます。上記のビットマップファイルを選択した後に『Convert and Download』を押すと変換されたファイルがダウンロードされます。テキストデータなのでテキストエディタで開いてみると、以下のような形式が現れます。
#define xxxxxxxxxxxx_width 100 #define xxxxxxxxxxxx_height 50 static char xxxxxxxxxxxx_bits[] = { 変換されたデータ };
今回は、上記ファイル変換されたデータ部分を使用します。
画像を表示するスケッチ
それでは画像を表示するスケッチを以下にご紹介します。
#include <U8g2lib.h> U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R2, /* reset=*/U8X8_PIN_NONE); const unsigned char A_bmp[] U8X8_PROGMEM = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA0, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFC, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xF8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xF8, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7F, 0xF8, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x7F, 0xF0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x3F, 0xF0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x3F, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x3F, 0xF0, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x1F, 0xE0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x1F, 0xE0, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x07, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x07, 0x80, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x03, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x03, 0x00, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x03, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, 0xFE, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, 0xFE, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0xD8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; void setup() { u8g2.begin(); u8g2.setPowerSave(0); u8g2.setFlipMode(0); u8g2.firstPage(); do { u8g2.drawXBMP(20, 0, 100, 50, A_bmp); } while (u8g2.nextPage()); } void loop() { }
コンパイルしてBeginner Kitに書き込んでみると、以下の様に表示されました。
スケッチの解説
それではスケッチの解説です。変換されたデータデータの内容は
const unsigned char A_bmp[] U8X8_PROGMEM =
に続く{}の中に貼り付けます。この値の配列が画像データです。表示をするには以下の関数を使用します。
・u8g2.drawXBMP()
XBM形式の画像データを表示します。記述方法は以下の通りです。
u8g2.drawXBMP(表示位置X,表示位置Y,画像幅,画像高さ,画像データ)
表示位置X,Yは画像データの左上になります。また、この関数も他のu8g2の描画関数と一緒で、
u8g2.firstPage()とu8g2.nextPage()を使って描画します。今回のスケッチと以下を参考にしてください。
hirocom777.hatenadiary.org
さて、CPUボードと全てのモジュールについて解説が完了しました。これでGrove Beginner Kit For Arduino検証報告の連載は終了します。でも、最後にちょっとだけおまけがあります。
おまけ-なんだか似たような製品が出てる
最近になって、何だか気になる製品の広告を目にしました。
Arduino Sensor Kit - Base - Seeed Studio
なんだかBeginner Kitに似ている!!一体何者なんでしょうか?
CPUボードの代わりにGROVEベースシールド
Arduino Sensor Kit - Base(以下、Sensor Kit)は、簡単に言うとBeginner KitのCPUボードがGROVEベースシールドに切り替わったものです。
www.switch-science.com
GROVEベースシールドは、マイコンボードArduinoUNO(または、その互換機)に取り付けることで、その他のセンサー、表示装置、入力装置などのGROVEモジュールを簡単に接続、使用する事ができます。以下の連載でArduinoUNOとGROVEシステムを使った例を紹介しています。
Arduino UNO入門の連載記事はコチラからどうぞ!!
つまり、この製品はArduinoUNOをすでに持っている人が安価にGROVEモジュールを手に入れられるというモノのようです。確かに個別にGROVEモジュールを購入するよりも、かなり安価です。Sensor KitにArduinoUNOを取り付けるとBeginner Kitとほぼ同等の機能になります。でも、ちょっとだけ違うところがあるんですよ。モジュールに接続されているピンが少しだけ変更されています。
・ボタンモジュールとLEDモジュールの接続
Beginner Kitでは、LEDモジュールが4番ピン、ボタンモジュールが6番ピンに接続されています。Sensor KitではLEDモジュールが6番ピン、ボタンモジュールが4番ピンになりました。これで、LEDモジュールに接続されたピンがPWMサポートされるようになりました。この連載ではLEDモジュールでPWMを確認するために無理やりケーブルで繋ぎ変えていました。最初からこうしてほしかったです。
・光センサーの接続
Beginner Kitでは、光センサーモジュールがA6ピンに接続されています。Sensor KitではA3ピンに変更になっています。
これらの接続を読みかえれば、Sensor KitとArduinoUNOを組み合わせることで、この連載でご紹介したスケッチは問題なく動作すると思います。
お付き合い有難うございました
これでこの連載は本当に終了です。この連載を書くことでArduinoの今まで触れていなかった部分も知ることが出来てよかったです。また別の記事でお会いしたいと思います。有難うございました。