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); }
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"); } }
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); }