ESP8266學(xué)習(xí)筆記(三)

上一次講了ESP8266這塊芯片的深度開發(fā)的準(zhǔn)備工作和有關(guān)編譯指導(dǎo)文件makefile的一些要點(diǎn)肥荔,那么這一次就來(lái)講講關(guān)于SDK的正式開發(fā)吧。

程序入口
app.png

首先谒拴,在工程文件夾下找到app文件夾串结,再打開user文件夾蒿柳,如上圖所示阵难,從user文件夾中找到user_main.c這個(gè)文件岳枷,這就是我們程序的主程序了。打開文件呜叫,找到user_init()空繁,這就是我們程序的入口函數(shù)了(SDK1.5版本以上的還有user_rf_pre_init()這個(gè)函數(shù),不過(guò)我們的主程序還是在user_init()里面編輯就好朱庆,user_rf_pre_init()這個(gè)函數(shù)可以留空函數(shù))盛泡。

串口設(shè)置

串口調(diào)試可以說(shuō)是SDK開發(fā)的一個(gè)必要環(huán)節(jié),只有通過(guò)串口通訊環(huán)節(jié)娱颊,我們才有了和芯片溝通的能力傲诵,所以串口設(shè)置是我比較推薦在user_init()里面最先編寫的部分。下面是幾個(gè)常用函數(shù):

  • void uart_init(UartBautRate uart0_br, UartBautRate uart1_br)
    功能:雙 uart 模式维蒙,兩個(gè) uart 波特率初始化掰吕;
    ESP8266有兩個(gè)串口通道果覆,第一個(gè)參數(shù)是uart0的波特率颅痊,第一個(gè)參數(shù)是uart1的波特率,芯片默認(rèn)的波特率是78840局待,我建議是改成115200或者9600這兩個(gè)使用率比較高的波特率斑响,當(dāng)然你用其他的波特率也可以菱属,只要你所設(shè)置的和你的串口調(diào)試工具中的設(shè)置能對(duì)應(yīng)起來(lái)就行。
  • void uart0_sendStr(const char *str)
    功能:通過(guò) UART0 發(fā)送用戶自定義數(shù)據(jù)舰罚;
    由于我用的是ESP8266-01的板纽门,它默認(rèn)引出來(lái)的串口就是uart0,所以我的串口打印數(shù)據(jù)就用這個(gè)函數(shù)营罢,參數(shù)可以直接輸入字符串赏陵,十分方便。

IO口設(shè)置

  • void gpio_output_set(uint32 set_mask, uint32 clear_mask, uint32 enable_mask,
    uint32 disable_mask)
    功能:設(shè)置 gpio 口屬性
    例子:
    設(shè)置 GPIO12 輸出高電平饲漾,則:gpio_output_set(BIT12, 0, BIT12, 0);
    設(shè)置 GPIO12 輸出低電平蝙搔,則:gpio_output_set(0, BIT12, BIT12, 0);
    設(shè)置 GPIO12 輸出高電平,GPIO13 輸出低電平考传,則:gpio_output_set(BIT12,BIT13, BIT12|BIT13, 0);
    設(shè)置 GPIO12 為輸入吃型,則 gpio_output_set(0, 0, 0, BIT12);
  • void gpio_pin_intr_state_set(uint32 i, GPIO_INT_TYPE intr_state)
    功能:設(shè)置 gpio 腳中斷觸發(fā)狀態(tài)
    輸入?yún)?shù):
    uint32 i——GPIO 管腳 ID,如需設(shè)置 GPIO14僚楞,則為 GPIO_ID_PIN(14)勤晚;
    GPIO_INT_TYPE intr_state——中斷觸發(fā)狀態(tài)
    其中:
    typedef enum{
    GPIO_PIN_INTR_DISABLE = 0, (不觸發(fā)中斷)
    GPIO_PIN_INTR_POSEDGE= 1,(上升沿觸發(fā))
    GPIO_PIN_INTR_NEGEDGE= 2,(下降沿觸發(fā))
    GPIO_PIN_INTR_ANYEGDE=3,
    GPIO_PIN_INTR_LOLEVEL= 4, (低電平觸發(fā))
    GPIO_PIN_INTR_HILEVEL = 5,(高電平觸發(fā))
    }GPIO_INT_TYPE;
  • GPIO_OUTPUT_SET(gpio_no, bit_value)
    設(shè)置 gpio_no 管腳輸出 bit_value,同上述例子中輸出高低電平的功能泉褐。
  • GPIO_DIS_OUTPUT(gpio_no)
    設(shè)置 gpio_no 管腳為輸入赐写,同上述例子中輸入。
  • GPIO_INPUT_GET(gpio_no)
    獲取 gpio_no 管腳的電平狀態(tài)膜赃。

