NodeMCU(ESP8266) WIFI配网及保存WiFi密码信息

背景

在我们使用智能设备时经常会看到很多设备是接入WiFi的,刚买来的时候是需要连接WiFi的,配WiFi的方式有很多种,我遇到的比较多的是smartConfig声纹配网,如果是有触摸屏的话很多都是屏幕上直接输入WiFi密码即可。配置完网络后我们后续的使用时都是无需再次配WiFi信息。

WiFi配网原理

关于配网的原理我也是看别人的文章的,所以就不做搬运,如需了解请阅读下面这篇文章。

IoT】物联网之 WIFI 一键配网 smartConfig 浅析(ESP32)

demo视频

原本想这么一个简单的东西就没必要拍视频来展示,但是代码和文字都是很枯燥的,我这种学渣看到完全提不起兴趣,驱动个人去做的更多的可能还是看到别人的创意视频吧,所以我便想着用视频的方式来展示,希望也能驱动和我一样的小白玩家不断前行。

NodeMcu(ESP8266)一键配网及记住密码功能demo

功能讲解

  1. 先从EEPROM中获取WiFi的SSID和密码
  2. 如果已经有了SSID和密码,则直接使用SSID密码连接WIFI
  3. 如果是没有SSID和密码,则进入到配网模式
  4. 配网完成后将WiFi的SSID和密码存储到EEPROM存储器中
  5. 最后进入主程序,判断清除EEPROM存储器的功能键是否按下
  6. 如果按下则清空WiFi的SSID和密码信息,重置后回到步骤1

大致流程如下

代码

这里代码推荐使用多文件的方式来写,第一复用性会比较高(拿到其他项目也能用),第二不会被很长的代码看迷糊。

  • smartconfig.h

这个主要就是将WiFi的SSID和密码存储起来


#include <EEPROM.h>#ifndef _SMART_CONFIG_
// 声明
#define _SMART_CONFIG_#define EEPROM_START 1024struct WifiPwd {char ssid[32];char pwd[64];
};/*保存参数到eeprom
*/
void saveConfig(WifiPwd *wifipwd) {EEPROM.begin(EEPROM_START);uint8_t *p = (uint8_t*)(wifipwd);for (int i = 0; i < sizeof(*wifipwd); i++) {EEPROM.write(i, *(p + i));}EEPROM.commit();// 释放内存delete wifipwd;
}/*获取wifi账号密码信息
*/
WifiPwd* loadConfigs() {// 为变量请求内存WifiPwd *pvalue  = new WifiPwd;   EEPROM.begin(EEPROM_START);uint8_t *p = (uint8_t*)(pvalue);for (int i = 0; i < sizeof(*pvalue); i++) {*(p + i) = EEPROM.read(i);}EEPROM.commit();return pvalue;
}/**清空wifi账号和密码
*/
void clearConfig() {EEPROM.begin(EEPROM_START);// 这里为啥是96 ,因为在结构体声明的长度之和就是96for (int i = 0; i < 96; i++) {EEPROM.write(i, 0);}EEPROM.commit();
}#endif
  • smart-config-demo.ino

主程序,说明注释里面都有


