Repository files navigation

WordClock

LanguagesCodacyLicense

An ESP8266 based Word Clock built with PlatformIO that fetches the time from a NTP server.

This is firmware for the 11x10 LED Matrix word clock case from WordClock 12h (desk clock edition) from Thingiverse. It features MQTT autodiscovery for Home Assistant

It currently has three modes:

  • word clock with seconds as ambilight
  • rainbow animation
  • aurora borealis animation

The modes and brightness can be set via mqtt by writing to the following mqtt topics:

  • wordclock/brightness/set (0..255) - very low brighness values (e.g. less than 20) may lead to colors not being shown properly
  • wordclock/mode/set (0..2)

When the word clock is powered up, it starts in mode 0 (word clock) with brightness 20. The word clock reports its state via the following mqtt topics:

  • wordclock/$localip - the ip address assigned to the word clodk
  • wordclock/$mac - the mac address of the ESP8266
  • wordclock/$state - (ready|lost). ready when connected to wifi and mqtt. The state switches to lost automatically, when the connection is lost.
  • wordclock/brightness - the current brightness
  • wordclock/mode - the current mode

Dependencies are:

  • FastLed
  • NtpClient
  • Time
  • TimeZone
  • espMqttClient
  • HaMqttConfigBuilder

If you build the firmware using PlatformIO, all dependencies are pulled in automatically. If you prefer a different IDE you have to take care of everything yourself.

The wifi and mqtt credentials are stored in an external "secrets.h" file.

Open caseOpen case
Open caseOpen case

The pictures below are taken with almost minimal brightness of the LEDs.

No diffusorPaper diffusorWith front
No diffusorA sheet of paper as diffusorPaper and front

The case is beautiful, but IMHO it has two drawbacks:

  • The grid part for the LEDs should be printed separately in black. Even though I have spray painted the inner walls of the grid white twice, there's still a glow effect from one chamber to the next.
  • Another reason for the glow effect is probably that it is not possible to bring the LEDs 100% tight to the grid. The cables that you have to solder to the ends and the LED strip itself will always account for a 1mm gap between LEDs and grid, so light can get through. This can perhaps be solved by filing down the vertical parts of the grid a bit, but it would be better to make the horizontal parts of the grid a bit longer on the rear side.

About

An esp8266 based word clock made with PlatformIO.

Topics

Resources

Stars

9 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

WordClock

LanguagesCodacyLicense

An ESP8266 based Word Clock built with PlatformIO that fetches the time from a NTP server.

This is firmware for the 11x10 LED Matrix word clock case from WordClock 12h (desk clock edition) from Thingiverse. It features MQTT autodiscovery for Home Assistant

It currently has three modes:

  • word clock with seconds as ambilight
  • rainbow animation
  • aurora borealis animation

The modes and brightness can be set via mqtt by writing to the following mqtt topics:

  • wordclock/brightness/set (0..255) - very low brighness values (e.g. less than 20) may lead to colors not being shown properly
  • wordclock/mode/set (0..2)

When the word clock is powered up, it starts in mode 0 (word clock) with brightness 20. The word clock reports its state via the following mqtt topics:

  • wordclock/$localip - the ip address assigned to the word clodk
  • wordclock/$mac - the mac address of the ESP8266
  • wordclock/$state - (ready|lost). ready when connected to wifi and mqtt. The state switches to lost automatically, when the connection is lost.
  • wordclock/brightness - the current brightness
  • wordclock/mode - the current mode

Dependencies are:

  • FastLed
  • NtpClient
  • Time
  • TimeZone
  • espMqttClient
  • HaMqttConfigBuilder

If you build the firmware using PlatformIO, all dependencies are pulled in automatically. If you prefer a different IDE you have to take care of everything yourself.

The wifi and mqtt credentials are stored in an external "secrets.h" file.

Open caseOpen case
Open caseOpen case

The pictures below are taken with almost minimal brightness of the LEDs.

No diffusorPaper diffusorWith front
No diffusorA sheet of paper as diffusorPaper and front

The case is beautiful, but IMHO it has two drawbacks:

  • The grid part for the LEDs should be printed separately in black. Even though I have spray painted the inner walls of the grid white twice, there's still a glow effect from one chamber to the next.
  • Another reason for the glow effect is probably that it is not possible to bring the LEDs 100% tight to the grid. The cables that you have to solder to the ends and the LED strip itself will always account for a 1mm gap between LEDs and grid, so light can get through. This can perhaps be solved by filing down the vertical parts of the grid a bit, but it would be better to make the horizontal parts of the grid a bit longer on the rear side.

About

An esp8266 based word clock made with PlatformIO.

Topics

Resources

Stars

