15、ESP32 Wifi

news2024/12/24 21:13:45

       ESP32 的 WIFI 功能是模块内置的,通过 ESP32 的基础库调用一些函数就可以轻松使用它。

Wifi STA 模式:

        让 ESP32 连接附近 WIFI,可以上网访问数据。

// 代码显示搜索连接附近指定的 WIFI
// 通过 pin 按键可断开连接

#include <WiFi.h>
#include <Arduino.h>

const char* ssd = "么么";
const char* pasd= "yaoqiao321";

const byte LED = 2;
const byte PIN = 4;

void setup()
{
    Serial.begin(115200);

    pinMode(PIN, INPUT_PULLUP);
    pinMode(LED, OUTPUT);
    digitalWrite(LED, LOW);

    Serial.print("[WiFi] 开始连接:");
    Serial.println(ssd);

    WiFi.begin(ssd, pasd);
    for(uint8_t i=0; i<20; i++)
    {
        switch(WiFi.status())   // 检查 WiFi 连接状态
        {
            case WL_NO_SSID_AVAIL:
            {
                Serial.println("[WiFi] 没有找到 SSID");
                break;
            }
            case WL_SCAN_COMPLETED:
            {
                Serial.println("[WiFi] 扫描完成");
                break;
            }
            case WL_CONNECTED:
            {
                Serial.println("[WiFi] 已连接!");
                Serial.print("[WiFi] IP 地址:");
                Serial.println(WiFi.localIP());
                i = 21;
                break;
            }
            case WL_CONNECT_FAILED:
            {
                Serial.print("[WiFi] 失败 - 未连接! ");
                return;
            }
            case WL_CONNECTION_LOST:
            {
                Serial.println("[WiFi] 连接丢失");
                break;
            }
            case WL_DISCONNECTED:
            {
                Serial.println("[WiFi] 连接已断开");
                break;
            }
            default:
            {
                Serial.print("[WiFi] WiFi 状态:");
                Serial.println(WiFi.status());
                break;
            }
        }
        delay(1000);
        
        if(i == 20)
        {
            Serial.print("[WiFi] 连接失败!");
            WiFi.disconnect();      // 断开连接
            return;
        }
    }

    digitalWrite(LED, HIGH);
}

void loop()
{
    if (digitalRead(PIN) == LOW)
    {
        Serial.println("[WiFi] 正在断开连接!");
        if(WiFi.disconnect(true, false))
        {
            Serial.println("[WiFi] 已断开连接");
        }
        delay(1000);
    }
}

         官方 API:

// 代码连接 WIFI 访问 NTP 服务器时间

#include <Arduino.h>
#include <WiFi.h>

const char* ssd = "vivo X80";
const char* pasd= "YQY1122334455";
const char* ntp_server = "ntp.aliyun.com";  // NTP 服务器
const int gmt_offset = 8 * 60 * 60;         // UTC/GMT+8,东 8 时区偏移量,单位秒
const int daylight_offset = 0;              // 夏令时偏移值,单位秒

const byte LED = 2;

void setup()
{
    pinMode(LED, OUTPUT);
    digitalWrite(LED, LOW);

    Serial.begin(115200);
    
    // 设置时区
    setenv("TZ", "CST-8", 1);   // TZ 是时区环境变量,CST-8 是中国标准时间,1 表示覆盖旧值
    tzset();    // 作用时区变量

    Serial.print("[WiFi] 开始连接:");
    Serial.println(ssd);

    WiFi.begin(ssd, pasd);
    while (WiFi.status() != WL_CONNECTED)
    {
        Serial.println("[WiFi] 正在尝试连接...");
        delay(1000);
    }
    Serial.println("[WiFi] 连接成功");

    // 同步时间
    configTime(gmt_offset, daylight_offset, ntp_server);
    Serial.println("完成时间同步");

    digitalWrite(LED, HIGH);
}

