WCF 发表于 2023-9-10 13:56:23

使用掌控板搭建简易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不行)!

rzyzzxw 发表于 2023-9-11 17:03:43

赞一赞{:6_215:}

开心的兔子 发表于 2023-9-27 21:27:36

本帖最后由 开心的兔子 于 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()应该是可以用了

开心的兔子 发表于 2023-9-27 22:02:49

问下怎么访问外网啊(

零刻工作室 发表于 2023-11-9 22:31:23

收藏永不停止,实践永不开始

cailh 发表于 2023-11-12 10:06:05

那,要怎么访问掌控板啊

WCF 发表于 2023-12-30 14:34:30

cailh 发表于 2023-11-12 10:06
那,要怎么访问掌控板啊

抱歉,现在才看见!
这个要看联网情况了,地址是http://IP:端口号(例如示例中的80,就可以省略:和端口号,因为80是http协议的默认端口)。设备一般都没有公网IP的,而内网IP又是不固定的(基本上每重启一次就更换一次),因此建议每次都在OLED屏幕上显示一下IP。当然,也可以通过内网穿透获得固定的公网IP。建议百度一下。

cailh 发表于 2024-3-17 10:57:43

WCF 发表于 2023-12-30 14:34
抱歉,现在才看见!
这个要看联网情况了,地址是http://IP:端口号(例如示例中的80,就可以省略:和端口号 ...

好的谢谢,已经成功了,大佬nb
页: [1]
查看完整版本: 使用掌控板搭建简易HTTP服务器