#include <ESP8266WiFi.h>
#include <cstring>
#include "smartconfig.h"// 功能按键
#define POWERKEY 5/**一键配网
*/
void smartConfig() {// 先从flash中加载账号密码WifiPwd* wifipwd = loadConfigs();if (strlen(wifipwd->pwd) > 0 ) {Serial.println("\n\ruse password connect wifi");// 如果说有账号密码信息,那就直接用账号密码连接wifiWiFi.mode(WIFI_STA);WiFi.begin(wifipwd->ssid, wifipwd->pwd);while (WiFi.status() != WL_CONNECTED) {// 直到wifi连接成功为止blinkled();}// 删除内存delete wifipwd;// 设置自动连接WiFi.setAutoConnect(true);} else {Serial.println("\n\rwait smart config wifi");WiFi.beginSmartConfig();while (1) {blinkled();if (WiFi.smartConfigDone()) {WifiPwd *wifipwd  = new WifiPwd;strcpy(wifipwd->ssid, WiFi.SSID().c_str());strcpy(wifipwd->pwd, WiFi.psk().c_str());// 记住wifi账号密码saveConfig(wifipwd);// 设置自动连接WiFi.setAutoConnect(true);break;}}}Serial.println("\n\rWiFi Connected IP address: ");Serial.println(WiFi.localIP());
}/**指示灯闪烁
*/
void blinkled() {digitalWrite(LED_BUILTIN, LOW);delay(200);digitalWrite(LED_BUILTIN, HIGH);delay(200);
}/**按键
*/
int keywords() {// 获取按键的值int keyValue = digitalRead(POWERKEY);// 目前是直接返回的,todo 后续需要对按键除抖和长按处理等return keyValue;
}void setup() {Serial.begin(115200);pinMode(LED_BUILTIN, OUTPUT);pinMode(POWERKEY, OUTPUT);smartConfig();digitalWrite(LED_BUILTIN, LOW);Serial.println("wifi connected");
}void loop() {if (WiFi.status() != WL_CONNECTED) {// 如果wifi断开的话就重连WiFi.reconnect();}// 判断是否按下重置按钮if (keywords() == 1) {// 如果按键按下则清空eeprom和重置单片机clearConfig();Serial.println("wifi账号密码已经清除");}
}

NodeMCU(ESP8266) WIFI配网及保存WiFi密码信息相关推荐

  1. WiFi配网~智能家居配网解决方案

    1. 什么是配网?   先解释一下什么是配网:当智能设备交付用户时,用户如何根据说明手册或者指引,简单成功的将联网设备连接到路由器下面.这里主要是wifi产品,蓝牙.Zigbee.NB-Iot配网是不 ...

  2. 10- ESP8266自主WiFi配网

    Author:teacherXue 一.ESP8266接入网络 前面我们已经可以使用nodemcu来读取传感器数据,或者控制外设.但这些功能和普通的单片机没有本质差别.物联网是需要接入网络的,传统的单 ...

  3. IoT时代:Wi-Fi“配网”技术剖析总结

    点击上方蓝字,关注高德技术! 1. 导读 近年来,物联网市场竞争激烈,从物联网平台厂商,设备生产商,到服务提供商,都在涌入这片红海.预计到2020年,全球联网设备数量将达到260亿个,年复合增长率达到 ...

  4. WIFI配网方式(AP模式、Smartconfig等模式)

    参考:智能设备WIFI配网方式汇总 地址:https://blog.csdn.net/beauytlife_1985/article/details/87539350?spm=1001.2014.30 ...

  5. ESP32-C3入门教程 WiFi篇⑨——WiFi配网失败常见问题与解决办法(找不到WiFi AP | WiFi密码错误 | 距离AP过远 RSSI判断)

    文章目录 一.前言 二.WiFi配网的常见问题 三.5GHz WiFi 四.找不到WiFi AP 4.1 App限制WiFi名称的输入 4.2 设备回传 配网失败错误码 五.WiFi密码错误 5.1 ...

  6. 涂鸦TuyaOS SDK 网关例程-wifi配网

    涂鸦TuyaOS SDK 网关例程-wifi配网 使能WIFI配网预编译宏定义 net-tools相关文件路径 配网步骤 如果一直都没配网成功,看下面. 总结 使能WIFI配网预编译宏定义 例程默认没 ...

  7. 物联网Wi-Fi配网方式,你知道几种?

    简介:什么是配网?有哪些配网方式?物联网配网技术为何鱼龙混杂,互不相通?本文将从原理.流程详细介绍一键配网.设备热点配网.手机热点配网.蓝牙配网.路由器配网和零配等6种配网方式,总结对比各配网方式的特 ...

  8. WIFI配网方案:1、蓝牙配网 2、WIFI自身配网 3、SmartConfig一键配网

    蓝牙配网: 顾名思义,通过蓝牙给WIFI配网,过程相对较为简单,首先设备上具有WIFI和蓝牙两种功能.然后通过手机的小程序或者APP连接产品蓝牙,连接之后发送WIFI连接所需要的SSID和PASSID ...

  9. Android 蓝牙Wifi配网

    WIFI配网:https://github.com/espressif/esp-idf-provisioning-android 蓝牙配网:https://github.com/EspressifAp ...

  10. 物联网WiFi配网方式原来是这七种!

    1.背景介绍 物联网时代,各种各样的智能物联网设备正走进我们我们的生活,智能门锁.摄像头.猫眼门铃.扫地机.智能音箱.空气净化器.体脂秤等等. 这些物联网设备都有一个共同的特征,就是可以联网,通过配套 ...

最新文章

  1. Python基础(7)——for循环
  2. Python取top N相关的模块:heapq模块
  3. 如何重置linux,linux如何重置服务器
  4. python请输入第一个数请输入第二个数_Python小白学习之路(四)——第一次练习题...
  5. maven 解决冲突
  6. Tecplot中使用公式
  7. Python 真的勒死 R 了吗?
  8. Mac安装Redis
  9. 大学计算机应用基础模拟试题,《大学计算机应用基础》模拟试题.doc
  10. FreeMarker 语法教程
  11. jQuery(七)、效果和动画
  12. Java跨域问题以及如何使用Cors解决前后端 分离部署项目所遇到的跨域问题
  13. 服务器未能识别 HTTP 标头 SOAPAction 的值
  14. python继承封装多态简单理解_Python面向对象编程:封装、继承、多态(基础篇十)...
  15. js怎么实现那种整体页面变灰色
  16. 【小程序】JAVA实现从10~50中随机生成50个数,统计出现的数字及次数,输出出现最多的次数及对应的数字,按数字升序排列。
  17. 什么是hadoop?
  18. 2012年度x86服务器虚拟化基础设施魔力象限,五载解读!Gartner x86虚拟化魔力象限...
  19. ToggleSwitch控件介绍
  20. 学校网站服务器配置要求,学校校园网站服务器安全配置建议.docx

热门文章

  1. 一个分组查询的SQL 常用算法(附源码可直接执行)
  2. Mac MySQL重置Root密码
  3. [JNI] 开发前言
  4. CF1040B Shashlik Cooking
  5. fastmock模拟常见数据结构
  6. java的dtd文件_Eclipse中在XML中如何关联.dtd文件
  7. java 过滤sql特殊字符_JAVA中过滤特殊字符预防SQL注入
  8. spython_spython
  9. hql中获取前一天的数据_如何使用DNS和SQLi从数据库中获取数据样本
  10. vivo解bl锁_黔隆科技刷机教程酷派Y82820忘记密码刷机解锁降级救砖解屏幕锁账户锁教程...