Exemplo n.º 1
0
void dht11_update(void)
{
              int flag = 1;
            unsigned char dat1, dat2, dat3, dat4, dat5, ck;
	    //主机拉低18ms 
            COM_CLR;
          
	    DelaymS(18);
	    //COM_IN;
	    COM_SET;
            flag = 0;
	    while (COM_R && ++flag);
            if (flag == 0) return;
            
	    //总线由上拉电阻拉高 主机延时20us
	    //主机设为输入 判断从机响应信号  
	    //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行	  	    
            flag = 0;
             while (!COM_R && ++flag);
             if (flag == 0) return;
             flag = 0;
             while (COM_R && ++flag);
             if (flag == 0) return;
                  
             
             dat1 = dht11_read_byte();

             dat2 = dht11_read_byte();

             dat3 = dht11_read_byte();
              
    
             dat4 = dht11_read_byte();
              
   
             dat5 = dht11_read_byte();           
                  
              
             ck = dat1 + dat2 + dat3 + dat4;
              
             if (ck == dat5) {
                sTemp = dat3;
                sHumidity = dat1;        
             }
             
#if 1
      //       printf("%02x, %02x, %02x, %02x %02x\r\n", 
      //               dat1, dat2, dat3, dat4, dat5);
             printf("湿度: %u%% 温度: %u℃ \r\n", dat1, dat3);
             gdat1=dat1;
             gdat2=dat3;
#endif	   
}
Exemplo n.º 2
0
int JSON_RPC(read)(jsmn_node_t* pjn, fp_json_delegate_ack ack, void* ctx)	//继承于fp_json_delegate_start
{
	int ret = STATE_OK;
	char* err_msg = NULL;

	LOG_INFO("DELEGATE dht11.read.\r\n");


/*
{
	"method":"dht11.read",
	"params":{}
}
*/

	//----温度高8位== U8T_data_H------
	//----温度低8位== U8T_data_L------
	//----湿度高8位== U8RH_data_H-----
	//----湿度低8位== U8RH_data_L-----
	//----校验 8位 == U8checkdata-----
	u8_t temp_h, temp_l, humi_h, humi_l, chk;


	if(STATE_OK != (ret = dht11_start()) ||
		STATE_OK != (ret = dht11_read_byte(&humi_h))||
		STATE_OK != (ret = dht11_read_byte(&humi_l))||
		STATE_OK != (ret = dht11_read_byte(&temp_h))||
		STATE_OK != (ret = dht11_read_byte(&temp_l))||
		STATE_OK != (ret = dht11_read_byte(&chk)))
		{}


	dht11_stop();

	if(STATE_OK != ret){
		err_msg = "read time out.";
		LOG_WARN("dht11:%s %d.\r\n", err_msg, ret);
		goto exit_err;
	}

	if(chk != temp_h+temp_l+humi_h+humi_l){
		ret = STATE_ERROR;
		err_msg = "checksum err.";
		LOG_WARN("dht11:%s.\r\n", err_msg);
		goto exit_err;
	}


	if(ack){
		char json[128];
		u32_t n = 0;
		n += _snprintf(json+n, sizeof(json)-n, "{\"result\":{\"temperature\":%u.%u,\"humidity\":%u.%u}}",temp_h, temp_l, humi_h, humi_l); 
		jsmn_node_t jn = {json, n, NULL};
		ack(&jn, ctx);	//这里对json请求 回应json
	}
	return ret;


//exit_safe:
	if(ack)
		jsmn.delegate_ack_result(ack, ctx, ret);	
	return ret;

exit_err:
	if(ack)
		jsmn.delegate_ack_err(ack, ctx, ret, err_msg);
	return ret;
}