esp8266 sdk 学习笔记

安装编译环境

编译器的安装根据官方文档使用virtualBox虚拟机镜像,下载个ESP8266_lubuntu_20141021.ova的文件然后使用virtualBox导入即可使用,不需要自己折腾。

下载sdk,在官网下载了最新的esp8266_nonos_sdk_v2.0.0sdk,解压,顶层目录结构这样子:

├─bin
├─documents
├─driver_lib
├─examples
├─include
├─ld
├─lib
└─tools

这里讲一下3个目录
bin: 编译后生成的固件会在这个目录里。
driver_lib: 外围设备驱动,例如uart。
examples: 示例代码,通常自定义开发我都是在里面找一个简单的copy出来删除不需要的逻辑。

Hello world 开始

根据传统,在sdk的根目录下新建一个名字叫app的目录,实际上这个目录任何命名都是可以的,在examples目录里找一个smart_config的目录,把目录里的文件全部拷贝到app目录下,或者把smart_config目录拷贝到根目录,然后重新命名为app:
-app
├─include
├─user
├─gen_misc.bat
├─gen_misc.sh
├─Makefile

编辑app/user/user_main.c文件,删去不需要的代码,保留3个函数

user_rf_cal_sector_set
: 保留该函数和函数的内容,这个函数是必备的。

user_rf_pre_init
: 改函数也是必备的,不过空着它就行了。

user_init
: 这个是用户程序的入口,也是必备的,它就像arduino·中的setup函数一样。

第一个例子是hello world,要在串口输出“hello world”。

首先引入外围驱动的uart.h 库文件,它在driver_lib目录里,找到uart.cuart.h两个文件,把’uart.h‘文件复制到app/include目录下,把uart.c文件复制到app/user/目录下。

编辑user_init文件,引入头文件:

#include “osapi.h”

#include “driver/uart.h”

#include “user_interface.h”

user_init函数里,设定uart的波特率

1
2
> uart_init(115200,115200);
> os_printf("\nHello World\n");

命令行进入app目录下运行gen_misc.sh脚本,然后有5步选择,我前4步都是默认回车,第五步选择4,如果顺利,最后应该显示这样子:
!!!
No boot needed.
Generate eagle.flash.bin and eagle.irom0text.bin successully in folder bin.
eagle.flash.bin——–>0x00000
eagle.irom0text.bin—->0x10000
!!!

下载程序到板子

烧录的程序使用的是FLASH_DOWNLOAD_TOOLS_V3.3.4_Win 这个官方程序,首次下载需要4个bin文件,这些文件都在bin目录下
esp_init_data_default.bin
: 根据esp8266-sdk-getting_started_guide_cn.pdf 中第4.1.2节中的下载地址,选择“0x3FC000”

blank.bin
: 选择“0x3FE000”
eagle.flash.bin
: 选择“0x00000”
eagle.irom0text.bin
: 选择“0x10000”

记得勾选每行前面的复选框,这样才会下载该内容到板子上。

软件定时器使用

定义一个定时器

1
> os_timer_t myTimer;

定义定时器回调函数

1
2
3
4
void ICACHE_FLASH_ATTR
myTimer_Tick(){
os_printf("hello\n");
}

最后就是定义这个定时器

1
2
3
os_timer_disarm(&myTimer);//在设置定时器之前,应该使其停止运行
os_timer_setfn(&myTimer,&myTimer_Tick,NULL);//设置该定时器的回调函数为myTimer_Tick
os_timer_arm(&myTimer,3000,TRUE);//设置定时器的周期是3秒,并且是循环调用