#include #include #include #include #include #include #include const char* debug = "debug"; const char* server = "172.19.1.10"; WiFiClient espClient; PubSubClient client(espClient); ESP8266WiFiMulti wifiMulti; const char* ssid = "iot"; const char* password = "longtimeago"; uint8_t MAC_array[6]; char MAC_char[21]; char sta[23]; #include #include LiquidCrystal_I2C lcd(0x3F, 20, 4); // 103 //LiquidCrystal_I2C lcd(0x27, 20, 4); int val; char str[10]; bool backlight; bool oldbacklight; unsigned long tick = 0; char outside[10] = ""; int co = 0; int sec = 10; void numprint(int num); int level(byte* payload, unsigned int length) { if((char)payload[0]=='o' && (char)payload[1]=='n'){ return 1024; } if((char)payload[0]=='o' && (char)payload[1]=='f'){ return 0; } unsigned int i; str[0] = '0'; str[1] = '0'; str[2] = '0'; str[3] = '0'; str[4] = '\0'; for(i = 0; i < length; i++) { str[i] = (char)payload[i]; } for(i = length; i < 10; i++) { str[i] = '\0'; } return atoi(str); } void callback(char* topic, byte* payload, unsigned int length) { if(topic[1]=='l') { if(payload[0]=='0' && length==1) { backlight = false; } else { backlight = true; } lcd.setCursor(0,2); for(unsigned int a=length; a<7; a++) { lcd.print(' '); } for(unsigned int a=0; a 3) return; lcd.setCursor(12,3); for(unsigned int a=length; a<5; a++) { lcd.print(' '); } for(unsigned int a=0; a= 10000) { myprint(0, numbers[num / 10000 % 10]); } else { myprint(0, numbers[10]); } if(num >= 1000) { myprint(4, numbers[num / 1000 % 10]); } else { myprint(4, numbers[10]); } if(num >= 100) { myprint(8, numbers[num / 100 % 10]); } else { myprint(8, numbers[10]); } if(num >= 10) { myprint(12, numbers[num / 10 % 10]); } else { myprint(12, numbers[10]); } if(num >= 0) { myprint(16, numbers[num / 1 % 10]); } else { myprint(16, numbers[10]); } } void loop() { ESP.wdtFeed(); if (wifiMulti.run() == WL_CONNECTED) { yield(); } if(oldbacklight != backlight) { oldbacklight = backlight; if(backlight) { lcd.backlight(); } else { lcd.noBacklight(); } } if(client.connected()) { client.loop(); } else { client.connect(MAC_char); client.subscribe("/light"); client.subscribe("/dc4f22660be4/temperature"); client.subscribe("/dc4f22660be4/humidity"); client.subscribe("/dc4f22660be4/pressure"); client.subscribe("/sensor/0/temperature"); client.subscribe("/b4e62d675b8d/co2"); } if(millis() - tick >= 1000) { tick = millis(); sec--; if(sec<0) sec = 10; if(sec == 5) { for(int a=0; a<5; a++) { if('-' == outside[a]) { myprint(a*4, numbers[12]); } if('0' == outside[a]) { myprint(a*4, numbers[0]); } if('1' == outside[a]) { myprint(a*4, numbers[1]); } if('2' == outside[a]) { myprint(a*4, numbers[2]); } if('3' == outside[a]) { myprint(a*4, numbers[3]); } if('4' == outside[a]) { myprint(a*4, numbers[4]); } if('5' == outside[a]) { myprint(a*4, numbers[5]); } if('6' == outside[a]) { myprint(a*4, numbers[6]); } if('7' == outside[a]) { myprint(a*4, numbers[7]); } if('8' == outside[a]) { myprint(a*4, numbers[8]); } if('9' == outside[a]) { myprint(a*4, numbers[9]); } if('.' == outside[a]) { myprint(a*4, numbers[13]); a++; myprint(a*4, numbers[11]); for(a = a + 1; a<5; a++) { myprint(a*4, numbers[10]); } } } } if(sec == 0) { numprint(co); } } delay(10); ESP.wdtFeed(); ArduinoOTA.handle(); ESP.wdtFeed(); }