View on GitHub

ft-Controller-I2C

ROBO Pro Coding Blöcke für fischertechnik RX und TXT 4.0 Controller zur Programmierung beliebiger I²C Devices: LCD, OLED Displays, Tastaturen, Joystick, GPIO, RTC, EEPROM, Motor, Relais, Sensoren, ...

I²C Module | Programmierbeispiele | I²C Hardware, Software | I²C Programmierung, Blöcke

ROBO Pro Coding Blöcke für fischertechnik RX und TXT 4.0 Controller zur Programmierung eigener I²C Module.

Das Beispiel Projekt mit Blöcken für TXT 4.0 Controller ist im fischertechnik GitLab veröffentlicht. Es kann für RX Controller konvertiert werden. Alle I²C-Module und Programmierbeispiele auf dieser Seite wurden mit dem TXT 4.0 Controller und auch mit dem RX Controller getestet.

Mit der App ROBO Pro Coding kann das Projekt ohne Anmeldung von fischertechnik GitLab geladen werden. Dazu bleibt das Zugriffstoken leer und auf der nächsten Seite im Suchfeld kann i2c eingegeben werden. Der Name ft_Controller_I2C kann noch Versionsinformationen enthalten. Das Projekt kann dann lokal als .ft-Datei gespeichert werden.

Im Projekt enthaltene Quellcodedateien (Blöcke) für I²C Module.

Für eigene Projekte können aus der lokal gespeicherten .ft-Datei die Quellcodedateien für die angeschlossenen I²C Module importiert werden.
Die Datei i2cCode muss immer mit importiert werden.
Die Datei advanced enthält keine I²C spezifischen Blöcke, ist aber zu empfehlen.
Aus der Datei Beispiele könnte nur ein einzelner Block übernommen werden.
Alle anderen Quellcodedateien in Tabelle 1 sind bestimmten I²C Modulen zugeordnet.

Tabelle 1:
Quellcodedatei I²C-Adresse I²C Module Beispiel Tabelle 3
i2cCode   Python I²C für RX und TXT 4.0 alle
advanced   Blöcke für fehlende Funktionen 11
dipswitch 0x03 6-DIP Switch, 5-Way Switch 3
keyboard 0x5F M5Stack Card Keyboard 2
lcd16x2 0x3E Grove - LCD Display 16x2 Zeichen 1, 2, 3
oled 0x3C 0x3D OLED Displays 128x128, 128x64 8, 9, 10, 11
oled_geometrie   Blöcke für Linien und Kreise 8, 10, 11
qwiiceeprom 0x50 SparkFun Qwiic EEPROM - 512Kbit 9, 10
qwiicgpio 0x27 SparkFun Qwiic GPIO 5
qwiicjoystick 0x20 SparkFun Qwiic Joystick 6, 14, 15
qwiickeypad 0x4B SparkFun Qwiic Keypad 12 Tasten 4, 5
qwiiclcd 0x72 Qwiic LCD Displays 20x4, 16x2 4, 5, 6
qwiicmotor 0x5D 0x5E SparkFun Qwiic Motor Driver 14, 15
qwiicrelay 0x1E SparkFun Qwiic Single Relay Hauptprogramm
rtc 0x51 Grove - RTC (Real Time Clock) 1, 4, 10

Hauptprogramm in der App ROBO Pro Coding

Tabelle 2:
I8 I7 I6 I5 Beispiel (Block) Quellcodedateien, I²C Module
0 0 0 0 i2cScan i2cCode (immer erforderlich)
0 0 0 1 grovelcd_rtc lcd16x2, rtc
0 0 1 0 grovelcd_keyboard lcd16x2, keyboard
0 0 1 1 grovelcd_dipswitch lcd16x2, dipswitch
0 1 0 0 qlcd_rtc_keypad qwiiclcd, rtc, qwiickeypad
0 1 0 1 qlcd_gpio_keypad qwiiclcd, qwiicgpio, qwiickeypad
0 1 1 0 qlcd_joystick qwiiclcd, qwiicjoystick
0 1 1 1    
1 0 0 0 oled_zeichnen oled, oled_geometrie
1 0 0 1 oled_eeprom_copy oled, qwiiceeprom
1 0 1 0 oled_eeprom_rtc oled, oled_geometrie, qwiiceeprom, rtc
1 0 1 1 oled2_systemtime oled, oled_geometrie, advanced
1 1 0 0    
1 1 0 1    
1 1 1 0 joy_2motoren qwiicjoystick, qwiicmotor
1 1 1 1 joy_4motoren qwiicjoystick, qwiicmotor

Beispiele.py

