RobotDyn STM32 Miniボード(Blue Pill互換)でJPEG画像表示
RobotDyn STM32 Miniボード(Blue Pill互換)でJPEG画像の表示をやってみました。
(BluePillより面積が狭いので、ブレッドボードで多線が出来ます)
グラフィック液晶モジュール は、
ILI9341搭載(SPI接続)+ SDカードスロット付きのものを利用しました。
グラフィック液晶モジュールのスロットに刺したSDカードに
320x240ドット JPEG形式のフルカラー画像を配置し、それを表示しています。
開発環境はArduino STM32を利用しています。
Blue Pillでは比較的簡単に表示出来ました。
動いている様子
これくらいの、速度で表示出来ればOKでしょう。
構成
結線表
利用したテスト画像(test1.jpg)
スケッチは下記のサイトのESP8266用のJPEG画像表示スケッチを
参考にしました。
参考にしたサイト
・楽しくやろう。 ESP8266でJPEG画像をTFT LCDに表示する
https://blog.boochow.com/article/427690966.html
利用ライブラリ
・JPEGデコーダーライブラリ
MakotoKurauchi/JPEGDecoder
https://github.com/MakotoKurauchi/JPEGDecoder
※fdfat対応にJPEGDecoder.cppの一部を修正しています。
修正
・ #include <SD.h> を #include <SdFat.h> に変更
・ その下に
extern SdFat SD;
を追加
スケッチ
(こちらからも参照出来ます Tamakichi/stm32_jpeg_tft.ino)
// // Arduino STM32 TFT(ILI9341) SPI接続 jpeg画像表示サンプル // // 参考にしたサイト // 元にしたスケッチ // ・楽しくやろう。 ESP8266でJPEG画像をTFT LCDに表示する // https://blog.boochow.com/article/427690966.html // ライブラリ // ・MakotoKurauchi/JPEGDecoder // https://github.com/MakotoKurauchi/JPEGDecoder // Jpegに関する情報 // ・JPEG/MCU // https://monobook.org/wiki/JPEG/MCU // #include <SPI.h> #include <Adafruit_GFX_AS.h> #include <Adafruit_ILI9341_STM.h> #include <SdFat.h> #include <JPEGDecoder.h> // SDカード(SPI2利用) #if ENABLE_EXTENDED_TRANSFER_CLASS == 1 SdFatEX SD(2); #else SdFat SD(2); #endif #define SPI_SPEED SD_SCK_MHZ(36) // バスクロック #define SD_CS PB0 // SDカード選択 // TFT制御用ピン (SPI1利用) #define TFT_CS PA0 #define TFT_RST PA1 #define TFT_DC PA2 // TFT制御用オブジェクト Adafruit_ILI9341_STM tft = Adafruit_ILI9341_STM(TFT_CS, TFT_DC, TFT_RST); void setup() { Serial.begin(115200); delay(200); if (!SD.begin(SD_CS,SPI_SPEED)) { Serial.println("failed!"); } tft.begin(); tft.setRotation(3); tft.fillScreen(ILI9341_BLUE); Serial.println("OK!"); jpegDraw("/test1.jpg"); // 320x240ドットフルカラー画像の表示 } void jpegDraw(char* filename) { char str[100]; uint8_t *pImg; int x,y,bx,by; // Decoding start JpegDec.decode(filename,0); uint16_t buf[JpegDec.MCUWidth*JpegDec.MCUHeight]; uint16_t pos = 0; // Image Information Serial.print("Width :"); Serial.println(JpegDec.width); Serial.print("Height :"); Serial.println(JpegDec.height); Serial.print("Components:"); Serial.println(JpegDec.comps); Serial.print("MCU / row :"); Serial.println(JpegDec.MCUSPerRow); Serial.print("MCU / col :"); Serial.println(JpegDec.MCUSPerCol); Serial.print("Scan type :"); Serial.println(JpegDec.scanType); Serial.print("MCU width :"); Serial.println(JpegDec.MCUWidth); Serial.print("MCU height:"); Serial.println(JpegDec.MCUHeight); Serial.println(""); sprintf(str,"#SIZE,%d,%d",JpegDec.width,JpegDec.height); Serial.println(str); // Raw Image Data while( JpegDec.read() ){ // MCU毎の描画処理 pImg = JpegDec.pImage ; // MCUブロックの先頭アドレス pos = 0; // バッファ位置初期化 // MCUブロック描画ウィンドウの設定 tft.setAddrWindow(JpegDec.MCUx * JpegDec.MCUWidth, JpegDec.MCUy * JpegDec.MCUHeight, JpegDec.MCUx * JpegDec.MCUWidth+JpegDec.MCUWidth-1, JpegDec.MCUy * JpegDec.MCUHeight+JpegDec.MCUHeight-1); // ウィンドウ領域へのデータ転送 for( by = 0; by < JpegDec.MCUHeight; by++) for( bx = 0; bx < JpegDec.MCUWidth; bx++, pImg += JpegDec.comps, pos++) buf[pos] = (JpegDec.comps == 1) ? tft.color565(pImg[0], pImg[0], pImg[0]) : tft.color565(pImg[0], pImg[1], pImg[2]); tft.pushColors(buf, JpegDec.MCUWidth*JpegDec.MCUHeight, 0); } } void loop() { }
スケッチは高速化優先で、MCU内の端数画像には考慮していません。
SDカード利用のためのライブラリは、SdFatを利用しています。
SDカードアクセスのパフォーマンス改善のために、SdFatConfig.hの設定を修正しています。
変更
#define ENABLE_EXTENDED_TRANSFER_CLASS 1
« 豊四季Tiny BASIC for Arduino STM32で日本語フォント利用対応中(2) | トップページ | ジャンク品のMSXの修理 その1 »
「arduino」カテゴリの記事
- Arduino IDE+Arduino STM32環境で指定と異なるgccが使われてしまう(2025.01.23)
- Zorin OSでArduino Uno互換機(CH340)が認識しない(2025.01.19)
- Arduino IDE 2.3.4でArduino STM32を利用する(2025.01.12)
- Arduino用 SKK日本語変換ライブラリの開発 その1(2024.12.28)
- NeoPixel(WS2812B)の制御 その5(2024.09.15)
「表示器制御関連」カテゴリの記事
- NeoPixel(WS2812B)の制御 その5(2024.09.15)
- Arduino用 美咲フォントライブラリを更新しました(2024.03.21)
- Raspberry Pi Pico(MicroPython)でLEDドットマトリックスを使ってみる(2024.03.14)
- Raspberry Pi Pico MicroPython用のマルチフォントライブラリ(2023.02.09)
- MicroPython(Raspberry Pi pico)で8x8ドットNeoPixcel文字表示(2023.02.08)
「STM32」カテゴリの記事
- Arduino IDE+Arduino STM32環境で指定と異なるgccが使われてしまう(2025.01.23)
- Arduino IDE 2.3.4でArduino STM32を利用する(2025.01.12)
- 「Arduino STM32 リファレンス 日本語版」が2万アクセス突破!(2021.03.26)
- SPI接続フラッシュメモリモジュールを入手しました(2020.05.13)
- Arduino STM32でキャラクタ液晶ディスプレイを使う(2019.06.01)
« 豊四季Tiny BASIC for Arduino STM32で日本語フォント利用対応中(2) | トップページ | ジャンク品のMSXの修理 その1 »
コメント