9 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

WordClock

LanguagesCodacyLicense

An ESP8266 based Word Clock built with PlatformIO that fetches the time from a NTP server.

This is firmware for the 11x10 LED Matrix word clock case from WordClock 12h (desk clock edition) from Thingiverse. It features MQTT autodiscovery for Home Assistant

It currently has three modes:

  • word clock with seconds as ambilight
  • rainbow animation
  • aurora borealis animation

The modes and brightness can be set via mqtt by writing to the following mqtt topics:

  • wordclock/brightness/set (0..255) - very low brighness values (e.g. less than 20) may lead to colors not being shown properly
  • wordclock/mode/set (0..2)

When the word clock is powered up, it starts in mode 0 (word clock) with brightness 20. The word clock reports its state via the following mqtt topics:

  • wordclock/$localip - the ip address assigned to the word clodk
  • wordclock/$mac - the mac address of the ESP8266
  • wordclock/$state - (ready|lost). ready when connected to wifi and mqtt. The state switches to lost automatically, when the connection is lost.
  • wordclock/brightness - the current brightness
  • wordclock/mode - the current mode

Dependencies are:

  • FastLed
  • NtpClient
  • Time
  • TimeZone
  • espMqttClient
  • HaMqttConfigBuilder

If you build the firmware using PlatformIO, all dependencies are pulled in automatically. If you prefer a different IDE you have to take care of everything yourself.

The wifi and mqtt credentials are stored in an external "secrets.h" file.

Open caseOpen case
Open caseOpen case

The pictures below are taken with almost minimal brightness of the LEDs.

No diffusorPaper diffusorWith front
No diffusorA sheet of paper as diffusorPaper and front

The case is beautiful, but IMHO it has two drawbacks:

  • The grid part for the LEDs should be printed separately in black. Even though I have spray painted the inner walls of the grid white twice, there's still a glow effect from one chamber to the next.
  • Another reason for the glow effect is probably that it is not possible to bring the LEDs 100% tight to the grid. The cables that you have to solder to the ends and the LED strip itself will always account for a 1mm gap between LEDs and grid, so light can get through. This can perhaps be solved by filing down the vertical parts of the grid a bit, but it would be better to make the horizontal parts of the grid a bit longer on the rear side.

About

An esp8266 based word clock made with PlatformIO.

Topics

Resources

Stars

9 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

WordClock

LanguagesCodacyLicense

An ESP8266 based Word Clock built with PlatformIO that fetches the time from a NTP server.

This is firmware for the 11x10 LED Matrix word clock case from WordClock 12h (desk clock edition) from Thingiverse. It features MQTT autodiscovery for Home Assistant

It currently has three modes:

  • word clock with seconds as ambilight
  • rainbow animation
  • aurora borealis animation

The modes and brightness can be set via mqtt by writing to the following mqtt topics:

  • wordclock/brightness/set (0..255) - very low brighness values (e.g. less than 20) may lead to colors not being shown properly
  • wordclock/mode/set (0..2)

When the word clock is powered up, it starts in mode 0 (word clock) with brightness 20. The word clock reports its state via the following mqtt topics:

  • wordclock/$localip - the ip address assigned to the word clodk
  • wordclock/$mac - the mac address of the ESP8266
  • wordclock/$state - (ready|lost). ready when connected to wifi and mqtt. The state switches to lost automatically, when the connection is lost.
  • wordclock/brightness - the current brightness
  • wordclock/mode - the current mode

Dependencies are:

  • FastLed
  • NtpClient
  • Time
  • TimeZone
  • espMqttClient
  • HaMqttConfigBuilder

If you build the firmware using PlatformIO, all dependencies are pulled in automatically. If you prefer a different IDE you have to take care of everything yourself.

The wifi and mqtt credentials are stored in an external "secrets.h" file.

Open caseOpen case
Open caseOpen case

The pictures below are taken with almost minimal brightness of the LEDs.

No diffusorPaper diffusorWith front
No diffusorA sheet of paper as diffusorPaper and front

The case is beautiful, but IMHO it has two drawbacks:

  • The grid part for the LEDs should be printed separately in black. Even though I have spray painted the inner walls of the grid white twice, there's still a glow effect from one chamber to the next.
  • Another reason for the glow effect is probably that it is not possible to bring the LEDs 100% tight to the grid. The cables that you have to solder to the ends and the LED strip itself will always account for a 1mm gap between LEDs and grid, so light can get through. This can perhaps be solved by filing down the vertical parts of the grid a bit, but it would be better to make the horizontal parts of the grid a bit longer on the rear side.

About

An esp8266 based word clock made with PlatformIO.

Topics

Resources

Stars

