2023
HOME
Diese Seite ist veraltet. Die aktualisierte Version liefert dieser Link.
Seit April 2023: ESP8266BASIC auf dem Raspberry Pi Pico W
WiFi BASIC Rheinturmuhr
40 Zeilen auf RP Pico W

NeoPixel/WS2812-Uhr: Ansteuerung und Synchronisation auf die bequeme Art - reloaded again

Schrittmotor als GenaratorMit 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, welches eine Teilmenge des von mmiscool geschaffenem ESP8266Basic ist, welches auch in den Büchern [3] und [4] dieser Homepage verwendet wird.

Als Proof of Concept soll diese Neopixel-Uhr einer Funktion zugeführt werden.

Die Teilmenge 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 zunächst nur für diesen Einsatz portierte Version unterstützt bereits 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. 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 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.

Um einen 60-LED-NeoPixel-Streifen als Rheinturmuhr an Pin 1 zu betreiben sind folgende Schritte erforderlich

  • Download der uf2-Datei (412K-Zip) 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 alles sieht auf einem Smartphone 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 ADC0 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 bei einem ESP8266-Witty-Cloud. Bei zu starker Belastung des Pi Pico durch den Streifen treten unschöne Flackereffekte auf. Wer möchte kann als Spielerei die Temperatur im Pico als Intensitäts-Kriterium heranziehen. Der Aufruf i = io(ai,3) gibt den Messwert in Celsiusgraden zurück. Eine weitere Pico-Funktion io(bootsel) liefert den Status des Tasters und io(po,25,1) schaltet die LED des Boards an.

Dim i
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 ADC0
o = 1
t$ = Time("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 Pi PicoW ab und zu die Verbindung zum Router nicht wieder aufnimmt und somit nur noch zu Fuß erreichbar ist. Das BASIC überprüft dies und leitet bei einer Unterbrechung eine erneute Verbindung ein. Sollte dem espBASIC-Interpreter im PicoW die Kontrolle länger als acht Sekunden entzogen werden, so erfolgt ein Zwangs-Reset. Dieses Verfahren soll dafür sorgen, dass ein PicoW auf jeden Fall erreichbar bleibt, solange ein Router aktiv ist. Damit bleibt auch die Uhrzeit über das Internet auf dem aktuellen Stand.

Mittels der uf2-Datei kann ein RP PicoW auf einfachste Weise viele Dinge aus den ersten zwei Kapiteln dieses Buches ausführen. Die Programmierung in BASIC über einen Browser auf einem beliebigen Gerät ist nun auch auf dieser preiswerten Hardware möglich. Das Basic basiert auf Branch 3 der ESP8266-Variante und unterstützt zur Zeit nur eine geringe Teilmenge der Befehle und Funktionen. Insbesondere die vielen Hardware-Biliotheken aus Kapitel 3 sind noch nicht verfügbar.

Das 2019 erschienene Messen, Steuern und Regeln mit WiFi und ESP-BASIC zeigt was mit dieser Sprache alles möglich ist.


												

Compact Red Needle
MSR mit Arduino & Compact
Mehr Software

.
Startseite Bücher Software Digital RTV Musik Kontakt

Für Inhalt und weitere Verzweigung externer Links sind die Betreiber der dortigen Seiten verantwortlich - H.-J. Berndt