Picopad - Display und Tasten


in Betrieb nehmen in CircuitPython



Anleitung getestet mit CircuitPython 10.0.3


Um das Picopad in CircuitPython zu nutzen, gebe ich hier die Pinouts für das Display und die Tasten an.

Display:
LCD_CS: GP21, LCD_RST: GP20, LCD_MOSI: GP19, LCD_SCK: GP18, LCD_DC: GP17, LCD_BL: GP16,

Tasten:
UP: GP4, DOWN: GP5, LEFT: GP3, RIGHT: GP2, X: GP9, Y: GP8, A: GP7, B: GP6,

Damit sieht der Quellcode für ein erstes kleines Testprogramm so aus:

  
  
1   import time
2   import board
3   import digitalio
4   import displayio
5   import busio
6   import fourwire
7   from adafruit_st7789 import ST7789
8   from adafruit_display_shapes.rect import Rect
9
10  # 2 Zoll 320x240 Waveshare Display
11  cs=board.GP21
12  dc=board.GP17
13  reset=board.GP20
14  bl=board.GP16
15  # Release any resources currently in use for the displays
16  displayio.release_displays()
17  spi = busio.SPI(board.GP18, board.GP19)
18  display_bus = fourwire.FourWire(spi, command=dc, chip_select=cs, reset=reset)
19  display = ST7789(display_bus, rotation=270, width=320, height=240, backlight_pin=bl, rowstart=0, colstart=0)
20  display.brightness = 1
21  main = displayio.Group()
22
23  # linke Seite
24  button_up = digitalio.DigitalInOut(board.GP4)
25  button_up.switch_to_input(pull=digitalio.Pull.UP)
26  button_down = digitalio.DigitalInOut(board.GP5)
27  button_down.switch_to_input(pull=digitalio.Pull.UP)
28  button_right = digitalio.DigitalInOut(board.GP2)
29  button_right.switch_to_input(pull=digitalio.Pull.UP)
30  button_left = digitalio.DigitalInOut(board.GP3)
31  button_left.switch_to_input(pull=digitalio.Pull.UP)
32
33  # rechte Seite
34  button_X = digitalio.DigitalInOut(board.GP9)
35  button_X.switch_to_input(pull=digitalio.Pull.UP)
36  button_Y = digitalio.DigitalInOut(board.GP8)
37  button_Y.switch_to_input(pull=digitalio.Pull.UP)
38  button_A = digitalio.DigitalInOut(board.GP7)
39  button_A.switch_to_input(pull=digitalio.Pull.UP)
40  button_B = digitalio.DigitalInOut(board.GP6)
41  button_B.switch_to_input(pull=digitalio.Pull.UP)
42
43  ## Make a background color fill for the weather
44  color_bitmap_temp = displayio.Bitmap(display.width, display.height, 3)
45  color_palette = displayio.Palette(1)
46  color_palette[0] = 0x660088
47  bg_sprite = displayio.TileGrid(color_bitmap_temp, pixel_shader=color_palette, x=0, y=0)
48  main.append(bg_sprite)
49
50  rect1 = Rect(60, 40, 40, 40, fill=0x666666)
51  main.append(rect1)
52  rect2 = Rect(60, 140, 40, 40, fill=0x666666)
53  main.append(rect2)
54  rect3 = Rect(110, 90, 40, 40, fill=0x666666)
55  main.append(rect3)
56  rect4 = Rect(10, 90, 40, 40, fill=0x666666)
57  main.append(rect4)
58
59  rect_X = Rect(200, 60, 40, 40, fill=0x666666)
60  main.append(rect_X)
61  rect_Y = Rect(270, 40, 40, 40, fill=0x666666)
62  main.append(rect_Y)
63  rect_A = Rect(200, 140, 40, 40, fill=0x666666)
64  main.append(rect_A)
65  rect_B = Rect(270, 120, 40, 40, fill=0x666666)
66  main.append(rect_B)
67
68  display.root_group = main
69
70  while True:
71      if button_up.value == False:
72          rect1.fill = 0xff0000
73      else:
74          rect1.fill = 0x666666
75      if button_down.value == False:
76          rect2.fill = 0xff0000
77      else:
78          rect2.fill = 0x666666
79      if button_right.value == False:
80          rect3.fill = 0xff0000
81      else:
82          rect3.fill = 0x666666
83      if button_left.value == False:
84          rect4.fill = 0xff0000
85      else:
86          rect4.fill = 0x666666
87      if button_X.value == False:
88          rect_X.fill = 0xff0000
89      else:
90          rect_X.fill = 0x666666
91      if button_Y.value == False:
92          rect_Y.fill = 0xff0000
93      else:
94          rect_Y.fill = 0x666666
95      if button_A.value == False:
96          rect_A.fill = 0xff0000
97      else:
98          rect_A.fill = 0x666666
99      if button_B.value == False:
100         rect_B.fill = 0xff0000
101     else:
102         rect_B.fill = 0x666666
  

In den Zeilen 10 bis 21 wird das Display initialisiert. Die Tasten auf der linken Seite werden in den Zeilen 23 bis 31 definiert und die der rechten Seite in den Zeilen 33 bis 41. Zur Anzeige der Position auf dem Display werden acht kleine graue Rechtecke dargestellt (Zeilen 50 bis 68). In der 'while'-Schleife wird nun geprüft, ob einer der Button gedrückt wurde. Ist dies der Fall, ändert das Kästchen seine Farbei auf rot, solange der Button gedrückt wird. Eine weitere Funktion hat dieser Test nicht.

Viel Spass und Erfolg beim Ausprobieren.