ESP8266学习笔记(三)

上一次讲了ESP8266这块芯片的深度开发的准备工作和有关编译指导文件makefile的一些要点,那么这一次就来讲讲关于SDK的正式开发吧。

程序入口
app.png

首先,在工程文件夹下找到app文件夹,再打开user文件夹,如上图所示,从user文件夹中找到user_main.c这个文件,这就是我们程序的主程序了。打开文件,找到user_init(),这就是我们程序的入口函数了(SDK1.5版本以上的还有user_rf_pre_init()这个函数,不过我们的主程序还是在user_init()里面编辑就好,user_rf_pre_init()这个函数可以留空函数)。

串口设置

串口调试可以说是SDK开发的一个必要环节,只有通过串口通讯环节,我们才有了和芯片沟通的能力,所以串口设置是我比较推荐在user_init()里面最先编写的部分。下面是几个常用函数:

  • void uart_init(UartBautRate uart0_br, UartBautRate uart1_br)
    功能:双 uart 模式,两个 uart 波特率初始化;
    ESP8266有两个串口通道,第一个参数是uart0的波特率,第一个参数是uart1的波特率,芯片默认的波特率是78840,我建议是改成115200或者9600这两个使用率比较高的波特率,当然你用其他的波特率也可以,只要你所设置的和你的串口调试工具中的设置能对应起来就行。
  • void uart0_sendStr(const char *str)
    功能:通过 UART0 发送用户自定义数据;
    由于我用的是ESP8266-01的板,它默认引出来的串口就是uart0,所以我的串口打印数据就用这个函数,参数可以直接输入字符串,十分方便。

IO口设置

  • void gpio_output_set(uint32 set_mask, uint32 clear_mask, uint32 enable_mask,
    uint32 disable_mask)
    功能:设置 gpio 口属性
    例子:
    设置 GPIO12 输出高电平,则:gpio_output_set(BIT12, 0, BIT12, 0);
    设置 GPIO12 输出低电平,则:gpio_output_set(0, BIT12, BIT12, 0);
    设置 GPIO12 输出高电平,GPIO13 输出低电平,则:gpio_output_set(BIT12,BIT13, BIT12|BIT13, 0);
    设置 GPIO12 为输入,则 gpio_output_set(0, 0, 0, BIT12);
  • void gpio_pin_intr_state_set(uint32 i, GPIO_INT_TYPE intr_state)
    功能:设置 gpio 脚中断触发状态
    输入参数:
    uint32 i——GPIO 管脚 ID,如需设置 GPIO14,则为 GPIO_ID_PIN(14);
    GPIO_INT_TYPE intr_state——中断触发状态
    其中:
    typedef enum{
    GPIO_PIN_INTR_DISABLE = 0, (不触发中断)
    GPIO_PIN_INTR_POSEDGE= 1,(上升沿触发)
    GPIO_PIN_INTR_NEGEDGE= 2,(下降沿触发)
    GPIO_PIN_INTR_ANYEGDE=3,
    GPIO_PIN_INTR_LOLEVEL= 4, (低电平触发)
    GPIO_PIN_INTR_HILEVEL = 5,(高电平触发)
    }GPIO_INT_TYPE;
  • GPIO_OUTPUT_SET(gpio_no, bit_value)
    设置 gpio_no 管脚输出 bit_value,同上述例子中输出高低电平的功能。
  • GPIO_DIS_OUTPUT(gpio_no)
    设置 gpio_no 管脚为输入,同上述例子中输入。
  • GPIO_INPUT_GET(gpio_no)
    获取 gpio_no 管脚的电平状态。

例子