9 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

WordClock

LanguagesCodacyLicense

An ESP8266 based Word Clock built with PlatformIO that fetches the time from a NTP server.

This is firmware for the 11x10 LED Matrix word clock case from WordClock 12h (desk clock edition) from Thingiverse. It features MQTT autodiscovery for Home Assistant

It currently has three modes:

  • word clock with seconds as ambilight
  • rainbow animation
  • aurora borealis animation

The modes and brightness can be set via mqtt by writing to the following mqtt topics:

  • wordclock/brightness/set (0..255) - very low brighness values (e.g. less than 20) may lead to colors not being shown properly
  • wordclock/mode/set (0..2)

When the word clock is powered up, it starts in mode 0 (word clock) with brightness 20. The word clock reports its state via the following mqtt topics:

  • wordclock/$localip - the ip address assigned to the word clodk
  • wordclock/$mac - the mac address of the ESP8266
  • wordclock/$state - (ready|lost). ready when connected to wifi and mqtt. The state switches to lost automatically, when the connection is lost.
  • wordclock/brightness - the current brightness
  • wordclock/mode - the current mode

Dependencies are:

  • FastLed
  • NtpClient
  • Time
  • TimeZone
  • espMqttClient
  • HaMqttConfigBuilder

If you build the firmware using PlatformIO, all dependencies are pulled in automatically. If you prefer a different IDE you have to take care of everything yourself.

The wifi and mqtt credentials are stored in an external "secrets.h" file.

Open caseOpen case
Open caseOpen case

The pictures below are taken with almost minimal brightness of the LEDs.

No diffusorPaper diffusorWith front
No diffusorA sheet of paper as diffusorPaper and front

The case is beautiful, but IMHO it has two drawbacks:

  • The grid part for the LEDs should be printed separately in black. Even though I have spray painted the inner walls of the grid white twice, there's still a glow effect from one chamber to the next.
  • Another reason for the glow effect is probably that it is not possible to bring the LEDs 100% tight to the grid. The cables that you have to solder to the ends and the LED strip itself will always account for a 1mm gap between LEDs and grid, so light can get through. This can perhaps be solved by filing down the vertical parts of the grid a bit, but it would be better to make the horizontal parts of the grid a bit longer on the rear side.

About

An esp8266 based word clock made with PlatformIO.

Topics

Resources

Stars

9 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

WordClock

LanguagesCodacyLicense

An ESP8266 based Word Clock built with PlatformIO that fetches the time from a NTP server.

This is firmware for the 11x10 LED Matrix word clock case from WordClock 12h (desk clock edition) from Thingiverse. It features MQTT autodiscovery for Home Assistant

It currently has three modes:

  • word clock with seconds as ambilight
  • rainbow animation
  • aurora borealis animation

The modes and brightness can be set via mqtt by writing to the following mqtt topics:

  • wordclock/brightness/set (0..255) - very low brighness values (e.g. less than 20) may lead to colors not being shown properly
  • wordclock/mode/set (0..2)

When the word clock is powered up, it starts in mode 0 (word clock) with brightness 20. The word clock reports its state via the following mqtt topics:

  • wordclock/$localip - the ip address assigned to the word clodk
  • wordclock/$mac - the mac address of the ESP8266
  • wordclock/$state - (ready|lost). ready when connected to wifi and mqtt. The state switches to lost automatically, when the connection is lost.
  • wordclock/brightness - the current brightness
  • wordclock/mode - the current mode

Dependencies are:

  • FastLed
  • NtpClient
  • Time
  • TimeZone
  • espMqttClient
  • HaMqttConfigBuilder

If you build the firmware using PlatformIO, all dependencies are pulled in automatically. If you prefer a different IDE you have to take care of everything yourself.

The wifi and mqtt credentials are stored in an external "secrets.h" file.

Open caseOpen case
Open caseOpen case

The pictures below are taken with almost minimal brightness of the LEDs.

No diffusorPaper diffusorWith front
No diffusorA sheet of paper as diffusorPaper and front

The case is beautiful, but IMHO it has two drawbacks:

  • The grid part for the LEDs should be printed separately in black. Even though I have spray painted the inner walls of the grid white twice, there's still a glow effect from one chamber to the next.
  • Another reason for the glow effect is probably that it is not possible to bring the LEDs 100% tight to the grid. The cables that you have to solder to the ends and the LED strip itself will always account for a 1mm gap between LEDs and grid, so light can get through. This can perhaps be solved by filing down the vertical parts of the grid a bit, but it would be better to make the horizontal parts of the grid a bit longer on the rear side.

About

An esp8266 based word clock made with PlatformIO.

Topics

Resources

Stars

9 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

