【NodeMCU实时天气时钟温湿度项目 2】WIFI模式设置及连接

        第一专题内容,请参考:
        【NodeMCU实时天气时钟温湿度项目 1】连接点亮SPI-TFT屏幕和UI布局设计-CSDN博客

        NodeMCU是一个基于乐鑫ESP8266的开源IoT物联网硬件开发平台,支持WIFI功能,使用方法简单,受到越来越多来自全世界的创客朋友们的青睐。
        ESP8266是一款低成本、高性能的Wi-Fi模块,由Espressif Systems开发。它集成了Wi-Fi功能和TCP/IP协议栈,并可通过串口与主控制器进行通信。它采用先进的WIFI技术,提供高速、稳定的网络连接。其强大的处理能力使得设备能够快速响应指令,实现流畅的数据传输和通信。无论是智能家居、工业自动化还是远程监控等领域,都获得了广泛应用。

一、NodeMCU模块的WiFi工作模式

        1、无线终端(STA)模式
        在此模式下,模块可连接到由其他设备提供的无线网络,例如通过 WIFI 连接至路由器访问互联网,实现手机或电脑通过互联网实现对设备的远程控制。   
        简单来说,此模式下,该模块相当于一个用户,需要链接外部的WIFI(或自己的热点),通过链接的WIFI与其他在线设备进行通信。                 
                

        2、接入点(soft-AP)模式
        在此模式下,模块将作为热点供其他设备连接, 从而让手机或电脑直接与模块进行通讯,实现局域网的无线控制。同时支持0~8个无线终端连接到此soft-AP,默认为4个。
        简单来说,此模式下,该模块相当于提供一个热点,创建一个小范围的局域网,凡是连接上的设备就能与其进行通信。
        需要提醒的是:设置为soft-AP工作模式的模块,没有提供访问其他网络的接口。
                
                

        3、混杂(STA+AP)模式
        该模式为 STA 模式与 AP 模式共存的一种模式,模块既能连接到由其他设备提供的无线网络,又能作为热点供其他设备连接,以实现广域网与局域网的无缝切换, 方便操作使用。

                

二、NodeMCU模块的WiFi连接代码实现

        将NodeMCU连接到Wi-Fi,就如同把移动手机连接到网络接点一样简单方便,只需要几行代码就可以实现。以下是官方示例代码。
(摘自:ESP8266WiFi library — ESP8266 Arduino Core 3.1.2-21-ga348833 documentation)

#include <ESP8266WiFi.h>     //连接WiFi必须的头文件void setup()
{Serial.begin(115200);Serial.println();//此处需要将"network-name" 和 "pass-to-network",修改为您自己所在环境下的接入点名称和密码WiFi.begin("network-name", "pass-to-network");Serial.print("Connecting");while (WiFi.status() != WL_CONNECTED){delay(500);Serial.print(".");}Serial.println();Serial.print("Connected, IP address: ");Serial.println(WiFi.localIP());
}void loop() {}

三、在项目中添加WiFi功能的有关代码

        1. 添加ESP8266WiFi library支持WiFi功能的头文件       

#include <ESP8266WiFi.h>

        2. 增加设置WiFi模块将要连接的路由器的名称和密码

/**配置您所在环境的wifi 账号和密码注意:切勿连接 5G的频率、不要使用双频融合(路由器)注意:账号密码必须完全正确,包括字母大小写、空格、中划线、下划线******请务必修改成您所在环境的路由器名称和密码******
*/
const char* ssid     = "xcb940";
const char* password = "87589940abc";

        3. 增加实现WiFi连接功能函数的声明

//WiFi 连接函数声明
void connectWiFi();

        4、在setup()函数中调用 connectWiFi(),进行WiFi实际连接过程

  联网,建立WiFi连接    tft.println("Wi-Fi >> " + String(ssid));connectWiFi();

        5.  增加WiFi连接功能函数 connectWiFi() 的定义

//连接wifi
void connectWiFi() {Serial.print("Connecting to ");Serial.println(ssid);//设置WiFi工作在终端模式,参数可选填WIFI_AP、WIFI_STA、WIFI_AP_STA、WIFI_OFFWiFi.mode(WIFI_STA);//开始连接WiFi.begin(ssid, password);//检查连接是否成功while (WiFi.status() != WL_CONNECTED) {delay(500);Serial.print(".");tft.print(".");}tft.println("");tft.println("");tft.setTextColor(TFT_GREEN, TFT_BLACK, true);tft.println(WiFi.localIP());//设置:当路由器断开连接时,是否启动自动重新连接功能。true: 启用自动重新连接;false:不启用此功能WiFi.setAutoReconnect(true);//设置:是否将WiFi参数保存于Flash中,默认为true,即在每次调用WiFi.begin()、WiFi.softAP()、WiFi.disconnect、WiFi.softAPdisconnect方法时都会将相关数据写入到Flash中;//      当设置为false时,以上动作将不会把数据写入Flash中,仅仅改变内存中的WiFi设置WiFi.persistent(true);
}

        说明:除以上5点增加内容外,main.cpp其他内容未发生变化。

