<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.diychristmas.org/wiki/index.php?action=history&amp;feed=atom&amp;title=Appendix_B_-_Controller_Hardware_Comparison</id>
	<title>Appendix B - Controller Hardware Comparison - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.diychristmas.org/wiki/index.php?action=history&amp;feed=atom&amp;title=Appendix_B_-_Controller_Hardware_Comparison"/>
	<link rel="alternate" type="text/html" href="https://www.diychristmas.org/wiki/index.php?title=Appendix_B_-_Controller_Hardware_Comparison&amp;action=history"/>
	<updated>2026-09-17T05:36:47Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.11</generator>
	<entry>
		<id>https://www.diychristmas.org/wiki/index.php?title=Appendix_B_-_Controller_Hardware_Comparison&amp;diff=3455&amp;oldid=prev</id>
		<title>ErnieHorning at 12:15, 18 July 2026</title>
		<link rel="alternate" type="text/html" href="https://www.diychristmas.org/wiki/index.php?title=Appendix_B_-_Controller_Hardware_Comparison&amp;diff=3455&amp;oldid=prev"/>
		<updated>2026-07-18T12:15:28Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 12:15, 18 July 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l3&quot; &gt;Line 3:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Version:&amp;#039;&amp;#039;&amp;#039; 0.1 (Draft)&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Version:&amp;#039;&amp;#039;&amp;#039; 0.1 (Draft)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Written for:&amp;#039;&amp;#039;&amp;#039; &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;ESPPixelStick &lt;/del&gt;Version 4.x&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Written for:&amp;#039;&amp;#039;&amp;#039; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ESPixelStick &lt;/ins&gt;Version 4.x&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Last Updated:&amp;#039;&amp;#039;&amp;#039; July 2026&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Last Updated:&amp;#039;&amp;#039;&amp;#039; July 2026&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l15&quot; &gt;Line 15:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 15:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Purpose&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Purpose&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;This appendix compares common microcontroller and controller-board categories that may be used with &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;ESPPixelStick &lt;/del&gt;firmware.&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;This appendix compares common microcontroller and controller-board categories that may be used with &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ESPixelStick &lt;/ins&gt;firmware.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;It is intended to help readers select hardware appropriate for:&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;It is intended to help readers select hardware appropriate for:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l30&quot; &gt;Line 30:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 30:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Related Chapters&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Related Chapters&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Chapter 2 – &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;ESPPixelStick &lt;/del&gt;Overview&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Chapter 2 – &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ESPixelStick &lt;/ins&gt;Overview&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Chapter 3 – Supported Hardware&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Chapter 3 – Supported Hardware&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Chapter 4 – Hardware Installation&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Chapter 4 – Hardware Installation&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l77&quot; &gt;Line 77:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 77:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;B.3 ESPixelStick Production Hardware&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;B.3 ESPixelStick Production Hardware&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The original &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;ESPPixelStick &lt;/del&gt;hardware was designed specifically for pixel and serial-lighting applications.&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The original &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ESPixelStick &lt;/ins&gt;hardware was designed specifically for pixel and serial-lighting applications.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A production &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;ESPPixelStick &lt;/del&gt;board generally provides:&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A production &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ESPixelStick &lt;/ins&gt;board generally provides:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* ESP8266 processor&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* ESP8266 processor&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l124&quot; &gt;Line 124:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 124:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Other ESP8266 development boards&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Other ESP8266 development boards&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The ESP8266 is the original platform associated with &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;ESPPixelStick &lt;/del&gt;and remains useful for small, distributed controllers.&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The ESP8266 is the original platform associated with &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ESPixelStick &lt;/ins&gt;and remains useful for small, distributed controllers.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Advantages&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Advantages&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l151&quot; &gt;Line 151:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 151:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Single-output designs&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Single-output designs&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Existing &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;ESPPixelStick&lt;/del&gt;-style hardware&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Existing &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ESPixelStick&lt;/ins&gt;-style hardware&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Very small custom controllers&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Very small custom controllers&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l191&quot; &gt;Line 191:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 191:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Other conventional dual-core ESP32 boards&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Other conventional dual-core ESP32 boards&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;ESPPixelStick &lt;/del&gt;project includes ESP32 support, and project documentation distinguishes the ESP32 output mapping from the ESP8266 mapping.&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ESPixelStick &lt;/ins&gt;project includes ESP32 support, and project documentation distinguishes the ESP32 output mapping from the ESP8266 mapping.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Advantages&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Advantages&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l261&quot; &gt;Line 261:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 261:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Temperature monitoring&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Temperature monitoring&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A recent &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;ESPPixelStick &lt;/del&gt;issue documents operation on a QuinLED ESP32-based controller using a Version 4 beta build, but it also illustrates why each output mapping must be verified for the exact board and firmware combination.&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A recent &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ESPixelStick &lt;/ins&gt;issue documents operation on a QuinLED ESP32-based controller using a Version 4 beta build, but it also illustrates why each output mapping must be verified for the exact board and firmware combination.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Advantages&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Advantages&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l276&quot; &gt;Line 276:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 276:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Board-specific firmware configuration&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Board-specific firmware configuration&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Output numbering may not match physical labeling&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Output numbering may not match physical labeling&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Some features may not yet be supported by &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;ESPPixelStick&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Some features may not yet be supported by &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ESPixelStick&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* More expensive than a bare development board&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* More expensive than a bare development board&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Manufacturer revisions may change pin assignments&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Manufacturer revisions may change pin assignments&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l369&quot; &gt;Line 369:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 369:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# Required firmware build&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# Required firmware build&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# GPIO assignments&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# GPIO assignments&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# Whether the interface has been tested with &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;ESPPixelStick&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# Whether the interface has been tested with &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ESPixelStick&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# Whether Wi-Fi and Ethernet can be enabled in the intended configuration&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# Whether Wi-Fi and Ethernet can be enabled in the intended configuration&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l395&quot; &gt;Line 395:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 395:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Engineering Note&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Engineering Note&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;An SD-card socket on the board does not guarantee &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;ESPPixelStick &lt;/del&gt;support.&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;An SD-card socket on the board does not guarantee &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ESPixelStick &lt;/ins&gt;support.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The firmware must support the board’s specific SD interface and pin mapping.&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The firmware must support the board’s specific SD interface and pin mapping.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l683&quot; &gt;Line 683:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 683:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Typical choices:&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Typical choices:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;ESPPixelStick &lt;/del&gt;production board&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ESPixelStick &lt;/ins&gt;production board&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* D1 Mini with output buffer&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* D1 Mini with output buffer&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Small dedicated controller&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Small dedicated controller&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l722&quot; &gt;Line 722:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 722:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Proper line termination where applicable&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Proper line termination where applicable&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A production &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;ESPPixelStick &lt;/del&gt;includes RS-485 hardware intended for serial lighting interfaces.&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A production &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ESPixelStick &lt;/ins&gt;includes RS-485 hardware intended for serial lighting interfaces.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Distributed Yard Display&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Distributed Yard Display&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l961&quot; &gt;Line 961:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 961:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;This appendix is based upon:&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;This appendix is based upon:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;ESPPixelStick &lt;/del&gt;GitHub repository&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ESPixelStick &lt;/ins&gt;GitHub repository&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;ESPPixelStick &lt;/del&gt;Supported Inputs and Outputs documentation&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ESPixelStick &lt;/ins&gt;Supported Inputs and Outputs documentation&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;ESPPixelStick &lt;/del&gt;product documentation&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ESPixelStick &lt;/ins&gt;product documentation&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;ESPPixelStick &lt;/del&gt;GitHub issue and discussion records&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ESPixelStick &lt;/ins&gt;GitHub issue and discussion records&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Espressif processor and module documentation&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Espressif processor and module documentation&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Controller-manufacturer schematics&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Controller-manufacturer schematics&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>ErnieHorning</name></author>
	</entry>
	<entry>
		<id>https://www.diychristmas.org/wiki/index.php?title=Appendix_B_-_Controller_Hardware_Comparison&amp;diff=3436&amp;oldid=prev</id>
		<title>ErnieHorning at 11:42, 18 July 2026</title>
		<link rel="alternate" type="text/html" href="https://www.diychristmas.org/wiki/index.php?title=Appendix_B_-_Controller_Hardware_Comparison&amp;diff=3436&amp;oldid=prev"/>
		<updated>2026-07-18T11:42:09Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 11:42, 18 July 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l55&quot; &gt;Line 55:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 55:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;For this reason, processor compatibility does not automatically guarantee complete board compatibility.&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;For this reason, processor compatibility does not automatically guarantee complete board compatibility.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[File:&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;vertopal_635af067709144fabe2de355e6a715d4/media/image1&lt;/del&gt;.png|&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;624x374px]]&lt;/del&gt;&amp;#039;&amp;#039;&amp;#039;Figure B-1-1 – Hardware Selection Process&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[File:&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Figure_B-01-01_Hardware_Selection&lt;/ins&gt;.png|&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;thumb|none|600px|&lt;/ins&gt;&amp;#039;&amp;#039;&amp;#039;Figure B-1-1 – Hardware Selection Process&amp;#039;&amp;#039;&amp;#039;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Engineering Note&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Engineering Note&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l861&quot; &gt;Line 861:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 861:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[File:&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;vertopal_635af067709144fabe2de355e6a715d4/media/image3&lt;/del&gt;.png|&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;624x374px]]&lt;/del&gt;&amp;#039;&amp;#039;&amp;#039;Figure B-20-1 – Board Evaluation Checklist&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[File:&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Figure_B-20-01_Board_Checklist&lt;/ins&gt;.png|&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;thumb|none|600px|&lt;/ins&gt;&amp;#039;&amp;#039;&amp;#039;Figure B-20-1 – Board Evaluation Checklist&amp;#039;&amp;#039;&amp;#039;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;B.21 Recommended Selection Strategy&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;B.21 Recommended Selection Strategy&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l981&quot; &gt;Line 981:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 981:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| Initial hardware-comparison appendix&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| Initial hardware-comparison appendix&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| 0.5&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| July 2026&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;| Expanded platform categories, comparison tables, selection guidance, evaluation checklist, research items, and current support cautions&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>ErnieHorning</name></author>
	</entry>
	<entry>
		<id>https://www.diychristmas.org/wiki/index.php?title=Appendix_B_-_Controller_Hardware_Comparison&amp;diff=3321&amp;oldid=prev</id>
		<title>ErnieHorning at 22:42, 17 July 2026</title>
		<link rel="alternate" type="text/html" href="https://www.diychristmas.org/wiki/index.php?title=Appendix_B_-_Controller_Hardware_Comparison&amp;diff=3321&amp;oldid=prev"/>
		<updated>2026-07-17T22:42:52Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 22:42, 17 July 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot; &gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Appendix B – Controller Hardware Comparison&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Appendix B – Controller Hardware Comparison&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Version:&amp;#039;&amp;#039;&amp;#039; 0.&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;5 &lt;/del&gt;(Draft)&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Version:&amp;#039;&amp;#039;&amp;#039; 0.&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;1 &lt;/ins&gt;(Draft)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Written for:&amp;#039;&amp;#039;&amp;#039; ESPPixelStick Version 4.x&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Written for:&amp;#039;&amp;#039;&amp;#039; ESPPixelStick Version 4.x&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>ErnieHorning</name></author>
	</entry>
	<entry>
		<id>https://www.diychristmas.org/wiki/index.php?title=Appendix_B_-_Controller_Hardware_Comparison&amp;diff=3303&amp;oldid=prev</id>
		<title>ErnieHorning: Created page with &quot;&#039;&#039;&#039;Appendix B – Controller Hardware Comparison&#039;&#039;&#039;  &#039;&#039;&#039;Version:&#039;&#039;&#039; 0.5 (Draft)  &#039;&#039;&#039;Written for:&#039;&#039;&#039; ESPPixelStick Version 4.x  &#039;&#039;&#039;Last Updated:&#039;&#039;&#039; July 2026  &#039;&#039;&#039;Author:&#039;&#039;&#039; Ern...&quot;</title>
		<link rel="alternate" type="text/html" href="https://www.diychristmas.org/wiki/index.php?title=Appendix_B_-_Controller_Hardware_Comparison&amp;diff=3303&amp;oldid=prev"/>
		<updated>2026-07-17T22:34:12Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;Appendix B – Controller Hardware Comparison&amp;#039;&amp;#039;&amp;#039;  &amp;#039;&amp;#039;&amp;#039;Version:&amp;#039;&amp;#039;&amp;#039; 0.5 (Draft)  &amp;#039;&amp;#039;&amp;#039;Written for:&amp;#039;&amp;#039;&amp;#039; ESPPixelStick Version 4.x  &amp;#039;&amp;#039;&amp;#039;Last Updated:&amp;#039;&amp;#039;&amp;#039; July 2026  &amp;#039;&amp;#039;&amp;#039;Author:&amp;#039;&amp;#039;&amp;#039; Ern...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Appendix B – Controller Hardware Comparison&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Version:&amp;#039;&amp;#039;&amp;#039; 0.5 (Draft)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Written for:&amp;#039;&amp;#039;&amp;#039; ESPPixelStick Version 4.x&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Last Updated:&amp;#039;&amp;#039;&amp;#039; July 2026&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Author:&amp;#039;&amp;#039;&amp;#039; Ernest Horning&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Research &amp;amp;amp; Technical Editing:&amp;#039;&amp;#039;&amp;#039; ChatGPT&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Appendix Summary&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Purpose&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
