TigerJython4Kids | Robotique
Robotik
|
Modul import: from oxosnake import *
(Real- und Simulationsmodus)
(Bemerkung: Wegen beschränktem Speicher können nicht gleichzeitig oxosnake und oxocard, oxocardext importiert werden.)
Globale Konstanten und Funktionen:
RED = (255, 0, 0), GREEN = (0, 255, 0), BLUE = (0, 0, 255), BLACK = (0, 0, 0), WHITE = (255, 255, 255),
YELLOW = (255, 255, 0), CYAN = (0, 255, 255), MAGENTA = (255, 0, 255)
BASE_COLORS = (RED, GREEN, BLUE, WHITE, YELLOW, CYAN, MAGENTA)
Funktion | Aktion |
makeSnake() | erzeugt eine Schlange und stellt sie dar. Diese besitzt einen Kopf (head) und einen nachfolgenden Schwanz (tail)), der beliebig lang sein kann |
makeSnake(name = "Monty", size = 4, pos = (1. 4), headColor = (255, 0, 0), tailColor = (0, 200, 0), penColor = (0, 0, 255), bgColor = (0, 0, 0), heading = 0, speed = 50, hidden = False, penDown = False, dim = 1) |
optionale benannte Parameter und ihre Standardwerte (heading: Winkel in Grad zu Norden im Uhrzeigersinn in 45 Grad Schritten) |
forward(steps) |
bewegt die Schlange um die Anzahl Schritte vorwärts. Ohne Parameter steps = 1 |
left(angle) |
ändert die Blickrichtung um gegebenen Winkel im Gegenuhrzeigersinn (in 45 Grad Schritten) |
right(angle) |
ändert die Blickrichtung um gegebenen Winkel im Uhrzeigersinn (in 45 Grad Schritten) |
getName() |
liefert den Namen der Schlange zurück |
setName(name) |
setzt den Namen der Schlange |
setSpeed(speed) |
setzt die Geschwindigkeit |
getX() |
gibt die x-Koordinate des Kopfs zurück |
getY() |
gibt die y-Koordinate des Kopfs zurück |
getPos(x, y) |
gibt die Position des Kopfs als Tupel zurück |
setPos(x, y) |
setzt den Kopf an die gegebene Position (Parallelverschiebung des Schwanzes) |
setPos(liste) |
setzt den Kopf an die gegebene Position |
setHeading(dir) |
setzt die Blickrichtung. Winkel zu Norden im Uhrzeigersinn in 45 Grad Schritten |
getHeading() |
gibt die Blickrichtung zurück. Winkel zu Norden im Uhrzeigersinn in 45 Grad Schritten |
penDown() |
setzt den Stift beim Kopf ab, sodass bei nachfolgenden Bewegungen eine Spur gezeichnet wird |
penUp() |
hebt den Stift ab, sodass keine Spur gezeichnet wird |
show() |
macht die Schlage ist sichtbar |
hide() |
macht die Schlage unsichtbar (sie ist immer noch vorhanden und eine Spur wird immer noch gezeichnet) |
isHiden() |
gibt True zurück, falls die Schlange unsichtbar ist |
clean() |
löscht alle Spuren, lässt aber die Schlage, wo sie ist |
getSize() |
liefert die Länge der Schlange (Kopf + Schwanz) |
setHeadColor(color) |
setzt die Kopffarbe |
setTailColor(color) |
setzt die Schwanzfarbe |
setPenColor(color) |
setzt die Spurfarbe |
setBgColor(color) |
setzt die Hintergrundfarbe |
shortenTail() |
schneidet das letzte Schwanzelement ab (falls die Schlange länger als 1 ist) |
growTail() |
Fügt ein zusätzliches Schwanzelement an (erst sichtbar bei der nächsten Bewegung) |
intersect() |
gibt True zurück, falls sich der Kopf auf einem der Schwanzelemente befindet; sonst wird False zurückgegeben |
inPlayground() |
gibt True zurück, falls sich eines der Schlangenelement noch im sichtbaren Bereich befindet,: sonst wird False zurückgegeben |
headInPlayground() |
gibt True zurück, falls sich der Schlangenkopf noch im sichtbaren Bereich befindet,: sonst wird False zurückgegeben |
spot(color) |
setzt den Pixel des Hintergrunds an der aktuellen Position des Schlangenkopfs auf die gegebene Farbe. Die Schlange liegt "oberhalb", d.h. verdecken die so gesetzten Pixels |
dot(x, y, color) |
setzt den Pixel des Hintergrundes an der Position (x, y) auf die gegebene Farbe. Die Schlange liegt "oberhalb", d.h. verdeckt die so gesetzten Pixel |
getRandomColor() |
gibt eine zufällige Farbe aus BASE_COLORS zurück. Bei jedem Aufruf wird eine andere Farbe zurückgegeben, bis alle 7 Farben abgerufen sind |
getRandomPos() |
gibt eine zufällige Position als Tupel zurück. Bei jedem Aufruf wird eine andere Position zurückgegeben, bis alle 64 Positionen abgerufen sind. |
reduceBrightness(color, reduction) |
dividiert alle 3 Farbkomponenten um den Faktor r und gibt die neue Farbe zurück. Falls eine Komponente grösser als 0 ist, wird mindestens 1 zurückgegeben, damit die Farbart erhalten bleibt |
rgbToInt(color) |
gibt das gegebenen RGB-Tupel als Int-Farbwert zurück |
intToRGB(color) |
gibt den gegebenen Int-Farbwert als RGB-Tupel zurück |
dim(dimFactor) |
dividiert die 3 Farbkomponenten mit den gegebenen Factor (falls eine Komponente > 0 ist, wird sie nie kleiner als 1, damit die Farbart erhalten bleibt) |
enableRepaint(False) |
unterdrückt das automatische Rendern des Bildbuffers nach jeder Schlangenbewegung. Es muss mit repaint() selbst gerendert werden. forward(n) mit n > 1 wird als nicht mehr als n Einzelschritte aufgefasst |
repaint() |
rendert den aktuellen Bildbuffer |
dispose() |
gibt alle Ressourcen frei und vergrössert dadurch den freien Speicherplatz |
Klasse Snake
Es können mehrere Schlangen erzeugt werden. Die zuletzt bewegte Schlange liegt über den anderen und ist vollständig sichtbar.
Funktion | Aktion |
snake = Snake(name = "Monty", size = 4, pos = (1. 4), headColor = (100, 0, 5), tailColor = (0, 70, 5), penColor = (0, 0, 30), bgColor = (0, 0, 0), heading = 0, speed = 50, hidden = False, penDown = False, dim = 1) | erzeugt ein Snakeobjekt mit den optionalen benannten Paramatern |
Alle oben angegebene Funktionene sind auch als Methoden verfügbar. Zusätzlich:
in Touch(nake1, snake2) | gibt True zurück, falls ein Segment der Schlange snake1 und ein Segment der Schlange snake2 übereinander liegen |
Modul import: from oxocard import *
(Real- und Simulationsmodus)
(Bemerkung: Zur Einsparung von Hauptspeicherplatz enthält dieser Import die unten mit (*) bezeichneten Funktionen nicht. Für die volle Unterstützung muss importiert werden: from oxocardext import * . Dabei kann es aber bei längeren Programmen einen Memory overflow geben.)
Die Oxocard hat einen 8x8 pixel grosse Matrix mit Farb-LEDs (Neopixels). Diese wird durch die Klasse abstrahiert, die einen 24x24 pixel grossen Bildbuffer (Canvas genannt) mit int Farbwerten für die Farbkomponenten r, g, b mit je einem Bereich von 0..255 enthält.
Es wird ein 8x8 pixel grosser Ausschnitt davon (Window genannt) auf den LEDs dargestellt. Canvas und Window haben ein Koordinatensystem, um die einzelnen Pixel zu identifizieren. Der Ursprung liegt bei beiden oben links und die x-Koordinatenachse zeigt nach links und die y-Koordinatenachse nach unten. Standardmässig liegt der Ursprung des Koordinatensystem beim (x', y') = (8, 8) also ist das Windows im Canvas zentriert. Mit setOrigin(x, y) kann der Ursprung (Origin) des Windows an die Stelle (x, y) des Canvas verschoben werden. Die Koordinaten für alle Zeichnungsoperationen sind zwar Windowkoordinaten, werden aber unter Berücksichtigung des aktuellen Origin im Canvas durchgeführt. Canvas-Koordinaten ausserhalb 0..23, 0.23 werden ignoriert.
|
Damit stehen im Canvas insgesamt 9 8x8 pixel grosse Bildbereiche (engl Frames) zur Verfügung, die sich im Window darstellen lassen. Die Frames haben eine Nummerierung von 0..7.
Grundsätzlich werden alle Zeichnungsoperation im Bildbuffer ausgeführt. Damit sie auch tatsächich auf dem Neopixel-Display sichtbar werden, muss der Bildbuffer auf den LEDs angezeigt werden, was man rendern nennt. Das Rendering wird mit der Methode repaint() durchgeführt. Standardmässig ist das automatische Rendering eingeschaltet. Dabei wird bei jeder Zeichnungsoperation das repaint() automatisch aufgerufen. Oft möchte man bestimmte Zeichnungsoperationen zusammenfassen, bevor man sie als Ganzes sichtbar macht. Dazu schaltet man mit enableRepaint(False) das automatische Rendering aus und führt es an der gewünschten Stelle mit repaint() selbst aus. Es darf ausserhalb des Canvas gezeichnet werden, wobei solche Pixels unsichtbar bleiben. |
Globale Konstanten und Funktionen::
RED = (250, 0, 0), GREEN = (0, 250, 0), BLUE = (0, 0, 250), BLACK = (0, 0, 0), WHITE = (255, 255, 255),
YELLOW = (255, 255, 0), CYAN = (0, 255, 255), MAGENTA = (255, 0, 255)
BASE_COLORS = (RED, GREEN, BLUE, WHITE, YELLOW, CYAN, MAGENTA)
Funktion | Aktion |
clear(), clear(color) |
setzt alle Pixels des Canvas auf die Farbe color. Ohne Parameter werden alle Pixels gelöscht (color = BLACK) |
*clearWindow(), *clearWindow(color) |
setzt den Bereich des Canvas, über dem das aktuelle Window liegt, auf die Farbe color. Ohne Parameter werden die Pixels gelöscht (color = BLACK) |
*clearFrame(frameNumber) *clearWindow(frameNumber, color) |
setzt die Pixels des gegebenen Frames auf color. Ohne Parameter werden die Pixels gelöscht (color = BLACK) |
setOrigin(x, y) |
setzt den Ursprung des Windows auf x, y (auch Punktliste/Tupel). x, y sind positive oder negative Integers. Liegen die Pixels ausserhalb des 24x24 pixel-Bereichs, sind die Pixels schwarz |
getOrigin() |
gibt den Origin als Tupel zurück |
*setFrame(frameNumber) |
setzt das Window auf das gegebene Frame |
dim(dimFactor) |
vermindert die Farbwerte aller Pixels um den gegebenen Faktor. Falls eine gegebene Komponente > 0 ist, wird die reduzierte Farbkomponente nicht kleiner als 1, damit die Farbart erhalten bleibt |
enableRepaint(False) |
deaktiviert das automatische Neuzeichnen (Rendering) des Windows |
repaint() |
zeichnet das Window neu |
dot(x, y, color) |
setzt ein einzelnes Pixel des Canvas an der Position x, y auf die gegebene Farbe |
*line(x, y, dir, length, color) |
zeichnet eine Linie beginnend an der Position x, y in der gegebenen Richtung mit gegebener Länge und Farbe (dir hat die Werte 0: Ost, 1: Nord-Ost, 2: Nord, 3: Nord-West, 4: West, 5: Süd-West, 6: Süd, 7: Süd-Ost) |
*arrow(x, y, dir, length, color) |
zeichnet einen Pfeil beginnend an der Position x, y in der gegebenen Richtung mit gegebener Länge und Farbe (dir hat die Werte 0: Ost, 1: Nord-Ost, 2: Nord, 3: Nord-West, 4: West, 5: Süd-West, 6: Süd, 7: Süd-Ost) |
*rectangle(ulx, uly, w, h, color) |
zeichnet ein Rechteck mit gegebener oberen linken Ecke ulx, uly mit Breite h und Höhe h in der gegebenen Farbe |
*fillRectangle(ulx, uly, w, h, color) |
zeichnet ein gefülltes Rechteck mit gegebener oberen linken Ecke ulx, uly mit Breite h und Höhe h in der gegebenen Farbe |
*circle(xcenter, ycenter, r, color) |
zeichnet einen approximativen Kreis mit gegebenem Zentrum xcenter, ycenter und Radius r in der gegebenen Farbe |
*fillCircle(xcenter, ycenter, r, color) |
zeichnet einen approximativen gefüllten Kreis mit gegebenem Zentrum xcenter, ycenter und Radius r in der gegebenen Farbe |
getColor(x, y) |
gibt den Farbwert des Canvas an der Stelle (x, y) zurück. Befindet sich (x, y) ausserhalb des Canvas, wird (0, 0, 0) (BLACK) zurückgegeben |
getColorInt(x, y) |
gibt den Farbwert des Canvas an der Stelle (x, y) zurück (als Integer). Befindet sich (x, y) ausserhalb des Canvas, wird zurückgegeben |
image(matrix) |
setzt die Pixels aus der gegebenen Pixelmatrix im Bildbuffer ein. Die Einsetzung beginnt beim aktuellen Origin. matrix ist eine Liste oder ein Tupel in folgendem Format: |
*translate(vector) |
verschiebt die Pixels des ganzen Canvas um den gegebenen Verschiebungsvektor. Pixels, die von ausserhalb hineingeschoben werden, sind schwarz |
*rotate(centerx, centery, angle) |
dreht die Pixel des Canvas mit dem gegebenen Rotationsmittelpunkt (Windowkoordianten) um den gegeben Winkel (in Grad im Uhrzeigersinn). Pixels, die von ausserhalb hineingeschoben werden, sind schwarz |
insertBigChar(char, charColor, bgColor) |
stellt ein Zeichen mit Zeichen- und Hintergrundfarbe mit grossem Font dar. Defaults: charColor = (255, 255, 255), bgColor = (0, 0, 0) |
display(chars, charColor, bgColor) |
stellt bis maximal zwei Zeichen von chars mit Zeichen- und Hintergrundfarbe dar (Zahlen werden in Strings umgewandelt). Wird ein negativer Integer übergeben, erscheint ein Minuszeichen unter der linken Ziffer. Defaults: charColor = (255, 255, 255), bgColor = (0, 0, 0) |
bigTextScroll(text, textColor, bgColor, speed) |
zeigt mit grossem Font einen nach links scrollenden Text mit gegebener Zeichen- und Hintergrundfarbe an. Dieser wird mit einer einstellbaren Geschwindigkeit im Bereich 1..12 verschoben. Defaults: textColor = (255, 255, 255), bgColor = (0, 0, 0), speed = 6) |
smallTextScroll(text, textColor, bgColor, speed) |
zeigt mit kleinem Font einen nach links scrollenden Text mit gegebener Zeichen- und Hintergrundfarbe an. Dieser wird mit einer einstellbaren Geschwindigkeit im Bereich 1..12 verschoben. Defaults: textColor = (150, 150, 150), bgColor = (0, 0, 0), speed = 5) |
getArray() |
gibt den 24x24 pixel Canvas als Tupel mit Zeilentupels der Farbwerte zurück |
rgbToInt(color) |
gibt das gegebenen RGB-Tupel als Int-Farbwert zurück |
intToRGB(color) |
gibt den gegebenen Int-Farbwert als RGB-Tupel zurück |
reduce(color, r) |
dividiert alle 3 Farbkomponenten um den Faktor r und gibt die neue Farbe zurück. Falls eine Komponente grösser als 0 ist, wird mindestens 1 zurückgegeben, damit die Farbart erhalten bleibt |
getRandomColor() |
gibt eine zufällige Farbe aus BASE_COLORS zurück. Bei jedem Aufruf wird eine andere Farbe zurückgegeben, bis alle 7 Farben abgerufen sind |
getRandomPos() |
gibt eine zufällige Position als Tupel zurück. Bei jedem Aufruf wird eine andere Position zurückgegeben, bis alle 64 Positionen abgerufen sind. |
dispose() |
gibt alle Ressourcen frei und vergrössert dadurch den freien Speicherplatz |
Modul import: from oxobutton import *
(Real- und Simulationsmodus)
Tasten Identifikationen: BUTTON_L1, BUTTON_L2, BUTTON_L3, BUTTON_R1, BUTTON_R2, BUTTON_R3
Funktion | Aktion |
button = Button(buttonID) | erzeugt einen Button mit gegebener ID |
button = Button(buttonID, callback) | erzeugt einen Button mit gegebener ID und einer Callbackfunktion |
button.isPressed() | liefert True, falls der Button momentan gedrückt ist; sonst False |
button.wasPressed() | liefert True, falls der Button seit dem letzten Aufruf geklickt wurde; sonst False |
Modul import: from oxoaccelerometer import *
(Real- und Simulationsmodus, im Simulationsmodus muss auch das Modul oxocard importiert werden)
Funktion | Aktion |
acc = Accelerometer.create() | erzeugt einen Sensor mit Standardwerten: trigger_level = 10, rearm_time = 0.2, single-click auf allen 3 Achsen und keinem Callback und gibt seine Referenz zurück |
acc = Accelerometer.create(callback) | dasselbe unter Angabe einer Callbackfunktion |
acc = Accelerometer.create(callback, trigger_level = 10, rearm_time = 0.2, click_config = SINGLE_CLICK_X | SINGLE_CLICK_Y | SINGLE_CLICK_Z) | dasselbe mit benannten Parametern: |
acc.get() | gibt ein Tupel mit 3 Float-Werten der Beschleunigungskomponenten (acc_x, acc_y, acc_z) zurück (in m/s^2 im Bereich +-2g) |
acc.getX() | gibt die x-Komponente der Beschleunigung zurück (in m/s^2 im Bereich +-2g) |
acc.getY() | gibt die y-Komponente der Beschleunigung zurück (in m/s^2 im Bereich +-2g) |
acc.getZ() | gibt die z-Komponente der Beschleunigung zurück (in m/s^2 im Bereich +-2g) |
acc.getRoll() | gibt den Drehwinkel bei einer Seitwärtsdrehung (in Grad im Bereich -90° bis +90°) |
acc.getPitch() | gibt den Drehwinkel beim Kippen nach vorne, bzw. nach hinten (in Grad im Bereich -90° bis +90°) |
acc.wasClicked() | gibt True zurück, falls der Sensor seit dem letztem Aufruf einen Clickevent erfahren hat; sonst False |
acc.getTemperature() | gibt die Temperatur des Chips zurück (in Grad Celsius, Genauigkeit +- 2 degC) |
acc.dispose() | gibt alle Ressourcen frei |
Modul import: from tcpcom import *
(nur Realmodus)
Klasse Wlan (alle Methoden static):
Funktion | Aktion |
Wlan.connect(ssid, pwd, timeout = 10, verbose = False) | verbindet mit einem Accesspoint (Hostspot, WLAN Router) mit gegebenen SSID und Passwort. Gibt True zurück, falls die Verbindung innerhalb des gegebenen Timeout (in sec) gelingt; sonst wird False zurückgegeben. Mit verbose = True werden Debuginformationen ausgeschrieben |
Wlan.isWlanConnected() | gibt True zurück, falls eine Verbindung zum Accesspoint besteht |
Wlan.getIfConfig() | gibt ein Tupel (IP_address, mask, gateway_ip) zurück; None, falls keine Verbindung besteht |
Wlan.getMyIPAddress() | gibt die IP-Adresse zurück, die der Accesspoint vergeben hat; leerer String, falls keine Verbindung besteht |
Wlan.scan() | gibt ein Tupel mit Netzwerkinfos über alle gefundenen Accesspoints zurück. Format: ssid (string), channel (int), rssi Signalstärke in dB (int) |
Wlan.activateAP(ssid = "ESP", password = "aabbaabbaabb", channel = 10, verbose = False) | aktiviert einen Accesspoint mit gegebenen SSID, Passwort und Kanal (1..13). Für password = "" (leer) ist der Zugang passwortfrei |
Modul import: from mqttclient import MQTTClient
(nur Realmodus)
Klasse MQTTClient (abgeleitet von umqtt.simple.MQTTClient)
(siehe: http://github.com/micropython/micropython-lib/tree/master/umqtt.simple)
Funktion | Aktion |
client = MQTTClient(host, port = 0, user = None, password = None) |
erzeugt einen MQTT Client unter Angabe der Broker IP- Adresse. Falls nötig, werden die mitgegebenen Authentifizierungsangaben verwendet. Die Verbindung wird noch nicht hergestellt |
client.connect(cleanSession = True) | erstellt eine Verbindung zum Broker. Falls cleanSession = True ist, werden alle vorher gesendeten Daten des gleichen Clients gelöscht |
client.ping() | sendet einen Ping-Request an den Server, damit dieser die Verbindung offen hält |
client.publish(topic, payload, retries = 10, retain = False, qos = 0) | sendet zum gegebenen Topic eine Message (payload). Falls die Verbindung nicht mehr offen ist, wird so oft ein neues connect() gemacht, bis die Zahl retries erreicht ist. Falls retain = True wird diese Message als die letzte good/retain Message betrachtet. qos ist der Quality of Service level (nur 0, 1 unterstützt). Gibt True zurück, falls das Publish erfolgreich war; False, falls die Verbindung nicht mehr aufgebaut werden konnte |
client.setCallback(onMessageReceived) | registriert die Callbackfunktion onMessageReceived(), die beim Erhalt einer Message aufgerufen wird (Funktionsname beliebig) |
onMessageReceived(topic, payload) | oben registrierte Callbackfunktion mit den Parametern topic und payload (type: string) |
client.subscribe(topic, qos = 0 | abonniert das gegebene Topic mit dem gegegeben qos level (siehe bei publish()) |
client.disconnect() | schliesst die Verbindung und beendet den internen Subscriber Poll Thread |
Modul import: from music import*
(nur Realmodus)
Funktion | Aktion |
playTone(frequency, duration) | spielt einen Ton mit gegebener Frequenz (in Hz) und Dauer (in ms) ab. Frequenzbereich: ca. 100 - 1500 Hz. Die Frequenz kann auch in Notennotation (als String) angegeben werden: 'r', 'C', 'C#', 'D'...,'c', c#, d...,'c2','c2#','d2'...,'c3'. 'r' ist eine Pause, 'C' Beginn der Oktave mit 131 Hz, 'c' Beginn der Oktave bei 262 Hz, 'c2' Beginn der Oktave bei 523 Hz, 'c3': 1046 Hz. Hinter der Notenangabe kann ein Doppelpunkt und ein Verlängerungsfaktor für die Dauer angegeben werden. Beispiel einer Notensequenz: |
playSong(song, duration = 150) | spielt die Töne in der Notenliste (oder Tupel) song mit gegebener Dauer duration ab. |
beep(n, frequency = 1000) | spielt n kurze Tonsignale mit gegebener Frequenz ab |
Vordefinierte Songs:
ENTERTAINER, RINGTONE, BIRTHDAY, JUMP_UP, JUMP_DOWN, DADADADUM, POWER_UP, POWER_DOWN, PUNCHLINE, WEDDING, BOOGYWOODY, PRELUDE
Modul import: from utils import *
(nur Realmodus)
Funktion | Aktion |
a = Vector(x, y) | erzeugt ein 2-dimensionales Vektorobjekt mit gegebenen Koordinaten |
a = Vector((x, y)) | dasselbe mit gegebenem Koordinatentupel (oder Liste). |
a = Vector() | dasselbe mit den Koordinaten (0, 0) |
c = a.add(b) | gibt einen neuen Summenvektor der beiden Vektoren a und b zurück |
c = a.sub(b) | gibt einen neuen Differenzvektor der beiden Vektoren a und b zurück |
c = a.mult(k) | gibt einen neuen Vektor mit skalarer Multiplikation zurück |
print(a) | schreibt die Komponenten aus |
a[0], a[1] | Komponenten in Indexschreibweise (lesend und schreibend) |
Klasse I2C_com
(nur Realmodus)
Funktion | Aktion |
i2c = I2C_com(i2c_address, scl = Pin(22), sda = Pin(21) | erzeugt ein I2C-Schnittstellenobjekt mit gegebener I2C-Adresse an den gegebenen Pins für SCL und SDA |
i2c.readReg(cmd) | liest ein einzelnes Byte an der gegebenen Registeradresse cmd (int) (Rückgabewert: int) |
i2c.writeReg(cmd, data) | schreibt ein Datenbyte data (int) an der gegebenen Registeradresse cmd (int) |
i2c.readBlock(cmd, len) | liest eine Folge von Bytes beginnend bei der gegebenen Registeradresse cmd (int). Rückgabewert: Liste mit ints |
i2c.writeBlock(cmd, data) | schreibt eine Folge von Bytes beginnend bei der gegebenen Registeradresse cmd (int). data ist eine Liste mit ints |
i2C_com.dispose() | gibt den I2C-Port wieder frei (für alle Geräte) |
from machine import Pin, I2C
i2c = I2C(scl = Pin(21), sda = Pin(22))
devices = i2c.scan()
liefert alle I2C-Geräteadressen, die an den gegebenen Pins für SCL und SDA angeschlossen sind.