【ESP8266】NONOS SDK开发, smartconfig/AirKiss与flash读写

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/d521000121/article/details/70163515

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


展开阅读全文

没有更多推荐了,返回首页