WordClock

LanguagesCodacyLicense

An ESP8266 based Word Clock built with PlatformIO that fetches the time from a NTP server.

This is firmware for the 11x10 LED Matrix word clock case from WordClock 12h (desk clock edition) from Thingiverse. It features MQTT autodiscovery for Home Assistant

It currently has three modes:

  • word clock with seconds as ambilight
  • rainbow animation
  • aurora borealis animation

The modes and brightness can be set via mqtt by writing to the following mqtt topics:

  • wordclock/brightness/set (0..255) - very low brighness values (e.g. less than 20) may lead to colors not being shown properly
  • wordclock/mode/set (0..2)

When the word clock is powered up, it starts in mode 0 (word clock) with brightness 20. The word clock reports its state via the following mqtt topics:

  • wordclock/$localip - the ip address assigned to the word clodk
  • wordclock/$mac - the mac address of the ESP8266
  • wordclock/$state - (ready|lost). ready when connected to wifi and mqtt. The state switches to lost automatically, when the connection is lost.
  • wordclock/brightness - the current brightness
  • wordclock/mode - the current mode

Dependencies are:

  • FastLed
  • NtpClient
  • Time
  • TimeZone
  • espMqttClient
  • HaMqttConfigBuilder

If you build the firmware using PlatformIO, all dependencies are pulled in automatically. If you prefer a different IDE you have to take care of everything yourself.

The wifi and mqtt credentials are stored in an external "secrets.h" file.

Open caseOpen case
Open caseOpen case

The pictures below are taken with almost minimal brightness of the LEDs.

No diffusorPaper diffusorWith front
No diffusorA sheet of paper as diffusorPaper and front

The case is beautiful, but IMHO it has two drawbacks:

  • The grid part for the LEDs should be printed separately in black. Even though I have spray painted the inner walls of the grid white twice, there's still a glow effect from one chamber to the next.
  • Another reason for the glow effect is probably that it is not possible to bring the LEDs 100% tight to the grid. The cables that you have to solder to the ends and the LED strip itself will always account for a 1mm gap between LEDs and grid, so light can get through. This can perhaps be solved by filing down the vertical parts of the grid a bit, but it would be better to make the horizontal parts of the grid a bit longer on the rear side.

About

An esp8266 based word clock made with PlatformIO.

Topics

Resources

Stars

9 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

WordClock

LanguagesCodacyLicense

An ESP8266 based Word Clock built with PlatformIO that fetches the time from a NTP server.

This is firmware for the 11x10 LED Matrix word clock case from WordClock 12h (desk clock edition) from Thingiverse. It features MQTT autodiscovery for Home Assistant

It currently has three modes:

  • word clock with seconds as ambilight
  • rainbow animation
  • aurora borealis animation

The modes and brightness can be set via mqtt by writing to the following mqtt topics:

  • wordclock/brightness/set (0..255) - very low brighness values (e.g. less than 20) may lead to colors not being shown properly
  • wordclock/mode/set (0..2)

When the word clock is powered up, it starts in mode 0 (word clock) with brightness 20. The word clock reports its state via the following mqtt topics:

  • wordclock/$localip - the ip address assigned to the word clodk
  • wordclock/$mac - the mac address of the ESP8266
  • wordclock/$state - (ready|lost). ready when connected to wifi and mqtt. The state switches to lost automatically, when the connection is lost.
  • wordclock/brightness - the current brightness
  • wordclock/mode - the current mode

Dependencies are:

  • FastLed
  • NtpClient
  • Time
  • TimeZone
  • espMqttClient
  • HaMqttConfigBuilder

If you build the firmware using PlatformIO, all dependencies are pulled in automatically. If you prefer a different IDE you have to take care of everything yourself.

The wifi and mqtt credentials are stored in an external "secrets.h" file.

Open caseOpen case
Open caseOpen case

The pictures below are taken with almost minimal brightness of the LEDs.

No diffusorPaper diffusorWith front
No diffusorA sheet of paper as diffusorPaper and front

The case is beautiful, but IMHO it has two drawbacks:

  • The grid part for the LEDs should be printed separately in black. Even though I have spray painted the inner walls of the grid white twice, there's still a glow effect from one chamber to the next.
  • Another reason for the glow effect is probably that it is not possible to bring the LEDs 100% tight to the grid. The cables that you have to solder to the ends and the LED strip itself will always account for a 1mm gap between LEDs and grid, so light can get through. This can perhaps be solved by filing down the vertical parts of the grid a bit, but it would be better to make the horizontal parts of the grid a bit longer on the rear side.

About

An esp8266 based word clock made with PlatformIO.

Topics

Resources

Stars

9 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages