之前已经写了硬件篇的内容,这里软件篇就不写太多内容了,这里主要是给大家提供一段测试的代码,用于测试自己的硬件是否工作正常,如果自己需要其他功能可参考乐鑫官网的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(); }以上这段代码是采用定时器的方法每三秒钟切换一次继电器的状态,检查继电器是否工作正常。