前言
ESP8266是一款串口WiFi模块,内部集成MCU能实现单片机之间串口同信;这款模块简单易学,体积小,便于嵌入式开发。
ESP8266的编程方式可以用官方的SDK编写,也可以用Arduino编写。各有各自的优点。如需查看Arduino搭建8266的开发环境可前往Arduino搭建ESP8266开发环境
首先我们前前往安信可8266系列模组专题:安信可
在这里有许多ESP8266的资料以及固件包:
同时提供了SDK开发环境搭建的资料,本次是使用Win10平台SDK NONOS 3.0对ESP8266对mcu进行二次开发!
下载好安信可提供的AiThinkerIDE_V0.5后解压到自己的安装位置,我这里安装到D盘。
解压出来后我们对软件的环境进行配置!
双击ConfigTool.exe
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200901140147814.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2R3aDEzMTQ=,size_16,color_FFFFFF,t_70#pic_center
环境配置好之后我们打开AiThinker_IDE软件
打开后界面如图所示!
下面我们开始移植一个DEMO
首先我们需要提前下载好SDK
在安信可里面有gitee的仓库可前往下载,或者通过我提供的连接下载:https://gitee.com/xuhongv/ESP8266_NONOS_SDK
SDK目录如图所示
下面我们开始移植
新建一个工程的文件夹把所有文件复制过来!
我们把以IOT_Demo为例将IoT_Demo里面的文件全部复制到driver_lib下
并且覆盖掉之前的文件。
接下来我们可以删除掉一些不需要的东西
third_party、examples这两个目录可以删掉了
third_party是一些第三方提供的库,我们本次例程没有用到,先删掉,examples是一些Demo我们也不需要。
下面我们打开该工程,选择Import导入工程
选择Makefile工程
点击Browse选择刚才移植好的工程然后按照下面选好
最后导入如图所示。
编译导入的工程
在编译之前我们需要clean project
然后我们编译项目,我们会发现报错了!
user_main.c:38:2: error: #error "The flash map is not supported"
#error "The flash map is not supported"
^
DEPEND: xt-xcc -M -Os -g -Wpointer-arith -Wundef -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -ffunction-sections -fdata-sections -fno-builtin-printf -fno-guess-branch-probability -freorder-blocks-and-partition -fno-cse-follow-jumps -DICACHE_FLASH -DSPI_FLASH_SIZE_MAP=0 -I include -I ./ -I ../../include/ets -I ../include -I ../../include -I ../../include/eagle -I ../../driver_lib/include user_json.c
DEPEND: xt-xcc -M -Os -g -Wpointer-arith -Wundef -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -ffunction-sections -fdata-sections -fno-builtin-printf -fno-guess-branch-probability -freorder-blocks-and-partition -fno-cse-follow-jumps -DICACHE_FLASH -DSPI_FLASH_SIZE_MAP=0 -I include -I ./ -I ../../include/ets -I ../include -I ../../include -I ../../include/eagle -I ../../driver_lib/include user_light_adj.c
DEPEND: xt-xcc -M -Os -g -Wpointer-arith -Wundef -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -ffunction-sections -fdata-sections -fno-builtin-printf -fno-guess-branch-probability -freorder-blocks-and-partition -fno-cse-follow-jumps -DICACHE_FLASH -DSPI_FLASH_SIZE_MAP=0 -I include -I ./ -I ../../include/ets -I ../include -I ../../include -I ../../include/eagle -I ../../driver_lib/include user_webserver.c
DEPEND: xt-xcc -M -Os -g -Wpointer-arith -Wundef -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -ffunction-sections -fdata-sections -fno-builtin-printf -fno-guess-branch-probability -freorder-blocks-and-partition -fno-cse-follow-jumps -DICACHE_FLASH -DSPI_FLASH_SIZE_MAP=0 -I include -I ./ -I ../../include/ets -I ../include -I ../../include -I ../../include/eagle -I ../../driver_lib/include user_esp_platform_timer.c
DEPEND: xt-xcc -M -Os -g -Wpointer-arith -Wundef -Wl,-EL -fno-inline-functions -nostdlib -mlongcalls -mtext-section-literals -ffunction-sections -fdata-sections -fno-builtin-printf -fno-guess-branch-probability -freorder-blocks-and-partition -fno-cse-follow-jumps -DICACHE_FLASH -DSPI_FLASH_SIZE_MAP=0 -I include -I ./ -I ../../include/ets -I ../include -I ../../include -I ../../include/eagle -I ../../driver_lib/include user_main.c
user_main.c:38:2: error: #error "The flash map is not supported"
#error "The flash map is not supported"
^
这时候我们需要修改顶层Makefile里面的第25行左右。
将SPI_SIZE_MAP?=0修改为
SPI_SIZE_MAP?=4
最后记得保存
然后clean project 再编译工程
当控制台出现上图所示内容表示编译成功。
下面我们点亮Esp8266板载上的LED,同时串口打印出SDK版本。
我们打开driver_lib>user>user_main.c文件
找到这个函数,将其清空,开始写我们的程序
修改成如下:
/**
* 延时函数
*/
void ICACHE_FLASH_ATTR delay_ms(u32 C_time)
{ for(;C_time>0;C_time--)
os_delay_us(1000);
}
void ICACHE_FLASH_ATTR
user_init(void)
{
u8 F_LED = 0 ; // LED状态标志位
uart_init(115200,115200); // 初始化串口波特率
os_delay_us(10000); // 等待串口稳定
os_printf("\t MY DEMO PROJECT\r\n");
os_printf("\t SDK version:\t%s", system_get_sdk_version());
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_GPIO2); // GPIO2设为IO口
//--------------------------------------------------------------------------
GPIO_OUTPUT_SET(GPIO_ID_PIN(2),1); // IO2 = 1(高电平)
while(1)
{
system_soft_wdt_feed(); // 喂狗,防止复位
F_LED = !F_LED; // LED状态值翻转
GPIO_OUTPUT_SET(GPIO_ID_PIN(2),F_LED); // 设置LED(IO2)输出值
delay_ms(500); // 延时500Ms
}
}
需要注意的是void ICACHE_FLASH_ATTR user_pre_init(void)需要对地址进行注册,这也是和2.x版本不一样的地方,否则模块会重启,切勿踩坑!
在SDK API开发文档也有详细的介绍!
最后保存!
先clean project 再编译工程。
下面我们开始烧写刚才编译的固件
我们打开烧写软件ESPFlashDownloadTool_v3.6.2.2
该软件在安信可的官网可以下载,或者也可以在我提供的链接下载。
然后会弹出一个框,我们选择ESP8266
固件在bin目录下
把固件加载到软件上并设置好地址,
下载说明在安信可资料里面有详细说明,感兴趣的可前往了解。
选择好串口端口后点击START下载。
下载成功。
串口助手成功打印数据!
LED也开始闪烁
需要该软件可以关注公众号:智慧小巷
回复:8266
即可!
感谢阅读!