<4> esp8266 iot LED灯闪烁
Posted 疯狂程序
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了<4> esp8266 iot LED灯闪烁相关的知识,希望对你有一定的参考价值。
目录
一、GPIO接口API
二、新建项目
复制上节(<esp8266 iot 软件延时>https://blog.csdn.net/qq_27558597/article/details/117728922?spm=1001.2014.3001.5502)工程,重命名为003_GPIO_LED,如下:
三、新建文件
新建bsp_led.c、bsp_led.h文件,源代码文件新建方法请查看<esp8266 iot 软件延时>https://blog.csdn.net/qq_27558597/article/details/117728922?spm=1001.2014.3001.5502章节
1.bsp_led.c
模组上的LED的驱动口在esp8266上的GPIO2,高电平有效。
/*
*********************************************************************************************************
*
* 程序名称: LED灯驱动模块
* 文件名称: bsp_led.c
* 版 本: v1.0.0
* 编 写: 风巽云科技 lijiangmo
* 说 明:
*
* 版本记录:
* v1.0.0: 2021年6月9日,初版
*
* Copyright (C), 2021-2031, 深圳市风巽云科技有限公司 https://fxymcu.taobao.com
*
*********************************************************************************************************
*/
#include "ets_sys.h"
#include "gpio.h"
/* 驱动引脚定义 */
#define LED_PIN_NAME PERIPHS_IO_MUX_GPIO2_U
#define LED_FUNC FUNC_GPIO2
#define LED_GPIO_ID 2
/* LED状态 */
static uint8_t ucLedStaus;
/*
*********************************************************************************************************
* 函 数 名: bsp_InitLED
* 功能说明: 配置LED指示灯相关的GPIO
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
void ICACHE_FLASH_ATTR bsp_InitLED(void)
{
PIN_FUNC_SELECT(LED_PIN_NAME, LED_FUNC); /* GPIO2设为IO口 */
ucLedStaus = 0;
GPIO_OUTPUT_SET(GPIO_ID_PIN(LED_GPIO_ID), ucLedStaus); /* 设置为低电平输出 */
}
/*
*********************************************************************************************************
* 函 数 名: bsp_LED_On
* 功能说明: 点亮LED指示灯。
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
void ICACHE_FLASH_ATTR bsp_LED_On(void)
{
ucLedStaus = 1;
GPIO_OUTPUT_SET(GPIO_ID_PIN(LED_GPIO_ID), ucLedStaus); /* 设置为高电平输出 */
}
/*
*********************************************************************************************************
* 函 数 名: bsp_LED_Off
* 功能说明: 熄灭LED指示灯。
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
void ICACHE_FLASH_ATTR bsp_LED_Off(void)
{
ucLedStaus = 0;
GPIO_OUTPUT_SET(GPIO_ID_PIN(LED_GPIO_ID), ucLedStaus); /* 设置为低电平输出 */
}
/*
*********************************************************************************************************
* 函 数 名: bsp_LED_Toggle
* 功能说明: 翻转LED指示灯。
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
void ICACHE_FLASH_ATTR bsp_LED_Toggle(void)
{
ucLedStaus = !ucLedStaus;
GPIO_OUTPUT_SET(GPIO_ID_PIN(LED_GPIO_ID), ucLedStaus); /* 设置为反电平输出 */
}
/********************************************* End of file **********************************************/
2.bsp_led.h
/*
*********************************************************************************************************
*
* 程序名称: LED灯驱动模块
* 文件名称: bsp_led.h
* 版 本: v1.0.0
* 编 写: 风巽云科技 lijiangmo
* 日 期: 2021年6月9日
*
* Copyright (C), 2021-2031, 深圳市风巽云科技有限公司 https://fxymcu.taobao.com
*
*********************************************************************************************************
*/
#ifndef __BSP_LED_H
#define __BSP_LED_H
/* 供外部调用函数 */
void ICACHE_FLASH_ATTR bsp_InitLED(void);
void ICACHE_FLASH_ATTR bsp_LED_On(void);
void ICACHE_FLASH_ATTR bsp_LED_Off(void);
void ICACHE_FLASH_ATTR bsp_LED_Toggle(void);
#endif
/********************************************* End of file **********************************************/
四、user_main.c
/*
* ESPRESSIF MIT License
*
* Copyright (c) 2016 <ESPRESSIF SYSTEMS (SHANGHAI) PTE LTD>
*
* Permission is hereby granted for use on ESPRESSIF SYSTEMS ESP8266 only, in which case,
* it is free of charge, to any person obtaining a copy of this software and associated
* documentation files (the "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished
* to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all copies or
* substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
*/
/*
*********************************************************************************************************
*
* 程序名称: LED灯
* 文件名称: user_main.c
* MCU型号 : ESP8266 FLASH:4MB RAM: 160KB(64KB为iRAM,96KB为dRAM)
* 运行平台: ESP8266 IoT开发板
* 版 本: v1.0.0
* 编 写: 风巽云科技 lijiangmo
* 说 明: 配置GPIO为输出模式
*
* 版本记录:
* v1.0.0: 2021年6月9日,初版
*
* Copyright (C), 2021-2031, 深圳市风巽云科技有限公司 https://fxymcu.taobao.com
*
*********************************************************************************************************
*/
#include "ets_sys.h"
#include "osapi.h"
#include "mem.h"
#include "user_interface.h"
#include "sntp.h"
#include "smartconfig.h"
#include "espconn.h"
#include "driver/uart.h"
#include "driver/bsp_delay.h"
#include "driver/bsp_led.h"
/* FLASH分区表 */
#if ((SPI_FLASH_SIZE_MAP == 0) || (SPI_FLASH_SIZE_MAP == 1))
#error "The flash map is not supported"
#elif (SPI_FLASH_SIZE_MAP == 2)
#define SYSTEM_PARTITION_OTA_SIZE 0x6A000
#define SYSTEM_PARTITION_OTA_2_ADDR 0x81000
#define SYSTEM_PARTITION_RF_CAL_ADDR 0xfb000
#define SYSTEM_PARTITION_PHY_DATA_ADDR 0xfc000
#define SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR 0xfd000
#define SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM_ADDR 0x7c000
#elif (SPI_FLASH_SIZE_MAP == 3)
#define SYSTEM_PARTITION_OTA_SIZE 0x6A000
#define SYSTEM_PARTITION_OTA_2_ADDR 0x81000
#define SYSTEM_PARTITION_RF_CAL_ADDR 0x1fb000
#define SYSTEM_PARTITION_PHY_DATA_ADDR 0x1fc000
#define SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR 0x1fd000
#define SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM_ADDR 0x7c000
#elif (SPI_FLASH_SIZE_MAP == 4)
#define SYSTEM_PARTITION_OTA_SIZE 0x6A000
#define SYSTEM_PARTITION_OTA_2_ADDR 0x81000
#define SYSTEM_PARTITION_RF_CAL_ADDR 0x3fb000
#define SYSTEM_PARTITION_PHY_DATA_ADDR 0x3fc000
#define SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR 0x3fd000
#define SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM_ADDR 0x7c000
#elif (SPI_FLASH_SIZE_MAP == 5)
#define SYSTEM_PARTITION_OTA_SIZE 0x6A000
#define SYSTEM_PARTITION_OTA_2_ADDR 0x101000
#define SYSTEM_PARTITION_RF_CAL_ADDR 0x1fb000
#define SYSTEM_PARTITION_PHY_DATA_ADDR 0x1fc000
#define SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR 0x1fd000
#define SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM_ADDR 0xfc000
#elif (SPI_FLASH_SIZE_MAP == 6)
#define SYSTEM_PARTITION_OTA_SIZE 0x6A000
#define SYSTEM_PARTITION_OTA_2_ADDR 0x101000
#define SYSTEM_PARTITION_RF_CAL_ADDR 0x3fb000
#define SYSTEM_PARTITION_PHY_DATA_ADDR 0x3fc000
#define SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR 0x3fd000
#define SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM_ADDR 0xfc000
#else
#error "The flash map is not supported"
#endif
#define SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM SYSTEM_PARTITION_CUSTOMER_BEGIN
static const partition_item_t at_partition_table[] = {
{SYSTEM_PARTITION_BOOTLOADER, 0x0, 0x1000},
{SYSTEM_PARTITION_OTA_1, 0x1000, SYSTEM_PARTITION_OTA_SIZE},
{SYSTEM_PARTITION_OTA_2, SYSTEM_PARTITION_OTA_2_ADDR, SYSTEM_PARTITION_OTA_SIZE},
{SYSTEM_PARTITION_RF_CAL, SYSTEM_PARTITION_RF_CAL_ADDR, 0x1000},
{SYSTEM_PARTITION_PHY_DATA, SYSTEM_PARTITION_PHY_DATA_ADDR, 0x1000},
{SYSTEM_PARTITION_SYSTEM_PARAMETER, SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR, 0x3000},
{SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM, SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM_ADDR, 0x1000},
};
/*
*********************************************************************************************************
* 函 数 名: user_pre_init
* 功能说明: 注册分区表
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
void ICACHE_FLASH_ATTR user_pre_init(void)
{
os_printf("->SPI_FLASH_SIZE_MAP = %d\\r\\n", SPI_FLASH_SIZE_MAP);
if (!system_partition_table_regist(at_partition_table, sizeof(at_partition_table) / sizeof(at_partition_table[0]), SPI_FLASH_SIZE_MAP))
{
os_printf("->system_partition_table_regist fail\\r\\n");
while (1)
{
}
}
os_printf("->system_partition_table_regist success\\r\\n");
}
/*
*********************************************************************************************************
* 函 数 名: PrintfSystempInfo
* 功能说明: 打印例程名称和例程发布日期
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
static void ICACHE_FLASH_ATTR PrintfSystempInfo(void)
{
os_printf("\\r\\n\\r\\n");
os_printf("-------------------------------------------------------------\\r\\n");
os_printf("->ESP8266 IoT\\r\\n");
/* SDK版本 */
os_printf("->SDK: %s\\r\\n", system_get_sdk_version());
/* 编译时间 */
os_printf("->Build: %s %s\\r\\n", __DATE__, __TIME__);
/* 芯片ID */
os_printf("->CPU ID: 0x%X\\r\\n", system_get_chip_id());
/* CPU时钟 */
os_printf("->CPU Freq: %dMHz\\r\\n", system_get_cpu_freq());
/* FLASH ID */
os_printf("->FLASH ID: 0x%X\\r\\n", spi_flash_get_id());
/* 查询系统剩余可用heap区空间 */
os_printf("->Heap Size: %dByte %dKB\\r\\n", system_get_free_heap_size(), system_get_free_heap_size() / 1024);
/* 打印系统内存空间分配,打印信息包括 data/rodata/bss/heap */
system_print_meminfo();
os_printf("-------------------------------------------------------------\\r\\n\\r\\n");
}
/*
*********************************************************************************************************
* 函 数 名: user_init
* 功能说明: 用户应用初始化
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
void ICACHE_FLASH_ATTR user_init(void)
{
partition_item_t partition_item;
if (!system_partition_get_item(SYSTEM_PARTITION_CUSTOMER_PRIV_PARAM, &partition_item))
{
os_printf("Get partition information fail\\r\\n");
}
/* 硬件初始化 */
//system_update_cpu_freq(SYS_CPU_80MHZ); /* CPU频率80MHz-默认 */
//UART_SetPrintPort(0); /* 系统Debug信息从串口0输出-默认 */
//uart_init(BIT_RATE_74880, BIT_RATE_74880); /* 初始化波特率-默认 */
os_delay_us(1000);
bsp_InitLED();
/* 串口打印系统信息 */
PrintfSystempInfo();
while(1)
{
bsp_LED_Toggle();
bsp_DelayMs(500);
}
}
/********************************************* End of file **********************************************/
程序解析:初始化LED相应IO,在while主循环里间隔500m翻转IO口电平状态。
以上是关于<4> esp8266 iot LED灯闪烁的主要内容,如果未能解决你的问题,请参考以下文章