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

keiske-hongyo が 2025年05月12日17時42分28秒 に編集

コメント無し

本文の変更

# はじめに 前回は[TinyGOを使用したグラフィック液晶(AQM1248)テストプログラム](https://elchika.com/article/d90c9c89-dad1-40bf-8736-b387cc6898f2/)でモノクロのグラフィック液晶について紹介しました。今回は、カラーグラフィック液晶であるili9341を使用した制御プログラムを紹介します。また、漢字も表示できるようにGT20L16JTYを漢字や全角の平仮名や片仮名も表示できるようにしています。合わせて、ili9341をタッチ制御もできるのでタッチ制御についても確認してみました。 # 使用部品 今回使用する部品の一覧です。 | 部品名 | 型番・値 | 備考 | |:---:|:---|:---| | マイコン | Raspberry pi pico | | | グラフィックLCDモジュール |MSP2807 | カラーLCD 320×240 タッチパネル SDカード | | 漢字フォントROM | GT20L16JTY |         | | 接続用コネクタ | B12B-XH-A | JST XH端子コネクタ| # 回路について 今回の回路図になります。 ![回路図](https://camo.elchika.com/55d84b456d86661a122d54418696e0ce19e06e03/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f33646164353039642d616133622d343132302d616433622d6638623565376137366139332f62636139373231352d336336342d343735662d616362342d633632373639636662353130/) SPIで通信を行い、画面表示の制御しています。また、タッチパネルやSDカードもSPIで通信ができるようにしています。 はじめはこの回路をブレッドボードで製作しましたが今後の利用のことを考え、プリント基板化しました。 ![プリント基板](https://camo.elchika.com/02be9f91268554427cf0ba0db6a9f52f7b880449/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f33646164353039642d616133622d343132302d616433622d6638623565376137366139332f31616134316337352d326331382d346133632d396438372d633237636132623062343239/) 部品を取り付けた写真です。 ![部品取り付け](https://camo.elchika.com/453bba225c69cebcbcbb8cc1dab309abff861ead/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f33646164353039642d616133622d343132302d616433622d6638623565376137366139332f66636634633639632d653633372d343534392d626264352d633561666462323564656561/) # プログラムについて 今回もTinyGoを使用して、プログラムを惑星しました。カラー液晶のILI9341をについては、Tinygoのドライバがあるので下のコマンドでインストールしてください。 ```golang:driversのインストール go get tinygo.org/x/drivers ```

-

また、タッチパネルや漢字ROMについては[github](https://github.com/Keisuke-Hongyo/ili9341TestBoard)にあるので、そちらからダウンロードをしてもらえたらと思います。

+

また、タッチパネルや漢字ROMについては[github](https://github.com/Keisuke-Hongyo/ili9341TestBoard)にあるので、そちらからダウンロードをしてもらえたらと思います。

メインルーチンを掲載しておきます。今回のサンプルは液晶の表示とタッチされた時の座標の表示、ある範囲に表示している文字をタッチすると赤色で表示するようにしています。 ```golang:main.go package main import ( "fmt" "ili9341/lcdProc" "machine" "time" "tinygo.org/x/drivers/ili9341" ) func timer1ms(ch chan<- bool) { for { time.Sleep(1 * time.Millisecond) ch <- true } } func main() { var cnt uint8 = 0 var str string machine.SPI0.Configure(machine.SPIConfig{ Frequency: 24000000, }) display := lcdProc.New( machine.SPI0, // SPI Bus machine.GP15, // DC machine.GP17, // CS machine.GP14, // Reset machine.GP12, // Touch CSN machine.GP13, // Tocuh IRQ machine.GP11, // KanjiFont CSN ) display.Touch.SetTouchIqr() display.Lcd.SetRotation(ili9341.Rotation90) width, height := display.Lcd.Size() display.Lcd.FillRectangle(0, 0, width/2, height/2, lcdProc.White) display.Lcd.FillRectangle(width/2, 0, width/2, height/2, lcdProc.Red) display.Lcd.FillRectangle(0, height/2, width/2, height/2, lcdProc.Green) display.Lcd.FillRectangle(width/2, height/2, width/2, height/2, lcdProc.Blue) display.Lcd.FillRectangle(width/4, height/4, width/2, height/2, lcdProc.Black) ch := make(chan bool) go timer1ms(ch) for { select { case <-ch: cnt++ break } str = fmt.Sprintf("w = %3d h=%3d", width, height) display.LcdPrint(100, 100, str, lcdProc.Orange, lcdProc.Black) str := fmt.Sprintf("カウント = %3d", cnt) display.LcdPrint(100, 130, str, lcdProc.White, lcdProc.Black) if display.GetTouch() { str = fmt.Sprintf("Not tocuched ") display.LcdPrint(100, 150, str, lcdProc.White, lcdProc.Black) display.LcdPrint(120, 200, "ここをタッチ", lcdProc.Red, lcdProc.Black) } else { x, y := display.GetPos() str = fmt.Sprintf("x=%4d y=%4d", x, y) display.LcdPrint(100, 150, str, lcdProc.White, lcdProc.Black) if (x > 120 && x < 220) && (y > 200 && x < 216) { // 文字の範囲内 display.LcdPrint(120, 200, "タッチ!!!", lcdProc.White, lcdProc.Black) } else { // 文字の範囲外 display.LcdPrint(120, 200, "ここをタッチ", lcdProc.Red, lcdProc.Black) } } } } ``` 画面表示を高速にするためにSPIのクロックを24MHzにしていますが、タッチパネル制御のICはその速度に対応していないので16MHzにし、変更して制御しています。そのため、画面表示とタッチパネルの制御を行う前にSPIのクロックを変更しています。 # 最後に 今回はTinyGoでタッチパネル機能付きのカラー液晶の制御について紹介しました。前回の[TinyGOを使用したグラフィック液晶(AQM1248)テストプログラム](https://elchika.com/article/d90c9c89-dad1-40bf-8736-b387cc6898f2/)では表示画面が狭く、カラーが利用できないので、色々な場面で利用できると思います。ArduinoやMicroPythonがライブラリが充実して簡単にプログラムが作成できるので利用している人が多いとは思いますが、TinyGoもライブラリが多くあり、シンプルで書きやすいプログラム言語なので興味を持たれた方はチャレンジしてほしいと思います。