ESP8266可以说真的是越用越爱(我不是打广告,我只是一个技术小白……)
同前面几篇博客,假设已经懂了ESP8266 NONOS SDK的基本开发环境和工程架构
环境:ESP8266-07,ESP8266_NONOS_SDK_V1.2
这次介绍一下ESP8266的smartconfig功能和flash读写的功能。
一、简单介绍
1)smartconfig
SmartConfig用于设置WiFi,由于ESP8266没有人机交互的方法,于是AiThinker提供了SmartConfig接口能用于配置WiFi。
大致原理是:
1、手机向局域网广播特殊的数据包,包括WiFi的SSID、密码等。
2、ESP8266开启混杂模式,抓到这个数据包随后就可以连接WiFi了。
3、连接成功后又会向指定端口发送数据包,手机就可以抓到这个包从而知道ESP8266已成功连接。
2)flash
ESP8266自带flash的读写控制器,这个使用很简单,唯一要注意的几点
1、一个扇区(sector)为 4KB,从扇区 0 开始计数,读写必须 4 字节对齐。
2、flash需要先擦除才能写。
3、读写的位置不能和程序冲突。
二、程序
先看看工程目录
1)、SmartConfig的使用非常简单
1.先看看工程目录
除了用上了UART的驱动外,最主要是我们还添加了smartconfig的库
2.要注意添加这个smartconfig的库,然后需要在app的makefile中LINKFLAGS_eagle.app.v6这一项添加一行,表示编译时需要用到这个库
(ESP对于smartconfig并非开源)
3.然后在需要用到smartconfig接口的文件中包含
#include "smartconfig.h" 就可以使用了
剩下的在编程手册中示例已经非常清楚了
首先初始化我们只需要初始化一下串口、以及把ESP8266 设置为AP模式即可
void user_init() { uart_init(115200,115200); wifi_set_opmode(0x01); system_init_done_cb(done_cb1); }
然后用上手册上的回调函数的例子
void ICACHE_FLASH_ATTR smartconfig_done(sc_status status, void *pdata) { switch(status) { case SC_STATUS_WAIT: os_printf("SC_STATUS_WAIT\n"); break; case SC_STATUS_FIND_CHANNEL: os_printf("SC_STATUS_FIND_CHANNEL\n"); break; case SC_STATUS_GETTING_SSID_PSWD: os_printf("SC_STATUS_GETTING_SSID_PSWD\n"); sc_type *type = pdata; if (*type == SC_TYPE_ESPTOUCH) { os_printf("SC_TYPE:SC_TYPE_ESPTOUCH\n"); } else { os_printf("SC_TYPE:SC_TYPE_AIRKISS\n"); } break; case SC_STATUS_LINK: os_printf("SC_STATUS_LINK\n"); struct station_config *sta_conf = pdata; wifi_station_set_config(sta_conf); wifi_station_disconnect(); wifi_station_connect(); break; case SC_STATUS_LINK_OVER: os_printf("SC_STATUS_LINK_OVER\n"); if (pdata != NULL) { uint8 phone_ip[4] = {0}; os_memcpy(phone_ip, (uint8*)pdata, 4); os_printf("Phone ip: %d.%d.%d.%d\n",phone_ip[0],phone_ip[1],phone_ip[2],phone_ip[3]); } smartconfig_stop(); break; } }
2)、flash的读写
这个也很简单,23333
几个函数使用的示例
spi_flash_erase_sector(ADDR_MYCONF); spi_flash_write(ADDR_MYCONF*4096,(uint32 *)&my_config,sizeof(struct my_conf)); spi_flash_read(ADDR_MYCONF*4096,(uint32 *)&my_config,sizeof(struct my_conf));
擦除是按扇区来算的,而读写却是用的真实地址,所以要乘上4KB。
地址最好加一个强制转换,恩,就这么多了。
三、Smartconfig/AirKiss使用
1)关注安信可官方微信公众号AiThinker_Technology
2)进入公众号可见WiFi按钮,进入设置WiFi
3)此时手机应先连上想要模块连上的WiFi,输入密码后点击连接
参考资料:
ESP8266 SDK 编程手册.pdf
99a-esp8266_flash_rw_operation_cn_v1.0.pdf