This appendix compares common microcontroller and controller-board categories that may be used with ESPPixelStick firmware.&lt;br /&gt;
&lt;br /&gt;
It is intended to help readers select hardware appropriate for:&lt;br /&gt;
&lt;br /&gt;
* Single-output pixel props&lt;br /&gt;
* Multi-output controllers&lt;br /&gt;
* Serial lighting interfaces&lt;br /&gt;
* Ethernet installations&lt;br /&gt;
* Stand-alone playback&lt;br /&gt;
* Experimental or custom hardware&lt;br /&gt;
&lt;br /&gt;
This appendix does not replace the hardware-specific documentation for any controller.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Related Chapters&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* Chapter 2 – ESPPixelStick Overview&lt;br /&gt;
* Chapter 3 – Supported Hardware&lt;br /&gt;
* Chapter 4 – Hardware Installation&lt;br /&gt;
* Chapter 5 – Firmware Installation&lt;br /&gt;
* Chapter 7 – Inputs, Outputs, and Interfaces&lt;br /&gt;
* Appendix A – GPIO Reference Tables&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B.1 Introduction&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
ESPixelStick firmware can operate on more than one type of Espressif microcontroller.&lt;br /&gt;
&lt;br /&gt;
The official project describes the firmware as supporting the ESP8266 and ESP32 platforms. However, those platform names include many individual modules and development boards. Two boards using the same processor may differ substantially in:&lt;br /&gt;
&lt;br /&gt;
* Available GPIO pins&lt;br /&gt;
* Flash capacity&lt;br /&gt;
* USB interface&lt;br /&gt;
* Voltage regulation&lt;br /&gt;
* Ethernet support&lt;br /&gt;
* PSRAM&lt;br /&gt;
* SD-card support&lt;br /&gt;
* Connector arrangement&lt;br /&gt;
* Pins reserved by onboard hardware&lt;br /&gt;
&lt;br /&gt;
For this reason, processor compatibility does not automatically guarantee complete board compatibility.&lt;br /&gt;
&lt;br /&gt;
[[File:vertopal_635af067709144fabe2de355e6a715d4/media/image1.png|624x374px]]&amp;#039;&amp;#039;&amp;#039;Figure B-1-1 – Hardware Selection Process&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Engineering Note&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Select hardware according to the required application rather than simply choosing the board with the largest processor or the greatest number of pins.&lt;br /&gt;
&lt;br /&gt;
A simple prop may operate more reliably with a small, well-understood controller than with a more complex experimental board.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B.2 Hardware Categories&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
For the purposes of this appendix, hardware is divided into the following categories:&lt;br /&gt;
&lt;br /&gt;
# ESPixelStick production hardware&lt;br /&gt;
# Generic ESP8266 boards&lt;br /&gt;
# Conventional ESP32 boards&lt;br /&gt;
# Specialized ESP32 controller boards&lt;br /&gt;
# Ethernet-capable hardware&lt;br /&gt;
# Newer or experimental ESP32-family devices&lt;br /&gt;
# Custom-designed controllers&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B.3 ESPixelStick Production Hardware&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The original ESPPixelStick hardware was designed specifically for pixel and serial-lighting applications.&lt;br /&gt;
&lt;br /&gt;
A production ESPPixelStick board generally provides:&lt;br /&gt;
&lt;br /&gt;
* ESP8266 processor&lt;br /&gt;
* Pixel data output&lt;br /&gt;
* RS-485 hardware for DMX or similar serial interfaces&lt;br /&gt;
* Power input suitable for common pixel voltages&lt;br /&gt;
* Compact inline construction&lt;br /&gt;
* Hardware designed around the firmware&lt;br /&gt;
&lt;br /&gt;
The ESPixelStick V3 product documentation describes it as an ESP8266-based, single-output Wi-Fi pixel and DMX controller. It supports E1.31 and DDP and includes an RS-485 transceiver for differential serial output.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Advantages&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* Purpose-built hardware&lt;br /&gt;
* Compact size&lt;br /&gt;
* Known electrical design&lt;br /&gt;
* Built-in output-conditioning circuitry&lt;br /&gt;
* Convenient for individual props&lt;br /&gt;
* Less custom wiring than a development board&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Limitations&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* Fewer available GPIO pins&lt;br /&gt;
* Primarily intended for one principal pixel or serial output&lt;br /&gt;
* Less suitable for large multi-output controllers&lt;br /&gt;
* Older ESP8266 processing platform&lt;br /&gt;
* Availability may vary&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Best Suited For&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* Individual yard props&lt;br /&gt;
* Small pixel strings&lt;br /&gt;
* DMX or Renard output&lt;br /&gt;
* Distributed Wi-Fi controllers&lt;br /&gt;
* Users who prefer ready-made hardware&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B.4 Generic ESP8266 Boards&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Generic ESP8266 boards include:&lt;br /&gt;
&lt;br /&gt;
* ESP-01&lt;br /&gt;
* D1 Mini&lt;br /&gt;
* NodeMCU&lt;br /&gt;
* Other ESP8266 development boards&lt;br /&gt;
&lt;br /&gt;
The ESP8266 is the original platform associated with ESPPixelStick and remains useful for small, distributed controllers.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Advantages&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* Low cost&lt;br /&gt;
* Small size&lt;br /&gt;
* Widely available&lt;br /&gt;
* Low power consumption&lt;br /&gt;
* Sufficient performance for many single-output props&lt;br /&gt;
* Extensive community experience&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Limitations&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* Limited RAM&lt;br /&gt;
* Limited number of practical GPIO pins&lt;br /&gt;
* Usually Wi-Fi only&lt;br /&gt;
* Some pins affect boot behavior&lt;br /&gt;
* Most boards require external pixel-output circuitry&lt;br /&gt;
* Not ideal for large numbers of outputs&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ESP-01&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The ESP-01 is extremely compact but exposes very few GPIO pins.&lt;br /&gt;
&lt;br /&gt;
It is best suited for:&lt;br /&gt;
&lt;br /&gt;
* Single-output designs&lt;br /&gt;
* Existing ESPPixelStick-style hardware&lt;br /&gt;
* Very small custom controllers&lt;br /&gt;
&lt;br /&gt;
Its limited pin count makes it poorly suited for multi-output or heavily expanded systems.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;D1 Mini&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The D1 Mini is a convenient general-purpose ESP8266 development board.&lt;br /&gt;
&lt;br /&gt;
Typical advantages include:&lt;br /&gt;
&lt;br /&gt;
* Integrated USB interface&lt;br /&gt;
* Onboard voltage regulation&lt;br /&gt;
* Small physical size&lt;br /&gt;
* More accessible GPIO than the ESP-01&lt;br /&gt;
* Inexpensive replacement boards&lt;br /&gt;
&lt;br /&gt;
The D1 Mini is commonly used in custom pixel controllers, although external protection or level-shifting circuitry may be desirable.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;NodeMCU&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
NodeMCU boards are physically larger than D1 Mini boards but provide similar ESP8266 functionality.&lt;br /&gt;
&lt;br /&gt;
They may be useful for:&lt;br /&gt;
&lt;br /&gt;
* Breadboard development&lt;br /&gt;
* Prototyping&lt;br /&gt;
* Applications where physical size is not critical&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B.5 Conventional ESP32 Boards&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The original ESP32 family provides more processing power, RAM, and GPIO capability than the ESP8266.&lt;br /&gt;
&lt;br /&gt;
Common forms include:&lt;br /&gt;
&lt;br /&gt;
* ESP32 DevKit&lt;br /&gt;
* ESP32-WROOM development boards&lt;br /&gt;
* LOLIN D32-series boards&lt;br /&gt;
* Other conventional dual-core ESP32 boards&lt;br /&gt;
&lt;br /&gt;
The ESPPixelStick project includes ESP32 support, and project documentation distinguishes the ESP32 output mapping from the ESP8266 mapping.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Advantages&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* More GPIO pins&lt;br /&gt;
* Greater processing capacity&lt;br /&gt;
* More RAM&lt;br /&gt;
* Better suited to multiple outputs&lt;br /&gt;
* More peripheral interfaces&lt;br /&gt;
* Greater potential for SD-card and Ethernet hardware&lt;br /&gt;
* Better suited to advanced controller designs&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Limitations&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* Pin assignments vary substantially by board&lt;br /&gt;
* Some GPIO pins are input-only&lt;br /&gt;
* Some pins are reserved for flash or onboard hardware&lt;br /&gt;
* Development-board layouts are not standardized&lt;br /&gt;
* Firmware images may be board-specific&lt;br /&gt;
* More features can create more configuration complexity&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Best Suited For&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* Multi-output controllers&lt;br /&gt;
* Higher pixel counts&lt;br /&gt;
* Controllers requiring several interfaces&lt;br /&gt;
* Stand-alone playback&lt;br /&gt;
* SD-card-equipped designs&lt;br /&gt;
* Advanced custom controller projects&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B.6 ESP32 Development-Board Variations&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Not every board labeled “ESP32” is electrically identical.&lt;br /&gt;
&lt;br /&gt;
Differences may include:&lt;br /&gt;
&lt;br /&gt;
* 30-pin versus 36-pin or 38-pin headers&lt;br /&gt;
* Different USB-to-serial chips&lt;br /&gt;
* Different voltage regulators&lt;br /&gt;
* External antenna connector&lt;br /&gt;
* PSRAM&lt;br /&gt;
* Different flash sizes&lt;br /&gt;
* Different onboard LED pins&lt;br /&gt;
* Different boot and reset circuits&lt;br /&gt;
* Missing or internally reserved GPIO pins&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Engineering Note&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Never select GPIO assignments solely from the processor datasheet.&lt;br /&gt;
&lt;br /&gt;
Verify the schematic or pinout for the exact development board being used.&lt;br /&gt;
&lt;br /&gt;
Appendix A should be consulted after identifying the exact board model.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B.7 Specialized ESP32 Pixel Controllers&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Several third-party controller boards use ESP32 processors and provide circuitry intended specifically for pixel control.&lt;br /&gt;
&lt;br /&gt;
Depending upon the design, these boards may include:&lt;br /&gt;
&lt;br /&gt;
* Multiple fused outputs&lt;br /&gt;
* Logic-level shifting&lt;br /&gt;
* Power distribution&lt;br /&gt;
* Differential outputs&lt;br /&gt;
* Ethernet&lt;br /&gt;
* SD-card socket&lt;br /&gt;
* External antenna connector&lt;br /&gt;
* Output-status LEDs&lt;br /&gt;
* Temperature monitoring&lt;br /&gt;
&lt;br /&gt;
A recent ESPPixelStick issue documents operation on a QuinLED ESP32-based controller using a Version 4 beta build, but it also illustrates why each output mapping must be verified for the exact board and firmware combination.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Advantages&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* Less custom wiring&lt;br /&gt;
* Integrated output protection&lt;br /&gt;
* Multiple pixel outputs&lt;br /&gt;
* Convenient power distribution&lt;br /&gt;
* Mechanically organized connectors&lt;br /&gt;
* Better suited to permanent controller installations&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Limitations&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* Board-specific firmware configuration&lt;br /&gt;
* Output numbering may not match physical labeling&lt;br /&gt;
* Some features may not yet be supported by ESPPixelStick&lt;br /&gt;
* More expensive than a bare development board&lt;br /&gt;
* Manufacturer revisions may change pin assignments&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Best Suited For&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* Medium and large props&lt;br /&gt;
* Centralized multi-output controllers&lt;br /&gt;
* Matrixes&lt;br /&gt;
* Megatrees&lt;br /&gt;
* Users who want integrated power distribution&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B.8 Wi-Fi Hardware&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Most ESP8266 and ESP32 development boards include Wi-Fi.&lt;br /&gt;
&lt;br /&gt;
Wi-Fi controllers are useful when:&lt;br /&gt;
&lt;br /&gt;
* Running network cable is impractical&lt;br /&gt;
* Controllers are distributed throughout a display&lt;br /&gt;
* Pixel data rates remain within the network design limits&lt;br /&gt;
* Suitable access-point coverage is available&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Advantages&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* Minimal data cabling&lt;br /&gt;
* Easy placement near props&lt;br /&gt;
* Low-cost network architecture&lt;br /&gt;
* Convenient for temporary displays&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Limitations&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* Radio interference&lt;br /&gt;
* Dependence on access-point coverage&lt;br /&gt;
* Shared wireless bandwidth&lt;br /&gt;
* Performance affected by antenna placement&lt;br /&gt;
* Metal enclosures may reduce signal strength&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Engineering Recommendation&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Do not place a controller antenna directly against:&lt;br /&gt;
&lt;br /&gt;
* Metal enclosure walls&lt;br /&gt;
* Power supplies&lt;br /&gt;
* Large wiring bundles&lt;br /&gt;
* Grounded metal mounting plates&lt;br /&gt;
&lt;br /&gt;
Where practical, position the antenna near a nonmetallic portion of the enclosure.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B.9 Ethernet Hardware&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Ethernet may provide:&lt;br /&gt;
&lt;br /&gt;
* Predictable wired connectivity&lt;br /&gt;
* Reduced dependence on radio conditions&lt;br /&gt;
* Convenient use in dense controller installations&lt;br /&gt;
* Improved network isolation&lt;br /&gt;
&lt;br /&gt;
However, Ethernet support depends on both the controller hardware and the firmware driver.&lt;br /&gt;
&lt;br /&gt;
Support should never be assumed merely because an ESP32 board includes an Ethernet connector.&lt;br /&gt;
&lt;br /&gt;
Project issues show continuing work and requests involving ESP32 Ethernet, W5500 SPI Ethernet, and additional Ethernet switching hardware. These items demonstrate that support varies by interface and firmware revision.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Common Ethernet Types&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Internal ESP32 Ethernet MAC with External PHY&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Some ESP32 boards use the processor’s built-in Ethernet MAC with an external physical-layer device.&lt;br /&gt;
&lt;br /&gt;
Examples may use:&lt;br /&gt;
&lt;br /&gt;
* LAN8720&lt;br /&gt;
* Other RMII PHY devices&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;SPI Ethernet&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Some boards use an Ethernet controller connected through SPI.&lt;br /&gt;
&lt;br /&gt;
A common example is:&lt;br /&gt;
&lt;br /&gt;
* W5500&lt;br /&gt;
&lt;br /&gt;
An open project enhancement request specifically addresses W5500 SPI Ethernet support, so it should not be treated as universally supported without checking the current firmware status.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Engineering Recommendation&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Before purchasing an Ethernet controller, verify:&lt;br /&gt;
&lt;br /&gt;
# Exact Ethernet controller or PHY&lt;br /&gt;
# Exact ESP32 variant&lt;br /&gt;
# Required firmware build&lt;br /&gt;
# GPIO assignments&lt;br /&gt;
# Whether the interface has been tested with ESPPixelStick&lt;br /&gt;
# Whether Wi-Fi and Ethernet can be enabled in the intended configuration&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B.10 SD-Card Hardware&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Some ESP32 boards include or support SD-card storage.&lt;br /&gt;
&lt;br /&gt;
SD storage may be used for:&lt;br /&gt;
&lt;br /&gt;
* Sequence files&lt;br /&gt;
* Stand-alone playback&lt;br /&gt;
* FPP remote operation&lt;br /&gt;
* Configuration or log storage&lt;br /&gt;
&lt;br /&gt;
Not every SD-card interface is wired in the same manner.&lt;br /&gt;
&lt;br /&gt;
Important differences include:&lt;br /&gt;
&lt;br /&gt;
* SPI versus SDMMC interface&lt;br /&gt;
* Chip-select pin&lt;br /&gt;
* Shared SPI devices&lt;br /&gt;
* Card-detect switch&lt;br /&gt;
* Power-control circuitry&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Engineering Note&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
An SD-card socket on the board does not guarantee ESPPixelStick support.&lt;br /&gt;
&lt;br /&gt;
The firmware must support the board’s specific SD interface and pin mapping.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B.11 PSRAM&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Some ESP32 modules include external pseudo-static RAM, commonly called PSRAM.&lt;br /&gt;
&lt;br /&gt;
PSRAM may be useful for:&lt;br /&gt;
&lt;br /&gt;
* Large frame buffers&lt;br /&gt;
* Large web resources&lt;br /&gt;
* Sequence playback&lt;br /&gt;
* Memory-intensive features&lt;br /&gt;
&lt;br /&gt;
However, basic pixel output does not always require PSRAM.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Engineering Recommendation&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Do not select a PSRAM-equipped board unless the intended firmware feature benefits from it.&lt;br /&gt;
&lt;br /&gt;
Extra memory does not correct poor power distribution, network design, or signal wiring.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B.12 External Antennas&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Some modules provide a U.FL or similar connector for an external antenna.&lt;br /&gt;
&lt;br /&gt;
External antennas may improve:&lt;br /&gt;
&lt;br /&gt;
* Range&lt;br /&gt;
* Enclosure placement&lt;br /&gt;
* Signal strength through walls&lt;br /&gt;
* Performance inside large installations&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Caution&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
A board with an external antenna connector may require:&lt;br /&gt;
&lt;br /&gt;
* A resistor or jumper change&lt;br /&gt;
* Selection between onboard and external antenna&lt;br /&gt;
* A compatible 2.4 GHz antenna&lt;br /&gt;
* Proper antenna mounting&lt;br /&gt;
&lt;br /&gt;
Never operate a radio design in a configuration prohibited by its manufacturer.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B.13 USB Interfaces&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Development boards may use:&lt;br /&gt;
&lt;br /&gt;
* Micro-USB&lt;br /&gt;
* USB-C&lt;br /&gt;
* USB-to-UART bridge&lt;br /&gt;
* Native USB&lt;br /&gt;
* Separate programming and power ports&lt;br /&gt;
&lt;br /&gt;
USB may provide:&lt;br /&gt;
&lt;br /&gt;
* Firmware installation&lt;br /&gt;
* Serial diagnostics&lt;br /&gt;
* Power during bench testing&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Common USB Problems&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* Charge-only cable&lt;br /&gt;
* Insufficient cable quality&lt;br /&gt;
* Missing driver&lt;br /&gt;
* USB connector used only for power&lt;br /&gt;
* Incorrect boot mode&lt;br /&gt;
* Native-USB firmware mismatch&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B.14 Logic-Level Output Circuitry&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Most ESP8266 and ESP32 GPIO signals operate at approximately 3.3 V logic.&lt;br /&gt;
&lt;br /&gt;
Many pixels accept these signals directly under favorable conditions, but not every installation has sufficient signal margin.&lt;br /&gt;
&lt;br /&gt;
Controller hardware may include:&lt;br /&gt;
&lt;br /&gt;
* Logic-level shifter&lt;br /&gt;
* Series resistor&lt;br /&gt;
* Output buffer&lt;br /&gt;
* Differential transmitter&lt;br /&gt;
* Electrostatic-discharge protection&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Bare Development Board&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
A bare development board usually does not provide robust pixel-output conditioning.&lt;br /&gt;
&lt;br /&gt;
It may function successfully during bench testing but become unreliable with:&lt;br /&gt;
&lt;br /&gt;
* Longer data cables&lt;br /&gt;
* Lower pixel supply voltage margin&lt;br /&gt;
* Electrical noise&lt;br /&gt;
* Outdoor wiring&lt;br /&gt;
* Multiple connectors&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Purpose-Built Controller&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
A purpose-built controller usually provides a more predictable output interface.&lt;br /&gt;
&lt;br /&gt;
This is particularly useful for:&lt;br /&gt;
&lt;br /&gt;
* Long-term outdoor installations&lt;br /&gt;
* Long data leads&lt;br /&gt;
* Large props&lt;br /&gt;
* Equipment repeatedly connected and disconnected&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B.15 Hardware Comparison Table&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!width=&amp;quot;16%&amp;quot;| &amp;#039;&amp;#039;&amp;#039;Hardware Category&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
!width=&amp;quot;12%&amp;quot;| &amp;#039;&amp;#039;&amp;#039;Typical Processor&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
!width=&amp;quot;13%&amp;quot;| &amp;#039;&amp;#039;&amp;#039;Wi-Fi&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
!width=&amp;quot;13%&amp;quot;| &amp;#039;&amp;#039;&amp;#039;Ethernet&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
!width=&amp;quot;14%&amp;quot;| &amp;#039;&amp;#039;&amp;#039;Practical Output Capacity&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
!width=&amp;quot;14%&amp;quot;| &amp;#039;&amp;#039;&amp;#039;Integrated Pixel Interface&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
!width=&amp;quot;15%&amp;quot;| &amp;#039;&amp;#039;&amp;#039;Relative Complexity&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| ESPixelStick production board&lt;br /&gt;
| ESP8266&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Single principal output&lt;br /&gt;
| Yes&lt;br /&gt;
| Low&lt;br /&gt;
|-&lt;br /&gt;
| ESP-01 custom board&lt;br /&gt;
| ESP8266&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Very limited&lt;br /&gt;
| Usually external&lt;br /&gt;
| Medium&lt;br /&gt;
|-&lt;br /&gt;
| D1 Mini&lt;br /&gt;
| ESP8266&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Single or small number&lt;br /&gt;
| Usually external&lt;br /&gt;
| Low to medium&lt;br /&gt;
|-&lt;br /&gt;
| NodeMCU&lt;br /&gt;
| ESP8266&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Single or small number&lt;br /&gt;
| Usually external&lt;br /&gt;
| Low to medium&lt;br /&gt;
|-&lt;br /&gt;
| Generic ESP32 DevKit&lt;br /&gt;
| ESP32&lt;br /&gt;
| Yes&lt;br /&gt;
| Board dependent&lt;br /&gt;
| Multiple outputs&lt;br /&gt;
| Usually external&lt;br /&gt;
| Medium&lt;br /&gt;
|-&lt;br /&gt;
| Specialized ESP32 pixel board&lt;br /&gt;
| ESP32&lt;br /&gt;
| Usually&lt;br /&gt;
| Board dependent&lt;br /&gt;
| Multiple outputs&lt;br /&gt;
| Usually yes&lt;br /&gt;
| Medium&lt;br /&gt;
|-&lt;br /&gt;
| ESP32 Ethernet board&lt;br /&gt;
| ESP32&lt;br /&gt;
| Often&lt;br /&gt;
| Yes&lt;br /&gt;
| Multiple outputs&lt;br /&gt;
| Board dependent&lt;br /&gt;
| Medium to high&lt;br /&gt;
|-&lt;br /&gt;
| Newer ESP32-family board&lt;br /&gt;
| Varies&lt;br /&gt;
| Usually&lt;br /&gt;
| Varies&lt;br /&gt;
| Firmware dependent&lt;br /&gt;
| Usually external&lt;br /&gt;
| Experimental&lt;br /&gt;
|-&lt;br /&gt;
| Custom controller PCB&lt;br /&gt;
| ESP8266 or ESP32&lt;br /&gt;
| Design dependent&lt;br /&gt;
| Design dependent&lt;br /&gt;
| Design dependent&lt;br /&gt;
| Design dependent&lt;br /&gt;
| High&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Table Note&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
“Practical Output Capacity” is intentionally descriptive rather than numerical.&lt;br /&gt;
&lt;br /&gt;
The actual number of usable outputs depends on:&lt;br /&gt;
&lt;br /&gt;
* Firmware limits&lt;br /&gt;
* Processor timing resources&lt;br /&gt;
* Pixel protocol&lt;br /&gt;
* Frame rate&lt;br /&gt;
* Pixel count&lt;br /&gt;
* GPIO availability&lt;br /&gt;
* Other enabled interfaces&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B.16 Feature Comparison Table&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!width=&amp;quot;28%&amp;quot;| &amp;#039;&amp;#039;&amp;#039;Feature&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
!width=&amp;quot;19%&amp;quot;| &amp;#039;&amp;#039;&amp;#039;ESP8266&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
!width=&amp;quot;23%&amp;quot;| &amp;#039;&amp;#039;&amp;#039;Conventional ESP32&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
!width=&amp;quot;28%&amp;quot;| &amp;#039;&amp;#039;&amp;#039;Specialized ESP32 Board&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| Low purchase cost&lt;br /&gt;
| Excellent&lt;br /&gt;
| Good&lt;br /&gt;
| Moderate&lt;br /&gt;
|-&lt;br /&gt;
| Small physical size&lt;br /&gt;
| Excellent&lt;br /&gt;
| Good&lt;br /&gt;
| Varies&lt;br /&gt;
|-&lt;br /&gt;
| Single-output prop control&lt;br /&gt;
| Excellent&lt;br /&gt;
| Excellent&lt;br /&gt;
| Excellent&lt;br /&gt;
|-&lt;br /&gt;
| Multi-output control&lt;br /&gt;
| Limited&lt;br /&gt;
| Good&lt;br /&gt;
| Excellent&lt;br /&gt;
|-&lt;br /&gt;
| Available GPIO&lt;br /&gt;
| Limited&lt;br /&gt;
| Good&lt;br /&gt;
| Board dependent&lt;br /&gt;
|-&lt;br /&gt;
| Integrated USB&lt;br /&gt;
| Board dependent&lt;br /&gt;
| Common&lt;br /&gt;
| Common&lt;br /&gt;
|-&lt;br /&gt;
| Ethernet potential&lt;br /&gt;
| Limited&lt;br /&gt;
| Good&lt;br /&gt;
| Board dependent&lt;br /&gt;
|-&lt;br /&gt;
| SD-card potential&lt;br /&gt;
| Limited&lt;br /&gt;
| Good&lt;br /&gt;
| Board dependent&lt;br /&gt;
|-&lt;br /&gt;
| PSRAM availability&lt;br /&gt;
| No&lt;br /&gt;
| Some modules&lt;br /&gt;
| Board dependent&lt;br /&gt;
|-&lt;br /&gt;
| Built-in pixel protection&lt;br /&gt;
| Rare&lt;br /&gt;
| Rare&lt;br /&gt;
| Common&lt;br /&gt;
|-&lt;br /&gt;
| Ease of custom wiring&lt;br /&gt;
| Good&lt;br /&gt;
| Moderate&lt;br /&gt;
| Excellent&lt;br /&gt;
|-&lt;br /&gt;
| Firmware certainty&lt;br /&gt;
| Mature platform&lt;br /&gt;
| Build dependent&lt;br /&gt;
| Board dependent&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B.17 Selecting Hardware by Application&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Small Individual Prop&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Recommended characteristics:&lt;br /&gt;
&lt;br /&gt;
* ESP8266 or small ESP32&lt;br /&gt;
* One pixel output&lt;br /&gt;
* Wi-Fi&lt;br /&gt;
* Compact enclosure&lt;br /&gt;
* Simple power input&lt;br /&gt;
&lt;br /&gt;
Typical choices:&lt;br /&gt;
&lt;br /&gt;
* ESPPixelStick production board&lt;br /&gt;
* D1 Mini with output buffer&lt;br /&gt;
* Small dedicated controller&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Large Individual Prop&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Recommended characteristics:&lt;br /&gt;
&lt;br /&gt;
* ESP32&lt;br /&gt;
* Several GPIO outputs&lt;br /&gt;
* Suitable level shifting&lt;br /&gt;
* Adequate power distribution&lt;br /&gt;
* Strong strain relief&lt;br /&gt;
&lt;br /&gt;
Typical choices:&lt;br /&gt;
&lt;br /&gt;
* Generic ESP32 with custom interface board&lt;br /&gt;
* Specialized multi-output ESP32 controller&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Matrix&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Recommended characteristics:&lt;br /&gt;
&lt;br /&gt;
* ESP32&lt;br /&gt;
* Multiple outputs&lt;br /&gt;
* Good memory capacity&lt;br /&gt;
* High network throughput&lt;br /&gt;
* Well-organized power distribution&lt;br /&gt;
* Optional SD-card capability&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;DMX or Renard Device&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Recommended characteristics:&lt;br /&gt;
&lt;br /&gt;
* Supported serial output&lt;br /&gt;
* RS-485 transceiver where required&lt;br /&gt;
* Correct connector pinout&lt;br /&gt;
* Proper line termination where applicable&lt;br /&gt;
&lt;br /&gt;
A production ESPPixelStick includes RS-485 hardware intended for serial lighting interfaces.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Distributed Yard Display&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Recommended characteristics:&lt;br /&gt;
&lt;br /&gt;
* Compact Wi-Fi controllers&lt;br /&gt;
* One controller near each prop&lt;br /&gt;
* Minimal long pixel-data cables&lt;br /&gt;
* Weather-resistant enclosure&lt;br /&gt;
* Replaceable low-cost hardware&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Centralized Controller&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Recommended characteristics:&lt;br /&gt;
&lt;br /&gt;
* Multiple outputs&lt;br /&gt;
* Ethernet where supported&lt;br /&gt;
* Fused power distribution&lt;br /&gt;
* Larger enclosure&lt;br /&gt;
* Organized cable entry&lt;br /&gt;
* Adequate ventilation&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B.18 Newer ESP32-Family Processors&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The ESP32 family now includes several processor variants.&lt;br /&gt;
&lt;br /&gt;
Examples include:&lt;br /&gt;
&lt;br /&gt;
* ESP32-S2&lt;br /&gt;
* ESP32-S3&lt;br /&gt;
* ESP32-C2&lt;br /&gt;
* ESP32-C3&lt;br /&gt;
* ESP32-C6&lt;br /&gt;
* Other later variants&lt;br /&gt;
&lt;br /&gt;
These processors are not automatically interchangeable with the original ESP32.&lt;br /&gt;
&lt;br /&gt;
Differences may include:&lt;br /&gt;
&lt;br /&gt;
* Processor architecture&lt;br /&gt;
* Number of cores&lt;br /&gt;
* USB support&lt;br /&gt;
* GPIO matrix&lt;br /&gt;
* Peripheral availability&lt;br /&gt;
* Radio capabilities&lt;br /&gt;
* Memory arrangement&lt;br /&gt;
* Arduino core support&lt;br /&gt;
&lt;br /&gt;
A February 2026 project issue requests consideration of an ESP32-S3-based platform, indicating that support for newer variants should still be verified rather than assumed.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Engineering Recommendation&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
For Version 0.1 of this manual, newer ESP32-family processors should be identified as:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Board- and firmware-build dependent. Verify current support before purchasing hardware.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B.19 Unsupported and Experimental Hardware&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
A board may be considered experimental when:&lt;br /&gt;
&lt;br /&gt;
* It requires a custom firmware build.&lt;br /&gt;
* It is not present in the standard installer.&lt;br /&gt;
* GPIO mappings have not been documented.&lt;br /&gt;
* Ethernet or SD support is incomplete.&lt;br /&gt;
* It appears only in an unresolved issue or discussion.&lt;br /&gt;
* Only one user has reported successful operation.&lt;br /&gt;
* Required libraries differ from the normal project build.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Warning&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Do not describe hardware as officially supported solely because:&lt;br /&gt;
&lt;br /&gt;
* The firmware compiled once.&lt;br /&gt;
* A similar processor is supported.&lt;br /&gt;
* WLED supports the board.&lt;br /&gt;
* Arduino recognizes the board.&lt;br /&gt;
* The board boots to a web interface.&lt;br /&gt;
* One output happened to operate.&lt;br /&gt;
&lt;br /&gt;
Complete support requires testing of the functions actually needed by the application.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B.20 Hardware Evaluation Checklist&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Before selecting a controller, record the following:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!width=&amp;quot;34%&amp;quot;| &amp;#039;&amp;#039;&amp;#039;Item&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
!width=&amp;quot;65%&amp;quot;| &amp;#039;&amp;#039;&amp;#039;Information Required&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| Manufacturer&lt;br /&gt;
| Exact manufacturer or seller&lt;br /&gt;
|-&lt;br /&gt;
| Board model&lt;br /&gt;
| Full model and revision&lt;br /&gt;
|-&lt;br /&gt;
| Processor&lt;br /&gt;
| Exact ESP8266 or ESP32 variant&lt;br /&gt;
|-&lt;br /&gt;
| Module&lt;br /&gt;
| Exact module designation&lt;br /&gt;
|-&lt;br /&gt;
| Flash&lt;br /&gt;
| Capacity and mode&lt;br /&gt;
|-&lt;br /&gt;
| PSRAM&lt;br /&gt;
| Present or absent&lt;br /&gt;
|-&lt;br /&gt;
| USB&lt;br /&gt;
| Connector and interface type&lt;br /&gt;
|-&lt;br /&gt;
| Wi-Fi antenna&lt;br /&gt;
| Internal or external&lt;br /&gt;
|-&lt;br /&gt;
| Ethernet&lt;br /&gt;
| PHY or controller type&lt;br /&gt;
|-&lt;br /&gt;
| SD card&lt;br /&gt;
| Interface and pin assignment&lt;br /&gt;
|-&lt;br /&gt;
| Available GPIO&lt;br /&gt;
| Verified from board schematic&lt;br /&gt;
|-&lt;br /&gt;
| Output buffering&lt;br /&gt;
| Present or absent&lt;br /&gt;
|-&lt;br /&gt;
| Power input&lt;br /&gt;
| Voltage range&lt;br /&gt;
|-&lt;br /&gt;
| Firmware build&lt;br /&gt;
| Exact compatible image&lt;br /&gt;
|-&lt;br /&gt;
| Test status&lt;br /&gt;
| Verified functions&lt;br /&gt;
|-&lt;br /&gt;
| Documentation&lt;br /&gt;
| Link or saved schematic&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:vertopal_635af067709144fabe2de355e6a715d4/media/image3.png|624x374px]]&amp;#039;&amp;#039;&amp;#039;Figure B-20-1 – Board Evaluation Checklist&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B.21 Recommended Selection Strategy&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
A practical selection process is:&lt;br /&gt;
&lt;br /&gt;
# Define the required number of outputs.&lt;br /&gt;
# Determine whether Wi-Fi or Ethernet is required.&lt;br /&gt;
# Determine whether SD storage is required.&lt;br /&gt;
# Identify voltage and power-distribution requirements.&lt;br /&gt;
# Select a processor family.&lt;br /&gt;
# Select the exact board.&lt;br /&gt;
# Verify the required firmware build.&lt;br /&gt;
# Verify GPIO assignments.&lt;br /&gt;
# Test one controller before purchasing multiples.&lt;br /&gt;
# Document the final configuration.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Why This Matters&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Low-cost development boards frequently change without notice.&lt;br /&gt;
&lt;br /&gt;
A seller may substitute:&lt;br /&gt;
&lt;br /&gt;
* Different USB chip&lt;br /&gt;
* Different flash device&lt;br /&gt;
* Different regulator&lt;br /&gt;
* Different module revision&lt;br /&gt;
* Different board layout&lt;br /&gt;
&lt;br /&gt;
Testing one sample before a large purchase can prevent an expensive incompatibility.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B.22 Engineering Recommendations&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
✔ Prefer documented hardware over unknown hardware.&lt;br /&gt;
&lt;br /&gt;
✔ Identify the exact board, not only the processor family.&lt;br /&gt;
&lt;br /&gt;
✔ Verify the firmware build before purchasing multiple boards.&lt;br /&gt;
&lt;br /&gt;
✔ Check all GPIO assignments against the exact schematic.&lt;br /&gt;
&lt;br /&gt;
✔ Do not assume Ethernet support from the presence of an Ethernet connector.&lt;br /&gt;
&lt;br /&gt;
✔ Use purpose-built output circuitry for permanent installations.&lt;br /&gt;
&lt;br /&gt;
✔ Select ESP8266 for simple, economical single-output controllers.&lt;br /&gt;
&lt;br /&gt;
✔ Select ESP32 when additional outputs, memory, or interfaces are required.&lt;br /&gt;
&lt;br /&gt;
✔ Treat newer ESP32 variants as board- and build-dependent until verified.&lt;br /&gt;
&lt;br /&gt;
✔ Test every required interface before deploying the controller.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B.23 Open Research Items&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!width=&amp;quot;12%&amp;quot;| &amp;#039;&amp;#039;&amp;#039;Status&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
!width=&amp;quot;87%&amp;quot;| &amp;#039;&amp;#039;&amp;#039;Item&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| 🟨&lt;br /&gt;
| Exact Version 4.x board list for the web installer&lt;br /&gt;
|-&lt;br /&gt;
| 🟨&lt;br /&gt;
| Current support status for ESP32-S2&lt;br /&gt;
|-&lt;br /&gt;
| 🟨&lt;br /&gt;
| Current support status for ESP32-S3&lt;br /&gt;
|-&lt;br /&gt;
| 🟨&lt;br /&gt;
| Current support status for ESP32-C3&lt;br /&gt;
|-&lt;br /&gt;
| 🟨&lt;br /&gt;
| Current support status for ESP32-C6&lt;br /&gt;
|-&lt;br /&gt;
| 🟨&lt;br /&gt;
| W5500 SPI Ethernet support status&lt;br /&gt;
|-&lt;br /&gt;
| 🟨&lt;br /&gt;
| Supported RMII Ethernet PHY devices&lt;br /&gt;
|-&lt;br /&gt;
| 🟨&lt;br /&gt;
| SD-card interface compatibility by board&lt;br /&gt;
|-&lt;br /&gt;
| 🟨&lt;br /&gt;
| PSRAM usage by individual firmware features&lt;br /&gt;
|-&lt;br /&gt;
| 🟨&lt;br /&gt;
| Verified QuinLED board and output mappings&lt;br /&gt;
|-&lt;br /&gt;
| 🟨&lt;br /&gt;
| Maximum tested outputs by processor and protocol&lt;br /&gt;
|-&lt;br /&gt;
| 🟨&lt;br /&gt;
| Standardized hardware-validation procedure&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;References&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
This appendix is based upon:&lt;br /&gt;
&lt;br /&gt;
* ESPPixelStick GitHub repository&lt;br /&gt;
* ESPPixelStick Supported Inputs and Outputs documentation&lt;br /&gt;
* ESPPixelStick product documentation&lt;br /&gt;
* ESPPixelStick GitHub issue and discussion records&lt;br /&gt;
* Espressif processor and module documentation&lt;br /&gt;
* Controller-manufacturer schematics&lt;br /&gt;
&lt;br /&gt;
The project repository identifies ESP8266 and ESP32 as the principal platforms, while current issue records show that support for particular Ethernet devices, specialized boards, and newer ESP32-family variants continues to evolve.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Revision History&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!width=&amp;quot;8%&amp;quot;| &amp;#039;&amp;#039;&amp;#039;Version&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
!width=&amp;quot;8%&amp;quot;| &amp;#039;&amp;#039;&amp;#039;Date&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
!width=&amp;quot;83%&amp;quot;| &amp;#039;&amp;#039;&amp;#039;Description&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0.1&lt;br /&gt;
| July 2026&lt;br /&gt;
| Initial hardware-comparison appendix&lt;br /&gt;
|-&lt;br /&gt;
| 0.5&lt;br /&gt;
| July 2026&lt;br /&gt;
| Expanded platform categories, comparison tables, selection guidance, evaluation checklist, research items, and current support cautions&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>ErnieHorning</name></author>
	</entry>
</feed>