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

  1. Installieren von VirtualBox

  2. Erstellen Einer VM als Betriebssystem wurde Ubuntu_22.04.4_LTS eingesetzt

  3. Aktivieren der Gasterweiterung und reboot

  4. Als nächstes muss ein Bug umgangen werden der verhindert das das Terminal starten kann

    settings -> Language -> set language to „Englisch Canada“

  5. Microcontroller mit der VM verbinden

    Aus dem VM Overlay Geräte -> USB -> Gerät auswählen

  6. 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.rules

    • Suchen nach 1a86

    • # vor die Regel ENV{PRODUCT}=="1a86/7523/*", ENV{BRLTTY_BRAILLE_DRIVER}="bm", GOTO="brltty_usb_run" Systemvoraussetzungen

    • Speichern

    • VM neustarten

  7. (optional) um zu prüfen ob die Verbindung erfolgreich war kann mit dem Kommando sudo dmesg die Statusnachrichten betrachtet werden, alternativ mit sudo apt-get install picocom und picocom -b 115200 /dev/ttyUSB0 ein Serialmonitor geöffnet werden.

  8. Rust Installieren

    • curl installieren

      sudo apt  install curl

    • rustup installieren

      curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

  9. espup installieren:
    • cargo install espup

    • espup install

    • . /home/vboxuser/export-esp.sh (export-esp.sh muss in jedem terminal neu ausgeführt werden um das Environment vorzubereiten)

  10. 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-0

    • mkdir -p ~/esp

    • cd ~/esp

    • git clone --recursive https://github.com/espressif/esp-idf.git

    • cd ~/esp/esp-idf

    • ./install.sh all

    • . $HOME/esp/esp-idf/export.sh export.sh setzt nötige env-Variablen und muss in jedem terminal neu ausgeführt werden

  11. ldproxy installieren

    • cargo install ldproxy

  12. cargo-generate installieren

  1. erstellen eines Projekts mit dem ESP-Template

    • für ein nonstd programm: cargo generate esp-rs/esp-template

    • für ein std programm: cargo generate esp-rs/esp-idf-template cargo

  2. 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.

  1. Arduino IDE über die offizielle Webseite herunterladen und installieren

  2. esp32 Modul by Espressif mit dem integrierten Board Manager laden

  3. Auswahl des Microcontrollers:

    Tools -> Board -> esp32 -> passendes Board auswählen (in diesem Projekt wurde ESP 32 Dev Module verwendet)

  4. Auswahl der Seriellen Schnittstelle

    Tools -> Port

  5. 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.

_images/Reaktionstest.jpg

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