編集履歴一覧に戻る
keiske-hongyoのアイコン画像

keiske-hongyo が 2025年03月16日16時04分25秒 に編集

初版

タイトルの変更

+

TinyGOを使用したグラフィック液晶(AQM1248)テストプログラム

タグの変更

+

tinygo

+

AQM1248A

+

GT20L16J1Y

記事種類の変更

+

セットアップや使用方法

ライセンスの変更

+

(GPL-3.0+) GNU General Public License, version 3

本文の変更

+

# はじめに 今回はTingyGOを使用してグラフィック液晶であるAQM1248Aの制御に取り組みました。また、グラフィック液晶に文字表示するにはキャラクタ液晶等は異なり、表示するための文字フォントデータが必要となります。そのため、フォントデータ漢字フォントROMであるGT20L16J1Yを使用してフォントデータを取得し、文字表示ができるようにしました。 # 使用部品 使用した部品は下の表の部品です。 | 使用部品 | 型番・値 | 購入先 | |:---|:---|:---| | マイコン | RaspberryPI PICO | 秋月電子 | | グラフィック液晶 | AQM1248A | 秋月電子 | | 漢字フォントROM | GT20L16J1Y | スイッチサイエンス | # 回路図 回路図は下の図のようになります。RaspberryPI PICOと漢字ROMやグラフィック液晶はSPIを使用してデータのやりとりを行います。 ![回路図](https://camo.elchika.com/9e0ced5dae43b1305f1f2df7e9d47f7d4bcd9ecb/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f33646164353039642d616133622d343132302d616433622d6638623565376137366139332f61626633333862622d316433372d343232652d626639652d613838353136653065383061/) # GT20L16J1Yについて GT20L16J1Yは半角の英数字や記号と第2水準までの漢字フォントのデータが格納されており、漢字についてはSJISコードをでフォントのデータを管理しています。Arduinoなど最近のエディタはUTF-8で漢字を管理しており、UTF-8をSJISに変換する必要があります。Go言語ではUTF-8をSJISに変換するライブラリがあるのでそれをインポートして、SJISに変換し、GT20L16J1Yから漢字フォントのでデータを読み出ししています。 ```golang:文字コード変換処理  // 文字コードの変換 t := japanese.ShiftJIS.NewEncoder() // ShiftJISエンコーダ sjisStr, _, err = transform.Bytes(t, []byte(str)) // コード変換処理 ``` # プログラムについて 動作確認用のプログラムです。下のプログラムはメインの部分だけです。AQM1248やGT20L16J1Y関係のプログラムは載せるとコードが長くなるので、私の[GitHubのリポジトリ](https://github.com/Keisuke-Hongyo/AQM1248)に置いてあるので見ていただけたらと思います。 ```golang:メインプログラム import ( "AQM1248/LcdProc" "fmt" "machine" "time" ) func timer1ms(ch chan<- bool) { for { time.Sleep(10 * time.Millisecond) ch <- true } } func main() { var err error var cnt uint8 var str string led := machine.LED led.Configure(machine.PinConfig{Mode: machine.PinOutput}) spi := machine.SPI0 err = spi.Configure(machine.SPIConfig{}) if err != nil { panic(err) } dc := machine.GP14 csn1 := machine.GP15 csn2 := machine.GP17 disp := LcdProc.New(spi, &csn1, &dc, &csn2) disp.Configure() ch := make(chan bool) go timer1ms(ch) for { select { case <-ch: cnt += 1 break } led.Low() time.Sleep(100 * time.Millisecond) led.High() time.Sleep(100 * time.Millisecond) disp.LcdPrint(0, 0, "漢字だよ") disp.LcdPrint(0, 16, "Test Program") str = fmt.Sprintf("Cnt=%d", cnt) disp.LcdPrint(0, 32, str) } } ``` # 最後に  今回はTinygoでAQM1248とGT20L16J1Yを使用した表示プログラムについて紹介しました。SPIで制御できるので簡単にできるのですが、GT20L16J1YはSJISコードでフォントデータを取得するので、UTF-8を使用していTinyGOのようにライブラリを使用すれば簡単にできますが、C言語ではUTF-8,SJISの変換が難しいとは思います。CH32Vでも取り組んでおり、フォントデータを取得するのは簡単できたのですが、UTF-8をSJISに変換するプログラムを考えています。よい方法があったら教えていただけたらと思います。