wifi类物联产品配网之web

2023-10-29

wifi类物联产品配网之web

上接wifi类物联产品配网前言

web配网介绍

web主要连接设备建立的wifi 热点后,以网页的形式,让用户输入wifi ssid和密码,点击提交给设备进行配网。

优点:

不受wifi频段限制。

缺点:

需要用户手动连接设备wifi热点,手动输入wifi ssid和密码。

web配网实现

  1. wifi设备初始化进入AP模式,热点ap信息,然后启动http服务器,监听get和post请求;主要代码如下:

    //建立wifi热点,启动http服务器,监听get和post请求;
    void wifi_webConfigNet()
    {
        int i = 0, key;
        const char *ssid = "qytech";
        const char *password = "12345678";
        
        WiFi.forceSleepWake();
        WiFi.disconnect();
        WiFi.enableSTA(false);
        WiFi.setAutoConnect(true);
        WiFi.setAutoReconnect(true);
        WiFi.mode(WIFI_AP_STA);
        WiFi.softAP(ssid, password);
        IPAddress ipAddr = WiFi.softAPIP();
        Serial.println("htmlConfig ,and enter AP mode,wifi info:");
        Serial.printf("ssid:%s\r\n,password:%s\r\n", ssid, password);
        Serial.print("IP address:");
        Serial.println(ipAddr);
    
        if (MDNS.begin("esp8266"))
        {
            Serial.println("MDNS started");
        }
    
        server.on("/", response_index_page);
        server.on("/handleWifiInfo", HTTP_GET, request_handleWifiInfo);
        server.onNotFound(response_404_error);
    
        server.begin();
        Serial.println(">>HTTP server started");
        while (!httpSeverClose)
        {
            ESP.wdtFeed();
            server.handleClient();
            MDNS.update();
        }
        Serial.println(">>HTTP server stoped");
    }
    
    //对应请求响应server.on("/", response_index_page);
    static void response_index_page()
    {
        loadData(wifiConfig_jsonFile, WIFICONFIG, NULL);
        String htmlStr;
        if (readFile("/index.html", &htmlStr))
        {
            htmlStr.replace("{version}", firmwareVersion);
            htmlStr.replace("{ssid}", WiFi.SSID());
            htmlStr.replace("{password}", WiFi.psk());
            server.send(200, "text/html", htmlStr);
        }
    }
    
    //返回handleWifiInfo请求处理结果
    static void response_result_page()
    {
        loadData(wifiConfig_jsonFile, WIFICONFIG, NULL);
        String htmlStr;
        if (readFile("/result.html", &htmlStr))
        {
            htmlStr.replace("{version}", firmwareVersion);
            htmlStr.replace("{ssid}", wifiConfig.ssid);
            htmlStr.replace("{password}", wifiConfig.password);
            htmlStr.replace("{result}", mqttConfig.deviceId+",Config save,ready to reboot after 10s.");
            server.send(200, "text/html", htmlStr);
        }
    }
    
    //对应请求响应server.on("/handleWifiInfo", HTTP_GET, request_handleWifiInfo);
    static void request_handleWifiInfo()
    {
        String ssid = "";
        String password = "";
        ssid = server.arg("ssid");
        password = server.arg("password");
        ssid.trim();
        password.trim();
        if ((!ssid.isEmpty()) and (!password.isEmpty()))
        {
            Serial.println("save web wifi config info:");
            Serial.printf("ssid:%s,password:%s\r\n", ssid.c_str(), password.c_str());
            wifiConfig.ssid = ssid;
            wifiConfig.password = password;
            wifiConfig.configNetType = webConfigNet;
            response_result_page();
        }
        else
        {
            Serial.println("ssid or password is null");
            String htmlStr = "406 error,ssid or password is null\n\n";
            htmlStr += "server uri: ";
            htmlStr += server.uri();
            htmlStr += "\nmethod: ";
            htmlStr += (server.method() == HTTP_GET) ? "GET" : "POST";
            htmlStr += "\nargs: ";
            htmlStr += server.args();
            htmlStr += "\n";
            for (uint8_t i = 0; i < server.args(); i++)
            {
                htmlStr += " " + server.argName(i) + ": " + server.arg(i) + "\n";
            }
            server.send(406, "text/plain", htmlStr);
        }
    }
    
    //对应错误页server.onNotFound(response_404_error);
    static void response_404_error()
    {
        String htmlStr = "404 error,request file not exist\n\n";
        htmlStr += "server uri: ";
        htmlStr += server.uri();
        htmlStr += "\nmethod: ";
        htmlStr += (server.method() == HTTP_GET) ? "GET" : "POST";
        htmlStr += "\nargs: ";
        htmlStr += server.args();
        htmlStr += "\n";
        for (uint8_t i = 0; i < server.args(); i++)
        {
            htmlStr += " " + server.argName(i) + ": " + server.arg(i) + "\n";
        }
        server.send(404, "text/plain", htmlStr);
    }
    
  2. 用户连接上边的qytech后,在浏览器端输入192.168.4.1,然后在返回的页面中输入wifi名称,密码点击提交

    image-20230213092045813

  3. 设备接收到配网数据,然后连接该wifi,主要代码:

     
       WiFi.persistent(true);
       WiFi.begin(wifiConfig.ssid, wifiConfig.password);
        while (WiFi.status() != WL_CONNECTED)
        {
            count++;
            if (count > 10)
            {
                Serial.println("\r\n>>wifi connect fail");
                return false;
            }
    
            ESP.wdtFeed();
            Serial.print(".");
            delay(500);
        }
         wifiConnected = true;
        Serial.println("\r\n>>wifi connect success");
       
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

