forked from Aircoookie/WLED
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'master' of https://github.com/Aircoookie/WLED
- Loading branch information
Showing
6 changed files
with
241 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
These files allow WLED 0.8.6 to report the temp sensor on the Quinled board to MQTT. I use it to report the board temp to Home Assistant via MQTT, so it will send notifications if something happens and the board start to heat up. | ||
|
||
This code uses Aircookie's WLED software. It has a premade file for user modifications. I use it to publish the temperature from the dallas temperature sensor on the Quinled board. The entries for the top of the WLED00 file, initializes the required libraries, and variables for the sensor. The .ino file waits for 60 seconds, and checks to see if the MQTT server is connected (thanks Aircoookie). It then poles the sensor, and published it using the MQTT service already running, using the main topic programmed in the WLED UI. | ||
|
||
To install: | ||
|
||
Add the enties in the WLED00 file to the top of the same file from Aircoookies WLED. | ||
Replace the WLED06_usermod.ino file in Aircoookies WLED folder. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
//Intiating code for QuinLED Dig-Uno temp sensor | ||
//Uncomment Celsius if that is your prefered temperature scale | ||
#include <DallasTemperature.h> | ||
OneWire oneWire(14); | ||
DallasTemperature sensors(&oneWire); | ||
long temptimer = millis(); | ||
long lastMeasure = 0; | ||
//#define Celsius |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
//starts Dallas Temp service on boot | ||
void userSetup() | ||
{ | ||
// Start the DS18B20 sensor | ||
sensors.begin(); | ||
} | ||
|
||
//gets called every time WiFi is (re-)connected. Initialize own network interfaces here | ||
void userConnected() | ||
{ | ||
|
||
} | ||
|
||
void userLoop() | ||
{ | ||
temptimer = millis(); | ||
|
||
// Timer to publishe new temperature every 60 seconds | ||
if (temptimer - lastMeasure > 60000) { | ||
lastMeasure = temptimer; | ||
|
||
//Check if MQTT Connected, otherwise it will crash the 8266 | ||
if (mqtt != nullptr){ | ||
sensors.requestTemperatures(); | ||
|
||
//Gets prefered temperature scale based on selection in definitions section | ||
#ifdef Celsius | ||
float board_temperature = sensors.getTempCByIndex(0); | ||
#else | ||
float board_temperature = sensors.getTempFByIndex(0); | ||
#endif | ||
|
||
//Create character string populated with user defined device topic from the UI, and the read temperature. Then publish to MQTT server. | ||
char subuf[38]; | ||
strcpy(subuf, mqttDeviceTopic); | ||
strcat(subuf, "/temperature"); | ||
mqtt->publish(subuf, 0, true, String(board_temperature).c_str()); | ||
return;} | ||
return;} | ||
return; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
# SSD1306 128x32 OLED via I2C with u8g2 | ||
This usermod allows to connect 128x32 Oled display to WLED controlled and show | ||
the next information: | ||
- Current SSID | ||
- IP address if obtained | ||
* in AP mode and turned off lightning AP password is shown | ||
- Current effect | ||
- Current palette | ||
- On/Off icon (sun/moon) | ||
|
||
## Hardware | ||
![Hardware connection](assets/hw_connection.png) | ||
|
||
## Requirements | ||
Functionality checked with: | ||
- commit 095429a7df4f9e2b34dd464f7bbfd068df6558eb | ||
- Wemos d1 mini | ||
- PlatformIO | ||
- Generic SSD1306 128x32 I2C OLED display from aliexpress | ||
|
||
### Platformio | ||
Add `U8g2@~2.27.2` dependency to `lib_deps_external` under `[common]` section in `platformio.ini`: | ||
```ini | ||
# platformio.ini | ||
... | ||
[common] | ||
... | ||
lib_deps_external = | ||
... | ||
U8g2@~2.27.2 | ||
... | ||
``` | ||
|
||
### Arduino IDE | ||
Install library `U8g2 by oliver` in `Tools | Include Library | Manage libraries` menu. |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,149 @@ | ||
#include <U8x8lib.h> // from https://github.com/olikraus/u8g2/ | ||
|
||
// If display does not work or looks corrupted check the | ||
// constructor reference: | ||
// https://github.com/olikraus/u8g2/wiki/u8x8setupcpp | ||
// or check the gallery: | ||
// https://github.com/olikraus/u8g2/wiki/gallery | ||
U8X8_SSD1306_128X32_UNIVISION_HW_I2C u8x8(U8X8_PIN_NONE, 5, | ||
4); // Pins are Reset, SCL, SDA | ||
|
||
// gets called once at boot. Do all initialization that doesn't depend on | ||
// network here | ||
void userSetup() { | ||
u8x8.begin(); | ||
u8x8.setPowerSave(0); | ||
u8x8.setFont(u8x8_font_chroma48medium8_r); | ||
u8x8.drawString(0, 0, "Loading..."); | ||
} | ||
|
||
// gets called every time WiFi is (re-)connected. Initialize own network | ||
// interfaces here | ||
void userConnected() {} | ||
|
||
// needRedraw marks if redraw is required to prevent often redrawing. | ||
bool needRedraw = true; | ||
|
||
// Next variables hold the previous known values to determine if redraw is | ||
// required. | ||
String knownSsid = ""; | ||
IPAddress knownIp; | ||
uint8_t knownBrightness = 0; | ||
uint8_t knownMode = 0; | ||
uint8_t knownPalette = 0; | ||
|
||
long lastUpdate = 0; | ||
// How often we are redrawing screen | ||
#define USER_LOOP_REFRESH_RATE_MS 5000 | ||
|
||
void userLoop() { | ||
|
||
// Check if we time interval for redrawing passes. | ||
if (millis() - lastUpdate < USER_LOOP_REFRESH_RATE_MS) { | ||
return; | ||
} | ||
lastUpdate = millis(); | ||
|
||
// Check if values which are shown on display changed from the last tiem. | ||
if ((apActive == true ? String(apSSID) : WiFi.SSID()) != knownSsid) { | ||
needRedraw = true; | ||
} else if (knownIp != (apActive ? IPAddress(4, 3, 2, 1) : WiFi.localIP())) { | ||
needRedraw = true; | ||
} else if (knownBrightness != bri) { | ||
needRedraw = true; | ||
} else if (knownMode != strip.getMode()) { | ||
needRedraw = true; | ||
} else if (knownPalette != strip.getSegment(0).palette) { | ||
needRedraw = true; | ||
} | ||
|
||
if (!needRedraw) { | ||
return; | ||
} | ||
needRedraw = false; | ||
|
||
// Update last known values. | ||
knownSsid = apActive ? WiFi.softAPSSID() : WiFi.SSID(); | ||
knownIp = apActive ? IPAddress(4, 3, 2, 1) : WiFi.localIP(); | ||
knownBrightness = bri; | ||
knownMode = strip.getMode(); | ||
knownPalette = strip.getSegment(0).palette; | ||
|
||
u8x8.clear(); | ||
u8x8.setFont(u8x8_font_chroma48medium8_r); | ||
|
||
// First row with Wifi name | ||
u8x8.setCursor(1, 0); | ||
u8x8.print(ssid.substring(0, u8x8.getCols() > 1 ? u8x8.getCols() - 2 : 0)); | ||
// Print `~` char to indicate that SSID is longer, than owr dicplay | ||
if (ssid.length() > u8x8.getCols()) | ||
u8x8.print("~"); | ||
|
||
// Second row with IP or Psssword | ||
u8x8.setCursor(1, 1); | ||
// Print password in AP mode and if led is OFF. | ||
if (apActive && bri == 0) | ||
u8x8.print(apPass); | ||
else | ||
u8x8.print(ip); | ||
|
||
// Third row with mode name | ||
u8x8.setCursor(2, 2); | ||
uint8_t qComma = 0; | ||
bool insideQuotes = false; | ||
uint8_t printedChars = 0; | ||
char singleJsonSymbol; | ||
// Find the mode name in JSON | ||
for (size_t i = 0; i < strlen_P(JSON_mode_names); i++) { | ||
singleJsonSymbol = pgm_read_byte_near(JSON_mode_names + i); | ||
switch (singleJsonSymbol) { | ||
case '"': | ||
insideQuotes = !insideQuotes; | ||
break; | ||
case '[': | ||
case ']': | ||
break; | ||
case ',': | ||
qComma++; | ||
default: | ||
if (!insideQuotes || (qComma != knownMode)) | ||
break; | ||
u8x8.print(singleJsonSymbol); | ||
printedChars++; | ||
} | ||
if ((qComma > knownMode) || (printedChars > u8x8.getCols() - 2)) | ||
break; | ||
} | ||
// Fourth row with palette name | ||
u8x8.setCursor(2, 3); | ||
qComma = 0; | ||
insideQuotes = false; | ||
printedChars = 0; | ||
// Looking for palette name in JSON. | ||
for (size_t i = 0; i < strlen_P(JSON_palette_names); i++) { | ||
singleJsonSymbol = pgm_read_byte_near(JSON_palette_names + i); | ||
switch (singleJsonSymbol) { | ||
case '"': | ||
insideQuotes = !insideQuotes; | ||
break; | ||
case '[': | ||
case ']': | ||
break; | ||
case ',': | ||
qComma++; | ||
default: | ||
if (!insideQuotes || (qComma != knownPalette)) | ||
break; | ||
u8x8.print(singleJsonSymbol); | ||
printedChars++; | ||
} | ||
if ((qComma > knownMode) || (printedChars > u8x8.getCols() - 2)) | ||
break; | ||
} | ||
|
||
u8x8.setFont(u8x8_font_open_iconic_embedded_1x1); | ||
u8x8.drawGlyph(0, 0, 80); // wifi icon | ||
u8x8.drawGlyph(0, 1, 68); // home icon | ||
u8x8.setFont(u8x8_font_open_iconic_weather_2x2); | ||
u8x8.drawGlyph(0, 2, 66 + (bri > 0 ? 3 : 0)); // sun/moon icon | ||
} |