Mit dem Arduino Core für den Raspberry Pi Pico und einigen Anpassungen an den offenen Quellen von ESP8266BASIC kann ein Raspberry Pi PICO W die beliebte 40 Zeilen der ESP8266-Variante des Beitrags auf dieser Seite ebenfalls ausführen.
Der Anwender kann per Drag & Drop die in diesem Archiv gepackte *.uf2-Software auf das Laufwerk des Pico W ziehen. Der Pico startet dann den BASIC-Interpreter, der überwiegend kompatibel zu dem von mmiscool geschaffenem ESP8266Basic ist, das auch in den Büchern [3] und [4] dieser Homepage verwendet wird.
Während der Portierung ab April 2023 diente diese Neopixel-Uhr als Proof of Concept und die weitere Anpassung mündete im Sommer in einem espBASIC on RP2040 [5].
Die Anpassung erlaubt die Ansteuerung der NeoPixel über GPIO 0 (Pin 1 auf dem Board). Wer ESP8266BASIC kennt, kann den Pico per USB mit dem PC bei gedrücktem BOOTSEL-Button des Boards verbinden. Durch das Kopieren der uf2-Datei auf das nun erscheinende Laufwerk wird das Basic-Betriebssystem übertragen. Nach Abschluss der Übertragung meldet sich der Pico als Laufwerk ab und die PicoW-Variante steht zur Verfügung. Der Flash-Prozess ist damit abgeschlossen.
Die portierte Version unterstützt einige Besonderheiten des PicoW, die an anderer Stelle beschrieben werden sollen oder sind. Für die NeoPixel-Uhr ist besonders hervorzuheben, dass die Sommer- und Winterzeit-Umstellung automatisch erfolgt, wenn der Zeitaufruf time durch die neue Funktion cet ersetzt wird. Damit entfallen Anfragen in Richtung time.setup...
Die Uhrzeit wird per Internet synchronisiert, so dass ein Pi PicoW zwingend über einen Router diesen Zugang erhält. Zu Beginn kennt der PicoW üblicherweise keinen Router und spannt einen eigenen HotSpot (Access-Point) auf, der mit der Bezeichnung PicoW beginnt. Durch Verbindung mit diesem WiFi-Netz ist das Basic über die IP 192.168.42.1 erreichbar. In den Options/Settings kann nun der gewünschte Router mit Password eingetragen werden. Mit Save übernimmt Basic die Einstellungen für den nächsten Start (Restart). Details findet man auf der Webseite von ESP8266Basic oder im Buch MSR mit WiFi und ESPBASIC oder MSR mit Smartphone und Tablet oder MSR mit RP2040 espBASIC.
Um einen 60-LED-NeoPixel-Streifen als Rheinturmuhr an Pin 1 zu betreiben sind folgende Schritte erforderlich
- Download von espBASIC on RP2040 in Form einer uf2-Datei zu [5] und flashen des Basic über BOOTSEL, wie oben beschrieben. Der Pico sucht einen Router, dabei blinkt die eingebaute LED bis zu 20 mal kurz im Sekundentakt. Da zu Beginn kein Router gefunden werden kann, startet der PicoW im AP-Modus.
- Anmelden bei PicoW AP ohne Passwort
- In einem Browser die IP 192.168.42.1 aufrufen und in den Settings den eigenen Router eintragen. Mit Save sichern. Mit Reset den PicoW neu starten
- Sobald der Router gefunden wird, stoppt die Blinkfolge und das neue RP2040-Basic-Betriebssystem ist nun unter der vom Router vergebenen IP im lokalen Netz erreichbar.
Die serielle Ausgabe zeigt die lokale IP z. B.
...
4 5 6 7
Connected to FRITZ!Box Fon WLAN 9720
IP address : 192.168.178.59
WIFIname
WIFIpass
....
Die 40 Zeilen der Rheinturmuhr sorgen dafür, dass die NeoPixel diese Dezimaluhr anzeigen. Diese Zeilen sind über das Menü EDIT in ein leeres Programm-Feld zu kopieren und als default.bas zu speichern. Das Basic-Programm soll später nach einem Neustart des PicoW automatisch von Basic gestartet werden. Nach Save kann mit RUN das Uhrenprogramm gestartet und getestet werden. Wenn alles zur Zufriedenheit funktioniert kann der Autostart von default.bas in den SETTINGS per Haken eingeschaltet werden. Nach einem Reset startet nun die Uhr automatisch:
- PowerUp des PicoW: Kurzblinken während der Routersuche
- Basic lädt default.bas und startet dies nach 30 Sekunden (Wechselblinken)
- Durch das Drücken von BOOTSEL kann der Autostart im Fehlerfall abgebrochen werden
- Die Markierungen des Turms leuchten auf
- Sobald die interne Uhr per Netz synchronisiert ist, läuft die Anzeige los
- Nach 10 Sekunden erscheint die korrekte Dezimaluhrdarstellung der Rheinturmuhr
Dies sah während der Entwicklung auf einem Smartphone etwa wie folgt aus.
Ein erweitertes espBASIC-Programm:
Die Helligkeit bzw. Intensität des Streifens legt die Variablen i fest und kann über die Spannung an ADC 0 beeinflusst werden: i = io(ai)/15+5. Ist dieser Analogeingang mit GND verbunden, so ist die geringste Helligkeit eingestellt, eine externe Spannungsversorgung ist so nicht erforderlich. Ein LDR mit Vorwiderstand kann die Intensität automatisch steuern wie seinerzeit bei einem ESP8266-Witty-Cloud. Bei zu starker Belastung des Pi Pico durch den Streifen treten unschöne Flackereffekte auf und die Farbe Rot überwiegt. Wer möchte kann als Spielerei die Temperatur im Pico als Intensitäts-Kriterium heranziehen. Der Aufruf i = io(ai,4) gibt den Messwert in Celsiusgraden zurück. Eine weitere Pico-Funktion bootsel() liefert den Status des Tasters und io(po,25,1) schaltet die LED des Boards an.
WatchDog
WatchNet(1)
i = 20
'Neo.setup(0)
Neo.Cls()
Print "RTC WS PICOW GPIO 0"
Gosub [marker]
Timer 1000,[uhr]
Wait
[uhr]
' i = io(ai)/15+5 'Helligkeit via ADC 0
o = 1
t$ = CET("hour:min:sec")
s0 = Val(Mid(t$,8,1))
b = s0 And 1
Neo(46,0,b*i,00)
Neo(47,0,(1-b)*i,00)
If s0 = 0 Then
Neo.stripcolor(1,9,0,0,o)
s1 = Val(Mid(t$,7,1))
Neo.stripcolor(11,10+s1,i,i,i)
If s1 = 0 Then Neo.stripcolor(11,10+5,0,0,o)
m0 = Val(Mid(t$,5,1))
Neo.stripcolor(17,16+m0,i,i,i)
If m0 = 0 Then Neo.stripcolor(17,16+9,0,0,o)
m1 = Val(Mid(t$,4,1))
Neo.stripcolor(27,26+m1,i,i,i)
If m1 = 0 Then Neo.stripcolor(27,26+5,0,0,o)
h0 = Val(Mid(t$,2,1))
Neo.stripcolor(33,32+h0,i,i,i)
If h0 = 0 Then Neo.stripcolor(33,32+9,0,0,o)
h1 = Val(Mid(t$,1,1))
Neo.stripcolor(43,42+h1,i,i,i)
If h1 = 0 Then Neo.stripcolor(43,42+2,0,0,o)
Cls
'Gosub [up]
Gosub [marker]
End If
Serialprint t$
Neo.stripcolor(1,s0,i,i,i)
x = Val(Mid(t$,4,2))*100
x = Val(Mid(t$,7,2))+x
If (x > 5954) Then
Neo.stripcolor(50,60,100,100,100)
Gosub [pip]
Delay 60
If (x<5959) Then
Neo.stripcolor(50,60,0,0,0)
Else
Gosub [up]
Gosub [marker]
End If
End If
If (x = 3000) Then
Gosub [pip]
Gosub [up]
Gosub [marker]
End If
If x = 0 Then
'Io(pwo,15,127)
Else
Io(pwo,15,0)
End If
Wait
[pip]
Pwmfreq 880
Io(pwo,15,127)
Delay 40
Io(pwo,15,0)
Return
[up]
For z = 1 to 60
Neo.shIft(41,60,-1)
Neo.shIft(21,40,-1)
Neo.shIft(1,20,-1)
Next z
Neo.Cls()
Return
[marker]
Neo(00,i,00,00)
Neo(10,i,00,00)
Neo(16,i,i/2,00)
Neo(26,i,i/2,00)
Neo(32,i,00,00)
Neo(42,i,00,00)
Neo(45,i,00,00)
Neo(48,i,00,00)
Return
Dieses espBASIC berücksichtigt die Eigenart, dass ein RP Pico W ab und zu eine unterbrochene Verbindung zum Router nicht wieder aufnimmt und somit dieser nur noch zu Fuß erreichbar ist. Das BASIC überprüft dies mittels bei WatchNet(1) und leitet bei einer Unterbrechung eine erneute Verbindung ein. Sollte dem espBASIC-Interpreter im Pico W die Kontrolle länger als acht Sekunden entzogen werden, so erfolgt - wenn einmalig der Aufruf WatchDog erfolgt ist - ein Zwangs-Reset. Dieses Verfahren soll dafür sorgen, dass ein Pico W auf jeden Fall erreichbar bleibt, solange ein Router aktiv ist. Damit bleibt auch die Uhrzeit über das Internet auf dem aktuellen Stand.
|
Mittels dieser uf2-Datei kann ein RP Pico W fast alles das, was mit ESP8266-Basic von mmiscool möglich ist und mehr. Dies wird auf ca. 400 Seiten in diesem Buch beschrieben, wie z. B. Untersuchungen mit Ultraschall aus dem technisch-physikalischen Bereich mittels einer weiteren sehr preiswerten Hardware mit kleiner Modifikation. Als weiteres Highlight zur Auswertung von Messdaten kann die Integration von Regressionen im mathematischen Bereich bezeichnet werden.
Das 2023/24 erschienene Messen, Steuern und Regeln mit RP2040 espBASIC zeigt in Einführung, Beispiel und Anwendung was mit der freien Software espBASIC on RP2040 alles möglich ist.
|
|