Wokwi – Schaltungs- und Softwaresimulation im Browser

Generische Schaltungssimulation ist ein Liebe-Hass-Thema: manche lieben PSPice, während andere dem System nicht über den Weg trauen. Mit Wokwi steht ein insbesondere auf die Bedürfnisse von Makern optimiertes System zur Verfügung, das – WebAssembly und Co sei dank – komplett im Browser lebt und sich der Unterstützung diverser Ökosystem-Player (Stichwort Espressif) erfreut.

Erste Gehversuche mit der kostenlosen Basisversion

Für die Anmeldung beim unter https://wokwi.com/dashboard/projects bereitstehenden Simulator kann der geneigte Entwickler auf Google, GitHub oder ein lokales Konto setzen. Innovativ an letzterem ist die Art der Anmeldung – Wokwi sendet einfach einen Link an das Email-Account, mit dem man sich sofort im Backend wiederfindet.
Zum Erzeugen eines neuen Projekts bietet Wokwi dann die in der Abbildung gezeigten Optionen an – der Autor entschied sich für einen grundlegenden ESP32.

(Bildquelle alle: Screenshot)

Lohn der Mühen ist das Aufscheinen des zweigeteilten Hauptschirms der Simulation – rechts das Schaltbild, links ein Hello World-Sketch auf Basis des Arduino Cores:

1void setup() {
2// put your setup code here, to run once:
3Serial.begin(115200);
4Serial.println(“Hello, ESP32!”);
5}
6
7void loop() {
8// put your main code here, to run repeatedly:
9delay(10); // this speeds up the simulation
10}

Zum Zeitpunkt der Drucklegung unterstützt WokWi IDF nicht. Das Anklicken des Play-Symbols sorgt dann dafür, dass – siehe auch Abbildung zwei – eine Konsole für die Interaktion mit der Runtime aufscheint.

Versuche mit emulierter Hardware

Als Nächstes bietet sich ein kleines Experiment mit virtueller Hardware an: im Hintergrund setzt Wokwi nicht auf SPICE; sondern auf eine hauseigene rein digitale Simulationsumgebung (siehe hierzu auch die diversen Featurewünsche in GitHub). Aus diesem Grund ziehen wir zwei rote LEDs in die Schaltung, eine wird mit Vdd, eine mit dem ESP32 verbunden.
Die Steuerungsdatei diagram.json verändert sich dann nach folgendem Schema – wichtig ist, dass manuelle Eingriffe in das File zum Setzen mancher im GUI nicht zugänglicher Attribute notwendig und legitim sind:

1{
2 “version”: 1,
3 “author”: “Anonymous maker”,
4 “editor”: “wokwi”,
5 “parts”: [
6 { “type”: “wokwi-esp32-devkit-v1”, “id”: “esp”, “top”: 0, “left”: 0, “attrs”: {} },
7 {
8 “type”: “wokwi-led”,
9 “id”: “led1”,
10 “top”: 128.27,
11 “left”: 75.8,
12 “attrs”: { “color”: “red” }
13 },
14 { “type”: “wokwi-gnd”, “id”: “gnd1”, “top”: 206.53, “left”: 74.2, “attrs”: {} },
15 {
16 “type”: “wokwi-led”,
17 “id”: “led2”,
18 “top”: 124.93,
19 “left”: 129.13,
20 “attrs”: { “color”: “red” }
21 },
22 { “type”: “wokwi-vcc”, “id”: “vcc1”, “top”: 52.63, “left”: 116.93, “attrs”: {} }
23 ],
24 “connections”: [
25 [ “esp:TX0”, “$serialMonitor:RX”, “”, [] ],
26 [ “esp:RX0”, “$serialMonitor:TX”, “”, [] ],
27 [ “esp:D12”, “led1:A”, “green”, [ “h0” ] ],
28 [ “vcc1:VCC”, “led2:A”, “red”, [ “v0” ] ],
29 [ “led2:C”, “gnd1:GND”, “green”, [ “v0” ] ],
30 [ “led1:C”, “gnd1:GND”, “green”, [ “v41.27”, “h-2.2” ] ]
31 ]
32}

Als Programm dient folgendes Snippet:

1void setup() {
2 // put your setup code here, to run once:
3 Serial.begin(115200);
4 Serial.println(“Hello, ESP32!”);
5 pinMode(12, OUTPUT);
6
7}
8
9void loop() {
10 digitalWrite(12, HIGH);
11 delay(500);
12 digitalWrite(12, LOW);
13 delay(500);
14}

Lohn der Programmausführung ist das in der Abbildung gezeigte Verhalten. Interessant ist, dass Wokwi die Zerstörung der roten LED (direkt an 3V3) nicht in der Simulation abbildet.

Auch sonst ist das Modell simpel. Wer nach folgendem Schema eine Art PWM realisiert, sieht keine Abdunkelung der LED:

1void loop() {
2 digitalWrite(12, HIGH);
3 delay(50);
4 digitalWrite(12, LOW);
5 delay(50);
6}

Fortgeschrittenes Projekt aus Vorlage

Wokwi bietet Fertigprojekte als Basis an – als kleines Versuchsobjekt dient das unter https://wokwi.com/projects/346340290067432020 bereitstehende Pong-Spiel. Interessant ist an ihm die Datei libraries.txt, die nach folgendem Schema Arduinobibliotheken einbindet:

1# Wokwi Library List
2# See https://docs.wokwi.com/guides/libraries
3
4# Automatically added based on includes:
5Adafruit GFX Library
6
7Adafruit SSD1306

Die Einrichtung des auf einem SSD1306 basierenden OLEDs erfolgt dann wie in der Realität:

1void setup()
2{
3 display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
4
5 // Display the splash screen (we’re legally required to do so)
6 display.display();
7 unsigned long start = millis();
8
9. . .
10
11 // Player paddle
12 display.drawFastVLine(MCU_X, mcu_y, PADDLE_HEIGHT, WHITE);
13 display.drawFastVLine(PLAYER_X, player_y, PADDLE_HEIGHT, BLACK);

Lohn der Mühen ist hier das in der Abbildung gezeigte Programm.

Mehr Funktionen für zahlende Kunden

Der unter https://docs.wokwi.com/getting-started/wokwi-club bereitstehende und sieben Euro pro Monat kostende Wokwi Club bietet Zusatzfunktionen an: neben einem besseren WLAN-Emulator und der Möglichkeit zum Hochladen von Binärdateien in den MicroSD-Speicher gibt es ein System, mit dem “Votieren” für die Weiterentwicklung möglich ist.

Lohnt es sich?

Außer Frage steht, dass Wokwi ob der – durchaus brauchbaren – Simulation des ESP32 bzw des Arduino das Ausprobieren der Hardware-Software-Interaktion ermöglicht. Andererseits ist die Modellierungsengine durch die Beschränkung auf das digitale Verhalten arg eingeschränkt; ein Ersatz für die reale Laborarbeit ist das System zumindest nach Meinung des Autors auf keinen Fall.

Zuerst erschienen bei Mikrocontroller.net News

Quelle: Read More