<noscript id="mmkmi"><source id="mmkmi"></source></noscript>
  • <noscript id="mmkmi"><kbd id="mmkmi"></kbd></noscript>
  • <table id="mmkmi"><source id="mmkmi"></source></table>
  • 基于ESP8266的外擴IO程序

    作者:新紀元 | 更新時間:2016-04-03 | 瀏覽量:3100

        我們都知道ESP8266外圍管腳資源非常有限,但是本人的項目需要通過ESP8266控制15路繼電器,如果直接采用腳對腳方式 那不可能完成的。故此 采用兩級74HC595通過三根數據線外擴16路IO

        具體電路網上一大把,我就不浪費時間(主要我是直接手動焊接,并沒有具體畫電路圖)。管腳配置如下:

        GPIO10        RCK

        GPIO12        CLK

        GPIO13        DAT

        因為本人使用軟件模擬方式,并沒有采用esp硬件SPI資源。然而通過使用官方提供的API進行通信時,通過示波器實測 CLK時鐘只有不到500KHz(沒話說),所以控制io方面直接采用控制寄存器的方式了 具體如下:

    #define GPIO_OUT_W1TS           0x60000304 /*寄存器地址*/
    #define GPIO_OUT_W1TC           0x60000308 /*寄存器地址*/
    
    /*eagle_soc.h文件中實現*/
    //#define ETS_UNCACHED_ADDR(addr) (addr)
    //#define READ_PERI_REG(addr) (*((volatile uint32_t *)ETS_UNCACHED_ADDR(addr)))
    //#define WRITE_PERI_REG(addr, val) (*((volatile uint32_t *)ETS_UNCACHED_ADDR(addr))) = (uint32_t)(val)
    
    
    #define CLK_595_SET				\
    	WRITE_PERI_REG(GPIO_OUT_W1TS,READ_PERI_REG(GPIO_OUT_W1TS) | ((uint32)1 << 12))
    #define CLK_595_RESET			\
    	WRITE_PERI_REG(GPIO_OUT_W1TC,READ_PERI_REG(GPIO_OUT_W1TC) | ((uint32)1 << 12))
    #define DAT_595_SET				\
    	WRITE_PERI_REG(GPIO_OUT_W1TS,READ_PERI_REG(GPIO_OUT_W1TS) | ((uint32)1 << 13))
    #define DAT_595_RESET			\
    	WRITE_PERI_REG(GPIO_OUT_W1TC,READ_PERI_REG(GPIO_OUT_W1TC) | ((uint32)1 << 13))
    	
    		

        部分代碼如下:

    void ICACHE_FLASH_ATTR
    writeOneByte(unsigned char dat){
    	unsigned int tmp;
    
    	for(tmp = 8; tmp; tmp--){
    		CLK_595_RESET;
    		if(dat & 0x80){
    			DAT_595_SET;
    		}else{
    			DAT_595_RESET;
    		}
    		CLK_595_SET;
    		dat <<= 1;
    	}
    	//CLK_595_RESET;
    }

    其實很簡單,稍微懂點單片機的都知道!!只是芯片不同驅動IO的方式不同罷了!如上代碼時鐘速度也僅僅達到1.1MHz左右(實測),如果想通過外擴IO方式實現一些速度要求較高的通信,建議還是放棄吧!但對于 比如我只是控制繼電器這種 外擴IO就是一種很明智的選擇了 通過兩級595就可以達到外擴16路IO了(三級3*8 = 24 。。。),另外我的GPIO12 GPIO13是跟Nokia5110屏幕公用的(通過片選選著)讓各位大神見笑了

    595.zip




    評論:共6條

    貝殼物聯 評論于:2016-04-03 09:47:59
    大神啊,還不忘謙虛,多謝分享!
    ridxqqqq 評論于:2016-04-07 20:52:06
    論壇資料好少啊 有視頻教程就好了
    新紀元 回復于:2016-04-09 02:29:03
    回復 @ridxqqqq:來到這里玩的 還有誰教啊 都是看著一手看手冊一手看例程 外設驅動是最簡單的了 只要會驅動IO 什么外設都能驅動了
    ridxqqqq 評論于:2016-04-09 16:34:45
    唉 今天總算是有了點進步 慢慢學習吧 感謝你的回復
    simonc 評論于:2016-05-11 23:54:34
    如果是用595拓展io,那么拓展的io能不能用于各種不同的傳感器呢,如果能要怎么做,感覺和液晶這類串行數據輸入的有區別
    WECAN 評論于:2017-08-27 16:01:43
    感謝樓主的分享啊!
    返回頂部
    <noscript id="mmkmi"><source id="mmkmi"></source></noscript>
  • <noscript id="mmkmi"><kbd id="mmkmi"></kbd></noscript>
  • <table id="mmkmi"><source id="mmkmi"></source></table>
  • 三上悠亚在线观看