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](/images/thumb/1/17/Objekt_und_Namen.jpg/214px-Objekt_und_Namen.jpg)
Schematische Daratellung von Objekten und ihnen zugewiesenen Namen.
Demnach ist b_up.value() das Gleiche wie x.value()!