Open
Description
Adafruit CircuitPython 8.0.3 on 2023-02-23; Raspberry Pi Pico with rp2040
I am building HTTP server with W5100S and can't get this library to work properly because of adafruit_wiznet5k_socket, i think. I cut some code to demonstrate the problem, so if you need explanation in something, i'll explain
code.py
import board
import busio
import digitalio
import time
import adafruit_wiznet5k.adafruit_wiznet5k_socket as socket
from adafruit_wiznet5k.adafruit_wiznet5k import WIZNET5K
from adafruit_httpserver.request import HTTPRequest
from adafruit_httpserver.response import HTTPResponse
from adafruit_httpserver.server import HTTPServer
from adafruit_httpserver.methods import HTTPMethod
IP_ADDRESS = (192, 168, 1, 244)
SUBNET_MASK = (255, 255, 255, 0)
GATEWAY_ADDRESS = (192, 168, 1, 1)
DNS_SERVER = (8, 8, 8, 8)
W5x00_RSTn = board.GP20
ethernetRst = digitalio.DigitalInOut(W5x00_RSTn)
ethernetRst.direction = digitalio.Direction.OUTPUT
ethernetRst.value = False
time.sleep(1)
ethernetRst.value = True
SPI0_SCK = board.GP18
SPI0_TX = board.GP19
SPI0_RX = board.GP16
SPI0_CSn = board.GP17
spi_bus = busio.SPI(SPI0_SCK, MOSI=SPI0_TX, MISO=SPI0_RX)
cs = digitalio.DigitalInOut(SPI0_CSn)
eth = WIZNET5K(spi_bus, cs, is_dhcp=False)
def routes(server):
@server.route("/", HTTPMethod.POST)
def base(request: HTTPRequest):
raw_text = request.body.decode("UTF-8")
print(raw_text)
with open('index.html', 'r') as f:
html_string = f.read()
f.close()
with HTTPResponse(request) as response:
response.send(html_string, content_type="text/html")
@server.route("/", HTTPMethod.GET)
def base(request: HTTPRequest):
with open('index.html', 'r') as f:
html_string = f.read()
f.close()
with HTTPResponse(request) as response:
response.send(html_string, content_type="text/html")
def raise_serv():
eth.ifconfig = (IP_ADDRESS, SUBNET_MASK, GATEWAY_ADDRESS, DNS_SERVER)
socket.set_interface(eth)
server_ip = eth.pretty_ip(eth.ip_address)
print(f"Listening on http://{server_ip}:80")
return HTTPServer(socket), server_ip
while True:
print("Raising server..")
server, server_ip = raise_serv()
routes(server)
server.start(str(server_ip))
print("Server raised.")
while True:
try:
server.poll()
except OSError as error:
print(error)
continue
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style type="text/css">
body {
margin: 0;
}
.wrapper {
background: #ffffff;
box-sizing: border-box;
margin: 0 auto;
max-width: 1300px;
min-height: 100vh;
}
.container {
display: grid;
grid-template-columns: 340px repeat(6, auto);
}
.el {
padding: 2px;
font-size: 17px;
}
input {
text-align: right;
}
.btn-apply {
text-align: right;
padding: 15px 2px;
}
.row-border{
border-top: 1px solid rgb(191, 252, 198);
grid-column: 1 / 8;
}
.square {
position: relative;
padding-left: 17px;
margin-left: 5px;
}
.square:after {
position:absolute;
content:"";
width:17px;
height:17px;
top:2px;
left:0;
}
.square-green {
background-color:rgb(0, 190, 0);
}
.square-red {
background-color:rgb(190, 0, 0);
}
</style>
</head>
<body>
<div class="wrapper">
<form action="" method="post">
<div class="container">
<div class="el el-1"><b></b></div>
<div class="el el-2" align="right"><b>1</b></div>
<div class="el el-3" align="right"><b>2</b></div>
<div class="el el-4" align="right"><b>3</b></div>
<div class="el el-5" align="right"><b>4</b></div>
<div class="el el-6" align="right"><b>5</b></div>
<div class="el el-7" align="right"><b>6</b></div>
<div class="row-border"></div><div class="el el-1"></div>
<div class="el el-2"><input name="name1" type="text" value="1" style="width: 95%; color:rgb(0, 150, 17)"></div>
<div class="el el-3"><input name="name2" type="text" value="2" style="width: 95%; color:rgb(0, 150, 17)"></div>
<div class="el el-4"><input name="name3" type="text" value="3" style="width: 95%; color:rgb(0, 150, 17)"></div>
<div class="el el-5"><input name="name4" type="text" value="4" style="width: 95%; color:rgb(0, 150, 17)"></div>
<div class="el el-6"><input name="name5" type="text" value="5" style="width: 95%; color:rgb(0, 150, 17)"></div>
<div class="el el-7"><input name="name6" type="text" value="6" style="width: 95%; color:rgb(0, 150, 17)"></div>
<div class="row-border"></div>
<div class="el el-1"></div>
<div class="el el-2" align="right">1<span class="square square-$COLOR1"></span></div>
<div class="el el-3" align="right">1<span class="square square-$COLOR2"></span></div>
<div class="el el-4" align="right">1<span class="square square-$COLOR3"></span></div>
<div class="el el-5" align="right">1<span class="square square-$COLOR4"></span></div>
<div class="el el-6" align="right">1<span class="square square-$COLOR5"></span></div>
<div class="el el-7" align="right">1<span class="square square-$COLOR6"></span></div>
<div class="row-border"></div>
<div class="el el-1"></div>
<div class="el el-2"></div>
<div class="el el-3"></div>
<div class="el el-4"></div>
<div class="el el-5"></div>
<div class="el el-6"></div>
<div class="el el-7"></div>
<div class="row-border"></div>
<div class="el el-1" style="padding-left: 10px;"></div>
<div class="el el-2" align="right"><input type="radio" name="log_level1" value="1" id="" $CHECKEDTRUE1></div>
<div class="el el-3" align="right"><input type="radio" name="log_level2" value="1" id="" $CHECKEDTRUE2></div>
<div class="el el-4" align="right"><input type="radio" name="log_level3" value="1" id="" $CHECKEDTRUE3></div>
<div class="el el-5" align="right"><input type="radio" name="log_level4" value="1" id="" $CHECKEDTRUE4></div>
<div class="el el-6" align="right"><input type="radio" name="log_level5" value="1" id="" $CHECKEDTRUE5></div>
<div class="el el-7" align="right"><input type="radio" name="log_level6" value="1" id="" $CHECKEDTRUE6></div>
<div class="row-border"></div>
<div class="el el-1" style="padding-left: 10px;"></div>
<div class="el el-2" align="right"><input type="radio" name="log_level1" value="0" id="" $CHECKEDFALSE1></div>
<div class="el el-3" align="right"><input type="radio" name="log_level2" value="0" id="" $CHECKEDFALSE2></div>
<div class="el el-4" align="right"><input type="radio" name="log_level3" value="0" id="" $CHECKEDFALSE3></div>
<div class="el el-5" align="right"><input type="radio" name="log_level4" value="0" id="" $CHECKEDFALSE4></div>
<div class="el el-6" align="right"><input type="radio" name="log_level5" value="0" id="" $CHECKEDFALSE5></div>
<div class="el el-7" align="right"><input type="radio" name="log_level6" value="0" id="" $CHECKEDFALSE6></div>
<div class="row-border"></div>
<div class="el el-1"></div>
<div class="el el-2"></div>
<div class="el el-3"></div>
<div class="el el-4"></div>
<div class="el el-5"></div>
<div class="el el-6"></div>
<div class="el el-7"></div>
<div class="row-border"></div>
<div class="el el-1" style="padding-left: 10px;"></div>
<div class="el el-2"><input name="impulse_time1" type="text" style="width: 95%;" value="1"></div>
<div class="el el-3"><input name="impulse_time2" type="text" style="width: 95%;" value="1"></div>
<div class="el el-4"><input name="impulse_time3" type="text" style="width: 95%;" value="1"></div>
<div class="el el-5"><input name="impulse_time4" type="text" style="width: 95%;" value="1"></div>
<div class="el el-6"><input name="impulse_time5" type="text" style="width: 95%;" value="1"></div>
<div class="el el-7"><input name="impulse_time6" type="text" style="width: 95%;" value="1"></div>
<div class="row-border"></div>
<div class="el el-1" style="padding-left: 10px;"></div>
<div class="el el-2"><button name="impulse_line" value="1" style="width: 100%;">1</button></div>
<div class="el el-3"><button name="impulse_line" value="2" style="width: 100%;">2</button></div>
<div class="el el-4"><button name="impulse_line" value="3" style="width: 100%;">3</button></div>
<div class="el el-5"><button name="impulse_line" value="4" style="width: 100%;">4</button></div>
<div class="el el-6"><button name="impulse_line" value="5" style="width: 100%;">5</button></div>
<div class="el el-7"><button name="impulse_line" value="6" style="width: 100%;">6</button></div>
<div class="row-border"></div>
</div>
<div class="btn-apply">
<button type="submit" name="apply_changes" value="1">a</button>
</div>
</form>
</div>
</body>
</html>
After first request, server stops responding after some time, giving "ERR_CONNECTION_REFUSED" in browsers. Also, multiple POST requests(2 fast clicks on button) are doing the same, but faster. I've done some tests with different systems, that gave me no results. The only thing, that helped me is "Incognito" mode. Other versions of CircuitPython don't help.
When I interrupt programm with CTRL+C it gives.
File "/lib/adafruit_httpserver/response.py", line 167, in send
File "/lib/adafruit_httpserver/response.py", line 242, in _send_bytes
File "/lib/adafruit_wiznet5k/adafruit_wiznet5k_socket.py", line 422, in send
File "/lib/adafruit_wiznet5k/adafruit_wiznet5k.py", line 1034, in socket_write
File "/lib/adafruit_wiznet5k/adafruit_wiznet5k.py", line 614, in write
Metadata
Metadata
Assignees
Labels
No labels