Maintenant que nous avons vu comment mettre en place un environnement qui permet de coder avec TinyGo pour la Pygamer, voyons ce que l'on peut faire de l'écran de cette console.

Vous l'avez peut être vu dans la documentation d'installation, mais il existe des modules rapidement essentiels au développement avec Tinygo.
Ces modules contiennent le code nécessaire pour piloter les différents aspects matériels des différentes plateformes.

Le projet TinyGo Drivers rassemble les principaux drivers dont vous aurez besoin.
Vous pouvez installer tout le nécessaire en suivant les informations du Readme, le tout se résumant à une commande :

go get tinygo.org/x/drivers

Pour manipuler l'écran de la Pygamer, la documentation TinyGo nous indique qu'il faut utiliser le driver pour le composant ST7735.
C'est ce que nous allons faire et sans plus attendre, le code du jour :

package main

import (
	"image/color"
	"machine"
	"time"

	"tinygo.org/x/drivers/st7735"
)

var red = color.RGBA{255, 0, 0, 255}
var green = color.RGBA{0, 255, 0, 255}

func main() {
	display := st7735.New(machine.SPI1, machine.TFT_RST, machine.TFT_DC, machine.TFT_CS, machine.TFT_LITE)
	machine.SPI1.Configure(machine.SPIConfig{
		Frequency: 16000000,
		SCK:       machine.SPI1_SCK_PIN,
		SDO:       machine.SPI1_SDO_PIN,
		SDI:       machine.SPI1_SDI_PIN,
	})
	display.Configure(st7735.Config{})

	i := 0
	for {
		display.FillScreen(green)
		time.Sleep(1 * time.Second)
		display.FillScreen(red)
		time.Sleep(1 * time.Second)
		i++
	}
}

Eliminons tout d'abord les lignes de codes qui sont nécessaires mais qui ne vous poseront pas de souci une fois copiées.
Le module est ajouté dans les import :

"tinygo.org/x/drivers/st7735"

Vous aurez alors à disposition tous les outils prévus par ce module pour allumer, contrôler des pixels...
Il suffit d'instancier un objet pour manipuler l'écran :

display := st7735.New(machine.SPI1, machine.TFT_RST, machine.TFT_DC, machine.TFT_CS, machine.TFT_LITE)
machine.SPI1.Configure(machine.SPIConfig{
		Frequency: 16000000,
		SCK:       machine.SPI1_SCK_PIN,
		SDO:       machine.SPI1_SDO_PIN,
		SDI:       machine.SPI1_SDI_PIN,
	})
display.Configure(st7735.Config{})

Les paramètres nécessaires correspondent aux broches impliquées dans le contrôle du composant ST7735.
Ce module peut être utilisé avec n'importe quel micro-contrôleur capable de piloter ce type d'écran, mais dans notre cas, le module machine de la Pygamer fournit des constantes explicites pour cela.
Il reste ensuite à paramétrer correctement le port SPI utilisé.
Là encore, les constantes existantes dans le module machine seront d'une grande aide.
Il faut ensuite s'assurer que l'objet display est bien configuré.

A partir de là, nous allons vérifier que nous avons bien la maîtrise de l'écran de manière simple : nous alternerons entre un écran vert et un écran rouge, toutes les secondes. Cela nous assurera du bon fonctionnement de notre configuration.
La fonction FillScreen permet un remplissage de l'écran basé sur une couleur RGBA.

Il n'y a plus qu'à lancer le flash comme précédemment :

tinygo flash -target=pygamer

Et voilà le résultat !

Comme toujours, vous trouverez cet exemple dans le repository TinyGo Examples.

A bientôt pour la suite avec une fois encore plein de lumières colorées ;)