<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的溫濕度檢測程序

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

        應網友要求,奉上自己編寫的一份基于AM2320溫濕度傳感器的源代碼!希望能起到舉一反三的效果。希望各位大神們輕笑、輕拍!

        AM2320,我采用的是單總線通信方式,具體電路圖如下:

    QQ圖片20160402232102.png

        采用ESP8266的GPIO0管腳 ,打開GPIO0的外部中斷功能,部分代碼如下:

    void ICACHE_FLASH_ATTR
    AM2320_interrupt(void){/*GPIO0管腳 外部中斷處理函數*/
    	unsigned int tmp = 0xFF;
    	static unsigned int index = 0;
    	static unsigned int timer[1] = {0};
    	static unsigned int AM2320_index = 0xFF;
    	static unsigned char data[5] = {0,0,0,0,0};
    
    
    	if(!index){
    		timer[0] = system_get_time();
    		index ++;
    	}else{
    		index = system_get_time();/*暫存*/
    		timer[0] = index - timer[0];
    		if(__timer_cmp(150,170,timer[0])){
    			/*響應時間*/
    			tmp = 3;
    		}else if(__timer_cmp(65,100,timer[0])){
    			/*0*/
    			tmp = 0;
    		}else if(__timer_cmp(110,145,timer[0])){
    			/*1*/
    			tmp = 1;
    		}
    
    		timer[0] = index;
    		index = 1;
    	}
    
    	switch(tmp){
    	case 3: /*響應*/
    		AM2320_index = 0;
    		break;
    	case 0: /*0*/
    	case 1: /*1*/
    		if(AM2320_index < 0xFF){
    			__Ecode(data,AM2320_index,tmp);
    			AM2320_index++;
    			if(AM2320_index == 40){
    				AM2320_index = 0;
    				for(tmp = 0;tmp < 4;tmp++){
    					AM2320_index += data[tmp];
    				}
    				if((AM2320_index & 0xFF) == data[4]){
    					for(tmp = 0;tmp < 5;tmp++)
    					{
    						Sensor_Data[tmp] = data[tmp];
    					}
    				}
    				AM2320_index = 0xFF;
    			}
    		}
    		break;
    	}
    }
    
    
    /*獲取數據 刷新函數 通過調用此函數 來觸發一次am2320溫濕度傳感器的通信*/
    void ICACHE_FLASH_ATTR
    AM2320_upData(void){/*獲取溫濕度數據  每隔3毫秒調用一次*/
    	static unsigned int timer_counter = 0;
    	static unsigned int index = 0;
    //	Read_Sensor();
    	timer_counter++;
      if(((timer_counter * AM2320_UPDATA_TIMER) >= AM2320_GETDATA_TIMER)
    		|| (index)){
    		if(!index){
    			timer_counter = 0;
    			index++;
    
    			PIN_PULLUP_EN(PERIPHS_IO_MUX_GPIO0_U);/*使能上拉*/
    			GPIO_OUTPUT_SET(GPIO_ID_PIN(0), 0);
    		}else{
    			index = 0;
    		  GPIO_OUTPUT_SET(GPIO_ID_PIN(0), 1);
    		  GPIO_DIS_OUTPUT(GPIO_ID_PIN(0));/*配置為輸入*/
    		}
    	}
    
    }


        本人語言水平有限,就直接奉上源碼了

    am2320.zip




    評論:共3條

    貝殼物聯 評論于:2016-04-03 09:48:44
    多謝分享!慢慢學習。
    WECAN 評論于:2017-08-27 16:01:56
    感謝樓主的分享啊!
    zjnbzm 評論于:2020-01-07 11:36:57
    謝謝分享。。。。。。。。。。
    返回頂部
    <noscript id="mmkmi"><source id="mmkmi"></source></noscript>
  • <noscript id="mmkmi"><kbd id="mmkmi"></kbd></noscript>
  • <table id="mmkmi"><source id="mmkmi"></source></table>
  • 三上悠亚在线观看