【ESP8266】NONOS SDK开发, smartconfigAirKiss与flash读写

    xiaoxiao2021-04-15  37

    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

    转载请注明原文地址: https://ju.6miu.com/read-671269.html

    最新回复(0)