一、硬件部分
如下圖,這是我ESP-12F的電路原理圖關於LED燈的部分:
對應ESP-12F的管腳:
二、SDK版本
SDK版本(之前移植的NONOS_SDK-2.2.0版本)
https://blog.csdn.net/morixinguan/article/details/101000989
三、軟件編程與下載
一上來就要操作,不會怎麼辦,安信可官方已經提供了完善的文檔,寫得非常詳細,這點完全不擔心。
https://wiki.ai-thinker.com/esp8266/docs
我們在上門這個網站找到這個文檔,下載中文版本的。
打開這個手冊的外設驅動接口的GPIO接口部分:
通過文檔說明,我們瞭解到要利用ESP-12F驅動一個LED燈,需要完成如下步驟:
1、管腳功能選擇
2、將管腳設置爲輸出模式
3、輸出對應的電平
關於第一個,eagle_soc.h文件的這個宏可以用來實現管腳功能的選擇
#define PIN_FUNC_SELECT(PIN_NAME, FUNC) do { \
WRITE_PERI_REG(PIN_NAME, \
(READ_PERI_REG(PIN_NAME) \
& (~(PERIPHS_IO_MUX_FUNC<<PERIPHS_IO_MUX_FUNC_S))) \
|( (((FUNC&BIT2)<<2)|(FUNC&0x3))<<PERIPHS_IO_MUX_FUNC_S) ); \
} while (0)
其中參數一PIN_NAME表示管腳名稱、參數二FUNC表示管腳功能。
參考esp8266_pin_list.xls文檔描述,PIN_NAME中關於GPIO4的管腳名稱和管腳功能爲如下
#define PERIPHS_IO_MUX_GPIO4_U (PERIPHS_IO_MUX + 0x3C)
#define FUNC_GPIO4 0
根據ESP8266 SDK編程手冊關於GPIO管腳狀態的設置:
根據示例提供,下面這句話的意思是將GPIO4設置爲IO口。
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO4_U, FUNC_GPIO4);
接下來要點燈了,我們看到GPIO輸入輸出相關的宏定義:
根據前面的原理圖,我們只需要把GPIO4管腳拉低就可以點亮該管腳的LED燈啦,就是輸出一個低電平,所以我們選用的是GPIO_OUTPUT_SET這個宏定義,這個宏的意識是將相應的管腳設置爲輸出模式並輸出對應的電平。
注意區別上圖幾個參數:
1、PIN_NAME:指的是管腳名稱
2、FUNC:指的是管腳功能 功能序號-1
3、gpio_no:指的是 IO端口序號 GPIO_ID_PIN(IO端口序號)
例如GPIO14,那麼就是GPIO_ID_PIN(14)
所以設置IO爲低電平也很簡單,這裏是GPIO4。
GPIO_OUTPUT_SET(GPIO_ID_PIN(4),0);
接下來修改user_main,實現閃燈:
void ICACHE_FLASH_ATTR
delay_ms(int ms)
{
os_delay_us(ms*1000);
}
/******************************************************************************
* FunctionName : user_init
* Description : entry of user application, init user function here
* Parameters : none
* Returns : none
*******************************************************************************/
void ICACHE_FLASH_ATTR
user_init(void)
{
u8 led_status = 1;
os_printf("SDK version:%s\n", system_get_sdk_version());
os_printf("Hello Yangyuanxin\n");
os_printf("Build this SDK from 20190922\n");
//1、選中GPIO4管腳
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO4_U, FUNC_GPIO4);
//2、設置GPIO4管腳輸出高電平,先熄滅
GPIO_OUTPUT_SET(GPIO_ID_PIN(4),1);
while(1)
{
//開始進來要餵狗,防止ESP8266復位
system_soft_wdt_feed();
//設置GPIO輸出
GPIO_OUTPUT_SET(GPIO_ID_PIN(4),led_status);
//狀態取反
led_status = ! led_status ;
//延時200ms
delay_ms(200);
}
}
編譯完成後將生成的文件下載到ESP-12F開發板中。
可以看到,開發板上的LED燈每200ms會翻轉一次:
串口輸出,默認波特率爲74800。
工程源碼下載:
鏈接:https://pan.baidu.com/s/1TbrLJ7R_3g0CBshsU6Aa_A
提取碼:jfj7