Das Objekt Pin

Aus Attraktor Wiki

Wechseln zu: Navigation, Suche

In Python ist alles ein Objekt und Objekte haben eine ID.

Nach dem Start

Direkt nach dem Einschalten sehen die Pins folgendermassen aus:

MicroPython v1.21.0 on 2023-10-06; Raspberry Pi Pico W with RP2040
Type "help()" for more information.

>>> from machine import Pin
>>> for i in range(30):
        print(i,id(Pin(i)),Pin(i))
    
0 268906036 Pin(GPIO0, mode=ALT, pull=PULL_DOWN, alt=31)
1 268905924 Pin(GPIO1, mode=ALT, pull=PULL_DOWN, alt=31)
2 268905812 Pin(GPIO2, mode=ALT, pull=PULL_DOWN, alt=31)
3 268905700 Pin(GPIO3, mode=ALT, pull=PULL_DOWN, alt=31)
4 268905588 Pin(GPIO4, mode=ALT, pull=PULL_DOWN, alt=31)
5 268905476 Pin(GPIO5, mode=ALT, pull=PULL_DOWN, alt=31)
6 268905364 Pin(GPIO6, mode=ALT, pull=PULL_DOWN, alt=31)
7 268905252 Pin(GPIO7, mode=ALT, pull=PULL_DOWN, alt=31)
8 268905140 Pin(GPIO8, mode=ALT, pull=PULL_DOWN, alt=31)
9 268905028 Pin(GPIO9, mode=ALT, pull=PULL_DOWN, alt=31)
10 268904916 Pin(GPIO10, mode=ALT, pull=PULL_DOWN, alt=31)
11 268904804 Pin(GPIO11, mode=ALT, pull=PULL_DOWN, alt=31)
12 268904692 Pin(GPIO12, mode=ALT, pull=PULL_DOWN, alt=31)
13 268904580 Pin(GPIO13, mode=ALT, pull=PULL_DOWN, alt=31)
14 268904468 Pin(GPIO14, mode=ALT, pull=PULL_DOWN, alt=31)
15 268904356 Pin(GPIO15, mode=ALT, pull=PULL_DOWN, alt=31)
16 268904244 Pin(GPIO16, mode=ALT, pull=PULL_DOWN, alt=31)
17 268904132 Pin(GPIO17, mode=ALT, pull=PULL_DOWN, alt=31)
18 268904020 Pin(GPIO18, mode=ALT, pull=PULL_DOWN, alt=31)
19 268903908 Pin(GPIO19, mode=ALT, pull=PULL_DOWN, alt=31)
20 268903784 Pin(GPIO20, mode=ALT, pull=PULL_DOWN, alt=31)
21 268903660 Pin(GPIO21, mode=ALT, pull=PULL_DOWN, alt=31)
22 268903536 Pin(GPIO22, mode=ALT, pull=PULL_DOWN, alt=31)
23 268903412 Pin(GPIO23, mode=ALT, alt=31)
24 268903288 Pin(GPIO24, mode=ALT, alt=31)
25 268903164 Pin(GPIO25, mode=ALT, pull=PULL_DOWN, alt=31)
26 268903052 Pin(GPIO26, mode=ALT, pull=PULL_DOWN, alt=31)
27 268902940 Pin(GPIO27, mode=ALT, pull=PULL_DOWN, alt=31)
28 268902828 Pin(GPIO28, mode=ALT, pull=PULL_DOWN, alt=31)
29 268902716 Pin(GPIO29, mode=ALT, pull=PULL_DOWN, alt=31)
>>> 

Die ID's der Pin-Objekte sind immer gleich! Egal, wann die Pins initialisiert werden, es bekommt jeder Pin immer dieselbe ID! Diese ID unterscheidet sich aber bei unterschiedlichen Micropython Versionen.

Weitere Untersuchungen

Die Instanz Pin(11) existiert, auch wenn GPIO11 noch nicht initialisiert worden ist:

>>> from machine import Pin
>>> id(Pin(11))
    268904804

Sie besitzt auch schon einige default Einstellungen:

>>> print(Pin(11))
    Pin(GPIO11, mode=ALT, pull=PULL_DOWN, alt=31)   # Nach einem Hardware-Reset

    Pin(GPIO11, mode=IN, pull=PULL_DOWN)            # Nach einem Software-Reset bleiben die vorherigen Einstellungen erhalten

Wenn eine Instanz von Pin erzeugt wird, so wird ihr ein Namen zugewiesen und ggf. die Einstellungen gesetzt:

>>> b_up = Pin(11, Pin.IN, Pin.PULL_DOWN)
>>> id(b_up)
    268904804
>>> print(b_up)
    Pin(GPIO11, mode=IN, pull=PULL_DOWN)

Eine solche Instanz kann auch mehrere Namen haben:

>>> x = b_up
>>> print(x)
    Pin(GPIO11, mode=IN, pull=PULL_DOWN)
>>> id(x)
    268904804

Es bleibt aber immer die selbe ID, also auch das selbe Objekt.
Das bestätigt auch Micropython selbst:

>>> Pin(11) == b_up
    True
>>> Pin(11) == x
    True
>>> Pin(11) is b_up
    True
>>> Pin(11) is x
    True

Objekt_und_Namen
Schematische Daratellung von Objekten und ihnen zugewiesenen Namen.
Demnach ist b_up.value() das Gleiche wie x.value()!

Diese Seite wurde zuletzt am 21. Januar 2024 um 10:57 Uhr geändert. Diese Seite wurde bisher 375 mal abgerufen.