lima-city: Webhosting, Domains und Cloud
0 Pluspunkte 0 Minuspunkte

Hallo, ich habe mit micropython zwei raspberry pi picos programmiert. Der erste erzeugt einen Wlan Hotspot und started dann in diesem hotspot einen socket server:

import network
import socket
import json
from time import sleep
from machine import Pin
# WAP-Betrieb
wap = network.WLAN(network.AP_IF)
led = Pin("LED")
# WAP-Konfiguration
wap.config(
    essid="PICO_TEST",
    password="12345678",
    channel=6,
)

# WLAN-Interface aktivieren
wap.active(True)
sleep(20)
print(wap.ifconfig())
try:
    
    server = socket.socket()
    server.bind(("192.168.4.1", 50000))
# Ausgabe der Netzwerk-Konfiguration
    server.listen()
    while True:
        led.on()
        conn, addr = server.accept()
        data = conn.recv(10240)
        led.off()
        print(data.decode)
        data = data.decode()
        data_splitted = data.split("#")
        with open(data_splitted[0], "w") as f:
            f.write(data_splitted[1] + "\n")
        print(data_splitted)
except:
    led.off()
finally:
    wap.disconnect()
    led.off()
    server.close()

Und ich habe einen, der in das wlan einsteigt und sich mit dem socket server verbindet:

# Bibliotheken laden
import network
import time
import socket
from machine import Pin
# Ländereinstellung
network.country('DE')
# Client-Betrieb
wlan = network.WLAN(network.STA_IF)
# WLAN-Interface aktivieren
wlan.active(True)
time.sleep(3)
print(wlan.ifconfig())
# WLAN-Verbindung herstellen
wlan.connect('PICO_TEST', '12345678')
# WLAN-Verbindungsstatus prüfen
led = Pin("LED")
print('Warten auf WLAN-Verbindung')
while not wlan.isconnected():
    led.on()
    time.sleep(0.5)
    led.off()
    time.sleep(0.5)
print(wlan.isconnected())
print('WLAN-Verbindung hergestellt / Status:', wlan.status())
time.sleep(3)
print("warda1")
client = socket.socket()
client.connect(("192.168.4.1", 50000))
try:
    give = input("Zur data station senden: ")
    give_name = input("Name unterer dem es zur data station gesendet wird: ")
    for_sending = give_name + "#" + give
    client.send(for_sending.encode())
    print(data.decode())
finally:
    client.close()
    print("warda")

Das Problem dabei ist, dass beim Hotspot-pico keine fehler meldung kommt, aber der client-pico zeigt beim verbinden zum socket einen OSError: ECONNABORTED:

Traceback (most recent call last):
  File "<stdin>", line 29, in <module>
OSError: [Errno 103] ECONNABORTED

Wo liegt das Problem? Ich komme einfach nicht dahinter!

Freundliche Grüße

von  

1 Antwort

0 Pluspunkte 0 Minuspunkte

Beim Hotspot Pico wird bestimmt eine Fehlermeldung kommen aber du machst

try:
    ...
except:
    led.off()
finally:
    ...

und damit unterdrückst du jede Exception. Gib die Exception aus, vor allem solange du noch in der Development Phase bist ist es immer schlecht Ausnahmen zu unterdrücken. Lass sie dir anzeigen, da steht bestimmt etwas nützliches drin.

except Exception as e:
    print("SERVER FEHLER:", repr(e))

Außerdem bindest du den Listener auf die IP 192.168.4.1. Ist das eine statische IP? Oder per DHCP bezogen? Dann hat sie sich vielleicht geändert? Binde stattdessen auf die IP 0.0.0.0, damit sagst du dem Server er soll auf allen Interfaces lauschen die verfügbar sind. Und prüfe auch ob der Client eine gültige IP bekommen hat. Direkt nachdem du dich mit dem WLAN verbindest mach sowas rein.

print("Client ifconfig:", wlan.ifconfig())
von (544 Punkte)  
Diese Community basiert auf dem Prinzip der Selbstregulierung. Beiträge werden von Nutzern erstellt, bewertet und verbessert – ganz ohne zentrale Moderation.

Wer hilfreiche Fragen stellt oder gute Antworten gibt, sammelt Punkte. Mit steigender Punktzahl erhalten Mitglieder automatisch mehr Rechte, zum Beispiel

  • Kommentare verfassen
  • Fragen und Antworten bewerten
  • Themen von Fragen bearbeiten
  • Fragen, Antworten und Kommentare bearbeiten
  • Inhalte ausblenden

So entsteht eine Plattform, auf der sich Qualität durchsetzt – getragen von einer engagierten Gemeinschaft.

2,544 Fragen

3,064 Antworten

281 Kommentare

14 Nutzer