15、ESP32 Wifi

       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.rhkb.cn/news/318354.html

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

相关文章

前端入门:HTML(css轮廓,填充,宽高)

1.CSS轮廓 注意&#xff1a; outline中&#xff0c;out-style是必须要设置的&#xff0c;格式为&#xff1a; outline-style一共有以下的几个值&#xff1a; 2.CSS填充属性 这是一个用于在一个元素的内容周围产生空间&#xff0c;也就是边框内到白框外之间的距离&#xff0c;…

基于Spring Boot的商务安全邮件收发系统设计与实现

基于Spring Boot的商务安全邮件收发系统设计与实现 开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/idea 系统部分展示 已发送效果图&#xff0c;用户可以对已发送信息…

AIGC元年大模型发展现状手册

零、AIGC大模型概览 AIGC大模型在人工智能领域取得了重大突破&#xff0c;涵盖了LLM大模型、多模态大模型、图像生成大模型以及视频生成大模型等四种类型。这些模型不仅拓宽了人工智能的应用范围&#xff0c;也提升了其处理复杂任务的能力。a.) LLM大模型通过深度学习和自然语…

第一课 自动驾驶概述

1. contents 2. 什么是无人驾驶/自动驾驶 3 智慧出行大智慧 4. 无人驾驶的发展历程

领域驱动设计(DDD)笔记(一)基本概念

文章链接 领域驱动设计&#xff08;DDD&#xff09;笔记&#xff08;一&#xff09;基本概念-CSDN博客领域驱动设计&#xff08;DDD&#xff09;笔记&#xff08;二&#xff09;代码组织原则-CSDN博客 DDD基本概念 DDD 是一种面向复杂需求的软件设计方法&#xff0c;将软件开…

C# wpf 运行时替换方法实现mvvm自动触发刷新

文章目录 前言一、如何实现&#xff1f;1、反射获取属性2、定义替换方法3、交换属性的setter方法 二、完整代码1、接口2、项目 三、使用示例1、倒计时&#xff08;1&#xff09;、继承ViewModelBase&#xff08;2&#xff09;、定义属性&#xff08;3&#xff09;、属性赋值&am…

【目标检测】DEtection TRansformer (DETR)

一、前言 论文&#xff1a; End-to-End Object Detection with Transformers 作者&#xff1a; Facebook AI 代码&#xff1a; DEtection TRansformer (DETR) 特点&#xff1a; 无proposal&#xff08;R-CNN系列&#xff09;、无anchor&#xff08;YOLO系列&#xff09;、无NM…

pycharm配置wsl开发环境(conda)

背景 在研究qanything项目的过程中&#xff0c;为了进行二次开发&#xff0c;需要在本地搭建开发环境。然后根据文档说明发现该项目并不能直接运行在windows开发环境&#xff0c;但可以运行在wsl环境中。于是我需要先创建wsl环境并配置pycharm。 wsl环境创建 WSL是“Windows Su…

EasyExcel 处理 Excel

序言 本文介绍在日常的开发中&#xff0c;如何使用 EasyExcel 高效处理 Excel。 一、EasyExcel 是什么 EasyExcel 是阿里巴巴开源的一个 Java Excel 操作类库&#xff0c;它基于 Apache POI 封装了简单易用的 API&#xff0c;使得我们能够方便地读取、写入 Excel 文件。Easy…

【讲解下如何解决一些常见的 Composer 错误】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

【二等奖水平论文】2024五一数学建模C题22页保奖论文+22页matlab和13页python完整建模代码、可视图表+分解结果等(后续会更新)

一定要点击文末的卡片&#xff0c;那是资料获取的入口&#xff01; 【高质量精品】2024五一数学建模C题成品论文22页matlab和13页python完整建模代码、可视图表分解结果等「首先来看看目前已有的资料&#xff0c;还会不断更新哦~一次购买&#xff0c;后续不会再被收费哦&#…

DRF解析器源码分析

DRF解析器源码分析 1 解析器 解析请求者发来的数据&#xff08;JSON&#xff09; 使用 request.data 获取请求体中的数据。 这个 reqeust.data 的数据怎么来的呢&#xff1f;其实在drf内部是由解析器&#xff0c;根据请求者传入的数据格式 请求头来进行处理。 drf默认的解…

电路笔记 : 电容电阻大小表示(103、104、151、2R5、R15的含义)

电容电阻大小表示 电阻 数字索位标称法 数字索位标称法就是在电阻体上用三位数字来标明其阻值。它的第一位和第二位为有效数字&#xff0c;第三位表示在有效数字后面所加“0”的个数.这一位不会出现字母。如果阻值是小数.则用“R”表示“小数点”.并占用一位有效数字&#xf…

eaapp怎么改地区?eaapp账号区域更改的简单操作教程分享

eaapp怎么改地区&#xff1f;eaapp账号区域更改的简单操作教程分享 EA App是由Electronic Arts艺电公司开发的官方游戏平台&#xff0c;为玩家提供了一个集中管理和探索EA游戏世界的平台。该平台提供了丰富的游戏库&#xff0c;包括热门游戏如《FIFA》和《Apex Legends》等。…

C语言——小知识和小细节17

一、未能给指针成功赋值 #include <stdio.h> #include <stdlib.h> #include <string.h>void GetMemory(char* p) {p (char*)malloc(20 * sizeof(char)); }void Test() {char* str NULL;GetMemory(str);strcpy(str, "Hello World!");printf(&quo…

Java网址url工具类

功能描述 无需引入三方依赖文本匹配网址&#xff08;支持多个&#xff09;网址解析&#xff08;包括协议、主机、路径、参数等&#xff09; package com.qiangesoft.image.utils;import org.springframework.util.Assert; import org.springframework.util.CollectionUtils;i…

Flutter笔记:Widgets Easier组件库(5)使用加减器

Flutter笔记 Widgets Easier组件库&#xff08;5&#xff09;&#xff1a;使用加减器 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress…

IO端子介绍及GPIO number计算

IO端子介绍 &#xff08;引脚&#xff0c;针脚&#xff09; 嵌入式系统的主芯片&#xff0c;有的IO资源少&#xff0c;有的IO资源多。 少的是这样的封装&#xff0c;IO管脚都在四周&#xff1b; 多的是这样的封装&#xff0c;IO 的PAD都在下面&#xff1a; MCU或MPU&#xff0c…

VS(Visual Studio)中查找项目里的中文字符

目录 正则表达式查找中文字符 正则表达式查找中文字符 在Visual Studio (VS) 中查找所有的中文字符&#xff0c;你可以使用其强大的查找和替换功能。不过&#xff0c;由于中文字符的范围非常广泛&#xff08;包括简体中文、繁体中文、日本汉字、韩国汉字等&#xff09;&#xf…

[1671]jsp教材管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 教材管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&…