基于ESP8266 wifimanager实现WiFi配置及天气显示

引言

  在物联网(IoT)迅速发展的今天,越来越多人希望能够通过简单入门的项目来体验这一技术。特别是对于不懂编程的人来说,能够快速上手并实现一些有趣的功能是非常重要的。本篇文章旨在通过ESP8266模块和WiFiManager库,向读者展示如何自动配置WiFi并实现天气显示的功能。

项目概述

  本项目的核心是ESP8266 WiFi模块,它是一款低功耗的单片机,支持WiFi连接,非常适合于各种IoT项目。我们将使用WiFiManager库,该库能够简化WiFi配置的过程,让用户不需要编写复杂的代码就能轻松连接到WiFi。而我们的最终目标是通过ESP8266显示当前天气信息,关键步骤如下:

WiFiManager 库的安装与配置

  打开 Arduino IDE,点击“工具”菜单中的“管理库...”,在弹出的库管理器窗口中搜索“WiFiManager”,找到该库后点击“安装”按钮进行安装。

编写代码

//---------------------------setup函数-------------------------------
void setup()
{
    u8g2.begin();  //启用u8g2库
    u8g2.enableUTF8Print();
        
    Serial.begin(115200);
    // 建立WiFiManager对象
    WiFiManager wifiManager;
    
    // 自动连接WiFi。以下语句的参数是连接ESP8266时的WiFi名称
    wifiManager.autoConnect("AutoConnectAP");
    
    // 如果您希望该WiFi添加密码,可以使用以下语句:
    // wifiManager.autoConnect("AutoConnectAP", "12345678");
    // 以上语句中的12345678是连接AutoConnectAP的密码
    
    // WiFi连接成功后将通过串口监视器输出连接成功信息 
    Serial.println(""); 
    Serial.print("ESP8266 Connected to ");
    Serial.println(WiFi.SSID());              // WiFi名称
    Serial.print("IP address:\t");
    Serial.println(WiFi.localIP());           // IP

    int i = 0;                                   // 这一段程序语句用于检查WiFi是否连接成功
    while (WiFi.status() != WL_CONNECTED) {      // WiFi.status()函数的返回值是由NodeMCU的WiFi连接状态所决定的。 
        delay(1000);                               // 如果WiFi连接成功则返回值为WL_CONNECTED                       
        Serial.print(i++); Serial.print(' ');      // 此处通过While循环让NodeMCU每隔一秒钟检查一次WiFi.status()函数返回值
    }                                            // 同时NodeMCU将通过串口监视器输出连接时长读秒。
                                                // 这个读秒是通过变量i每隔一秒自加1来实现的。                                              
    Serial.println("");                          // WiFi连接成功后
    Serial.println("Connection established!");   // NodeMCU将通过串口监视器输出"连接成功"信息。
    Serial.print("IP address:    ");             // 同时还将输出NodeMCU的IP地址。这一功能是通过调用
    Serial.println(WiFi.localIP());

    u8g2.clearBuffer();
    u8g2.setFont(u8g2_font_unifont_t_chinese2);
    u8g2.setCursor(0, 14);
    u8g2.print("Waiting for WiFi");
    u8g2.setCursor(0, 30);
    u8g2.print("connection...");
    u8g2.sendBuffer();
    //开机连上wifi后同步一次天气数据
    if (getJson_ws()){
        parseJson_ws(response_ws);
    }

    Udp.begin(localPort);
    setSyncProvider(getNtpTime);
    setSyncInterval(300); //每300秒同步一次时间
}

WiFi 连接配置流程

  1. 将编写好的代码上传到 ESP8266 开发板。上传完成后,开发板会自动重启并进入 WiFi 配置模式。此时,开发板会创建一个名为“AutoConnectAP的 WiFi 热点。

  2. 使用手机或电脑连接到该 WiFi 热点。输入密码“12345678”。连接成功后,设备会自动打开一个网页,显示 WiFiManager 的配置界面。在该界面中,可以看到周围可用的 WiFi 热点列表。

  3. 从列表中选择要连接的 WiFi 网络,并输入对应的 WiFi 密码。点击“保存”按钮后,ESP8266 开发板会尝试连接到所选的 WiFi 网络。如果连接成功,开发板上的 LED 指示灯会闪烁几下,表示已经成功连接到 WiFi,并且会自动跳转到正常的工作模式;如果连接失败,会重新回到配置界面,让用户重新选择和输入 WiFi 信息。