例子

如果我們要使用GPIO12這個(gè)IO口血淌,只需要配置以下幾步
// Use MTDI pin as GPIO12.
PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U, FUNC_GPIO12);
//輸出高電平
GPIO_OUTPUT_SET(FUNC_GPIO12, 1);
//配置輸入
GPIO_DIS_OUTPUT(FUNC_GPIO12);
//獲得GPIO電平
uin16 status=GPIO_INPUT_GET(FUNC_GPIO12);
//配置GPIO中斷處理函數(shù):
ETS_GPIO_INTR_ATTACH(func, arg)
使用方法:先定義一個(gè)GPIO中斷處理函數(shù)财剖,arg如果沒有參數(shù)直接輸入NULL
void GPIO_INTER(void)
{
......//這一部分可以加入自己想要響應(yīng)中斷的函數(shù)悠夯;
在 GPIO 中斷處理函數(shù)內(nèi),需要做如下操作來(lái)清除響應(yīng)位的中斷狀態(tài):
uint32 gpio_status;
gpio_status = GPIO_REG_READ(GPIO_STATUS_ADDRESS);
//clear interrupt status
GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS, gpio_status);
}
ETS_GPIO_INTR_ATTACH(GPIO_INTER, NULL); //注冊(cè) GPIO 中斷處理函數(shù)

WIFI設(shè)置

由于ESP8266是一塊wifi芯片躺坟,所以wifi的配置是少不了的沦补。
芯片的wifi工作模式有以下三種:

  1. STATION_MODE(客戶端模式,也就是主動(dòng)去連接路由器)
  2. SOFTAP_MODE(服務(wù)器模式咪橙,也就是可以充當(dāng)路由器夕膀,等其他設(shè)備連接)
  3. STATIONAP_MODE(主從一體模式,也就是俗稱的wifi中繼功能)

常用的函數(shù)是下列幾個(gè):

  • wifi_get_opmode(void)
    功能:獲取 wifi 工作模式美侦;
    wifi 工作模式产舞,其中 0x01 時(shí)為 STATION_MODE,0x02 時(shí)為 SOFTAP_MODE菠剩,
    0x03 時(shí)為 STATIONAP_MODE易猫。
  • wifi_set_opmode(uint8 opmode)
    功能:設(shè)置 wifi 工作模式為 STATION、SOFTAP具壮、STATION+SOFTAP
    其中 STATION_MODE 為 0x01准颓,SOFTAP_MODE 為 0x02哈蝇,STATIONAP_MODE 為0x03。
  • wifi_station_set_config(struct station_config *config)
    功能:設(shè)置 wifi 的 station 接口參數(shù)攘已。
    其中炮赦,參數(shù)中結(jié)構(gòu)體定義如下:
    struct station_config {
    uint8 ssid[32];
    uint8 password[64];
    };

以下為wifi配置的例子,只需修改SSID和PASSWORD即可工作:

