使用掌控板搭建简易HTTP服务器
本帖最后由 WCF 于 2023-9-10 13:56 编辑嘿嘿,第一次发教程帖子!
前几天在自己的腾讯云服务器上鼓捣Python,无意间搜到一篇知乎。本来看完之后试验一下,成功了就没有然后了。但当我翻到评论时,发现有人说:刚好需要这方面的教程,最近玩MicroPython(在单片机上跑的Python),想把ESP8266当作服务器,手机或电脑访问,交互点信息。既然ESP8266可以,同样适用MicroPython的ESP32可否?
一看只不过是使用了最简单的socket,我那叫一个茅塞顿开!
话不多说,怎么实现呢?其实复制代码+全局替换socket为usocket即可(PS:其实用as socket起个别名就行,当时真(nao)没(zi)想(sha)到(le)).
成品代码如下:
```python
from mpython import *
import network
my_wifi = wifi()
my_wifi.connectWiFi('你的WIFI名称', '你的WIFI密码')
import usocket as socket
HOST, PORT = '', 80
listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
listen_socket.bind((HOST, PORT))
listen_socket.listen(1)
print('Serving HTTP on port %s ...' % PORT)
while True:
client_connection, client_address = listen_socket.accept()
request = client_connection.recv(1024)
print(request.decode("utf-8"))
http_response = """\
HTTP/1.1 200 OK
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>Welcome</title>
<style>
body {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
padding: 0;
margin: 0
}
h1 {
font-size: 32px;
text-align: center;
}
p {
font-size: 24px;
text-align: center;
}
</style>
</head>
<body>
<div>
<h1>欢迎使用掌控板 HTTP Web 服务器!</h1>
<p>开始一段愉快的旅程吧!</p>
<h1>Welcome to mPython HTTP Web Server!</h1>
<p>Start a pleasant journey!</p>
<h1>mPython HTTP 웹 서버에 오신 것을 환영합니다!</h1>
<p>즐거운 여정을 시작하자!</p>
<h1>mPython HTTP Web サーバへようこそ!</h1>
<p>楽しい旅の始まり!</p>
</div>
</body>
</html>
"""
client_connection.sendall(http_response.encode("utf-8"))
client_connection.close()
```
这里有个小技巧:将端口设为80就是HTTP默认端口,浏览器地址栏可以免输端口号哦(HTTPS的443不行)! 赞一赞{:6_215:} 本帖最后由 开心的兔子 于 2023-9-27 21:55 编辑
如果上传报错的话可以来试试我这边的代码from mpython import *
import network
my_wifi = wifi()
my_wifi.connectWiFi('你的WifI名称', '你的Wifi密码')
import usocket
HOST, PORT = '', 80
socket = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM)
socket.setsockopt(usocket.SOL_SOCKET, usocket.SOCK_STREAM, 1)
socket.bind((HOST, PORT))
socket.listen(1)
print('Serving HTTP on port %s ...' % PORT)
while True:
client_connection, client_address = socket.accept()
request = client_connection.recv(1024)
print(request.decode("utf-8"))
http_response = """\
HTTP/1.1 200 OK
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>Welcome</title>
<style>
body {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
padding: 0;
margin: 0
}
h1 {
font-size: 32px;
text-align: center;
}
p {
font-size: 24px;
text-align: center;
}
</style>
</head>
<body>
<div>
<h1>欢迎使用掌控板 HTTP Web 服务器!</h1>
<p>开始一段愉快的旅程吧!</p>
<h1>Welcome to mPython HTTP Web Server!</h1>
<p>Start a pleasant journey!</p>
<h1>mPython HTTP 웹 서버에 오신 것을 환영합니다!</h1>
<p>즐거운 여정을 시작하자!</p>
<h1>mPython HTTP Web サーバへようこそ!</h1>
<p>楽しい旅の始まり!</p>
</div>
</body>
</html>
"""
client_connection.sendall(http_response.encode("utf-8"))
client_connection.close()应该是可以用了
问下怎么访问外网啊( 收藏永不停止,实践永不开始 那,要怎么访问掌控板啊
cailh 发表于 2023-11-12 10:06
那,要怎么访问掌控板啊
抱歉,现在才看见!
这个要看联网情况了,地址是http://IP:端口号(例如示例中的80,就可以省略:和端口号,因为80是http协议的默认端口)。设备一般都没有公网IP的,而内网IP又是不固定的(基本上每重启一次就更换一次),因此建议每次都在OLED屏幕上显示一下IP。当然,也可以通过内网穿透获得固定的公网IP。建议百度一下。
WCF 发表于 2023-12-30 14:34
抱歉,现在才看见!
这个要看联网情况了,地址是http://IP:端口号(例如示例中的80,就可以省略:和端口号 ...
好的谢谢,已经成功了,大佬nb
页:
[1]