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怎么配置的主要内容,如果未能解决你的问题,请参考以下文章
基于esp826的使用实现串口网络双控制以及数据上传(解决了没有esp8266的库和连接不上wifi以及手机热点的问题)
基于esp826的使用实现串口网络双控制以及数据上传(解决了没有esp8266的库和连接不上wifi以及手机热点的问题)
基于esp826的使用实现串口网络双控制以及数据上传(解决了没有esp8266的库和连接不上wifi以及手机热点的问题)