esp32之micropython 配网代码

news/2024/9/18 18:27:27/文章来源:https://www.cnblogs.com/lemoniot/p/18416768

esp32之micropython 配网代码

最近学习esp32的时候想着能不能给设备自动配网,查了下网上有smartconfig配网但是我无法配置成功所以自己写了AP配网。

AP配网代码

import network
import socket,json
from machine import Pin, Timer
import time
led_pin = Pin(4, Pin.OUT)
# 配置热点模式
AP_SSID = 'myqiu_Setup'
AP_PASSWORD = 'setup123'
# Captive portal的HTML页面
HTML = """
<!DOCTYPE html>
<html>
<head><meta http-equiv='Content-Type' content='text/html; charset=utf-8'/><title>ESP32 WiFi Setup</title><style>body {display: flex;justify-content: center;align-items: center;height: 100vh;margin: 0;font-family: Arial, sans-serif;}form {display: flex;flex-direction: column;align-items: center;background-color: #f0f0f0;padding: 20px;border-radius: 5px;}label, input {margin-bottom: 10px;}</style>
</head>
<body><form action="/connect" method="post"><label for="ssid">SSID:</label><input type="text" id="ssid" name="ssid"><label for="password">Password:</label><input type="password" id="password" name="password"><input type="submit" value="Connect"></form>
</body>
</html>"""
wifi_conn = False
wifi_config = None
def start_ap():ap = network.WLAN(network.AP_IF)ap.active(True)ap.config(essid=AP_SSID, password=AP_PASSWORD)
#     print("AP模式已启用: SSID '{}' 密码 '{}'".format(AP_SSID, AP_PASSWORD))return ap
# 从 JSON 文件中读取 WiFi 信息
def read_wifi_config():try:with open("wifi_config.json", 'r') as file:data = json.load(file)if data['ssid'] == "" and  data['password'] == "":return Falsereturn data['ssid'], data['password']except Exception as e:return None
def connect_wifi(ssid, password):global wifi_conn,wifi_configwlan = network.WLAN(network.STA_IF)wlan.active(True)try:if not wlan.isconnected():wlan.connect(ssid, password)while not wlan.isconnected():pass
#         print('Network config:', wlan.ifconfig())wifi_conn = Truewifi_config=wlan.ifconfig()server_socket.close()return Trueexcept Exception as e:return "wifi not find"
def handle_connection(client, addr, ap):global wifi_config
#     print('客户端连接来自', addr)request = client.recv(1024).decode()
#     print('请求内容:', request)if 'POST /connect' in request:# 从请求中提取SSID和密码ssid_start = request.find('ssid=') + 5ssid_end = request.find('&', ssid_start)password_start = request.find('password=') + 9ssid = request[ssid_start:ssid_end]password = request[password_start:]
#         print('尝试连接WiFi SSID:', ssid)wifi_data = {'ssid': ssid,'password': password}# 重置并连接到新WiFi网络if connect_wifi(ssid, password):response = "HTTP/1.1 200 OK\n\n<meta http-equiv='Content-Type' content='text/html; charset=utf-8'</>h1>已连接到WiFi。正在关闭AP模式...</h1>"client.send(response)client.close()# 关闭AP模式
#             print('关闭AP模式...')ap.active(False)with open("wifi_config.json", 'w') as file:json.dump(wifi_data, file)return True  # 表示连接成功else:response = "HTTP/1.1 200 OK\n\n<meta http-equiv='Content-Type' content='text/html; charset=utf-8'/><h1>连接失败。请重试。</h1>"client.send(response)else:response = 'HTTP/1.1 200 OK\nContent-Type: text/html\n\n' + HTMLclient.send(response)client.close()return False  # 表示连接失败
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
connected = False
def conn_wifi():global connected ap = start_ap()server_socket.bind(('0.0.0.0', 80))server_socket.listen(1)print('Web服务器已启动,等待客户端连接...')try:# 主程序部分while not connected:client_socket, addr = server_socket.accept()connected = handle_connection(client_socket, addr, ap)except KeyboardInterrupt:print("Exiting program...")finally:# 确保关闭服务器套接字server_socket.close()led_pin.value(0)
def main():global wifi_conn,wifi_configwhile True:if read_wifi_config() ==False:conn_wifi()else:ssid,password = read_wifi_config()if wifi_conn != True:connect_wifi(ssid,password)if wifi_conn == True:return True
# if __name__ == "__main__":
#     print(main())

