NodeMCU(ESP8266) WIFI配网及保存WiFi密码信息
NodeMCU(ESP8266) WIFI配网及保存WiFi密码信息
背景
在我们使用智能设备时经常会看到很多设备是接入WiFi的,刚买来的时候是需要连接WiFi的,配WiFi的方式有很多种,我遇到的比较多的是smartConfig
或 声纹配网
,如果是有触摸屏的话很多都是屏幕上直接输入WiFi密码即可。配置完网络后我们后续的使用时都是无需再次配WiFi信息。
WiFi配网原理
关于配网的原理我也是看别人的文章的,所以就不做搬运,如需了解请阅读下面这篇文章。
IoT】物联网之 WIFI 一键配网 smartConfig 浅析(ESP32)
demo视频
原本想这么一个简单的东西就没必要拍视频来展示,但是代码和文字都是很枯燥的,我这种学渣看到完全提不起兴趣,驱动个人去做的更多的可能还是看到别人的创意视频吧,所以我便想着用视频的方式来展示,希望也能驱动和我一样的小白玩家不断前行。
NodeMcu(ESP8266)一键配网及记住密码功能demo
功能讲解
- 先从EEPROM中获取WiFi的SSID和密码
- 如果已经有了SSID和密码,则直接使用SSID密码连接WIFI
- 如果是没有SSID和密码,则进入到配网模式
- 配网完成后将WiFi的SSID和密码存储到EEPROM存储器中
- 最后进入主程序,判断清除EEPROM存储器的功能键是否按下
- 如果按下则清空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密码信息相关推荐
- WiFi配网~智能家居配网解决方案
1. 什么是配网? 先解释一下什么是配网:当智能设备交付用户时,用户如何根据说明手册或者指引,简单成功的将联网设备连接到路由器下面.这里主要是wifi产品,蓝牙.Zigbee.NB-Iot配网是不 ...
- 10- ESP8266自主WiFi配网
Author:teacherXue 一.ESP8266接入网络 前面我们已经可以使用nodemcu来读取传感器数据,或者控制外设.但这些功能和普通的单片机没有本质差别.物联网是需要接入网络的,传统的单 ...
- IoT时代:Wi-Fi“配网”技术剖析总结
点击上方蓝字,关注高德技术! 1. 导读 近年来,物联网市场竞争激烈,从物联网平台厂商,设备生产商,到服务提供商,都在涌入这片红海.预计到2020年,全球联网设备数量将达到260亿个,年复合增长率达到 ...
- WIFI配网方式(AP模式、Smartconfig等模式)
参考:智能设备WIFI配网方式汇总 地址:https://blog.csdn.net/beauytlife_1985/article/details/87539350?spm=1001.2014.30 ...
- ESP32-C3入门教程 WiFi篇⑨——WiFi配网失败常见问题与解决办法(找不到WiFi AP | WiFi密码错误 | 距离AP过远 RSSI判断)
文章目录 一.前言 二.WiFi配网的常见问题 三.5GHz WiFi 四.找不到WiFi AP 4.1 App限制WiFi名称的输入 4.2 设备回传 配网失败错误码 五.WiFi密码错误 5.1 ...
- 涂鸦TuyaOS SDK 网关例程-wifi配网
涂鸦TuyaOS SDK 网关例程-wifi配网 使能WIFI配网预编译宏定义 net-tools相关文件路径 配网步骤 如果一直都没配网成功,看下面. 总结 使能WIFI配网预编译宏定义 例程默认没 ...
- 物联网Wi-Fi配网方式,你知道几种?
简介:什么是配网?有哪些配网方式?物联网配网技术为何鱼龙混杂,互不相通?本文将从原理.流程详细介绍一键配网.设备热点配网.手机热点配网.蓝牙配网.路由器配网和零配等6种配网方式,总结对比各配网方式的特 ...
- WIFI配网方案:1、蓝牙配网 2、WIFI自身配网 3、SmartConfig一键配网
蓝牙配网: 顾名思义,通过蓝牙给WIFI配网,过程相对较为简单,首先设备上具有WIFI和蓝牙两种功能.然后通过手机的小程序或者APP连接产品蓝牙,连接之后发送WIFI连接所需要的SSID和PASSID ...
- Android 蓝牙Wifi配网
WIFI配网:https://github.com/espressif/esp-idf-provisioning-android 蓝牙配网:https://github.com/EspressifAp ...
- 物联网WiFi配网方式原来是这七种!
1.背景介绍 物联网时代,各种各样的智能物联网设备正走进我们我们的生活,智能门锁.摄像头.猫眼门铃.扫地机.智能音箱.空气净化器.体脂秤等等. 这些物联网设备都有一个共同的特征,就是可以联网,通过配套 ...
最新文章
- Python基础(7)——for循环
- Python取top N相关的模块:heapq模块
- 如何重置linux,linux如何重置服务器
- python请输入第一个数请输入第二个数_Python小白学习之路(四)——第一次练习题...
- maven 解决冲突
- Tecplot中使用公式
- Python 真的勒死 R 了吗?
- Mac安装Redis
- 大学计算机应用基础模拟试题,《大学计算机应用基础》模拟试题.doc
- FreeMarker 语法教程
- jQuery(七)、效果和动画
- Java跨域问题以及如何使用Cors解决前后端 分离部署项目所遇到的跨域问题
- 服务器未能识别 HTTP 标头 SOAPAction 的值
- python继承封装多态简单理解_Python面向对象编程:封装、继承、多态(基础篇十)...
- js怎么实现那种整体页面变灰色
- 【小程序】JAVA实现从10~50中随机生成50个数,统计出现的数字及次数,输出出现最多的次数及对应的数字,按数字升序排列。
- 什么是hadoop?
- 2012年度x86服务器虚拟化基础设施魔力象限,五载解读!Gartner x86虚拟化魔力象限...
- ToggleSwitch控件介绍
- 学校网站服务器配置要求,学校校园网站服务器安全配置建议.docx
热门文章
- 一个分组查询的SQL 常用算法(附源码可直接执行)
- Mac MySQL重置Root密码
- [JNI] 开发前言
- CF1040B Shashlik Cooking
- fastmock模拟常见数据结构
- java的dtd文件_Eclipse中在XML中如何关联.dtd文件
- java 过滤sql特殊字符_JAVA中过滤特殊字符预防SQL注入
- spython_spython
- hql中获取前一天的数据_如何使用DNS和SQLi从数据库中获取数据样本
- vivo解bl锁_黔隆科技刷机教程酷派Y82820忘记密码刷机解锁降级救砖解屏幕锁账户锁教程...