void loop()
{
    time_t now = 0;
    struct tm time_info;
    char strftime_buf[64] = {'\0'};

    time(&now);
    localtime_r(&now, &time_info);
    strftime(strftime_buf, sizeof(strftime_buf), "%Y.%m.%d %A %T", &time_info);
    Serial.println(strftime_buf);
    delay(1000);
}


Wifi AP 模式:

        ESP32会自建一个WIFI热点,其他设备可以加入这个热点进行数据交换,类似局域网,不可联网。

        开启 AP 模式:

/**
 * 设置一个接入点 AP
 * @param ssid              WiFi 名称 SSID(最多 63 字符)
 * @param passphrase        WiFi 密码(WPA2 密码最少 8 位),不设置默认为开放性网络
 * @param channel           WiFi 信道号(1 - 13),最好区分开环境中其他网络,避免信号干扰
 * @param ssid_hidden       隐藏信号 (0 = 开放网络, 1 = 隐藏网络,需要指定查找)
 * @param max_connection    最大连接数(1 - 4),默认 4
*/
bool WiFiAPClass::softAP(const char* ssid, const char* passphrase, int channel, int ssid_hidden, int max_connection, bool ftm_responder)

         配置 IP(不是必须的):

/**
 * 配置接入点
 * @param local_ip      WIFI IP
 * @param gateway       网关
 * @param subnet        子网掩码
 */
bool WiFiAPClass::softAPConfig(IPAddress local_ip, IPAddress gateway, IPAddress subnet, IPAddress dhcp_lease_start)

        关闭 AP 模式:

/**
 * 断开网络连接 (关闭 AP)
 * @param wifioff disable mode?
 * @return one value of wl_status_t enum
 */
bool WiFiAPClass::softAPdisconnect(bool wifioff)
#include <Arduino.h>
#include <WiFi.h>

WiFiAPClass WiFiAP;

const char* ssd = "ESP32_Wifi"; 
const char* pasd = "12345678";

IPAddress local_IP(192, 168, 1, 1);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);

void setup()
{
    Serial.begin(115200);

    WiFi.softAPConfig(local_IP, gateway, subnet);   // 配置 本地IP 网关IP 子网掩码
    WiFi.softAP(ssd, pasd);   // AP 模式,创建一个 ESP32_Wifi 热点
}

void loop()
{
    delay(2000);
    Serial.print("本地 IP: ");
    Serial.println(WiFi.softAPIP());

    Serial.print("广播 IP: ");
    Serial.println(WiFi.softAPBroadcastIP());

    Serial.print("接入网络 ID: ");
    Serial.println(WiFi.softAPNetworkID());

    Serial.print("子网掩码: ");
    Serial.println(WiFi.softAPSubnetCIDR());

    Serial.print("主机名: ");
    Serial.println(WiFi.softAPgetHostname());

    Serial.print("热点 MAC: ");
    Serial.println(WiFi.softAPmacAddress());

    Serial.print("连接客户端: ");
    Serial.println(WiFi.softAPgetStationNum());
}


连接附近指定 WIFI:

#include <Arduino.h>
#include <WiFi.h>

void setup()
{
    Serial.begin(115200);

    int num = WiFi.scanNetworks();

    Serial.print("可用WIFI数:");
    Serial.println(num);

    Serial.println("WIFI信息如下:");
    for(int a=0; a<=num; a++)
        Serial.println(WiFi.SSID(a));

    Serial.println("输入 WIFI 和密码:");
}

