Ziele gemäß Rahmenlehrplan
Cyber-physische Systeme
ergänzen
Die Schülerinnen und Schüler verfügen über die Kompetenz, die physische Welt und IT-Systeme funktional zu einem cyber-physischen System zusammenzuführen.
-
Die Schülerinnen und Schüler analysieren ein cyber-physisches System bezüglich eines Kundenauftrags zur Ergänzung und Inbetriebnahme weiterer Komponenten.
-
Sie informieren sich über den Datenfluss an der Schnittstelle zwischen physischer Welt und IT-System sowie über die Kommunikation in einem bestehenden Netzwerk. Sie verschaffen sich einen Überblick über die Energie-, Stoff- und Informationsflüsse aller am System beteiligten Geräte und Betriebsmittel.
-
Die Schülerinnen und Schüler planen die Umsetzung des Kundenwunsches, indem sie Kri- terien für die Auswahl von Energieversorgung, Hardware und Software (Bibliotheken, Protokolle) aufstellen. Dazu nutzen sie Unterlagen der technischen Kommunikation und passen diese an.
-
Sie führen Komponenten mit dem cyber-physischen System funktional zusammen.
-
Sie prüfen systematisch die Funktion, messen physikalische Betriebswerte, validieren den Energiebedarf und protokollieren die Ergebnisse.
-
Die Schülerinnen und Schüler reflektieren den Arbeitsprozess hinsichtlich möglicher Optimierungen und diskutieren das Ergebnis in Bezug auf Betriebssicherheit und Datensicherheit.
Bullshit-Bingo
Plan
Zeitplan
gantt title August (15h) dateFormat YYYY-MM-DD axisFormat %d.%m. section 2h Do 22.08. Einführung :2024-08-22, 2h section 4h Fr 23.08. Grundlagen CPS, SOL (Funktionsweise CPU) :2024-08-23, 4h section 5h Do 29.08. Logische Verknüpfungen, Binäres Rechnen, Praxis Logische Verknüpfungen :2024-08-29, 5h section 4h Fr 30.08. Von-Neumann-Zyklus :2024-08-30, 4h
gantt title Oktober + November (12h) dateFormat YYYY-MM-DD axisFormat %d.%m. section 3h Mo 21.10. Einführung Mikrocontroller :2024-10-21, 3h section 3h Mi 30.10. Praxis Arduino (Simulator) :2024-10-24, 3h section 4h Fr 01.11. Einführung Git :2024-11-01, 2h SOL (Git) :2024-11-01, 2h
gantt title Dezember (17h) dateFormat YYYY-MM-DD axisFormat %d.%m. section 5h Do 05.12. Physikalische Betriebswerte, Berechnung von (Vor-)Widerständen :2024-12-05, 4h section 4h Fr 06.12. Wiederholung :2024-12-06, 2h SOL (Rechnernetze / Topologien + Vorbereitung Klassenarbeit) :2024-12-06, 2h section 2h Di 10.12. Fragen zur Klassenarbeit :2024-12-10, 2h section 2h Mi 11.12. Klassenarbeit :milestone, 2024-12-11, 2h
gantt title Januar (13h) dateFormat YYYY-MM-DD axisFormat %d.%m. section 3h Do 22.01. OSI-Modell (Physical Layer) :2025-01-23, 3h section 5h Do 23.01. UART, I²C, SPI :2025-01-23, 5h section 4h Fr 24.01. HTTP, MQTT :n2025-01-24, 2h SOL (Vorbereitung Klassenarbeit) :2025-01-24, 2h section 3h Di 28.01. Wiederholung :2025-01-23, 3h section 4h Fr 31.01. Klassenarbeit :milestone, 2025-01-31, 2h SOL (Projektplanung) :2025-01-31, 2h
gantt title März (6h) dateFormat YYYY-MM-DD axisFormat %d.%m. section 2h Mi 19.03. Praxisprojekt :2025-03-19, 2h section 4h Fr 21.03. … :2025-03-21, 2h SOL :2025-03-21, 2h
gantt title Juni (23h) dateFormat YYYY-MM-DD axisFormat %d.%m. section 3h Mi 04.06. … :2025-06-04, 3h section 5h Do 05.06. … :2025-06-05, 5h section 5h Mo 16.06. … :2025-06-16, 5h section 5h Do 19.06. … :2025-06-19, 5h section 2h Fr 20.06. SOL (Projektabschluss) :2025-06-20, 2h section 3h Mo 23.06. Projektvorstellungen :2025-06-23, 3h
Leistungskontrollen
- Soll Notendichte: 7
- Minimum Klassenarbeiten (>45min, doppelte Wertung): 2
- Sonstige Noten: >=3
- 1. Klassenarbeit 11.12. ~90min (einseitig beschrifteter A4 Notizzettel + 1 einfacher Taschenrechner ohne Binärberechnungen)
- Grundlagen CPS, einschließlich Schnittstellen
- Rechnen mit Binärzahlen, Zweierpotenzen
- Logische Verknüpfungen (Not, And, Or, XOr)
- Wahrheitswertetabelle
- Logik Gatter (Schaltung mit einfachen (Um-)Schaltern)
Von-Neumann-Zyklus- Berechnung von (Vor-)Widerständen
- Rechnernetze / Topologien
- Grundlagen Git
- 2. Klassenarbeit 31.01. ~90min (einseitig beschrifteter A4 Notizzettel)
- OSI-Modell, insbesondere Physical Layer
- UART, I²C, SPI
- HTTP, MQTT
- Grundlagen Programmierung (Variablen, While, If/Else)
Literatur
Prüfungskatalog FiSi
„Prüfungskatalog für die IHK Abschlussprüfungen — Fachinformatiker Fachinformatikerin Fachrichtung Systemintegration — Verordnung über die Berufsausbildung zum Fachinformatiker/ zur Fachinformatikerin vom 5. März 2020“
Zentralstelle für Prüfungsaufgaben der Industrie- und Handelskammern (ZPA) Nord-West
- Auflage 2021
Prüfungsvorbereitung FiSi
„Prüfungsvorbereitung Aktuell — Teil 2 der gestreckten Abschlussprüfung Fachinformatiker/-in Systemintegration (nach der neuen Ausbildungsverordnung ab August 2020)“
Europa-Fachbuchreihe
- Auflage 2022
ISBN 978-3-7585-3169-9
Lehrbuch FiSi LF10-12
„IT-Berufe Fachstufe II — Fachinformatiker/-in Fachrichtung Systemintegration — Lernfelder 10-12“
Westermann
- Auflage 2023 (Vorabversion)
ISBN 978-3-14-220108-5
Grundlagen CPS
Was sind Cyber-physische Systeme?
Ein CPS ist eine Verbindung einer Software mit mechanischen Bauteilen, die miteinander kommunizieren. Sprich ein CPS verbindet die virtuelle Welt mit der realen.
Was ist „Cyber“ und wo kommt das Wort her?
Anwendungsfelder
- Industrie 4.0 = ist die Bezeichnung für Projekte zur umfassenden Digitalisierung der industriellen Produktion.
- Smart Grids (deutsch: Intelligentes Stromnetz)
- Logistik, Verkehrssteuerung
- E-Health
- Sicherheits- & Fahrerassistenzsysteme
- Frühwarnsysteme für Katastrophenschutz (Bsp. Tsunami)
Wie grenzen sich CPS von IOT und Robotik ab?
- IOT und Robotik sind den Cyber physischen Systemen untergeordnet
- IOT = Sammelbegriff für die unterschiedlichsten Technologien einer globalen Infrastruktur der Informationsgesellschaften. Vernetzt physische und virtuelle Objekte miteinander und lassen sie zusammenarbeiten.
- CPS vs. IoT: CPS betont die Integration und Interaktion zwischen physischen und digitalen Komponenten, während IoT sich auf die Vernetzung und den Datenaustausch zwischen Geräten konzentriert.
- CPS vs. Robotik: CPS umfasst eine breitere Palette von Anwendungen, die über die reine Robotik hinausgehen, einschließlich eingebetteter Systeme und industrieller Steuerungen
Relevante Technologien
-
Eingebettete Systeme = sind Computer Systeme die Verbaut sind für ein bestimmten anwendungsfall (z.B. Kassensysteme)
-
Sensornetze = sind ein Verbund aus Sensoren in einem bestimmten Bereich
-
Internet-Infrastruktur = Geräte werden mit Internet ausgestattet und Verbunden
-
Echtzeitverarbeitung = Daten werden Echtzeit verarbeitet, wie Verkehrsdaten wo welches Auto sind
„Industrie 4.0“
- industrielle Revolution bestand in der Mechanisierung mittels Wasser- und Dampfkraft
- industrielle Revolution geprägt durch Massenfertigung mit Hilfe von Fließbändern und elektrischer Energie
- industrielle Revolution oder digitale Revolution mit Einsatz von Elektronik und IT (v. a. die speicherprogrammierbare Steuerung und die CNC-Maschine)
- industrielle Revolution: Smart Factory und Industrial internet of things
Schnittstellen
Wie kommunizieren Mensch, „Cyber“ und Physik miteinander?
„Aus CPS-Sicht“
HCI vs M2M vs CPS
flowchart LR Mensch <--HCI--> Cyber subgraph CPS[Cyber-physisches System] subgraph Cyber[Cyber System] Computer1 <--M2M--> Computer2 end subgraph PS[Physisches System] subgraph Schnittstelle Aktuator Sensor end subgraph I[Geräte / Anlagen] Maschine1 Maschine2 end end PS --messen--> Cyber Cyber --ansteuern--> PS end Mensch <-..-> PS
HCI
(Human–computer interaction / Human-computer Interface)
-> Mensch-Maschine-Interaktion / Benutzerschnittstelle
M2M
(Machine-to-Machine)
CPS
(Cyber-physical system)
„Aus Sicht eines Prozessors“
(Rechnerarchitektur / Prozessorarchitektur)
IHK-Zwischenprüfung Herbst 2018: Aufgabe 2.2
stark vereinfacht
flowchart LR subgraph Computersystem Arbeitsspeicher subgraph Devices subgraph Peripherie Speichermedien Netzwerkkarten HID[Human Interface Device] end Controller Koprozessoren end subgraph Prozessor Bus <--> Register Bus <--> Rechenwerk <--> Register Bus <--> Steuerwerk <--> Register Steuerwerk <--> Rechenwerk end end Arbeitsspeicher <--> Bus Devices <--> Bus
detailierter
flowchart TB subgraph Motherboard[Motherboard / SoC] Arbeitsspeicher <--MMU--> Northbridge subgraph CPU-Chip Northbridge <--FSB--> Bus subgraph Prozessor-Kern Bus <--> Register Bus <--> Rechenwerk <--> Register Bus <--> Steuerwerk <--> Register Steuerwerk <--> Rechenwerk end end Northbridge <--DMI--> Southbridge end subgraph Welt[Rest der Welt] subgraph Devices Device1 Device2 Device3 end end Southbridge <--MMIO-->Device1 Southbridge <--PMIO--> Device2 Register <--GPIO--> Device3
SoC
(System-on-a-Chip)
FSB
(Front Side Bus)
DMI
(Direct Media Interface)
MMU
(Memory Management Unit)
MMIO
(Memory-mapped I/O)
PMIO
(Port-mapped I/O)
GPIO
(General Purpose Input/Output)
Was ist die „richtige“ Sichtweise?
Prozessoren
Logikgatter
Aufgabe 6 von Seite 78 aus „Prüfungsvorbereitung Aktuell Teil 1“ (Europa Verlag)
SOL „Funktionsweise von Prozessoren“
Erkundigen Sie sich selbstständig darüber, wie es möglich ist, mittels Maschinen zu rechnen. Als Einstieg wird folgendes Video empfohlen: A Computer Built With Dominos.
Beantworten Sie die folgenden Fragen:
- Wie funktioniert das Binärsystem?
- Schreiben Sie die Zahlen 0-7 als Binärzahl auf.
- Benennen Sie 4 verschiedene zweistellige logische Verknüpfungen (Logikgatter).
- Was ist ein Halbaddierer?
- Wieviele Eingänge und wieviele Ausgänge hat ein Halbaddierer?
- Zeichnen oder beschreiben Sie eine Schaltung, wie ein Halbaddierer aus einfachen Logikgattern aufgebaut werden kann.
- Finden Sie Möglichkeiten, wie Logikgatter mittels Murmeln, Wasser oder in Minecraft aufgebaut werden können?
Transistoren
Aufbau von Gattern und Addierer mit BJT-Transistioren
Von-Neumann-Zyklus
FETCH
(Befehlsabruf):- Nächsten Befehl (entsprechend Adresse im Befehlszähler) aus Arbeitsspeicher in das Befehlsregister laden und Befehlszähler inkrementieren
DECODE
(Dekodierung):- Der Befehl wird durch das Steuerwerk in Schaltinstruktionen für das Rechenwerk aufgelöst
FETCH OPERANDS
(Operandenabruf):- Operanden werden aus dem Speicher laden
EXECUTE
(Befehlsausführung):- Arithmetische oder logische Operation wird vom Rechenwerk berechnet. (Bei Sprungbefehlen und erfüllter Sprungbedingung wird der Befehlszähler angepasst)
WRITE BACK
(Rückschreiben des Resultats): Ergebnis der Berechnung wird in den Speicher zurückgeschrieben (falls nötig)
Assembler
Beispiel (blinky-rust):
git clone git@github.com:johannesloetzsch/blinky-rust-nix.git -b asm
cd blinky-rust-nix; nix develop
cargo rustc -- --emit asm
grep -m1 main_loop: -A43 target/thumbv7m-none-eabi/debug/deps/blinky_rust-*.s | bat --file-name example.s
.LBB26_1:
.loc 11 0 5 is_stmt 0
subs r0, r7, #1
.loc 11 15 9 is_stmt 1
str r0, [sp]
bl _ZN136_$LT$stm32f1xx_hal..gpio..gpioc..PC13$LT$stm32f1xx_hal..gpio..Output$LT$MODE$GT$$GT$$u20$as$u20$embedded_hal..digital..v2..OutputPin$GT$8set_high17h41a8f7d2c1b1fab3E
bl _ZN4core6result19Result$LT$T$C$E$GT$2ok17hbba81ef68e509503E
.loc 11 16 9
ldr r0, [sp, #8]
mov.w r1, #1000
str r1, [sp, #4]
bl _ZN97_$LT$stm32f1xx_hal..delay..Delay$u20$as$u20$embedded_hal..blocking..delay..DelayMs$LT$u16$GT$$GT$8delay_ms17h9fb44941d1d2b02bE
ldr r0, [sp]
.loc 11 18 9
bl _ZN136_$LT$stm32f1xx_hal..gpio..gpioc..PC13$LT$stm32f1xx_hal..gpio..Output$LT$MODE$GT$$GT$$u20$as$u20$embedded_hal..digital..v2..OutputPin$GT$7set_low17h5e48a13c9b6d1e70E
bl _ZN4core6result19Result$LT$T$C$E$GT$2ok17hbba81ef68e509503E
ldr r1, [sp, #4]
.loc 11 19 9
ldr r0, [sp, #8]
bl _ZN97_$LT$stm32f1xx_hal..delay..Delay$u20$as$u20$embedded_hal..blocking..delay..DelayMs$LT$u16$GT$$GT$8delay_ms17h9fb44941d1d2b02bE
b .LBB26_1
Binary
## laut disassembly startet <main_loop> bei 0800_016c, das ist im ELF-binary an 1_016c
hexdump -s $((16#1016c)) target/thumbv7m-none-eabi/debug/deps/blinky_rust-* |head -n4
001016c b580 466f b084 9002 e7ff 1e78 9000 f000
001017c f92f f000 f886 9802 f44f 717a 9101 f000
001018c fc30 9800 f000 f917 f000 f87b 9901 9802
001019c f000 fc27 e7e9 b580 466f f000 f800 b580
## …und an adresse 717a befindet sich #0x3e8, also #1000
hexdump -s $((16#20717a)) target/thumbv7m-none-eabi/debug/deps/blinky_rust-* |head -n 1
020717a 4202 070d 0000 0018 0000 03e8 0000 0000
Disassemble
cargo objdump -- -S target/thumbv7m-none-eabi/debug/deps/blinky_rust-* | grep -m1 '<main_loop>' -A 26
0800016c <main_loop>:
; fn main_loop(mut led: PC13<Output<PushPull>>, mut delay: Delay) -> ! {
800016c: b580 push {r7, lr}
800016e: 466f mov r7, sp
8000170: b084 sub sp, #0x10
8000172: 9002 str r0, [sp, #0x8]
; loop {
8000174: e7ff b 0x8000176 <main_loop+0xa> @ imm = #-0x2
8000176: 1e78 subs r0, r7, #0x1
; led.set_high().ok();
8000178: 9000 str r0, [sp]
800017a: f000 f92f bl 0x80003dc <_ZN136_$LT$stm32f1xx_hal..gpio..gpioc..PC13$LT$stm32f1xx_hal..gpio..Output$LT$MODE$GT$$GT$$u20$as$u20$embedded_hal..digital..v2..OutputPin$GT$8set_high17h41a8f7d2c1b1fab3E> @ imm = #0x25e
800017e: f000 f886 bl 0x800028e <_ZN4core6result19Result$LT$T$C$E$GT$2ok17hbba81ef68e509503E> @ imm = #0x10c
; delay.delay_ms(1000_u16);
8000182: 9802 ldr r0, [sp, #0x8]
8000184: f44f 717a mov.w r1, #0x3e8
8000188: 9101 str r1, [sp, #0x4]
800018a: f000 fc30 bl 0x80009ee <<stm32f1xx_hal::delay::Delay as embedded_hal::blocking::delay::DelayMs<u16>>::delay_ms::h9fb44941d1d2b02b> @ imm = #0x860
800018e: 9800 ldr r0, [sp]
; led.set_low().ok();
8000190: f000 f917 bl 0x80003c2 <_ZN136_$LT$stm32f1xx_hal..gpio..gpioc..PC13$LT$stm32f1xx_hal..gpio..Output$LT$MODE$GT$$GT$$u20$as$u20$embedded_hal..digital..v2..OutputPin$GT$7set_low17h5e48a13c9b6d1e70E> @ imm = #0x22e
8000194: f000 f87b bl 0x800028e <_ZN4core6result19Result$LT$T$C$E$GT$2ok17hbba81ef68e509503E> @ imm = #0xf6
8000198: 9901 ldr r1, [sp, #0x4]
; delay.delay_ms(1000_u16);
800019a: 9802 ldr r0, [sp, #0x8]
800019c: f000 fc27 bl 0x80009ee <<stm32f1xx_hal::delay::Delay as embedded_hal::blocking::delay::DelayMs<u16>>::delay_ms::h9fb44941d1d2b02b> @ imm = #0x84e
80001a0: e7e9 b 0x8000176 <main_loop+0xa> @ imm = #-0x2e
bare-metal-programming
Binärzahlen
Computer kennen nur 1 und 0 und arbeiten mit Binärzahlen (im Dualsystem).
Wieviele Zustände können mit einer gegebenen Anzahl von Bits dargestellt werden?
Umrechnung
Addition
Integer overflow
Rechnernetze
Topologien
Welche Topologien kennt ihr? Wo finden sie Anwendung?
Welche Vor- und Nachteile haben verschiedene Topologien?
Bussysteme
Für welche Einsatzzwecke sind Bussysteme attraktiv? Warum?
graph TB Bussysteme --> On-Chip[On-Chip Bus] Bussysteme --> Inter-Chip[Inter-Chip Bus] Inter-Chip -..-> FSB[Front Side Bus] Inter-Chip -..-> DMI[Direct Media Interface] Bussysteme --> Peripheriebus Peripheriebus -..-> intern intern -..-> PCI intern -..-> sata[Serial ATA] intern -..-> I2C intern -..-> SPI Peripheriebus -..-> extern extern -..-> seriell[Serielle Schnittstelle] extern -..-> parallel[Parallele Schnittstelle] extern -..-> USB Bussysteme --> Feldbus -..-> CAN[z.B. CAN]
I²C
- Master-Slave-Bus
- zwei Signalleitungen
- SCL = Serial Clock
- SDA = Serial Data
SPI
(Serial Peripheral Interface)
Integration (ergänzen / zusammenführen)
Was soll/kann woran ergänzt oder zusammengeführt werden?
Wie sollte eine Systemarchitektur aussehen, damit sie:
- Möglichst gut ergänzt oder mit anderen Systemen zusammengeführt werden kann?
- Effektiv entwickelt, gewartet und ergänzt werden kann?
- „Sicher“ ist?
Best Practice
- Modularisierung
- Schnittstellen
- gut designen
- wo?
- welche?
- dokumentieren
- gut designen
- bestehende, verbreitete, offene Standards nutzen
- Schnittstellen
- Protokolle
- Bibliotheken
- Protokolle
- Schnittstellen
- Versionieren
- git
Standards / Normen
Wofür werden Standards benötigt?
Welche Standards und Standardisierungsgremien kennt ihr?
graph TB Standards[Technische Standards] --> Industriestandard[Industriestandard / De-facto-Standard] Standards --> Normen[Internationale Normen / De-jure-Standards] Normen -..-> DIN Normen -..-> WSC WSC -..-> ISO WSC -..-> ITU WSC -..-> IEC Normen -..-> IEEE Normen -..-> W3C Normen -..-> IETF -..-> RFC
Normen können auch Spaß machen…
OSI Modell
(Open Systems Interconnection model
)
Was ist ein Modell? Wofür sind Modelle wichtig?
7 OSI Layer
OSI-Schicht | Einordnung | TCP/IP-Referenzmodell | Protokollbeispiele | Einheiten | Kopplungselemente | ||
---|---|---|---|---|---|---|---|
7 | Anwendung (Application) | ||||||
6 | Darstellung (Presentation) | ||||||
5 | Sitzung (Session) | Anwendungsorientiert | Anwendung | ||||
HTTP, MQTT, DHCP, DNS | Daten | ||||||
4 | Transport | Transportorientiert | Transport | TCP, UDP | (TCP) Segmente, (UDP) Datagrame | ||
3 | Vermittlung (Network) | Ende-zu-Ende | Internet | IPv4, IPv6, ICMP | Pakete | Router, Layer-3-Switch | |
2 | Sicherung (Data Link) | Punkt-zu-Punkt | Netzzugriff | ARP, MAC, IEEE 802.11 (WLAN) | Rahmen (Frames) | Bridge, Layer-2-Switch, Wireless Access Point | |
1 | Bitübertragung (Physical) | RS-232 (Serielle Schnittstelle), 1000BASE-T (Twisted-Pair GbE), 100GBASE-LR4 (Glasfaser) | Bits, Symbole | Leitungen, Stecker, Hubs, Repeater |
Protokolle
Was sind Protokolle?
Protokolle definieren Regeln und Standards, die die Kommunikation und den Datenaustausch zwischen Geräten oder Systemen regeln.
Fragen zu Protokollen
-
Welche Arten von Protokollen gibt es?
- Es gibt verschiedene Protokollarten wie Netzwerkprotokolle (z. B. TCP/IP), Sicherheitsprotokolle (z. B. SSL/TLS) und Übertragungsprotokolle (z. B. HTTP, FTP).
-
Warum sind Protokolle in Netzwerken wichtig?
- Protokolle gewährleisten zuverlässige und effiziente Datenübertragung und definieren, wie Informationen über ein Netzwerk transportiert werden.
-
Welche Sicherheitsaspekte sind bei Protokollen relevant?
- Authentifizierung, Verschlüsselung und Integrität der Daten sind entscheidend, um vertrauliche Informationen zu schützen.
-
Wie unterscheiden sich verbindungsorientierte und verbindungslose Protokolle?
- Verbindungsorientierte Protokolle (wie TCP) garantieren die Datenlieferung, während verbindungslose Protokolle (wie UDP) die Daten ohne Bestätigung senden.
-
Welche Rolle spielt die Latenz bei der Protokollauswahl?
- Protokolle mit niedriger Latenz sind wichtig für Echtzeitanwendungen, während andere Anwendungen mehr Fehlerkorrektur benötigen.
-
Was bedeutet Protokoll-Interoperabilität?
- Verschiedene Systeme sollten mithilfe standardisierter Protokolle miteinander kommunizieren können, um Kompatibilität zu gewährleisten.
-
Wie kann man die Effizienz eines Protokolls messen?
- Wichtige Kennzahlen sind Bandbreite, Latenz, Fehlerrate und die Komplexität des Overheads.
-
Welche Rolle spielen Protokollschichten in einem Netzwerk?
- Verschiedene Schichten (z. B. OSI-Modell) trennen Funktionen wie Transport, Datenverbindung und Anwendung, was die Komplexität reduziert und Flexibilität ermöglicht.
Protokolle sind das Rückgrat moderner Netzwerke, daher ist die Auswahl eines geeigneten Protokolls entscheidend für die Leistungsfähigkeit und Sicherheit der Systeme.
Bitübertragung == Physical Layer
Serielle Schnittstelle
UART
(Universal Asynchronous Receiver Transmitter)
RS-232
DE9 Stift (männlich) und Buchse (weiblich)
- D-Sub 9-polig
Ethernet Bitübertragung
Kupferkabel
z.B. 1 Gbit/s 1000BASE-T == IEEE 802.3 Clause 40 (früher IEEE 802.3ab)
- mindestens Cat-5 Twisted-Pair-Kabel
Lichtwellenleiter
z.B. 1 Gbit/s 1000BASE-LX == IEEE 802.3 Clause 38 (früher IEEE 802.3z)
- 1310 nm Wellenlänge
- Singlemode
z.B. 100 Gbit/s 100GBASE-LR4
- 100GBASE-R mit 1 OS2-Glasfaser
- vier Farben
- Singlemode
Anwendungsorientiert
HTTP
- Server + Clients
- Übertragung von Daten/Dateien
- Für jede Übertragung wird eine neue TCP-Verbindung auf- und abgebaut
Layer
5-7
- baut auf TCP/IP (Layer 4/3) auf
- wenn SSL/TLS genutzt wird, ist es wie ein zusätzlicher Layer zwischen 4 und 5
Ports
- 80 Standardport HTTP://
- 443 HTTPS://
Methoden (Verben)
- GET
- POST
- PUT
- DELETE
- …
Statuscodes
- 200 OK
- 301 Redirect
- 404 Not Found
- 503 Service Unavailable
- 418 I'm a Teapot
HTTP-Response
HTTP 1.1 200 OK ## Protokoll-Version + Statuscode
Content-Type: text/html
… ## Weitere Header (key+value)
## Leerzeile
<html> ## Content
…
</html>
REST
Beispiel APIs
Nominatim
„Free-form query“ mit q=
„Structured query“ mit city=
und optional countrycodes=
Mit format=xml
Ohne format=
Swagger Petstore
Beispiel Code
- Node-RED
- Python: ./examples/rest/python/
Sicherheit
OWASP Top 10 Web Application Security Risks
Relevante IT-Grundschutz-Bausteine:
- CON.2 Datenschutz
- CON.8 Software-Entwicklung
- CON.10 Entwicklung von Webanwendungen
- APP.3.1 Webanwendungen und Webservices
- APP.3.2 Webserver
Beispiel
APP.3.1.A21 Sichere HTTP-Konfiguration bei Webanwendungen
Zum Schutz vor Clickjacking, Cross-Site-Scripting und anderen Angriffen SOLLTE der IT-Betrieb geeignete HTTPResponse-Header setzen. Dazu SOLLTEN mindestens die folgenden HTTP-Header verwendet werden:
Weitere Infos bei OWASP
Python REST example
Der Beispielcode rest.py nutzt die Bibliothek FastAPI um eine REST-API mit Swagger UI bereitzustellen.
Usage
git clone https://github.com/johannesloetzsch/LF7.git
cd src/examples/rest/python
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python rest.py
http://localhost:8000/index.html
Development
To run a devserver with automatic reloading when code changed, use:
uvicorn rest:app --reload
MQTT
„Message Queuing Telemetry Transport“
-
Publish/Subscribe
-
Clients können ein „Topic“ abonnieren
- TCP-Verbindung wird offen gehalten
- Server kann Clients über bestehende Verbindung über Updates informieren
mosquitto_sub -h 192.168.88.47 -p 1883 -u fi22 -P geheim -t fi22/buttonGPIO2
mosquitto_pub -h 192.168.88.47 -p 1883 -u fi22 -P geheim -t fi22/buttonGPIO2 -m '1'
Praxis
Git
SOL
Erarbeiten Sie sich die Grundlagen zu Git.
Von folgenden Subcommands sollten Sie wissen, was sie tun:
git init
git clone
git status
git add
git diff
git commit
git restore
Empfehlung: Wenn Git für sie komplett neu ist, probieren sie zum lernen gerne die ersten Level von https://ohmygit.org/
Abgabe: Als Ergebnis wird erwartet, dass Sie zwischen folgenden beiden Aufgaben auswählen:
Variante 1:
a) erstellen Sie per "git init" ein neues git Repository
b) legen Sie die Dateien aus ihrem Arduine-Projekt in dem Repository ab
c) wählen Sie die Daten zum commit aus ("git add") und erstellen Sie einen commit
d) ändern Sie Dateien oder fügen Sie neue Dateien (z.B. eine README.md) hinzu
e) erstellen Sie einen zweiten commit mit den Änderungen
f) versuchen Sie Ihr git Repository auf einen Git-Server (z.B. https://github.com oder https://gitlab.com) hochzuladen. Wenn Sie erfolgreich sind, reicht als Abgabe ein Link
g) falls Sie mit f) nicht erfolgreich waren, erzeugen Sie ein zip-Archiv des Repositories und laden Sie dieses als Abgabe hoch
Variante 2:
a) erstellen Sie einen Github-Account (wenn Sie noch keinen haben)
b) forken Sie mein repository https://github.com/johannesloetzsch/LF7
c) clonen Sie ihren Fork auf ihren Computer
d) editieren Sie mindestens eine Datei (beheben Sie z.B. einen Tipp-/Rechtschreibfehler oder fügen sie zu einem Thema ergänzende Informationen wie einen nützlichen Link oder den Vorschlag einer Definition eines Begriffes hinzu)
e) commiten und pushen Sie die Änderungen
f) stellen Sie mir einen Pull-Request (das reicht als Abgabe)
SOL - Definition Musterlösung
git init - Initialisiert ein neues lokales und leeres Git-Repository.
git clone - Klont ein Repository in ein neues Verzeichnis. Dieses muss/wird mit der URL des Repositorys angegeben.
git status - Zeigt den Status des Arbeitsverzeichnisses und des Staging-Bereichs an. Es zeigt an, welche Dateien geändert wurden, welche Dateien zum Staging-Bereich hinzugefügt wurden und welche Dateien im Staging-Bereich sind.
git add - Fügt Dateien zum Staging-Bereich hinzu. Es gibt verschiedene Möglichkeiten, Dateien hinzuzufügen.
git diff - Zeigt die Unterschiede zwischen zwei Commits, zwischen einem Commit und dem Arbeitsverzeichnis oder zwischen zwei Branches an.
git commit - Erstellt einen neuen Commit. Dieser Commit ist nur lokal verfügbar und muss mit git push auf den Remote-Server hochgeladen werden.
git restore - Stellt Dateien aus dem Staging-Bereich oder dem letzten Commit wieder her.
Raspberry Pi
Pinout
pinout
+------------------| |--| |------+
| ooooooooooooo P1 |C| |A| |
| 1oooooooooooo +-+ +-+ |
| 1ooo |
| P5 oooo +---+ +====
| |SoC| | USB
| |D| Pi Model +---+ +====
| |S| B V2.0 |
| |I| |C|+======
| |S|| Net
| |I|+======
=pwr |HDMI| |
+----------------| |----------+
P1:
3V3 (1) (2) 5V
GPIO2 (3) (4) 5V
GPIO3 (5) (6) GND
GPIO4 (7) (8) GPIO14
GND (9) (10) GPIO15
GPIO17 (11) (12) GPIO18
GPIO27 (13) (14) GND
GPIO22 (15) (16) GPIO23
3V3 (17) (18) GPIO24
GPIO10 (19) (20) GND
GPIO9 (21) (22) GPIO25
GPIO11 (23) (24) GPIO8
GND (25) (26) GPIO7
GPIO Output
sys-Dateisystem
Als root oder Mitglied der Gruppe gpio
:
## get offset
ls /sys/class/gpio/gpiochip*
PIN=$((512+2))
echo $PIN > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio$PIN/direction
echo 1 > /sys/class/gpio/gpio$PIN/value
echo 0 > /sys/class/gpio/gpio$PIN/value
blink.sh
PIN=$((512+2))
echo $PIN > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio$PIN/direction
while true; do
echo 1 > /sys/class/gpio/gpio$PIN/value
sleep 1
echo 0 > /sys/class/gpio/gpio$PIN/value
sleep 1
done
sh blink.sh
Python
python ## öffnet eine interaktive Python-Shell
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(2, GPIO.OUT)
GPIO.output(2, True)
GPIO.output(2, False)
GPIO.cleanup()
blink.py
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
LED1=2
GPIO.setup(LED1, GPIO.OUT)
try:
while(True):
GPIO.output(LED1, True)
time.sleep(1)
GPIO.output(LED1, False)
time.sleep(1)
finally:
GPIO.cleanup()
python blink.py
Aufgaben
- Bauen Sie eine Schaltung und schreiben Sie das dazugehörige Programm, um abwechselnd 2 LEDs blinken zu lassen.
- Programmieren Sie eine Ampelschaltung, die in der richtigen Reihenfolge zwischen 3 LEDs umschaltet.
Zusatzaufgaben
- Programmieren Sie eine Schaltung mit 3 LEDs, welche 3 Bits darstellen, mit denen von 0 bis 7 gezählt wird.
- Schreiben Sie ein Programm, um eine 7-Segment-Anzeige anzusteuern.
GPIO Input
sys-Dateisystem
echo 2 > /sys/class/gpio/export
echo in > /sys/class/gpio/gpio2/direction
cat /sys/class/gpio/gpio2/value
read.sh
while true; do
cat /sys/class/gpio/gpio2/value
sleep 1
done
sh read.sh
Die für I²C verwendeten GPIO-PINs (BCM GPIO2 und BCM GPIO3) haben einen fest verbauten Pull-Up-Widerstand.
Python
read.py
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
BUTTON1=2
GPIO.setup(BUTTON1, GPIO.IN)
try:
while(True):
print(GPIO.input(BUTTON1))
time.sleep(1)
finally:
GPIO.cleanup()
read2.py
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
BUTTON1=2
GEDRUECKT=0
GPIO.setup(BUTTON1, GPIO.IN)
try:
while(True):
if( GPIO.input(BUTTON1) == GEDRUECKT):
print("Button wurde gedrückt")
else:
print("Button wurde nicht gedrückt")
time.sleep(1)
finally:
GPIO.cleanup()
read3.py
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
BUTTON1=2
GEDRUECKT=0
GPIO.setup(BUTTON1, GPIO.IN)
try:
print("Bitte Button drücken um fortzufahren…")
while( GPIO.input(BUTTON1) != GEDRUECKT ):
pass
print("Bitte Button loslassen um fortzufahren…")
while( GPIO.input(BUTTON1) == GEDRUECKT ):
pass
finally:
GPIO.cleanup()
print("Das Programm ist beendet")
Beispiel: Ansteuerung mittels Webserver
Aufgaben
Eränzen Sie die Programme aus dem ersten Teil (GPIO Output), so dass jeweils beim Drücken eines Knopfes auf den nächsten Zustand umgeschaltet wird:
- Bauen Sie eine Schaltung und schreiben Sie das dazugehörige Programm, um abwechselnd 2 LEDs blinken zu lassen.
- Programmieren Sie eine Ampelschaltung, die in der richtigen Reihenfolge zwischen 3 LEDs umschaltet.
Zusatzaufgaben
- Programmieren Sie eine Schaltung mit 3 LEDs, welche 3 Bits darstellen, mit denen von 0 bis 7 gezählt wird.
- Schreiben Sie ein Programm, um auf einer 7-Segment-Anzeige zu zählen.
- Schreiben Sie ein Programm, das die Zeit zählt, wie lange ein Knopf gedrückt wurde.
- Entwerfen Sie eine Schaltung, um mit dem Programm von 5. zu messen wie lange es dauert, einen Kondensator über einen Photoresistor zu (ent)laden.
Weitere einfache Sensoren
Helligkeit mit Photoresistor+Kondonsator (oder Boden-Feuchtigkeitssensor)
MotionSensor
HC-SR04 - Ultrasonic Sensor (Entfernungsmesser)
Weitere Aktuatoren/Anzeigen
Multi-character 7-segment display
Parallele Protokolle
16x2 LCD-Display
Serielle Protokolle
UART
minicom -D /dev/ttyUSB0
I²C
- Displays
- GPIO-Expander
- AD/DA-Wandler
- Microcontroller
SPI
- Programmer z.B. für Arduino (ATtiny, ESP8266, ESP32)
„1-Wire“ -> „Bit-Banging“
DHT11 / DHT22 / AM2302 (Luftfeuchtigkeit+Temperatur)
Sonstiges
PiCamera
SoundBoard
Internet connection status indicator
Reaction Game
Home Assistant
Raspap
Mikrocontroller
(µController, µC, MCU)
Mikrocontroller vs SoC vs Einplatinencomputer
Erklärung Mikrocontroller in Videoform
Erklärung SoC in Videoform
Microcontroller
Vorteile:
- Kostengünstig: Microcontroller werden in kostensensitiven Projekte eingesetzt.
- Energieeffizient: Sie verbrauchen wenig Strom, was sie perfekt für batteriebetriebene Anwendungen macht.
- Einfache Integration: Microcontroller sind oft leicht in bestehende Systeme zu integrieren und benötigen nur minimale externe Komponenten.
Nachteile:
- Begrenzte Rechenleistung: Sie haben weniger Rechenleistung und Speicher im Vergleich zu Einplatinencomputern.
- Eingeschränkte Funktionalität: Microcontroller sind für spezifische Aufgaben ausgelegt und bieten weniger Flexibilität für komplexe Anwendungen.
- Weniger Peripherieoptionen: Sie haben oft weniger Schnittstellen und Peripheriegeräte im Vergleich zu Einplatinencomputern.
SoC
Vorteile:
- Hohe Integration: CPU, GPU, Speicher, und Peripheriegeräte auf einem Chip (kompakte Bauweise).
- Energieeffizienz: Optimierter Stromverbrauch durch Integration und geringere Kommunikationsverluste.
- Leistungsfähigkeit: Häufig leistungsstärker als Mikrocontroller, geeignet für komplexe Anwendungen (z. B. Multimedia, AI).
Nachteile:
- Komplexität: Höhere Anforderungen an Design und Programmierung als bei Mikrocontrollern.
- Kosten: Teurer als Mikrocontroller, insbesondere bei kleinen Projekten oder niedrigen Stückzahlen.
- Reparatur/Austausch: Fehlfunktion einzelner Komponenten kann den Austausch des gesamten Chips erfordern.
Einplatinencomputer
Vorteile:
- Hohe Rechenleistung: Einplatinencomputer wie der Raspberry Pi bieten deutlich mehr Rechenleistung und Speicher.
- Vielseitigkeit: Sie können eine Vielzahl von Betriebssystemen ausführen und sind für komplexe Anwendungen geeignet.
- Erweiterbarkeit: Einplatinencomputer bieten zahlreiche Schnittstellen und Peripheriegeräte, was sie sehr flexibel macht.
Nachteile:
- Höherer Stromverbrauch: Sie verbrauchen mehr Strom als Microcontroller, was sie weniger geeignet für batteriebetriebene Anwendungen macht.
- Kosten: Einplatinencomputer sind in der Regel teurer als Microcontroller.
- Komplexität: Die Einrichtung und Programmierung kann komplexer sein, was eine steilere Lernkurve bedeutet.
Beispiele bekannter Mikrocontrollern
-
Atmel ATtiny, ATmega
- 8bit AVR
-
Espressif ESP8266 (NodeMCU), ESP32
- 32bit Wi-Fi Controller
-
STMicroelectronics STM32
- 32bit ARM Cortex-M
-
Raspberry Pi Foundation RP2040
- 32bit ARM Cortex-M0+
Für Mikrocontroller häufig verwendete Programmiersprachen
- C, C++ (Arduino Sketches)
- Rust
- MicroPython
Arduino
Programmer und IDEs für Arduino
pio device list
git clone https://github.com/platformio/platform-espressif8266 ## oder platform-espressif32
cd platform-*/examples/arduino-wifiscan
pio run --target upload -e nodemcuv2 ## für esp8266mod-12-F
pio run --target upload -e esp-wrover-kit ## für esp-WROOM-32
pio device monitor -b 115200
platformio.ini für die ESPs der Schule
Simulator
Künstliche Intelligenz
- Einführung
- Wofür/Wie kann ich KI einsetzen?
- Technische Grundlagen
- Wie funktioniert maschinelles Lernen?
- Sprachmodelle
- Rechtliches
- Ausblick / Zukunft (?)
Vortrag von Klaus Knopper: „Chancen + Risiken generativer KI in Unterricht + Prüfungen“
Einführung
- Deep Fake Beispiele:
Wofür/Wie kann ich KI einsetzen?
-
Beispiele (Sprachmodelle):
-
Lokal:
Wo sind derzeit die Grenzen? Was sollte man beachten?
- Code Generierung (z.B. Copilot)
- Datenschutz, Bias, Manipulation (z.B. DeepSeek)
Beispiel IHK-AP1 2025 „KI zur Rechtsberatung“???
Technische Grundlagen
Begriffe die man kennen sollte:
Was ist „KI“
- Weak artificial intelligence (weak AI) = Artificial Narrow Intelligence
- strong AI:
- Artificial super intelligence (ASI)
- Artificial general intelligence (AGI)
Unterschied zwischen „Programmieren“ und „Machine Learning“
Training und Inferenz
Netz(architektur/struktur) vs. Modell
- Daten
- Gewichte
Wie funktioniert maschinelles Lernen?
Sprachmodelle
SOL Sprachmodelle
SOL:
https://media.ccc.de/v/ds23-194-chatgpt-dialogeFragen:
- Wie funktionieren Sprachmodelle (ganz grob)
- Was können Sprachmodelle aktuell?
- Was können Sprachmodelle (aktuell noch) nicht?
Zusatzaufgabe:
- Führt einen Dialog mit einem Sprachmodell, in dem ihr zeigt, wo die Grenzen der KI sind.
- Welche Fragen zum Thema KI habt ihr?
Retrieval-augmented generation (RAG)
Vortrag + Material von Michael Christen: „Open Data/Freie Daten in KI Chatbots nutzen“ https://github.com/Orbiter/llm-rag-cheat-sheet
Rechtliches
Ausblick / Zukunft (?)
Turing-Test
Spiegeltest
- Cognitive test
- Beispiel: Claude Opus
Node-RED
Low-code programming for event-driven applications
Setup
via Docker
docker volume create --name node_red_data
docker run -it -p 1880:1880 -v node_red_data:/data --name mynodered nodered/node-red --dns 8.8.8.8
Documentation
Swagger
Setup
Menü
-> User Settings
-> Palette
-> Install
openapi-red
(Client)node-red-node-swagger
(Documentation Generator)
Benutzung Client
openApi-red
Node statthttp request
Node benutzen
Benutzung Documentation Generator
-
http in
Node nutzen und optionalDocs
Property editieren -
Swagger UI (Live Demo) starten
http://localhost:1880/http-api/swagger.json
eintragen- mit
Explore
laden
SQL
- Grundlagen
- Normalisierung
- Quick Reference
- SQL Injections
Grundlagen
NoSQL (Not only SQL)
ACID
- Atomicity
- Consistency
- Isolation
- Durability
CAP theorem
- Consistency
- Availability
- Partition tolerance
Normalisierung
Ziel: Konsistenzerhöhung durch Redundanzvermeidung
Erste Normalform (1NF)
Jedes Attribut der Relation muss einen atomaren Wertebereich haben, und die Relation muss frei von Wiederholungsgruppen sein
Lösung: atomare Attributwertebereiche
- Felder (Spalten) mit zusammengesetzten Typen aufspalten -> atomaren Wertebereich
- -> Aus Datenbankeinträgen mit Listen (Wiederholungsgruppen) können mehrere Einträge werden
Zweite Normalform (2NF)
Nichtschlüsselattribute müssen von allen Schlüsseln vollständig abhängen
Lösung: Tabellen aufteilen
Dritte Normalform (3NF)
Keine funktionalen Abhängigkeiten der Nichtschlüssel-Attribute untereinander (transitive Abhängigkeiten)
Lösung: Tabellen weiter aufteilen
Quick Reference
CREATE TABLE
CREATE TABLE table_name
(
column_name1 data_type,
column_name2 data_type,
column_name3 data_type,
)
INDEX
GRANT / REVOKE
GRANT
privileges
ON object
TO role_specification
- privilegeds: SELECT | INSERT | UPDATE | … | ALL PRIVILEGES
- objects: db_name | table_name | …
- role_specification: user | group | …
INSERT INTO
INSERT INTO table_name
(column1, column2, column3,...)
VALUES (value1, value2, value3,....)
UPDATE
UPDATE table_name
SET column1=value, column2=value,...
WHERE some_column=some_value
SELECT + WHERE
SELECT column_names
FROM table_name
WHERE column_name operator value
SQL Operators
Logical Operators
- AND, OR, NOT
- ANY, SOME, IN, ALL
Comparison Operators
- =, >, <, >=, <=, <>
Arithmetic Operators
- +, -, *, /, %
Date/Time-Functions
z.B.
NOW()
SELECT + WHERE + LIKE
SELECT column_names
FROM table_name
WHERE column_name LIKE pattern
Wildcards
Wildcard | Bedeutung |
---|---|
% | Ein oder mehrere beliebige Zeichen |
_ | Ein einzelnes Zeichen |
weitere |
SELECT + DISTINCT + LIMIT
SELECT (DISTINCT) column_names
FROM table_name
WHERE conditions
(LIMIT n)
SELECT + ORDER BY
SELECT column_names
FROM table_name
WHERE column_name operator value
ORDER BY column1, column2, ... ASC|DESC;
SELECT + GROUP BY (+ HAVING)
SELECT column_names, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
(HAVING condition)
Aggregate Functions
MIN(), MAX(), COUNT(), SUM(), AVG()
JOIN
SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name