目录
目录
一、所需器件工具
1.ESP8266开发板。模块购买链接
二、下载AiThinkerIDE_V1.5.2 IDE
下载链接:https://docs.ai-thinker.com/tools
三、安装AiThinkerIDE_V1.5.2 IDE
双击AiThinkerIDE_V1.5.2 IDE.exe开始安装,安装路径不要含有中文,最好是默认路径。
环境依赖的是 python2.7 环境,IDE已经自带了python2.7的环境的,如果你电脑有py3的环境,建议卸载或共存处理,自此AiThinkerIDE安装完成。
四、IDE配置编译环境
查看系统变量是否加入成功,没有则需要自己手动配置。右键电脑 -> “属性” -> “高级系统设置” -> “环境变量” -> “新建...”。
五、下载NONOS_SDK
本项目是基于乐鑫的无操作系统ESP8266_NONOS_SDK-3.0.5开发包继续二次开发,下载地址:https://github.com/espressif/ESP8266_NONOS_SDK/releases。对下载的zip压缩包解压即可。
六、创建工程模板
1、在电脑的 D盘根目录创建 SDK 文件夹,把解压后的“ ESP8266_NONOS_SDK-3.0.5 ”文件复制到 D:\SDK文件夹中。
2、ESP8266的NONOS_SDK采用了SDK和工程文件夹分离的方式,所以我们需要手动创建一个app目录。将D:\SDK\ESP8266_NONOS_SDK-3.0.5目录下的 driver_lib 重命名为 app。
3、复制D:\SDK\ESP8266_NONOS_SDK-3.0.5\examples\IoT_Demo下的所有文件到上面重命名的 app目录(复制过来,直接替换覆盖即可,不需要删除app里面原有的文件)。
4、把D:\SDK\ESP8266_NONOS_SDK-3.0.5\third_party下的Makefile文件改为Makefile.bak。
5、打开AiThinkerIDE,设置路径为SDK目录。
右键单击导入项目。
点击Finish导入项目,如下 :
项目名上右键选择Properties配置工程,如下:
选择C/C++ Build->Build command中添加编译规则(make COMPILE=gcc BOOT=none APP=0 SPI_SPEED=40 SPI_MODE=DIO SPI_SIZE_MAP=4),可以根据实际情况来更改规则,点击OK退出。
项目名上右键Clean Project清除工程缓存,如下:
项目名上右键Build Project编译工程,如下:
编译成功,则表示创建工程完成,如下:
七、修改工程文件
删除对于我们无关文件,后续工程基于此模板进行开发。
1. user文件夹
user文件夹我们只保留user_main.c,Makefile文件,其余全部删除,结果如下:
2. include文件夹
include文件夹只保留driver文件夹以及user_config.h文件,其余全部删除,结果如下:
3. user_config.h文件
清空user_config文件内容,只保留头文件的声明,最终如下:
4.修改user_main.c文件
user_main.c文件(相当于main函数),最终代码如下:
#include "ets_sys.h"
#include "osapi.h"
#include "user_interface.h"
#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
#define SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM_ADDR 0x7c000
#elif (SPI_FLASH_SIZE_MAP == 3)
#define SYSTEM_PARTITION_OTA_SIZE 0x6A000
#define SYSTEM_PARTITION_OTA_2_ADDR 0x81000
#define SYSTEM_PARTITION_RF_CAL_ADDR 0x1fb000
#define SYSTEM_PARTITION_PHY_DATA_ADDR 0x1fc000
#define SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR 0x1fd000
#define SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM_ADDR 0x7c000
#elif (SPI_FLASH_SIZE_MAP == 4)
#define SYSTEM_PARTITION_OTA_SIZE 0x6A000
#define SYSTEM_PARTITION_OTA_2_ADDR 0x81000
#define SYSTEM_PARTITION_RF_CAL_ADDR 0x3fb000
#define SYSTEM_PARTITION_PHY_DATA_ADDR 0x3fc000
#define SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR 0x3fd000
#define SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM_ADDR 0x7c000
#elif (SPI_FLASH_SIZE_MAP == 5)
#define SYSTEM_PARTITION_OTA_SIZE 0x6A000
#define SYSTEM_PARTITION_OTA_2_ADDR 0x101000
#define SYSTEM_PARTITION_RF_CAL_ADDR 0x1fb000
#define SYSTEM_PARTITION_PHY_DATA_ADDR 0x1fc000
#define SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR 0x1fd000
#define SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM_ADDR 0xfc000
#elif (SPI_FLASH_SIZE_MAP == 6)
#define SYSTEM_PARTITION_OTA_SIZE 0x6A000
#define SYSTEM_PARTITION_OTA_2_ADDR 0x101000
#define SYSTEM_PARTITION_RF_CAL_ADDR 0x3fb000
#define SYSTEM_PARTITION_PHY_DATA_ADDR 0x3fc000
#define SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR 0x3fd000
#define SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM_ADDR 0xfc000
#else
#error "The flash map is not supported"
#endif
#define SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM SYSTEM_PARTITION_CUSTOMER_BEGIN
uint32 priv_param_start_sec;
static const partition_item_t at_partition_table[] = {
{ SYSTEM_PARTITION_BOOTLOADER, 0x0, 0x1000},
{ SYSTEM_PARTITION_OTA_1, 0x1000, SYSTEM_PARTITION_OTA_SIZE},
{ SYSTEM_PARTITION_OTA_2, SYSTEM_PARTITION_OTA_2_ADDR, SYSTEM_PARTITION_OTA_SIZE},
{ SYSTEM_PARTITION_RF_CAL, SYSTEM_PARTITION_RF_CAL_ADDR, 0x1000},
{ SYSTEM_PARTITION_PHY_DATA, SYSTEM_PARTITION_PHY_DATA_ADDR, 0x1000},
{ SYSTEM_PARTITION_SYSTEM_PARAMETER, SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR, 0x3000},
{ SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM, SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM_ADDR, 0x1000},
};
void ICACHE_FLASH_ATTR user_pre_init(void)
{
if(!system_partition_table_regist(at_partition_table, sizeof(at_partition_table)/sizeof(at_partition_table[0]),SPI_FLASH_SIZE_MAP)) {
os_printf("system_partition_table_regist fail\r\n");
while(1);
}
}
/******************************************************************************
* FunctionName : user_init
* Description : entry of user application, init user function here
* Parameters : none
* Returns : none
*******************************************************************************/
void ICACHE_FLASH_ATTR
user_init(void){
while(1){
os_printf("\r\n Hello \r\n");
system_soft_wdt_feed();//喂狗
os_delay_us(65000);//延时函数。
}
}
八、AiThinkerIDE常规设置
1.修改文件编码格式为UTF-8
Window->Preferences->General->Workspace->Text file encoding:修改文件编码为UTF-8。
2.修改代码编辑字体
Window->Preferences->General->Appearance->Colors and Fonts->Basic->Text Font:修改为自己喜欢的字体。
3.其他设置
九、烧写程序设置
1、ESP8266硬件连接图
烧录接线图,如下所示:
2、确定Flash大小
首先需要确定我们买的模块的Flash的大小。例如我买的是安信可的 ESP-12F 无线(模块链接:https://docs.ai-thinker.com/esp8266),它的Flash的大小为 32M(bit),然后换成 字节(Byte) 则需要除以8,最终Flash的大小为 4M 。
由此我们选择4096KB(4096KB/1024 = 4M)的对应地址进行烧录,与后面烧录软件(flash_download_tool)设置的地址对应。
3、烧录软件的配置
首先我们需要烧写软件flash_download_tool的下载链接:https://docs.ai-thinker.com/_media/flash_download_tool_v3.8.5_1.zip。
烧录软件flash_download_tool配置好则可以对程序进行烧录,如下所示:
4、烧录成功串口显示
串口调试工具aithinker_serial_tool下载链接:https://docs.ai-thinker.com/_media/tools/aithinker_serial_tool_v1.2.3.7z。模块默认的波特率为:74880。通过串口调试工具可以看到效果,如下所示: