2017年2月2日 星期四

DIY - ESP8266:ESP8266 第一個程式 LED 閃燈(十四)

DIY - ESP8266:ESP8266 第一個程式 LED 閃燈(十四):

筆者在 ESP8266 ESP-12E 模塊上編寫一個程式是閃動 LED 燈,使用了樂鑫(Espressif)的 NONOS SDK 原程碼(ESP8266 NONOS_SDK v2.0.0_20160810),由於 ESP8266 NONOS SDK 需要使用計時器來執行程式,一般 C 語言的閉環 while 的方式來是不能使用,程式裏面涉及到的函數有三個,user_init{} 是入口函數,相當於 main 函數,user_rf_pre_init{} 是 SDK1.1.0 及之後版本需要增加的函數,暫時沒有用,timer_callback{} 是一個回調函數,下面的計時器會用到。

ESP8266 第一個程式 LED 閃燈
程式是首先定義一個計時器函數和一個狀態變數 led,用於判斷 LED 燈的狀態,然後設定和啓動計時器,os_timer_setfn(&timer,(os_timer_func_t *)timer_callback,NULL);timer_callback{} 就是自己的那個回調函數,GPIO_OUTPUT_SET(GPIO_ID_PIN(5), 0);這句的意思就是 GPIO5 輸出低電平 0,1 為高電平,其他的 GPIO 接口類似,timer 會在 1秒(os_timer_arm(&timer,1000,1);)回到timer_callback{} 函數,將 LED 狀態改變,所以 LED 便會閃動。

ESP8266 LED 閃燈程式:
#include "osapi.h"
#include "at_custom.h"
#include "user_interface.h"

#include "gpio.h"

//  計時器結構體 */
    LOCAL os_timer_t timer; 
    char led = 1; 
     
//射頻初始化函數,留空
void user_rf_pre_init(){}     


// 計時器回調函數
void timer_callback(){ 
        if(led == 1){ 
            GPIO_OUTPUT_SET(GPIO_ID_PIN(5), 0); 
            led = 0; 
        }else{ 
            GPIO_OUTPUT_SET(GPIO_ID_PIN(5), 1); 
            led = 1; 
        } 
    } 

// 初始化程式
void ICACHE_FLASH_ATTR
user_init(void)
{
    char buf[64] = {0};
    at_customLinkMax = 5;
    at_init();
    os_sprintf(buf,"compile time:%s %s",__DATE__,__TIME__);
    at_set_custom_info(buf);
    at_port_print("\r\nBugWorkShop Ready\r\n");
    at_cmd_array_regist(&at_custom_cmd[0],   sizeof(at_custom_cmd)/sizeof(at_custom_cmd[0]));

    PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U, FUNC_GPIO5);

// LED模組初始化程式
// 關閉該計時器
    os_timer_disarm(&timer);

// 配置該計時器回調函數
    os_timer_setfn(&timer,(os_timer_func_t*)timer_callback,NULL);

// 啟動該計時器
    os_timer_arm(&timer, 1000, 1);
}


操作系統:Windows 7 
開發環境:安可信(Ai-Thinker)的 IDE (整合開發環境)
原程碼:ESP8266 NONOS_SDK v2.0.0_20160810
 
安可信(Ai-Thinker)的 IDE (整合開發環境)
程式寫好後,Clean 一下項目,再編譯一下生成 0x00000.bin 和 0x10000.bin,按照基礎篇的教程將這兩個檔刷進模組,記住這裏只要刷兩個檔就可以了,所以刷寫的時候只要勾選這兩個檔前面的核取方塊,固件刷進去後斷電重新加電模組開始工作。

程式編譯完成

刷寫 ESP8266 開發板

從版本 ESP8266_NONOS_SDK_V1.5.0 起,AT 固件所需空間增大,無法再使用 4Mbit (512KB) Flash,請使用 8Mbit (1MB) 或以上容量 Flash。

2017年 2月 2日 天氣報告
氣溫:16.9@ 21:00
相對濕度:百分之 81%
天氣:多雲

沒有留言:

張貼留言