ESP8266 HTTP socket micropython

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
Oltronix
Inlägg: 487
Blev medlem: 10 december 2011, 21:24:38
Ort: Nynäs

ESP8266 HTTP socket micropython

Inlägg av Oltronix »

Varför funger inte detta? Det har gjort det tidiagre men förmodligen annan version på Firefox. Sidan med sina knappar blinkar till sedan kommer följande text:
The connection was reset

The connection to the server was reset while the page was loading.
The site could be temporarily unavailable or too busy. Try again in a few moments.
If you are unable to load any pages, check your computer’s network connection.
If your computer or network is protected by a firewall or proxy, make sure that Firefox is permitted to access the web
Chrome vägrar pga http och inte https. Safari likadant som Firefox. Kan ana att det är någon ny säkerhetsgrej på nätet som jag inte fattar. Har kört både från LAN och WAN med samma resultat.

Kod: Markera allt

# Simple HTTP Server Example
# Control an LED and read a Button using a web browser
#Updated for ESP8266

import time
import network
import socket
from machine import Pin

led = Pin(2, Pin.OUT)
ledState = 'LED State Unknown'

button = Pin(0, Pin.IN, Pin.PULL_UP)

ssid = 'xxxxx'
password = 'yyyyyy'

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)

html = """<!DOCTYPE html>
<html>
<head><meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="data:,">
<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}
.buttonGreen { background-color: #4CAF50; border: 2px solid #000000;; color: white; padding: 15px 32px; text-align: center; text-decoration: none; display: inline-block; font-size: 16px; margin: 4px 2px; cursor: pointer; }
.buttonRed { background-color: #D11D53; border: 2px solid #000000;; color: white; padding: 15px 32px; text-align: center; text-decoration: none; display: inline-block; font-size: 16px; margin: 4px 2px; cursor: pointer; }
text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}
</style></head>
<body><center><h1>Control Panel</h1></center><br><br>
<form><center>
<center> <button class="buttonGreen" name="led" value="on" type="submit">LED ON</button>
<br><br>
<center> <button class="buttonRed" name="led" value="off" type="submit">LED OFF</button>
</form>
<br><br>
<br><br>
<p>%s</p>
</body> </html>
"""

# Wait for connect or fail
max_wait = 10
while max_wait > 0:
    if wlan.status() < 0 or wlan.status() >= 1:
        break
    max_wait -= 1
    print('waiting for connection...')
    time.sleep(1)
    
# Handle connection error
if wlan.status() != 1:
    raise RuntimeError('network connection failed')
else:
    print('Connected')
    status = wlan.ifconfig()
    print( 'ip = ' + status[0] )
    
    
# Open socket
addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]
s = socket.socket()
s.bind(addr)
s.listen(1)
print('listening on', addr)

# Listen for connections, serve client
while True:
    try:       
        cl, addr = s.accept()
        print('client connected from', addr)
        request = cl.recv(1024)
        print("request:")
        print(request)
        request = str(request)
        led_on = request.find('led=on')
        led_off = request.find('led=off')
        
        print( 'led on = ' + str(led_on))
        print( 'led off = ' + str(led_off))
        
        if led_on == 8:
            print("led on")
            led.value(0)
        if led_off == 8:
            print("led off")
            led.value(1)
        
        ledState = "LED is OFF" if led.value() == 1 else "LED is ON" # a compact if-else statement
       
        if button.value() == 1: # button not pressed
            print("button NOT pressed")
            buttonState = "Button is NOT pressed"
        else:
            print("button pressed")
            buttonState = "Button is pressed"
        
        # Create and send response
        stateis = ledState + " and " + buttonState
        response = html % stateis
        cl.send('HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n')
        cl.send(response)
        cl.close()
        
    except OSError as e:
        cl.close()
        print('connection closed')
         
Dock funger denna kod ok

Kod: Markera allt

#5.3. Simple HTTP server
import machine
pins = [machine.Pin(i, machine.Pin.IN) for i in (0, 2, 4, 5, 12, 13, 14, 15)]
print(pins)
print(pins[2], pins[2].value())
html = """<!DOCTYPE html>
<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>
    </body>
</html>
"""

import socket
addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]

s = socket.socket()
s.bind(addr)
s.listen(1)

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':
            break
    rows = ['<tr><td>%s</td><td>%d</td></tr>' % (str(p), p.value()) for p in pins]
#    print('rows:',rows)
    response = html % '\n'.join(rows)
#    print('resp:',response)
    cl.send('HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n')
    cl.send(response)
    cl.close()
Användarvisningsbild
rvl
Inlägg: 6980
Blev medlem: 5 april 2016, 14:58:53
Ort: Helsingfors

Re: ESP8266 HTTP socket micropython

Inlägg av rvl »

Du har inte loggat debugutskrifterna eller sett på dem i terminal kopplad til ESPen?
Användarvisningsbild
Oltronix
Inlägg: 487
Blev medlem: 10 december 2011, 21:24:38
Ort: Nynäs

Re: ESP8266 HTTP socket micropython

Inlägg av Oltronix »

Kod: Markera allt

Entering REPL. Use Control-X to exit.
>
MicroPython v1.13 on 2020-09-11; ESP module with ESP8266
Type "help()" for more information.
>>> 
>>> import HTTP_server2
Connected
ip = 192.168.1.175
listening on ('0.0.0.0', 80)
client connected from ('192.168.1.1', 42746)
request:
b'GET / HTTP/1.1\r\nHost: 90.x.y.z\r\nUser-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nAccept-Language: en-US,en;q=0.5\r\nAccept-Encoding: gzip, deflate\r\nConnection: keep-alive\r\nUpgrade-Insecure-Requests: 1\r\nPriority: u=0, i\r\n\r\n'
led on = -1
led off = -1
button NOT pressed
client connected from ('91.224.92.17', 46478)
request:
b'GET / HTTP/1.1\r\nHost: 90.x.y.z:80\r\n\r\n'
led on = -1
led off = -1
button NOT pressed
client connected from ('45.135.194.136', 44814)
request:
b'GET / HTTP/1.1\r\nHost: 90.x.y.z:80\r\n\r\n'
led on = -1
led off = -1
button NOT pressed
client connected from ('192.168.1.1', 41228)
request:
b'GET / HTTP/1.1\r\nHost: 90.x.y.z\r\nUser-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nAccept-Language: en-US,en;q=0.5\r\nAccept-Encoding: gzip, deflate\r\nConnection: keep-alive\r\nUpgrade-Insecure-Requests: 1\r\nPriority: u=0, i\r\n\r\n'
led on = -1
led off = -1
button NOT pressed
client connected from ('192.168.1.105', 33460)
request:
b'GET / HTTP/1.1\r\nHost: 192.168.1.175\r\nUser-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:141.0) Gecko/20100101 Firefox/141.0\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nAccept-Language: en-US,en;q=0.5\r\nAccept-Encoding: gzip, deflate\r\nConnection: keep-alive\r\nUpgrade-Insecure-Requests: 1\r\nPriority: u=0, i\r\n\r\n'
led on = -1
led off = -1
button NOT pressed
Intressant 45.135.194.136 och 91.224.92.17 kommer inte från mig
Skriv svar