ESP8266 物联网开发 -- 3,GPIO控制流水灯

直接上GPIO控制流水灯的代码, GPIO 12 13 14 配置成output,控制3个灯, 用RTOS任务中进行延时100tick进行流水

/*
 * ESPRSSIF MIT License
 *
 * Copyright (c) 2015 
 *
 * 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.
 *
 */

#include "esp_common.h"
#include "uart.h"
#include "gpio.h"
/******************************************************************************
 * FunctionName : user_rf_cal_sector_set
 * Description  : SDK just reversed 4 sectors, used for rf init data and paramters.
 *                We add this function to force users to set rf cal sector, since
 *                we don't know which sector is free in user's application.
 *                sector map for last several sectors : ABCCC
 *                A : rf cal
 *                B : rf init data
 *                C : sdk parameters
 * Parameters   : none
 * Returns      : rf cal sector
*******************************************************************************/
uint32 user_rf_cal_sector_set(void)
{
    flash_size_map size_map = system_get_flash_size_map();
    uint32 rf_cal_sec = 0;

    switch (size_map) {
        case FLASH_SIZE_4M_MAP_256_256:
            rf_cal_sec = 128 - 5;
            break;

        case FLASH_SIZE_8M_MAP_512_512:
            rf_cal_sec = 256 - 5;
            break;

        case FLASH_SIZE_16M_MAP_512_512:
        case FLASH_SIZE_16M_MAP_1024_1024:
            rf_cal_sec = 512 - 5;
            break;

        case FLASH_SIZE_32M_MAP_512_512:
        case FLASH_SIZE_32M_MAP_1024_1024:
            rf_cal_sec = 1024 - 5;
            break;

        default:
            rf_cal_sec = 0;
            break;
    }

    return rf_cal_sec;
}

void	task1(void	*pvParameters)
{
    u8 cnt=0;
    while(1)	
    {
        cnt++;
        switch ( cnt%3 )
        {
            case 0://R
                GPIO_OUTPUT_SET(12, 1);
                GPIO_OUTPUT_SET(13, 0);
                GPIO_OUTPUT_SET(14, 0);
                break;
            case 1://G
                GPIO_OUTPUT_SET(12, 0);
                GPIO_OUTPUT_SET(13, 1);
                GPIO_OUTPUT_SET(14, 0);
                break;
            case 2://B
                GPIO_OUTPUT_SET(12, 0);
                GPIO_OUTPUT_SET(13, 0);
                GPIO_OUTPUT_SET(14, 1);
                break;
        }
        vTaskDelay(100);
    }
    vTaskDelete(NULL);
}

/******************************************************************************
 * FunctionName : user_init
 * Description  : entry of user application, init user function here
 * Parameters   : none
 * Returns      : none
*******************************************************************************/
void user_init(void)
{
	uart_init_new();
	printf("Ai-Thinker Technology Co. Ltd.\r\n%s %s\r\n", __DATE__, __TIME__);
	printf("Hello,World!\r\n");
    printf("SDK version:%s\n", system_get_sdk_version());

    //引脚功能设置
    PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U, FUNC_GPIO12); //R
    PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTCK_U, FUNC_GPIO13); //G
    PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTMS_U, FUNC_GPIO14); //B
    PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDO_U, FUNC_GPIO15); //BEEP
    
    GPIO_OUTPUT_SET(12, 0);
    GPIO_OUTPUT_SET(13, 0);
    GPIO_OUTPUT_SET(14, 0);
    GPIO_OUTPUT_SET(15, 0);
    
    xTaskCreate(task1,	"tsk1",	256,	NULL,	2,	NULL);
}

按照之前文章配置的下载文件,遇到程序下载运行跑飞的问题。后来把几个数据段的文件也下载后正常,原因不清楚还。下载配置见下图 Non-FOTA

ESP8266 物联网开发 -- 3,GPIO控制流水灯_第1张图片

你可能感兴趣的:(ESP8266 物联网开发 -- 3,GPIO控制流水灯)