Migrate NodeMCU_Neopixel

epvpn
Robert Jacob 2 years ago
parent 667c47475d
commit bc1b98ab8d
  1. 0
      content/projekt/NodeMCU_Neopixel/MASTER_script.jpg
  2. 0
      content/projekt/NodeMCU_Neopixel/NodeMCU_Neopixel.jpg
  3. 0
      content/projekt/NodeMCU_Neopixel/font_sample1.jpg
  4. 0
      content/projekt/NodeMCU_Neopixel/font_sample2.jpg
  5. 0
      content/projekt/NodeMCU_Neopixel/font_vorlage.jpg
  6. 64
      content/projekt/NodeMCU_Neopixel/index.md
  7. 0
      content/projekt/NodeMCU_Neopixel/overview.jpg
  8. BIN
      static/images/NodeMCU_Neopixel/NodeMCU_Neopixel.webm

Before

Width:  |  Height:  |  Size: 331 KiB

After

Width:  |  Height:  |  Size: 331 KiB

Before

Width:  |  Height:  |  Size: 377 KiB

After

Width:  |  Height:  |  Size: 377 KiB

Before

Width:  |  Height:  |  Size: 218 KiB

After

Width:  |  Height:  |  Size: 218 KiB

Before

Width:  |  Height:  |  Size: 344 KiB

After

Width:  |  Height:  |  Size: 344 KiB

