Ciągły odczyt danych z portu

0

Witam, piszę w Pythonie kod, który odczytuje dane z modułu ESP8266. ESP wysyła dane co 15 minut, a następnie przechodzi w stan głębokiego uśpienia. Po wybudzeniu program już mi nie jest w stanie odebrać kolejnej porcji danych. Mój problem polega na tym, że nie wiem jak zrobić ciągłe nasłuchiwanie i odczyt danych z portu. Jestem w stanie odebrać je tylko raz. Jak to wykonać? Mój kod:

import sys
import socket

TCP_IP = '192.168.42.1'
TCP_PORT = 8888
BUFFER_SIZE = 1024
param = []
i=0

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP,TCP_PORT))
s.listen(1)

print 'Listening for client...'
conn, addr = s.accept()
print 'Connection address:', addr
while 1:
        data = conn.recv(BUFFER_SIZE)
        if data == ";" :
                #conn.close()
                print "Received all the data"
                i=0
                for x in param:
                        print x
                #break
        elif data:
                print "received data: ", data
                param.insert(i,data)
                i+=1
                #print "koniec transmisji"

0

Gdy ESP przechodzi w tryb uśpienia, wszystkie aktywne połączenia są tracone - musiałbyś tworzyć za każdym razem nowy socket.

0

Mam coś takiego.

import sys
import socket
import time

TCP_IP = '192.168.42.1'
TCP_PORT = 8888
BUFFER_SIZE = 8
param = []
i=0

#s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#s.bind((TCP_IP,TCP_PORT))
#s.listen(1)

#print 'Listening for client...'

#conn, addr = s.accept()
#print 'Connection address:', addr
while 1:
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.bind((TCP_IP,TCP_PORT))
        s.listen(1)
        while 1:
                print 'Listening for client...'
                conn, addr = s.accept()
                print 'Connection address:', addr

                data = conn.recv(BUFFER_SIZE)
                if data == ";" :
                        conn.close()
                        print "Received all the data"
                        #i=0
                        #for x in param:
                        #       print x
                        #break
                elif data:
                        print "received data: ", data
                        param.insert(i,data)
                        i+=1
                        #print "koniec transmisji"
        s.close()

Zrobiłem dwie pętle while. Działa już lepiej. Nasłuchuje cały czas i odbiera. Problem teraz mam taki, że ESP wysyła mi dane w 9 pakietach, a ja jestem w stanie odebrać tylko 1. Jak to rozwiązać? Gdzie popełniłem błąd?

0

No po pierwszym pakiecie resetujesz połączenie na przykład :-P

1 użytkowników online, w tym zalogowanych: 0, gości: 1