ESP8266学习笔记6:ESP8266规范wifi连接操作
一、前言
我整理了从2015年至今关于ESP8266的学习笔记,梳理出来了开发环境、基础功能、进阶学习三大部分。方便自己和他人。可点此查看,欢迎交流。
之前在笔记4《ESP8266的SmartConfig》http://blog.csdn.net/iotisan/article/details/54849410中,做了smartconfig例程的測试。
这个例程是因为DEMO演示的,离商用还有段距离。
几周前,有网友就问我esp8266又一次上电无法自己主动连接之前配置的路由器。这确实是眼下DEMO最缺的一个功能。当首次将设备接入wifi之后,设备应该保存住SSID和PWD,在兴许上电时能自己去连接wifi,而不是例程中每次上电都来一次。
当时忙别的事情没做。今天抽时间做了下处理。
事实上处理还挺简单,写篇笔记总结下,规范wifi连接操作。
本文作者twowinter,转载请注明作者:http://blog.csdn.net/iotisan/
二、编程思路
1. 路由器參数的保存和查询
在DEMO中,设置完STATION模式后,就直接smartconfig。我们应当在smartconfig之前做一个參数推断,推断是否有保存的路由器信息。有保存,就连接路由器。没保存,才smartconfig。
void user_init(void)
{
os_printf("SDK version:%s\n", system_get_sdk_version());
wifi_set_opmode(STATION_MODE);
smartconfig_start(smartconfig_done);
}
关于这个路由器參数存储,查了下官方手冊。发现SDK还是非常贴心的。已经有API能够直接保存和查询了。而不须要我们再去做flash參数存储。
两个关键API摆出来。
保存
wifi_station_set_config
功能:设置 WiFi station 接口的配置參数。并保存到 flash
查询
wifi_station_get_config_default
功能:查询 WiFi station 接口保存在 flash 中的配置參数。
2. 已有路由器參数时的处理
没有路由器參数时的处理非常easy,直接smartconfig。
而当有路由器參数时,还须要做些处理。
我的思路是。以当前的參数去搜索下环境中是否存在这个AP。没有的话再启动smartconfig。有的话就直接connect。
wifi_station_scan
功能:获取AP的信息
三、代码操作
1.初始化时推断FLASH中是否存有有效的路由器參数。
void user_init(void)
{
wifi_set_opmode(STATION_MODE);
wifi_station_get_config_default(&s_staconf);
if (os_strlen(s_staconf.ssid) != 0) {
os_printf("user_scan\n");
system_init_done_cb(user_scan);
} else {
os_printf("smartcfg\n");
smartconfig_start(smartconfig_done);
}
}
2.已存有路由器參数,去搜索看看AP当前是否存在。
void ICACHE_FLASH_ATTR
user_scan(void)
{
struct scan_config config;
os_memset(&config, 0, sizeof(config));
config.ssid = s_staconf.ssid;
wifi_station_scan(&config, user_scan_done);
}
3.之后的操作就看个人处理了。
规范的处理是要开启一个线程,周期性检測AP的连接状态,处理不同的错误状态。
我就不展开了。
四、測试效果
首次启动时,进行SmartCfg。
<Time:2015-08-21 10:52:37:703 Len:0001>:<Time:2015-08-21 10:52:52:687 Len:0315>:rl<Time:2015-08-21 10:52:52:906 Len:0078>:dsdSSDK version:1.2.0
smartcfg
mode : sta(18:fe:34:f8:8f:cf)
add if0
f 0,
<Time:2015-08-21 10:52:55:000 Len:0015>:scandone
f 0,
<Time:2015-08-21 10:52:57:187 Len:0034>:scandone
SC_STATUS_FIND_CHANNEL
<Time:2015-08-21 10:53:08:296 Len:0106>:
TYPE: ESPTOUCH V2.4
T|PHONE MAC:
T|AP MAC :
SC_STATUS_GETTING_SSID_PSWD
SC_TYPE:SC_TYPE_ESPTOUCH
<Time:2015-08-21 10:53:11:250 Len:0026>:T|SCAN SSID: Xiaomi_5BAB
<Time:2015-08-21 10:53:11:578 Len:0086>:T|pswd: 1234567890
T|ssid: Xiaomi_5BAB
T|bssid: 8c be be 28 5b ac
SC_STATUS_LINK
<Time:2015-08-21 10:53:11:656 Len:0008>:f -240,
<Time:2015-08-21 10:53:13:906 Len:0068>:scandone
no Xiaomi_5BAB found, reconnect after 1s
reconnect
f 0,
<Time:2015-08-21 10:53:16:031 Len:0010>:scandone
<Time:2015-08-21 10:53:17:031 Len:0109>:add 0
aid 4
pm open phy_2,type:2 0 0
cnt
connected with Xiaomi_5BAB, channel 3
dhcp client start...
<Time:2015-08-21 10:53:19:562 Len:0054>:ip:192.168.31.232,mask:255.255.255.0,gw:192.168.31.1
<Time:2015-08-21 10:53:22:515 Len:0047>:SC_STATUS_LINK_OVER
Phone ip: 192.168.31.199
第二次上电。自己主动获取AP进行连接。
<Time:2015-08-21 10:53:52:078 Len:0001>:<Time:2015-08-21 10:53:58:171 Len:0315>:l<Time:2015-08-21 10:53:58:390 Len:0094>:d;lSSDK version:1.2.0
user_scan
mode : sta(18:fe:34:f8:8f:cf)
add if0
f 0, scandone
f 0,
<Time:2015-08-21 10:54:00:531 Len:0063>:scandone
(4,"Xiaomi_5BAB",-45,"8c:be:be:28:5b:ac",3)
f -240,
<Time:2015-08-21 10:54:00:578 Len:0026>:reconnect
scandone
f 0,
<Time:2015-08-21 10:54:02:703 Len:0010>:scandone
<Time:2015-08-21 10:54:03:656 Len:0109>:add 0
aid 4
pm open phy_2,type:2 0 0
cnt
connected with Xiaomi_5BAB, channel 3
dhcp client start...
<Time:2015-08-21 10:54:06:421 Len:0054>:ip:192.168.31.232,mask:255.255.255.0,gw:192.168.31.1
五、总结
that’s all.
ESP8266学习笔记6:ESP8266规范wifi连接操作的更多相关文章
- java 学习笔记之 流、文件的操作
ava 学习笔记之 流.文件的操作 对于一些基础的知识,这里不再过多的解释, 简单的文件查询过滤操作 package com.wfu.ch08; import java.io.File; import ...
- MongoDB学习笔记(2):数据库操作及CURD初步
MongoDB学习笔记(2):数据库操作及CURD 数据库操作 创建数据库 首先MongoDB中数据库的创建和数据库的切换都是使用命令,USE DATABASE,如果要切换的数据库不存在则会进行创建, ...
- 《深入Java虚拟机学习笔记》- 第8章 连接模型
Java虚拟机学习笔记(八)连接模型
- 学习笔记:暴力破解WIFI小软件
小弟 自己的学习笔记,做练习的 ,缺陷还很多,做到无法解决速度问题就不想做下去了,如果要看的话 主要是思路问题,获取句柄,控制句柄而已,代码比较简单.大神勿喷啊 破解DEMO源码:http://dow ...
- EF6学习笔记(四) 弹性连接及命令拦截调试
EF6学习笔记总目录:ASP.NET MVC5 及 EF6 学习笔记 - (目录整理) 本章原文地址:Connection Resiliency and Command Interception 原文 ...
- Android学习笔记(十六)——数据库操作(上)
//此系列博文是<第一行Android代码>的学习笔记,如有错漏,欢迎指正! Android 为了让我们能够更加方便地管理数据库,专门提供了一个 SQLiteOpenHelper帮助类, ...
- [Python学习笔记][第七章Python文件操作]
2016/1/30学习内容 第七章 Python文件操作 文本文件 文本文件存储的是常规字符串,通常每行以换行符'\n'结尾. 二进制文件 二进制文件把对象内容以字节串(bytes)进行存储,无法用笔 ...
- Spark学习笔记3:键值对操作
键值对RDD通常用来进行聚合计算,Spark为包含键值对类型的RDD提供了一些专有的操作.这些RDD被称为pair RDD.pair RDD提供了并行操作各个键或跨节点重新进行数据分组的操作接口. S ...
- ESP8266学习笔记1:怎样在安信可全功能測试板上实现ESP-01的编译下载和调试
近期调试用到了安信可的ESP-01模块,最终打通了编译下载调试的整个通道,有一些细节须要记录,方便兴许的开发工作. 转载请注明:http://blog.csdn.net/sadshen/article ...
随机推荐
- codeforces 360 B
B - Levko and Array 题目大意:给你你个长度为n的数列a,你最多改变k个值,max{ abs ( a[ i + 1] - a[ i ] ) } 的最小值为多少. 思路:这个题很难想到 ...
- ubuntu安装过程记录
[DNS修改] 新下载的ubuntu 17.04 安装后DNS是指向谷歌DNS的,谷歌被屏蔽啦,所以无法解析域名.解决办法: ctrl+alt+t 启动终端 : sudo su 输入管理員密碼,或去 ...
- Java实现打包下载BLOB字段中的文件
概述 web项目的文件打包下载实现:servlet接收请求,spring工具类访问数据库及简化大字段内容获取,org.apache.tools.zip打包. 必要提醒:当前总结是继Java实现下载BL ...
- 反编译apk 修改 合成
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 反编译apk帮助文档 准备工具 dex2jar(dex转换jar工具),下载地址: ht ...
- POJ 1740 A New Stone Game 又是博弈论配对找规律orz 博弈论 规律
http://poj.org/problem?id=1740 这个博弈一眼看上去很厉害很高大上让人情不自禁觉得自己不会写,结果又是找规律…… 博弈一般后手胜都比较麻烦,但是主要就是找和先手的对应关系, ...
- [Codeforces #174] Tutorial
Link: Codeforces #174 传送门 A: 求原根的个数,有一条性质是原根个数为$\phi(\phi(n))$,多了一个不会证的性质 如果要确定哪些是原根的话还是要枚举,不过对于每个数不 ...
- SD 一轮集训 day4 弦形袋鼠
可以发现把每一个 a[i] * b[i] 加到矩阵里去,就相当于 把一个 1*m 的向量伸缩后变成 n个再加到矩阵里去,所以答案就是远=原矩阵中线性线性无关组的个数. (而且好像一个矩阵横着消元和竖着 ...
- BZOJ 1116 [POI2008]CLO(并查集)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1116 [题目大意] Byteotia城市有n个towns,m条双向roads.每条ro ...
- 【二分查找】POJ2456-Aggressive cows
[题目大意] 有N间牛舍和M头牛,告诉你每个牛舍的位置,求出两头牛之间最小距离的最大值. [思路] 二分判断两头牛之间的最小距离d,通过贪心法进行验证. #include<iostream> ...
- bzoj 1233: [Usaco2009Open]干草堆tower
1233: [Usaco2009Open]干草堆tower Description 奶牛们讨厌黑暗. 为了调整牛棚顶的电灯的亮度,Bessie必须建一座干草堆使得她能够爬上去够到灯泡 .一共有N大包的 ...