@ -5,22 +5,24 @@ status: Aktiv
difficulty: einfach
time: ~1h
date: 2019-11-14
image: /images/NodeMCU_Neopixel/overview.jpg
image: overview.jpg
keywords: NodeMCU,ESP8266,ESP32,Lua,Neopixel,Font-Design
---
## Motivation ##
Phail hat eine Lampe gebaut (s. anderes Projekt). Hierfür fehlte
## Motivation
Phail hat eine Lampe gebaut (s. anderes Projekt). Hierfür fehlte
zunächst etwas, mit dem man Text anzeigen kann. Mit einem einfachen
Lua-Script und der WS2812 Bibliothek der NodeMCU sollte so etwas
leicht herstellbar sein.
{{< fluid_img alt="Showtime" src="/images/NodeMCU_Neopixel/NodeMCU_Neopixel.jpg" >}}
{{< fluid_img alt="Showtime" src="NodeMCU_Neopixel.jpg" >}}
## Planung
## Planung ##
Die Lampe besteht aus einer Kette Neopixel. Diese sind aufgeteilt
in einzelne Ringe à 16 Stück. Die Tücke für dies Vorhaben liegt
im Versatz der LEDs. Die aktuelle Lampenmatrix ist also wie folgt
in einzelne Ringe à 16 Stück. Die Tücke für dies Vorhaben liegt
im Versatz der LEDs. Die aktuelle Lampenmatrix ist also wie folgt
aufgebaut (von oben nach unten gibt es insgesamt 20 Ringe - es würde
aber auch mit z.Bsp. 10 Ringen funktionieren):
@ -40,22 +42,23 @@ aber auch mit z.Bsp. 10 Ringen funktionieren):
|01|__001,002,003,004,005,006,007,008,009,010,011,012,013,014,015,016,|
Für den Lampenversatz von Ring zu Ring braucht es einen speziellen
Font (ein Test mit 'Schrägstellen' eines herkömmlichen Fonts ergab
gruselige Resultate ...).
Font (ein Test mit 'Schrägstellen' eines herkömmlichen Fonts ergab
gruselige Resultate ...).
## Font-Design
## Font-Design ##
In der Font-Erstellung liegt die Hauptarbeit in diesem Projekt.
Dazu habe ich ganz traditionell eine Leermatrix mit LibreOffice Draw
Dazu habe ich ganz traditionell eine Leermatrix mit LibreOffice Draw
gemalt und als Vorlage für die ersten 127 Zeichen benutzt (ebenfalls
im Draw nach Gefühl 'gemalt').
im Draw nach Gefühl 'gemalt').
{{< fluid_img alt="Font Vorlage" src="/images/NodeMCU_Neopixel/font_vorlage.jpg" >}}
{{< fluid_img alt="Font Vorlage" src="font_vorlage.jpg" >}}
{{< fluid_img alt="Fontbeispiel 1" src="/images/NodeMCU_Neopixel/font_sample1.jpg" >}}
{{< fluid_img alt="Fontbeispiel 2" src="/images/NodeMCU_Neopixel/font_sample2.jpg" >}}
{{< fluid_img alt="Fontbeispiel 1" src="font_sample1.jpg" >}}
{{< fluid_img alt="Fontbeispiel 2" src="font_sample2.jpg" >}}
Anschließend werden die Pixel einzeln ausgezählt, zunächst binär, dann hex.
Für den hier vorgesehenen 7x9 Font werden je Zeichen 9 Bytes mit 7 Bits
Anschließend werden die Pixel einzeln ausgezählt, zunächst binär, dann hex.
Für den hier vorgesehenen 7x9 Font werden je Zeichen 9 Bytes mit 7 Bits
verwendet (Bits 7-1, Bit0 wird nicht verwendet).
Die Hex-Werte werden in einer Beschreibungsdatei gesammelt (eigentlich
@ -64,11 +67,11 @@ eines kleinen (Lua-)Scripts wird daraus ein Binärfile ('np_codes.bin')
auf dem PC erzeugt und zur NodeMCU hochgeladen. Die Datei dient dann
als 'Character-ROM' (wie schon zu C64er Zeiten ...).
## Font-Anzeige ##
## Font-Anzeige
Um ein leidlich sanftes Durchschieben des Textes zu erreichen, wird
mit einem vergrößerten Puffer gearbeitet. Dies ermöglicht das verdeckte
Laden und Einblenden eines neuen Zeichens. Durch zyklisches Schieben
mit einem vergrößerten Puffer gearbeitet. Dies ermöglicht das verdeckte
Laden und Einblenden eines neuen Zeichens. Durch zyklisches Schieben
wird jetzt das neue Zeichen (und alle anderen Zeichen) langsam (Spalte
für Spalte) in den sichtbaren Bereich geschoben.
@ -82,31 +85,32 @@ für Spalte) in den sichtbaren Bereich geschoben.
|7|181,182,183,184,185,186,187, |188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,|204,205,206,207,208,209,210,|
|6|151,152,153,154,155,156,157, |158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,|174,175,176,177,178,179,180,|
|5|121,122,123,124,125,126,127, |128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,|144,145,146,147,148,149,150,|
|4|091,092,093,094,095,096,097, |098,099,100,101,102,103,104,105,106,107,108,109,110,111,112,113,|114,115,116,117,118,119,120,|
|3|061,062,063,064,065,066,067, |068,069,070,071,072,073,074,075,076,077,078,079,080,081,082,083,|084,085,086,087,088,089,090,|
|4|091,092,093,094,095,096,097, |098,099,100,101,102,103,104,105,106,107,108,109,110,111,112,113,|114,115,116,117,118,119,120,|
|3|061,062,063,064,065,066,067, |068,069,070,071,072,073,074,075,076,077,078,079,080,081,082,083,|084,085,086,087,088,089,090,|
|2|031,032,033,034,035,036,037, |038,039,040,041,042,043,044,045,046,047,048,049,050,051,052,053,|054,055,056,057,058,059,060,|
|1|001,002,003,004,005,006,007, |008,009,010,011,012,013,014,015,016,017,018,019,020,021,022,023,|024,025,026,027,028,029,030,|
Die Zeichen werden jetzt ganz rechts geladen (Indizes Quadrat 24-30 bis 264-270 für die Ringe 1-9).
Die Zeichen werden jetzt ganz rechts geladen (Indizes Quadrat 24-30 bis 264-270 für die Ringe 1-9).
Ring 10 wird für eine doppelt so schnell umlaufende 'Spur' genutzt.
Ring 11-19 wird analog mit einer zweiten Textmeldung geladen, in Ring 20 gibt es dann noch eine 'Spur'.
Das Schieben geschieht dann nach links, jeweils um eine Spalte (also zu Indizes 23,53,83 etc. bis 593).
## Hier noch ein Demo-Filmchen ... ##
## Hier noch ein Demo-Filmchen ...
<video width="500px" controls>
<source src="//media.hacknology.de/images/NodeMCU_Neopixel/NodeMCU_Neopixel.webm" type="video/webm">
Your browser does not support the video tag.
</video>
## Erweiterungen ##
Sofern die NodeMCU Firmware mit Multicast-Erweiterungen genutzt wird,
## Erweiterungen
Sofern die NodeMCU Firmware mit Multicast-Erweiterungen genutzt wird,
kann der NodeMCU-Client auf einfache Weise mit anzuzeigenden Texten versorgt
werden.
werden.
Hier wird z.Bsp. ein Lua-Script auf einem (PC-)Server ausgeführt, das (z.Bsp.) einen
Heise RSS-Feed mitliest und die jeweils zwei aktuellsten Meldungen an alle
Heise RSS-Feed mitliest und die jeweils zwei aktuellsten Meldungen an alle
Multicast-Clients sendet. Im vorliegenden Beispiel erscheinen sie also oben (Ring
11-19) bzw. unten (Ring 1-9).
{{< fluid_img alt="Master" src="/images/NodeMCU_Neopixel/MASTER_script.jpg" >}}
{{< fluid_img alt="Master" src="MASTER_script.jpg" >}}

Before

Width:  |  Height:  |  Size: 345 KiB

After

Width:  |  Height:  |  Size: 345 KiB

Loading…
Cancel
Save