总结

  通过 WiFiManager 库实现的 WiFi 配置流程,使得用户无需在代码中硬编码 WiFi 名称和密码,大大提高了设备的通用性和安全性。同时,也为用户提供了一个直观、便捷的 WiFi 配置方式,降低了设备的使用门槛。

  本文详细介绍了基于 ESP8266 与 WiFiManager 实现 WiFi 配置及天气显示的完整过程。通过 WiFiManager 库,我们轻松实现了 ESP8266 设备的 WiFi 自动配置功能,极大地简化了用户在使用过程中的网络连接操作。借助第三方天气 API,我们成功获取了实时的天气数据,并利用显示屏将这些信息直观地呈现给用户,为日常生活提供了便利。

  由于篇幅有限,只放了一部分代码,感兴趣的同学可到主页去下载全部的代码。

  整个项目从硬件选型、软件开发到功能实现,都充分考虑了实用性、易用性和成本效益。ESP8266 开发板的强大功能与 WiFiManager 库的便捷性相结合,为物联网设备的网络接入提供了一种高效解决方案。同时,天气信息的实时显示功能,不仅丰富了设备的应用场景,也提升了用户体验。

  在实际应用中,本项目还可以进一步拓展和优化。例如,可以增加更多的环境监测功能,如空气质量指数、紫外线强度等;也可以通过添加语音模块,实现天气信息的语音播报功能,为视力不佳或不方便查看显示屏的用户提供便利。此外,还可以将设备与智能家居系统集成,根据天气情况自动控制家中的窗帘、空调等设备,实现更加智能化的生活环境。

  总之,基于 ESP8266 与 WiFiManager 实现 WiFi 配置及天气显示的项目,不仅是一个实用的物联网应用案例,也为广大物联网爱好者和开发者提供了一个良好的学习和实践平台。通过不断探索和创新,我们可以开发出更多有趣且有价值的物联网项目,为人们的生活带来更多便利和乐趣。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS 鸿蒙 ArkTs(5.0.1 13)实现Scroll下拉到顶刷新/上拉触底加载,Scroll滚动到顶部

HarmonyOS 鸿蒙 ArkTs(5.0.1 13)实现Scroll下拉到顶刷新/上拉触底加载 效果展示 使用方法 import LoadingText from "../components/LoadingText" import PageToRefresh from "../components/PageToRefresh" import FooterBar from "../components/…

《自动驾驶与机器人中的SLAM技术》ch9:自动驾驶车辆的离线地图构建

目录 1 点云建图的流程 2 前端实现 2.1 前端流程 2.2 前端结果 3 后端位姿图优化与异常值剔除 3.1 两阶段优化流程 3.2 优化结果 ① 第一阶段优化结果 ② 第二阶段优化结果 4 回环检测 4.1 回环检测流程 ① 遍历第一阶段优化轨迹中的关键帧。 ② 并发计算候选回环对…

鸿蒙面试 2025-01-10

写了鉴权工具,你在项目中申请了那些权限?(常用权限) 位置权限 : ohos.permission.LOCATION_IN_BACKGROUND:允许应用在后台访问位置信息。 ohos.permission.LOCATION:允许应用访问精确的位置信息…

Windows图形界面(GUI)-QT-C/C++ - QT控件创建管理初始化

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 控件创建 包含对应控件类型头文件 实例化控件类对象 控件设置 设置父控件 设置窗口标题 设置控件大小 设置控件坐标 设置文本颜色和背景颜色 控件排版 垂直布局 QVBoxLayout …

Unreal Engine 5 C++ Advanced Action RPG 七章笔记

第七章 Ranged Enemy 2-Ranged Enemy Starting Weapon 制作新敌人的流程准备 新敌人的武器起始的状态数据自己的战斗能力投射能力自己的行为树 创建角色,添加武器,添加数据,就是继承之前的基类敌人的 运行结果 3-Glacer Starting Stats 看看就行,就是复制曲线表格更改数…

funcaptcha手势指向验证码识别

注意,本文只提供学习的思路,严禁违反法律以及破坏信息系统等行为,本文只提供思路 如有侵犯,请联系作者下架 本文滑块识别已同步上线至OCR识别网站: http://yxlocr.nat300.top/ocr/other/21 该验证码会给出某物品所有的…

GAMES101学习笔记(三):Rasterization 光栅化(三角形的离散化、抗锯齿、深度测试)

文章目录 视口变换 Viewport三角形网格 Triangle Mesh采样 Sampling走样/反走样 Aliasing/Antialiasing采样频率、空间域与频率域深入理解采样、走样、反走样反走样总结深度测试 Depth testing 课程资源:GAMES101-现代计算机图形学入门-闫令琪 Lec5 ~ Lec6 学习笔记…

vscode 扩展Cline、Continue的差别?

