收藏官网首页
查看: 28423|回复: 6

【SoC】ESP8266之SDK开发教程

7

主题

92

帖子

1587

积分

金牌会员

Rank: 6Rank: 6

积分
1587
跳转到指定楼层
楼主
发表于 2017-6-23 12:12:07 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
汉枫LPB120模块
本帖最后由 iDea 于 2017-7-4 10:25 编辑

最近想做一个控制灯开关和感应开门的东西给自己用。由于功能比较简单,如果再用MCU+esp8266的方法,第一、成本太高,因为STM32的芯片你要么要打板才能把LQFP-48的芯片放下,要么花20块钱买一个最小系统板。第二、体积过大,你放一个STM32的最小系统板在狭小的插座里也不现实。ESP8266本身可以编程,而且现在也提供了SoC版的自动生成代码,这样就变得非常简单了。下面开始说一下ESP8266的SDK是怎么用的,因为官方也没有提供这方面的资料,用的是乐鑫原本的API,而文档本身又有好多地方没有说清楚。怪不得这么多人用NodeMCU。
首先,我们要把编译环境给搭建起来,详细的过程,机智云在文档中心里面写得很清楚:点击查看,我这里就不做过多的讲解。输入下面命令:
  1. ./xtensa-lx106-elf-gcc -v
复制代码

如果没有报错,像我这样就是安装gcc成功了:

下面你还要修改./bashrc这个文件,把这个路径添加到环境变量,这里就不做讲解,可自行百度。
接下来说一些重要的事情,就是怎么操作GPIO的问题,你们可以在ESP8266的板子上看到GPIOx的丝印,但是那可能不是他真正的引脚名称。下面我在官方找到了一个引脚对应图,下面写程序会用到。附件放在后面:

我们查看官方的例程也可以知道,GPIO的初始化都是使用PIN_FUNC_SELECT();函数来进行初始化的,从命令风格来看,我们可以确定他是一个宏定义的函数,因为宏我们一般都会用全大写来表示。我们跳转到他的定义:
  1. #define PIN_FUNC_SELECT(PIN_NAME, FUNC) do { \
  2.     WRITE_PERI_REG(PIN_NAME,   \
  3.                                 READ_PERI_REG(PIN_NAME) \
  4.                                      &  (~(PERIPHS_IO_MUX_FUNC<<PERIPHS_IO_MUX_FUNC_S))  \
  5.                                      |( (((FUNC&BIT2)<<2)|(FUNC&0x3))<<PERIPHS_IO_MUX_FUNC_S) );  \
  6.     } while (0)
复制代码
我们发现他在eagle_soc.h里面,这是官方SD提供的文件,所以我们去找一下官方的数据手册,看下他怎么说,因为你现在不知道芯片的硬件手册,所以他最后在操作寄存器的地址对你来说也没有任何意义,他根本无法知道是什么意思。

官方也里是简单的说了一下怎么使用,至于这两个参数怎么样确定,文档好像没有说到。后来我看了例程和做实验发现,上面的表是有用的。我们可以发现eagle_soc.h中有一些宏定义是例程初始化的时候用到的。

我举几个例子:
如果你想开GPIO12,那你要这样初始化:
  1. PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U, FUNC_GPIO12);
复制代码
如果你想要用GPIO15,那你要这样初始化:
  1. PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDO_U, FUNC_GPIO15);
复制代码
那这两个参数怎么确定,有没有规律?有!就是那张表:左边是你的Inst Name,右边是你的Function,你想用哪个功能,就填哪个。官方在宏定义的时候,也把一个引脚下功能都放在了一起。
初始化完成以后,就是要怎么样输出高低电平啦,我们再来看一下官方的文档:

  1. GPIO_OUTPUT_SET(GPIO_ID_PIN(15), 1);
复制代码
下面我们来说一下怎么读取IO电平,一开始,我以为上面那个GPIO_DIS_OUTPUT();就是初始化的API,然后我试了一下,不行!后面我一直在找哪里写了GPIO输入模式的API,都没发现。我在想一个32位的MCU,每种模式应该都有独立的开关,像STM32一样。但是我高看他了,在我实在没有办法的情况下,我试了一下上面初始化的代码,然后用读取GPIO的API试了一下,居然能够成功的读取到!这货居然跟51差不多。
读取代码:
  1. currentDataPoint.valueswitchoff = GPIO_INPUT_GET(12);
复制代码
这就是基本的基于ESP8266的SoC的操作,后面有空再更,我现在还没搞清楚到底哪些引脚可以做GPIO,哪些不可以,功能复用又是怎么回事。NodeMCU果然比乐鑫的SDK好多了。
2C-ESP8266__SDK__API Guide__CN_v2.0.0.pdf (1.36 MB, 下载次数: 204)

0

主题

5

帖子

24

积分

新手上路

Rank: 1

积分
24
沙发
发表于 2017-8-8 14:29:45 | 只看该作者
谢谢,现在也是想用PGIO来驱动LED灯

0

主题

4

帖子

28

积分

新手上路

Rank: 1

积分
28
板凳
发表于 2017-12-16 09:46:49 | 只看该作者
那楼主的意思就是8266自带的mcu很次,是这意思吗?

点评

不是,只是觉得文档没写清楚,只给一个API,也不说要怎么用  详情 回复 发表于 2017-12-17 00:21

7

主题

92

帖子

1587

积分

金牌会员

Rank: 6Rank: 6

积分
1587
地板
 楼主| 发表于 2017-12-17 00:21:37 | 只看该作者
sugar 发表于 2017-12-16 09:46
那楼主的意思就是8266自带的mcu很次,是这意思吗?

不是,只是觉得文档没写清楚,只给一个API,也不说要怎么用

0

主题

4

帖子

28

积分

新手上路

Rank: 1

积分
28
5#
发表于 2017-12-27 13:04:52 | 只看该作者
汉枫LPB120模块
iDea 发表于 2017-12-17 00:21
不是,只是觉得文档没写清楚,只给一个API,也不说要怎么用

OK,那我在用这个自带的试试

1

主题

16

帖子

280

积分

中级会员

Rank: 3Rank: 3

积分
280
6#
发表于 2018-1-1 05:51:14 来自手机 | 只看该作者
我也还在摸索

0

主题

6

帖子

127

积分

注册会员

Rank: 2

积分
127
7#
发表于 2019-5-2 17:05:49 | 只看该作者
好东西,必须收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

快速回复 返回顶部 返回列表