1345|6

1455

帖子

1

TA的资源

五彩晶圆(初级)

楼主
 

【便携式环境状态检测器】GPIO口的使用 [复制链接]

 

面对新的开发板,GPIO口是最好的切入手点,对于ESP32-S2-Kaluga-1 套件自然也不例外。

在例程中所提供的一个基本示例是点亮WS2812,但它还不够直接,于是还是从点亮LED比较典型。

 

1)LED灯控制

在开发板上,引脚45是通过短接子来连接WS2812,在引脚自然较为紧张时,可直接将其断开来供其它测试用。这里是用一个LED模块来进行测试,见图1所示。

 

图1 测试电路

 

对LED所用引脚的配置函数为:

static void configure_led(void)
{
      ESP_LOGI(TAG, "Example configured to blink GPIO LED!");
      gpio_reset_pin(BLINK_GPIO);
      gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);
}

 

控制LED状态切换的函数为:

static void blink_led(void)
{
      /* Set the GPIO level according to the state (LOW or HIGH)*/
      gpio_set_level(BLINK_GPIO, s_led_state);
}

 

该函数之所以能切换LED的工作状态,是由于使用全局变量s_led_state,通过语句s_led_state= !s_led_state;

来实现状态的切换。

 

除前面介绍的2个函数外,其这个程序如下:

#include<stdio.h>
#include"freertos/FreeRTOS.h"
#include"freertos/task.h"
#include"driver/gpio.h"
#include"esp_log.h"
#include"led_strip.h"
#include"sdkconfig.h"


#define BLINK_GPIO 45
staticuint8_ts_led_state = 0;


void app_main(void)
{
    /* Configure the peripheral according to the LED type */
    configure_led();
    while (1)
    {
         gpio_set_level(BLINK_GPIO, s_led_state);
         ESP_LOGI(TAG, "Turning the LED %s!", s_led_state == true ? "ON" :"OFF");
         s_led_state= !s_led_state;
         vTaskDelay(50);
    };
}

经程序的编译与下载,其运行效果如图2所示。

 

图2 点亮LED

 

2)按键控制LED灯

若使用引脚46来外接一个按键模块,则所用引脚的配置函数为:

static void configure_key(void)
{
      gpio_reset_pin(KEY_GPIO);
      gpio_set_direction(KEY_GPIO, GPIO_MODE_INPUT);
}

 

则实现键控LED的主程序为:

#define BLINK_GPIO 45


void app_main(void)
{
    /* Configure the peripheral according to the LED type */
    configure_led();
    configure_key();
    while (1)
    {
         if(gpio_get_level(BLINK_GPIO)==0)
         {
               gpio_set_level(BLINK_GPIO, 1);
         }
         else
         {
               gpio_set_level(BLINK_GPIO, 0);
         }
    }
}

 

至此,基本上就可以自由地使用GPIO口来进行功能设计了。

 

3)点亮WS2812灯环

其实例程中的BLINK例程是一个十分具有扩展性的示例,在它的基础上稍加修改就可产生丰富多彩的效果。

以一个有12个灯珠的WS2812灯环为例,其测试电路如图3所示。

 

图3 测试线路

 

为此,该彩色灯环的配置函数为:

static void configure_led(void)
{
    ESP_LOGI(TAG, "Example configured to blink addressable LED!");
    /* LED strip initialization with the GPIO and pixels number*/
    pStrip_a = led_strip_init(CONFIG_BLINK_LED_RMT_CHANNEL, BLINK_GPIO, 12);
    /* Set all LED off to clear all pixels */
    pStrip_a->clear(pStrip_a, 50);
}

 

其实现彩灯闪烁效果的函数为:

