Touchpads in Micropython mit ESP32 - erste Versuche

Aus Micropython Referenz
Zur Navigation springen Zur Suche springen

Die Informationslage ist sehr dürftig.

M5Stack Micropython[Bearbeiten | Quelltext bearbeiten]

Für M5Micropython habe ich nur etwas in der M5Community gefunden:

from machine import Pin, TouchPad
t8 = 0
touch8 = TouchPad(Pin(33))
t8 = touch8.read()

Die Informationen aus der UIFlow-IDE V. 2.x waren bisher nicht zielführend.

Micropython.org[Bearbeiten | Quelltext bearbeiten]

Unter docs.micropython.org finden sich zum ESP32 die folgenden Informationen:
(Übersetzt mit DeepL.com)

Kapazitive Berührung[Bearbeiten | Quelltext bearbeiten]

Verwenden Sie die TouchPad-Klasse im Modul machine:

from machine import TouchPad, Pin

t = TouchPad(Pin(14))
t.read()              # Returns a smaller number when touched

TouchPad.read gibt einen Wert relativ zur kapazitiven Variation zurück. Kleine Zahlen (typischerweise im Zehnerbereich) sind üblich, wenn ein Stift berührt wird, größere Zahlen (über eintausend), wenn keine Berührung vorliegt. Die Werte sind jedoch relativ und können je nach Board und Umgebung variieren, so dass eine gewisse Kalibrierung erforderlich sein kann.

Es gibt zehn kapazitive, berührungsempfindliche Pins, die auf dem ESP32 verwendet werden können: 0, 2, 4, 12, 13, 14, 15, 27, 32, 33. Der Versuch, andere Pins zuzuweisen, führt zu einem ValueError.

Beachten Sie, dass TouchPads verwendet werden können, um einen ESP32 aus dem Ruhezustand aufzuwecken:

import machine
from machine import TouchPad, Pin
import esp32

t = TouchPad(Pin(14))
t.config(500)               # configure the threshold at which the pin is considered touched
esp32.wake_on_touch(True)
machine.lightsleep()        # put the MCU to sleep until a touchpad is touched

Weitere Einzelheiten zu Touchpads finden Sie unter Espressif Touch Sensor.

Erster Test mit M5StampS3:[Bearbeiten | Quelltext bearbeiten]

Informationen zum M5StampS3.

MicroPython v1.20.0 on 2023-08-04; M5STACK with ESP32S3

Type "help()" for more information.

>>> import machine
    from machine import TouchPad, Pin
    import esp32
>>> t = TouchPad(Pin(6))
    t.read()
1973989   # offen
>>> t.read()
42660     # Finger auf Lötleiste gelegt
>>> 

Die grundsätzliche Funktion ist also gegeben!

Touchpins[Bearbeiten | Quelltext bearbeiten]

ESP32
Touchpad GPIO Pin
T0 GPIO 4
T1 GPIO 0
T2 GPIO 2
T3 MTDO - GPIO 15
T4 MTCK - GPIO 13
T5 MTDI - GPIO 12
T6 MTMS - GPIO 14
T7 GPIO 27
T8 32K_XN - GPIO 33
T9 32K_XP - GPIO 32


ESP32 S3
Touchpad GPIO Pin
T0 Internal channel, not connect to a GPIO
T1 GPIO 1
T2 GPIO 2
T3 GPIO 3
T4 GPIO 4
T5 GPIO 5
T6 GPIO 6
T7 GPIO 7
T8 GPIO 8
T9 GPIO 9
T10 GPIO 10
T11 GPIO 11
T12 GPIO 12
T13 GPIO 13
T14 GPIO 14

Ein erste Testprogramm[Bearbeiten | Quelltext bearbeiten]

Die UIFlow 2.x spezifischen Dinge habe ich nicht zum Laufen bekommen. Deshalb habe den Micropython Standard verwendet. Damit funktioniert es.
Allerdings sind die Module beim M5Stack-Micropython häufig in Packete gepackt, so dass erst der Weg für deren import gefunden werden muss.
Dieses Programm benutzt die im M5StampS3 eingebaute W2812-LED als Indikator. Wenn der Touchsensor - hier eine M4x6 Schraube - nicht berührt wird leuchtet sie rot. Wenn der Sensor berührt wird leuchtet sie grün.

# touch_test_003.py

# LED = Rot wenn nicht berührt
# LED = Grün wenn berührt

from machine import TouchPad, Pin
import esp32
import time
from hardware.rgb import NeoPixel     # M5 spezifisch

# Farben für gedrückt und nicht gedrückt definieren

col_ein = (0x00, 0xff, 0x00)     # grün
col_aus = (0xff, 0x00, 0x00)     # rot

# Pin 7 als Touchpad einrichten

t = TouchPad(Pin(7))

# Pin zum Ansteuern der eingebaute W2812-LED setzen

pin = Pin(21, Pin.OUT)   # set GPIO 21 to output to drive NeoPixels
np = NeoPixel(pin, 1) 

# Nichtberührt als Voreinstellung der LED setzten und ausgeben 

np[0] = col_aus
np.write() 

# Main Loop

while True:
    t_in = t.read()
    if t_in > 100000:     # Verbessern: Variable schwelle für Schwellwert einführen!
        np[0] = col_ein
        np.write()
    else:
        np[0] = col_aus
        np.write()
    time.sleep_ms(200)


Zusammenfassung[Bearbeiten | Quelltext bearbeiten]

Die Touchfunktion lässt sich relativ einfach mit den Standadmitteln von Micropython nutzen.
Es sind aber noch weitere Test erforderlich:

  • Ist ein externer Kondensator sinnvoll?
  • Wie groß sollte der Sensor sein?
  • Wie lässt sich eine Schutzabdeckung realisieren?


Navigation[Bearbeiten | Quelltext bearbeiten]

Zurück zur M5Micropython Startseite
Zurück zur Micropython Referenz Startseite