Use NeoPixel led for wifi status
This commit is contained in:
parent
5cba98368f
commit
8dc11493aa
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 setPrecipitationForecastLeds(uint32_t p_current_time, ArduinoJson::V710PB22::JsonArray p_precipitation);
|
||||||
void setUVIForecastLed(uint32_t p_current_time, ArduinoJson::V710PB22::JsonArray p_uvi);
|
void setUVIForecastLed(uint32_t p_current_time, ArduinoJson::V710PB22::JsonArray p_uvi);
|
||||||
void setLocalAirQualityLed();
|
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 setPixelColor(uint32_t p_index, uint8_t p_red, uint8_t p_green, uint8_t p_blue, uint8_t p_white);
|
||||||
void clear();
|
void clear();
|
||||||
void show();
|
void show();
|
||||||
|
|
|
@ -3,12 +3,10 @@
|
||||||
|
|
||||||
#include <WiFiManager-esp32.h> // https://github.com/admarschoonen/WiFiManager
|
#include <WiFiManager-esp32.h> // https://github.com/admarschoonen/WiFiManager
|
||||||
|
|
||||||
#include "display.hpp"
|
|
||||||
|
|
||||||
class WifiHandler {
|
class WifiHandler {
|
||||||
public:
|
public:
|
||||||
// Constructor
|
// Constructor
|
||||||
WifiHandler(uint8_t p_led_pin, Display p_display);
|
WifiHandler(std::function<void(WiFiManager::Status p_wifi_status)> p_tickerCb);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// Public static methods
|
// Public static methods
|
||||||
|
@ -30,7 +28,6 @@ class WifiHandler {
|
||||||
private:
|
private:
|
||||||
// Private objects
|
// Private objects
|
||||||
WiFiManager m_wifiManager;
|
WiFiManager m_wifiManager;
|
||||||
Display& m_display;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // __WIFIHANDLER_HPP__
|
#endif // __WIFIHANDLER_HPP__
|
|
@ -74,7 +74,21 @@ void Display::setUVIForecastLed(uint32_t p_current_time, ArduinoJson::V710PB22::
|
||||||
|
|
||||||
void Display::setLocalAirQualityLed() {}
|
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) {
|
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));
|
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
|
#define CONNECT_BUTTON BUTTON_BUILTIN
|
||||||
|
|
||||||
|
// Forward function declarations
|
||||||
|
void wifiHandlerFeedbackCb(WiFiManager::Status p_wifi_status);
|
||||||
|
|
||||||
|
// Global objects
|
||||||
DESPatch dESPatch;
|
DESPatch dESPatch;
|
||||||
|
|
||||||
Adafruit_NeoPixel leds = Adafruit_NeoPixel(29, 14, NEO_GRBW + NEO_KHZ800);
|
Adafruit_NeoPixel leds = Adafruit_NeoPixel(29, 14, NEO_GRBW + NEO_KHZ800);
|
||||||
Display display(leds);
|
Display display(leds);
|
||||||
|
|
||||||
WifiHandler wifi_handler(LED_BUILTIN, display);
|
WifiHandler wifi_handler(wifiHandlerFeedbackCb);
|
||||||
|
|
||||||
BackendCommunication backend_communication(wifi_handler);
|
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() {
|
void setup() {
|
||||||
display.clear();
|
display.clear();
|
||||||
display.show();
|
display.show();
|
||||||
|
@ -64,7 +83,8 @@ void loop(void) {
|
||||||
backend_communication.getConfig();
|
backend_communication.getConfig();
|
||||||
|
|
||||||
if (not backend_communication.m_is_config_valid) {
|
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 {
|
} else {
|
||||||
backend_communication.getWeatherData();
|
backend_communication.getWeatherData();
|
||||||
|
|
||||||
|
@ -79,9 +99,10 @@ void loop(void) {
|
||||||
|
|
||||||
display.setUVIForecastLed(utc_time, backend_communication.m_weather_data["UVI"].as<JsonArray>());
|
display.setUVIForecastLed(utc_time, backend_communication.m_weather_data["UVI"].as<JsonArray>());
|
||||||
|
|
||||||
display.show();
|
display.setWifiStatusLed(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
display.show();
|
||||||
dESPatch.checkForUpdate(true);
|
dESPatch.checkForUpdate(true);
|
||||||
|
|
||||||
uint32_t time_end = millis();
|
uint32_t time_end = millis();
|
||||||
|
|
|
@ -2,20 +2,18 @@
|
||||||
|
|
||||||
#include "../include/wifi_handler.hpp"
|
#include "../include/wifi_handler.hpp"
|
||||||
|
|
||||||
static uint8_t g_led_pin;
|
|
||||||
static Ticker g_ticker;
|
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) {
|
WifiHandler::WifiHandler(std::function<void(WiFiManager::Status p_wifi_status)> p_tickerCb) {
|
||||||
g_led_pin = p_led_pin;
|
g_tickerCb = p_tickerCb;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void tick() {
|
static void tick() {
|
||||||
int state = 0;
|
if (g_tickerCb != nullptr) {
|
||||||
|
g_tickerCb(g_wifi_status);
|
||||||
if (g_led_pin >= 0) {
|
|
||||||
state = digitalRead(g_led_pin);
|
|
||||||
digitalWrite(g_led_pin, !state);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,6 +28,8 @@ void WifiHandler::setBlinkRate(float p_interval) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void WifiHandler::wifiManagerCb(WiFiManager::Status p_status) {
|
void WifiHandler::wifiManagerCb(WiFiManager::Status p_status) {
|
||||||
|
g_wifi_status = p_status;
|
||||||
|
|
||||||
if (p_status.mode == WiFiManager::Mode::CONNECTING) {
|
if (p_status.mode == WiFiManager::Mode::CONNECTING) {
|
||||||
WifiHandler::setBlinkRate(WifiHandler::BLINK_RATE_CONNECTING);
|
WifiHandler::setBlinkRate(WifiHandler::BLINK_RATE_CONNECTING);
|
||||||
} else if (p_status.mode == WiFiManager::Mode::SCANNING) {
|
} 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);
|
WifiHandler::setBlinkRate(WifiHandler::BLINK_RATE_ERASE);
|
||||||
} else if (p_status.mode == WiFiManager::Mode::CONNECTED) {
|
} else if (p_status.mode == WiFiManager::Mode::CONNECTED) {
|
||||||
WifiHandler::setBlinkRate(0.0f);
|
WifiHandler::setBlinkRate(0.0f);
|
||||||
digitalWrite(g_led_pin, HIGH);
|
g_tickerCb(g_wifi_status);
|
||||||
} else if (p_status.mode == WiFiManager::Mode::DISCONNECTED) {
|
} else if (p_status.mode == WiFiManager::Mode::DISCONNECTED) {
|
||||||
WifiHandler::setBlinkRate(0.0f);
|
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
|
// if you get here you have connected to the WiFi
|
||||||
Serial.print(String(millis()) + " Connected with address: ");
|
Serial.print(String(millis()) + " Connected with address: ");
|
||||||
Serial.println(WiFi.localIP());
|
Serial.println(WiFi.localIP());
|
||||||
|
|
||||||
// keep LED on
|
|
||||||
digitalWrite(g_led_pin, HIGH);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WifiHandler::resetSettings() {
|
void WifiHandler::resetSettings() {
|
||||||
|
@ -80,8 +77,6 @@ void WifiHandler::resetSettings() {
|
||||||
delay(1000);
|
delay(1000);
|
||||||
status.mode = WiFiManager::Mode::DISCONNECTED;
|
status.mode = WiFiManager::Mode::DISCONNECTED;
|
||||||
wifiManagerCb(status);
|
wifiManagerCb(status);
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
String WifiHandler::getMac(bool p_insertColons) {
|
String WifiHandler::getMac(bool p_insertColons) {
|
||||||
|
|
Loading…
Reference in a new issue