static void blink_led(void)
{
  /* If the addressable LED is enabled */
  if (s_led_state) {
      /* Set the LED pixel using RGB from 0 (0%) to 255 (100%) for each color */
      pStrip_a->set_pixel(pStrip_a, 0, 16, 16, 16);
      pStrip_a->set_pixel(pStrip_a, 1, 255, 16, 16);
      pStrip_a->set_pixel(pStrip_a, 2, 16, 255, 16);
      pStrip_a->set_pixel(pStrip_a, 3, 16, 16, 255);
      pStrip_a->set_pixel(pStrip_a, 4, 255, 255, 16);
      pStrip_a->set_pixel(pStrip_a, 5, 16, 255, 255);
      pStrip_a->set_pixel(pStrip_a, 6, 255, 16, 255);
      pStrip_a->set_pixel(pStrip_a, 7, 255, 16, 16);
      pStrip_a->set_pixel(pStrip_a, 8, 16, 255, 16);
      pStrip_a->set_pixel(pStrip_a, 9, 16, 16, 255);
      pStrip_a->set_pixel(pStrip_a, 10, 255, 255, 16);
      pStrip_a->set_pixel(pStrip_a, 11, 16, 255, 255);
      /* Refresh the strip to send data */
      pStrip_a->refresh(pStrip_a, 100);
    } else {
      /* Set all LED off to clear all pixels */
      pStrip_a->clear(pStrip_a, 50);
    }
}

除前面介绍的2个函数外,其这个程序如下:

#define BLINK_GPIO 45

 

voidapp_main(void)
{
       /* Configure the peripheral according to the LED type */
       configure_led();
       while (1) {
          ESP_LOGI(TAG, "Turning the LED %s!", s_led_state == true ? "ON" :"OFF");
          blink_led();
          /* Toggle the LED state */
          s_led_state= !s_led_state;
          vTaskDelay(CONFIG_BLINK_PERIOD / portTICK_PERIOD_MS);
      }
}

 

经程序的编译与下载,其运行效果如图4所示。

 

图4 显示效果

最新回复

那不是直接驱动的啊,还得来个器件控制它   详情 回复 发表于 2022-10-9 15:11
点赞 关注
 
 

回复
举报

6841

帖子

11

TA的资源

版主

沙发
 

老师的Led灯看起来就很舒服,帖子一直是让人学习到许多的东西。感谢分享!

点评

感谢支持!!!  详情 回复 发表于 2022-10-8 09:11
 
 
 

回复

1455

帖子

1

TA的资源

五彩晶圆(初级)

板凳
 
lugl4313820 发表于 2022-10-8 08:55 老师的Led灯看起来就很舒服,帖子一直是让人学习到许多的东西。感谢分享!

感谢支持!!!

 
 
 

回复

6060

帖子

6

TA的资源

版主

4
 

Led环挺好看的,怎么通过3个引脚控制的,能同时点亮吗

点评

严格说是4个引脚,还有一个出引脚,可串行传递信号,以同时点亮。  详情 回复 发表于 2022-10-9 10:15
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 
 

回复

1455

帖子

1

TA的资源

五彩晶圆(初级)

5
 
秦天qintian0303 发表于 2022-10-8 20:51 Led环挺好看的,怎么通过3个引脚控制的,能同时点亮吗

严格说是4个引脚,还有一个出引脚,可串行传递信号,以同时点亮。

点评

那不是直接驱动的啊,还得来个器件控制它  详情 回复 发表于 2022-10-9 15:11
 
 
 

回复

6060

帖子

6

TA的资源

版主

6
 
jinglixixi 发表于 2022-10-9 10:15 严格说是4个引脚,还有一个出引脚,可串行传递信号,以同时点亮。

那不是直接驱动的啊,还得来个器件控制它

点评

不用,每个单元都有控制电路,使用时只需将前后的输出与输入连接起来即可。  详情 回复 发表于 2022-10-10 10:22
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引

 
 
 

回复

1455

帖子

1

TA的资源

五彩晶圆(初级)

7
 
秦天qintian0303 发表于 2022-10-9 15:11 那不是直接驱动的啊,还得来个器件控制它

不用,每个单元都有控制电路,使用时只需将前后的输出与输入连接起来即可。

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表