四、实现STA模式连接功能函数说明

        1. wl_status_t WiFi.begin(const char* ssid, const char *passphrase, int32_t channel, const uint8_t* bssid, bool connect)
        功能:启动无线连接
        参数:可设置5个参数,后4个为可选参数
        ssid – 要连接的wifi接入点的名称,最多可以包含32个字符。
        password –  可选。wifi接入点密码,长度至少应为8个字符且不超过64个字符。
        channel – 可选。要连接的wifi接入点信道。
        bssid – 可选。要连接的wifi接入点的mac地址。
        connect – 可选。连接状态参数。如果connect参数为true,NodeMCU开发板会使用闪存中储存的信息尝试连接WiFi。如果connect参数为false,ESP8266开发板不会尝试连接WiFi,而只会将WiFi连接信息保存在闪存中。
        返回值:返回值数据类型为表示连接状态的 wl_status_t 类型。

        2. wl_status_t WiFi.status()
        功能:返回STA模式下WiFi状态
        返回值:
        0 : WL_IDLE_STATUS,表示WiFi模块处于空闲状态,没有与任何网络连接
        1 : WL_NO_SSID_AVAILin,表示找不到指定的 WiFi 网络(SSID)
        2 : WL_SCAN_COMPLETED,表示WiFi模块网络扫描已结束
        3 : WL_CONNECTED ,表示连接成功
        4 : WL_CONNECT_FAILED,表示连接失败
        5:WL_CONNECTION_LOST,表示连接已失去
        6 : WL_WRONG_PASSWORD,表示连接密码错误
        7:WL_DISCONNECTED,表示已断开连接。

        3. bool WiFi.mode(WiFiMode_t m)
        功能:用于设置 Wi-Fi 工作模式。
        参数:
        WIFI_OFF: = 0,关闭 Wi-Fi。
        WIFI_STA: = 1,设置为 Wi-Fi 无线终端模式,用于连接到 Wi-Fi 热点。
        WIFI_AP: = 2,设置为 Wi-Fi 接入点模式,其他 在线Wi-Fi 设备可以连接到它。
        WIFI_AP_STA: = 3,设置为同时作为 Wi-Fi 接入点和客户端,可以连接到其他 Wi-Fi 热点并接受其他 Wi-Fi 设备的连接。
        返回值:布尔型。

        4. IPAddress WiFi.localIP()
        功能:获取NodeMCU开发板本地接口的IP地址
        返回值:本地接口的IP地址

        5. bool WiFi.setAutoReconnect(bool autoReconnect)
        功能:
当路由器(AP)断开连接时,是否启动自动重新连接功能。
        参数:布尔类型。true,启用自动重新连接;false,不启用此功能。
        返回值:布尔类型。设置成功返回true,失败则返回false。

        6. void WiFi.persistent(bool persistent)
        功能:
设置是否将WiFi参数保存于Flash中,默认为true。即在每次调用WiFi.begin()、WiFi.softAP()、WiFi.disconnect、WiFi.softAPdisconnect方法时都会将相关数据写入到Flash中;
        参数:布尔类型。true表示保存到FLASH中;false表示将不会把数据写入Flash中,仅仅改变内存中的WiFi设置。
        返回值:无。

五、项目第2阶段 main.cpp 的主要内容