<pre><code>user_set_station_config(void)
{

// Wifi configuration 

char ssid[32] = SSID;   //SSID為輸入的你的路由名稱

char password[64] = PASSWORD;  //PASSWORD為輸入的wifi密碼

struct station_config stationConf; 

//need not mac address
stationConf.bssid_set = 0; 

//Set ap settings 

os_memcpy(&stationConf.ssid, ssid, 32); 

os_memcpy(&stationConf.password, password, 64); 

wifi_station_set_config(&stationConf); 

//set a timer to check whether got ip from router succeed or not.

os_timer_disarm(&client_timer);

os_timer_setfn(&client_timer, (os_timer_func_t *)user_check_ip, NULL);

os_timer_arm(&client_timer, 100, 0);

}</pre></code>
在user_init()中:
<pre><code>void user_init(void)
{

//Set uart port

uart_init(115200,9600);
os_printf("SDK version:%s\n", system_get_sdk_version());

//Set station mode 
wifi_set_opmode(STATION_MODE); 

//ESP8266 connect to router
user_set_station_config();

}</pre></code>

總結(jié)

通過(guò)今天的介紹样勃,大家應(yīng)該已經(jīng)了解了SDK的基礎(chǔ)工作函數(shù)了吠勘,而我們的ESP8266已經(jīng)可以順利地連上路由器了,當(dāng)然連上路由器僅僅是基礎(chǔ)峡眶,關(guān)于后續(xù)的網(wǎng)絡(luò)通訊開發(fā)我們下次再敘看幼。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市幌陕,隨后出現(xiàn)的幾起案子诵姜,更是在濱河造成了極大的恐慌,老刑警劉巖搏熄,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件棚唆,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡心例,警方通過(guò)查閱死者的電腦和手機(jī)宵凌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)止后,“玉大人瞎惫,你說(shuō)我怎么就攤上這事∫胫辏” “怎么了瓜喇?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)歉糜。 經(jīng)常有香客問我乘寒,道長(zhǎng),這世上最難降的妖魔是什么匪补? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任伞辛,我火速辦了婚禮,結(jié)果婚禮上夯缺,老公的妹妹穿的比我還像新娘蚤氏。我一直安慰自己,他們只是感情好踊兜,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布竿滨。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪姐呐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天典蝌,我揣著相機(jī)與錄音曙砂,去河邊找鬼。 笑死骏掀,一個(gè)胖子當(dāng)著我的面吹牛鸠澈,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播截驮,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼笑陈,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了葵袭?” 一聲冷哼從身側(cè)響起涵妥,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎坡锡,沒想到半個(gè)月后蓬网,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鹉勒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年帆锋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片禽额。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡锯厢,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出脯倒,到底是詐尸還是另有隱情实辑,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布藻丢,位于F島的核電站徙菠,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏郁岩。R本人自食惡果不足惜婿奔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望问慎。 院中可真熱鬧萍摊,春花似錦、人聲如沸如叼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至踊沸,卻和暖如春歇终,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背逼龟。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工评凝, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人腺律。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓奕短,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親匀钧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子翎碑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容

  • 其實(shí)這篇文章主要是介紹自己為其寫的GPIO庫(kù),自己借鑒了原子寫的STM32,野火寫的K60,還有LPC官方庫(kù),然后...
    楊奉武閱讀 752評(píng)論 0 0
  • 有一次做一個(gè)東西,為了盡量不占用CPU的處理數(shù)據(jù)時(shí)間,所以就使用DMA接收串口的數(shù)據(jù),但是呢問題來(lái)了.,,,,,怎...
    楊奉武閱讀 3,128評(píng)論 0 1
  • 整體思路ESP8266作為TCP服務(wù)器,,手機(jī)作為TCP客戶端,自己使用Lua直接做到了芯片里面,省了單片機(jī),,節(jié)...
    楊奉武閱讀 5,819評(píng)論 0 5
  • 重點(diǎn)是說(shuō)SPI通信協(xié)議,,,, 不要害怕協(xié)議因?yàn)閰f(xié)議是人規(guī)定的,,剛好我也是人......規(guī)定的協(xié)議既然能成為規(guī)范...
    楊奉武閱讀 992評(píng)論 0 1
  • 等 等人 等車 在等的時(shí)間里 時(shí)間就這么毫無(wú)意義地過(guò)去了 不知道一輩子下來(lái)得花多少時(shí)間在等上
    衛(wèi)松閱讀 99評(píng)論 0 0