如果我们要使用GPIO12这个IO口,只需要配置以下几步
// Use MTDI pin as GPIO12.
PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U, FUNC_GPIO12);
//输出高电平
GPIO_OUTPUT_SET(FUNC_GPIO12, 1);
//配置输入
GPIO_DIS_OUTPUT(FUNC_GPIO12);
//获得GPIO电平
uin16 status=GPIO_INPUT_GET(FUNC_GPIO12);
//配置GPIO中断处理函数:
ETS_GPIO_INTR_ATTACH(func, arg)
使用方法:先定义一个GPIO中断处理函数,arg如果没有参数直接输入NULL
void GPIO_INTER(void)
{
......//这一部分可以加入自己想要响应中断的函数;
在 GPIO 中断处理函数内,需要做如下操作来清除响应位的中断状态:
uint32 gpio_status;
gpio_status = GPIO_REG_READ(GPIO_STATUS_ADDRESS);
//clear interrupt status
GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS, gpio_status);
}
ETS_GPIO_INTR_ATTACH(GPIO_INTER, NULL); //注册 GPIO 中断处理函数

WIFI设置

由于ESP8266是一块wifi芯片,所以wifi的配置是少不了的。
芯片的wifi工作模式有以下三种:

  1. STATION_MODE(客户端模式,也就是主动去连接路由器)
  2. SOFTAP_MODE(服务器模式,也就是可以充当路由器,等其他设备连接)
  3. STATIONAP_MODE(主从一体模式,也就是俗称的wifi中继功能)

常用的函数是下列几个:

  • wifi_get_opmode(void)
    功能:获取 wifi 工作模式;
    wifi 工作模式,其中 0x01 时为 STATION_MODE,0x02 时为 SOFTAP_MODE,
    0x03 时为 STATIONAP_MODE。
  • wifi_set_opmode(uint8 opmode)
    功能:设置 wifi 工作模式为 STATION、SOFTAP、STATION+SOFTAP
    其中 STATION_MODE 为 0x01,SOFTAP_MODE 为 0x02,STATIONAP_MODE 为0x03。
  • wifi_station_set_config(struct station_config *config)
    功能:设置 wifi 的 station 接口参数。
    其中,参数中结构体定义如下:
    struct station_config {
    uint8 ssid[32];
    uint8 password[64];
    };

以下为wifi配置的例子,只需修改SSID和PASSWORD即可工作:

<pre><code>user_set_station_config(void)
{

// Wifi configuration 

char ssid[32] = SSID;   //SSID为输入的你的路由名称

char password[64] = PASSWORD;  //PASSWORD为输入的wifi密码

struct station_config stationConf; 

//need not mac address
stationConf.bssid_set = 0; 

//Set ap settings 

os_memcpy(&stationConf.ssid, ssid, 32); 

os_memcpy(&stationConf.password, password, 64); 

wifi_station_set_config(&stationConf); 

//set a timer to check whether got ip from router succeed or not.

os_timer_disarm(&client_timer);

os_timer_setfn(&client_timer, (os_timer_func_t *)user_check_ip, NULL);

os_timer_arm(&client_timer, 100, 0);

}</pre></code>
在user_init()中:
<pre><code>void user_init(void)
{

//Set uart port

uart_init(115200,9600);
os_printf("SDK version:%s\n", system_get_sdk_version());

//Set station mode 
wifi_set_opmode(STATION_MODE); 

//ESP8266 connect to router
user_set_station_config();

}</pre></code>

总结

通过今天的介绍,大家应该已经了解了SDK的基础工作函数了,而我们的ESP8266已经可以顺利地连上路由器了,当然连上路由器仅仅是基础,关于后续的网络通讯开发我们下次再叙。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容

  • 其实这篇文章主要是介绍自己为其写的GPIO库,自己借鉴了原子写的STM32,野火写的K60,还有LPC官方库,然后...
    杨奉武阅读 695评论 0 0
  • 有一次做一个东西,为了尽量不占用CPU的处理数据时间,所以就使用DMA接收串口的数据,但是呢问题来了.,,,,,怎...
    杨奉武阅读 3,015评论 0 1
  • 整体思路ESP8266作为TCP服务器,,手机作为TCP客户端,自己使用Lua直接做到了芯片里面,省了单片机,,节...
    杨奉武阅读 5,699评论 0 5
  • 重点是说SPI通信协议,,,, 不要害怕协议因为协议是人规定的,,刚好我也是人......规定的协议既然能成为规范...
    杨奉武阅读 932评论 0 1
  • 等 等人 等车 在等的时间里 时间就这么毫无意义地过去了 不知道一辈子下来得花多少时间在等上
    卫松阅读 95评论 0 0