概念解析:
smartconfig就是:
- wifi模块通电,没有可用的wifi, 进入混杂模式, 开始监听信号覆盖范围内的所有wifi数据帧
- 手机APP端发送包含WIFI 用户名 WIFI密码的 UDP 广播包或者组播包,
- 智能终端的WIFI芯片可以接收到该UDP包,只要知道UDP的组织形式,就可以通过接收到的UDP包解密出WIFI 用户名 密码
- 然后智能硬件配置收到的WIFI 用户名 密码到指定的WIFI AP 上。
微信联网
思路
-
初始化内存分区
-
打印SDK版本
-
设置快连模式的协议类型
SC_TYPE_ESPTOUCH,SC_TYPE_AIRKISS,SC_TYPE_ESPTOUCH_AIRKISS -
设置WIFI模式 0x01station模式 0x02 soft-AP模式 0x03 station+soft-AP模式
-
开启快连模式(快速连接ESP8266 station到AP
ESP8266抓取空中特殊的数据包,包含目标AP的SSID和PASSWORD信息,同时,用户需要通过手机或者电脑广播加密的SSID和PASSWORD信息) -
smartconfig_done回调函数,根据快连模式返回值 决定回调函数的case(等候,密码,通道,判断类型,是否结束)
-
airkiss_start_discover()
/注册成功接收网络数据的回掉函数,微信开始发现,先执行airkiss_wifilan_recv_callbk(//发现内网,并接受微信发的UDP数据包。解析,打印响应UDP,发送UDP到password端口) -
airkiss_wifilan_time_callback定时器回调函数
和airkiss_wifilan_recv_callbk类似,相当于每隔一段时间更新信息
代码
#include "ets_sys.h"
#include "osapi.h"
#include "ip_addr.h"
#include "espconn.h"
#include "mem.h"
#include "user_interface.h"
#include "smartconfig.h"
#include "airkiss.h"
#define DEVICE_TYPE "gh_9e2cff3dfa51" //wechat public number
#define DEVICE_ID "122475" //model ID
#define DEFAULT_LAN_PORT 12476
#if ((SPI_FLASH_SIZE_MAP == 0) || (SPI_FLASH_SIZE_MAP == 1))
#error "The flash map is not supported"
#elif (SPI_FLASH_SIZE_MAP == 2)
#define SYSTEM_PARTITION_OTA_SIZE 0x6A000
#define SYSTEM_PARTITION_OTA_2_ADDR 0x81000
#define SYSTEM_PARTITION_RF_CAL_ADDR 0xfb000
#define SYSTEM_PARTITION_PHY_DATA_ADDR 0xfc000
#define SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR 0xfd000