手把手使用esp8266一起来做智能插排-软件篇

 之前已经写了硬件篇的内容,这里软件篇就不写太多内容了,这里主要是给大家提供一段测试的代码,用于测试自己的硬件是否工作正常,如果自己需要其他功能可参考乐鑫官网的SDK开发相关教程。先上完整的测试代码,代码比较简单,一看就明白了,这里说明一下,代码我这里是经过测试,能正常编译并烧录,编译环境是NONOS版本的SDK,工具是用的官网的虚拟机环境,如果发现程序编译报错的,请检查自己的SDK版本和编译环境。

/******************************************************************************
     * Copyright 2013-2014 Espressif Systems
     *
*******************************************************************************/
#include "ets_sys.h"
#include "os_type.h"
#include "osapi.h"
#include "mem.h"
#include "user_interface.h"
     
 
LOCAL os_timer_t change_timer;



#define SWITCH_Pin_NUM         0
#define SWITCH_Pin_FUNC        FUNC_GPIO0
#define SWITCH_Pin_MUX         PERIPHS_IO_MUX_GPIO0_U

static bool status = true;


/******************************************************************************
 * 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 ICACHE_FLASH_ATTR user_rf_cal_sector_set(void)
{
    enum 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;
}


 /******************************************************************************
  * FunctionName : user_rf_pre_init
  * Description  : 
  * Parameters   : 
  *                
  * Returns      : none
 *******************************************************************************/
void ICACHE_FLASH_ATTR user_rf_pre_init(void){}


void ICACHE_FLASH_ATTR user_change(void){
if( status == true )
    {
        status = false;
        GPIO_OUTPUT_SET(GPIO_ID_PIN(2), 1);
        os_printf("---key is false\n");
    }
    else
    {
        status = true;
        GPIO_OUTPUT_SET(GPIO_ID_PIN(2), 0);
        os_printf("---key is true\n");
    }
}

void ICACHE_FLASH_ATTR user_test(void){
os_printf("---User Test ~~~~~\n");
    os_timer_disarm(&change_timer);
   os_timer_setfn(&change_timer, (os_timer_func_t *)user_change, NULL);
   os_timer_arm(&change_timer, 3000, 1);

}
/******************************************************************************
 * FunctionName : user_init
 * Description  : entry of user application, init user function here
 * Parameters   : none
 * Returns      : none
*******************************************************************************/
void user_init(void)
{
   os_printf("SDK version:%s\n", system_get_sdk_version());
   
   PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO2);
   GPIO_OUTPUT_SET(GPIO_ID_PIN(2), 1);

    user_test();   
   
}
以上这段代码是采用定时器的方法每三秒钟切换一次继电器的状态,检查继电器是否工作正常。





你可能感兴趣的:(单片机,硬件)