ラズピコのArdiuno IDEからST7735TFT液晶を使う

# Arduino　IDE用　日本語表示ライブラリ（ST7735）

[Rapberry PI Pico用　ST7735 TFT液晶 SDKライブラリ](https://qiita.com/BUBUBB/items/3caf2aefba4ae3a715e1) を、Arduino IDEから使えるようにしました。

Raspberry PI PICO 上で、SPI接続された　ST7735 TFT液晶をコントロールするためのライブラリです。日本語表示等に対応しています。

- Raspberry PI Pico 公式 SDK用 (https://qiita.com/BUBUBB/items/3caf2aefba4ae3a715e1) 
- Micropython用(https://qiita.com/BUBUBB/items/8810ed28da866443635a)
- Arduino用(このページ）



## 概要

ガッツリとビルドしてから使う公式SDKに比べ、Arduino IDEは、何と言っても２～３クリックで使えるものがなにか出来上がる、というのが華のようです。

というわけで、このページでは使う人向けに書いてあります。例えば、搭載してあるフォントを変更したい、などの場合には、[公式SDK版](https://qiita.com/BUBUBB/items/3caf2aefba4ae3a715e1) を参照してください。基本的に、元になった公式SDK用にいろいろかぶせる形にしてあるだけなので、主要な変更点や呼びだせる関数名は同じです。


## ソフトウェア

Githubの　https://github.com/HisayukiNomura/ST7735-ArduinoLib を開き、リリースページから、zipファイルをダウンロードします。
リリースをクリック
<img width=60% alt="1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2096509/aa85b20c-2bd2-4bc5-a424-23f95f99dba2.png">

SourceCode(zip)をクリック
<img width=60% alt="1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2096509/60d0f8e0-c560-44ae-9fc0-aca2357dd23a.png">

Arduino IDEを起動し、[スケッチ] > [ライブラリのインクルード] > [zip形式のライブラリをインストール…]をクリック、前の手順でダウンロードしたzipファイルを読み込みます。

<img width=60% alt="1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2096509/65806e94-5587-4b45-b7c0-c0827b42d97e.png">

読み込みが完了したら、Ardiuno IDEを念のため再起動します。再起動後、再度ライブラリのインクルードを表示すると、KNJGfxというライブラリが追加されています。

<img width=60% alt="1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2096509/01d5de4e-b9db-4be2-af26-4df0c38d2450.png">

[ファイル]>[スケッチ例]>[KNJGfx]>[SPIDisp]を選択すると、サンプルのスケッチが読み込まれます。
サンプルスケッチは、このライブラリで可能なことの多くが含まれているため、かなり大規模です。

<img width=60% alt="1.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2096509/b3f94990-0125-488f-bc96-da6ed9540967.png">

日本語を表示するための、もっとも簡単なスケッチは次のようになります。
グローバルに書かれている部分や、setup()の中は、あまり変更する必要はありません。「おまじない」と思っても大丈夫です。
「ふざけるな、大切なことが書いてあるだろう！」と思った人は、その通りです。そういう人にはそもそも説明が不要だと思いますので、思う通りに理解してください。

```
/// SPIの設定と、どのピンを使用するかの定義
SPISettings  spisettings(1000000, MSBFIRST, SPI_MODE3); // SPI通信の設定を作成する
const int SPI_PORT = 0;
const int RXDC_PIN = 16;
const int CS_PIN = 17;
const int SCK_PIN = 18;
const int MOSI_PIN = 19;
const int RESET_PIN = 0;
const int DEBUG_PIN = 0;

/// ライブラリに、SPIとして使用されているピン番号を伝える
ST7735 st7735;
HW spiHW(SPI_PORT, RXDC_PIN, CS_PIN, SCK_PIN, MOSI_PIN, RESET_PIN, DEBUG_PIN);


void setup() {
    /// SPIの初期化。それぞれのGPIOに対して、SPI機能を持たせることを伝える
    spi_init(spiHW.portSPI, 10*1000*1000);	
  	gpio_set_function(spiHW._dc, GPIO_FUNC_SPI);
    gpio_set_function(spiHW._sck,GPIO_FUNC_SPI);
    gpio_set_function(spiHW._tx, GPIO_FUNC_SPI);
    gpio_put(spiHW._cs,1);

    /// ライブラリの初期化
    spiHW.init();
    st7735.SetSPIHW(&spiHW);
    st7735.doInit();

}

void loop() {
  st7735.fillScreen(ST7735Color.BLACK);
  st7735.drawTextKanji(0,0,"こんにちは！",ST7735Color.WHITE, ST7735Color.BLACK, 1);

}
```

## ハードウェア
Raspberry PI Picoと、TFT液晶は次のように接続します。このコントローラでは、デバイス側からマイコン側への信号を示す、MISO(Master IN　Slave Out)は使用せず、Data/Command　としてコマンド送信なのかデータ送信なのかを、マイコンが示すために使用します。Data/Commandは、マイコンの機能ではなく普通の汎用IOとして制御するため、使用するピンの制限はありませんが、一応、マイコン側のMISOに接続する形で、サンプルなどは書かれています。

|Raspberry PI|⇔|TFT液晶|
|:---- |:---:|:----|
|GP16(21Pin)・MISO、SDI、RX、D/C||SDO、DC、(RS)|
|GP17(22Pin)・CSn||CS、CSn、CSB|
|GP18(23Pin)・SCK||SCK、SCL|
|GP19(25Pin)・MOSI、SDO、TX||SDI、RX、(SDA)|

aitendoの1.8インチTFT液晶モジュール [M018C7735S541](https://www.aitendo.com/product/16367) での結線例は次のようになります。シルクが間違えているような気がするので注意が必要です。

<img width=60% alt="RaspTFT.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2096509/8918b453-7dc3-4e5e-9b7b-5a1461ea670a.png">


ほかのデバイスで使用する場合、CSn(GP17)、SCK(GP18)、TX/MOSI(GP19)、RX/MISO(GP16)を接続してください。TXはマイコン→デバイスへの信号、RXはデバイス→マイコンへの信号用に用意されています。ただ、ST7735の場合はRXはマイコン→デバイスに対してData/Commandの区別をするために使用されます。

デバイス側の表記によっては、RXとTXの表記は逆になっている（デバイスから見て受信するピンがRX)場合があります。MOSI、MISOと表記されていることもあります。MISOは、Master(マイコン）In　Slave（液晶) Out なので、マイコン側にとってはRXに相当します。（多分）　この場合、液晶のMISOはマイコン側のRX(GP16)、液晶のMOSIはマイコン側のTX(GP19）に接続することになります。

## 実行
サンプルプログラムを実行すると次のようになります。

<iframe  height="480" src="https://www.youtube.com/embed/v5BqEl0JDaE" title="Japanese Text on Raspberry pi pico (Ardiuno IDE)  #raspberrypipico #ardiuno  #電子工作" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>


## ライブラリの改変

ライブラリのソースコードは、ダウンロードしたzipファイルに含まれています。この中を変更することで、ライブラリの動作を変更できます。

たとえば、次のようなことが可能です。

- 使用する日本語フォントのドット数を変更。8x8/12x12/16x16が使用できます。デフォルトでは12x12が使用されています。
- 使用する日本語フォントの種類を減らしてメモリを節約。デフォルトでは、JISで定義されているすべての文字が含まれています。
- より多くの英文フォントを追加。
- 不要なグラフィック機能を削ってメモリを節約

ソースコードや、変更方法の詳細はRapberry PI Pico用　ST7735 TFT液晶 SDKライブラリの、[実装にあわせた変更](https://qiita.com/BUBUBB/items/3caf2aefba4ae3a715e1#%E5%AE%9F%E8%A3%85%E3%81%AB%E3%81%82%E3%82%8F%E3%81%9B%E3%81%9F%E5%A4%89%E6%9B%B4) ページを参照してください。


# 権利に関する表記
このライブラリは、Adafruitのグラフィックライブラリを改変して作成されました。
元のライブラリは、2条項BSDライセンスに基づきソースコードの再配布が許可されています。

これに基づいて、本ライブラリの権利も同じ2条項BSDライセンスに基づくものとします。