Das Objekt Pin: Unterschied zwischen den Versionen

Aus Attraktor Wiki

Wechseln zu: Navigation, Suche
(Nach dem Start)
Zeile 6: Zeile 6:
 
MicroPython v1.21.0 on 2023-10-06; Raspberry Pi Pico W with RP2040
 
MicroPython v1.21.0 on 2023-10-06; Raspberry Pi Pico W with RP2040
 
Type "help()" for more information.
 
Type "help()" for more information.
 +
 
>>> from machine import Pin
 
>>> from machine import Pin
 
>>> for i in range(30):
 
>>> for i in range(30):
    print(i,id(Pin(i)),Pin(i))
+
        print(i,id(Pin(i)),Pin(i))
 
      
 
      
 
0 268906036 Pin(GPIO0, mode=ALT, pull=PULL_DOWN, alt=31)
 
0 268906036 Pin(GPIO0, mode=ALT, pull=PULL_DOWN, alt=31)

Version vom 19. Januar 2024, 10:06 Uhr

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 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=IN, pull=PULL_DOWN)

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 elbst:

>>> 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()!