Cline和Continue都是VSCode的AI编程插件,它们在功能、用户体验、性能、适用场景以及配置和使用步骤等方面存在一些差别: 一、功能差异 编辑功能 Cline:能够分析项目的文件结构和源代码抽象语法树(AST),通…

鸿蒙打包发布

HarmonyOS应用/元服务发布(打包发布) https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V13/ide-publish-app-V13?catalogVersionV13 密钥:包含非对称加密中使用的公钥和私钥,存储在密钥库文件中,格式…

晨辉面试抽签和评分管理系统之九:随机编排考生的分组(以教师资格考试面试为例)

晨辉面试抽签和评分管理系统(下载地址:www.chenhuisoft.cn)是公务员招录面试、教师资格考试面试、企业招录面试等各类面试通用的考生编排、考生入场抽签、候考室倒计时管理、面试考官抽签、面试评分记录和成绩核算的面试全流程信息化管理软件。提供了考生…

sparkRDD教程之必会的题目

1.前期准备 (1)看看上一期的博客,最好跟着上一期的博客把sparkRDD的基本命令给熟练掌握后,再来做这篇文章的任务。 上一期的博客:sparkRDD教程之基本命令-CSDN博客 (2)新建文件task6.scala …

stack和queue专题

文章目录 stack最小栈题目解析代码 栈的压入弹出序列题目解析代码 queue二叉树的层序遍历题目解析代码 stack stack和queue都是空间适配器 最小栈 最小栈的题目链接 题目解析 minst是空就进栈&#xff0c;或者是val < minst.top()就进栈 代码 class MinStack { public:M…

欧拉路径算法

欧拉图&#xff1a; 对于应该连通图G&#xff0c;有&#xff1a; 1欧拉路径&#xff1a;一条路径&#xff0c;它能够不重复地遍历完所有的边&#xff0c;这个性质很像不重复地一笔画完所有边&#xff0c;所以有些涉及到欧拉路径的问题叫做一笔画问题。 2欧拉回路&#xff1a…

【C#设计模式(23)——模板方法模式(Template Method Pattern)】

前言 在抽象类中封装算法的结构&#xff0c;具体的实现步骤由子类定义&#xff0c;从而达到不改变算法结构的&#xff0c;允许子类重定义方法内容。代码 public abstract class Teamplate {public void TeamplateMethod(){Step1();Step2();Step3();}protected abstract void …

MyBatis——XML映射文件

在MyBatis中&#xff0c;既可以通过注解的方式配置SQL语句&#xff0c;也可以通过XML映射文件的方式配置SQL语句。对于简单的SQL语句建议直接通过注解的方式配置SQL语句&#xff1a; Delete("delete from user where id#{id}") Integer deleteById(Integer id);但是…

Mysql--运维篇--安全性(数据库访问控制,最小权限原则,表空间加密,TLS加密,证书签发,SQL注入及防范等)

一、数据库访问控制 MySQL的访问控制是确保数据库安全的关键机制之一。通过合理的用户权限管理和访问控制策略&#xff0c;可以防止未经授权的用户访问、修改或删除敏感数据。 1、MySQL访问控制的工作原理 MySQL使用基于用户的访问控制模型&#xff0c;每个用户都有特定的权…

抽奖滚动功能

代码 <template><div class"box"><video class"video" src"../../assets/video/底层.mp4" loop autoplay muted></video><img class"choujiang" src"../../assets/image/抽奖1.png" alt"&…

【Python】Python之locust压测教程+从0到1demo:基础轻量级压测实战(1)

文章目录 一、什么是Locust二、Locust 架构组成三、实战 Demo准备一个可调用的接口编写一个接口测试用例编写一个性能测试用例执行性能测试用例代码1、通过 Web UI 执行&#xff08;GUI模式&#xff09;2、通过命令行执行&#xff08;非GUI模式&#xff09; 小知识&#xff1a;…

Microsoft

Microsoft Word目录1.目录编号与文字的间距设置2. 目录编号缩进设置 Excel函数MID&#xff08;提取字符&#xff09;CONCAT&#xff08;组合字符串&#xff09;EXACT&#xff08;比较字符串&#xff09; PowerPointwindows 11 恢复右键传统菜单 Word 目录 1.目录编号与文字的…

用 Python 处理 CSV 和 Excel 文件

&#x1f496; 欢迎来到我的博客&#xff01; 非常高兴能在这里与您相遇。在这里&#xff0c;您不仅能获得有趣的技术分享&#xff0c;还能感受到轻松愉快的氛围。无论您是编程新手&#xff0c;还是资深开发者&#xff0c;都能在这里找到属于您的知识宝藏&#xff0c;学习和成长…