[概要] [CircuitPythonで開発] [SD/RTC編] 〔Seeeduino XIAOの使い方に戻る〕
------------------------------------------------------------ #include <U8x8lib.h> // SSD1306をテキストモニターとして使用する為のコンストラクタ U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(U8X8_PIN_NONE) ; void setup(void) { u8x8.begin() ; u8x8.setFont(u8x8_font_chroma48medium8_r) ; // 8x8英数字フォント(00h-7Fh) } void loop(void) { u8x8.setCursor(0, 0) ; u8x8.print("Hello World!") ; } ------------------------------------------------------------テキスト文字列のみなら"U8x8"を勧めます、スケッチ容量も小さくできているのでぇ。
------------------------------------------------------------ #include <U8x8lib.h> int cnt ; // SSD1306をテキストモニターとして使用する為のコンストラクタ U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(U8X8_PIN_NONE) ; // ターミナル(U8X8LOG)をセットアップ // SSD1306は128(8x16)x64(8x8)、サイズ(幅*高さ)はディスプレイによって異なります。 #define U8LOG_WIDTH 16 #define U8LOG_HEIGHT 8 uint8_t u8log_buffer[U8LOG_WIDTH*U8LOG_HEIGHT] ; U8X8LOG u8log ; void setup(void) { cnt = 0 ; u8x8.begin() ; u8x8.setFont(u8x8_font_chroma48medium8_r) ; // 8x8英数字(00h-7Fh) u8log.begin(u8x8, U8LOG_WIDTH, U8LOG_HEIGHT, u8log_buffer) ; // 0:改行で画面を更新します。1:文字ごとに画面を更新します // u8log.setRedrawMode(1) ; } void loop(void) { // 毎回10行出力したら画面をクリアします。 if ((cnt % 10)==0) u8log.print("\f") ; u8log.print("count = ") ; u8log.print(cnt) ; u8log.print("\n") ; // 改行 cnt++ ; delay(1000) ; } ------------------------------------------------------------この例は、[ファイル]->[スケッチ例]->[U8g2]->[u8x8]->[Terminal]を基に作成しています。
------------------------------------------------------------ #include <U8x8lib.h> // SSD1306をテキストモニターとして使用する為のコンストラクタ U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(U8X8_PIN_NONE) ; void setup(void) { u8x8.begin() ; } void loop(void) { int c ; u8x8.setFont(u8x8_font_chroma48medium8_r) ; u8x8.setInverseFont(1) ; // ピクセルを反転する u8x8.drawString(0, 2, "Weather") ; u8x8.setInverseFont(0) ; // 反転を戻す u8x8.setFont(u8x8_font_open_iconic_weather_4x4) ; // お天気キャラフォント for(c = 0; c < 6; c++ ) { // お天気のキャラクターを表示します。 u8x8.drawGlyph(0, 4, '@'+c) ; delay(1500) ; } // 2バイト分のタイルを描画します。 uint8_t tiles[16] = { 0x0f,0x0f,0x0f,0x0f,0xf0,0xf0,0xf0,0xf0, 1, 3, 7, 15, 31, 63, 127, 255} ; u8x8.drawTile(1, 0, 2, tiles) ; delay(1500) ; } ------------------------------------------------------------お天気マークキャラクタフォントは、"u8x8_font_open_iconic_weather_4x4"辺りです。
------------------------------------------------------------ #include <U8g2lib.h> int cnt ; // SSD1306をグラフィックディスプレイとして使用する為のコンストラクタ // メモリバッファ(RAM)は1ページ分の128b分確保 // ローテーション(画面回転)なし、SCL=5番ピン SDA=4番ピン U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0,5,4) ; void setup(void) { cnt = 0 ; u8g2.begin() ; } void loop(void) { u8g2.firstPage(); do { u8g2.setFont(u8g2_font_ncenB14_tr) ; // 英数字(00h-7Fh) u8g2.drawStr(0,15,"Hello World!") ; u8g2.setFont(u8g2_font_unifont_t_symbols) ; u8g2.setCursor(50, 35) ; // 50:x座標 35:y座標(文字の左下墨) u8g2.print(cnt) ; } while ( u8g2.nextPage() ) ; cnt++ ; delay(1000) ; } ------------------------------------------------------------この例は、SSD1306の1ページ分(全部で8ページ)のメモリを確保して利用しているので
u8g2.firstPage(); do { ここに1画面分の描画を行います。 } while ( u8g2.nextPage() ) ; 必ずこのセットで行います。ディスプレイには1ページ単位で出力しています。・u8g2.setCursor(uint8_t x, uint8_t y)
------------------------------------------------------------ #include <U8g2lib.h> // SSD1306をグラフィックディスプレイとして使用する為のコンストラクタ // メモリバッファ(RAM)は1ページ分の128b分確保 // ローテーション(画面回転)なし、SCL=5番ピン SDA=4番ピン U8G2_SSD1306_128X64_NONAME_1_HW_I2C u8g2(U8G2_R0,5,4) ; void setup(void) { u8g2.begin() ; u8g2.enableUTF8Print() ; // Arduino print()関数のUTF8サポートを有効にする u8g2.setFont(u8g2_font_b12_t_japanese2) ; // 日本語フォント高さ12bit } void loop(void) { u8g2.firstPage() ; do { u8g2.setCursor(0, 12) ; u8g2.print("Hello World!") ; // 記号、英数字は小文字なら表示する u8g2.setCursor(0, 24) ; u8g2.print("こんにちは世界さん") ; u8g2.setCursor(0, 36) ; u8g2.print("キムラ キムラ きむらっち") ; // "キムラ"とスペースは表示しない u8g2.setCursor(0, 48) ; u8g2.print("木村繁裕") ; u8g2.setCursor(0, 60) ; u8g2.print("aBc=%℃±+−*/.,;:_") ; // 全く表示しない } while ( u8g2.nextPage() ) ; delay(1000) ; } ------------------------------------------------------------表示しない文字が有る事に注意です。
------------------------------------------------------------ #include <U8g2lib.h> // SSD1306をグラフィックディスプレイとして使用する為のコンストラクタ // メモリバッファ(RAM)は128X64バイト(画面フルサイズ分) // ローテーション(画面回転)なし、SCL=5番ピン SDA=4番ピン U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0,5,4) ; void setup(void) { u8g2.begin() ; u8g2.clearBuffer(); // バッファのクリア u8g2.drawFrame(0, 0, 127, 63) ; // 四角形(塗りつぶさない) u8g2.drawEllipse(63,31,40,10) ; // 楕円(塗りつぶさない) u8g2.drawDisc(63,31,10) ; // 円(塗りつぶす) u8g2.sendBuffer(); // バッファ内容をOLEDに送る } void loop(void) { } ------------------------------------------------------------この例は、SSD1306の画面フルサイズ分(8192バイト)のバッファメモリを確保しています。
------------------------------------------------------------ #include <U8g2lib.h> static const unsigned char HANA[] U8X8_PROGMEM = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x7F, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x3F, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x1F, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x1F, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x0F, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x0F, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x07, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0x0F, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x7F, 0xF7, 0x07, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xC0, 0x0F, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0x00, 0x0F, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0x00, 0x0E, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0x00, 0x0C, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0x00, 0x10, 0x80, 0xCF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0x01, 0x00, 0x80, 0x01, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0x01, 0x00, 0x80, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0x03, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0x07, 0x00, 0x04, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0x0F, 0x00, 0x06, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0x1F, 0x08, 0x0F, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0x3F, 0xF0, 0x0B, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xFC, 0xFF, 0xFF, 0xFF, 0x3F, 0x7F, 0x7A, 0xF0, 0x1B, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x1F, 0x00, 0xF0, 0x31, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFE, 0xFF, 0xEF, 0xFF, 0x3F, 0x0F, 0x00, 0x70, 0x30, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFE, 0xFF, 0xCF, 0xFF, 0x3F, 0x0F, 0x00, 0x30, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFA, 0xFF, 0xC3, 0xFF, 0x3F, 0x0F, 0x00, 0x78, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x17, 0xF8, 0xFF, 0xC0, 0xFF, 0x3F, 0x1F, 0x00, 0x7C, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xF0, 0xFF, 0x80, 0xFF, 0x3F, 0x3F, 0x00, 0x20, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xC0, 0x7F, 0x80, 0xFF, 0x3F, 0x7F, 0x00, 0x60, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x80, 0x3F, 0x80, 0xFF, 0x3F, 0xFF, 0x00, 0x20, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x04, 0x3F, 0x80, 0xFF, 0x3F, 0xFF, 0x01, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x1F, 0x80, 0xFF, 0x3F, 0xFF, 0x07, 0x80, 0x81, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0x00, 0x1E, 0x80, 0xFF, 0x3F, 0xFF, 0x07, 0xC0, 0xE3, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x05, 0x00, 0x1C, 0x80, 0xFF, 0x3F, 0xFF, 0x07, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x22, 0x00, 0x18, 0xC0, 0x1F, 0x3E, 0xFF, 0x07, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x67, 0x00, 0x08, 0xC0, 0x03, 0x3E, 0xFF, 0x0F, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0x00, 0x18, 0xC0, 0x01, 0x3F, 0xFF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x40, 0x00, 0x60, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xDF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xFC, 0x1F, 0x80, 0x82, 0x00, 0x80, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0xF8, 0x01, 0x80, 0xEF, 0x01, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xF0, 0x00, 0x80, 0xFF, 0x01, 0x80, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xE0, 0x00, 0x80, 0xFF, 0x03, 0xC0, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0xC0, 0xFF, 0x1F, 0xC0, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0xC0, 0xFB, 0x0F, 0xF0, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x80, 0x00, 0xE0, 0x07, 0x0F, 0xF8, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x01, 0xC0, 0x13, 0x06, 0xFE, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x01, 0xC0, 0x23, 0xC6, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x01, 0x80, 0x07, 0xC7, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x03, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0xD7, 0x07, 0xFC, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x80, 0x20, 0x00, 0xFC, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x20, 0x00, 0xFC, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x70, 0x00, 0xF8, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0xF8, 0x00, 0xF8, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x70, 0x20, 0x18, 0x00, 0xFC, 0x01, 0xF8, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x80, 0x20, 0x1C, 0x00, 0xFC, 0x03, 0xF8, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x01, 0x00, 0xFE, 0xCF, 0xFD, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x20, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x28, 0x80, 0x00, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x0C, 0x40, 0x80, 0xFF, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x07, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0x3F, }; // SSD1306をグラフィックディスプレイとして使用する為のコンストラクタ // メモリバッファ(RAM)は128X64バイト(画面フルサイズ分) // ローテーション(画面回転)なし、SCL=5番ピン SDA=4番ピン U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0,5,4) ; void setup(void) { u8g2.begin() ; u8g2.clearBuffer() ; // バッファのクリア u8g2.setDrawColor(0) ; u8g2.drawXBM(5, 0, 118, 64, HANA) ; u8g2.sendBuffer() ; // バッファ内容をOLEDに送る } void loop(void) { } ------------------------------------------------------------このサンプルは、写真を128(118)x64白黒BMPファイルに加工し、XBM形式のビットマップデータに
------------------------------------------------------------ #include <U8g2lib.h> const uint8_t bmp[] PROGMEM = { 0b00000000, 0b00000000, 0b01100110, 0b11100111, 0b11111111, 0b01111110, 0b00111100, 0b00011000 }; // SSD1306をグラフィックディスプレイとして使用する為のコンストラクタ // メモリバッファ(RAM)は128X64バイト(画面フルサイズ分) // ローテーション(画面回転)なし、SCL=5番ピン SDA=4番ピン U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0,5,4) ; void setup(void) { u8g2.begin() ; u8g2.clearBuffer() ; // バッファのクリア u8g2.setFont(u8g2_font_unifont_t_symbols); u8g2.drawUTF8(5, 20, "Snowman: ?"); u8g2.drawStr(5,41,"Table clock:"); u8g2.drawGlyph(110, 41, 0x23F0); u8g2.drawStr(5,58,"Heart:"); u8g2.drawXBM(60,50,8,8,bmp) ; u8g2.sendBuffer() ; // バッファ内容をOLEDに送る } void loop(void) { } ------------------------------------------------------------・u8g2.drawUTF8(u8g2_uint_t x, u8g2_uint_t y, const char *s)
【きむ茶工房ガレージハウス】
Copyright (C) 2006-2021 Shigehiro Kimura All Rights Reserved.