Tabelle 3:
n Beispiel (Block) Beschreibung
0 i2cScan  
1 grovelcd_rtc Grove LCD 16x2 zeigt Uhrzeit und Datum an.
2 grovelcd_keyboard Grove LCD 16x2 schreiben mit Card Keyboard (50 Tasten).
3 grovelcd_dipswitch Grove LCD 16x2 mit 6 DIP Schaltern oder 5-Way Switch.
4 qlcd_rtc_keypad Qwiic LCD 16x2 oder 20x4 Uhr stellen und anzeigen.
5 qlcd_gpio_keypad Qwiic LCD 16x2 oder 20x4 8 Bit Zeichencode Eingabe mit GPIO.
6 qlcd_joystick Qwiic LCD 16x2 oder 20x4 zeigt Joystick Positionen an.
7    
8 oled_zeichnen OLED 128x64 oder 128x128 Linien und Kreise anzeigen.
9 oled_eeprom_copy OLED 128x64 oder 128x128 Zeichensatz aus EEPROM anzeigen.
10 oled_eeprom_rtc OLED 128x64 oder 128x128 Datum, Uhrzeit digital und analog.
11 oled2_systemtime 2 OLED Displays, verschiedener Inhalt, Analoguhr System-Zeit.
12    
13    
14 joy_2motoren 2 Motoren (1 Modul) mit Joystick steuern.
15 joy_4motoren 4 Motoren (2 Module) mit Joystick umschalten und steuern.

I²C

I²C: Inter-Integrated Circuit → de.wikipedia.org/wiki/I²C

I²C Hardware
6-pin Pfosten Stecker Qwiic Adapter Qwiic Cable - Grove Adapter Qwiic Cable Kit
I²C Module mit Hardware Interrupt

I²C Module, die eine Eingabe machen, müssen normalerweise in einer dauerhaft Schleife ständig über den I²C-Bus abgefragt werden, ob sich der Zustand geändert hat. Keypad, GPIO und RTC haben einen zusätzlichen (Löt-) Interrupt-Pin, der mit einem Controller Input verbunden werden kann. Ein EingangStarte jedes mal Block kann bei Zustandsänderung ein Ereignis auslösen. Mit dem Ereignis-Block kann die ständige Kommunikation über den I²C-Bus vermieden werden.
Die /INT Pins aller I²C Module können miteinander verbunden an nur einen Controller Input angeschlossen werden. Ein Interrupt an einem I²C Modul schaltet den /INT Pegel auf LOW (GND).
Weil der RX Controller keine Ereignisse unterstützt, kann der Controller Input in einer Schleife abgefragt werden, was den I²C-Bus ebenfalls entlastet.

I²C Software

RX Controller nutzt CircuitPython, TXT 4.0 Controller nutzt Python3. Beide unterstützen I²C, aber völlig verschieden. Die I²C Blöcke hier sind plattformunabhängig programmiert. Die Python Implementation wird erkannt und dann der entsprechende Code ausgeführt.

i2cCode.py

Block i2cWriteBuffer (i2cAdr, write_buffer)

Block i2cReadBuffer (i2cAdr, length) : Liste der Bytes

Block i2cWriteReadBuffer (i2cAdr, write_buffer, read_length) : Liste der Bytes

Block i2cScan () : Liste der 7-Bit I²C-Adressen

Block isRX () : Boolean

Beschreibung der Quellcodedateien (alphabetisch geordnet)

Inhaltsverzeichnis: Tabelle 1

advanced.py

Allgemeine Blöcke, die Python-Funktionen bereit stellen (ohne I²C Bezug).

Block Kommentar (text)
Block Int (x) : Integer int(x)
Block Ord (char) : Integer Zeichencode ord(char)
Block Chr (asc) : String 1 Zeichen chr(asc)
Block print_bin (zahl, length) : BIN String z.B. ‘00001010’; Binärzahl mit fester Länge
Block list_string (string_data) : Liste der Zeichencodes [ord(c) for c in string_data]
Block encode_string (string_data) : Liste der Zeichencodes string_data.encode(‘utf-8’)
Block decode_string (data_bytes) : String data_bytes.decode(‘utf-8’)
Block list_hex (data_bytes) : HEX String [hex(b) for b in data_bytes]
Block system_time () : Liste mit 9 Elementen

dipswitch.py

Grove - 6-Position DIP Switch | Grove - 5-Way Switch

Block readSwitch () : Byte

keyboard.py

M5Stack Card Keyboard QWERTY 50-key

Block readKeyboard () : Byte

lcd16x2.py

Grove - LCD Display 16x2 Zeichen | Black on Yellow | Black on Red | White on Blue

Block initLCD ()