void loop()
{
    while(Serial.available()>0)
    {
        String SD = Serial.readStringUntil(',');    // 读取","以前的字符串
        const char* ssd = SD.c_str();   // String 转换 char*
        delay(100);

        String PSD = Serial.readStringUntil('\0');    // 读取"\0"以前的字符串
        const char* pasd = PSD.c_str();
        delay(1000);

        Serial.print("WIFI:");
        Serial.println(SD);
        Serial.print("PSD:");
        Serial.println(PSD);

        WiFi.begin(ssd,pasd);

        while(WiFi.status() != WL_CONNECTED)
        {
            delay(500);
            Serial.print(".");
        }
        Serial.println("connected success!");

        Serial.print("IP:");
        Serial.println(WiFi.localIP());
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Docker - 修改服务的端口

1. 测试 新建一个httpd服务 docker run -itd -p 1314:80 --name test -h test httpd 2. 先停止容器和 docke r服务 docker stop test #停止容器3. 修改配置 cd /var/lib/docker/containers ls 找到需要修改的 cd 1fc55f0d24014217cff68c9a417ca46cf50312caa5c9e6bb24085126…

全栈开发之路——前端篇(4)watch监视、数据绑定和计算属性

全栈开发一条龙——前端篇 第一篇&#xff1a;框架确定、ide设置与项目创建 第二篇&#xff1a;介绍项目文件意义、组件结构与导入以及setup的引入。 第三篇&#xff1a;setup语法&#xff0c;设置响应式数据。 辅助文档&#xff1a;HTML标签大全&#xff08;实时更新&#xff…

抖音 通用交易系统 下单 密钥生成

已PHP为例 前提提条件 必须在 linux 系统中 生成 准备工作 接下来打开命令 执行命令即可 openssl genrsa -out private_key.pem 2048 rsa -in private_key.pem -pubout -out public_key.pem exit 会生成 公匙和 私匙 在小程序中 将 生成应用公匙 复制到小程序后台 在执行…

数据结构——循环结构:for循环

今天是星期五&#xff0c;明天休息&#xff0c;后天补课&#xff0c;然后就是运动会&#xff0c;接着是放假。&#xff08;但这些都和我没关系啊&#xff0c;哭死&#xff01;&#xff09;今天脑袋难得清醒一会儿&#xff0c;主要是醒的比较早吧&#xff0c;早起学了一会&#…

苹果CEO对未来一代人工智能投资持乐观态度

尽管在动荡的第二季度&#xff0c;苹果的收入和iPhone销量有所下降&#xff0c;但其新兴的人工智能技术可能会带来急需的提振。 在5月2日的电话财报会议上&#xff0c;苹果公布季度收入为908亿美元&#xff0c;比去年下降4%。iPhone的收入也下降了10%&#xff0c;至460亿美元。…

向量体系结构(4):多条车道内存组

笔记来源《计算机体系结构 量化研究方法》。 接着向量体系结构(2)讲&#xff0c;解决最后留下的问题中的两个问题 向量体系结构&#xff1a;向量执行时间-CSDN博客 &#xff08;1&#xff09;向量处理器如何实现每个时钟周期处理多于一个元素的能力? &#xff08;2&#x…

【大语言模型LLM】-基于大语言模型搭建客服助手(2)

&#x1f525;博客主页&#xff1a;西瓜WiFi &#x1f3a5;系列专栏&#xff1a;《大语言模型》 很多非常有趣的模型&#xff0c;值得收藏&#xff0c;满足大家的收集癖&#xff01; 如果觉得有用&#xff0c;请三连&#x1f44d;⭐❤️&#xff0c;谢谢&#xff01; 长期不…

json文件的读取

&#x1f4da;博客主页&#xff1a;knighthood2001 ✨公众号&#xff1a;认知up吧 &#xff08;目前正在带领大家一起提升认知&#xff0c;感兴趣可以来围观一下&#xff09; &#x1f383;知识星球&#xff1a;【认知up吧|成长|副业】介绍 ❤️感谢大家点赞&#x1f44d;&…

公考学习|基于SprinBoot+vue的公考学习平台(源码+数据库+文档)

公考学习平台目录 目录 基于SprinBootvue的公考学习平台 一、前言 二、系统设计 三、系统功能设计 5.1用户信息管理 5.2 视频信息管理 5.3公告信息管理 5.4论坛信息管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&…

JavaScript:Web APIs(三)

本篇文章的内容包括&#xff1a; 一&#xff0c;事件流 二&#xff0c;移除事件监听 三&#xff0c;其他事件 四&#xff0c;元素尺寸与位置 一&#xff0c;事件流 事件流是什么呢&#xff1f; 事件流是指事件执行过程中的流动路径。 我们发现&#xff0c;一个完整的事件执行…

117篇 | 3D Gaussian Splatting论文

本论文集划分为4个部分&#xff1a;综述&基础&#xff08;14篇&#xff09;、NeRF在AIGC&#xff08;54篇&#xff09;、NeRF在SLAM&#xff08;自动驾驶&#xff09;&#xff08;25篇&#xff09;、NeRF之场景建模&#xff08;25篇&#xff09; https://t.zsxq.com/3ATyE…

021、Python+fastapi,第一个Python项目走向第21步:ubuntu 24.04 docker 安装mysql8、redis(二)

系列文章目录 pythonvue3fastapiai 学习_浪淘沙jkp的博客-CSDN博客https://blog.csdn.net/jiangkp/category_12623996.html 前言 安装redis 我会以三种方式安装&#xff0c; 第一、直接最简单安装&#xff0c;适用于测试环境玩玩 第二、conf配置安装 第三、集群环境安装 一…

详细介绍如何使用YOLOv9 在医疗数据集上进行实例分割-含源码+数据集下载

深度学习彻底改变了医学图像分析。通过识别医学图像中的复杂模式,它可以帮助我们解释有关生物系统的重要见解。因此,如果您希望利用深度学习进行医疗诊断,本文可以成为在医疗数据集上微调YOLOv9 实例分割的良好起点。 实例分割模型不是简单地将区域分类为属于特定细胞类型,…

解决wget报错:ERROR 403: Forbidden.

原因&#xff1a; 服务器正在检查引用者&#xff0c;部分 HTTP 请求会得到错误响应。不以 Mozilla 开头或不包含 Wget 的用户代理的请求会被拒绝。 解决方案&#xff1a; wget --user-agent“Mozilla” 要下载的链接 如&#xff1a; wget --user-agent"Mozilla" …

global IoT SIM解决方案

有任何关于GSMA\IOT\eSIM\RSP\业务应用场景相关的问题&#xff0c;欢迎W: xiangcunge59 一起讨论, 共同进步 (加的时候请注明: 来自CSDN-iot). Onomondo提供的全球IoT SIM卡解决方案具有以下特点和优势&#xff1a; 1. **单一全球配置文件**&#xff1a;Onomondo的SIM卡拥…

一份工作 6 年前端的 Git 备忘录

前言 熟练的使用 git 指令&#xff0c;是一个程序员的基本功&#xff0c;本文记录了我这些年常用的一些 git 操作。 进入新团队需要做的一系列 git 操作 高频使用的指令 1. 注册内网 gitLab 账户 2. 项目管理员拉我进项目 3. 有了权限后&#xff0c;git clone url 项目到本…

顺序表经典算法

顺序表经典算法 1.移除元素 题目&#xff1a; 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的…

华为OD机试 - 会议室占用时间段(Java 2024 C卷 100分)

华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试…

基于SSM+JSP+MYSQL+JAVA的学生后台管理系统

&#x1f49e;文末获取源码联系&#x1f649; &#x1f447;&#x1f3fb; 精选专栏推荐收藏订阅&#x1f447;&#x1f3fb; &#x1f380;《Java精选实战项目-计算机毕业设计题目推荐-期末大作业》&#x1f618;更多实战项目~ https://www.yuque.com/liuyixin-rotwn/ei3euo/d…

CRE-LLM:告别复杂特征工程,直接关系抽取

CRE-LLM&#xff1a;告别复杂特征工程&#xff0c;直接关系抽取 提出背景CRE-LLM 宏观分析CRE-LLM 微观分析1. 构建指令集&#xff08;Instruction Design&#xff09;2. 高效微调大型语言模型&#xff08;Efficient Fine-Tuning on LLMs&#xff09;3. 方法讨论&#xff08;Di…