Release v0.4.0: complete rewrite #1
5 changed files with 52 additions and 24 deletions
|
@ -17,7 +17,8 @@ class Display {
|
|||
void setPrecipitationForecastLeds(uint32_t p_current_time, ArduinoJson::V710PB22::JsonArray p_precipitation);
|
||||
void setUVIForecastLed(uint32_t p_current_time, ArduinoJson::V710PB22::JsonArray p_uvi);
|
||||
void setLocalAirQualityLed();
|
||||
void setWifiStatusLed(bool p_enable);
|
||||
void setWifiStatusLed(bool p_is_connected);
|
||||
void setErrorLed(bool p_is_error);
|
||||
void setPixelColor(uint32_t p_index, uint8_t p_red, uint8_t p_green, uint8_t p_blue, uint8_t p_white);
|
||||
void clear();
|
||||
void show();
|
||||
|
|
|
@ -3,12 +3,10 @@
|
|||
|
||||
#include <WiFiManager-esp32.h> // https://github.com/admarschoonen/WiFiManager
|
||||
|
||||
#include "display.hpp"
|
||||
|
||||
class WifiHandler {
|
||||
public:
|
||||
// Constructor
|
||||
WifiHandler(uint8_t p_led_pin, Display p_display);
|
||||
WifiHandler(std::function<void(WiFiManager::Status p_wifi_status)> p_tickerCb);
|
||||
|
||||
public:
|
||||
// Public static methods
|
||||
|
@ -30,7 +28,6 @@ class WifiHandler {
|
|||
private:
|
||||
// Private objects
|
||||
WiFiManager m_wifiManager;
|
||||
Display& m_display;
|
||||
};
|
||||
|
||||
#endif // __WIFIHANDLER_HPP__
|
|
@ -74,7 +74,21 @@ void Display::setUVIForecastLed(uint32_t p_current_time, ArduinoJson::V710PB22::
|
|||
|
||||
void Display::setLocalAirQualityLed() {}
|
||||
|
||||
void Display::setWifiStatusLed(bool p_enable) {}
|
||||
void Display::setWifiStatusLed(bool p_is_connected) {
|
||||
if (p_is_connected) {
|
||||
m_leds.setPixelColor(m_wifi_status_map, m_leds.Color(0U, 0U, 255U, 255U));
|
||||
} else {
|
||||
m_leds.setPixelColor(m_wifi_status_map, m_leds.Color(0U, 0U, 0U, 0U));
|
||||
}
|
||||
}
|
||||
|
||||
void Display::setErrorLed(bool p_is_error) {
|
||||
if (p_is_error) {
|
||||
m_leds.setPixelColor(m_wifi_status_map, m_leds.Color(255U, 0U, 0U, 0U));
|
||||
} else {
|
||||
m_leds.setPixelColor(m_wifi_status_map, m_leds.Color(0U, 0U, 0U, 0U));
|
||||
}
|
||||
}
|
||||
|
||||
void Display::setPixelColor(uint32_t p_index, uint8_t p_red, uint8_t p_green, uint8_t p_blue, uint8_t p_white) {
|
||||
m_leds.setPixelColor(p_index, m_leds.Color(p_red, p_green, p_blue, p_white));
|
||||
|
|
27
src/main.cpp
27
src/main.cpp
|
@ -15,15 +15,34 @@
|
|||
|
||||
#define CONNECT_BUTTON BUTTON_BUILTIN
|
||||
|
||||
// Forward function declarations
|
||||
void wifiHandlerFeedbackCb(WiFiManager::Status p_wifi_status);
|
||||
|
||||
// Global objects
|
||||
DESPatch dESPatch;
|
||||
|
||||
Adafruit_NeoPixel leds = Adafruit_NeoPixel(29, 14, NEO_GRBW + NEO_KHZ800);
|
||||
Display display(leds);
|
||||
|
||||
WifiHandler wifi_handler(LED_BUILTIN, display);
|
||||
WifiHandler wifi_handler(wifiHandlerFeedbackCb);
|
||||
|
||||
BackendCommunication backend_communication(wifi_handler);
|
||||
|
||||
void wifiHandlerFeedbackCb(WiFiManager::Status p_wifi_status) {
|
||||
static bool state = false;
|
||||
|
||||
if (p_wifi_status.mode == WiFiManager::Mode::CONNECTED) {
|
||||
state = true;
|
||||
} else if (p_wifi_status.mode == WiFiManager::Mode::DISCONNECTED) {
|
||||
state = false;
|
||||
} else {
|
||||
state = !state;
|
||||
}
|
||||
|
||||
display.setWifiStatusLed(state);
|
||||
display.show();
|
||||
}
|
||||
|
||||
void setup() {
|
||||
display.clear();
|
||||
display.show();
|
||||
|
@ -64,7 +83,8 @@ void loop(void) {
|
|||
backend_communication.getConfig();
|
||||
|
||||
if (not backend_communication.m_is_config_valid) {
|
||||
Serial.println(String("Uptime: " + String(millis())) + " Invalid config");
|
||||
display.setErrorLed(true);
|
||||
Serial.println(String("Uptime: " + String(millis())) + ". Error: invalid config");
|
||||
} else {
|
||||
backend_communication.getWeatherData();
|
||||
|
||||
|
@ -79,9 +99,10 @@ void loop(void) {
|
|||
|
||||
display.setUVIForecastLed(utc_time, backend_communication.m_weather_data["UVI"].as<JsonArray>());
|
||||
|
||||
display.show();
|
||||
display.setWifiStatusLed(false);
|
||||
}
|
||||
|
||||
display.show();
|
||||
dESPatch.checkForUpdate(true);
|
||||
|
||||
uint32_t time_end = millis();
|
||||
|
|
|
@ -2,20 +2,18 @@
|
|||
|
||||
#include "../include/wifi_handler.hpp"
|
||||
|
||||
static uint8_t g_led_pin;
|
||||
static Ticker g_ticker;
|
||||
static WiFiManager::Status g_wifi_status;
|
||||
static std::function<void(WiFiManager::Status p_wifi_status)> g_tickerCb = nullptr;
|
||||
|
||||
WifiHandler::WifiHandler(uint8_t p_led_pin, Display p_display) : m_display(p_display) {
|
||||
g_led_pin = p_led_pin;
|
||||
WifiHandler::WifiHandler(std::function<void(WiFiManager::Status p_wifi_status)> p_tickerCb) {
|
||||
g_tickerCb = p_tickerCb;
|
||||
return;
|
||||
}
|
||||
|
||||
static void tick() {
|
||||
int state = 0;
|
||||
|
||||
if (g_led_pin >= 0) {
|
||||
state = digitalRead(g_led_pin);
|
||||
digitalWrite(g_led_pin, !state);
|
||||
if (g_tickerCb != nullptr) {
|
||||
g_tickerCb(g_wifi_status);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -30,6 +28,8 @@ void WifiHandler::setBlinkRate(float p_interval) {
|
|||
}
|
||||
|
||||
void WifiHandler::wifiManagerCb(WiFiManager::Status p_status) {
|
||||
g_wifi_status = p_status;
|
||||
|
||||
if (p_status.mode == WiFiManager::Mode::CONNECTING) {
|
||||
WifiHandler::setBlinkRate(WifiHandler::BLINK_RATE_CONNECTING);
|
||||
} else if (p_status.mode == WiFiManager::Mode::SCANNING) {
|
||||
|
@ -40,10 +40,10 @@ void WifiHandler::wifiManagerCb(WiFiManager::Status p_status) {
|
|||
WifiHandler::setBlinkRate(WifiHandler::BLINK_RATE_ERASE);
|
||||
} else if (p_status.mode == WiFiManager::Mode::CONNECTED) {
|
||||
WifiHandler::setBlinkRate(0.0f);
|
||||
digitalWrite(g_led_pin, HIGH);
|
||||
g_tickerCb(g_wifi_status);
|
||||
} else if (p_status.mode == WiFiManager::Mode::DISCONNECTED) {
|
||||
WifiHandler::setBlinkRate(0.0f);
|
||||
digitalWrite(g_led_pin, LOW);
|
||||
g_tickerCb(g_wifi_status);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -65,9 +65,6 @@ void WifiHandler::connect() {
|
|||
// if you get here you have connected to the WiFi
|
||||
Serial.print(String(millis()) + " Connected with address: ");
|
||||
Serial.println(WiFi.localIP());
|
||||
|
||||
// keep LED on
|
||||
digitalWrite(g_led_pin, HIGH);
|
||||
}
|
||||
|
||||
void WifiHandler::resetSettings() {
|
||||
|
@ -80,8 +77,6 @@ void WifiHandler::resetSettings() {
|
|||
delay(1000);
|
||||
status.mode = WiFiManager::Mode::DISCONNECTED;
|
||||
wifiManagerCb(status);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
String WifiHandler::getMac(bool p_insertColons) {
|
||||
|
|
Loading…
Reference in a new issue