Tastatur für RP2040-GEEK


Anleitung getestet mit CircuitPython 10.0.3






Das Waveshare RP2040-GEEK Entwicklungsboard basiert auf dem RP2040 Mikrocontroller, mit 1.14 Zoll 65K Farb-LCD, TF-Kartensteckplatz, USB-Debugging-Downloader, im weißen Kunststoffgehäuse. Darüber hinaus ist es ausgestattet mit einem USB-A-Interface. Es bietet verschiedene Firmware für SWD-Port, UART-Port und I2C-Port. An der vierpoligen I2C/ADC Buchse ist der GPIO 28 nach außen geführt. Wenn Sie das mitgelieferte vieradrige Kabel verwenden, müssen Sie die Verbindung zur Tastaturplatine (blau - GP28, rot - VCC, schwarz - Masse, gelb ungenutzt) wie im Bild gezeigt herstellen.

Hardware

- Pico-Geek (z.B. von Botland )
- Analoges Keyboard Modul mit fünf Tasten(z.B. von Funduino )


Software

- aktuelle Firmware CircuitPython for Pico RP2040 by Raspberry Pi

Die 5 Tasten besetzen nur einen analogen Port (GP28), der auf Eingabe geschaltet wird. Die Signalauswertung erfolgt über unterschiedliche Widerstände auf der Tastaturplatine, wodurch die Tasten am analogen Eingangspin vom Mikrocontroller ausgewertet werden können. Die Werte werden als 16-Bit-Zahl (0-65535) für Spannungen zwischen 0V und 3,3V eingelesen. Da wir keine analogen Messwerte auswerten wollen, brauchen wir keine Referenz-Spannung und erfassen die 16-Bit-Zahl in einem relativ großen Bereich.

Wir benutzen folgenden kurzen Programmcode, um uns die Werte in der Thonny-IDE anzusehen:

  
  
1  import time
2  import board
3  import analogio
4
5  analogin = analogio.AnalogIn(board.GP28)
6
7  while True:
8      raw = analogin.value
9      print(raw)
10     time.sleep(0.2)
  

Bei meinen Versuchen ergaben sich folgende Werte:

Taste 1 : raw < 500
Taste 2 : raw > 2000 und raw < 5000
Taste 3 : raw > 5000 und raw < 7000
Taste 4 : raw > 10000 und raw < 15000
Taste 5 : raw > 20000 and raw < 30000
keine Taste gedrückt: raw > 60000


Machen Sie Ihre eigenen Tests und lassen sich im Display anzeigen, welche Taste gedrückt wurde.

Los gehts mit diesem Quellcode. Als erstes werden die Bibliotheken importiert, das Display initialisiert und der GP28 als analoger Eingang (Zeile 23) geschaltet. Die Funktion ab Zeile 25 wertet aus, welche Taste gedrückt wurde. Hier setzen Sie Ihre Werte ein, falls die von den angegebenen abweichen. Der Rest ist, damit es auf dem Display 'schön' aussieht.

  
  
1   import time
2   import board
3   import busio
4   import displayio
5   import terminalio
6   import fourwire
7   from adafruit_st7789 import ST7789
8   from adafruit_display_text import label
9   import analogio
10
11  # Display initialisieren
12  lcd_cs=board.GP9
13  lcd_dc=board.GP8
14  lcd_reset=board.GP12
15  # Release any resources currently in use for the displays
16  displayio.release_displays()
17  spi = busio.SPI(board.GP10, board.GP11)
18  display_bus = fourwire.FourWire(spi, command=lcd_dc, chip_select=lcd_cs, reset=lcd_reset)
19  display = ST7789(display_bus, rotation=90, width=240, height=135, rowstart=40, colstart=53)
20  main = displayio.Group()
21  display.root_group = main
22
23  analogin = analogio.AnalogIn(board.GP28)
24
25  def taste(raw, pressed):
26      if raw < 500:
27          pressed = 1
28      if raw > 2000 and raw < 5000:
29          pressed = 2
30      if raw > 5000 and raw < 7000:
31          pressed = 3
32      if raw > 10000 and raw < 15000:
33          pressed = 4
34      if raw > 20000 and raw < 30000:
35          pressed = 5
36      if raw > 60000:
37          pressed = 0
38      #print("raw = {:5d}".format(raw))
39      return pressed
40
41  # Make a background color fill
42  color_bitmap = displayio.Bitmap(display.width, display.height, 3)
43  color_palette = displayio.Palette(3)
44  color_palette[0] = 0x660088
45  color_palette[1] = 0x000000
46  color_palette[2] = 0xffffff
47  bg_sprite = displayio.TileGrid(color_bitmap, pixel_shader=color_palette, x=0, y=0)
48  main.append(bg_sprite)
49
50  label = label.Label(font = terminalio.FONT, text="", color=0xffffff, scale=3, line_spacing=0.9)
51  text = displayio.Group(x=30, y= 60)
52  text.append(label)
53  main.append(text)
54
55  pressed = 0
56
57  while True:
58      raw = analogin.value
59      pressed = taste(raw, pressed)
60      if pressed == 0:
61          label.text = "Pico - Geek\n Tastatur"
62      else:
63          label.text = " Taste " + str(pressed)
64      time.sleep(0.2)
  

So weit für den Augenblick. Mir fällt bestimmt, genau wie Ihnen, demnächst eine Anwendung dazu ein.


Viel Spass und Erfolg beim Ausprobieren.