2. Microcontroller: Reaktionstest in Rust & Modellierung eines 3D Cases¶
2.1. Einführung¶
Ziehl des Projekts ist es einen Reaktionstest zu bauen. Als technologie kommt ein ESP32 zum einsatz der mit rust programmiert werden soll. für eine bessere Haptik soll außerdem ein Gehäuse mittels 3D druck angefertigt werden.
2.2. Programmieren des Microcontroller¶
2.2.1. Rust¶
Rust ist eine relativ junge Programmiersprache die sich durch garantierte Speichersicherheit ohne Garbage Collection auszeichnet. Außerdem bietet Rust sehr gute Laufzeitperformance und effiziente Ressourcennutzung. Das macht Rust sehr interessant für die Nutzung im embedded Bereich. Leider mussten wir feststellen das die Softwareunterstützung noch im anfangs Stadium ist. Es ist uns nicht gelungen im vorgegebenen Zeitraum ein Rust Programm auf einem Microcontroller zu laden. Aus diesem Grund können nur die verschiedenen Tooling-Ansätze vorgestellt werden.
2.2.1.1. Rust ESP Tooling 1: WSL (Ubuntu)¶
Hierbei wurde ein online guide von Trevor Lee maßgeblich verfolgt. Für die Verbindung des Microcontroller zur WSL wird das usbipd-win_4.1.0 Projekt eingesetzt. Da Hierbei unter anderem Firewallregeld des Windows Hosts angepasst werden müssen und das potentielle Sicherheitsrisiken mit sich zieht, wurde sich gegen diese Option entscheiden.
2.2.1.2. Rust ESP Tooling 2: Docker container¶
Espressif stellt idf-rust Images zur Verfügung auf denen all nötigen tools bereits vorinstalliert sind.
Der Befehl zum starten des Image könnte so aussehen:
docker run -it -v C:\lokales\Projekt\Verzeichniss:/home/esp/project --device COM8:/dev/ttyUSB0 espressif/idf-rust:all_latest /bin/bash
allerdings ist es nicht gelungen ein USB gerät des host Systems and den Container zu übergeben: „It is not possible to pass through a USB device (or a serial port) to a container as it requires support at the hypervisor level.“ (https://docs.docker.com/desktop/faqs/general/#:~:text=It%20is%20not%20possible%20to,support%20at%20the%20hypervisor%20level)
2.2.1.3. Rust ESP Tooling: Ubuntu VM (bester Versuch)¶
Hierbei wurden die benötigten Tools auf einer Ubuntu VirtualBox VM installiert
Installieren von VirtualBox
Erstellen Einer VM als Betriebssystem wurde Ubuntu_22.04.4_LTS eingesetzt
Aktivieren der Gasterweiterung und reboot
- Als nächstes muss ein Bug umgangen werden der verhindert das das Terminal starten kann
settings -> Language -> set language to „Englisch Canada“
- Microcontroller mit der VM verbinden
Aus dem VM Overlay Geräte -> USB -> Gerät auswählen
- per Default versuchen 2 Treiber gleichzeitig auf den Microcontroller zuzugreifen was dazu führt das dieser nicht erreichbar ist.
(https://github.com/juliagoda/CH341SER/issues/18)
code /usr/lib/udev/rules.d/85-brltty.rulesSuchen nach
1a86#vor die RegelENV{PRODUCT}=="1a86/7523/*", ENV{BRLTTY_BRAILLE_DRIVER}="bm", GOTO="brltty_usb_run"SystemvoraussetzungenSpeichern
VM neustarten
(optional) um zu prüfen ob die Verbindung erfolgreich war kann mit dem Kommando
sudo dmesgdie Statusnachrichten betrachtet werden, alternativ mitsudo apt-get install picocomundpicocom -b 115200 /dev/ttyUSB0ein Serialmonitor geöffnet werden.Rust Installieren
- curl installieren
sudo apt install curl
- rustup installieren
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
- espup installieren:
cargo install espupespup install. /home/vboxuser/export-esp.sh(export-esp.sh muss in jedem terminal neu ausgeführt werden um das Environment vorzubereiten)
esp-idf installieren (https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/linux-macos-setup.html#for-linux-users)
sudo apt-get install git wget flex bison gperf python3 python3-pip python3-venv cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0mkdir -p ~/espcd ~/espgit clone --recursive https://github.com/espressif/esp-idf.gitcd ~/esp/esp-idf./install.sh all. $HOME/esp/esp-idf/export.shexport.sh setzt nötige env-Variablen und muss in jedem terminal neu ausgeführt werden
ldproxy installieren
cargo install ldproxy
cargo-generate installieren
- für die Installation muss zuerst noch eine fehlende Dependency installiert werden (https://github.com/sfackler/rust-openssl/issues/855)
sudo apt-get install pkg-config libssl-dev-cargo install cargo-generate
erstellen eines Projekts mit dem ESP-Template
für ein nonstd programm:
cargo generate esp-rs/esp-templatefür ein std programm:
cargo generate esp-rs/esp-idf-template cargo
Upload des Projekts (bei diesen Schritten sind für uns nicht lösbare Fehler aufgetreten)
cargo run
Beim Ausführen von cargo run ist einer der beiden Fehler aufgetreten:
Fehler 1: error: failed to run custom build command for esp-idf-sys v0.34.1
Fehler 2: espflash kann nicht auf den COM-Port zuzugreifen (permission denied)
Zu diesen Fehlern konnte keine Lösungen, in angemessener Zeit, gefunden werden.
2.2.2. C++ Arduino IDE¶
Als alternativ zur Rust wird der Microcontroller stattdessen mit eine C++ Programm über Arduino IDE programmiert.
Arduino IDE über die offizielle Webseite herunterladen und installieren
esp32Modul by Espressif mit dem integrierten Board Manager laden- Auswahl des Microcontrollers:
Tools -> Board -> esp32 -> passendes Board auswählen (in diesem Projekt wurde
ESP 32 Dev Moduleverwendet)
- Auswahl der Seriellen Schnittstelle
Tools -> Port
Arduino IDE ist jetzt bereit ein Programm auf den Microcontroller zu laden
2.3. Elektronik¶
Als Mikrocontroller kommt ein ESP32 zum Einsatz. Der von Espressif Systems entwickelte Chip zeichnet sich durch seine leistungsstarke Dual-Core-CPU, integriertes WLAN und Bluetooth, sowie niedrigen Stromverbrauch aus.
Der Bildschirm ist ein 0.96 inch, 128 x 64 Pixel, OLED I2C Display von AZDelivery.
Abb. 2.3.1 Reaktionstest¶
2.4. 3D Druck¶
Für besseren Schutz und eine ansprechendere Optik soll es ein Gehäuse für die Elektronik geben. Das 3D Modell wurde mit Autodesk_Fusion (ehemals Fusion 360) erstellt. Das Gehäuse teilt sich dabei in 4 Teile auf:
untere Box
Deckel
Knopf
Text (für den 2 farbigen druck ist muss die Aufschrift ein eigenes Modell sein)
Die einzelnen Teile wurden als STL exportiert. Da der 3D-Druck auf einem Bambu Lab P1S stattfindet wird Bambu_Studio als Slicer verwendet.
Um den 2 farbigen druck für die Aufschrift zu realisieren wird zuerst nur das Modell der Schrift mit matt weißem PLA gedruckt. Anschließend wird das Filament auf matt schwarzes PLA gewechselt und das Modell des Deckels wird über die Schrift gedruckt. Dazu müssen Aussparungen in den Deckel modelliert werden und die Position der beiden Modelle auf dem Druckbett muss genau abgestimmt sein.
2.5. Literatur¶
- Rust on ESP Book (besucht am 13.04.2024):
- Embedded Rust Book (besucht am 13.04.2024):
- Blink Test Rust Development in Windows WSL by Trevor Lee (besucht am 13.04.2024):
https://www.instructables.com/ESP32-ESP32C3-Blink-Test-Rust-Development-in-Windo/