Esp8266進(jìn)階之路16 esp8266的 基于Nonos移植紅外線H1838胆绊,實(shí)現(xiàn)紅外遙控器配網(wǎng),遠(yuǎn)程控制一盞燈欧募。(附帶固件)



一躬贡、前言谆奥。

距離上篇的8266進(jìn)階博文有那么一段時(shí)間了眼坏,那么本文帶來(lái)的是基于Nonos的紅外線H1838的NEC協(xié)議的移植小案例拂玻,瀏覽博文前,需要知道以下常識(shí):

  • 1宰译、 紅外遙控的原理是什么檐蚜?
  • 2、紅外遙控的協(xié)議有哪些沿侈?NEC闯第?
  • 3、紅外遙控的電路組成缀拭?8266的最小系統(tǒng)搭搭建咳短!

  • 這里寫圖片描述

二、本博文實(shí)現(xiàn)的現(xiàn)象蛛淋。


1. 實(shí)現(xiàn)的現(xiàn)象咙好;


遙控器來(lái)控制三盞燈的亮滅情況,同時(shí)用遙控器進(jìn)去配網(wǎng)模式褐荷,使8266進(jìn)去一鍵配網(wǎng)模式勾效!<font color = red >有些人問(wèn)我的這個(gè)哪里買的,本文購(gòu)買的紅外線整套元器件,博文后面有某寶購(gòu)買鏈接层宫。

  • 三盞燈(紅燈杨伙、綠燈、藍(lán)燈)萌腿,分別連接8266的 <font color = red >GPIO12限匣、GPIO13、GPIO15哮奇;

  • 紅外接收模塊1883的輸出端接8266的 <font color = red >GPIO14</font> 膛腐,其余看圖接 !


這里寫圖片描述

2. 使用說(shuō)明鼎俘;


這里寫圖片描述

3. 遙控器對(duì)應(yīng)的碼值哲身;


  • 下面僅僅列了本文所需的按鍵的鍵值,其他請(qǐng)自行查詢贸伐;

按鍵 鍵值
1 0x45
2 0x46
3 0x47
9 0x09
# 0x0d

三勘天、esp8266的GPIO口中斷使用。


  • 接收短腳使用官方推薦的GPIO14 捉邢,見(jiàn)下圖脯丝;

這里寫圖片描述

  • GPIO14中斷初始化 ;

    //中斷停止
    ETS_GPIO_INTR_DISABLE();
    //設(shè)置中斷回調(diào)函數(shù)
    ETS_GPIO_INTR_ATTACH(hongwai, NULL);
    //設(shè)置短腳14伏伐,低電平觸發(fā)宠进;
    gpio_pin_intr_state_set(GPIO_ID_PIN(14), GPIO_PIN_INTR_LOLEVEL);
    //中斷使能
    ETS_GPIO_INTR_ENABLE();

四、中斷回調(diào)函數(shù)藐翎。


  • 見(jiàn)下圖可見(jiàn) (圖片來(lái)自網(wǎng)絡(luò))材蹬, 當(dāng)GPIO14為低電平時(shí)候,說(shuō)明有信號(hào)過(guò)來(lái)了吝镣,所以我們上面代碼設(shè)置為低電平觸發(fā)中斷回調(diào)堤器,進(jìn)一步的剖析電平狀態(tài):