重命名为AP.py 在你项目需要联网前引入代码即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/798264.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

白云龙期货投资-第四讲

趋势线波浪理论总结: 1.一般行情完成一次阶段性的上涨或者下跌都会通过三波来完成; 2.这三波上涨和下跌的时间空间,经常同等 3.可以利用波浪理论以上两个特性来判断和预测,还会有几次的上涨或者下跌行情,以及每次大概运行的时间及空间 三种常用实用突破法 1.早盘30mins突破…

中秋 -2024/9/16

今天是中秋假期的第二天,已经过了2/3了,怎么俺滴中秋这么快就没了 今天学习了SQL语句种的查询聚合函数进行查询和Java种的集合 TreeSet,HashSet,LinkedHashSet DQL-聚合函数介绍:将一列数据作为一个整体,进行纵向计算 常见聚合函数count - 统计数量 max - 最大值 min - 最小值 …

李尚杰的第一次作业

这次作业属于哪个课程 https://edu.cnblogs.com/campus/zjlg/rjjc这个作业的目标 熟悉博客的建立,向老师/助教介绍自己并阐述对课程的期待姓名-学号 李尚杰-2022329301146一、个人简介 (一)基本介绍我叫李尚杰,来自22自动化1班,浙江杭州人。我爱好摄影、旅游、看电影、健身…

数木莫系且的旭酱买水问题

dut开区用,在别的情况下该博客无效数木莫系且的旭酱买水问题 创中的招新又双叒叕开始了,“数木莫系且”要开始出招新题了,“数木莫系且”的36位老东西为了想招新题整天废寝忘食、绞尽脑汁、抓耳挠腮、呕心沥血,甚至连水都忘记喝了。“数木莫系且“的不时用日语小声发癫的旭…

字符编码发展史1 — ASCII和EASCII

1. 字符集与字符编码1.1. 字符集 1.2. 字符编码 1.3. 两者的关系2. 字符编码的发展历史2.1. 第一个阶段 ASCII编码2.1.1. ASCII 2.1.2. EASCII1. 字符集与字符编码 1.1. 字符集 字符集(Charcater Set或Charset): 是一个系统支持的所有抽象字符的集合,也就是一系列字符的集合…

[JVM]对象创建过程

Java 对象的创建过程 Java对象创建的过程主要分为五个步骤,下面我将详细介绍这五个步骤。 Step1:类加载检查 虚拟机遇到一条new指令时,首先会去检查这个指令的参数是否能在常量池中定位到这个类的符号引用,并且会检查这个符号引用所指向的类是否已经完成加载、连接和初始化,…

教小模型进行推理

https://arxiv.org/abs/2212.08410 思维链提示在基础层面上是如此成功,以至于它产生了一些被称为 x 链现象的东西。谷歌研究院探索了如何使用 llm 为现有数据集生成 CoT 数据本体,然后如何在 CoT 上微调较小的语言模型。 介绍 众所周知,思维链提示提高了大型语言模型的推理能…

[WesternCTF2018]shrine

打开题目就得到了python代码 import flask import os #导包 app = flask.Flask(__name__) #创建一个flask实例, app.config[FLAG] = os.environ.pop(FLAG) #从操作系统的环境变量中读取名为FLAG的值,并将其存储在Flask的配置中,POP:读取后删除该环境变量@app.route(/) #定义…

MySQL 8.0 Public Key Retrieval is not allowed 错误的解决方法

原文:MySQL 8.0 Public Key Retrieval is not allowed 错误的解决方法 参考:Connection Java - MySQL : Public Key Retrieval is not allowed在使用 MySQL 8.0 时重启应用后提示com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Public Key Retrieva…

MobaXterm 密钥生成器

1、MobaXterm 密钥生成器,代码仓库地址: https://gitcode.com/gh_mirrors/mo/MobaXterm-keygen/blob/master/MobaXterm-Keygen.py 2、也可以用我打包好的exe程序,不用安装python环境: https://pan.baidu.com/s/1jo85pQc_kfWhcYmZcc49CQ 提取码:ws10 3、源码:#/usr/bin/e…