Forum

Einloggen | Registrieren | RSS  

Bernd.R

E-Mail

31.08.2022,
20:22
 

Raspberry Pico W, Programm wartet auf Request (Netzwerktechnik)

Hallo zusammen,
ich habe mir einen Raspberry Pico W zugelegt und das Beispielprogramm, von elektronik-kompendium, für den Server ausprobiert.
Alles funktioniert.

Jetzt wollte ich das Programm so abändern das der Pico noch andere Dinge macht z.B. eine LED blinken lassen.
Leider wartet der Pico an den Befehl server.accept() auf externe Anfragen.
Ich habe mit server.setblocking(False) und server.settimeout(0) versucht dieses warten zu unterbinden.
Der Pico wartet zwar nicht mehr es kommen aber OSError (Errno = 22, Errno = 11) und antworten werden nicht zum Browser gesendet.

Gibt es einen Parameter den man abfragen kann, damit man weiß das Externe Anfragen vorliegen?

z.B. so etwas
if(server.newRequestAvailable):
cl, addr = server.accept()
request = cl.recv(1024)
request = str(request)
print(request)

bastelix(R)

01.02.2023,
22:33

@ Bernd.R

Raspberry Pico W, Programm wartet auf Request

» Mal sehen wie weit ich jetzt komme.
Bei dem Ehrzeig irgendwann zum Ziel ;-)

Danke für die Rückmeldung!

Bernd.R

31.01.2023,
10:15

@ bastelix

Raspberry Pico W, Programm wartet auf Request

Mittlerweile wurde mir bei meinen Problem von einen alten Kumpel geholfen.

Ich hatte zwei Fehler bei der Umsetzung gemacht.
Wie von bastelix vorgeschlagen habe ich versucht das Problem mit Multithreading zu lösen.
Leider habe ich wohl die falschen Libaries verwendet (oder falsch von mir angewendet)
Die Libaries haben kein echtes Multithreading gestartet, der Programmcode lief scheinbar nur auf einen Core.
Mit der Libary "_thread" werden beide Cores vom Pico verwendet.

Das zweite Problem war die Onboard LED, diese LED wird im Gegensatz zum Pico ohne W über das WLAN Modul angesteuert.
Scheibar ist es nicht gut, mit beiden Cores das WLAN Modul gleichzeitig zu verwenden.
Benutzt man anstelle der Onboard LED einen anderen GIPO, funktioniert alles.

Mal sehen wie weit ich jetzt komme.

Bernd R

E-Mail

27.09.2022,
12:02

@ Bernd R

Raspberry Pico W, Programm wartet auf Request

Leider konnte ich das Problem auch nicht mit asyncio lösen.
Das Beispiel, für asyncio, das ich gefunden habe läuft zwar ohne Fehlermeldung auf den Pico W aber das Programm läuft nicht rund.
Ich werde erstmal ein anderes Projekt verfolgen.

Bernd R

E-Mail

06.09.2022,
18:17

@ Patrick Schnabel

Raspberry Pico W, Programm wartet auf Request

» » Hallo Patrick,

dieser Tipp sieht vielversprechend aus.
» Das Stichwort ist "micropython async web server".

Mit der normalen async Funktion habe ich das gleiche Problem aber die TCP Komponente konnte funktionieren.
Ich habe es zwar noch nicht hinbekommen aber das liegt eher daran das ich aktuell keine Zeit habe.
Ich melde mich wenn ich mehr weiß.

Patrick Schnabel(R)

E-Mail

02.09.2022,
08:42

@ Bernd.R

Raspberry Pico W, Programm wartet auf Request

» Hallo Patrick,
»
» » Vielleicht ist diese Lösung besser.
» »
» » https://www.elektronik-kompendium.de/sites/raspberry-pi/2707151.htm
»
» diese Beispiel hatte ich mir auch schon angesehen.
» Mein Problem besteht darin, wie schalte ich die LED automatisch nach z.B.
» 10 Sekunden wieder aus?
» Das Programm wartet auf Web-Anfragen.

Das Stichwort ist "micropython async web server".

--
Gruß von Patrick

https://www.elektronik-kompendium.de/

bastelix(R)

02.09.2022,
01:04

@ Bernd.R

Raspberry Pico W, Programm wartet auf Request

Hallo Bernd,

» Die LED soll dauerhaft blinken, nicht nur wenn Webanfragen kommen
Ok, da hast du zwei Möglichkeiten, da der PICO zwei Kerne hat. Entweder du löst es mit einem Thread und Interrupts wie es Eierschale vorschlägt, oder du nutzt beide CPU-Kerne des PICO und schreibst Code der mit zwei Threads arbeitet. So oder so, nicht grad eine einfache Einsteiger-Übung.

Ein bisschen was über Multithreading auf dem PICO kannst du hier nachlesen: https://heise.de/-6000386

» Ob das jetzt schon als Projekt durch geht:
Ja, sonst wäre es ja nur rumspielen um was zu lernen. :-P Wobei das für den Anfang nicht schaden würde.

Was du vor hast ist softwareseitig für einen Anfänger schon eine ganz schöne Herausforderung. RTC/Timer zum zeitgesteuerten Schalten, dann WLAN (also Client-Server und vermutlich HTTP) und dann noch Interrupts (für die Taster). Da musst du darüber nachdenken, dass Dinge wirklich gleichzeitig passieren und du dich quasi gleichzeitig darum kümmern muss.

Das ist nicht die Komplexitätsklasse Fußball gucken, Chips essen und Bier trinken. Das ist eher die Komplexitätsklasse 5-Jähriger hat herausgefunden wie man ein Stabfeuerzeug bedient. In der Garage. Neben dem nicht mehr ganz so dichtem 10l Benzinkanister. Zeitgleich cremt die 3-Jährige die Ledersitze im Cabrio vom Nachbarn mit Hunde-Ka-Ka ein (Lederpflegeschaum, hat sie mit Oma bei HSE24 gesehen) während dein Stock-Besoffener Schwager mit der Akku-Heckenschere dem preisgekrönten Pudel von der Nachbarin einen Iro verpasst. Und du stehst in der Einfahrt, siehst das alles und musst deiner Frau am Telefon noch kurz und glaubhaft versichern, dass alles ok ist bevor du schreiend irgendwo hin läufst um zumindest ein Unglück abzuwenden... :-P

Eierschale(R)

01.09.2022,
22:36

@ Bernd.R

Raspberry Pico W, Programm wartet auf Request

» Mein Problem besteht darin, wie schalte ich die LED automatisch nach z.B.
» 10 Sekunden wieder aus?
» Das Programm wartet auf Web-Anfragen.
»
Eigentlich kenne ich diese Geräte nicht. Aber allgemein: Entweder programmiert man einen Timer, der einen Interrupt auslöst oder man benutzt einen Watchdog oder, wenn das alles nicht geht, steckt einen externen Timer an einen Port und der löst dann einen Interrupt aus.

Eine schlechte Idee wäre das Betreiben der 3mm-LED mit 100mA, dann geht sie nämlich bereits nach 5 Sekunden aus. (für immer).

Bernd.R

E-Mail

01.09.2022,
19:29

@ Patrick Schnabel

Raspberry Pico W, Programm wartet auf Request

Hallo Patrick,

» Vielleicht ist diese Lösung besser.
»
» https://www.elektronik-kompendium.de/sites/raspberry-pi/2707151.htm

diese Beispiel hatte ich mir auch schon angesehen.
Mein Problem besteht darin, wie schalte ich die LED automatisch nach z.B. 10 Sekunden wieder aus?
Das Programm wartet auf Web-Anfragen.

Gruß Bernd

Bernd.R

E-Mail

01.09.2022,
19:22

@ bastelix

Raspberry Pico W, Programm wartet auf Request

Hallo Bastelix,

» Bitte den Link dazu posten. Wir kennen hier nicht alle jeden Artikel im Kompendium ;-)
Ich habe mir mehrere Angesehen u.a. auch das Beispiel im Tipp von Patrik Schnabel
https://www.elektronik-kompendium.de/sites/raspberry-pi/2707151.htm

» Poste doch bitte deinen Code, sonst kann man dazu gar nichts sagen.
der Code ist als Datei angehangen
Die LED soll dauerhaft blinken, nicht nur wenn Webanfragen kommen

» Und sag bitte auch ob du nur rumspielen/lernen willst oder ob du eigentlich schon an
» einem konkreten Projekt arbeitest und nur so viel programmieren lernen
» willst wie unbedingt nötig ist.
Ob das jetzt schon als Projekt durch geht:
Ich möchte in meiner Garage 2 Steckdosen schalten.
die erste Steckdose soll meine Tauchpumpe für die Gartenbewässerung schalten, folgende Möglichkeiten zum schalten sollen möglich sein
1. ein/aus nach festen Uhrzeiten
2. ein/aus über WLAN
3. ein/aus per Taster an der Steckdose
Die andere Steckdose soll eine andere Pumpe für den Gartenschlauch schalten, folgende Möglichkeiten zum schalten sollen möglich sein
1. ein/aus über WLAN
2. ein/aus per Taster an der Steckdose
3. aus nach einer gewissen Zeit z.B. 30 Minuten

https://www.elektronik-kompendium.de/forum/upload/20220901192104.py

Patrick Schnabel(R)

E-Mail

01.09.2022,
17:06

@ Bernd.R

Raspberry Pico W, Programm wartet auf Request

Vielleicht ist diese Lösung besser.

https://www.elektronik-kompendium.de/sites/raspberry-pi/2707151.htm

--
Gruß von Patrick

https://www.elektronik-kompendium.de/

bastelix(R)

01.09.2022,
00:45

@ Bernd.R

Raspberry Pico W, Programm wartet auf Request

Hallo Bernd,

» und das Beispielprogramm, von elektronik-kompendium, für den Server ausprobiert.
Bitte den Link dazu posten. Wir kennen hier nicht alle jeden Artikel im Kompendium ;-)

» Jetzt wollte ich das Programm so abändern das der Pico noch andere Dinge
» macht z.B. eine LED blinken lassen.
Poste doch bitte deinen Code, sonst kann man dazu gar nichts sagen.

» Gibt es einen Parameter den man abfragen kann, damit man weiß das Externe
» Anfragen vorliegen?
Wenn ich deinen Code gesehen habe kann ich dazu mehr sagen. Und sag bitte auch ob du nur rumspielen/lernen willst oder ob du eigentlich schon an einem konkreten Projekt arbeitest und nur so viel programmieren lernen willst wie unbedingt nötig ist.