次はSTM32ボードを積極的に使ていきたい(21) グラフィック液晶(2)
Arduino STM32 最新版 でのグラフィック液晶利用調査
以前、調査・検証した「次はSTM32ボードを積極的に使ていきたい(13) - グラフィック液晶」の再調査です。
マイコンボードとして、Blue Pillボード(STM32F103C8T6搭載)を使います。
グラフィック液晶モジュールは、コントローラーにILI9341(SPI接続版)をつかった製品を使います。
開発環境としては、Arduinoを利用します。
ここ数ヶ月で利用しているArduino STM32モジュールにかなりの仕様変更がありまして、
コントローラーにILI9341を使った液晶モジュール利用環境にも影響がありました。
そのため、改めて動作確認を行いました。
影響する仕様変更点
・Adafruit_GFX_ASライブラリの実装形態の変更
(概要)
コントローラーILI9341用ライブラリAdafruit_ILI9341_STMは描画処理等に、
Adafruit_GFX_ASライブラリを利用しています。
Adafruit_GFX_ASは従来は、Adafruit_GFXライブラリをSTM32環境に修正したものが
提供されていましたが、Adafruit_GFXからの派生クラスとして実装する形態に変更されました。
(影響)
別途、Adafruit_GFXを各自でインストールする必要があります。
(メリット)
従来は、Adafruit_GFXの古いバージョンがベースだったため、グラフィック液晶関連では
Arduinoと同等の機能を利用することが出来ませんでしたが、この修正により利用出来る
ようになりました。
それでは、最新版のArduino STM32モジュールを使った環境にて、
手持ちのグラフィック液晶モジュールの動作確認を行ってみることにします。

この方法でインストールすると、ライブラリ\librariesに配置されるライブラリの
フォルダ名がarduino_981956となってしまいました。
これだと分かりにくいので、Arduino IDEを一旦終了し、Adafruit_GFXに変更して
Arduino IDEを再起動して利用しました。
サンプルスケッチ「stm32_graphicstest」を使った動作確認
SPI1は次のピンを利用します。
PA4 : NSS
PA5 : SCK
PA6 : MISO
PA7 : MOSI
液晶モジュールとの結線は次のような感じです。
・結線図
メニューのスケッチ例から
Adafruit_ILI9341_STMのサンプルスケッチ「stm32_graphicstest」を開きます。
#include "SPI.h" #include "Adafruit_GFX_AS.h" #include "Adafruit_ILI9341_STM.h" #define TFT_CS PA0 #define TFT_RST PA1 #define TFT_DC PA2 //Adafruit_ILI9341_STM tft = Adafruit_ILI9341_STM(TFT_CS, TFT_DC); Adafruit_ILI9341_STM tft = Adafruit_ILI9341_STM(TFT_CS, TFT_DC, TFT_RST); void setup() { Serial.begin(115200); delay(3000); Serial.println("ILI9341 Test!"); tft.begin();
スケッチを書き込むと、液晶モジュールにはトップ画像のデモ画面は表示されます。
・SPI2を利用したい場合
SPI2は次のピンを利用します。
PB12 : NSS2
PB13 : SCK2
PB14 : MISO2
PB15 : MOSI2
方法としては、
①SPI.setModule(2)にて、SPI2に切り替える
または、
②SPI2のインスタンスを生成し、Adafruit_ILI9341_STMクラスのメンバ関数
void begin(SPIClass & spi, uint32_t freq=48000000);
を使う
でSPI2を利用することが出来ます。
①の方式は安定版(RR20170323)でのみ利用可能です。
最新版では①と②の方法が可能ですが、②の方法は何となくバグがあるようです。
SPI2を使っているのに、SPIオブジェクトの設定が変更されてしまうような気がします。
(SPIにSPI2の値がセットされてしまう。これについては調査中です)
結線図および結線表のピンは、
A5 => B13
A6 => B14
A7 => B15
に変更となります。
ちなみに、SPI1とSPI2ではMAXの転送速度が異なります。
SPI1ではシステムクロックの1/2(36MHz)がまで出せますが、SPI2ではその半分となります。
SPI2を利用する際のスケッチの修正(SPI2のインスタンス生成による対応)
#include "SPI.h" #include "Adafruit_GFX_AS.h" #include "Adafruit_ILI9341_STM.h" #define TFT_CS PA0 #define TFT_RST PA1 #define TFT_DC PA2 //Adafruit_ILI9341_STM tft = Adafruit_ILI9341_STM(TFT_CS, TFT_DC); Adafruit_ILI9341_STM tft = Adafruit_ILI9341_STM(TFT_CS, TFT_DC, TFT_RST); SPIClass SPI_2(2); void setup() { Serial.begin(115200); delay(3000); Serial.println("ILI9341 Test!"); tft.begin(SPI_2);次に、従来は古いAdafruit_GFXがベースだったために使えなかった、
フォントFreeFontを試してみます。
スケッチ(SPI2を使っています)
#include "SPI.h" #include "Adafruit_GFX_AS.h" #include "Adafruit_ILI9341_STM.h" #include <Fonts/FreeMonoBoldOblique12pt7b.h> #include <Fonts/FreeSerifBold12pt7b.h> #include <Fonts/FreeSansBoldOblique12pt7b.h> #define TFT_CS PA0 #define TFT_RST PA1 #define TFT_DC PA2 Adafruit_ILI9341_STM tft = Adafruit_ILI9341_STM(TFT_CS, TFT_DC, TFT_RST); SPIClass SPI_2(2); void setup() { Serial.begin(115200); tft.begin(SPI_2); tft.fillScreen(ILI9341_BLACK); tft.setCursor(0, 8); tft.setTextColor(ILI9341_WHITE); tft.setFont(&FreeMonoBoldOblique12pt7b); tft.println("Hello World!"); tft.setCursor(0, 38); tft.setTextColor(ILI9341_YELLOW); tft.setFont(&FreeSerifBold12pt7b); tft.println("Hello World!"); tft.setCursor(0, 60); tft.setTextColor(ILI9341_RED); tft.setFont(&FreeSansBoldOblique12pt7b); tft.println("Hello World!"); } void loop() { }
FreeFontは表示位置がカーソル指定とずれるためちょっと使いにくいです。
等幅、プロポーショナルフォント、ボールド、イタリック等使い分けることが出来ますが、
それほど使用頻度は無いと思われます。
さて、利用しているこのグラフィック液晶モジュール、
ピンもTFTとは独立してそれぞれ、SPIインタフェース対応の接続ピンがあります。
これらの機能も使い切ってみたいと思います。
« Arduino STM32のUSB HIDインタフェースの新しいブートローダー | トップページ | 次はSTM32ボードを積極的に使ていきたい(22) グラフィック液晶(3) »
「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)
「ARM」カテゴリの記事
- Arduino IDE+Arduino STM32環境で指定と異なるgccが使われてしまう(2025.01.23)
- Arduino IDE 2.3.4でArduino STM32を利用する(2025.01.12)
- PocketGoで遊んでみる(1)(2020.03.24)
- Arduino用 MML文演奏ライブラリの作成 その1(2019.04.01)
- BluePillボードで4桁7セグLEDの制御(2019.03.21)
「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)
« Arduino STM32のUSB HIDインタフェースの新しいブートローダー | トップページ | 次はSTM32ボードを積極的に使ていきたい(22) グラフィック液晶(3) »
コメント