#include #include #include #include // New instance of WifiJson, silent is false, it will log to the M5Stacks screen WifiJson wifi(false); HTTPClient http; StaticJsonDocument<1000> data; char *jsonRes; // 'ram', 15x10px const unsigned char ram [] PROGMEM = { 0xff, 0x7f, 0x01, 0x40, 0x6d, 0x5b, 0x6d, 0x5b, 0x6d, 0x5b, 0x6d, 0x5b, 0x01, 0x40, 0xc1, 0x41, 0x55, 0x55, 0x7f, 0x7f }; // 'hdd', 14x12px const unsigned char hdd[] = { 0xfc, 0x0f, 0x02, 0x10, 0x02, 0x10, 0x02, 0x10, 0x02, 0x10, 0x01, 0x20, 0x01, 0x20, 0xff, 0x3f, 0x01, 0x20, 0x55, 0x29, 0x55, 0x21, 0xff, 0x3f }; // 'swap', 13x13px const unsigned char swap [] PROGMEM = { 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x1f, 0xff, 0x10, 0xff, 0x10, 0x20, 0x10, 0x22, 0x10, 0x26, 0x10, 0x22, 0x10, 0xe0, 0x1f }; // 'temp', 7x14px const unsigned char temp [] PROGMEM = { 0x1c, 0x36, 0x22, 0x22, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x49, 0x5d, 0x49, 0x22, 0x1c }; const char* ca = \ "-----BEGIN CERTIFICATE-----\n" \ "MIIFlTCCBH2gAwIBAgISA5tHKDD+RZnTEVnc4cB00DmoMA0GCSqGSIb3DQEBCwUA\n" \ "MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD\n" \ "ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0yMDAyMDIwMjMxNTNaFw0y\n" \ "MDA1MDIwMjMxNTNaMBQxEjAQBgNVBAMTCWFybndlYi5ubDCCASIwDQYJKoZIhvcN\n" \ "AQEBBQADggEPADCCAQoCggEBALYtO2ju+3IsvbMweL3sFFAcqHTA1w5X5TyzMNMT\n" \ "1N6jorAj6h59HpY/m9WHFlqqx1vTamQhr9ssSJRrfZUKB4wWLAolfWzVb0xZehu6\n" \ "KIXgxF0EMx+Nd2ug7WCSKUvh0xQWyDe5Qo4Fy0od5FQnLDqpoVixXbhH1IewQpSP\n" \ "S4yyYU4dBOFEbGB0WGenZD1QoqFWEzKMaJWbgn3QoOtPnAls1f5Y76Msz9tp+AlR\n" \ "s5qJWEOSYYFGCsjL3KIl5ML0CW6AqcRami1MQLaxUWm02sCKFrhfJSoDBr56UQLe\n" \ "lbRSZhwZnfo7ZjBjYqdXtEmlFe4LkgJ7xZfKCgK9fz6oeOECAwEAAaOCAqkwggKl\n" \ "MA4GA1UdDwEB/wQEAwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw\n" \ "DAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQU5wPLlghu87XR3B7pmqDbYl+0zLswHwYD\n" \ "VR0jBBgwFoAUqEpqYwR93brm0Tm3pkVl7/Oo7KEwbwYIKwYBBQUHAQEEYzBhMC4G\n" \ "CCsGAQUFBzABhiJodHRwOi8vb2NzcC5pbnQteDMubGV0c2VuY3J5cHQub3JnMC8G\n" \ "CCsGAQUFBzAChiNodHRwOi8vY2VydC5pbnQteDMubGV0c2VuY3J5cHQub3JnLzBi\n" \ "BgNVHREEWzBZgg1hcGkuYXJud2ViLm5sgglhcm53ZWIubmyCDWRldi5hcm53ZWIu\n" \ "bmyCD2dpdGVhLmFybndlYi5ubIIObmV4dC5hcm53ZWIubmyCDXd3dy5hcm53ZWIu\n" \ "bmwwTAYDVR0gBEUwQzAIBgZngQwBAgEwNwYLKwYBBAGC3xMBAQEwKDAmBggrBgEF\n" \ "BQcCARYaaHR0cDovL2Nwcy5sZXRzZW5jcnlwdC5vcmcwggEBBgorBgEEAdZ5AgQC\n" \ "BIHyBIHvAO0AdADwlaRZ8gDRgkAQLS+TiI6tS/4dR+OZ4dA0prCoqo6ycwAAAXAD\n" \ "9GbiAAAEAwBFMEMCHxM9P+xmvv54KfAnXPUi/ktr4y+71JT6J3SNK1btmoICIDj4\n" \ "ixR9xXRdcpEEbXGiD2SNSYKo/smj1OOLVdxdl2OoAHUAsh4FzIuizYogTodm+Su5\n" \ "iiUgZ2va+nDnsklTLe+LkF4AAAFwA/Rm1gAABAMARjBEAiApjqhGjDMeyUMi8QGa\n" \ "OcM/D23MOxk5DrhAl4V3qHZHuwIgeBIpEQA8gnWTrbBXh5zk7OYQN9F7g1nHDeWq\n" \ "Hx8VvPAwDQYJKoZIhvcNAQELBQADggEBACuCb/oAQM85nhAqhBZ2PvVduwQClbVF\n" \ "3vhAXecoCzWNZfl7joCEjnQZyLdWtrmnK+EVZsAzyiK9/2e+dB8JC0xbO6KBb5/Y\n" \ "uqwdtaq/nsjNa4UaUEIE2CDOUOYXptmMpq8zSpMSWGyKGABkTLDewrHK8mBaub5t\n" \ "sBQyrdL6tlrzL5nsCmwrEgL83YZQUJWEuv5Egjf/D1xIjcv9CVp/1aG/dgBSCG9r\n" \ "o0JzQTtjS2OybPs4QOXWWMo0yDVi20OVy85qIFNHLXAJPnZ9iUAa3gaqcUmtzdtS\n" \ "pbTG+YNnvJ/ZtdWQSkqvkzY7siZ/Ze3RjhYRR+GPt+BLco7DkuZlPbE=\n" \ "-----END CERTIFICATE-----\n"; void setup() { M5.begin(); /* Attempt connecting to a network using credentials in /wifi.json. Will return false if connection fails */ if (!wifi.begin("/wifi.json")) { Serial.println("This program requires a WiFi connection!"); M5.Lcd.println("This program requires a WiFi connection!"); // Do not let the program run while (true) { } } Serial.println(wifi.ip); M5.Lcd.println(wifi.ip); delay(500); update(); } void update() { M5.Lcd.fillScreen(0x1082); M5.Lcd.setCursor(0,0); int httpCode = 0; M5.Lcd.setTextSize(2); http.begin("https://api.arnweb.nl/system", ca); httpCode = http.GET(); if (httpCode > 0) { M5.Lcd.fillScreen(0x1082); deserializeJson(data, http.getStream()); // Top nav M5.Lcd.setTextColor(0xDEFB); M5.Lcd.fillRect(0, 0, 320, 22, 0x2104); M5.Lcd.setCursor(4,4); M5.Lcd.println(data["hostname"].as()); for (size_t i = 0; i < data["temp"]["cores"].size(); i++) { if (i == 1) { M5.Lcd.setCursor(166,32); M5.Lcd.fillRoundRect(162, 28, 154, 56, 1, 0x2104); M5.Lcd.drawXBitmap(305, 32, temp, 7, 14, TFT_WHITE); } else { M5.Lcd.setCursor(8,32); M5.Lcd.fillRoundRect(4, 28, 154, 56, 1, 0x2104); M5.Lcd.drawXBitmap(147, 32, temp, 7, 14, TFT_WHITE); } M5.Lcd.setTextColor(0xDEFB); M5.Lcd.print("Core "); M5.Lcd.print(i); M5.Lcd.print(": "); if (i == 1) { M5.Lcd.setCursor(192,52); } else { M5.Lcd.setCursor(34,52); } M5.Lcd.setTextSize(4); if (data["temp"]["cores"][i].as() >= 75) { // Very hot M5.Lcd.setTextColor(0xF0A6); } else if (data["temp"]["cores"][i].as() >= 55) { // Meh M5.Lcd.setTextColor(0xFDC9); } else { // Cool M5.Lcd.setTextColor(0x1572); } M5.Lcd.print(data["temp"]["cores"][i].as()); M5.Lcd.print(char(247)); M5.Lcd.println("C"); M5.Lcd.setTextSize(2); } M5.Lcd.setTextColor(0xDEFB); // Memory Usage M5.Lcd.fillRoundRect(4, 88, 312, 22, 1, 0x2104); M5.Lcd.setCursor(8, 92); M5.Lcd.drawXBitmap(297, 92, ram, 15, 10, TFT_WHITE); M5.Lcd.print("Memory usage: "); M5.Lcd.print((data["mem"]["active"].as() / data["mem"]["total"].as()) * 100); M5.Lcd.println("%"); // Swap Usage M5.Lcd.fillRoundRect(4, 114, 312, 22, 1, 0x2104); M5.Lcd.setCursor(8, 118); M5.Lcd.drawXBitmap(299, 118, swap, 13, 13, TFT_WHITE); M5.Lcd.print("Swap usage: "); M5.Lcd.print((data["mem"]["swapused"].as() / data["mem"]["swaptotal"].as()) * 100); M5.Lcd.println("%"); // Disk Usage M5.Lcd.fillRoundRect(4, 140, 312, 54, 1, 0x2104); M5.Lcd.setCursor(8, 144); M5.Lcd.drawXBitmap(298, 144, hdd, 14, 12, TFT_WHITE); M5.Lcd.println("Disk usage: "); for (size_t i = 0; i < data["fs"].size(); i++) { M5.Lcd.print(" " + data["fs"][i]["fs"].as() + ": " + data["fs"][i]["use"].as()); M5.Lcd.println("%"); } // Bottom nav M5.Lcd.fillRect(0, 218, 320, 22, 0x2104); M5.Lcd.setCursor(126, 222); M5.Lcd.println("Update"); } else { M5.Lcd.print("HTTP Request Error: "); M5.lcd.println(httpCode); } http.end(); } void loop() { if (M5.BtnB.wasPressed()) { Serial.println("B"); update(); } M5.update(); }