基于ESP8266的温湿度检测程序

作者:新纪元 | 更新时间:2016-04-02

    应网友要求,奉上自己编写的一份基于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




评论:共2条

贝壳物联 评论于:2016-04-03 09:48:44
多谢分享!慢慢学习。
WECAN 评论于:2017-08-27 16:01:56
感谢楼主的分享啊!
评论支持使用[code][/code]标签添加代码
返回顶部