Touchpads in Micropython mit ESP32 - erste Versuche
Die Informationslage ist sehr dürftig.
M5Stack Micropython
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()
Micropython.org
Unter docs.micropython.org finden sich zum ESP32 die folgenden Informationen:
(Übersetzt mit DeepL.com)
Kapazitive Berührung
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:
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
Touchpad | GPIO Pin |
---|---|
T0 | GPIO 4 |
T1 | GPIO 0 |
T2 | GPIO 2 |
T3 | MTDO |
T4 | MTCK |
T5 | MTDI |
T6 | MTMS |
T7 | GPIO 27 |
T8 | 32K_XN |
T9 | 32K_XP |
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
Die UIFlow 2.x spezifischen Dinge habe ich nicht zum Laufen bekommen. Deshalb habe den Micropython Standard verwendet. Damit funktioniert es.
Allerdingd 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 dere 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 col_ein = (0x00, 0xff, 0x00) col_aus = (0xff, 0x00, 0x00) t = TouchPad(Pin(7)) pin = Pin(21, Pin.OUT) # set GPIO0 to output to drive NeoPixels np = NeoPixel(pin, 1) np[0] = col_aus np.write() while True: t_in = t.read() if t_in > 100000: np[0] = col_ein np.write() else: np[0] = col_aus np.write() time.sleep_ms(200)
Zurück zur M5Micropython Startseite
Zurück zur Micropython Referenz Startseite