Http get LoPy freeze



  • this is my coding:

    from network import WLAN
    import urequest
    import machine
    import time
    
    wlan = WLAN(mode=WLAN.STA)
    wlan.antenna(WLAN.INT_ANT)
    
    wlan.connect("WiFi", auth=(WLAN.WPA2, "password"), timeout=5000)
    while not wlan.isconnected(): 
         machine.idle()
    print("Connected to Wifi\n")
    
    while True:
         response = urequest.get('http://things.ubidots.com/api/v1.6/devices/pycom/Switch/lv?token=A1E-YH9cBXkax47bJPraezMrcc2ityAtZq')
         print(response.text)
         time.sleep(2)
    

    if without while loop i can get the value at the HTTP
    but when i put while i cant get any value and no error. i will freeze after connected to WiFi.

    0_1525619008047_ec48b297-2055-41c4-bf25-30de89521f71-image.png

    any solution? Thank you.



  • @crumble

    Thanks! ... it did the trick



  • @combaindeft said in Http get LoPy freeze:

    Is it possible to define a "timeout" for how long the usocket.readline() will try to read????

    socket.settimeout(value)



  • @vicky_ @jmarcelino

    I have the same issue with usocket.readline() ...

    For some reason it just sitting there and waiting for ages ... until the battery dies ... it's like it's stock in a "forever waiting loop" ...

    Is it possible to define a "timeout" for how long the usocket.readline() will try to read????



  • @jmarcelino i have nothing else connected. Thanks god it works now

    just updated to the latest

    alt text

    but it is still the same

    0_1525689880272_3485ccdc-1341-41fa-b331-a5ce899fca7c-image.png



  • @vicky_
    Please

    1 connect the wire between G23 and GND
    2 press reset button on LoPy
    3 run the firmware updater

    You should not get that error if you have nothing else connected to the expansion board.

    Thanks



  • @jmarcelino i use jumper wire to connect GND and G23 while updating.
    yes the LoPy is connected to pycom expansion board.

    sorry for late reply because i can post comment every 10 minutes



  • @vicky_
    Do you have anything connected to any of the pins?
    Where is the LoPy connected to? The Pycom Expansion Board?



  • Thanks @jmarcelino

    for board im using LoPy

    i have difficulty update my board. tried many times

    0_1525687841917_Capture.PNG

    0_1525687238927_ed04ac7a-e3cc-428e-b7dd-b9e6d50bdcbb-image.png

    0_1525687798437_724af885-70d1-4c94-84aa-827971091b3a-image.png

    urequest.py

    import usocket
    
    class Response:
    
        def __init__(self, f):
            self.raw = f
            self.encoding = "utf-8"
            self._cached = None
    
        def close(self):
            if self.raw:
                self.raw.close()
                self.raw = None
            self._cached = None
    
        @property
        def content(self):
            if self._cached is None:
                try:
                    self._cached = self.raw.read()
                finally:
                    self.raw.close()
                    self.raw = None
            return self._cached
    
        @property
        def text(self):
            return str(self.content, self.encoding)
    
        def json(self):
            import ujson
            return ujson.loads(self.content)
    
    
    def request(method, url, data=None, json=None, headers={}, stream=None):
        try:
            proto, dummy, host, path = url.split("/", 3)
        except ValueError:
            proto, dummy, host = url.split("/", 2)
            path = ""
        if proto == "http:":
            port = 80
        elif proto == "https:":
            import ussl
            port = 443
        else:
            raise ValueError("Unsupported protocol: " + proto)
    
        if ":" in host:
            host, port = host.split(":", 1)
            port = int(port)
    
        ai = usocket.getaddrinfo(host, port)
        ai = ai[0]
    
        s = usocket.socket(ai[0], ai[1], ai[2])
        try:
            s.connect(ai[-1])
            if proto == "https:":
                s = ussl.wrap_socket(s, server_hostname=host)
            s.write(b"%s /%s HTTP/1.0\r\n" % (method, path))
            if not "Host" in headers:
                s.write(b"Host: %s\r\n" % host)
            # Iterate over keys to avoid tuple alloc
            for k in headers:
                s.write(k)
                s.write(b": ")
                s.write(headers[k])
                s.write(b"\r\n")
            if json is not None:
                assert data is None
                import ujson
                data = ujson.dumps(json)
                s.write(b"Content-Type: application/json\r\n")
            if data:
                s.write(b"Content-Length: %d\r\n" % len(data))
            s.write(b"\r\n")
            if data:
                s.write(data)
    
            l = s.readline()
            #print(l)
            l = l.split(None, 2)
            status = int(l[1])
            reason = ""
            if len(l) > 2:
                reason = l[2].rstrip()
            while True:
                l = s.readline()
                if not l or l == b"\r\n":
                    break
                #print(l)
                if l.startswith(b"Transfer-Encoding:"):
                    if b"chunked" in l:
                        raise ValueError("Unsupported " + l)
                elif l.startswith(b"Location:") and not 200 <= status <= 299:
                    raise NotImplementedError("Redirects not yet supported")
        except OSError:
            s.close()
            raise
    
        resp = Response(s)
        resp.status_code = status
        resp.reason = reason
        return resp
    
    
    def head(url, **kw):
        return request("HEAD", url, **kw)
    
    def get(url, **kw):
        return request("GET", url, **kw)
    
    def post(url, **kw):
        return request("POST", url, **kw)
    
    def put(url, **kw):
        return request("PUT", url, **kw)
    
    def patch(url, **kw):
        return request("PATCH", url, **kw)
    
    def delete(url, **kw):
        return request("DELETE", url, **kw)
    

    i updated few days ago, but just now when i tried update again. my firmware crashed? what should i do now?



  • Hi @vicky_

    I've tested your code and it is working for me here. Can you provide more details please to help us understand the problem please?

    Which board are you using? What's your firmware version - have you tried the updating it to the latest?

    Finally which urequest.py library are you using?

    Thank you


Log in to reply
 

Pycom on Twitter