這里寫圖片描述

    //開(kāi)始判斷是否為NEC波形引導(dǎo)碼的前9MS和后4.5MS
    uint32 gpio_status = GPIO_REG_READ(GPIO_STATUS_ADDRESS);

    if (gpio_status & BIT(hwx)) {
        GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS, gpio_status & BIT(hwx));
        gpio_pin_intr_state_set(GPIO_ID_PIN(hwx), GPIO_PIN_INTR_DISABLE);
    }

    //計(jì)數(shù)時(shí)間清0
    while (!GPIO_INPUT_GET(hwx)) {
        os_delay_us(100);
        ly_ct++;
    }
    if (ly_ct < 80 || ly_ct > 100) {
        gpio_pin_intr_state_set(GPIO_ID_PIN(hwx), 4);
        return;
    }

    //NEC引導(dǎo)碼前9MS,ly_ct約等于90,給個(gè)誤差值末贾,用80-100之間來(lái)判斷
    ly_ct = 0;
    while (GPIO_INPUT_GET(hwx)) {
        os_delay_us(100);
        ly_ct++;
    }
    if (ly_ct < 40 || ly_ct > 50) {
        gpio_pin_intr_state_set(GPIO_ID_PIN(hwx), 4);
        return;
    }

    //NEC引導(dǎo)碼引導(dǎo)碼的后4.5MS闸溃,ly_ct約45
    for (i = 0; i < 4; i++) {
        for (ia = 0; ia < 8; ia++) {

            while (!GPIO_INPUT_GET(hwx));
            ly_ct = 0;
            while (GPIO_INPUT_GET(hwx)) {
                os_delay_us(100);
                ly_ct++;
            }
            if (ly_ct > 20) {
                gpio_pin_intr_state_set(GPIO_ID_PIN(hwx), 4);
                return;
            }
            ly_lhj[i] >>= 1;
            if (ly_ct > 10)
                ly_lhj[i] |= 0x80; //時(shí)間量TH1高于10,即高于1MS判斷為1
        }
    }

    //ly_lhj[2]就是我們要的數(shù)據(jù)拱撵,因?yàn)閿?shù)組第3個(gè)就是上面的第三個(gè)數(shù)據(jù)碼
    
    //重新設(shè)置中斷
    gpio_pin_intr_state_set(GPIO_ID_PIN(hwx), GPIO_PIN_INTR_LOLEVEL);

五辉川、LED初始化以及回調(diào)函數(shù)。


    //LED初始化拴测,默認(rèn)全部滅
    
    PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDO_U, FUNC_GPIO15);
    GPIO_OUTPUT_SET(GPIO_ID_PIN(15), 1);

    PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTCK_U, FUNC_GPIO13);
    GPIO_OUTPUT_SET(GPIO_ID_PIN(13), 1);

    PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTDI_U, FUNC_GPIO12);
    GPIO_OUTPUT_SET(GPIO_ID_PIN(12), 1);

    //因?yàn)橹甘緹羰沁B接到GPIO2乓旗,所以把其滅掉,否則會(huì)常亮昼扛;我也不知道為啥會(huì)常亮
    PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_GPIO2);
    GPIO_OUTPUT_SET(GPIO_ID_PIN(2), 1);

  • 回調(diào)函數(shù):

  • <font color=red> 特別強(qiáng)調(diào)的是:1-9-1-9-1 才進(jìn)去一鍵配網(wǎng)等待寸齐,我這利用一個(gè)標(biāo)志位scFlag自加來(lái)做欲诺,當(dāng)進(jìn)去配網(wǎng)模式,全部燈會(huì)先亮再滅再亮渺鹦!


