前面一篇博客记录了如何一步一步搭建ESP8266的nonos-sdk 3.0的开发环境,并且测试了开发环境能够正常使用。既然环境已经搭建完成,那么后面接着就要正式进入ESP8266的学习和动手开发小项目了。众所周知,不管是什么类型的单片机,对其上手的第一步当然是"庄重"点灯仪式了。本篇博客主要记录的就是实现如何使用串口打印"Hello world"以及使用按钮控制LED灯的亮灭。
参考资料
既然要学习和使用ESP8266,那么官方的各种参考手册自不必多说:
- 乐鑫官方《ESP8266 Non-OS SDK API 参考》(主要参考)
- 乐鑫官方《ESP8266 SDK 入门指南》(介绍8266和SDK的相关使用方法,包括编译前的准备、SDK 的编译和固件的下载)
- 乐鑫官方《ESP8266 管脚清单》(进行GPIO等外设编程时会用到)
- SDK中包含的各种文档,.txt和.md后缀的。(这些文档也很重要,后面会发现)
注册Flash分区表
官方SDK的文档中提到,NONOS-SDK 3.0中新增了partition table(我的理解就是Flash的布局分区表):
相关说明
SDK参考手册中的介绍:
因为目前我使用的是不带在线固件升级的Flash布局方案,即Non-FOTA的Flash 布局方案,所以我们要按照对应的说明修改代码。
以上一篇博客为基础,位于:工程目录/IoT_demo/user/user_main.c 的C源码文件包含了ESP8266 Non-OS SDK项目的程序入口函数user_init(),后面我们修改和编写程序主要在这个文件中进行。官方提供的IoT_Demo的user_main.c的代码如下:
我把代码文件开头部分的那段文档注释删了
#include "ets_sys.h"
#include "osapi.h"
#include "user_interface.h"
#include "user_devicefind.h"
#include "user_webserver.h"
#if ESP_PLATFORM
#include "user_esp_platform.h"
#endif
#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