2023-9-10 13:56:23 [显示全部楼层]
22143浏览
查看: 22143|回复: 7

[高级教程] 使用掌控板搭建简易HTTP服务器

[复制链接]
本帖最后由 WCF 于 2023-9-10 13:56 编辑

嘿嘿,第一次发教程帖子!

前几天在自己的腾讯云服务器上鼓捣Python,无意间搜到一篇知乎。本来看完之后试验一下,成功了就没有然后了。但当我翻到评论时,发现有人说:
刚好需要这方面的教程,最近玩MicroPython(在单片机上跑的Python),想把ESP8266当作服务器,手机或电脑访问,交互点信息。
既然ESP8266可以,同样适用MicroPython的ESP32可否?
一看只不过是使用了最简单的socket,我那叫一个茅塞顿开!

话不多说,怎么实现呢?其实复制代码+全局替换socket为usocket即可(PS:其实用as socket起个别名就行,当时真(nao)没(zi)想(sha)到(le)).
成品代码如下:

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

赞一赞
回复

使用道具 举报

开心的兔子  见习技师

发表于 2023-9-27 21:27:36

本帖最后由 开心的兔子 于 2023-9-27 21:55 编辑

如果上传报错的话可以来试试我这边的代码
  1. from mpython import *
  2. import network
  3. my_wifi = wifi()
  4. my_wifi.connectWiFi('你的WifI名称', '你的Wifi密码')
  5. import usocket
  6. HOST, PORT = '', 80
  7. socket = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM)
  8. socket.setsockopt(usocket.SOL_SOCKET, usocket.SOCK_STREAM, 1)
  9. socket.bind((HOST, PORT))
  10. socket.listen(1)
  11. print('Serving HTTP on port %s ...' % PORT)
  12. while True:
  13.     client_connection, client_address = socket.accept()
  14.     request = client_connection.recv(1024)
  15.     print(request.decode("utf-8"))
  16.     http_response = """\
  17. HTTP/1.1 200 OK
  18. <!DOCTYPE html>
  19. <html lang="zh-CN">
  20. <head>
  21.     <meta charset="UTF-8">
  22.     <title>Welcome</title>
  23.     <style>
  24.         body {
  25.             display: flex;
  26.             justify-content: center;
  27.             align-items: center;
  28.             height: 100vh;
  29.             padding: 0;
  30.             margin: 0
  31.         }
  32.         h1 {
  33.             font-size: 32px;
  34.             text-align: center;
  35.         }
  36.         p {
  37.             font-size: 24px;
  38.             text-align: center;
  39.         }
  40.     </style>
  41. </head>
  42. <body>
  43.     <div>
  44.         <h1>欢迎使用掌控板 HTTP Web 服务器!</h1>
  45.         <p>开始一段愉快的旅程吧!</p>
  46.         <h1>Welcome to mPython HTTP Web Server!</h1>
  47.         <p>Start a pleasant journey!</p>
  48.         <h1>mPython HTTP 웹 서버에 오신 것을 환영합니다!</h1>
  49.         <p>즐거운 여정을 시작하자!</p>
  50.         <h1>mPython HTTP Web サーバへようこそ!</h1>
  51.         <p>楽しい旅の始まり!</p>
  52.     </div>
  53. </body>
  54. </html>
  55. """
  56.     client_connection.sendall(http_response.encode("utf-8"))
  57.     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
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail