SimonLiu的ESP8266与AliOS Things 学习系列教程之三:点个灯吧 - GPIO输入中断和LED blink

欢迎加入交流群:ESP8266 AliOS Things 群 号: 107723112
所有教程请看 AliOS Things 入门教程系列
此教程在SimonLiu的CSDN博客同步更新。

嵌入式开发之“点个灯”就相当于学习编程的“hello world”练习。所以我们就来点个灯吧。点灯有两种方式,一种是blink(自动闪烁),另外一种是通过一个连接到GPIO的按键输入(外部中断)来切换另外一个GPIO(LED )状态。

点击查看本文完整代码

本文涉及AliOS Things ESP8266 GPIO的三个方面:

  • GPIO输入输出配置
  • GPIO中断配置
  • GPIO输出电平设置
1. 新建项目

还记得我们在系列文章的上一篇SimonLiu的ESP8266与AliOS Things 学习系列之二:新建项目一文中,我们在Alios-Things\app\examples下面存放了新建项目的文件夹。但是examples文件夹下有很多AliOS自带的例程文件夹,为了未来查找方便,我们可以把自己的项目文件夹放在一起。首先使用vs code打开AliOS-Things文件夹,然后在examples下新建一个文件夹AliOSLearning

为了git管理版本方便,我们需要把app/example/AliOSLearning/这个文件夹添加到git的忽略文件夹。在vs code中打开AliOS-Things文件夹的.gitignore文件,添加一行app/example/AliOSLearning/,这样就把文件夹AliOSLearning列为忽略文件夹,我们就可以对它进行单独的git版本管理而无须担心git仓库的嵌套了。

然后把上一篇文章我们建立的GPIO_LED文件夹,移动到AliOSLearning文件夹下,目录结构变成AliOSLearning/GPIO_LED。你也可以在AliOSLearning下新建文件夹,存放新的项目。至于项目的版本管理,你可以把AliOSLearning当成一个仓库统一管理,或者把AliOSLearning下的各个子文件夹当成独立仓库管理,看你的需要了。本系列文章中SimonLiuAliOSLearning当成一个仓库管理,各个学习项目只是这个仓库下的不同文件夹。

2. 配置GPIO

目标:

  • GPIO4:推挽输出,连接LED1,LED每秒闪烁一次,持续时间500ms。
  • GPIO5:推挽输出,连接LED2,当检测到GPIO14的按键按下的时候,切换输出电平。
  • GPIO14:输入,连接按键,检测下降沿中断,中断回调里面实现GPIO5(LED2)的翻转控制。

GPIO4的代码(GPIO5代码类似):

    #define GPIO_LED1   4
     
     gpio_dev_t led1;
    
    /* gpio port config */
    led1.port = GPIO_LED1;
    
    /* set as output mode */
    led1.config = OUTPUT_PUSH_PULL;
   
    /* configure GPIO with the given settings */
    hal_gpio_init(&led1);

GPIO14的代码

    #define GPIO_INPUT   14
     
     gpio_dev_t input;
    
    /* input pin config */
    input.port = GPIO_INPUT;
    /* set as interrupt mode */
    input.config = IRQ_MODE;
    /* configure GPIO with the given settings */
    hal_gpio_init(&input);

    hal_gpio_enable_irq(&input, IRQ_TRIGGER_FALLING_EDGE, gpio_isr_handler, (void *) GPIO_INPUT);

中断回调函数:

static void gpio_isr_handler(void* arg)
{

    hal_gpio_disable_irq(&input);
    hal_gpio_output_toggle(&led1);
    hal_gpio_clear_irq(&input);
   
} 
3. 其他相关内容

中断模式目前有三种选项(似乎没看到电平中断,只有沿中断):

    typedef enum {
    IRQ_TRIGGER_RISING_EDGE  = 0x1, Interrupt triggered at input signal's rising edge 
    IRQ_TRIGGER_FALLING_EDGE = 0x2, Interrupt triggered at input signal's falling edge
    IRQ_TRIGGER_BOTH_EDGES   = IRQ_TRIGGER_RISING_EDGE | IRQ_TRIGGER_FALLING_EDGE,
    } gpio_irq_trigger_t;
     */

GPIO模式有如下选择

typedef enum {
    ANALOG_MODE,               /* Used as a function pin, input and output analog */
    IRQ_MODE,                  /* Used to trigger interrupt */
    OUTPUT_PUSH_PULL,          /* Output, actively driven high and actively driven low */
    OUTPUT_OPEN_DRAIN_PULL_UP, /* Output, actively driven low. When set high, is pulled high with an internal resistor */
    OUTPUT_OPEN_DRAIN_NO_PULL, /* Output, actively driven low. When set high, is high-impedance */
    INPUT_PULL_DOWN,           /* Input, with an internal pull-down resistor */
    INPUT_PULL_UP,             /* Input, with an internal pull-up resistor */
    INPUT_HIGH_IMPEDANCE,      /* Input, must always be driven, either actively or by an external pullup resistor */
} gpio_config_t;

输出电平设置这里使用了hal_gpio_output_toggle(),当然还有hal_gpio_output_high()hal_gpio_output_low()(在官方的blink例程可以看到)。

AliOS程序入口是int application_start(int argc, char *argv[]),LED闪烁是通过AliOS Things异步事件框架Yloop实现。

int application_start(int argc, char *argv[])
{

    gpioInit();
    aos_post_delayed_action(1000, toggleLed2, NULL);
    aos_loop_run();

    return 0;
}
static void toggleLed2(void)
{
    hal_gpio_output_toggle(&led2);
    aos_post_delayed_action(500, toggleLed2, NULL);
    LOG("LOG ouput: Toggle LED2 \r\n");

}
4. 编译

点击vs code下方的alios工具栏,在右侧弹出列表中依次选择AliOSLearning.GPIO_LEDesp8266,然后此处就会变成AliOSLearning.GPIO_LED@esp8266。然后点击对勾进行编译。本例中的bin输出文件在out\myProjects.GPIO_LED@esp8266\binary\myProjects.GPIO_LED@esp8266.bin

在这里插入图片描述

看到如下信息表示编译成功:

在这里插入图片描述
5. 烧写

点击AliOS工具栏的闪电图标即可烧写。

点击查看本文完整代码

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

推荐阅读更多精彩内容