Arduino UNO R4にSPIでOLEDディスプレイをつなぐ
Arduino UNO R4では、これまでの8bitのATmega328から、32bitのArm Cortex-M4プロセッサへと、大幅なCPU性能の向上が図られました。ルネサス製RA4M1という日本のメーカーのCPUが採用されたという点でも喜ばしいことです。
今回は、Arduino UNO R4に1.5inch OLEDモジュール(waveshare製)をSPI接続して、デモ用のプログラムをビルド実行してみました。
Arduino UNO R4以前のArduino UNOであれば、ArduinoIDEでデモ用のプログラムを開いて、ビルドして書き込めば動くのですが、R4では少し修正が必要でした。
今回は、開発環境としてラズパイ5を例に説明します。ラズパイ5(ラズパイOS bookworm)では、パッケージでインストールされるArduino IDEのバージョンは1.8.19です。
$ sudo apt install arduino
Waveshareのページから1.5inchOLEDのDemo Code(OLED_Module_Code.7z)をダウンロードして、適当な場所に展開します。
$ 7z x OLED_Module_Code.7z
ArduinoIDEを起動し、展開した ./OLED_Module_Code/Arduino/OLED_1in5_rgb/OLED_1in5_rgb.inoをArduinoIDEで開きます。
UNO R4を始めて使う場合には、ボードマネージャでArduino UNO R4 Boardsをインストールします。
使うボードに合わせて、メニューの「ツール」ー「ボード」で、「Arduino UNO R4 Minima」か「Arduino UNO R4 WiFiを」選択します。
デモプログラムの修正箇所ですが、まず、OLED_1in5_rgb.inoの2行目の"GUI_paint.h"を"GUI_Paint.h"に変更します。Windowsの環境だと問題ないのかもしれませんが、Linuxではファイル名の大文字小文字は区別するので、この部分は修正しないとエラーになります。これはR4より前の環境でも同じです。
次に、DEV_Config.cppのSPIの初期化部分の下記のコードを修正します。
25 #if USE_SPI_4W
26 Serial.println("USE_SPI");
27 //set OLED SPI
28 SPI.setDataMode(SPI_MODE3);
29 SPI.setBitOrder(MSBFIRST);
30 SPI.setClockDivider(SPI_CLOCK_DIV2);
31 SPI.begin();
SPIの初期化の関数、setDataMode(), setBitOrder(), setClockDivider()は現在は推奨されない関数す。UNO R4より前の開発環境では互換性のために残されていますが、UNO R4の開発環境では無くなっているため、エラーになってしまいます。
SPIの初期化はSPISettingを使うのが現在推奨されている方法のようです。
25 #if USE_SPI4W
26 Serial.println("USE_SPI");
27 //set OLED SPI
28 SPI.beginTransaction(SPISettings(8000000, MSBFIRST, SPI_MODE3));
29 // SPI.setDataMode(SPI_MODE3);
30 // SPI.setBitOrder(MSBFIRST);
31 // SPI.setClockDivider(SPI_CLOCK_DIV2);
32 SPI.begin();
以上の修正をしたのちコンパイルを実行(左上の[✓]のボタンを押す)すると、下記の3カ所でエラーが生じます。
いずれのエラーも以前のコンパイラーでは出なかったものですが、UNO R4のコンパイラーではチェックが厳しくなったために出ているものです。いずれも、コンパイルオプションで-fpermissiveを付ければ、コンパイルエラーを回避(エラーを警告にすることが)できるというようなヒントが表示されています。
そもそもはエラーが出ないようなソースコードに修正するのが正しい対処方法だと思いますが、今回はソースコードの修正を極力しない方法として-fpermissiveをコンパイルオプションに付ける方法でコンパイルを通します。
ArduinoIDEでのコンパイルオプションの追加方法ですが、platform.txtに設定する方法で行いました。
先のボードマネージャで開発環境をインストールすると、そのインストール先は、$HOME/.arduino15/packages/arduino/hardware/renesas_uno/1.2.0になります。platform.txtもその中にあります(インストールしたバージョンが異なる場合は、ディレクトリ名はそのバージョン名です)。
その中の、platform.txtをエディタで開き、compiler.warning_flags.noneの設定の中に、-fpemissiveを追加します。
8 # Compile variables
9 # ------------------------
10
11 compiler.warning_flags=-w
12 compiler.warning_flags.none=-w -fpermissive
13 compiler.warning_flags.default=
14 compiler.warning_flags.more=-Wall
15 compiler.warning_flags.all=-Wall -Wextra
platform.txtを書き換えた後、ArduinoIDEのメニューの「ファイル」ー「環境設定」を開き、コンパイラーの警告を「なし」に設定します。
platform.txtでcompiler.warning_flags.noneではなくdefault, more, allなどに追加した場合には、それにあわせて、「初期値」「より多く」「全て」の中から選択してください。
以上で、-fpermissiveのオプションをつけてコンパイルするようになり、コンパイルが無事に終わります。
USBケーブルでラズパイ5につないで、コンパイルしたプログラムをArduinoに書き込めばOKです。
ちなみに、Aruduinoとディスプレイの配線はR4でも同じです。waveshareのwikiページにある通りです。
この記事が気に入ったらサポートをしてみませんか?