Simple HTTP server

  • I repurposed some generic micropython HTTP server code to run on the gpy

    import machine; from machine import Pin
    pins = [machine.Pin(i, machine.Pin.IN) for i in ('P23', 'P22', 'P21')]
    print (pins)
    html = """<!DOCTYPE html>
        <head> <title>ESP8266 Pins</title> </head>
        <body> <h1>ESP8266 Pins</h1>
            <table border="1"> <tr><th>Pin</th><th>Value</th></tr> %s </table>
    import socket
    addr = socket.getaddrinfo('', 80)[0][-1]
    s = socket.socket()
    print('listening on', addr)
    while True:
        cl, addr = s.accept()
        print('client connected from', addr)
        cl_file = cl.makefile('rwb', 0)
        while True:
            line = cl_file.readline()
            if not line or line == b'\r\n':
        rows = ['<tr><td>%s</td><td>%d</td></tr>' % (str(p), p.value()) for p in pins]
        response = html % '\n'.join(rows)

    It's supposed to show the status of the pins in a table but when I run it & try to login I get

    [Pin('P23', mode=Pin.IN, pull=None, alt=-1), Pin('P22', mode=Pin.IN, pull=None, alt=-1), Pin('P21', mode=Pin.IN, pull=None, alt=-1)]
    listening on ('', 80)
    client connected from ('', 58649)
    Traceback (most recent call last):
      File "<stdin>", line 26, in <module>
    ValueError: invalid argument(s) value

    I can't find any docs on makefile so I was wondering if anyone can tell me what the problem is with

    cl_file = cl.makefile('rwb', 0)

  • Spot on with the cl.makefile('wb') Eric, although I can't tell how you figured that out from that doc page. No matter it works now! If I change 'import socket' to 'import usocket as socket' it runs the same so the pycom library must have both?

  • According to documentation ( makefile seem have only one argument and not two. Logically i don't know any system where when you have write acces you haven't read access, so i propose you to try

    cl_file = cl.makefile('wb')

    Please note that's "import usocket" and not "import socket" as in your code with pycom library, if you use a different lib have a look at your provider's library documentation

Log in to reply

Pycom on Twitter