#include <qthing.h> #include "oled.h" #include "oled_symbols.h" #include "event.h" #include "Arduino.h" #include "SSD1306Wire.h" SSD1306Wire display(0x3c, GPIO_NUM_5, GPIO_NUM_4); std::string oled_log = ""; void draw_network_status(uint8_t x, uint8_t y) { connection_status_t wlan_status = get_wlan_connection_status(); if (wlan_status == connected) { display.drawFastImage(x, y, 10, 8, wlan_connected_symbol); } else if (wlan_status == connecting) { display.drawFastImage(x, y, 10, 8, wlan_connecting_symbol); } else if (wlan_status == disconnected) { display.drawFastImage(x, y, 10, 8, wlan_disconnected_symbol); } } void draw_mqtt_status(uint8_t x, uint8_t y) { connection_status_t mqtt_status = get_mqtt_connection_status(); if (mqtt_status == connected) { display.drawFastImage(x, y, 8, 8, mqtt_connected_symbol); } else if (mqtt_status == connecting) { display.drawFastImage(x, y, 8, 8, mqtt_connecting_symbol); } else if (mqtt_status == disconnected) { display.drawFastImage(x, y, 8, 8, mqtt_disconnected_symbol); } } void display_status() { uint8_t iconPosition = 128; iconPosition -= 10; draw_network_status(iconPosition, 0); iconPosition -= 2; iconPosition -= 8; draw_mqtt_status(iconPosition, 0); display.setFont(ArialMT_Plain_10); display.setTextAlignment(TEXT_ALIGN_LEFT); display.drawString(0, 10, "much wow, very secure"); display.drawString(0, 20, oled_log.c_str()); } void oled_task(void *pvParameters) { while (true) { display.clear(); display_status(); display.setFont(ArialMT_Plain_10); display.setTextAlignment(TEXT_ALIGN_RIGHT); display.drawString(0, 20, String(millis())); display.display(); delay(100); } } void enable_oled() { set_oled_log_callback([](const std::string& message) {oled_log = message;}); display.init(); display.flipScreenVertically(); display.setFont(ArialMT_Plain_10); xTaskCreate(&oled_task, "oled_task", 4096, NULL, 10, NULL); }