#include <Arduino.h>
#include <TFT_eSPI.h>#include <ESP8266WiFi.h>/**配置您所在环境的wifi 账号和密码注意:切勿连接 5G的频率、不要使用双频融合(路由器)注意:账号密码必须完全正确,包括字母大小写、空格、中划线、下划线
*/
const char* ssid     = "LGCWZS";
const char* password = "87129168";//构造函数,实例化 TFT 屏幕对象
TFT_eSPI tft = TFT_eSPI();//WiFi 连接函数声明
void connectWiFi();//程序用到的字库文件,后面会详细说明
#include "hefeng-min-40px.h"
#include "weather_font20.h"
#include "weather_font16.h"void setup()
{//设置串口波特率Serial.begin(115200);//等待串口稳定Serial.println("");Serial.println("");Serial.println("");//TFT初始化设置tft.init();tft.setSwapBytes(true);tft.setRotation(0);  tft.fillScreen(TFT_BLACK);tft.setTextColor(TFT_WHITE, TFT_BLACK, true);//设置显示字号tft.setTextSize(2);联网,建立WiFi连接    tft.println("Wi-Fi >> " + String(ssid));connectWiFi();delay(10000);tft.fillScreen(TFT_BLACK);  // 显示当前日期,星期几,农历tft.loadFont(weather_font16);tft.setTextColor(TFT_WHITE, TFT_BLACK, true);tft.drawString("2024-05-03  星期五  三月二五", 0, 0);tft.unloadFont();tft.setTextSize(5);tft.setTextColor(TFT_GREEN, TFT_BLACK, true);tft.drawString("17:16:26", 0, 30);// 今日天气// 擦除指定区域tft.fillRect(55, 90, 240, 40, TFT_BLACK);tft.setTextColor(TFT_YELLOW, TFT_BLACK, true);tft.loadFont(hefeng40);tft.drawString("\uf101", 10, 90);tft.unloadFont();tft.loadFont(weather_font20);tft.setTextColor(TFT_WHITE, TFT_BLACK, true);tft.drawString("25°C  晴", 55, 90);tft.drawString("东南风3级 3KM/H", 55, 110);tft.drawLine(0, 140, 240, 140, TFT_WHITE);// 明日天气// 擦除指定区域tft.fillRect(55, 150, 240, 40, TFT_BLACK);tft.loadFont(hefeng40);tft.setTextColor(TFT_YELLOW, TFT_BLACK, true);tft.drawString("\uf103", 10, 150);tft.unloadFont();tft.loadFont(weather_font20);tft.setTextColor(TFT_WHITE, TFT_BLACK, true);tft.drawString("明天 15° - 28°", 55, 150);tft.drawString("多云", 55, 170);tft.drawLine(0, 200, 240, 200, TFT_WHITE);// 温湿度传感器的数据tft.loadFont(weather_font20);tft.setTextColor(TFT_WHITE, TFT_BLACK, true);tft.drawString("室温:", 20, 210);tft.setTextColor(TFT_GREEN, TFT_BLACK, true);tft.setTextColor(TFT_WHITE, TFT_BLACK, true);tft.drawString("湿度:", 120, 210);tft.setTextColor(TFT_GREEN, TFT_BLACK, true);
}void loop()
{}//连接wifi
void connectWiFi() {Serial.print("Connecting to ");Serial.println(ssid);//设置WiFi工作在终端模式,参数可选填WIFI_AP、WIFI_STA、WIFI_AP_STA、WIFI_OFFWiFi.mode(WIFI_STA);//开始连接WiFi.begin(ssid, password);//检查连接是否成功while (WiFi.status() != WL_CONNECTED) {delay(500);Serial.print(".");tft.print(".");}tft.println("");tft.println("");tft.setTextColor(TFT_GREEN, TFT_BLACK, true);tft.println(WiFi.localIP());//设置:当路由器断开连接时,是否启动自动重新连接功能。true: 启用自动重新连接;false:不启用此功能WiFi.setAutoReconnect(true);//设置:是否将WiFi参数保存于Flash中,默认为true,即在每次调用WiFi.begin()、WiFi.softAP()、WiFi.disconnect、WiFi.softAPdisconnect方法时都会将相关数据写入到Flash中;//      当设置为false时,以上动作将不会把数据写入Flash中,仅仅改变内存中的WiFi设置WiFi.persistent(true);
}

六、项目第2阶段运行结果

        项目编译上传成功后,将先后出现两个界面。
        第1个界面如下图,显示WiFi连接过程,成功后将显示STA的IP地址。

                

        第2个界面如下图,此时仍为静态画面UI布局,各项功能还未实现网络实时获取。

                

七、项目源码下载

        百度网盘下载地址:https://pan.baidu.com/s/1Ae-Q2NBCKoG2pZTolu5j4Q?pwd=l2w6
                                        提取码:l2w6

参考链接

1. ESP8266WiFi library — ESP8266 Arduino Core 3.1.2-21-ga348833 documentation
2. ESP8266WiFi library 部分源代码

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

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

相关文章

VMware虚拟网卡网络适配器出现黄色感叹号

问题发生&#xff1a;VMware在使用Ubuntu的过程中突然卡死&#xff0c;强制关闭开启后就发生了网络无法连接 找到电脑的设备管理发现VMware的适配器出现黄色感叹号 解决方法&#xff1a; 下载软件ccleaner 扫描问题&#xff0c;懒得去找就修复了所有的问题 最后发现适配器…

WouoUIPagePC端实现

