ESP8266 SDK 编程入门 03-程序篇

上一篇基础篇简单介绍了ESP8266模块固件刷写的方法,我觉得写的还是比较清楚的,大家应该都能看明白,既然已经知道怎么刷写固件了,那这一节就来学学SKD开发的一些基础,所谓“师傅领进门,修行靠各人”,本人也是一个初学者,这里把自己所学跟大家交流分享一下,菜鸟间的交流有时大家还比较容易接受,那现在就开始本章的学习吧。

首先本文用到的相关工具如下,请自行下载

ESP8266 IDE2.0 http://pan.baidu.com/s/1c21PJMw

ESP8266 固件官方刷写工具 http://espressif.com/en/support/download/other-tools?keys=&field_type_tid%5B%5D=14

USR-TCP232 http://pan.baidu.com/s/1gfMfHQz

开发参考文档地址 http://espressif.com/zh-hans/support/download/overview?keys=&field_type_tid%5B%5D=14

这里使用安可信的ESP8266 IDE2.0集成开发环境来讲解SDK程序的开发与刷写,开发工具的使用大家可参考《ESP8266 SDK 编程入门 02-开发工具篇》,上一篇文章中已经简单介绍了开发工具的使用及基本的代码框架,下面就通过使用ESP8266控制LED灯来介绍如何进行SDK开发。


我们再来回顾一下ESP8266-01的模块针脚图,这里的GPIO0和GPIO2是可以当作普通的IO针脚来使用的,现在我们就使用GPIO2来控制LED灯亮一秒灭一秒。首先先把代码粘出来给大家看,回头再详细讲解代码。

#include "ets_sys.h"
#include "gpio.h"
#include "osapi.h"
#include "os_type.h"
#include "user_interface.h"
#include "espconn.h"

LOCAL os_timer_t timer;
char zt = 1;

void timer_callback(){
	if(zt == 1){
		GPIO_OUTPUT_SET(GPIO_ID_PIN(2), 0);
		zt = 0;
	}else{
		GPIO_OUTPUT_SET(GPIO_ID_PIN(2), 1);
		zt = 1;
	}
}

void user_init(void)
{
	 //os_printf("SDK version:%s\n", system_get_sdk_version());
	 PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO2);

	 os_timer_disarm(&timer);
	 os_timer_setfn(&timer,(os_timer_func_t *)timer_callback,NULL);
	 os_timer_arm(&timer,1000,1);


}

void user_rf_pre_init(){}

首先说一下原理,这里不能使用一般C语言的死循环的方式来实现,而是需要使用定时器来实现,定时器和针脚控制可参考《ESP8266_SDK_API编程手册_CN_v1.5.2》,下面我来简单解释一下程序代码。

这个程序里面涉及到的函数有三个,user_init()是入口函数,相当于main函数,user_rf_pre_init()是SDK1.1.0及之后版本需要增加的函数,暂时没啥用,timer_callback()是一个回调函数,下面的定时器会用到。

首先定义一个定时器函数和一个状态变量,用于判断LED灯的状态

LOCAL os_timer_t timer;
char zt = 1;
首先入口函数中选择GPIO2管脚

PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO2);
然后定义定时器,语法可参考编程手册,里面说的都很详细了

os_timer_disarm(&timer);
os_timer_setfn(&timer,(os_timer_func_t *)timer_callback,NULL);
os_timer_arm(&timer,1000,1);

os_timer_setfn(&timer,(os_timer_func_t *)timer_callback,NULL);timer_callback就是自己的那个回调函数,GPIO_OUTPUT_SET(GPIO_ID_PIN(2), 0);这句的意思就是GPIO2输出低电平,1为高电平,其它的口类似,具体的语法解释也可以参考编程手册,都有详细说明。

程序写好后Clean一下项目再编译一下生成0x00000.bin和0x40000.bin,按照基础篇的教程将这两个文件刷进模块,记住这里只要刷两个文件就可以了,所以刷写的时候只要勾选这两个文件前面的复选框,固件刷进去后断电重新加电模块开始工作。


**********注意*********

这里有一点问题要跟大家重点说一下,就因为这个小问题折腾了我好几天,差点被逼疯,就是led的接法,由于硬件是半路出家,模块的GPIO2口是内部上拉的,模块启动过后是高电平,一开始我是将LED接到GPIO2和GND之间,一加电GPIO2就被下拉了,导致模块无法正常启动,老是出问题,一直不知道原因,折腾老半天,还好得到网友指点,才解决了这个问题。这里接线一定要将LED接到VCC和GPIO2之间,这样加电模块才能正常工作,所以前面的代码中GPIO_OUTPUT_SET(GPIO_ID_PIN(2), 0)这句是输出低电平,但LED反倒是亮的,切记切记.......最后祝大家玩得开心



猜你喜欢

转载自blog.csdn.net/jackhuang2015/article/details/50839401