ESP32C3:手机连接开发板创建的热点WEB后,输入可用WIFI信息后进行联网

本文主要是介绍ESP32C3:手机连接开发板创建的热点WEB后,输入可用WIFI信息后进行联网,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

客户端测试:

 串口测试:

 逻辑解释:

- `#include <WiFi.h>` 和 `#include <WebServer.h>` 导入了其它库,用于 ESP32C3 与 Wi-Fi 和 Web 服务器的交互。
- `const char* ssid = "ESP32C3";` 定义了 Wi-Fi AP 的名称。
- `WebServer server(80);` 创建了一个 Web 服务器对象,并将其绑定到 80 端口。
- `handleRoot()`: 当 Web 服务器收到根路径(/)的 GET 请求时,会调用该函数,它在客户端网页上显示输入 Wi-Fi 凭据的表单。
- `handleConnect()`: 当 Web 服务器收到路由为 /connect 的 POST 请求时,会调用该函数。 该函数会从请求中获取 Wi-Fi 凭据并将其用于 Wi-Fi 连接。如果连接成功,则会向客户端发出成功消息;如果连接失败,则会向客户端发出失败信息。
- `setup()` 函数的作用是执行一些初始化操作,例如设置调试串口,开启 Wi-Fi 并将 ESP32 设置为 AP。它还将路由器映射到 `handleRoot()` 和 `handleConnect()` 函数上,并开始运行 Web 服务器。
- `loop()`函数是无限循环,在其中,调用 `server.handleClient()` 方法,以便服务器能够实时地处理客户端的请求。

代码部分:
 

#include <WiFi.h>
#include <WebServer.h>
const char* ssid = "ESP32C3";
WebServer server(80);
void handleRoot() {String html = "<form action='/connect' method='post'>Enter WiFi credentials:<br><input type='text' name='ssid' value=''><br><input type='password' name='password' value=''><br><input type='submit' value='Connect'></form>";server.send(200, "text/html", "<!DOCTYPE html><html><head><meta name='viewport' content='width=device-width, initial-scale=1.0'></head><body>"+html+"</body></html>");
}
void handleConnect() {String ssid = server.arg("ssid");String password = server.arg("password");Serial.println(ssid);Serial.println(password);WiFi.begin(ssid.c_str(), password.c_str());unsigned long timeout = millis();while (WiFi.status() != WL_CONNECTED && millis() - timeout < 10000) {delay(1000);}if (WiFi.status() == WL_CONNECTED) {server.send(200, "text/html", "<p>Connected to WiFi</p>");Serial.println("成功连接WIFI");} else {server.send(200, "text/html", "<p>Failed to connect to WiFi</p>");Serial.println("失败连接WIFI");}
}
void setup() {Serial.begin(115200);WiFi.mode(WIFI_AP_STA); // enable Station and AP modeWiFi.softAP(ssid);Serial.print("AP IP address: ");Serial.println(WiFi.softAPIP());server.on("/", handleRoot);server.on("/connect", HTTP_POST, handleConnect);server.begin();
}
void loop() {server.handleClient();
}

迭代版本:

1.增加LED展示效果:通电点亮+5V电源指示灯,联网成功双灯常亮模式,联网失败呼吸灯闪烁(失败后按RST重启连接热点重新给正确的WIFI信息)

2.增加企业微信机器人接口,联网成功会通知,通过访问:192.168.4.1/send?txt=XXX 还可进行消息推送

代码:
 

