ESP8266--GPIO输入控制

GPIO输入寄存器

GPIO输入寄存器GPIO_IN

在这里插入图片描述
BIT[15:0]输入状态位(可读可写):若对应的位为1,表示该IO的引脚状态为高电平;若对应的位为低电平,表示该IO的引脚状态为低电平。BIT[15:0]对应16个GPIO的输入状态位。

输入相关宏定义

GPIO_OUTPUT_SET(gpio_no, bit_value)

宏名称:GPIO_OUTPUT_SET(gpio_no, bit_value)
宏功能:设置指定引脚(gpio_no)为指定电平(bit_value)
形参:
        gpio_no:指定的GPIO口
			可写参数:GPIO_ID_PIN(n)//n的取值范围为[15:0],对应的是GPIO[15:0]
		 bit_value:指定电平
		 	 可填参数:1 -- 高电平    0 -- 低电平
		 示例:GPIO_OUTPUT_SET(GPIO_ID_PIN(0),1);//设置GPIO0引脚为高电平

GPIO_DIS_OUTPUT(gpio_no)

宏名称:GPIO_DIS_OUTPUT(gpio_no)
宏功能:设置指定引脚(gpio_no)为输入模式
形参:
        gpio_no:指定的GPIO口
			可写参数:GPIO_ID_PIN(n)//n的取值范围为[15:0],对应的是GPIO[15:0]
示例:GPIO_DIS_OUTPUT(GPIO_ID_PIN(0));//设置GPIO0为输入模式

GPIO_INPUT_GET(gpio_no)

宏名称:GPIO_INPUT_GET(gpio_no)
宏功能:获取指定引脚(gpio_no)的电平状态
形参:
        gpio_no:指定的GPIO口
       		可写参数:GPIO_ID_PIN(n)//n的取值范围为[15:0],对应的是GPIO[15:0]
示例:GPIO_INPUT_GET(GPIO_ID_PIN(0));//获取GPIO0的当前状态

ESP8266输入控制举例

硬件连接图

在这里插入图片描述
由原理图可知:按键BOOT接到ESP8266模块的GPIO0引脚。由于GPIO0通过R3进行电源上拉,所以GPIO0默认为高电平状态。当使能按键引脚之后,按下按键为低电平。

按键初始化代码

这里的按键初始化代码使用多文件编程。
1 新建驱动文件key.c和key.h
我们为了不去修改工程里面的makefile文件,所以我们直接将key.c放置在app文件夹下的driver文件里面
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2 添加头文件
在这里插入图片描述
在这里插入图片描述
3 配置IO口模式
在这里插入图片描述

4 源代码

//key.c源代码
#include "driver/key.h"

void KeyInitConfig(void)
{
	//1.设置按键所对应的GPIO0口为IO口模式 -- 详见文档3.3.1.1章节
	PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U, FUNC_GPIO0);	// GPIO0设为IO口
	//2.由于GPIO0通过R3进行电源上拉,所以GPIO0默认为高电平状态,在这里要将内部拉高取消
	PIN_PULLUP_DIS(PERIPHS_IO_MUX_GPIO0_U);
	//3.设定GPIO0引脚为输入模式
	GPIO_DIS_OUTPUT(GPIO_ID_PIN(0));
}
//usrt_mian.c源代码
void ICACHE_FLASH_ATTR user_init(void)
{
	system_soft_wdt_feed();//喂软件看门狗,防止程序跑偏
	uart_init(9600, 9600);//设置串口波特率
	LedInitConfig();
	KeyInitConfig();
	os_printf("=============================================\r\n");
	os_printf("\t SDK version:\t%s", system_get_sdk_version());
	os_printf("\r\n嵌入式陈工个人编辑资料\r\n未经本人同意请勿私自传播\r\n");
	os_printf("\r\n按键控制测试代码\r\n");
	os_printf("\r\n带看门狗\r\n");
	os_printf("=============================================\r\n");


	while (1)
	{
		if ((GPIO_INPUT_GET(GPIO_ID_PIN(0))) == 0)//检测按键是否按下
			GPIO_OUTPUT_SET(GPIO_ID_PIN(4), 0);//点亮LED
		else
			GPIO_OUTPUT_SET(GPIO_ID_PIN(4), 1);//点亮LED
	}
}

源代码参考:https://github.com/ChenJiliang00/ESP8266

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值