首页 > 编程语言 >esp32之micropython 配网代码

esp32之micropython 配网代码

时间:2024-09-16 23:46:21浏览次数:1  
标签:micropython ssid esp32 wifi AP 配网 password config socket

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 False
            return data['ssid'], data['password']
    except Exception as e:
        return None
def connect_wifi(ssid, password):
    global wifi_conn,wifi_config
    wlan = 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 = True
        wifi_config=wlan.ifconfig()
        server_socket.close()
        return True
    except 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=') + 5
        ssid_end = request.find('&', ssid_start)
        password_start = request.find('password=') + 9
        ssid = 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' + HTML

    client.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_config
    while 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 在你项目需要联网前引入代码即可

标签:micropython,ssid,esp32,wifi,AP,配网,password,config,socket
From: https://www.cnblogs.com/lemoniot/p/18416768

相关文章

  • 利用ESP32可以实现哪些有趣的功能?
    一、智能家居控制灯光控制作为一款功能强大的微控制器,可以通过Wi-Fi连接到家庭网络,实现对智能家居设备的控制。在灯光控制方面,可以使用ESP32连接到智能灯泡或灯光控制器,通过手机应用或语音指令来控制灯光的开关、亮度和颜色。此外,还可以设置定时开关、情景模式等功能,实现更加智......
  • Arduino ESP32 oled显示,增量式编码器测距程序
      ESP3214引脚接编码器A,13引脚接编码器B,21、22为I2C默认引脚,程序根据编码器A触发ESP32的22脚中断,然后判断编码器B在ESP32的21脚状态是高电平还是低电平,来决定编码器是正转还是反转,也就是数值应该加还是减。   程序设计为编码器转一圈为1000个脉冲也就是编码器分辨率......
  • 使用micropython设计STM32蓝牙智能小车
    1、前言    最近在使用micropython来使用STM32F411CEU6TR,给我的感觉是:没有像使用c语言那样的自由,有一些引脚不能够自主设计,不触及底层代码,但是对于初学者来说非常友好,可操作性大大提高,各种代码的使用接近口语,方便使用。2、软件的使用    一个是MU,这个对于有......
  • Arduino IDE离线配置第三方库文件-ESP32开发板
    简洁版可以使用uget等,将文件下载到对应文件夹下,然后安装。esp32之arduino配置下载提速录屏ArduinoIDE离线配置第三方库文件ESP32资源 Linuxhttps://download.csdn.net/download/ZhangRelay/89749063第三方开发板非默认支持的开发板linux系统下,下载存放文件目......
  • 【IPV6从入门到起飞】5-2 IPV6+Home Assistant(ESP32+MQTT+DHT11+BH1750)传感器采集上
    IPV6+HomeAssistant[ESP32+MQTT+DHT11+BH1750]传感器采集上传监测1背景2实现效果3HomeAssistant配置3-1MQTT配置3-2yaml配置3-3加载配置4ESP32搭建4-1开发环境4-2工程代码5实现效果1背景在上一小节【IPV6从入门到起飞】5-1IPV6+HomeAssistant(搭建......
  • 物联网毕设 -- 图传种植监测控制(STM32+ESP32+APP)
    目录一连线图1原理图2PCB效果(面包版不适用)3实物效果4APP效果5功能概括(1)硬件端(2)APP端(4)云平台使用(需要可以找我获取)(5)演示视频二底层代码使用方式1.使用说明2.下载程序三APP使用方式1下载APP四程序架构及修改(通用) 前言该智能环境监测与控制系统......
  • 《ESP32从0到1》之MQTT与阿里iot通信(中)
    文章目录文章内容硬件增加定时器,实现定时发布MQTT主题移植smart_config程序最终程序逻辑运行测试保存ssid和password上电自动配网最终运行测试补充说明欢迎关注并留言文章内容基于MQTT->tcp结合wifi->smart_config示例工程,读懂程序,最终实现MQTT与阿里iot平台通信。......
  • 让ESP32-C3系列的卓越表现助力智能生活:四博智联全新推出的ESPC3-20E模块
    让ESP32-C3系列的卓越表现助力智能生活:四博智联全新推出的ESPC3-20E模块在智能生活和物联网领域,稳定的无线连接和低功耗设计已经成为推动技术发展的关键。作为行业领先的企业,四博智联凭借创新的产品设计,推出了全新的ESPC3-20EWi-Fi和蓝牙5.0双模模块。该模块结合了高性能......
  • 【花雕学编程】Arduino动手做(230)---ESP32 CAM 长时延时摄影:在拍摄之间使设备休眠并记
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来——小小的......
  • 使用WebSocket协议实现在ESP32上音频接收播放
     主要目的:学习WebSocket通讯协议和ESP32开发所需配置:Pycharm,python3.12,ESP32S3N16R8, 扬声器(8欧,2W), 功放模块:MAX98357I2SAMP。一、介绍 1、WebSocket协议 WebSocket是一种网络通信协议,位于OSI模型的应用层。它提供了在单个TCP连接上进行全双工通信的能力,使得客......