#define LED_BUILTIN_0 (12)
#define LED_BUILTIN_1 (13)#include <WiFi.h>
#include <WebServer.h>
#include <HTTPClient.h>
// 开发板热点名称
const char* ssid = "ESP32C3";
// 企业微信机器人 webhook URL
const char* webhookUrl = "请填写webhook URL";WebServer server(80);
void handleRoot() {String html = "<form action='/connect' method='post'>Enter WiFi credentials:<br><input type='text' name='ssid' value=''><br><input type='password' name='password' value=''><br><input type='submit' value='Connect'></form>";server.send(200, "text/html", "<!DOCTYPE html><html><head><meta name='viewport' content='width=device-width, initial-scale=1.0'></head><body>"+html+"</body></html>");
}
void handleSend() {if (WiFi.status() == WL_CONNECTED) {// 如 "/send?txt=test",其中的 "txt=test" 就是一个参数,使用 server.arg("txt") 可以获取它的值,即 "test"String message = "ESP32C3推送消息:" + server.arg("txt");Serial.println("接收到推送消息:");Serial.println(message);sendToWechatWebhook(message); // 调用sendToWechatWebhook函数发送请求字符串信息server.send(200, "text/plain", "消息推送成功!"); // 告诉客户端请求已完成Serial.println("推送消息成功!");} else {server.send(200, "text/plain", "无法连接网络,请检查网络连接!"); // 网络连接失败,返回错误提示Serial.println("推送消息失败!");}
}
void handleConnect() {String ssid = server.arg("ssid");String password = server.arg("password");Serial.println(ssid);Serial.println(password);WiFi.begin(ssid.c_str(), password.c_str());unsigned long timeout = millis();while (WiFi.status() != WL_CONNECTED && millis() - timeout < 10000) {Serial.println("Connecting to WiFi...");delay(1000);}if (WiFi.status() == WL_CONNECTED) {server.send(200, "text/html", "<p>Connected to WiFi</p>");Serial.println("成功连接WIFI");// 连接成功灯常亮,亮度偏低analogWrite(LED_BUILTIN_0, 10);analogWrite(LED_BUILTIN_1, 10); // 发送消息到企业微信机器人String message = "ESP32C3 成功连接了 WiFi " + String(ssid);sendToWechatWebhook(message);} else {server.send(200, "text/html", "<p>Failed to connect to WiFi</p>");Serial.println("失败连接WIFI");while (true) {// 渐亮,范围0-255for (int i = 0; i < 100; i++) {analogWrite(LED_BUILTIN_0, i);analogWrite(LED_BUILTIN_1, i);delay(10); }// 渐灭范围255-0for (int i = 100; i >= 0; i--) {analogWrite(LED_BUILTIN_0, i);analogWrite(LED_BUILTIN_1, i);delay(10); }}}
}
void setup() {Serial.begin(115200);//只量一个电源灯pinMode(LED_BUILTIN_1, OUTPUT);WiFi.mode(WIFI_AP_STA); // enable Station and AP modeWiFi.softAP(ssid);Serial.print("AP IP address: ");Serial.println(WiFi.softAPIP());server.on("/", handleRoot);server.on("/connect", HTTP_POST, handleConnect);server.on("/send", HTTP_GET, handleSend); server.begin();
}
void loop() {server.handleClient();
}
void sendToWechatWebhook(String message) {HTTPClient https;https.begin(webhookUrl);String payload = "{\"msgtype\":\"text\",\"text\":{\"content\":\"" + message + "\"}}";int httpResponseCode = https.POST(payload);if (httpResponseCode == HTTP_CODE_OK) {Serial.println("Message sent to WeChat webhook");} else {Serial.println("Failed to send message to WeChat webhook");}https.end();
}

这篇关于ESP32C3:手机连接开发板创建的热点WEB后,输入可用WIFI信息后进行联网的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/354436

相关文章

W外链微信推广短连接怎么做?

制作微信推广链接的难点分析 一、内容创作难度 制作微信推广链接时,首先需要创作有吸引力的内容。这不仅要求内容本身有趣、有价值,还要能够激起人们的分享欲望。对于许多企业和个人来说,尤其是那些缺乏创意和写作能力的人来说,这是制作微信推广链接的一大难点。 二、精准定位难度 微信用户群体庞大,不同用户的需求和兴趣各异。因此,制作推广链接时需要精准定位目标受众,以便更有效地吸引他们点击并分享链接

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

Java Web指的是什么

Java Web指的是使用Java技术进行Web开发的一种方式。Java在Web开发领域有着广泛的应用,主要通过Java EE(Enterprise Edition)平台来实现。  主要特点和技术包括: 1. Servlets和JSP:     Servlets 是Java编写的服务器端程序,用于处理客户端请求和生成动态网页内容。     JSP(JavaServer Pages)

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

【北交大信息所AI-Max2】使用方法

BJTU信息所集群AI_MAX2使用方法 使用的前提是预约到相应的算力卡,拥有登录权限的账号密码,一般为导师组共用一个。 有浏览器、ssh工具就可以。 1.新建集群Terminal 浏览器登陆10.126.62.75 (如果是1集群把75改成66) 交互式开发 执行器选Terminal 密码随便设一个(需记住) 工作空间:私有数据、全部文件 加速器选GeForce_RTX_2080_Ti

BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin

目录   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 [web][HCTF 2018]admin 考点:弱密码字典爆破 四种方法:   [web][极客大挑战 2019]Http 考点:Referer协议、UA协议、X-Forwarded-For协议 访问环境 老规矩,我们先查看源代码