wifi类物联产品配网之web 的相关文章

随机推荐

  • 【初探DETR】UP-DETR 复现

    项目链接 https github com dddzg up detr 论文 https arxiv org abs 2011 09094 UP DETR 遵循两个步骤 预训练和微调 展示了在 ImageNet 上预训练的模型 然后在 CO
  • MOS管的使用方法

    转载自http blog csdn net qingwufeiyang12346 article details 48385773 http user qzone qq com 2756567163 1 三个极的判定 栅极 G 中间抽头 源
  • java 分布式日志_打造分布式日志收集系统

    前言 系统一大 就会拆分成多个独立的进程 比如web wcf web api等 也就成了分布式系统 要看一个请求怎么从头到尾走的 就有些困难了 要是进行DEBUG 跟踪 就更加麻烦了 困难程度要视进程多少而定 越多越复杂 分布式日志收集系统
  • Java工作线程 主存 同步机制_Java 并发变成同步机制

    并发编程的演进 批处理 多进程 多线程 在多线程变成中 由于多个线程共享进程的变量 有可能出现同时访问一个资源的情况 因此需要使用同步机制 java的内存模型 Java内存模型规定所有的变量都存在主存当中 每个线程都有自己的工作内存 线程对
  • netty5学习笔记-内存池4-PoolArena

    前面我们讲到了内存池中的几个重要的类 1 PoolChunk 维护一段连续内存 并负责内存块分配与回收 其中比较重要的两个概念 page 可分配的最小内存块单位 chunk page的集合 2 PoolSubpage 将page分为更小的块
  • Node.js通过js_code获取微信小程序的session_key和openid

    前言 小程序自己写一个node后台服务来接收前段的code 访问微信后台获取他的session key和openid const url require url const http require http const request r
  • 【go】Unmarshal时候报错提示proto.Unmarshal: missing method ProtoReflect

    问题 使用proto Unmarshal报错 提示以下信息 cannot use promoRule variable of type db PromotionRuleSet as protoreflect ProtoMessage val
  • 【WebStorm学生认证】如何用学生邮箱进行JetBrains学生认证

    前言 用邮箱进行学生认证 为期一年 到期再次进入官网续期即可 1 进入JetB rains官网 会看到右侧有个白色小人图案 点进去登录 注册 如果没有账号 如下图所指位置 注册一个 注意 采用学生邮箱 edu 邮箱 进行注册 有账号直接登录
  • Apollo自动驾驶系统概述——传感器技术(文末参与活动赠送百度周边)

    前言 作者主页 雪碧有白泡泡 个人网站 雪碧的个人网站 推荐专栏 java一站式服务 React从入门到精通 前端炫酷代码分享 从0到英雄 vue成神之路 uniapp 从构建到提升 从0到英雄 vue成神之路 解决算法 一个专栏就够了 架
  • 独家定制来了!免费帮你生成专属你的卡通头像!

    在如今的互联网时代 无论是哪个平台 都会使用到头像 你最喜欢用哪种头像 为满足大家的少男少女之心 皮卡智能最新研发了一款新的卡通头像风格 Q版卡通头像 可爱到像是定制绘画出来的 话不多说 直接上效果吧 原图 原图 原图 无论你是大叔还是萝莉
  • 放大电路中的反馈(电压串联负反馈,电流串联负反馈,电压并联负反馈,电压并联负反馈)

    放大电路中的反馈 反馈的判断 反馈的存在与否 从结构上判断 结构上存在一个通路 关系上存在一个反馈量 图a 从结构来讲不存在一个通路 图b 从结构来讲存在一个通路 从关系来讲 将Ui置零 输入反向端出现了一个R1 R1 R2 Uo这样一个信
  • 王垠——想得太多,做得太少

    我大四的时候 读到王垠从清华退学的文章 当时我虽然还没有正式开始攻读博士学位 但是也在实验室待了一年多了 老油条一根 对清华的博士生的学习生活了解得差不多了 当时读王垠的文章 我开始很不解 就剩一年 何不再坚持一下呢 后来我了解到一个人不能
  • GBase 8s 的四种运行模式

    1 离线模式 不能执行任何操作 2 在线模式 可以执行各种操作 3 单用户模式 可以执行SQL操作和命令行维护操作 只能管理员 GBASEDBT DBSA 连接 其它普通用户不能连接 4 静态模式 只能执行命令行维护操作 如备份数据库
  • 常用SQL语句-Part1

    1 向某个数据表中 增加一列 Oracle Alter Table table name Add column name colomn type Commit Sql Server Alter Table table name Add co
  • 超级实用的shell脚本100例(一)

    超级实用的shell脚本100例 一 1 编写 hello world 脚本 bin bash echo hello world 2 通过位置变量创建 Linux 系统账户及密码 bin bash 1 是执行脚本的第一个参数 2 是执行脚本
  • Android 简介

    国内移动互联网发展史 播种 2000年9月19日 中国移动和国内百家ICP首次坐在了一起 日本取经 2001年11月10日 中国移动通信的 移动梦网 正式开通 萌芽 萌芽时期 先后冒出了搜索 音乐 阅读 游戏等领域的多种无线企业 不过 整个
  • Visual Studio修改代码后运行程序不更新问题解决方案

    一 在生成中重新生成 但是此方法需要每次修改后重新点击 二 配置生成管理器 路径 生成 配置管理器 勾选 生成 刚学visual studio 2022 3天 自己摸索出来的方案
  • 福布斯发布区块链50强 这5家中国公司上榜

    福布斯发布区块链50强 这5家中国公司上榜 附榜单 福布斯今日 2月20日 在官网发布第二届 区块链50强 Blockchain 50 榜单 据福布斯评选标准 入选 Blockchain 50 榜单的公司必须每年营收不少于10亿美元或估值超
  • 欧拉角 图解释

    定义 先引wiki上的定义 欧拉角 由三个角度组成 在特定坐标系下用于描述刚体的orientation 简单来说 就是绕一个三维坐标系统下的三个基轴旋转三个角度 可以用来表示物体通过各种绕七绕八的转 最终转到的那种形态 orientatio
  • wifi类物联产品配网之web

    文章目录 wifi类物联产品配网之web web配网介绍 web配网实现 wifi类物联产品配网之web 上接wifi类物联产品配网前言 web配网介绍 web主要连接设备建立的wifi 热点后 以网页的形式 让用户输入wifi ssid和