esp8266 的gpio16怎么配置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了esp8266 的gpio16怎么配置相关的知识,希望对你有一定的参考价值。

如果你的是AT指令版的,在51单片机上通过串口连接ESP8266的串口,发送AT指令,设置路由器和密码后就可以使8266连上路由器了。
同样,esp8266连接上路由器后拥有IP地址,此时可以通过单片机获取8266的ip地址并显示出来,手机可以直接连接8266,并向8266发送IP包。8266会将该包转换成串口数据向单片机发送过去的。
如果你的8266是自己重新烧写的内核,如果你能这样做,那么也不会有这个问题了,因为这些需要在自己的内核中重新做好。
参考技术A 这个与其他GPIO不同,他属于RTC模块,不能触发中断,如下函数可以配置。

gpio16_output_conf(void);
gpio16_output_set(uint8 value);
gpio16_input_conf(void);
gpio16_input_get(void);
参考技术B gpio16_output_conf();
gpio16_output_set(level);

ESP32-IDF 02-6 外设-GPIO

GPIO

1. 原理层面

在这里插入图片描述

  每个引脚的输入和输出特性都是由IO_MUX和RTC_IO_MUX决定的。

  输出时,外设通过MUX与pin pad进行绑定,即可输出

  输入时,pin Pad设置好外设引脚为输入状态,并且设置好哪个外设接受这个信号即可。

  配置上,GPIO可以设置为上下拉,可以设置方向

  功能上GPIO可以与外设绑定,可以设置中断,也可以与低功耗进行绑定

2. 编程层面

2.1 GPIO输出

   esp32的GPIO可以通过函数的方法进行配置,也可以通过GPIO结构体的方法进行配置。使用GPIO结构体的话,适合连续配置。

2.1.1 通过结构体进行配置



#include "driver/gpio.h"


void setup() {
//gpio配置结构体
	gpio_config_t gpio;
	gpio.intr_type = GPIO_INTR_DISABLE;  //禁止中断
	gpio.mode = GPIO_MODE_OUTPUT;        //设置为输出模式
	gpio.pin_bit_mask = (1ULL << GPIO_NUM_23); //需要使用的引脚置位
	gpio.pull_down_en = GPIO_PULLDOWN_DISABLE;  //不下拉,因为这里是输出
	gpio.pull_up_en = GPIO_PULLUP_DISABLE;  //不上拉,因为这里是输出

	gpio_config(&gpio); //配置
	
}

// the loop function runs over and over again until power down or reset
void loop() {
	
	gpio_set_level(GPIO_NUM_23, 1);  //输出高电平
	delay(1000);

}


2.1.2 通过函数进行配置



#include "driver/gpio.h"


void setup() {
	gpio_pad_select_gpio(GPIO_NUM_23);   //选择gpio引脚
	gpio_set_direction(GPIO_NUM_23, GPIO_MODE_OUTPUT); //设置功能模式
	gpio_set_level(GPIO_NUM_23, 1);  //设置gpio输出为高
	
}

// the loop function runs over and over again until power down or reset
void loop() {
	


}



2.2 GPIO输入

2.2.1 轮询方式

  这里以按键输入检测为例,进行基于轮询的gpio输入实验。通过gpio_4进行检测输入。并且gpio_2连接了led,用于指示按键输入情况



#include "driver/gpio.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"






void setup() {
	
	
	gpio_pad_select_gpio(GPIO_NUM_4);  //选择gpio
	gpio_set_direction(GPIO_NUM_4, GPIO_MODE_INPUT); //设置工作模式
	gpio_set_pull_mode(GPIO_NUM_4, GPIO_PULLUP_ONLY); //设置上拉输入

	gpio_pad_select_gpio(GPIO_NUM_2);
	gpio_set_direction(GPIO_NUM_2, GPIO_MODE_OUTPUT);
	
	uint32_t tag = 1;
	while (1)
	{
		if (gpio_get_level(GPIO_NUM_4) == 0)
		{
			delayMicroseconds(100);
			if (gpio_get_level(GPIO_NUM_4) == 0)
			{
				gpio_set_level(GPIO_NUM_2, tag);
				tag = !tag;

				while (gpio_get_level(GPIO_NUM_4) == 0);
			}

		}
	}

	
	
}

// the loop function runs over and over again until power down or reset
void loop() {
	




}



2.2.2 中断方式

  这里以按键输入检测为例,进行基于中断的gpio输入实验。通过gpio_4进行检测输入。并且gpio_2连接了led,用于指示按键输入情况

  


#include "driver/gpio.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"


//中断服务函数
static void IRAM_ATTR gpio_isr_handler(void* arg)
{
	static uint32_t ison = 1;
	gpio_set_level(GPIO_NUM_2, ison);
	ison = !ison;
}



void setup() {
	
	//接受中断的引脚
	//设置gpio上拉输入
	gpio_pad_select_gpio(GPIO_NUM_4);
	gpio_set_direction(GPIO_NUM_4, GPIO_MODE_INPUT);
	gpio_pullup_en(GPIO_NUM_4);
	gpio_set_pull_mode(GPIO_NUM_4, GPIO_PULLUP_ONLY);


	//设置中断
	gpio_set_intr_type(GPIO_NUM_4, GPIO_INTR_NEGEDGE);//设置中断类型
	gpio_install_isr_service(0); //给单个引脚注册边沿检测中断,而不是全部引脚。0表示会默认分配中断优先级1或2或3
	gpio_isr_handler_add(GPIO_NUM_4, gpio_isr_handler,(void*)GPIO_NUM_4);
	gpio_intr_enable(GPIO_NUM_4); //使能中断



	//led
	gpio_pad_select_gpio(GPIO_NUM_2);
	gpio_set_direction(GPIO_NUM_2, GPIO_MODE_OUTPUT);
	
	
}

// the loop function runs over and over again until power down or reset
void loop() {
	




}


3. GPIO配置总结

  • GPIO有结构体配置法和库函数配置法两种,结构体配置法适合多个引脚需要同时配置的时候。而库函数配置更适合配置单个引脚。
  • 中断函数前面要加IRAM_ATTR标志符

以上是关于esp8266 的gpio16怎么配置的主要内容,如果未能解决你的问题,请参考以下文章

04_ESP8266 NONOS_SDK GPIO

esp8266 sdk 怎么写makefile

esp32gpio一直输出高电平

基于esp826的使用实现串口网络双控制以及数据上传(解决了没有esp8266的库和连接不上wifi以及手机热点的问题)

基于esp826的使用实现串口网络双控制以及数据上传(解决了没有esp8266的库和连接不上wifi以及手机热点的问题)

基于esp826的使用实现串口网络双控制以及数据上传(解决了没有esp8266的库和连接不上wifi以及手机热点的问题)