Block writeText (row, col, end, text, right)

Block clearScreen ()

Block setCursor (row, col)

Block writeLCD (text)

Block setDisplay (displayOn, cursorOn, blinkOn)

oled.py

Grove - OLED Display 1.12 (128x128) | OLED Yellow&Blue Display 0.96 (128x64) | OLED Display 0.96

OLED Displays zeigen 128x64 oder 128x128 Pixel an. Alle Pixel werden zuerst in Variablen gespeichert. Dieser Speicher wird ‘Matrix’ genannt. Um die ‘Matrix’ auf dem OLED Display anzuzeigen, muss immer der Block displayMatrix aufgerufen werden.

Block initOLED (select_oled:Boolean) → Parameter optional

Wenn zwei Displays angeschlossen sind, muss der Block initOLED zweimal aufgerufen werden, mit False und True. Es gibt nur eine Matrix, die mit dem folgenden Block auf einem bestimmten Display angezeigt werden kann.

Block displayMatrix (fromPage, toPage, select_oled) → alle Parameter optional

Die folgenden Blöcke ändern nur die Pixel in der Matrix, nicht das Display.

Block clearMatrix (fromPage, toPage) → alle Parameter optional

Block setPixel (x, y, pixel)

Block writeMatrix (row, col, text)

erforderlich: qwiiceeprom

Um Text mit Pixeln zu zeichnen, muss der EEPROM angeschlossen und der Zeichensatz programmiert sein. Pro Zeichen werden 8 Byte vom EEPROM in die Matrix kopiert.

Block paintEEPROM (eepromStartadresse, fromPage, toPage) → alle Parameter optional

oled_geometrie.py

erforderlich: oled

Block oled_line (x0, y0, x1, y1, pixel)

Block oled_rectangle (x0, y0, x1, y1, pixel)

Block oled_circle (x0, y0, radius, pixel)

Block oled_minute (minute, x, y, l0, l1, pixel)

Block oled_hour (hour, x, y, l0, l1, pixel)

Block oled_clock (x, y, radius, hour, minute)

qwiiceeprom.py

SparkFun Qwiic EEPROM Breakout - 512Kbit

Block readEEPROM (adr16Bit, read_length) : Liste der Bytes

Block testEEPROM ()

qwiicgpio.py

SparkFun Qwiic GPIO

3,3 Volt Logik; 16 Klemmen: 8 GPIO-Pins, 4 GND, 3 3V3, 1 /INT
Mit /INT kann bei Zustandsänderung ein Hardware Interrupt ausgelöst werden.

Block setGPIO (IO, INV)

Block readGPIO () : Byte

Block writeGPIO (byte)

qwiicjoystick.py

SparkFun Qwiic Joystick

Block readJoystick ()

Die folgenden Blöcke get lesen nur die Variable, nicht den I²C-Bus.

Block getJoystickX () : Byte
Block getJoystickY () : Byte

Block getJoystickButtonPosition () : Boolean

Block getJoystickButtonOnOff () : Boolean

qwiickeypad.py

SparkFun Qwiic Keypad - 12 Tasten

Mit /INT kann bei gedrückter Taste ein Hardware Interrupt ausgelöst werden.

Block readKeypad () : Byte

qwiiclcd.py

SparkFun Qwiic 20x4 SerLCD - RGB Backlight | SparkFun Qwiic 16x2 SerLCD - RGB Backlight

Block initQLCD ()

Block writeQText (row, col, end, text, right)

Block clearQScreen ()

Block setQCursor (row, col)

Block writeQLCD (text)

Block setQDisplay (displayOn, cursorOn, blinkOn)

qwiicmotor.py

SparkFun Qwiic Motor Driver

Block initMotor (i2cAdr)

Block setMotorI2C (i2cAdr)

Block enableMotor (on:Boolean)

Block driveMotorA (speed:Byte)
Block driveMotorB (speed:Byte)

qwiicrelay.py

SparkFun Qwiic Single Relay

Strom für Relais kommt aus dem 3,3 Volt I²C-Bus!

Block writeRelay (on:Boolean)

rtc.py

Grove - High Precision RTC (Real Time Clock)
Uhr stellen

Block writeRTC (index, int8)

Block setRTC (keyCode) : keyString

Uhr lesen

Block readRTC ()

Die folgenden Blöcke get lesen nur die Variable, nicht den I²C-Bus.

Block getRTC (index) : Byte

Block getTimeString () : String 8 Zeichen

Block getDateString () : String 10 Zeichen

Block getWeekday () : String 2 Zeichen

Foto

10 Module gleichzeitig am TXT 4.0 Controller I²C-Bus