LOCAL void ICACHE_FLASH_ATTR dht22_cb(void *arg)
{
	static uint8_t i;
	DHT_Sensor_Data data;
	uint8_t pin;
	os_timer_disarm(&dht22_timer);
#if 0
	// One DHT22 sensor
	pin = pin_num[sensor.pin];
	if (DHTRead(&sensor, &data))
	{
	    char buff[20];
	    console_printf("GPIO%d\r\n", pin);
	    console_printf("Temperature: %s *C\r\n", DHTFloat2String(buff, data.temperature));
	    console_printf("Humidity: %s %%\r\n", DHTFloat2String(buff, data.humidity));
	} else {
		console_printf("Failed to read temperature and humidity sensor on GPIO%d\n", pin);
	}
#else
	// Two DHT22 sensors
	for (i = 0; i < DHT_NUMBER_OF_SENSORS; i++)
	{
	    pin = pin_num[sensors[i].pin];
		if (DHTRead(&sensors[i], &data))
		{
		    char buff[20];
		    console_printf("GPIO%d\r\n", pin);
		    console_printf("Temperature: %s *C\r\n", DHTFloat2String(buff, data.temperature));
		    console_printf("Humidity: %s %%\r\n", DHTFloat2String(buff, data.humidity));
		    console_printf("--------------------\r\n");
		} else {
			console_printf("Failed to read temperature and humidity sensor on GPIO%d\n", pin);
		}
	}
#endif
	os_timer_arm(&dht22_timer, DELAY, 1);
}
LOCAL void ICACHE_FLASH_ATTR dht22_cb(void *arg)
{
	static char data[256];
	static char temp_str[10];
	static char hum_str[10];
	struct dht_sensor_data* r;
	static int lastTemp, lastHum;

	os_timer_disarm(&dht22_timer);
	switch(connState)
	{
		case WIFI_CONNECTED:
			r = DHTRead();
			if(r->success)
			{
				int temp = (int)(r->temperature * 10);
				int hum = (int)(r->humidity * 10);
				os_sprintf(temp_str, "%d.%d",(int)(temp / 10), temp - ((int)(temp / 10)) * 10);
				os_sprintf(hum_str, "%d.%d",(int)(hum / 10), hum - ((int)(hum / 10)) * 10);
				os_printf("Temperature: %s *C, Humidity: %s %%\r\n", temp_str, hum_str);

				if (lastTemp != temp || lastHum != hum)
				{
					lastTemp = temp;
					lastHum = hum;
					wifi_get_ip_info(STATION_IF, &ipConfig);
					os_sprintf(data,
							"{\"mode\":\"sync\",\"messageType\":\"%s\",\"messages\":[{"
								"\"Humidity\": %s,"
								"\"Temperature\": %s"
							"}]}",
							HCP_MESSAGETYPE, hum_str, temp_str);
					hcp_send(HCP_ACCOUNT, HCP_LANDSCAPEHOST, HCP_DEVICEID, HCP_DEVICETOKEN, data, hcp_callback);
				} else {
					os_printf("No changes since last reading.\r\n");
				}
			} else {
				os_printf("Error reading temperature and humidity.\r\n");
			}
			break;
		default:
			os_printf("WiFi not connected...\r\n");
	}
	os_timer_setfn(&dht22_timer, (os_timer_func_t *)dht22_cb, (void *)0);
	os_timer_arm(&dht22_timer, DATA_SEND_DELAY, 1);
}
Beispiel #3
0
LOCAL void ICACHE_FLASH_ATTR dht22_cb(void *arg)
{
	struct dht_sensor_data* r = DHTRead();
	int tempLength=0;
	int humLength=0;
	float lastTemp = r->temperature;
	float lastHum = r->humidity;
	if(r->success&&lastTemp>-30&&lastHum>0)
	{
		//TRANSFORMATION HERE
		console_printf("DHT22/Temperature: %d.%d *C, Humidity: %d.%d %%\r\n", (int)(lastTemp),(int)((lastTemp - (int)lastTemp)*100), (int)(lastHum),(int)((lastHum - (int)lastHum)*100));
		os_sprintf(DHT22_Temperature,"%d.%d", (int)(lastTemp),(int)((lastTemp - (int)lastTemp)*100));
		os_sprintf(DHT22_Humidity,"%d.%d", (int)(lastHum),(int)((lastHum - (int)lastHum)*100));
		if(lastTemp>=0) {
			if(lastTemp>9)
				tempLength=4;
			 else
				tempLength=3;
		} else tempLength=5; // assumption - bathroom temperature should not fall under -9 :P
		if(lastHum>9) humLength=2;
			else if (lastHum==100) humLength=3;
				else humLength=1;
		// MQTT PUBLISH HERE
		MQTT_Publish(&mqttClient,DHT22_MQTT_Temperature,DHT22_Temperature,tempLength,0,0);
		MQTT_Publish(&mqttClient,DHT22_MQTT_Humidity,DHT22_Humidity,humLength,0,0);
		// MANUAL MODE LOGICS HERE
		if (dDEVICE_MODE){
			// maintain currently set humidity
			if(lastHum<dBR_HUMIDITY_SET&&GPIO_INPUT_GET(PIN_GPIO5)&&!GPIO_INPUT_GET(PIN_GPIO13)) {
				GPIO_OUTPUT_SET(PIN_GPIO5, 0);
			} else if ((lastHum>dBR_HUMIDITY_SET+7)&&!GPIO_INPUT_GET(PIN_GPIO5)) {
				GPIO_OUTPUT_SET(PIN_GPIO5,1);
			}
			// maintain currently set bathroom temperature
			if(lastTemp>=dBR_TEMP_ROOM_SET&&GPIO_INPUT_GET(PIN_GPIO12)){
				GPIO_OUTPUT_SET(PIN_GPIO12,0);
			} else if ((lastTemp<dBR_TEMP_ROOM_SET-1)&&!GPIO_INPUT_GET(PIN_GPIO12)) {
				GPIO_OUTPUT_SET(PIN_GPIO12,1);
			}
		}
	}
	else
	{
		console_printf("Error reading temperature and humidity\r\n");
	}
}
Beispiel #4
0
LOCAL void ICACHE_FLASH_ATTR dhtCb(void *arg)
{
	static char data[256];
	static char temp[10];
	static char hum[10];
	uint8_t status;
	os_timer_disarm(&dhtTimer);
	struct dht_sensor_data* r = DHTRead();
	float curTemp = r->humidity;
	float curHum = r->temperature;
	//static float lastTemp;
	//static float lastHum;
	//uint8_t topic[32];
	if(r->success)
	{
		os_sprintf(temp, "1-%d.%d",(int)(curTemp),(int)((curTemp - (int)curTemp)*100));
		os_sprintf(hum, "1-%d.%d",(int)(curHum),(int)((curHum - (int)curHum)*100));
		INFO("Temperature: %s *C, Humidity: %s %%\r\n", temp, hum);
		if (mqttClient.connState == MQTT_DATA) {
			//os_sprintf(topic, "%s%s", config.mqtt_topic, "temperature");
			MQTT_Publish(&mqttClient, topic_temp, temp, strlen(temp), 0, 0);
			//lastTemp = curTemp;
		}
		if (mqttClient.connState == MQTT_DATA) {
			//os_sprintf(topic, "%s%s", config.mqtt_topic, "humidity");
			MQTT_Publish(&mqttClient, topic_hum, hum, strlen(hum), 0, 0);
			//lastHum = curHum;
		}
	}
	else
	{
		INFO("Error reading temperature and humidity.\r\n");
	}


	os_timer_setfn(&dhtTimer, (os_timer_func_t *)dhtCb, (void *)0);
	os_timer_arm(&dhtTimer, DELAY, 1);
}
void ICACHE_FLASH_ATTR get_dht11(uint8_t *bufftemperature,
		uint8_t *buffhumidity) {
	DHT_Sensor_Data data;
	uint8_t pin;
	pin = pin_num[sensor.pin];
	if (DHTRead(&sensor, &data)) {
#ifdef MENJINDEBUG
		os_printf("GPIO%d\r\n", pin);
		os_printf("Temperature: %s *C\r\n",
				DHTFloat2String(bufftemperature, data.temperature));
#endif
		DHTFloat2String(bufftemperature, data.temperature);
#ifdef MENJINDEBUG
		os_printf("Humidity: %s %%\r\n",
				DHTFloat2String(buffhumidity, data.humidity));
#endif
		DHTFloat2String(buffhumidity, data.humidity);
#ifdef ESP8266OLED
		OLED_Print(2, 7, combine_env_strings(bufftemperature, buffhumidity), 1);
#endif
		if (lasthumidity != data.humidity
				|| lasttemperature != data.temperature)
			isNeedSendENV = true;
		else
			isNeedSendENV = false;
		lasttemperature = data.temperature;
		lasthumidity = data.humidity;
	} else {
#ifdef MENJINDEBUG
		os_printf("Failed to read temperature and humidity sensor on GPIO%d\n",
				pin);
#endif
	}
	os_free(data);
	os_free(pin);
}