WouoUIPagePC端实现 WouoUIPage是一个与硬件平台无关&#xff0c;纯C语言的UI库&#xff08;目前只能应用于128*64的单色OLED屏幕上&#xff0c;后期会改进&#xff0c;支持更多尺寸&#xff09;。因此&#xff0c;我们可以在PC上实现它&#xff0c;本文就以在PC上使用 VScode…

Vitis HLS 学习笔记--AXI_STREAM_TO_MASTER

目录 1. 简介 2. 示例 2.1 示例功能介绍 2.2 示例代码 2.3 顶层函数解释 2.4 综合报告&#xff08;HW Interfaces&#xff09; 2.5 关于TKEEP和TSTRB 2.6 综合报告&#xff08;SW I/O Information&#xff09; 3. 总结 1. 简介 本文通过“<Examples>/Interface…

KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记13 - STM32的SDIO学习5 - 卡的轮询读写擦

KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记13 - STM32的SDIO学习5 - 卡的轮询读写擦 一、前情提要二、目标三、技术方案3.1 读写擦的操作3.1.1 读卡操作3.1.2 写卡操作3.1.3 擦除操作 3.2 一些技术点3.2.1 轮询标志位的选择不唯一3.2.2 写和擦的卡状态查询3.2.3 写的速度 四、代…

ChatGPT4 Turbo 如何升级体验?官网如何使用最新版GPT-4 Turbo?

本文会教大家如何教大家升级自己的GPT4到GPT4 Turbo&#xff0c;同时检验自己的GPT4 Turbo是否是最新版本的GPT-4-Turbo-2024-04-09 说明 新版GPT-4 Turbo再次重夺大模型排行榜王座&#xff0c;超越了Claude 3 Opus。 最新版本的GPT-4 Turbo被命名为GPT-4-Turbo-2024-04-09。…

PopChar for Mac v10.1激活版:特殊字符输入工具

PopChar for Mac是一款专为Mac用户设计的字符输入工具&#xff0c;其简单直观的功能使得查找和插入特殊字符变得轻而易举。 PopChar for Mac v10.1激活版下载 首先&#xff0c;PopChar为Mac提供了访问所有字体字符的能力&#xff0c;包括那些难以通过键盘直接输入的字符。用户只…

Open CASCADE学习|BRepFill_Edge3DLaw

BRepFill_Edge3DLaw类继承自BRepFill_LocationLaw&#xff0c;用于在3D空间中定义边缘的几何法则。 下面是对代码中关键部分的解释&#xff1a; 文件头部&#xff1a;包含了版权信息&#xff0c;指出这个文件是OCCT软件库的一部分&#xff0c;并且根据GNU Lesser General Publi…

代码随想录-算法训练营day31【贪心算法01:理论基础、分发饼干、摆动序列、最大子序和】

代码随想录-035期-算法训练营【博客笔记汇总表】-CSDN博客 第八章 贪心算法 part01● 理论基础 ● 455.分发饼干 ● 376. 摆动序列 ● 53. 最大子序和 贪心算法其实就是没有什么规律可言&#xff0c;所以大家了解贪心算法 就了解它没有规律的本质就够了。 不用花心思去研究其…

【统计推断】-01 抽样原理之(六):三个示例

目录 一、说明二、处理有限的、大尺度的母体抽样三、非参数的估计四、连续母体抽样技巧--分箱 一、说明 对于抽样问题&#xff0c;前几期文章都是理论探讨。本篇给出若干示例&#xff0c;展现具体的情况下&#xff0c;面对数据&#xff0c;如何给出处理策略。 二、处理有限的…

C++反汇编——多态,面试题01

文章目录 1.C的三大特性1.1封装1.2继承1.3多态1.3.1 虚函数1.3.2 多态代码反汇编分析。反汇编分析1——基类指针指向子类对象&#xff0c;构造过程。反汇编分析2——基类指针指向子类对象&#xff0c;调用虚函数getPrice()过程。反汇编分析3——基类对象&#xff0c;调用虚函数…

WebRTC实现多人通话-Mesh架构【保姆级源码教程】

一、Mesh架构 WebRTC&#xff08;Web Real-Time Communications&#xff09;中的Mesh架构是一种将多个终端之间两两进行连接&#xff0c;形成网状结构的通信模式。以下是关于WebRTC的Mesh架构的详细解释&#xff1a; 基本概念&#xff1a;在Mesh架构中&#xff0c;每个参与者…

html实现网页插入音频

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文主要介绍html中 如何插入音乐和视频 视频插入 标签:<video></video> 兼容格式:mp4,因为别的浏览器都有不兼容的格式&#xff0c;唯一对mp4全都兼容。所以尽量使用mp4格式。 属性: 属性属性值…