static int scFlag = 0;

    char tempData[8];
    os_sprintf(tempData, "%s", data);
    os_printf("redCallBackFun  : %s\n", tempData);
    os_printf("redCallBackFun scFlag : %d\n", scFlag);

    //鍵值判斷
    if (os_strcmp(tempData, "45") == 0) {
        GPIO_OUTPUT_SET(GPIO_ID_PIN(12), 0);
        GPIO_OUTPUT_SET(GPIO_ID_PIN(13), 1);
        GPIO_OUTPUT_SET(GPIO_ID_PIN(15), 1);
        scFlag++;
        if (scFlag == 2 || scFlag == 4) {
            scFlag = 0;
        }
    } else if (os_strcmp(tempData, "46") == 0) {
        GPIO_OUTPUT_SET(GPIO_ID_PIN(13), 0);
        GPIO_OUTPUT_SET(GPIO_ID_PIN(12), 1);
        GPIO_OUTPUT_SET(GPIO_ID_PIN(15), 1);
        scFlag = 0;
    } else if (os_strcmp(tempData, "47") == 0) {
        GPIO_OUTPUT_SET(GPIO_ID_PIN(15), 0);
        GPIO_OUTPUT_SET(GPIO_ID_PIN(12), 1);
        GPIO_OUTPUT_SET(GPIO_ID_PIN(13), 1);
        scFlag = 0;
    } else if (os_strcmp(tempData, "9") == 0) {
        GPIO_OUTPUT_SET(GPIO_ID_PIN(12), 1);
        GPIO_OUTPUT_SET(GPIO_ID_PIN(13), 1);
        GPIO_OUTPUT_SET(GPIO_ID_PIN(15), 1);
        scFlag++;
        if (scFlag == 1 || scFlag == 3 || scFlag == 5) {
            scFlag = 0;
        }
    } else if (os_strcmp(tempData, "d") == 0) {
        scFlag = 0;
        GPIO_OUTPUT_SET(GPIO_ID_PIN(12), 0);
        GPIO_OUTPUT_SET(GPIO_ID_PIN(13), 0);
        GPIO_OUTPUT_SET(GPIO_ID_PIN(15), 0);
    }

    //標(biāo)志位為5扰法,說(shuō)明進(jìn)去一鍵配網(wǎng)等待,燈光閃爍
    if (scFlag == 5) {
        scFlag = 0;

        GPIO_OUTPUT_SET(GPIO_ID_PIN(12), 1);
        GPIO_OUTPUT_SET(GPIO_ID_PIN(13), 1);
        GPIO_OUTPUT_SET(GPIO_ID_PIN(15), 1);
        os_delay_us(60000);
        GPIO_OUTPUT_SET(GPIO_ID_PIN(12), 0);
        GPIO_OUTPUT_SET(GPIO_ID_PIN(13), 0);
        GPIO_OUTPUT_SET(GPIO_ID_PIN(15), 0);
        os_delay_us(60000);
        GPIO_OUTPUT_SET(GPIO_ID_PIN(12), 1);
        GPIO_OUTPUT_SET(GPIO_ID_PIN(13), 1);
        GPIO_OUTPUT_SET(GPIO_ID_PIN(15), 1);

        os_printf("----------開(kāi)始進(jìn)去SmartConfig配網(wǎng) \n\n-----");
        smartconfig_init();
    }


六毅厚、編譯燒錄固件塞颁。


  • 編譯成功;

這里寫圖片描述

  • 燒錄吸耿,注意我使用的是4M flash的8266-12f 祠锣,也就是4*8 =32Mbit的size;

這里寫圖片描述

  • 串口打友拾病:
這里寫圖片描述

七伴网、后記;



?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末澡腾,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子糕珊,更是在濱河造成了極大的恐慌动分,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件红选,死亡現(xiàn)場(chǎng)離奇詭異澜公,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)喇肋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門坟乾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人苟蹈,你說(shuō)我怎么就攤上這事糊渊∮液耍” “怎么了慧脱?”我有些...
    開(kāi)封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)贺喝。 經(jīng)常有香客問(wèn)我菱鸥,道長(zhǎng),這世上最難降的妖魔是什么躏鱼? 我笑而不...
    開(kāi)封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任氮采,我火速辦了婚禮,結(jié)果婚禮上染苛,老公的妹妹穿的比我還像新娘鹊漠。我一直安慰自己主到,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布躯概。 她就那樣靜靜地躺著登钥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪娶靡。 梳的紋絲不亂的頭發(fā)上牧牢,一...
    開(kāi)封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音姿锭,去河邊找鬼塔鳍。 笑死,一個(gè)胖子當(dāng)著我的面吹牛呻此,可吹牛的內(nèi)容都是我干的轮纫。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼焚鲜,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蜡感!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起恃泪,我...
    開(kāi)封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤郑兴,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后贝乎,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體情连,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年览效,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了却舀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡锤灿,死狀恐怖挽拔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情但校,我是刑警寧澤螃诅,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站状囱,受9級(jí)特大地震影響术裸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜亭枷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一袭艺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧叨粘,春花似錦猾编、人聲如沸瘤睹。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)默蚌。三九已至,卻和暖如春苇羡,著一層夾襖步出監(jiān)牢的瞬間绸吸,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工设江, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留锦茁,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓叉存,卻偏偏與公主長(zhǎng)得像码俩,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子歼捏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

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