<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.52pi.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Yoyojacky</id>
	<title>52Pi Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.52pi.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Yoyojacky"/>
	<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=Special:Contributions/Yoyojacky"/>
	<updated>2026-10-16T08:56:57Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.2</generator>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=File:EP-0187-03.jpg&amp;diff=16616</id>
		<title>File:EP-0187-03.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=File:EP-0187-03.jpg&amp;diff=16616"/>
		<updated>2026-10-13T08:50:20Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: Yoyojacky uploaded a new version of File:EP-0187-03.jpg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=Z-0177&amp;diff=16615</id>
		<title>Z-0177</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=Z-0177&amp;diff=16615"/>
		<updated>2026-10-10T05:45:20Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=P-0036&amp;diff=16614</id>
		<title>P-0036</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=P-0036&amp;diff=16614"/>
		<updated>2026-09-15T09:22:49Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: /* Gallery */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==DeskPi Raspberry Pi 4 USB-C Power Supply (P-0036)==&lt;br /&gt;
[[File:P-0036-3.jpg|right|320px]]&lt;br /&gt;
5V/4A USB-C power supply with inline rocker switch, certified for Raspberry Pi 4 Model B&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
The DeskPi Raspberry Pi 4 USB-C Power Supply (P-0036) is a CE-certified 5.1V/4A USB-C adapter designed specifically for the Raspberry Pi 4 Model B (1GB / 2GB / 4GB). Its integrated PSU + cable design with an inline ON/OFF rocker eliminates repeated plug/unplug cycles, while the fireproof PC enclosure and smart chip protect your Pi against short circuits, overvoltage, overheating, and overcurrent.&lt;br /&gt;
&lt;br /&gt;
==Key Features==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Designed for Raspberry Pi 4:&amp;lt;/strong&amp;gt; Stable 4A output under overload and short-circuit conditions.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Integrated PSU + Cable:&amp;lt;/strong&amp;gt; Single-piece design with an inline ON/OFF rocker switch.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Multi-Protection Design:&amp;lt;/strong&amp;gt; Over-charge, over-voltage, temperature, over-current, and short-charge protection.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Fireproof PC Enclosure:&amp;lt;/strong&amp;gt; Durable housing with built-in smart protection chip.&lt;br /&gt;
* &amp;lt;strong&amp;gt;CE Certified:&amp;lt;/strong&amp;gt; Pi 4B PSU with CE certification, 5.1V 4A 20.4W output, 1.5 m cable.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Universal USB-C Compatibility:&amp;lt;/strong&amp;gt; Works also works for other Type-C devices within the 5V/4A envelope.&lt;br /&gt;
&lt;br /&gt;
==Technical Specifications==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Specification&lt;br /&gt;
! Details&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Model SKU&#039;&#039;&#039;&lt;br /&gt;
| P-0036&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Target Board&#039;&#039;&#039;&lt;br /&gt;
| Raspberry Pi 4 Model B (1GB / 2GB / 4GB)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Output Voltage&#039;&#039;&#039;&lt;br /&gt;
| DC 5.1V&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Output Current&#039;&#039;&#039;&lt;br /&gt;
| 4A (20.4W)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Input Voltage&#039;&#039;&#039;&lt;br /&gt;
| AC 100–240V&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Input Frequency&#039;&#039;&#039;&lt;br /&gt;
| 50–60Hz&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Input Current&#039;&#039;&#039;&lt;br /&gt;
| 0.8A&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Connector&#039;&#039;&#039;&lt;br /&gt;
| USB Type-C&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Cable Length&#039;&#039;&#039;&lt;br /&gt;
| 1.5 m&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Switch&#039;&#039;&#039;&lt;br /&gt;
| Inline ON/OFF rocker&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Certifications&#039;&#039;&#039;&lt;br /&gt;
| CE, RoHS&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Case Material&#039;&#039;&#039;&lt;br /&gt;
| Fireproof PC&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product Outlook&lt;br /&gt;
[[File:P-0036-3.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Features&lt;br /&gt;
[[File:P-0036-8.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=P-0036&amp;diff=16613</id>
		<title>P-0036</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=P-0036&amp;diff=16613"/>
		<updated>2026-09-15T09:22:33Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: /* DeskPi Raspberry Pi 4 USB-C Power Supply (P-0036) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==DeskPi Raspberry Pi 4 USB-C Power Supply (P-0036)==&lt;br /&gt;
[[File:P-0036-3.jpg|right|320px]]&lt;br /&gt;
5V/4A USB-C power supply with inline rocker switch, certified for Raspberry Pi 4 Model B&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
The DeskPi Raspberry Pi 4 USB-C Power Supply (P-0036) is a CE-certified 5.1V/4A USB-C adapter designed specifically for the Raspberry Pi 4 Model B (1GB / 2GB / 4GB). Its integrated PSU + cable design with an inline ON/OFF rocker eliminates repeated plug/unplug cycles, while the fireproof PC enclosure and smart chip protect your Pi against short circuits, overvoltage, overheating, and overcurrent.&lt;br /&gt;
&lt;br /&gt;
==Key Features==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Designed for Raspberry Pi 4:&amp;lt;/strong&amp;gt; Stable 4A output under overload and short-circuit conditions.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Integrated PSU + Cable:&amp;lt;/strong&amp;gt; Single-piece design with an inline ON/OFF rocker switch.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Multi-Protection Design:&amp;lt;/strong&amp;gt; Over-charge, over-voltage, temperature, over-current, and short-charge protection.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Fireproof PC Enclosure:&amp;lt;/strong&amp;gt; Durable housing with built-in smart protection chip.&lt;br /&gt;
* &amp;lt;strong&amp;gt;CE Certified:&amp;lt;/strong&amp;gt; Pi 4B PSU with CE certification, 5.1V 4A 20.4W output, 1.5 m cable.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Universal USB-C Compatibility:&amp;lt;/strong&amp;gt; Works also works for other Type-C devices within the 5V/4A envelope.&lt;br /&gt;
&lt;br /&gt;
==Technical Specifications==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Specification&lt;br /&gt;
! Details&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Model SKU&#039;&#039;&#039;&lt;br /&gt;
| P-0036&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Target Board&#039;&#039;&#039;&lt;br /&gt;
| Raspberry Pi 4 Model B (1GB / 2GB / 4GB)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Output Voltage&#039;&#039;&#039;&lt;br /&gt;
| DC 5.1V&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Output Current&#039;&#039;&#039;&lt;br /&gt;
| 4A (20.4W)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Input Voltage&#039;&#039;&#039;&lt;br /&gt;
| AC 100–240V&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Input Frequency&#039;&#039;&#039;&lt;br /&gt;
| 50–60Hz&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Input Current&#039;&#039;&#039;&lt;br /&gt;
| 0.8A&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Connector&#039;&#039;&#039;&lt;br /&gt;
| USB Type-C&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Cable Length&#039;&#039;&#039;&lt;br /&gt;
| 1.5 m&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Switch&#039;&#039;&#039;&lt;br /&gt;
| Inline ON/OFF rocker&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Certifications&#039;&#039;&#039;&lt;br /&gt;
| CE, RoHS&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Case Material&#039;&#039;&#039;&lt;br /&gt;
| Fireproof PC&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product Outlook&lt;br /&gt;
[File:P-0036-3.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Features&lt;br /&gt;
[File:P-0036-8.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=P-0036&amp;diff=16612</id>
		<title>P-0036</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=P-0036&amp;diff=16612"/>
		<updated>2026-09-15T09:22:23Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: Created page with &amp;quot;==DeskPi Raspberry Pi 4 USB-C Power Supply (P-0036)== [File:P-0036-3.jpg|right|320px] 5V/4A USB-C power supply with inline rocker switch, certified for Raspberry Pi 4 Model B  ==Description==  The DeskPi Raspberry Pi 4 USB-C Power Supply (P-0036) is a CE-certified 5.1V/4A USB-C adapter designed specifically for the Raspberry Pi 4 Model B (1GB / 2GB / 4GB). Its integrated PSU + cable design with an inline ON/OFF rocker eliminates repeated plug/unplug cycles, while the fir...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==DeskPi Raspberry Pi 4 USB-C Power Supply (P-0036)==&lt;br /&gt;
[File:P-0036-3.jpg|right|320px]&lt;br /&gt;
5V/4A USB-C power supply with inline rocker switch, certified for Raspberry Pi 4 Model B&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&lt;br /&gt;
The DeskPi Raspberry Pi 4 USB-C Power Supply (P-0036) is a CE-certified 5.1V/4A USB-C adapter designed specifically for the Raspberry Pi 4 Model B (1GB / 2GB / 4GB). Its integrated PSU + cable design with an inline ON/OFF rocker eliminates repeated plug/unplug cycles, while the fireproof PC enclosure and smart chip protect your Pi against short circuits, overvoltage, overheating, and overcurrent.&lt;br /&gt;
&lt;br /&gt;
==Key Features==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Designed for Raspberry Pi 4:&amp;lt;/strong&amp;gt; Stable 4A output under overload and short-circuit conditions.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Integrated PSU + Cable:&amp;lt;/strong&amp;gt; Single-piece design with an inline ON/OFF rocker switch.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Multi-Protection Design:&amp;lt;/strong&amp;gt; Over-charge, over-voltage, temperature, over-current, and short-charge protection.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Fireproof PC Enclosure:&amp;lt;/strong&amp;gt; Durable housing with built-in smart protection chip.&lt;br /&gt;
* &amp;lt;strong&amp;gt;CE Certified:&amp;lt;/strong&amp;gt; Pi 4B PSU with CE certification, 5.1V 4A 20.4W output, 1.5 m cable.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Universal USB-C Compatibility:&amp;lt;/strong&amp;gt; Works also works for other Type-C devices within the 5V/4A envelope.&lt;br /&gt;
&lt;br /&gt;
==Technical Specifications==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Specification&lt;br /&gt;
! Details&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Model SKU&#039;&#039;&#039;&lt;br /&gt;
| P-0036&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Target Board&#039;&#039;&#039;&lt;br /&gt;
| Raspberry Pi 4 Model B (1GB / 2GB / 4GB)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Output Voltage&#039;&#039;&#039;&lt;br /&gt;
| DC 5.1V&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Output Current&#039;&#039;&#039;&lt;br /&gt;
| 4A (20.4W)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Input Voltage&#039;&#039;&#039;&lt;br /&gt;
| AC 100–240V&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Input Frequency&#039;&#039;&#039;&lt;br /&gt;
| 50–60Hz&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Input Current&#039;&#039;&#039;&lt;br /&gt;
| 0.8A&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Connector&#039;&#039;&#039;&lt;br /&gt;
| USB Type-C&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Cable Length&#039;&#039;&#039;&lt;br /&gt;
| 1.5 m&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Switch&#039;&#039;&#039;&lt;br /&gt;
| Inline ON/OFF rocker&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Certifications&#039;&#039;&#039;&lt;br /&gt;
| CE, RoHS&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Case Material&#039;&#039;&#039;&lt;br /&gt;
| Fireproof PC&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product Outlook&lt;br /&gt;
[File:P-0036-3.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Features&lt;br /&gt;
[File:P-0036-8.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=File:P-0036-8.jpg&amp;diff=16611</id>
		<title>File:P-0036-8.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=File:P-0036-8.jpg&amp;diff=16611"/>
		<updated>2026-09-15T09:21:57Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=File:P-0036-3.jpg&amp;diff=16610</id>
		<title>File:P-0036-3.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=File:P-0036-3.jpg&amp;diff=16610"/>
		<updated>2026-09-15T09:20:31Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=Main_Page&amp;diff=16609</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=Main_Page&amp;diff=16609"/>
		<updated>2026-09-15T08:12:00Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: /* P-Series (6 items) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border:1px solid #a2a9b1; background:#f8f9fa; padding:12px; margin:0 0 16px 0;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;For AI assistants and automated tools:&#039;&#039;&#039; Please use the AI-friendly Markdown version of this documentation: [https://wiki-md.52pi.com/ https://wiki-md.52pi.com/]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=&#039;&#039;&#039;RaspberryPi Modules&#039;&#039;&#039;=&lt;br /&gt;
The following contents include all of our products,  Top10 modules are list here, those modules are fit for Raspberry Pi A，A+，B，B+，2 Model B，3 Model B and some other platform. &lt;br /&gt;
you can select one of them and click the links to get more information about it.&lt;br /&gt;
==HCL==&lt;br /&gt;
This is Hardware Compatible List. &amp;lt;font color=red&amp;gt;Depracated&amp;lt;/font&amp;gt;&amp;lt;/br&amp;gt; &lt;br /&gt;
[[Hardware Compatible List]]&lt;br /&gt;
&lt;br /&gt;
==UPS series==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* UPS Gen 6 power module compatible with Raspberry Pi 5/4B: [[ EP-0245 ]] &amp;lt;font color=red&amp;gt;NEW!!&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
* SBS module for UPS Gen 6 [[ EP-0256 ]] &amp;lt;font color=red&amp;gt;NEW!!&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
* SATA Drive Power Board for UPS Gen 6: [[ EP-0252 ]] &amp;lt;font color=red&amp;gt;NEW!!&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
* 1.3&amp;quot; LCD TFT Display Module for UPS Gen 6: [[ EP-0251 ]] &amp;lt;font color=red&amp;gt;NEW!!&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Rackmount Series==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* 1U 19-inch Removable Rack mount For RPi5/4B/3B+ [[ DR-0003 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
* 2U RackMount For RPi 5: [[ DR-0002]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
* 2U RackMount For RPi 5: [[ DP-0046]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* 1U RackMount For RPi 5: [[ DR-0001 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* 1U RackMount For RPi 4B: [[ EP-0143 ]]&lt;br /&gt;
* 19-inch 2U Rack Mount for Raspberry Pi [[DR-0005]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Arduino Series==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
===Arduino UNO Q Series===&lt;br /&gt;
* Level-Shift Shield [[ EP-0257 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
* Arduino Nano ESP32 RGB LED Matrix Shield [[ EP-0263]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;  &lt;br /&gt;
* Terminal Expansion Base for Arduino NANO ESP32 [[ EP-0262 ]]  &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Arduino UNO R4 Wi-Fi Series===&lt;br /&gt;
* [[ KZ-0054 ]]&lt;br /&gt;
* [[ KZ-0077 ]]&lt;br /&gt;
* [[ KZ-0086 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==52Pi N Series==&lt;br /&gt;
===Description===&lt;br /&gt;
The 52Pi N series is a line of storage products where &amp;quot;N&amp;quot; stands for NAS (Network Attached Storage), and the numerical designation represents various models and product types. Users can choose different types based on their specific needs to fulfill their usage requirements.&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Product SKU==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* W03-New - [[ EP-0216-NEW ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* RS-P13 - [[ EP-0249 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* S021 - [[ EP-0242 ]]  &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* N16 - [[ EP-0180 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* P33 - [[ EP-0241 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* P31 - [[ EP-0240 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* P30 - [[ EP-0238 ]]  &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* CN01 - [[ EP-0236 ]]  &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* N06 - [[ EP-0239 ]]  &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* RS-P11 - [[ EP-0234 ]]  &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* B14 - [[ EP-0233 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* N12 - [[ EP-0213 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* U2500 - [[ EP-0235 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* N21 - [[ EP-0231 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* N20 - [[ EP-0227 ]]  &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* W01 - [[ EP-0228 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* N10 - [[ EP-0229 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* B12 - [[ EP-0230 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* M01 - [[ EP-0223 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* M02 - [[ EP-0217 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* N05 - [[ EP-0209 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* N04 - [[ EP-0210 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* N07 - [[ EP-0211 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* P02 - [[ EP-0219 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* 52Pi NVDAC - [[ EP-0218 ]]&lt;br /&gt;
* 52Pi NVdigi - [[ EP-0220 ]]&lt;br /&gt;
* M.2 2242 NVME SSD for RPi 5 NES-CASE - [[ EP-0212 ]]  &lt;br /&gt;
* W03 - [[ EP-0216 ]] &lt;br /&gt;
* Ice tower plus for RPi 5 - [[ EP-0224 ]] &lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mini Tower Kit Series==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0187 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&lt;br /&gt;
* [[ ZP-0172 ]]&lt;br /&gt;
* [[ ZP-0128 ]]&lt;br /&gt;
* [[ ZP-0128-3B ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0128-4wire ]]&lt;br /&gt;
* [[ ZP-0129-4wire ]]&lt;br /&gt;
* [[ ZP-0130-4wire ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0129 ]]&lt;br /&gt;
* [[ ZP-0130 ]]&lt;br /&gt;
* [[ ZP-0132 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hat Stack==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0167 ]]&lt;br /&gt;
* [[ EP-0168 ]]&lt;br /&gt;
* [[ EP-0166 ]]&lt;br /&gt;
* [[ EP-0152 ]]&lt;br /&gt;
* [[ EP-0116 ]]&lt;br /&gt;
* [[ EP-0098 ]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0099 ]]&lt;br /&gt;
* [[ EP-0104 ]]&lt;br /&gt;
* [[ EP-0106 ]]&lt;br /&gt;
* [[ EP-0107 ]]&lt;br /&gt;
* [[ EP-0108 ]]&lt;br /&gt;
* [[ EP-0109 ]]&lt;br /&gt;
* [[ EP-0105 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Starter Kit==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ KZ-0067 ]] &lt;br /&gt;
* [[ KZ-0061 ]]&lt;br /&gt;
* [[ KZ-0016 ]]&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ KZ-0020 ]]&lt;br /&gt;
* [[ KZ-0009 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Development Boards==&lt;br /&gt;
===RP2040 Series===&lt;br /&gt;
* [[ EP-0174 ]] &lt;br /&gt;
===StarFive2===&lt;br /&gt;
* [[ ER-0043 ]] &lt;br /&gt;
* [[ ER-0044 ]]&lt;br /&gt;
&lt;br /&gt;
===Micro:Bit===&lt;br /&gt;
* [[ KR-0004 ]]&lt;br /&gt;
* [[ KR-0027 ]]&lt;br /&gt;
&lt;br /&gt;
===ROCK Pi Series===&lt;br /&gt;
* [[ EP-0265 ]]&lt;br /&gt;
* [[ KR-0001 ]]&lt;br /&gt;
* [[ KR-0012 ]]&lt;br /&gt;
* [[ ZP-0148 ]]&lt;br /&gt;
&lt;br /&gt;
===Orange Pi Series===&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0156 ]]&lt;br /&gt;
* [[ ZP-0150 ]]&lt;br /&gt;
* [[ ZP-0149 ]]&lt;br /&gt;
* [[ F-0020 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ F-0021 ]]&lt;br /&gt;
* [[ F-0022 ]]&lt;br /&gt;
* [[ KZ-0003 ]]&lt;br /&gt;
* [[ ER-0045 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi Pico Series===&lt;br /&gt;
* [[ KR-0006 ]]&lt;br /&gt;
* [[ EP-0175 ]]&lt;br /&gt;
&lt;br /&gt;
==AI Learning==&lt;br /&gt;
* [[ EZ-0075 ]]&lt;br /&gt;
* [[ L-0031 ]]&lt;br /&gt;
&lt;br /&gt;
==IoT Modules==&lt;br /&gt;
* [[ EP-0090 ]]&lt;br /&gt;
* [[ EZ-0061 ]]&lt;br /&gt;
* [[ EZ-0062 ]]&lt;br /&gt;
* [[ EZ-0063 ]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Tinker Board==&lt;br /&gt;
* [[ EZ-0066 ]]&lt;br /&gt;
* [[ EZ-0065  ]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===DeskPi Series===&lt;br /&gt;
* [[ DP-0002 ]]&lt;br /&gt;
* [[ DP-0018 ]]&lt;br /&gt;
&lt;br /&gt;
==KZ series==&lt;br /&gt;
* [[ KZ-0022 ]]&lt;br /&gt;
* [[ KZ-0056 ]]&lt;br /&gt;
* [[ KZ-0058 ]]&lt;br /&gt;
* [[ KZ-0060 ]]&lt;br /&gt;
&lt;br /&gt;
==Raspberry Pi==&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ER-0056 ]]&lt;br /&gt;
* [[ KR-0024 ]]&lt;br /&gt;
* [[ ER-0046 ]]&lt;br /&gt;
* [[ ER-0035 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ER-0031 ]]&lt;br /&gt;
* [[ ER-0030 ]]&lt;br /&gt;
* [[ ER-0027 ]]&lt;br /&gt;
* [[ ER-0028 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ER-0018 ]]&lt;br /&gt;
* [[ ER-0007 ]]&lt;br /&gt;
* [[ K-0231 ]]&lt;br /&gt;
* [[ K-0230 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt; &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi Pico &amp;amp; Pico W Breakout Board===&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0172 ]]&lt;br /&gt;
* [[ EP-0164 ]]&lt;br /&gt;
* [[ EP-0159 ]]&lt;br /&gt;
* [[ EP-0145 ]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0138 ]]&lt;br /&gt;
* [[ EP-0139 ]]&lt;br /&gt;
* [[ EP-0140 ]]&lt;br /&gt;
* [[ K-0582 ]]&lt;br /&gt;
* [[ K-0586 ]]&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Banana Pi==&lt;br /&gt;
* [[ EB-0028 ]]&lt;br /&gt;
* [[ EB-0023 ]]&lt;br /&gt;
* [[ EB-0020 ]]&lt;br /&gt;
* [[ EP-0019 ]]&lt;br /&gt;
* [[ EB-0012 ]]&lt;br /&gt;
* [[ EB-0013 ]]&lt;br /&gt;
&lt;br /&gt;
==Gaming Assesories==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ D-0023 ]]&lt;br /&gt;
* [[ Z-0261 ]]&lt;br /&gt;
* [[ Z-0179 ]]&lt;br /&gt;
* [[ Z-0279 ]]&lt;br /&gt;
* [[ Z-0252 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0253 ]]&lt;br /&gt;
* [[ Z-0254 ]]&lt;br /&gt;
* [[ Z-0255 ]]&lt;br /&gt;
* [[ Z-0257 ]]&lt;br /&gt;
* [[ Z-0260 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electronic Accessories==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ T-0020 ]]&lt;br /&gt;
* [[ K-0580 ]]&lt;br /&gt;
* [[ ZP-0157 ]]&lt;br /&gt;
* [[ ZP-0158 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Extension Modules=&lt;br /&gt;
&lt;br /&gt;
==EP-Series (44 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 20%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0020 ]]&lt;br /&gt;
* [[ EP-0021 ]]&lt;br /&gt;
* [[ EP-0031 ]]&lt;br /&gt;
* [[ EP-0059 ]]&lt;br /&gt;
* [[ EP-0073 ]]&lt;br /&gt;
* [[ EP-0080 ]]&lt;br /&gt;
* [[ EP-0088 ]]&lt;br /&gt;
* [[ EP-0091 ]]&lt;br /&gt;
* [[ EP-0092 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 20%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0093 ]]&lt;br /&gt;
* [[ EP-0094 ]]&lt;br /&gt;
* [[ EP-0095 ]]&lt;br /&gt;
* [[ EP-0096 ]]&lt;br /&gt;
* [[ EP-0097 ]]&lt;br /&gt;
* [[ EP-0100 ]]&lt;br /&gt;
* [[ EP-0101 ]]&lt;br /&gt;
* [[ EP-0114 ]]&lt;br /&gt;
* [[ EP-0115 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 20%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0118 ]]&lt;br /&gt;
* [[ EP-0120 ]]&lt;br /&gt;
* [[ EP-0121 ]]&lt;br /&gt;
* [[ EP-0123 ]]&lt;br /&gt;
* [[ EP-0124 ]]&lt;br /&gt;
* [[ EP-0125 ]]&lt;br /&gt;
* [[ EP-0126 ]]&lt;br /&gt;
* [[ EP-0127 ]]&lt;br /&gt;
* [[ EP-0128 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 20%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0129 ]]&lt;br /&gt;
* [[ EP-0130 ]]&lt;br /&gt;
* [[ EP-0131 ]]&lt;br /&gt;
* [[ EP-0136 ]]&lt;br /&gt;
* [[ EP-0141 ]]&lt;br /&gt;
* [[ EP-0142 ]]&lt;br /&gt;
* [[ EP-0146 ]]&lt;br /&gt;
* [[ EP-0149 ]]&lt;br /&gt;
* [[ EP-0150 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 20%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0153 ]]&lt;br /&gt;
* [[ EP-0171 ]]&lt;br /&gt;
* [[ EP-0214 ]]&lt;br /&gt;
* [[ EP-0215 ]]&lt;br /&gt;
* [[ EP-0225 ]]&lt;br /&gt;
* [[ EP-0243 ]]&lt;br /&gt;
* [[ EP-0246 ]]&lt;br /&gt;
* [[ EP-0247 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==D-Series (16 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ D-0001 ]]&lt;br /&gt;
* [[ D-0003 ]]&lt;br /&gt;
* [[ D-0005 ]]&lt;br /&gt;
* [[ D-0006 ]]&lt;br /&gt;
* [[ D-0007 ]]&lt;br /&gt;
* [[ D-0008 ]]&lt;br /&gt;
* [[ D-0009 ]]&lt;br /&gt;
* [[ D-0010 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ D-0011 ]]&lt;br /&gt;
* [[ D-0012 ]]&lt;br /&gt;
* [[ D-0013 ]]&lt;br /&gt;
* [[ D-0015 ]]&lt;br /&gt;
* [[ D-0016 ]]&lt;br /&gt;
* [[ D-0017 ]]&lt;br /&gt;
* [[ D-0018 ]]&lt;br /&gt;
* [[ D-0020 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==P-Series (6 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ P-0036 ]]&lt;br /&gt;
* [[ P-0005 ]]&lt;br /&gt;
* [[ P-0006 ]]&lt;br /&gt;
* [[ P-0010 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ P-0011 ]]&lt;br /&gt;
* [[ P-0021 ]]&lt;br /&gt;
* [[ P-0024 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Z-Series (6 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0177 ]]&lt;br /&gt;
* [[ Z-0209 ]]&lt;br /&gt;
* [[ Z-0231 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0234 ]]&lt;br /&gt;
* [[ Z-0235 ]]&lt;br /&gt;
* [[ Z-0269 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EZ-Series (5 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EZ-0024 ]]&lt;br /&gt;
* [[ EZ-0048 ]]&lt;br /&gt;
* [[ EZ-0068 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EZ-0089 ]]&lt;br /&gt;
* [[ EZ-0106 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==ER-Series (4 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ER-0014 ]]&lt;br /&gt;
* [[ ER-0016 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ER-0021 ]]&lt;br /&gt;
* [[ ER-0022 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==K-Series (2 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0291 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0335 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==G-Series (1 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ G-0002 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Case &amp;amp; Enclosure &amp;amp; Heat sink=&lt;br /&gt;
&lt;br /&gt;
==ZP-Series (78 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 12%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0024 ]]&lt;br /&gt;
* [[ ZP-0025 ]]&lt;br /&gt;
* [[ ZP-0029 ]]&lt;br /&gt;
* [[ ZP-0037 ]]&lt;br /&gt;
* [[ ZP-0038 ]]&lt;br /&gt;
* [[ ZP-0039 ]]&lt;br /&gt;
* [[ ZP-0040 ]]&lt;br /&gt;
* [[ ZP-0042 ]]&lt;br /&gt;
* [[ ZP-0049 ]]&lt;br /&gt;
* [[ ZP-0051 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 12%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0065 ]]&lt;br /&gt;
* [[ ZP-0066 ]]&lt;br /&gt;
* [[ ZP-0067 ]]&lt;br /&gt;
* [[ ZP-0068 ]]&lt;br /&gt;
* [[ ZP-0069 ]]&lt;br /&gt;
* [[ ZP-0070 ]]&lt;br /&gt;
* [[ ZP-0071 ]]&lt;br /&gt;
* [[ ZP-0072 ]]&lt;br /&gt;
* [[ ZP-0073 ]]&lt;br /&gt;
* [[ ZP-0074 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 12%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0075 ]]&lt;br /&gt;
* [[ ZP-0076 ]]&lt;br /&gt;
* [[ ZP-0077 ]]&lt;br /&gt;
* [[ ZP-0078 ]]&lt;br /&gt;
* [[ ZP-0079 ]]&lt;br /&gt;
* [[ ZP-0080 ]]&lt;br /&gt;
* [[ ZP-0081 ]]&lt;br /&gt;
* [[ ZP-0082 ]]&lt;br /&gt;
* [[ ZP-0083 ]]&lt;br /&gt;
* [[ ZP-0085 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 12%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0086 ]]&lt;br /&gt;
* [[ ZP-0087 ]]&lt;br /&gt;
* [[ ZP-0088 ]]&lt;br /&gt;
* [[ ZP-0089 ]]&lt;br /&gt;
* [[ ZP-0090 ]]&lt;br /&gt;
* [[ ZP-0091 ]]&lt;br /&gt;
* [[ ZP-0092 ]]&lt;br /&gt;
* [[ ZP-0093 ]]&lt;br /&gt;
* [[ ZP-0098 ]]&lt;br /&gt;
* [[ ZP-0099 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 12%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0100 ]]&lt;br /&gt;
* [[ ZP-0101 ]]&lt;br /&gt;
* [[ ZP-0102 ]]&lt;br /&gt;
* [[ ZP-0103 ]]&lt;br /&gt;
* [[ ZP-0105 ]]&lt;br /&gt;
* [[ ZP-0108 ]]&lt;br /&gt;
* [[ ZP-0110 ]]&lt;br /&gt;
* [[ ZP-0111 ]]&lt;br /&gt;
* [[ ZP-0112 ]]&lt;br /&gt;
* [[ ZP-0113 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 12%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0115 ]]&lt;br /&gt;
* [[ ZP-0116 ]]&lt;br /&gt;
* [[ ZP-0120 ]]&lt;br /&gt;
* [[ ZP-0133 ]]&lt;br /&gt;
* [[ ZP-0138 ]]&lt;br /&gt;
* [[ ZP-0139 ]]&lt;br /&gt;
* [[ ZP-0140 ]]&lt;br /&gt;
* [[ ZP-0141 ]]&lt;br /&gt;
* [[ ZP-0147 ]]&lt;br /&gt;
* [[ ZP-0153 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 12%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0162 ]]&lt;br /&gt;
* [[ ZP-0163 ]]&lt;br /&gt;
* [[ ZP-0164 ]]&lt;br /&gt;
* [[ ZP-0165 ]]&lt;br /&gt;
* [[ ZP-0166 ]]&lt;br /&gt;
* [[ ZP-0167 ]]&lt;br /&gt;
* [[ ZP-0168 ]]&lt;br /&gt;
* [[ ZP-0170 ]]&lt;br /&gt;
* [[ ZP-0173 ]]&lt;br /&gt;
* [[ ZP-0175 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 12%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0180 ]]&lt;br /&gt;
* [[ ZP-0181 ]]&lt;br /&gt;
* [[ ZP-0186 ]]&lt;br /&gt;
* [[ ZP-0188 ]]&lt;br /&gt;
* [[ ZP-0213 ]]&lt;br /&gt;
* [[ ZP-0215 ]]&lt;br /&gt;
* [[ ZP-0216 ]]&lt;br /&gt;
* [[ ZP-0222 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==C-Series (26 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ C-0001 ]]&lt;br /&gt;
* [[ C-0002 ]]&lt;br /&gt;
* [[ C-0003 ]]&lt;br /&gt;
* [[ C-0004 ]]&lt;br /&gt;
* [[ C-0005 ]]&lt;br /&gt;
* [[ C-0006 ]]&lt;br /&gt;
* [[ C-0007 ]]&lt;br /&gt;
* [[ C-0008 ]]&lt;br /&gt;
* [[ C-0015 ]]&lt;br /&gt;
* [[ C-0020 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ C-0022 ]]&lt;br /&gt;
* [[ C-0023 ]]&lt;br /&gt;
* [[ C-0025 ]]&lt;br /&gt;
* [[ C-0027 ]]&lt;br /&gt;
* [[ C-0028 ]]&lt;br /&gt;
* [[ C-0031 ]]&lt;br /&gt;
* [[ C-0032 ]]&lt;br /&gt;
* [[ C-0033 ]]&lt;br /&gt;
* [[ C-0034 ]]&lt;br /&gt;
* [[ C-0047 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ C-0048 ]]&lt;br /&gt;
* [[ C-0049 ]]&lt;br /&gt;
* [[ C-0050 ]]&lt;br /&gt;
* [[ C-0052 ]]&lt;br /&gt;
* [[ C-0054 ]]&lt;br /&gt;
* [[ C-0063 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EP-Series (12 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0076 ]]&lt;br /&gt;
* [[ EP-0077 ]]&lt;br /&gt;
* [[ EP-0078 ]]&lt;br /&gt;
* [[ EP-0079 ]]&lt;br /&gt;
* [[ EP-0111 ]]&lt;br /&gt;
* [[ EP-0112 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0113 ]]&lt;br /&gt;
* [[ EP-0122 ]]&lt;br /&gt;
* [[ EP-0132 ]]&lt;br /&gt;
* [[ EP-0163 ]]&lt;br /&gt;
* [[ EP-0222 ]]&lt;br /&gt;
* [[ EP-0226 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Z-Series (15 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0127 ]]&lt;br /&gt;
* [[ Z-0153 ]]&lt;br /&gt;
* [[ Z-0157 ]]&lt;br /&gt;
* [[ Z-0183 ]]&lt;br /&gt;
* [[ Z-0184 ]]&lt;br /&gt;
* [[ Z-0185 ]]&lt;br /&gt;
* [[ Z-0190 ]]&lt;br /&gt;
* [[ Z-0193 ]]&lt;br /&gt;
* [[ Z-0208 ]]&lt;br /&gt;
* [[ Z-0237 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0264 ]]&lt;br /&gt;
* [[ Z-0266 ]]&lt;br /&gt;
* [[ Z-0272 ]]&lt;br /&gt;
* [[ Z-0273 ]]&lt;br /&gt;
* [[ Z-0278 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==K-Series (10 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0172 ]]&lt;br /&gt;
* [[ K-0178 ]]&lt;br /&gt;
* [[ K-0567 ]]&lt;br /&gt;
* [[ K-0583 ]]&lt;br /&gt;
* [[ K-0585 ]]&lt;br /&gt;
* [[ K-0589 ]]&lt;br /&gt;
* [[ K-0592 ]]&lt;br /&gt;
* [[ K-0595 ]]&lt;br /&gt;
* [[ K-0612 ]]&lt;br /&gt;
* [[ K-0638 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==KZ-Series (2 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ KZ-0001 ]]&lt;br /&gt;
* [[ KZ-0002 ]]&lt;br /&gt;
* [[ KZ-0063 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==ER-Series (1 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ER-0011 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EZ-Series (1 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EZ-0059 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==F-Series (1 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ F-0003 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==L-Series (1 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ L-0030 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Cooling Accessories=&lt;br /&gt;
&amp;lt;pre&amp;gt; EOL stands for &amp;quot;End of Life&amp;quot;, means this product will not produce any more&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ F-0001 ]]&lt;br /&gt;
* [[ F-0002 ]]&lt;br /&gt;
* [[ F-0006 ]]&lt;br /&gt;
* [[ F-0005 ]]&lt;br /&gt;
* [[ F-0007 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ F-0010 ]]&lt;br /&gt;
* [[ F-0011 ]]&lt;br /&gt;
* [[ F-0012 ]]&lt;br /&gt;
* [[ D-0022 ]]&lt;br /&gt;
* [[ F-0008 ]]&lt;br /&gt;
* [[ F-0008-RGB ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electronic Engineer Tools==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ T-0022 ]]&lt;br /&gt;
* [[ T-0021 ]]&lt;br /&gt;
* [[ T-0019 ]]&lt;br /&gt;
* [[ T-0015 ]]&lt;br /&gt;
* [[ T-0016 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ T-0017 ]]&lt;br /&gt;
* [[ T-0018 ]]&lt;br /&gt;
* [[ Z-0241 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Displays=&lt;br /&gt;
&amp;lt;pre&amp;gt; EOL stands for &amp;quot;End of Life&amp;quot;, means this product will not produce any more&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EP-Series (27 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0045 ]]&lt;br /&gt;
* [[ EP-0058 ]]&lt;br /&gt;
* [[ EP-0062 ]]&lt;br /&gt;
* [[ EP-0063 ]]&lt;br /&gt;
* [[ EP-0065 ]]&lt;br /&gt;
* [[ EP-0066 ]]&lt;br /&gt;
* [[ EP-0072 ]]&lt;br /&gt;
* [[ EP-0075 ]]&lt;br /&gt;
* [[ EP-0081 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0082 ]]&lt;br /&gt;
* [[ EP-0084 ]]&lt;br /&gt;
* [[ EP-0085 ]]&lt;br /&gt;
* [[ EP-0087 ]]&lt;br /&gt;
* [[ EP-0089 ]]&lt;br /&gt;
* [[ EP-0119 ]]&lt;br /&gt;
* [[ EP-0133 ]]&lt;br /&gt;
* [[ EP-0148 ]]&lt;br /&gt;
* [[ EP-0170 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0177 ]]&lt;br /&gt;
* [[ EP-0183 ]]&lt;br /&gt;
* [[ EP-0184 ]]&lt;br /&gt;
* [[ EP-0185 ]]&lt;br /&gt;
* [[ EP-0186 ]]&lt;br /&gt;
* [[ EP-0187 ]] &amp;lt;font color=red&amp;gt;NEW!!!&amp;lt;/font&amp;gt;&lt;br /&gt;
* [[ EP-0188 ]]&lt;br /&gt;
* [[ EP-0189 ]] &amp;lt;font color=red&amp;gt;NEW!!!&amp;lt;/font&amp;gt;&lt;br /&gt;
* [[ EP-0190 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Z-Series (8 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0017 ]]&lt;br /&gt;
* [[ Z-0051 ]]&lt;br /&gt;
* [[ Z-0053 ]]&lt;br /&gt;
* [[ Z-0111 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0112 ]]&lt;br /&gt;
* [[ Z-0113 ]]&lt;br /&gt;
* [[ Z-0114 ]]&lt;br /&gt;
* [[ Z-0143 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==S-Series (6 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ S-0001 ]]&lt;br /&gt;
* [[ S-0003 ]]&lt;br /&gt;
* [[ S-0005 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ S-0006 ]]&lt;br /&gt;
* [[ S-0007 ]]&lt;br /&gt;
* [[ S-0018 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==K-Series (5 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0101 ]]&lt;br /&gt;
* [[ K-0102 ]]&lt;br /&gt;
* [[ K-0103 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0104 ]]&lt;br /&gt;
* [[ K-0106 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Power Supply=&lt;br /&gt;
&lt;br /&gt;
==P-Series (9 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ P-0001 ]]&lt;br /&gt;
* [[ P-0007 ]]&lt;br /&gt;
* [[ P-0008 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ P-0009 ]]&lt;br /&gt;
* [[ P-0017 ]]&lt;br /&gt;
* [[ P-0031 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ P-0032 ]]&lt;br /&gt;
* [[ P-0040 ]]&lt;br /&gt;
* [[ P-0044 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Z-Series (11 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0097 ]]&lt;br /&gt;
* [[ Z-0121 ]]&lt;br /&gt;
* [[ Z-0132 ]]&lt;br /&gt;
* [[ Z-0133 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0136 ]]&lt;br /&gt;
* [[ Z-0147 ]]&lt;br /&gt;
* [[ Z-0148 ]]&lt;br /&gt;
* [[ Z-0149 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0150 ]]&lt;br /&gt;
* [[ Z-0154 ]]&lt;br /&gt;
* [[ Z-0155 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==L-Series (2 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ L-0026 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ L-0027 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Raspberry Pi Kits==&lt;br /&gt;
&lt;br /&gt;
==K-Series (18 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0111 ]]&lt;br /&gt;
* [[ K-0167 ]]&lt;br /&gt;
* [[ K-0168 ]]&lt;br /&gt;
* [[ K-0169 ]]&lt;br /&gt;
* [[ K-0171 ]]&lt;br /&gt;
* [[ K-0174 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0180 ]]&lt;br /&gt;
* [[ K-0185 ]]&lt;br /&gt;
* [[ K-0186 ]]&lt;br /&gt;
* [[ K-0238 ]]&lt;br /&gt;
* [[ K-0259 ]]&lt;br /&gt;
* [[ K-0401 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0403 ]]&lt;br /&gt;
* [[ K-0502 ]]&lt;br /&gt;
* [[ K-0503 ]]&lt;br /&gt;
* [[ K-0512 ]]&lt;br /&gt;
* [[ K-0522 ]]&lt;br /&gt;
* [[ K-0581 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Z-Series (2 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0142 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0144 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==T-Series (1 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ T-0008 ]]&lt;br /&gt;
* [[ T-0033 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=EP-0214&amp;diff=16608</id>
		<title>EP-0214</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=EP-0214&amp;diff=16608"/>
		<updated>2026-09-15T03:28:51Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: /* Getting Start */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==HDMI-TO-CSI2 adapter board for Raspberry Pi==&lt;br /&gt;
[[File:EP-0214-01.jpg|right|320px]]&lt;br /&gt;
&lt;br /&gt;
==Descriptions==&lt;br /&gt;
Raspberry Pi HDMI to CSI-2 Module with Toshiba TC358743XBG chip, Hdmi-input supports up to 1080p30fps, output supports up to 60fps. Compatible with Raspberry Pi 4B/3B+/3B/Pi Zero/W/2W. HDMI To CSI Adapter for Raspberry Pi is an HDMI to CSI camera port adapter designed for the Raspberry Pi 4/3 with up to 1080p@30fps support from HDMI input and is backwards compatible. It allows you to use any camera with an HDMI output, such as Canon, Nikon or GoPro action cameras, as a standard Raspberry Pi CSI camera, even you can record the screen which is output from another Raspberry Pi HDMI port.&lt;br /&gt;
Raspberry Pi Computer Module 4 can use HDMI to CSI-2 Module on PiKVM OS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; NOTE: This product has provided all hardware accessories. The software can currently be used directly on Raspberry Pi 4B, 3B+/3B/Zero series and other devices. However, software support for Raspberry Pi 5 software is currently not available.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* Easy to assemble &lt;br /&gt;
* FPC cable supports 15Pin@ 2Lanes or 22Pin @ 4Lanes (CM4 Computer module only)&lt;br /&gt;
* Chipset: Toshiba TC358743XBG&lt;br /&gt;
* Input signal: Full-sized HDMI &lt;br /&gt;
* Soldering Pad support&lt;br /&gt;
* Output signal: CSI&lt;br /&gt;
* Function: HDMI-TO-CSI2 (H2C for short)&lt;br /&gt;
* Limitation: HDMI input support up to 1080p30fps &lt;br /&gt;
* Compatible with: Raspberry Pi 4B/3B+/3B/3A+/Pi zero/Pi zero W/Pi zero 2W&lt;br /&gt;
&amp;lt;Pre&amp;gt;&lt;br /&gt;
Note: This module does not support OctoPi OS. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product Size &lt;br /&gt;
[[File:EP-0214-02.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt; &lt;br /&gt;
* FPC cable compatibility &lt;br /&gt;
[[File:EP-0214-04.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Pinout definition&lt;br /&gt;
[[File:EP-0214-09.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Connection style&lt;br /&gt;
[[File:EP-0214-06.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Application scenario&lt;br /&gt;
[[File:EP-0214-05.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt; &lt;br /&gt;
[[File:EP-0214-07.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Recording video from an sports camera&lt;br /&gt;
[[File:EP-0214-08.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt; &lt;br /&gt;
==Package Includes==&lt;br /&gt;
* 1 x HDMI-TO-CSI2 adapter board &lt;br /&gt;
* 2 x 22Pin FPC cable &lt;br /&gt;
* 2 x 15Pin FPC cable &lt;br /&gt;
[[File:EP-0214-03.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Getting Start==&lt;br /&gt;
===For Raspberry Pi 4B/3B+/3B/3A+/Pi zero/Pi zero W/Pi zero 2 W===&lt;br /&gt;
&amp;lt;Pre&amp;gt;NOTE: We recommend you to use the Raspberry Pi OS which download from Raspberry Pi Official Website．&amp;lt;/pre&amp;gt;&lt;br /&gt;
To use the kernel drivers, please update your system. There are a few things that have changed with the 5.4 kernel, so these instructions are for 5.4 or later. If &amp;quot;uname -a&amp;quot; reports anything less, then fix this before proceeding.&lt;br /&gt;
To use the kernel drivers, please update your system. There are a few things that have changed with the 5.4 kernel, so these instructions are for 5.4 or later. If &amp;quot;uname -a&amp;quot; reports anything less, then fix this before proceeding.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pi@raspberrypi:~ $ uname -a&lt;br /&gt;
Linux raspberrypi 5.10.63-v7l+ #1459 SMP Wed Oct 6 16:41:57 BST 2021 armv7l GNU/Linux&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
1. Update &amp;amp; upgrade the raspberry pi system (It will take a long time depend on the different country)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get upgrade&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/br&amp;gt;&lt;br /&gt;
2. Enable camera module (the camera is enabled by default in Raspberry pi Bullseys OS)&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
sudo raspi-config&lt;br /&gt;
sudo reboot&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Navigate to &#039;Interfacing Options&#039; and hit Enter. Now select the &#039;Camera&#039; option, and hit the Enter key to enable it. Select “Finish” and select to reboot your Raspberry Pi.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[NOTE] reboot is important!!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
3. Edit /boot/config.txt (that will need sudo)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo nano /boot/config.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Add the line:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dtoverlay=tc358743&lt;br /&gt;
dtoverlay=tc358743-audio&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
4. Check the amount of memory assigned to the CMA heap with &amp;quot;dmesg | grep cma&amp;quot;. The first line should be along the lines of&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pi@raspberrypi:~ $ dmesg | grep cma&lt;br /&gt;
[    0.000000] cma: Reserved 256 MiB at 0x000000001ec00000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If it reports less than 96MB assigned to CMA, then edit /boot/cmdline.txt and add&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cma=96M&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to the start of the line. Do NOT add any carriage returns.&lt;br /&gt;
&lt;br /&gt;
5. Reboot. If all is well you should get a /dev/video0 device, and &amp;quot;v4l2-ctl --list-devices&amp;quot; will tell you that it is provided by Unicam. After connecting all the cables, power on the Raspberry Pi,  opening the Raspberry Pi terminal, enter the following command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pi@raspberrypi:~ $ ls /dev/video0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If it show  following device:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/dev/video0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
then execute following command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pi@raspberrypi:~ $ v4l2-ctl --list-devices&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
It will shows something like: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bcm2835-codec-decode (platform:bcm2835-codec):&lt;br /&gt;
	/dev/video10&lt;br /&gt;
	/dev/video11&lt;br /&gt;
	/dev/video12&lt;br /&gt;
	/dev/video18&lt;br /&gt;
	/dev/media1&lt;br /&gt;
&lt;br /&gt;
bcm2835-isp (platform:bcm2835-isp):&lt;br /&gt;
	/dev/video13&lt;br /&gt;
	/dev/video14&lt;br /&gt;
	/dev/video15&lt;br /&gt;
	/dev/video16&lt;br /&gt;
	/dev/media0&lt;br /&gt;
&lt;br /&gt;
unicam (platform:fe801000.csi):&lt;br /&gt;
	/dev/video0&lt;br /&gt;
	/dev/video1&lt;br /&gt;
	/dev/media2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
6. This driver puts all the control in the hands of the user, or the user&#039;s application. By default there is no EDID loaded into the chip to allow it to tell the HDMI source what resolutions are supported. There are EDID editors around. If you create a file edid.txt, then you can push this to the device using&lt;br /&gt;
&lt;br /&gt;
The comment of 720p edid.txt file:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00ffffffffffff005262888800888888&lt;br /&gt;
1c150103800000780aEE91A3544C9926&lt;br /&gt;
0F505400000001010101010101010101&lt;br /&gt;
010101010101011d007251d01e206e28&lt;br /&gt;
5500c48e2100001e8c0ad08a20e02d10&lt;br /&gt;
103e9600138e2100001e000000fc0054&lt;br /&gt;
6f73686962612d4832430a20000000FD&lt;br /&gt;
003b3d0f2e0f1e0a2020202020200100&lt;br /&gt;
020321434e041303021211012021a23c&lt;br /&gt;
3d3e1f2309070766030c00300080E300&lt;br /&gt;
7F8c0ad08a20e02d10103e9600c48e21&lt;br /&gt;
0000188c0ad08a20e02d10103e960013&lt;br /&gt;
8e210000188c0aa01451f01600267c43&lt;br /&gt;
00138e21000098000000000000000000&lt;br /&gt;
00000000000000000000000000000000&lt;br /&gt;
00000000000000000000000000000000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Or you can use 1080p30fps edid file:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 00 FF FF FF FF FF FF 00 52 62 88 88 00 88 88 88&lt;br /&gt;
 1C 15 01 03 80 A0 5A 78 0A 0D C9 A0 57 47 98 27&lt;br /&gt;
 12 48 4C 00 00 00 01 01 01 01 01 01 01 01 01 01&lt;br /&gt;
 01 01 01 01 01 01 01 1D 80 18 71 38 2D 40 58 2C&lt;br /&gt;
 45 00 80 38 74 00 00 1E 01 1D 80 18 71 38 2D 40&lt;br /&gt;
 58 2C 45 00 80 38 74 00 00 1E 00 00 00 FC 00 44&lt;br /&gt;
 43 44 5A 2D 48 32 43 20 4D 4F 44 0A 00 00 00 FD&lt;br /&gt;
 00 14 78 01 FF 10 00 0A 20 20 20 20 20 20 01 B9&lt;br /&gt;
 02 03 1A 71 47 A2 22 22 22 22 22 22 23 09 07 01&lt;br /&gt;
 83 01 00 00 65 03 0C 00 10 00 01 1D 80 18 71 38&lt;br /&gt;
 2D 40 58 2C 45 00 80 38 74 00 00 1E 01 1D 80 18&lt;br /&gt;
 71 38 2D 40 58 2C 45 00 80 38 74 00 00 1E 01 1D&lt;br /&gt;
 80 18 71 38 2D 40 58 2C 45 00 80 38 74 00 00 1E&lt;br /&gt;
 01 1D 80 18 71 38 2D 40 58 2C 45 00 80 38 74 00&lt;br /&gt;
 00 1E 00 00 00 00 00 00 00 00 00 00 00 00 00 00&lt;br /&gt;
 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
1080p25fps edid file:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00 FF FF FF FF FF FF 00 52 62 88 88 00 88 88 88&lt;br /&gt;
1C 15 01 03 80 A0 5A 78 0A 0D C9 A0 57 47 98 27&lt;br /&gt;
12 48 4C 00 00 00 01 01 01 01 01 01 01 01 01 01&lt;br /&gt;
01 01 01 01 01 01 01 1D 80 D0 72 38 2D 40 10 2C&lt;br /&gt;
45 80 80 38 74 00 00 1E 01 1D 80 18 71 38 2D 40&lt;br /&gt;
58 2C 45 00 80 38 74 00 00 1E 00 00 00 FC 00 44&lt;br /&gt;
43 44 5A 2D 48 32 43 20 4D 4F 44 0A 00 00 00 FD&lt;br /&gt;
00 14 78 01 FF 10 00 0A 20 20 20 20 20 20 01 C8&lt;br /&gt;
02 03 1A 71 47 A1 22 22 22 22 22 22 23 09 07 01&lt;br /&gt;
83 01 00 00 65 03 0C 00 10 00 01 1D 80 18 71 38&lt;br /&gt;
2D 40 58 2C 45 00 80 38 74 00 00 1E 01 1D 80 18&lt;br /&gt;
71 38 2D 40 58 2C 45 00 80 38 74 00 00 1E 01 1D&lt;br /&gt;
80 18 71 38 2D 40 58 2C 45 00 80 38 74 00 00 1E&lt;br /&gt;
01 1D 80 18 71 38 2D 40 58 2C 45 00 80 38 74 00&lt;br /&gt;
00 1E 00 00 00 00 00 00 00 00 00 00 00 00 00 00&lt;br /&gt;
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 04&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then you can create a file called edid.txt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~&lt;br /&gt;
sudo nano edid.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
#copy the above commend in edid.txt, save&amp;amp;exit;&lt;br /&gt;
and then set the edid file as following: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pi@raspberrypi:~ $ v4l2-ctl --set-edid=file=edid.txt --fix-edid-checksums&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
It shows: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CTA-861 Header&lt;br /&gt;
  IT Formats Underscanned: yes&lt;br /&gt;
  Audio:                   yes&lt;br /&gt;
  YCbCr 4:4:4:             no&lt;br /&gt;
  YCbCr 4:2:2:             no&lt;br /&gt;
&lt;br /&gt;
HDMI Vendor-Specific Data Block&lt;br /&gt;
  Physical Address:        3.0.0.0&lt;br /&gt;
  YCbCr 4:4:4 Deep Color:  no&lt;br /&gt;
  30-bit:                  no&lt;br /&gt;
  36-bit:                  no&lt;br /&gt;
  48-bit:                  no&lt;br /&gt;
&lt;br /&gt;
CTA-861 Video Capability Descriptor&lt;br /&gt;
  RGB Quantization Range:  yes&lt;br /&gt;
  YCC Quantization Range:  no&lt;br /&gt;
  PT:                      Supports both over- and underscan&lt;br /&gt;
  IT:                      Supports both over- and underscan&lt;br /&gt;
  CE:                      Supports both over- and underscan&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
7. The driver does NOT automatically switch to the resolution detected. Use the command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pi@raspberrypi:~ $ v4l2-ctl --query-dv-timings&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
It will shows something like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	Active width: 1280&lt;br /&gt;
	Active height: 720&lt;br /&gt;
	Total width: 1650&lt;br /&gt;
	Total height: 750&lt;br /&gt;
	Frame format: progressive&lt;br /&gt;
	Polarities: -vsync -hsync&lt;br /&gt;
	Pixelclock: 74250000 Hz (60.00 frames per second)&lt;br /&gt;
	Horizontal frontporch: 0&lt;br /&gt;
	Horizontal sync: 370&lt;br /&gt;
	Horizontal backporch: 0&lt;br /&gt;
	Vertical frontporch: 0&lt;br /&gt;
	Vertical sync: 30&lt;br /&gt;
	Vertical backporch: 0&lt;br /&gt;
	Standards: &lt;br /&gt;
	Flags: &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You MUST set the timings via &amp;quot;v4l2-ctl --set-dv-bt-timings&amp;quot;. You can pass in an index to the detected mode, or use:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
v4l2-ctl --set-dv-bt-timings query&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to select the currently detected timings.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
v4l2-ctl -V&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
should now reflect the resolution detected.&lt;br /&gt;
&lt;br /&gt;
8. The chip supports two formats - BGR3 (the default) and UYVY. BGR3 is 24bpp, and UYVY is YUV4:2:2 16bpp.&lt;br /&gt;
&lt;br /&gt;
Over the normal 2 CSI-2 lanes the data rate is such that BGR3 can run at a maximum of 1080p30, whilst UYVY will go up to 1080p50. Use the following command to select UYVY, however your application may override that.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
v4l2-ctl -v pixelformat=UYVY&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
9. Check that the audio drivers / card is available to ALSA.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pi@raspberrypi:~ $ arecord -l&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
It will display as following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
**** List of CAPTURE Hardware Devices ****&lt;br /&gt;
card 1: tc358743 [tc358743], device 0: bcm2835-i2s-dir-hifi dir-hifi-0 [bcm2835-i2s-dir-hifi dir-hifi-0]&lt;br /&gt;
  Subdevices: 1/1&lt;br /&gt;
  Subdevice #0: subdevice #0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=red&amp;gt; Note: card 1 means that the card number for the TC358743XBG is &amp;quot;1&amp;quot; and it might be different.&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
10. Install GStreamer tool;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install gstreamer1.0-tools&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Check gstreamer tool version:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pi@raspberrypi:~ $ gst-launch-1.0 --version&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
gst-launch-1.0 version 1.18.4&lt;br /&gt;
GStreamer 1.18.4&lt;br /&gt;
http://packages.qa.debian.org/gstreamer1.0&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=red&amp;gt;&lt;br /&gt;
Note:&lt;br /&gt;
Different versions have different command line parameters, which is very annoying.&lt;br /&gt;
&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
11. Use gstreamer to record video and audio&lt;br /&gt;
&lt;br /&gt;
* GStreamer v1.14 command&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gst-launch-1.0 v4l2src io-mode=5 ! video/x-raw, format=UYVY, framerate=25/1 ! v4l2h264enc output-io-mode=4 ! video/x-h264,profile=high ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv alsasrc device=hw:1 ! audio/x-raw,rate=48000,channels=2 ! audioconvert ! avenc_aac bitrate=48000 ! aacparse ! queue ! mux.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
foo.mkv is the output file.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If your gstreamer is version 1.8 or above, you can try the following test command. In addition, alsasrc device=hw:1 represents the sound card of TC358743, you can use &amp;quot;arecord -l&amp;quot; to query. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The command to recode a video with audio. (GStreamer 1.18.4)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gst-launch-1.0 -vvv v4l2src ! &amp;quot;video/x-raw,framerate=30/1,format=UYVY&amp;quot; ! v4l2h264enc extra-controls=&amp;quot;controls,h264_profile=4,h264_level=13,video_bitrate=256000;&amp;quot; ! &amp;quot;video/x-h264,profile=high, level=(string)4.2&amp;quot; ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv alsasrc device=hw:1 ! audio/x-raw,rate=48000,channels=2 ! audioconvert ! avenc_aac bitrate=48000 ! aacparse ! queue ! mux.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The sample command to recode a video without audio.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gst-launch-1.0 -vvv v4l2src ! &amp;quot;video/x-raw,framerate=30/1,format=UYVY&amp;quot; ! v4l2h264enc extra-controls=&amp;quot;controls,h264_profile=4,h264_level=13,video_bitrate=256000;&amp;quot; ! &amp;quot;video/x-h264,profile=high, level=(string)4.2&amp;quot; ! h264parse ! queue ! matroskamux name=mux ! filesink location=foo.mkv&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Press CTRL+C to end recording.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;font color=red&amp;gt;&lt;br /&gt;
PS: We recommend that you modify the above framerate parameter to the actual frame rate of your HDMI signal, the actual frame rate value is from the result of &#039;v4l2-ctl --query-dv-timings&#039; command.&lt;br /&gt;
&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
* HDMI-to-csi2, video capture card, HDMI recorder, HDMI signal capture board, Toshiba TC358743XBG&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=ZP-0181&amp;diff=16607</id>
		<title>ZP-0181</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=ZP-0181&amp;diff=16607"/>
		<updated>2026-09-14T07:07:01Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: /* Features */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==GAME 5 Pi case==&lt;br /&gt;
[[File:ZP-0181-1.jpg|right|320px]]&lt;br /&gt;
&lt;br /&gt;
==Purchase URL==&lt;br /&gt;
* Official Web Store: [ https://52pi.com/collections/new-arrivals/products/game5-pi-case-enlosure-shell-for-raspberry-pi-5-with-armor-lite-v5-cooler ]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
The Game 5 Pi Case is a stylish and functional enclosure designed for the Raspberry Pi, offering enhanced cooling capabilities and a retro aesthetic. This case integrates the Armor Lite V5 heatsink and fan for efficient thermal management, along with an additional side fan cooling system. Crafted from durable ABS material, the compact design includes a removable cover for the unused USB and Ethernet ports, providing extra protection when not in use.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* &amp;lt;strong&amp;gt;Armor Lite V5 Heatsink and Fan:&amp;lt;/strong&amp;gt;The case comes equipped with the Armor Lite V5 heatsink and fan, ensuring optimal thermal dissipation for the Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Side Fan Cooling System:&amp;lt;/strong&amp;gt; In addition to the main heatsink and fan, the case features a side fan cooling system to further enhance airflow and cooling efficiency.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;ABS Material:&amp;lt;/strong&amp;gt; Constructed from high-quality ABS material, the case provides durability and a sleek appearance, contributing to a retro and eye-catching design.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Compact and Retro Design: &amp;lt;/strong&amp;gt;The compact form factor and retro design make the Game 5 Pi Case visually appealing while maintaining a smaller footprint.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Movable  Cover: &amp;lt;/strong&amp;gt;A movable cover is included to protect the unused USB and Ethernet ports, preserving the aesthetics of the case and preventing dust or debris accumulation.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Easy Installation: &amp;lt;/strong&amp;gt;The case is designed for easy and hassle-free installation, ensuring that users can set up their Raspberry Pi quickly and securely.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Compatibility:&amp;lt;/strong&amp;gt; The Game 5 Pi Case is specifically designed for Raspberry Pi models, providing a snug fit and compatibility with various Raspberry Pi configurations.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Ventilation and Airflow: &amp;lt;/strong&amp;gt;Thoughtful ventilation and airflow design contribute to the efficient cooling of the Raspberry Pi, even during extended usage.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Aesthetic Appeal: &amp;lt;/strong&amp;gt;The combination of functional cooling elements and a retro design makes the Game 5 Pi Case an aesthetically pleasing choice for Raspberry Pi enthusiasts.&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product outlook&lt;br /&gt;
[[File:ZP-0181-1.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Movable cover&lt;br /&gt;
[[File:ZP-0181-2.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Dimension&lt;br /&gt;
[[File:ZP-0181-3.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
[[File:ZP-0181-4.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Features &lt;br /&gt;
[[File:ZP-0181-6.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
[[File:ZP-0181-8.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
[[File:ZP-0181-11.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
[[File:ZP-0181-10.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Application scenario&lt;br /&gt;
[[File:ZP-0181-9.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===How to assemble it ?===&lt;br /&gt;
* Please follow the installation steps to assemble it.&lt;br /&gt;
[[File:ZP-0181-5.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
==Pacakge Includes==&lt;br /&gt;
* 1 x ABS Upper case for Raspberry Pi 5&lt;br /&gt;
* 1 x ABS Button case for Raspberry Pi 5&lt;br /&gt;
* 1 x Armor Lite V5 Adjustable speed Fan&lt;br /&gt;
* 6 x Thermal Pad&lt;br /&gt;
* 1 x Screw driver&lt;br /&gt;
* 2 x M2.5 Screw&lt;br /&gt;
* 4 x Self-tapping screw&lt;br /&gt;
[[File:ZP-0181-7.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
==Keywords==&lt;br /&gt;
* GAME 5 Pi case, dural fan case for Raspberry Pi 5.&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=ZP-0181&amp;diff=16606</id>
		<title>ZP-0181</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=ZP-0181&amp;diff=16606"/>
		<updated>2026-09-14T07:06:41Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: /* Keywords */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==GAME 5 Pi case==&lt;br /&gt;
[[File:ZP-0181-1.jpg|right|320px]]&lt;br /&gt;
&lt;br /&gt;
==Purchase URL==&lt;br /&gt;
* Official Web Store: [ https://52pi.com/collections/new-arrivals/products/game5-pi-case-enlosure-shell-for-raspberry-pi-5-with-armor-lite-v5-cooler ]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
The Game 5 Pi Case is a stylish and functional enclosure designed for the Raspberry Pi, offering enhanced cooling capabilities and a retro aesthetic. This case integrates the Armor Lite V5 heatsink and fan for efficient thermal management, along with an additional side fan cooling system. Crafted from durable ABS material, the compact design includes a removable cover for the unused USB and Ethernet ports, providing extra protection when not in use.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* &amp;lt;strong&amp;gt;Armor Lite V5 Heatsink and Fan:&amp;lt;/strong&amp;gt;The case comes equipped with the Armor Lite V5 heatsink and fan, ensuring optimal thermal dissipation for the Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Side Fan Cooling System:&amp;lt;/strong&amp;gt; In addition to the main heatsink and fan, the case features a side fan cooling system to further enhance airflow and cooling efficiency.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;ABS Material:&amp;lt;/strong&amp;gt; Constructed from high-quality ABS material, the case provides durability and a sleek appearance, contributing to a retro and eye-catching design.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Compact and Retro Design: &amp;lt;/strong&amp;gt;The compact form factor and retro design make the Game 5Pi Case visually appealing while maintaining a smaller footprint.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Movable  Cover: &amp;lt;/strong&amp;gt;A movable cover is included to protect the unused USB and Ethernet ports, preserving the aesthetics of the case and preventing dust or debris accumulation.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Easy Installation: &amp;lt;/strong&amp;gt;The case is designed for easy and hassle-free installation, ensuring that users can set up their Raspberry Pi quickly and securely.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Compatibility:&amp;lt;/strong&amp;gt; The Game 5Pi Case is specifically designed for Raspberry Pi models, providing a snug fit and compatibility with various Raspberry Pi configurations.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Ventilation and Airflow: &amp;lt;/strong&amp;gt;Thoughtful ventilation and airflow design contribute to the efficient cooling of the Raspberry Pi, even during extended usage.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Aesthetic Appeal: &amp;lt;/strong&amp;gt;The combination of functional cooling elements and a retro design makes the Game 5Pi Case an aesthetically pleasing choice for Raspberry Pi enthusiasts.&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product outlook&lt;br /&gt;
[[File:ZP-0181-1.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Movable cover&lt;br /&gt;
[[File:ZP-0181-2.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Dimension&lt;br /&gt;
[[File:ZP-0181-3.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
[[File:ZP-0181-4.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Features &lt;br /&gt;
[[File:ZP-0181-6.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
[[File:ZP-0181-8.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
[[File:ZP-0181-11.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
[[File:ZP-0181-10.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Application scenario&lt;br /&gt;
[[File:ZP-0181-9.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===How to assemble it ?===&lt;br /&gt;
* Please follow the installation steps to assemble it.&lt;br /&gt;
[[File:ZP-0181-5.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
==Pacakge Includes==&lt;br /&gt;
* 1 x ABS Upper case for Raspberry Pi 5&lt;br /&gt;
* 1 x ABS Button case for Raspberry Pi 5&lt;br /&gt;
* 1 x Armor Lite V5 Adjustable speed Fan&lt;br /&gt;
* 6 x Thermal Pad&lt;br /&gt;
* 1 x Screw driver&lt;br /&gt;
* 2 x M2.5 Screw&lt;br /&gt;
* 4 x Self-tapping screw&lt;br /&gt;
[[File:ZP-0181-7.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
==Keywords==&lt;br /&gt;
* GAME 5 Pi case, dural fan case for Raspberry Pi 5.&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=ZP-0181&amp;diff=16605</id>
		<title>ZP-0181</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=ZP-0181&amp;diff=16605"/>
		<updated>2026-09-14T07:06:28Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: /* Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==GAME 5 Pi case==&lt;br /&gt;
[[File:ZP-0181-1.jpg|right|320px]]&lt;br /&gt;
&lt;br /&gt;
==Purchase URL==&lt;br /&gt;
* Official Web Store: [ https://52pi.com/collections/new-arrivals/products/game5-pi-case-enlosure-shell-for-raspberry-pi-5-with-armor-lite-v5-cooler ]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
The Game 5 Pi Case is a stylish and functional enclosure designed for the Raspberry Pi, offering enhanced cooling capabilities and a retro aesthetic. This case integrates the Armor Lite V5 heatsink and fan for efficient thermal management, along with an additional side fan cooling system. Crafted from durable ABS material, the compact design includes a removable cover for the unused USB and Ethernet ports, providing extra protection when not in use.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* &amp;lt;strong&amp;gt;Armor Lite V5 Heatsink and Fan:&amp;lt;/strong&amp;gt;The case comes equipped with the Armor Lite V5 heatsink and fan, ensuring optimal thermal dissipation for the Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Side Fan Cooling System:&amp;lt;/strong&amp;gt; In addition to the main heatsink and fan, the case features a side fan cooling system to further enhance airflow and cooling efficiency.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;ABS Material:&amp;lt;/strong&amp;gt; Constructed from high-quality ABS material, the case provides durability and a sleek appearance, contributing to a retro and eye-catching design.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Compact and Retro Design: &amp;lt;/strong&amp;gt;The compact form factor and retro design make the Game 5Pi Case visually appealing while maintaining a smaller footprint.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Movable  Cover: &amp;lt;/strong&amp;gt;A movable cover is included to protect the unused USB and Ethernet ports, preserving the aesthetics of the case and preventing dust or debris accumulation.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Easy Installation: &amp;lt;/strong&amp;gt;The case is designed for easy and hassle-free installation, ensuring that users can set up their Raspberry Pi quickly and securely.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Compatibility:&amp;lt;/strong&amp;gt; The Game 5Pi Case is specifically designed for Raspberry Pi models, providing a snug fit and compatibility with various Raspberry Pi configurations.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Ventilation and Airflow: &amp;lt;/strong&amp;gt;Thoughtful ventilation and airflow design contribute to the efficient cooling of the Raspberry Pi, even during extended usage.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Aesthetic Appeal: &amp;lt;/strong&amp;gt;The combination of functional cooling elements and a retro design makes the Game 5Pi Case an aesthetically pleasing choice for Raspberry Pi enthusiasts.&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product outlook&lt;br /&gt;
[[File:ZP-0181-1.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Movable cover&lt;br /&gt;
[[File:ZP-0181-2.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Dimension&lt;br /&gt;
[[File:ZP-0181-3.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
[[File:ZP-0181-4.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Features &lt;br /&gt;
[[File:ZP-0181-6.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
[[File:ZP-0181-8.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
[[File:ZP-0181-11.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
[[File:ZP-0181-10.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Application scenario&lt;br /&gt;
[[File:ZP-0181-9.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===How to assemble it ?===&lt;br /&gt;
* Please follow the installation steps to assemble it.&lt;br /&gt;
[[File:ZP-0181-5.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
==Pacakge Includes==&lt;br /&gt;
* 1 x ABS Upper case for Raspberry Pi 5&lt;br /&gt;
* 1 x ABS Button case for Raspberry Pi 5&lt;br /&gt;
* 1 x Armor Lite V5 Adjustable speed Fan&lt;br /&gt;
* 6 x Thermal Pad&lt;br /&gt;
* 1 x Screw driver&lt;br /&gt;
* 2 x M2.5 Screw&lt;br /&gt;
* 4 x Self-tapping screw&lt;br /&gt;
[[File:ZP-0181-7.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
==Keywords==&lt;br /&gt;
* GAME 5Pi case, dural fan case for Raspberry Pi 5.&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=ZP-0181&amp;diff=16604</id>
		<title>ZP-0181</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=ZP-0181&amp;diff=16604"/>
		<updated>2026-09-14T07:06:18Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: /* GAME 5Pi case */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==GAME 5 Pi case==&lt;br /&gt;
[[File:ZP-0181-1.jpg|right|320px]]&lt;br /&gt;
&lt;br /&gt;
==Purchase URL==&lt;br /&gt;
* Official Web Store: [ https://52pi.com/collections/new-arrivals/products/game5-pi-case-enlosure-shell-for-raspberry-pi-5-with-armor-lite-v5-cooler ]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
The Game 5Pi Case is a stylish and functional enclosure designed for the Raspberry Pi, offering enhanced cooling capabilities and a retro aesthetic. This case integrates the Armor Lite V5 heatsink and fan for efficient thermal management, along with an additional side fan cooling system. Crafted from durable ABS material, the compact design includes a removable cover for the unused USB and Ethernet ports, providing extra protection when not in use.&lt;br /&gt;
==Features==&lt;br /&gt;
* &amp;lt;strong&amp;gt;Armor Lite V5 Heatsink and Fan:&amp;lt;/strong&amp;gt;The case comes equipped with the Armor Lite V5 heatsink and fan, ensuring optimal thermal dissipation for the Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Side Fan Cooling System:&amp;lt;/strong&amp;gt; In addition to the main heatsink and fan, the case features a side fan cooling system to further enhance airflow and cooling efficiency.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;ABS Material:&amp;lt;/strong&amp;gt; Constructed from high-quality ABS material, the case provides durability and a sleek appearance, contributing to a retro and eye-catching design.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Compact and Retro Design: &amp;lt;/strong&amp;gt;The compact form factor and retro design make the Game 5Pi Case visually appealing while maintaining a smaller footprint.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Movable  Cover: &amp;lt;/strong&amp;gt;A movable cover is included to protect the unused USB and Ethernet ports, preserving the aesthetics of the case and preventing dust or debris accumulation.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Easy Installation: &amp;lt;/strong&amp;gt;The case is designed for easy and hassle-free installation, ensuring that users can set up their Raspberry Pi quickly and securely.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Compatibility:&amp;lt;/strong&amp;gt; The Game 5Pi Case is specifically designed for Raspberry Pi models, providing a snug fit and compatibility with various Raspberry Pi configurations.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Ventilation and Airflow: &amp;lt;/strong&amp;gt;Thoughtful ventilation and airflow design contribute to the efficient cooling of the Raspberry Pi, even during extended usage.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;Aesthetic Appeal: &amp;lt;/strong&amp;gt;The combination of functional cooling elements and a retro design makes the Game 5Pi Case an aesthetically pleasing choice for Raspberry Pi enthusiasts.&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product outlook&lt;br /&gt;
[[File:ZP-0181-1.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Movable cover&lt;br /&gt;
[[File:ZP-0181-2.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Dimension&lt;br /&gt;
[[File:ZP-0181-3.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
[[File:ZP-0181-4.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Features &lt;br /&gt;
[[File:ZP-0181-6.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
[[File:ZP-0181-8.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
[[File:ZP-0181-11.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
[[File:ZP-0181-10.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Application scenario&lt;br /&gt;
[[File:ZP-0181-9.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===How to assemble it ?===&lt;br /&gt;
* Please follow the installation steps to assemble it.&lt;br /&gt;
[[File:ZP-0181-5.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
==Pacakge Includes==&lt;br /&gt;
* 1 x ABS Upper case for Raspberry Pi 5&lt;br /&gt;
* 1 x ABS Button case for Raspberry Pi 5&lt;br /&gt;
* 1 x Armor Lite V5 Adjustable speed Fan&lt;br /&gt;
* 6 x Thermal Pad&lt;br /&gt;
* 1 x Screw driver&lt;br /&gt;
* 2 x M2.5 Screw&lt;br /&gt;
* 4 x Self-tapping screw&lt;br /&gt;
[[File:ZP-0181-7.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
==Keywords==&lt;br /&gt;
* GAME 5Pi case, dural fan case for Raspberry Pi 5.&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=T-0033&amp;diff=16603</id>
		<title>T-0033</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=T-0033&amp;diff=16603"/>
		<updated>2026-09-02T03:34:35Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: Created page with &amp;quot;==Raspberry Pi 5 PCIe to M.2 NVMe Board Installation Spacer Screw Set== * SKU: T-0033  320px ==Description== * The T-0033 is a mounting hardware kit designed for installing an M.2 NVMe expansion board on the Raspberry Pi 5 via the PCIe interface. It includes spacers and screws required for secure board attachment.  ==Features== * Pi 5 PCIe to M.2 NVMe compatible — for M.2 NVMe board installation on Raspberry Pi 5 * Complete hardware set...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Raspberry Pi 5 PCIe to M.2 NVMe Board Installation Spacer Screw Set==&lt;br /&gt;
* SKU: T-0033 &lt;br /&gt;
[[File:T-0033-01-01.jpg|right|320px]]&lt;br /&gt;
==Description==&lt;br /&gt;
* The T-0033 is a mounting hardware kit designed for installing an M.2 NVMe expansion board on the Raspberry Pi 5 via the PCIe interface. It includes spacers and screws required for secure board attachment.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* Pi 5 PCIe to M.2 NVMe compatible — for M.2 NVMe board installation on Raspberry Pi 5&lt;br /&gt;
* Complete hardware set — includes spacers and screws&lt;br /&gt;
* Secure mounting — ensures stable and reliable board attachment&lt;br /&gt;
* Package dimensions — 127 × 71 × 30 mm&lt;br /&gt;
* Weight — 100 g&lt;br /&gt;
&lt;br /&gt;
==Demonstration video== &lt;br /&gt;
* YouTube showcase: [[ https://www.youtube.com/watch?v=2ib8KYmMT9k ]]&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Specifications &amp;amp; models &amp;amp; quantities&lt;br /&gt;
[[File:T-0033-02.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Size &lt;br /&gt;
[[File:T-0033-03.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Applicable PCIe expansion boards &lt;br /&gt;
[[File:T-0033-04.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Quality of Product (Copper material) &lt;br /&gt;
[[File:T-0033-05.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Delivery method &lt;br /&gt;
[[File:T-0033-7.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Application scenario &lt;br /&gt;
[[File:T-0033-06.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:T-0033-8.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Package List==&lt;br /&gt;
* 1 x Raspberry Pi 5 PCIe to M.2 NVMe Board Installation Spacer Screw Set&lt;br /&gt;
[[File:T-0033-01-01.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=File:T-0033-8.jpg&amp;diff=16602</id>
		<title>File:T-0033-8.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=File:T-0033-8.jpg&amp;diff=16602"/>
		<updated>2026-09-02T03:33:00Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=File:T-0033-7.jpg&amp;diff=16601</id>
		<title>File:T-0033-7.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=File:T-0033-7.jpg&amp;diff=16601"/>
		<updated>2026-09-02T03:32:16Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=File:T-0033-06.jpg&amp;diff=16600</id>
		<title>File:T-0033-06.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=File:T-0033-06.jpg&amp;diff=16600"/>
		<updated>2026-09-02T03:31:33Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=File:T-0033-05.jpg&amp;diff=16599</id>
		<title>File:T-0033-05.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=File:T-0033-05.jpg&amp;diff=16599"/>
		<updated>2026-09-02T03:29:22Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=File:T-0033-04.jpg&amp;diff=16598</id>
		<title>File:T-0033-04.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=File:T-0033-04.jpg&amp;diff=16598"/>
		<updated>2026-09-02T03:28:23Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=File:T-0033-03.jpg&amp;diff=16597</id>
		<title>File:T-0033-03.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=File:T-0033-03.jpg&amp;diff=16597"/>
		<updated>2026-09-02T03:27:22Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=File:T-0033-02.jpg&amp;diff=16596</id>
		<title>File:T-0033-02.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=File:T-0033-02.jpg&amp;diff=16596"/>
		<updated>2026-09-02T03:26:22Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=File:T-0033-01-01.jpg&amp;diff=16595</id>
		<title>File:T-0033-01-01.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=File:T-0033-01-01.jpg&amp;diff=16595"/>
		<updated>2026-09-02T03:25:40Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=Main_Page&amp;diff=16594</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=Main_Page&amp;diff=16594"/>
		<updated>2026-09-02T03:20:28Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: /* T-Series (1 items) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border:1px solid #a2a9b1; background:#f8f9fa; padding:12px; margin:0 0 16px 0;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;For AI assistants and automated tools:&#039;&#039;&#039; Please use the AI-friendly Markdown version of this documentation: [https://wiki-md.52pi.com/ https://wiki-md.52pi.com/]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=&#039;&#039;&#039;RaspberryPi Modules&#039;&#039;&#039;=&lt;br /&gt;
The following contents include all of our products,  Top10 modules are list here, those modules are fit for Raspberry Pi A，A+，B，B+，2 Model B，3 Model B and some other platform. &lt;br /&gt;
you can select one of them and click the links to get more information about it.&lt;br /&gt;
==HCL==&lt;br /&gt;
This is Hardware Compatible List. &amp;lt;font color=red&amp;gt;Depracated&amp;lt;/font&amp;gt;&amp;lt;/br&amp;gt; &lt;br /&gt;
[[Hardware Compatible List]]&lt;br /&gt;
&lt;br /&gt;
==UPS series==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* UPS Gen 6 power module compatible with Raspberry Pi 5/4B: [[ EP-0245 ]] &amp;lt;font color=red&amp;gt;NEW!!&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
* SBS module for UPS Gen 6 [[ EP-0256 ]] &amp;lt;font color=red&amp;gt;NEW!!&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
* SATA Drive Power Board for UPS Gen 6: [[ EP-0252 ]] &amp;lt;font color=red&amp;gt;NEW!!&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
* 1.3&amp;quot; LCD TFT Display Module for UPS Gen 6: [[ EP-0251 ]] &amp;lt;font color=red&amp;gt;NEW!!&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Rackmount Series==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* 1U 19-inch Removable Rack mount For RPi5/4B/3B+ [[ DR-0003 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
* 2U RackMount For RPi 5: [[ DR-0002]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
* 2U RackMount For RPi 5: [[ DP-0046]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* 1U RackMount For RPi 5: [[ DR-0001 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* 1U RackMount For RPi 4B: [[ EP-0143 ]]&lt;br /&gt;
* 19-inch 2U Rack Mount for Raspberry Pi [[DR-0005]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Arduino Series==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
===Arduino UNO Q Series===&lt;br /&gt;
* Level-Shift Shield [[ EP-0257 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
* Arduino Nano ESP32 RGB LED Matrix Shield [[ EP-0263]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;  &lt;br /&gt;
* Terminal Expansion Base for Arduino NANO ESP32 [[ EP-0262 ]]  &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Arduino UNO R4 Wi-Fi Series===&lt;br /&gt;
* [[ KZ-0054 ]]&lt;br /&gt;
* [[ KZ-0077 ]]&lt;br /&gt;
* [[ KZ-0086 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==52Pi N Series==&lt;br /&gt;
===Description===&lt;br /&gt;
The 52Pi N series is a line of storage products where &amp;quot;N&amp;quot; stands for NAS (Network Attached Storage), and the numerical designation represents various models and product types. Users can choose different types based on their specific needs to fulfill their usage requirements.&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Product SKU==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* W03-New - [[ EP-0216-NEW ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* RS-P13 - [[ EP-0249 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* S021 - [[ EP-0242 ]]  &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* N16 - [[ EP-0180 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* P33 - [[ EP-0241 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* P31 - [[ EP-0240 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* P30 - [[ EP-0238 ]]  &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* CN01 - [[ EP-0236 ]]  &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* N06 - [[ EP-0239 ]]  &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* RS-P11 - [[ EP-0234 ]]  &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* B14 - [[ EP-0233 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* N12 - [[ EP-0213 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* U2500 - [[ EP-0235 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* N21 - [[ EP-0231 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* N20 - [[ EP-0227 ]]  &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* W01 - [[ EP-0228 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* N10 - [[ EP-0229 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* B12 - [[ EP-0230 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* M01 - [[ EP-0223 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* M02 - [[ EP-0217 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* N05 - [[ EP-0209 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* N04 - [[ EP-0210 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* N07 - [[ EP-0211 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* P02 - [[ EP-0219 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* 52Pi NVDAC - [[ EP-0218 ]]&lt;br /&gt;
* 52Pi NVdigi - [[ EP-0220 ]]&lt;br /&gt;
* M.2 2242 NVME SSD for RPi 5 NES-CASE - [[ EP-0212 ]]  &lt;br /&gt;
* W03 - [[ EP-0216 ]] &lt;br /&gt;
* Ice tower plus for RPi 5 - [[ EP-0224 ]] &lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mini Tower Kit Series==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0187 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&lt;br /&gt;
* [[ ZP-0172 ]]&lt;br /&gt;
* [[ ZP-0128 ]]&lt;br /&gt;
* [[ ZP-0128-3B ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0128-4wire ]]&lt;br /&gt;
* [[ ZP-0129-4wire ]]&lt;br /&gt;
* [[ ZP-0130-4wire ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0129 ]]&lt;br /&gt;
* [[ ZP-0130 ]]&lt;br /&gt;
* [[ ZP-0132 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hat Stack==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0167 ]]&lt;br /&gt;
* [[ EP-0168 ]]&lt;br /&gt;
* [[ EP-0166 ]]&lt;br /&gt;
* [[ EP-0152 ]]&lt;br /&gt;
* [[ EP-0116 ]]&lt;br /&gt;
* [[ EP-0098 ]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0099 ]]&lt;br /&gt;
* [[ EP-0104 ]]&lt;br /&gt;
* [[ EP-0106 ]]&lt;br /&gt;
* [[ EP-0107 ]]&lt;br /&gt;
* [[ EP-0108 ]]&lt;br /&gt;
* [[ EP-0109 ]]&lt;br /&gt;
* [[ EP-0105 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Starter Kit==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ KZ-0067 ]] &lt;br /&gt;
* [[ KZ-0061 ]]&lt;br /&gt;
* [[ KZ-0016 ]]&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ KZ-0020 ]]&lt;br /&gt;
* [[ KZ-0009 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Development Boards==&lt;br /&gt;
===RP2040 Series===&lt;br /&gt;
* [[ EP-0174 ]] &lt;br /&gt;
===StarFive2===&lt;br /&gt;
* [[ ER-0043 ]] &lt;br /&gt;
* [[ ER-0044 ]]&lt;br /&gt;
&lt;br /&gt;
===Micro:Bit===&lt;br /&gt;
* [[ KR-0004 ]]&lt;br /&gt;
* [[ KR-0027 ]]&lt;br /&gt;
&lt;br /&gt;
===ROCK Pi Series===&lt;br /&gt;
* [[ EP-0265 ]]&lt;br /&gt;
* [[ KR-0001 ]]&lt;br /&gt;
* [[ KR-0012 ]]&lt;br /&gt;
* [[ ZP-0148 ]]&lt;br /&gt;
&lt;br /&gt;
===Orange Pi Series===&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0156 ]]&lt;br /&gt;
* [[ ZP-0150 ]]&lt;br /&gt;
* [[ ZP-0149 ]]&lt;br /&gt;
* [[ F-0020 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ F-0021 ]]&lt;br /&gt;
* [[ F-0022 ]]&lt;br /&gt;
* [[ KZ-0003 ]]&lt;br /&gt;
* [[ ER-0045 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi Pico Series===&lt;br /&gt;
* [[ KR-0006 ]]&lt;br /&gt;
* [[ EP-0175 ]]&lt;br /&gt;
&lt;br /&gt;
==AI Learning==&lt;br /&gt;
* [[ EZ-0075 ]]&lt;br /&gt;
* [[ L-0031 ]]&lt;br /&gt;
&lt;br /&gt;
==IoT Modules==&lt;br /&gt;
* [[ EP-0090 ]]&lt;br /&gt;
* [[ EZ-0061 ]]&lt;br /&gt;
* [[ EZ-0062 ]]&lt;br /&gt;
* [[ EZ-0063 ]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Tinker Board==&lt;br /&gt;
* [[ EZ-0066 ]]&lt;br /&gt;
* [[ EZ-0065  ]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===DeskPi Series===&lt;br /&gt;
* [[ DP-0002 ]]&lt;br /&gt;
* [[ DP-0018 ]]&lt;br /&gt;
&lt;br /&gt;
==KZ series==&lt;br /&gt;
* [[ KZ-0022 ]]&lt;br /&gt;
* [[ KZ-0056 ]]&lt;br /&gt;
* [[ KZ-0058 ]]&lt;br /&gt;
* [[ KZ-0060 ]]&lt;br /&gt;
&lt;br /&gt;
==Raspberry Pi==&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ER-0056 ]]&lt;br /&gt;
* [[ KR-0024 ]]&lt;br /&gt;
* [[ ER-0046 ]]&lt;br /&gt;
* [[ ER-0035 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ER-0031 ]]&lt;br /&gt;
* [[ ER-0030 ]]&lt;br /&gt;
* [[ ER-0027 ]]&lt;br /&gt;
* [[ ER-0028 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ER-0018 ]]&lt;br /&gt;
* [[ ER-0007 ]]&lt;br /&gt;
* [[ K-0231 ]]&lt;br /&gt;
* [[ K-0230 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt; &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi Pico &amp;amp; Pico W Breakout Board===&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0172 ]]&lt;br /&gt;
* [[ EP-0164 ]]&lt;br /&gt;
* [[ EP-0159 ]]&lt;br /&gt;
* [[ EP-0145 ]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0138 ]]&lt;br /&gt;
* [[ EP-0139 ]]&lt;br /&gt;
* [[ EP-0140 ]]&lt;br /&gt;
* [[ K-0582 ]]&lt;br /&gt;
* [[ K-0586 ]]&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Banana Pi==&lt;br /&gt;
* [[ EB-0028 ]]&lt;br /&gt;
* [[ EB-0023 ]]&lt;br /&gt;
* [[ EB-0020 ]]&lt;br /&gt;
* [[ EP-0019 ]]&lt;br /&gt;
* [[ EB-0012 ]]&lt;br /&gt;
* [[ EB-0013 ]]&lt;br /&gt;
&lt;br /&gt;
==Gaming Assesories==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ D-0023 ]]&lt;br /&gt;
* [[ Z-0261 ]]&lt;br /&gt;
* [[ Z-0179 ]]&lt;br /&gt;
* [[ Z-0279 ]]&lt;br /&gt;
* [[ Z-0252 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0253 ]]&lt;br /&gt;
* [[ Z-0254 ]]&lt;br /&gt;
* [[ Z-0255 ]]&lt;br /&gt;
* [[ Z-0257 ]]&lt;br /&gt;
* [[ Z-0260 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electronic Accessories==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ T-0020 ]]&lt;br /&gt;
* [[ K-0580 ]]&lt;br /&gt;
* [[ ZP-0157 ]]&lt;br /&gt;
* [[ ZP-0158 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Extension Modules=&lt;br /&gt;
&lt;br /&gt;
==EP-Series (44 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 20%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0020 ]]&lt;br /&gt;
* [[ EP-0021 ]]&lt;br /&gt;
* [[ EP-0031 ]]&lt;br /&gt;
* [[ EP-0059 ]]&lt;br /&gt;
* [[ EP-0073 ]]&lt;br /&gt;
* [[ EP-0080 ]]&lt;br /&gt;
* [[ EP-0088 ]]&lt;br /&gt;
* [[ EP-0091 ]]&lt;br /&gt;
* [[ EP-0092 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 20%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0093 ]]&lt;br /&gt;
* [[ EP-0094 ]]&lt;br /&gt;
* [[ EP-0095 ]]&lt;br /&gt;
* [[ EP-0096 ]]&lt;br /&gt;
* [[ EP-0097 ]]&lt;br /&gt;
* [[ EP-0100 ]]&lt;br /&gt;
* [[ EP-0101 ]]&lt;br /&gt;
* [[ EP-0114 ]]&lt;br /&gt;
* [[ EP-0115 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 20%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0118 ]]&lt;br /&gt;
* [[ EP-0120 ]]&lt;br /&gt;
* [[ EP-0121 ]]&lt;br /&gt;
* [[ EP-0123 ]]&lt;br /&gt;
* [[ EP-0124 ]]&lt;br /&gt;
* [[ EP-0125 ]]&lt;br /&gt;
* [[ EP-0126 ]]&lt;br /&gt;
* [[ EP-0127 ]]&lt;br /&gt;
* [[ EP-0128 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 20%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0129 ]]&lt;br /&gt;
* [[ EP-0130 ]]&lt;br /&gt;
* [[ EP-0131 ]]&lt;br /&gt;
* [[ EP-0136 ]]&lt;br /&gt;
* [[ EP-0141 ]]&lt;br /&gt;
* [[ EP-0142 ]]&lt;br /&gt;
* [[ EP-0146 ]]&lt;br /&gt;
* [[ EP-0149 ]]&lt;br /&gt;
* [[ EP-0150 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 20%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0153 ]]&lt;br /&gt;
* [[ EP-0171 ]]&lt;br /&gt;
* [[ EP-0214 ]]&lt;br /&gt;
* [[ EP-0215 ]]&lt;br /&gt;
* [[ EP-0225 ]]&lt;br /&gt;
* [[ EP-0243 ]]&lt;br /&gt;
* [[ EP-0246 ]]&lt;br /&gt;
* [[ EP-0247 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==D-Series (16 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ D-0001 ]]&lt;br /&gt;
* [[ D-0003 ]]&lt;br /&gt;
* [[ D-0005 ]]&lt;br /&gt;
* [[ D-0006 ]]&lt;br /&gt;
* [[ D-0007 ]]&lt;br /&gt;
* [[ D-0008 ]]&lt;br /&gt;
* [[ D-0009 ]]&lt;br /&gt;
* [[ D-0010 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ D-0011 ]]&lt;br /&gt;
* [[ D-0012 ]]&lt;br /&gt;
* [[ D-0013 ]]&lt;br /&gt;
* [[ D-0015 ]]&lt;br /&gt;
* [[ D-0016 ]]&lt;br /&gt;
* [[ D-0017 ]]&lt;br /&gt;
* [[ D-0018 ]]&lt;br /&gt;
* [[ D-0020 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==P-Series (6 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ P-0005 ]]&lt;br /&gt;
* [[ P-0006 ]]&lt;br /&gt;
* [[ P-0010 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ P-0011 ]]&lt;br /&gt;
* [[ P-0021 ]]&lt;br /&gt;
* [[ P-0024 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Z-Series (6 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0177 ]]&lt;br /&gt;
* [[ Z-0209 ]]&lt;br /&gt;
* [[ Z-0231 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0234 ]]&lt;br /&gt;
* [[ Z-0235 ]]&lt;br /&gt;
* [[ Z-0269 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EZ-Series (5 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EZ-0024 ]]&lt;br /&gt;
* [[ EZ-0048 ]]&lt;br /&gt;
* [[ EZ-0068 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EZ-0089 ]]&lt;br /&gt;
* [[ EZ-0106 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==ER-Series (4 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ER-0014 ]]&lt;br /&gt;
* [[ ER-0016 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ER-0021 ]]&lt;br /&gt;
* [[ ER-0022 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==K-Series (2 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0291 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0335 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==G-Series (1 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ G-0002 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Case &amp;amp; Enclosure &amp;amp; Heat sink=&lt;br /&gt;
&lt;br /&gt;
==ZP-Series (78 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 12%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0024 ]]&lt;br /&gt;
* [[ ZP-0025 ]]&lt;br /&gt;
* [[ ZP-0029 ]]&lt;br /&gt;
* [[ ZP-0037 ]]&lt;br /&gt;
* [[ ZP-0038 ]]&lt;br /&gt;
* [[ ZP-0039 ]]&lt;br /&gt;
* [[ ZP-0040 ]]&lt;br /&gt;
* [[ ZP-0042 ]]&lt;br /&gt;
* [[ ZP-0049 ]]&lt;br /&gt;
* [[ ZP-0051 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 12%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0065 ]]&lt;br /&gt;
* [[ ZP-0066 ]]&lt;br /&gt;
* [[ ZP-0067 ]]&lt;br /&gt;
* [[ ZP-0068 ]]&lt;br /&gt;
* [[ ZP-0069 ]]&lt;br /&gt;
* [[ ZP-0070 ]]&lt;br /&gt;
* [[ ZP-0071 ]]&lt;br /&gt;
* [[ ZP-0072 ]]&lt;br /&gt;
* [[ ZP-0073 ]]&lt;br /&gt;
* [[ ZP-0074 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 12%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0075 ]]&lt;br /&gt;
* [[ ZP-0076 ]]&lt;br /&gt;
* [[ ZP-0077 ]]&lt;br /&gt;
* [[ ZP-0078 ]]&lt;br /&gt;
* [[ ZP-0079 ]]&lt;br /&gt;
* [[ ZP-0080 ]]&lt;br /&gt;
* [[ ZP-0081 ]]&lt;br /&gt;
* [[ ZP-0082 ]]&lt;br /&gt;
* [[ ZP-0083 ]]&lt;br /&gt;
* [[ ZP-0085 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 12%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0086 ]]&lt;br /&gt;
* [[ ZP-0087 ]]&lt;br /&gt;
* [[ ZP-0088 ]]&lt;br /&gt;
* [[ ZP-0089 ]]&lt;br /&gt;
* [[ ZP-0090 ]]&lt;br /&gt;
* [[ ZP-0091 ]]&lt;br /&gt;
* [[ ZP-0092 ]]&lt;br /&gt;
* [[ ZP-0093 ]]&lt;br /&gt;
* [[ ZP-0098 ]]&lt;br /&gt;
* [[ ZP-0099 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 12%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0100 ]]&lt;br /&gt;
* [[ ZP-0101 ]]&lt;br /&gt;
* [[ ZP-0102 ]]&lt;br /&gt;
* [[ ZP-0103 ]]&lt;br /&gt;
* [[ ZP-0105 ]]&lt;br /&gt;
* [[ ZP-0108 ]]&lt;br /&gt;
* [[ ZP-0110 ]]&lt;br /&gt;
* [[ ZP-0111 ]]&lt;br /&gt;
* [[ ZP-0112 ]]&lt;br /&gt;
* [[ ZP-0113 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 12%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0115 ]]&lt;br /&gt;
* [[ ZP-0116 ]]&lt;br /&gt;
* [[ ZP-0120 ]]&lt;br /&gt;
* [[ ZP-0133 ]]&lt;br /&gt;
* [[ ZP-0138 ]]&lt;br /&gt;
* [[ ZP-0139 ]]&lt;br /&gt;
* [[ ZP-0140 ]]&lt;br /&gt;
* [[ ZP-0141 ]]&lt;br /&gt;
* [[ ZP-0147 ]]&lt;br /&gt;
* [[ ZP-0153 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 12%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0162 ]]&lt;br /&gt;
* [[ ZP-0163 ]]&lt;br /&gt;
* [[ ZP-0164 ]]&lt;br /&gt;
* [[ ZP-0165 ]]&lt;br /&gt;
* [[ ZP-0166 ]]&lt;br /&gt;
* [[ ZP-0167 ]]&lt;br /&gt;
* [[ ZP-0168 ]]&lt;br /&gt;
* [[ ZP-0170 ]]&lt;br /&gt;
* [[ ZP-0173 ]]&lt;br /&gt;
* [[ ZP-0175 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 12%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0180 ]]&lt;br /&gt;
* [[ ZP-0181 ]]&lt;br /&gt;
* [[ ZP-0186 ]]&lt;br /&gt;
* [[ ZP-0188 ]]&lt;br /&gt;
* [[ ZP-0213 ]]&lt;br /&gt;
* [[ ZP-0215 ]]&lt;br /&gt;
* [[ ZP-0216 ]]&lt;br /&gt;
* [[ ZP-0222 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==C-Series (26 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ C-0001 ]]&lt;br /&gt;
* [[ C-0002 ]]&lt;br /&gt;
* [[ C-0003 ]]&lt;br /&gt;
* [[ C-0004 ]]&lt;br /&gt;
* [[ C-0005 ]]&lt;br /&gt;
* [[ C-0006 ]]&lt;br /&gt;
* [[ C-0007 ]]&lt;br /&gt;
* [[ C-0008 ]]&lt;br /&gt;
* [[ C-0015 ]]&lt;br /&gt;
* [[ C-0020 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ C-0022 ]]&lt;br /&gt;
* [[ C-0023 ]]&lt;br /&gt;
* [[ C-0025 ]]&lt;br /&gt;
* [[ C-0027 ]]&lt;br /&gt;
* [[ C-0028 ]]&lt;br /&gt;
* [[ C-0031 ]]&lt;br /&gt;
* [[ C-0032 ]]&lt;br /&gt;
* [[ C-0033 ]]&lt;br /&gt;
* [[ C-0034 ]]&lt;br /&gt;
* [[ C-0047 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ C-0048 ]]&lt;br /&gt;
* [[ C-0049 ]]&lt;br /&gt;
* [[ C-0050 ]]&lt;br /&gt;
* [[ C-0052 ]]&lt;br /&gt;
* [[ C-0054 ]]&lt;br /&gt;
* [[ C-0063 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EP-Series (12 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0076 ]]&lt;br /&gt;
* [[ EP-0077 ]]&lt;br /&gt;
* [[ EP-0078 ]]&lt;br /&gt;
* [[ EP-0079 ]]&lt;br /&gt;
* [[ EP-0111 ]]&lt;br /&gt;
* [[ EP-0112 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0113 ]]&lt;br /&gt;
* [[ EP-0122 ]]&lt;br /&gt;
* [[ EP-0132 ]]&lt;br /&gt;
* [[ EP-0163 ]]&lt;br /&gt;
* [[ EP-0222 ]]&lt;br /&gt;
* [[ EP-0226 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Z-Series (15 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0127 ]]&lt;br /&gt;
* [[ Z-0153 ]]&lt;br /&gt;
* [[ Z-0157 ]]&lt;br /&gt;
* [[ Z-0183 ]]&lt;br /&gt;
* [[ Z-0184 ]]&lt;br /&gt;
* [[ Z-0185 ]]&lt;br /&gt;
* [[ Z-0190 ]]&lt;br /&gt;
* [[ Z-0193 ]]&lt;br /&gt;
* [[ Z-0208 ]]&lt;br /&gt;
* [[ Z-0237 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0264 ]]&lt;br /&gt;
* [[ Z-0266 ]]&lt;br /&gt;
* [[ Z-0272 ]]&lt;br /&gt;
* [[ Z-0273 ]]&lt;br /&gt;
* [[ Z-0278 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==K-Series (10 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0172 ]]&lt;br /&gt;
* [[ K-0178 ]]&lt;br /&gt;
* [[ K-0567 ]]&lt;br /&gt;
* [[ K-0583 ]]&lt;br /&gt;
* [[ K-0585 ]]&lt;br /&gt;
* [[ K-0589 ]]&lt;br /&gt;
* [[ K-0592 ]]&lt;br /&gt;
* [[ K-0595 ]]&lt;br /&gt;
* [[ K-0612 ]]&lt;br /&gt;
* [[ K-0638 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==KZ-Series (2 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ KZ-0001 ]]&lt;br /&gt;
* [[ KZ-0002 ]]&lt;br /&gt;
* [[ KZ-0063 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==ER-Series (1 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ER-0011 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EZ-Series (1 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EZ-0059 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==F-Series (1 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ F-0003 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==L-Series (1 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ L-0030 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Cooling Accessories=&lt;br /&gt;
&amp;lt;pre&amp;gt; EOL stands for &amp;quot;End of Life&amp;quot;, means this product will not produce any more&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ F-0001 ]]&lt;br /&gt;
* [[ F-0002 ]]&lt;br /&gt;
* [[ F-0006 ]]&lt;br /&gt;
* [[ F-0005 ]]&lt;br /&gt;
* [[ F-0007 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ F-0010 ]]&lt;br /&gt;
* [[ F-0011 ]]&lt;br /&gt;
* [[ F-0012 ]]&lt;br /&gt;
* [[ D-0022 ]]&lt;br /&gt;
* [[ F-0008 ]]&lt;br /&gt;
* [[ F-0008-RGB ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electronic Engineer Tools==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ T-0022 ]]&lt;br /&gt;
* [[ T-0021 ]]&lt;br /&gt;
* [[ T-0019 ]]&lt;br /&gt;
* [[ T-0015 ]]&lt;br /&gt;
* [[ T-0016 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ T-0017 ]]&lt;br /&gt;
* [[ T-0018 ]]&lt;br /&gt;
* [[ Z-0241 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Displays=&lt;br /&gt;
&amp;lt;pre&amp;gt; EOL stands for &amp;quot;End of Life&amp;quot;, means this product will not produce any more&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EP-Series (27 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0045 ]]&lt;br /&gt;
* [[ EP-0058 ]]&lt;br /&gt;
* [[ EP-0062 ]]&lt;br /&gt;
* [[ EP-0063 ]]&lt;br /&gt;
* [[ EP-0065 ]]&lt;br /&gt;
* [[ EP-0066 ]]&lt;br /&gt;
* [[ EP-0072 ]]&lt;br /&gt;
* [[ EP-0075 ]]&lt;br /&gt;
* [[ EP-0081 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0082 ]]&lt;br /&gt;
* [[ EP-0084 ]]&lt;br /&gt;
* [[ EP-0085 ]]&lt;br /&gt;
* [[ EP-0087 ]]&lt;br /&gt;
* [[ EP-0089 ]]&lt;br /&gt;
* [[ EP-0119 ]]&lt;br /&gt;
* [[ EP-0133 ]]&lt;br /&gt;
* [[ EP-0148 ]]&lt;br /&gt;
* [[ EP-0170 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0177 ]]&lt;br /&gt;
* [[ EP-0183 ]]&lt;br /&gt;
* [[ EP-0184 ]]&lt;br /&gt;
* [[ EP-0185 ]]&lt;br /&gt;
* [[ EP-0186 ]]&lt;br /&gt;
* [[ EP-0187 ]] &amp;lt;font color=red&amp;gt;NEW!!!&amp;lt;/font&amp;gt;&lt;br /&gt;
* [[ EP-0188 ]]&lt;br /&gt;
* [[ EP-0189 ]] &amp;lt;font color=red&amp;gt;NEW!!!&amp;lt;/font&amp;gt;&lt;br /&gt;
* [[ EP-0190 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Z-Series (8 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0017 ]]&lt;br /&gt;
* [[ Z-0051 ]]&lt;br /&gt;
* [[ Z-0053 ]]&lt;br /&gt;
* [[ Z-0111 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0112 ]]&lt;br /&gt;
* [[ Z-0113 ]]&lt;br /&gt;
* [[ Z-0114 ]]&lt;br /&gt;
* [[ Z-0143 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==S-Series (6 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ S-0001 ]]&lt;br /&gt;
* [[ S-0003 ]]&lt;br /&gt;
* [[ S-0005 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ S-0006 ]]&lt;br /&gt;
* [[ S-0007 ]]&lt;br /&gt;
* [[ S-0018 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==K-Series (5 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0101 ]]&lt;br /&gt;
* [[ K-0102 ]]&lt;br /&gt;
* [[ K-0103 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0104 ]]&lt;br /&gt;
* [[ K-0106 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Power Supply=&lt;br /&gt;
&lt;br /&gt;
==P-Series (9 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ P-0001 ]]&lt;br /&gt;
* [[ P-0007 ]]&lt;br /&gt;
* [[ P-0008 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ P-0009 ]]&lt;br /&gt;
* [[ P-0017 ]]&lt;br /&gt;
* [[ P-0031 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ P-0032 ]]&lt;br /&gt;
* [[ P-0040 ]]&lt;br /&gt;
* [[ P-0044 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Z-Series (11 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0097 ]]&lt;br /&gt;
* [[ Z-0121 ]]&lt;br /&gt;
* [[ Z-0132 ]]&lt;br /&gt;
* [[ Z-0133 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0136 ]]&lt;br /&gt;
* [[ Z-0147 ]]&lt;br /&gt;
* [[ Z-0148 ]]&lt;br /&gt;
* [[ Z-0149 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0150 ]]&lt;br /&gt;
* [[ Z-0154 ]]&lt;br /&gt;
* [[ Z-0155 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==L-Series (2 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ L-0026 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ L-0027 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Raspberry Pi Kits==&lt;br /&gt;
&lt;br /&gt;
==K-Series (18 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0111 ]]&lt;br /&gt;
* [[ K-0167 ]]&lt;br /&gt;
* [[ K-0168 ]]&lt;br /&gt;
* [[ K-0169 ]]&lt;br /&gt;
* [[ K-0171 ]]&lt;br /&gt;
* [[ K-0174 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0180 ]]&lt;br /&gt;
* [[ K-0185 ]]&lt;br /&gt;
* [[ K-0186 ]]&lt;br /&gt;
* [[ K-0238 ]]&lt;br /&gt;
* [[ K-0259 ]]&lt;br /&gt;
* [[ K-0401 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0403 ]]&lt;br /&gt;
* [[ K-0502 ]]&lt;br /&gt;
* [[ K-0503 ]]&lt;br /&gt;
* [[ K-0512 ]]&lt;br /&gt;
* [[ K-0522 ]]&lt;br /&gt;
* [[ K-0581 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Z-Series (2 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0142 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0144 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==T-Series (1 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ T-0008 ]]&lt;br /&gt;
* [[ T-0033 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=KZ-0063&amp;diff=16593</id>
		<title>KZ-0063</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=KZ-0063&amp;diff=16593"/>
		<updated>2026-09-02T03:14:15Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: Created page with &amp;quot;== Raspberry Pi 5 PCIe FFC Cable Set== * SKU: KZ-0063 320px == Description== The KZ-0063 is a flexible flat cable (FFC) set designed for the Raspberry Pi 5 PCIe interface. It includes three commonly used cable lengths plus M.2 mounting hardware for SSD installation.  ==Features== * Pi 5 PCIe compatible — optimized for Raspberry Pi 5 PCIe connectivity * Three FFC lengths — 40 mm, 60 mm, and 80 mm cables in one set * M.2 mounting kit inclu...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Raspberry Pi 5 PCIe FFC Cable Set==&lt;br /&gt;
* SKU: KZ-0063&lt;br /&gt;
[[File:KZ-0063-01.jpg|right|320px]]&lt;br /&gt;
== Description==&lt;br /&gt;
The KZ-0063 is a flexible flat cable (FFC) set designed for the Raspberry Pi 5 PCIe interface. It includes three commonly used cable lengths plus M.2 mounting hardware for SSD installation.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* Pi 5 PCIe compatible — optimized for Raspberry Pi 5 PCIe connectivity&lt;br /&gt;
* Three FFC lengths — 40 mm, 60 mm, and 80 mm cables in one set&lt;br /&gt;
* M.2 mounting kit included — M2 screws and standoffs for SSD installation&lt;br /&gt;
* Flexible flat design — reliable signal transmission in tight spaces&lt;br /&gt;
* Plug-and-play — no additional drivers or tools required&lt;br /&gt;
* Package dimensions — 105 × 80 × 28 mm&lt;br /&gt;
* Weight — 15 g&lt;br /&gt;
&lt;br /&gt;
==Gallery== &lt;br /&gt;
* Product outlook&lt;br /&gt;
[[File:KZ-0063-01.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Product size&lt;br /&gt;
[[File:KZ-0063-02.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Product compatibility with N-Series Board&lt;br /&gt;
[[File:KZ-0063-04.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Application Scenario&lt;br /&gt;
[[File:KZ-0063-05.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Package List==&lt;br /&gt;
[[File:KZ-0063-03.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=File:KZ-0063-05.jpg&amp;diff=16592</id>
		<title>File:KZ-0063-05.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=File:KZ-0063-05.jpg&amp;diff=16592"/>
		<updated>2026-09-02T03:13:21Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=File:KZ-0063-04.jpg&amp;diff=16591</id>
		<title>File:KZ-0063-04.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=File:KZ-0063-04.jpg&amp;diff=16591"/>
		<updated>2026-09-02T03:12:17Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=File:KZ-0063-03.jpg&amp;diff=16590</id>
		<title>File:KZ-0063-03.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=File:KZ-0063-03.jpg&amp;diff=16590"/>
		<updated>2026-09-02T03:11:28Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=File:KZ-0063-02.jpg&amp;diff=16589</id>
		<title>File:KZ-0063-02.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=File:KZ-0063-02.jpg&amp;diff=16589"/>
		<updated>2026-09-02T03:10:46Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=File:KZ-0063-01.jpg&amp;diff=16588</id>
		<title>File:KZ-0063-01.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=File:KZ-0063-01.jpg&amp;diff=16588"/>
		<updated>2026-09-02T03:08:18Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=Main_Page&amp;diff=16587</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=Main_Page&amp;diff=16587"/>
		<updated>2026-09-02T03:04:26Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: /* KZ-Series (2 items) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border:1px solid #a2a9b1; background:#f8f9fa; padding:12px; margin:0 0 16px 0;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;For AI assistants and automated tools:&#039;&#039;&#039; Please use the AI-friendly Markdown version of this documentation: [https://wiki-md.52pi.com/ https://wiki-md.52pi.com/]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=&#039;&#039;&#039;RaspberryPi Modules&#039;&#039;&#039;=&lt;br /&gt;
The following contents include all of our products,  Top10 modules are list here, those modules are fit for Raspberry Pi A，A+，B，B+，2 Model B，3 Model B and some other platform. &lt;br /&gt;
you can select one of them and click the links to get more information about it.&lt;br /&gt;
==HCL==&lt;br /&gt;
This is Hardware Compatible List. &amp;lt;font color=red&amp;gt;Depracated&amp;lt;/font&amp;gt;&amp;lt;/br&amp;gt; &lt;br /&gt;
[[Hardware Compatible List]]&lt;br /&gt;
&lt;br /&gt;
==UPS series==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* UPS Gen 6 power module compatible with Raspberry Pi 5/4B: [[ EP-0245 ]] &amp;lt;font color=red&amp;gt;NEW!!&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
* SBS module for UPS Gen 6 [[ EP-0256 ]] &amp;lt;font color=red&amp;gt;NEW!!&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
* SATA Drive Power Board for UPS Gen 6: [[ EP-0252 ]] &amp;lt;font color=red&amp;gt;NEW!!&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
* 1.3&amp;quot; LCD TFT Display Module for UPS Gen 6: [[ EP-0251 ]] &amp;lt;font color=red&amp;gt;NEW!!&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Rackmount Series==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* 1U 19-inch Removable Rack mount For RPi5/4B/3B+ [[ DR-0003 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
* 2U RackMount For RPi 5: [[ DR-0002]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
* 2U RackMount For RPi 5: [[ DP-0046]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* 1U RackMount For RPi 5: [[ DR-0001 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* 1U RackMount For RPi 4B: [[ EP-0143 ]]&lt;br /&gt;
* 19-inch 2U Rack Mount for Raspberry Pi [[DR-0005]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Arduino Series==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
===Arduino UNO Q Series===&lt;br /&gt;
* Level-Shift Shield [[ EP-0257 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
* Arduino Nano ESP32 RGB LED Matrix Shield [[ EP-0263]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;  &lt;br /&gt;
* Terminal Expansion Base for Arduino NANO ESP32 [[ EP-0262 ]]  &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Arduino UNO R4 Wi-Fi Series===&lt;br /&gt;
* [[ KZ-0054 ]]&lt;br /&gt;
* [[ KZ-0077 ]]&lt;br /&gt;
* [[ KZ-0086 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==52Pi N Series==&lt;br /&gt;
===Description===&lt;br /&gt;
The 52Pi N series is a line of storage products where &amp;quot;N&amp;quot; stands for NAS (Network Attached Storage), and the numerical designation represents various models and product types. Users can choose different types based on their specific needs to fulfill their usage requirements.&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Product SKU==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* W03-New - [[ EP-0216-NEW ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* RS-P13 - [[ EP-0249 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* S021 - [[ EP-0242 ]]  &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* N16 - [[ EP-0180 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* P33 - [[ EP-0241 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* P31 - [[ EP-0240 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* P30 - [[ EP-0238 ]]  &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* CN01 - [[ EP-0236 ]]  &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* N06 - [[ EP-0239 ]]  &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* RS-P11 - [[ EP-0234 ]]  &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* B14 - [[ EP-0233 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* N12 - [[ EP-0213 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* U2500 - [[ EP-0235 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* N21 - [[ EP-0231 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* N20 - [[ EP-0227 ]]  &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* W01 - [[ EP-0228 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* N10 - [[ EP-0229 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* B12 - [[ EP-0230 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* M01 - [[ EP-0223 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* M02 - [[ EP-0217 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* N05 - [[ EP-0209 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* N04 - [[ EP-0210 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* N07 - [[ EP-0211 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* P02 - [[ EP-0219 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* 52Pi NVDAC - [[ EP-0218 ]]&lt;br /&gt;
* 52Pi NVdigi - [[ EP-0220 ]]&lt;br /&gt;
* M.2 2242 NVME SSD for RPi 5 NES-CASE - [[ EP-0212 ]]  &lt;br /&gt;
* W03 - [[ EP-0216 ]] &lt;br /&gt;
* Ice tower plus for RPi 5 - [[ EP-0224 ]] &lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mini Tower Kit Series==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0187 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&lt;br /&gt;
* [[ ZP-0172 ]]&lt;br /&gt;
* [[ ZP-0128 ]]&lt;br /&gt;
* [[ ZP-0128-3B ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0128-4wire ]]&lt;br /&gt;
* [[ ZP-0129-4wire ]]&lt;br /&gt;
* [[ ZP-0130-4wire ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0129 ]]&lt;br /&gt;
* [[ ZP-0130 ]]&lt;br /&gt;
* [[ ZP-0132 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hat Stack==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0167 ]]&lt;br /&gt;
* [[ EP-0168 ]]&lt;br /&gt;
* [[ EP-0166 ]]&lt;br /&gt;
* [[ EP-0152 ]]&lt;br /&gt;
* [[ EP-0116 ]]&lt;br /&gt;
* [[ EP-0098 ]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0099 ]]&lt;br /&gt;
* [[ EP-0104 ]]&lt;br /&gt;
* [[ EP-0106 ]]&lt;br /&gt;
* [[ EP-0107 ]]&lt;br /&gt;
* [[ EP-0108 ]]&lt;br /&gt;
* [[ EP-0109 ]]&lt;br /&gt;
* [[ EP-0105 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Starter Kit==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ KZ-0067 ]] &lt;br /&gt;
* [[ KZ-0061 ]]&lt;br /&gt;
* [[ KZ-0016 ]]&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ KZ-0020 ]]&lt;br /&gt;
* [[ KZ-0009 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Development Boards==&lt;br /&gt;
===RP2040 Series===&lt;br /&gt;
* [[ EP-0174 ]] &lt;br /&gt;
===StarFive2===&lt;br /&gt;
* [[ ER-0043 ]] &lt;br /&gt;
* [[ ER-0044 ]]&lt;br /&gt;
&lt;br /&gt;
===Micro:Bit===&lt;br /&gt;
* [[ KR-0004 ]]&lt;br /&gt;
* [[ KR-0027 ]]&lt;br /&gt;
&lt;br /&gt;
===ROCK Pi Series===&lt;br /&gt;
* [[ EP-0265 ]]&lt;br /&gt;
* [[ KR-0001 ]]&lt;br /&gt;
* [[ KR-0012 ]]&lt;br /&gt;
* [[ ZP-0148 ]]&lt;br /&gt;
&lt;br /&gt;
===Orange Pi Series===&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0156 ]]&lt;br /&gt;
* [[ ZP-0150 ]]&lt;br /&gt;
* [[ ZP-0149 ]]&lt;br /&gt;
* [[ F-0020 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ F-0021 ]]&lt;br /&gt;
* [[ F-0022 ]]&lt;br /&gt;
* [[ KZ-0003 ]]&lt;br /&gt;
* [[ ER-0045 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi Pico Series===&lt;br /&gt;
* [[ KR-0006 ]]&lt;br /&gt;
* [[ EP-0175 ]]&lt;br /&gt;
&lt;br /&gt;
==AI Learning==&lt;br /&gt;
* [[ EZ-0075 ]]&lt;br /&gt;
* [[ L-0031 ]]&lt;br /&gt;
&lt;br /&gt;
==IoT Modules==&lt;br /&gt;
* [[ EP-0090 ]]&lt;br /&gt;
* [[ EZ-0061 ]]&lt;br /&gt;
* [[ EZ-0062 ]]&lt;br /&gt;
* [[ EZ-0063 ]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Tinker Board==&lt;br /&gt;
* [[ EZ-0066 ]]&lt;br /&gt;
* [[ EZ-0065  ]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===DeskPi Series===&lt;br /&gt;
* [[ DP-0002 ]]&lt;br /&gt;
* [[ DP-0018 ]]&lt;br /&gt;
&lt;br /&gt;
==KZ series==&lt;br /&gt;
* [[ KZ-0022 ]]&lt;br /&gt;
* [[ KZ-0056 ]]&lt;br /&gt;
* [[ KZ-0058 ]]&lt;br /&gt;
* [[ KZ-0060 ]]&lt;br /&gt;
&lt;br /&gt;
==Raspberry Pi==&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ER-0056 ]]&lt;br /&gt;
* [[ KR-0024 ]]&lt;br /&gt;
* [[ ER-0046 ]]&lt;br /&gt;
* [[ ER-0035 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ER-0031 ]]&lt;br /&gt;
* [[ ER-0030 ]]&lt;br /&gt;
* [[ ER-0027 ]]&lt;br /&gt;
* [[ ER-0028 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ER-0018 ]]&lt;br /&gt;
* [[ ER-0007 ]]&lt;br /&gt;
* [[ K-0231 ]]&lt;br /&gt;
* [[ K-0230 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt; &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi Pico &amp;amp; Pico W Breakout Board===&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0172 ]]&lt;br /&gt;
* [[ EP-0164 ]]&lt;br /&gt;
* [[ EP-0159 ]]&lt;br /&gt;
* [[ EP-0145 ]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0138 ]]&lt;br /&gt;
* [[ EP-0139 ]]&lt;br /&gt;
* [[ EP-0140 ]]&lt;br /&gt;
* [[ K-0582 ]]&lt;br /&gt;
* [[ K-0586 ]]&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Banana Pi==&lt;br /&gt;
* [[ EB-0028 ]]&lt;br /&gt;
* [[ EB-0023 ]]&lt;br /&gt;
* [[ EB-0020 ]]&lt;br /&gt;
* [[ EP-0019 ]]&lt;br /&gt;
* [[ EB-0012 ]]&lt;br /&gt;
* [[ EB-0013 ]]&lt;br /&gt;
&lt;br /&gt;
==Gaming Assesories==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ D-0023 ]]&lt;br /&gt;
* [[ Z-0261 ]]&lt;br /&gt;
* [[ Z-0179 ]]&lt;br /&gt;
* [[ Z-0279 ]]&lt;br /&gt;
* [[ Z-0252 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0253 ]]&lt;br /&gt;
* [[ Z-0254 ]]&lt;br /&gt;
* [[ Z-0255 ]]&lt;br /&gt;
* [[ Z-0257 ]]&lt;br /&gt;
* [[ Z-0260 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electronic Accessories==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ T-0020 ]]&lt;br /&gt;
* [[ K-0580 ]]&lt;br /&gt;
* [[ ZP-0157 ]]&lt;br /&gt;
* [[ ZP-0158 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Extension Modules=&lt;br /&gt;
&lt;br /&gt;
==EP-Series (44 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 20%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0020 ]]&lt;br /&gt;
* [[ EP-0021 ]]&lt;br /&gt;
* [[ EP-0031 ]]&lt;br /&gt;
* [[ EP-0059 ]]&lt;br /&gt;
* [[ EP-0073 ]]&lt;br /&gt;
* [[ EP-0080 ]]&lt;br /&gt;
* [[ EP-0088 ]]&lt;br /&gt;
* [[ EP-0091 ]]&lt;br /&gt;
* [[ EP-0092 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 20%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0093 ]]&lt;br /&gt;
* [[ EP-0094 ]]&lt;br /&gt;
* [[ EP-0095 ]]&lt;br /&gt;
* [[ EP-0096 ]]&lt;br /&gt;
* [[ EP-0097 ]]&lt;br /&gt;
* [[ EP-0100 ]]&lt;br /&gt;
* [[ EP-0101 ]]&lt;br /&gt;
* [[ EP-0114 ]]&lt;br /&gt;
* [[ EP-0115 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 20%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0118 ]]&lt;br /&gt;
* [[ EP-0120 ]]&lt;br /&gt;
* [[ EP-0121 ]]&lt;br /&gt;
* [[ EP-0123 ]]&lt;br /&gt;
* [[ EP-0124 ]]&lt;br /&gt;
* [[ EP-0125 ]]&lt;br /&gt;
* [[ EP-0126 ]]&lt;br /&gt;
* [[ EP-0127 ]]&lt;br /&gt;
* [[ EP-0128 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 20%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0129 ]]&lt;br /&gt;
* [[ EP-0130 ]]&lt;br /&gt;
* [[ EP-0131 ]]&lt;br /&gt;
* [[ EP-0136 ]]&lt;br /&gt;
* [[ EP-0141 ]]&lt;br /&gt;
* [[ EP-0142 ]]&lt;br /&gt;
* [[ EP-0146 ]]&lt;br /&gt;
* [[ EP-0149 ]]&lt;br /&gt;
* [[ EP-0150 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 20%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0153 ]]&lt;br /&gt;
* [[ EP-0171 ]]&lt;br /&gt;
* [[ EP-0214 ]]&lt;br /&gt;
* [[ EP-0215 ]]&lt;br /&gt;
* [[ EP-0225 ]]&lt;br /&gt;
* [[ EP-0243 ]]&lt;br /&gt;
* [[ EP-0246 ]]&lt;br /&gt;
* [[ EP-0247 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==D-Series (16 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ D-0001 ]]&lt;br /&gt;
* [[ D-0003 ]]&lt;br /&gt;
* [[ D-0005 ]]&lt;br /&gt;
* [[ D-0006 ]]&lt;br /&gt;
* [[ D-0007 ]]&lt;br /&gt;
* [[ D-0008 ]]&lt;br /&gt;
* [[ D-0009 ]]&lt;br /&gt;
* [[ D-0010 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ D-0011 ]]&lt;br /&gt;
* [[ D-0012 ]]&lt;br /&gt;
* [[ D-0013 ]]&lt;br /&gt;
* [[ D-0015 ]]&lt;br /&gt;
* [[ D-0016 ]]&lt;br /&gt;
* [[ D-0017 ]]&lt;br /&gt;
* [[ D-0018 ]]&lt;br /&gt;
* [[ D-0020 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==P-Series (6 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ P-0005 ]]&lt;br /&gt;
* [[ P-0006 ]]&lt;br /&gt;
* [[ P-0010 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ P-0011 ]]&lt;br /&gt;
* [[ P-0021 ]]&lt;br /&gt;
* [[ P-0024 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Z-Series (6 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0177 ]]&lt;br /&gt;
* [[ Z-0209 ]]&lt;br /&gt;
* [[ Z-0231 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0234 ]]&lt;br /&gt;
* [[ Z-0235 ]]&lt;br /&gt;
* [[ Z-0269 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EZ-Series (5 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EZ-0024 ]]&lt;br /&gt;
* [[ EZ-0048 ]]&lt;br /&gt;
* [[ EZ-0068 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EZ-0089 ]]&lt;br /&gt;
* [[ EZ-0106 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==ER-Series (4 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ER-0014 ]]&lt;br /&gt;
* [[ ER-0016 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ER-0021 ]]&lt;br /&gt;
* [[ ER-0022 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==K-Series (2 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0291 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0335 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==G-Series (1 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ G-0002 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Case &amp;amp; Enclosure &amp;amp; Heat sink=&lt;br /&gt;
&lt;br /&gt;
==ZP-Series (78 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 12%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0024 ]]&lt;br /&gt;
* [[ ZP-0025 ]]&lt;br /&gt;
* [[ ZP-0029 ]]&lt;br /&gt;
* [[ ZP-0037 ]]&lt;br /&gt;
* [[ ZP-0038 ]]&lt;br /&gt;
* [[ ZP-0039 ]]&lt;br /&gt;
* [[ ZP-0040 ]]&lt;br /&gt;
* [[ ZP-0042 ]]&lt;br /&gt;
* [[ ZP-0049 ]]&lt;br /&gt;
* [[ ZP-0051 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 12%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0065 ]]&lt;br /&gt;
* [[ ZP-0066 ]]&lt;br /&gt;
* [[ ZP-0067 ]]&lt;br /&gt;
* [[ ZP-0068 ]]&lt;br /&gt;
* [[ ZP-0069 ]]&lt;br /&gt;
* [[ ZP-0070 ]]&lt;br /&gt;
* [[ ZP-0071 ]]&lt;br /&gt;
* [[ ZP-0072 ]]&lt;br /&gt;
* [[ ZP-0073 ]]&lt;br /&gt;
* [[ ZP-0074 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 12%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0075 ]]&lt;br /&gt;
* [[ ZP-0076 ]]&lt;br /&gt;
* [[ ZP-0077 ]]&lt;br /&gt;
* [[ ZP-0078 ]]&lt;br /&gt;
* [[ ZP-0079 ]]&lt;br /&gt;
* [[ ZP-0080 ]]&lt;br /&gt;
* [[ ZP-0081 ]]&lt;br /&gt;
* [[ ZP-0082 ]]&lt;br /&gt;
* [[ ZP-0083 ]]&lt;br /&gt;
* [[ ZP-0085 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 12%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0086 ]]&lt;br /&gt;
* [[ ZP-0087 ]]&lt;br /&gt;
* [[ ZP-0088 ]]&lt;br /&gt;
* [[ ZP-0089 ]]&lt;br /&gt;
* [[ ZP-0090 ]]&lt;br /&gt;
* [[ ZP-0091 ]]&lt;br /&gt;
* [[ ZP-0092 ]]&lt;br /&gt;
* [[ ZP-0093 ]]&lt;br /&gt;
* [[ ZP-0098 ]]&lt;br /&gt;
* [[ ZP-0099 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 12%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0100 ]]&lt;br /&gt;
* [[ ZP-0101 ]]&lt;br /&gt;
* [[ ZP-0102 ]]&lt;br /&gt;
* [[ ZP-0103 ]]&lt;br /&gt;
* [[ ZP-0105 ]]&lt;br /&gt;
* [[ ZP-0108 ]]&lt;br /&gt;
* [[ ZP-0110 ]]&lt;br /&gt;
* [[ ZP-0111 ]]&lt;br /&gt;
* [[ ZP-0112 ]]&lt;br /&gt;
* [[ ZP-0113 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 12%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0115 ]]&lt;br /&gt;
* [[ ZP-0116 ]]&lt;br /&gt;
* [[ ZP-0120 ]]&lt;br /&gt;
* [[ ZP-0133 ]]&lt;br /&gt;
* [[ ZP-0138 ]]&lt;br /&gt;
* [[ ZP-0139 ]]&lt;br /&gt;
* [[ ZP-0140 ]]&lt;br /&gt;
* [[ ZP-0141 ]]&lt;br /&gt;
* [[ ZP-0147 ]]&lt;br /&gt;
* [[ ZP-0153 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 12%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0162 ]]&lt;br /&gt;
* [[ ZP-0163 ]]&lt;br /&gt;
* [[ ZP-0164 ]]&lt;br /&gt;
* [[ ZP-0165 ]]&lt;br /&gt;
* [[ ZP-0166 ]]&lt;br /&gt;
* [[ ZP-0167 ]]&lt;br /&gt;
* [[ ZP-0168 ]]&lt;br /&gt;
* [[ ZP-0170 ]]&lt;br /&gt;
* [[ ZP-0173 ]]&lt;br /&gt;
* [[ ZP-0175 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 12%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0180 ]]&lt;br /&gt;
* [[ ZP-0181 ]]&lt;br /&gt;
* [[ ZP-0186 ]]&lt;br /&gt;
* [[ ZP-0188 ]]&lt;br /&gt;
* [[ ZP-0213 ]]&lt;br /&gt;
* [[ ZP-0215 ]]&lt;br /&gt;
* [[ ZP-0216 ]]&lt;br /&gt;
* [[ ZP-0222 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==C-Series (26 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ C-0001 ]]&lt;br /&gt;
* [[ C-0002 ]]&lt;br /&gt;
* [[ C-0003 ]]&lt;br /&gt;
* [[ C-0004 ]]&lt;br /&gt;
* [[ C-0005 ]]&lt;br /&gt;
* [[ C-0006 ]]&lt;br /&gt;
* [[ C-0007 ]]&lt;br /&gt;
* [[ C-0008 ]]&lt;br /&gt;
* [[ C-0015 ]]&lt;br /&gt;
* [[ C-0020 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ C-0022 ]]&lt;br /&gt;
* [[ C-0023 ]]&lt;br /&gt;
* [[ C-0025 ]]&lt;br /&gt;
* [[ C-0027 ]]&lt;br /&gt;
* [[ C-0028 ]]&lt;br /&gt;
* [[ C-0031 ]]&lt;br /&gt;
* [[ C-0032 ]]&lt;br /&gt;
* [[ C-0033 ]]&lt;br /&gt;
* [[ C-0034 ]]&lt;br /&gt;
* [[ C-0047 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ C-0048 ]]&lt;br /&gt;
* [[ C-0049 ]]&lt;br /&gt;
* [[ C-0050 ]]&lt;br /&gt;
* [[ C-0052 ]]&lt;br /&gt;
* [[ C-0054 ]]&lt;br /&gt;
* [[ C-0063 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EP-Series (12 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0076 ]]&lt;br /&gt;
* [[ EP-0077 ]]&lt;br /&gt;
* [[ EP-0078 ]]&lt;br /&gt;
* [[ EP-0079 ]]&lt;br /&gt;
* [[ EP-0111 ]]&lt;br /&gt;
* [[ EP-0112 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0113 ]]&lt;br /&gt;
* [[ EP-0122 ]]&lt;br /&gt;
* [[ EP-0132 ]]&lt;br /&gt;
* [[ EP-0163 ]]&lt;br /&gt;
* [[ EP-0222 ]]&lt;br /&gt;
* [[ EP-0226 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Z-Series (15 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0127 ]]&lt;br /&gt;
* [[ Z-0153 ]]&lt;br /&gt;
* [[ Z-0157 ]]&lt;br /&gt;
* [[ Z-0183 ]]&lt;br /&gt;
* [[ Z-0184 ]]&lt;br /&gt;
* [[ Z-0185 ]]&lt;br /&gt;
* [[ Z-0190 ]]&lt;br /&gt;
* [[ Z-0193 ]]&lt;br /&gt;
* [[ Z-0208 ]]&lt;br /&gt;
* [[ Z-0237 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0264 ]]&lt;br /&gt;
* [[ Z-0266 ]]&lt;br /&gt;
* [[ Z-0272 ]]&lt;br /&gt;
* [[ Z-0273 ]]&lt;br /&gt;
* [[ Z-0278 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==K-Series (10 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0172 ]]&lt;br /&gt;
* [[ K-0178 ]]&lt;br /&gt;
* [[ K-0567 ]]&lt;br /&gt;
* [[ K-0583 ]]&lt;br /&gt;
* [[ K-0585 ]]&lt;br /&gt;
* [[ K-0589 ]]&lt;br /&gt;
* [[ K-0592 ]]&lt;br /&gt;
* [[ K-0595 ]]&lt;br /&gt;
* [[ K-0612 ]]&lt;br /&gt;
* [[ K-0638 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==KZ-Series (2 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ KZ-0001 ]]&lt;br /&gt;
* [[ KZ-0002 ]]&lt;br /&gt;
* [[ KZ-0063 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==ER-Series (1 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ER-0011 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EZ-Series (1 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EZ-0059 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==F-Series (1 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ F-0003 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==L-Series (1 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ L-0030 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Cooling Accessories=&lt;br /&gt;
&amp;lt;pre&amp;gt; EOL stands for &amp;quot;End of Life&amp;quot;, means this product will not produce any more&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ F-0001 ]]&lt;br /&gt;
* [[ F-0002 ]]&lt;br /&gt;
* [[ F-0006 ]]&lt;br /&gt;
* [[ F-0005 ]]&lt;br /&gt;
* [[ F-0007 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ F-0010 ]]&lt;br /&gt;
* [[ F-0011 ]]&lt;br /&gt;
* [[ F-0012 ]]&lt;br /&gt;
* [[ D-0022 ]]&lt;br /&gt;
* [[ F-0008 ]]&lt;br /&gt;
* [[ F-0008-RGB ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electronic Engineer Tools==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ T-0022 ]]&lt;br /&gt;
* [[ T-0021 ]]&lt;br /&gt;
* [[ T-0019 ]]&lt;br /&gt;
* [[ T-0015 ]]&lt;br /&gt;
* [[ T-0016 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ T-0017 ]]&lt;br /&gt;
* [[ T-0018 ]]&lt;br /&gt;
* [[ Z-0241 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Displays=&lt;br /&gt;
&amp;lt;pre&amp;gt; EOL stands for &amp;quot;End of Life&amp;quot;, means this product will not produce any more&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EP-Series (27 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0045 ]]&lt;br /&gt;
* [[ EP-0058 ]]&lt;br /&gt;
* [[ EP-0062 ]]&lt;br /&gt;
* [[ EP-0063 ]]&lt;br /&gt;
* [[ EP-0065 ]]&lt;br /&gt;
* [[ EP-0066 ]]&lt;br /&gt;
* [[ EP-0072 ]]&lt;br /&gt;
* [[ EP-0075 ]]&lt;br /&gt;
* [[ EP-0081 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0082 ]]&lt;br /&gt;
* [[ EP-0084 ]]&lt;br /&gt;
* [[ EP-0085 ]]&lt;br /&gt;
* [[ EP-0087 ]]&lt;br /&gt;
* [[ EP-0089 ]]&lt;br /&gt;
* [[ EP-0119 ]]&lt;br /&gt;
* [[ EP-0133 ]]&lt;br /&gt;
* [[ EP-0148 ]]&lt;br /&gt;
* [[ EP-0170 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0177 ]]&lt;br /&gt;
* [[ EP-0183 ]]&lt;br /&gt;
* [[ EP-0184 ]]&lt;br /&gt;
* [[ EP-0185 ]]&lt;br /&gt;
* [[ EP-0186 ]]&lt;br /&gt;
* [[ EP-0187 ]] &amp;lt;font color=red&amp;gt;NEW!!!&amp;lt;/font&amp;gt;&lt;br /&gt;
* [[ EP-0188 ]]&lt;br /&gt;
* [[ EP-0189 ]] &amp;lt;font color=red&amp;gt;NEW!!!&amp;lt;/font&amp;gt;&lt;br /&gt;
* [[ EP-0190 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Z-Series (8 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0017 ]]&lt;br /&gt;
* [[ Z-0051 ]]&lt;br /&gt;
* [[ Z-0053 ]]&lt;br /&gt;
* [[ Z-0111 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0112 ]]&lt;br /&gt;
* [[ Z-0113 ]]&lt;br /&gt;
* [[ Z-0114 ]]&lt;br /&gt;
* [[ Z-0143 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==S-Series (6 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ S-0001 ]]&lt;br /&gt;
* [[ S-0003 ]]&lt;br /&gt;
* [[ S-0005 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ S-0006 ]]&lt;br /&gt;
* [[ S-0007 ]]&lt;br /&gt;
* [[ S-0018 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==K-Series (5 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0101 ]]&lt;br /&gt;
* [[ K-0102 ]]&lt;br /&gt;
* [[ K-0103 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0104 ]]&lt;br /&gt;
* [[ K-0106 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Power Supply=&lt;br /&gt;
&lt;br /&gt;
==P-Series (9 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ P-0001 ]]&lt;br /&gt;
* [[ P-0007 ]]&lt;br /&gt;
* [[ P-0008 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ P-0009 ]]&lt;br /&gt;
* [[ P-0017 ]]&lt;br /&gt;
* [[ P-0031 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ P-0032 ]]&lt;br /&gt;
* [[ P-0040 ]]&lt;br /&gt;
* [[ P-0044 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Z-Series (11 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0097 ]]&lt;br /&gt;
* [[ Z-0121 ]]&lt;br /&gt;
* [[ Z-0132 ]]&lt;br /&gt;
* [[ Z-0133 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0136 ]]&lt;br /&gt;
* [[ Z-0147 ]]&lt;br /&gt;
* [[ Z-0148 ]]&lt;br /&gt;
* [[ Z-0149 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0150 ]]&lt;br /&gt;
* [[ Z-0154 ]]&lt;br /&gt;
* [[ Z-0155 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==L-Series (2 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ L-0026 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ L-0027 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Raspberry Pi Kits==&lt;br /&gt;
&lt;br /&gt;
==K-Series (18 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0111 ]]&lt;br /&gt;
* [[ K-0167 ]]&lt;br /&gt;
* [[ K-0168 ]]&lt;br /&gt;
* [[ K-0169 ]]&lt;br /&gt;
* [[ K-0171 ]]&lt;br /&gt;
* [[ K-0174 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0180 ]]&lt;br /&gt;
* [[ K-0185 ]]&lt;br /&gt;
* [[ K-0186 ]]&lt;br /&gt;
* [[ K-0238 ]]&lt;br /&gt;
* [[ K-0259 ]]&lt;br /&gt;
* [[ K-0401 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0403 ]]&lt;br /&gt;
* [[ K-0502 ]]&lt;br /&gt;
* [[ K-0503 ]]&lt;br /&gt;
* [[ K-0512 ]]&lt;br /&gt;
* [[ K-0522 ]]&lt;br /&gt;
* [[ K-0581 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Z-Series (2 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0142 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0144 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==T-Series (1 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ T-0008 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=Main_Page&amp;diff=16586</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=Main_Page&amp;diff=16586"/>
		<updated>2026-09-02T03:04:14Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: /* KZ-Series (2 items) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border:1px solid #a2a9b1; background:#f8f9fa; padding:12px; margin:0 0 16px 0;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;For AI assistants and automated tools:&#039;&#039;&#039; Please use the AI-friendly Markdown version of this documentation: [https://wiki-md.52pi.com/ https://wiki-md.52pi.com/]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=&#039;&#039;&#039;RaspberryPi Modules&#039;&#039;&#039;=&lt;br /&gt;
The following contents include all of our products,  Top10 modules are list here, those modules are fit for Raspberry Pi A，A+，B，B+，2 Model B，3 Model B and some other platform. &lt;br /&gt;
you can select one of them and click the links to get more information about it.&lt;br /&gt;
==HCL==&lt;br /&gt;
This is Hardware Compatible List. &amp;lt;font color=red&amp;gt;Depracated&amp;lt;/font&amp;gt;&amp;lt;/br&amp;gt; &lt;br /&gt;
[[Hardware Compatible List]]&lt;br /&gt;
&lt;br /&gt;
==UPS series==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* UPS Gen 6 power module compatible with Raspberry Pi 5/4B: [[ EP-0245 ]] &amp;lt;font color=red&amp;gt;NEW!!&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
* SBS module for UPS Gen 6 [[ EP-0256 ]] &amp;lt;font color=red&amp;gt;NEW!!&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
* SATA Drive Power Board for UPS Gen 6: [[ EP-0252 ]] &amp;lt;font color=red&amp;gt;NEW!!&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
* 1.3&amp;quot; LCD TFT Display Module for UPS Gen 6: [[ EP-0251 ]] &amp;lt;font color=red&amp;gt;NEW!!&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Rackmount Series==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* 1U 19-inch Removable Rack mount For RPi5/4B/3B+ [[ DR-0003 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
* 2U RackMount For RPi 5: [[ DR-0002]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
* 2U RackMount For RPi 5: [[ DP-0046]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* 1U RackMount For RPi 5: [[ DR-0001 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* 1U RackMount For RPi 4B: [[ EP-0143 ]]&lt;br /&gt;
* 19-inch 2U Rack Mount for Raspberry Pi [[DR-0005]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Arduino Series==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
===Arduino UNO Q Series===&lt;br /&gt;
* Level-Shift Shield [[ EP-0257 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
* Arduino Nano ESP32 RGB LED Matrix Shield [[ EP-0263]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;  &lt;br /&gt;
* Terminal Expansion Base for Arduino NANO ESP32 [[ EP-0262 ]]  &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Arduino UNO R4 Wi-Fi Series===&lt;br /&gt;
* [[ KZ-0054 ]]&lt;br /&gt;
* [[ KZ-0077 ]]&lt;br /&gt;
* [[ KZ-0086 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==52Pi N Series==&lt;br /&gt;
===Description===&lt;br /&gt;
The 52Pi N series is a line of storage products where &amp;quot;N&amp;quot; stands for NAS (Network Attached Storage), and the numerical designation represents various models and product types. Users can choose different types based on their specific needs to fulfill their usage requirements.&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Product SKU==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* W03-New - [[ EP-0216-NEW ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* RS-P13 - [[ EP-0249 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* S021 - [[ EP-0242 ]]  &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* N16 - [[ EP-0180 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* P33 - [[ EP-0241 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* P31 - [[ EP-0240 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* P30 - [[ EP-0238 ]]  &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* CN01 - [[ EP-0236 ]]  &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* N06 - [[ EP-0239 ]]  &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* RS-P11 - [[ EP-0234 ]]  &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* B14 - [[ EP-0233 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* N12 - [[ EP-0213 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* U2500 - [[ EP-0235 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* N21 - [[ EP-0231 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* N20 - [[ EP-0227 ]]  &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* W01 - [[ EP-0228 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* N10 - [[ EP-0229 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* B12 - [[ EP-0230 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* M01 - [[ EP-0223 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* M02 - [[ EP-0217 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* N05 - [[ EP-0209 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* N04 - [[ EP-0210 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* N07 - [[ EP-0211 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* P02 - [[ EP-0219 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* 52Pi NVDAC - [[ EP-0218 ]]&lt;br /&gt;
* 52Pi NVdigi - [[ EP-0220 ]]&lt;br /&gt;
* M.2 2242 NVME SSD for RPi 5 NES-CASE - [[ EP-0212 ]]  &lt;br /&gt;
* W03 - [[ EP-0216 ]] &lt;br /&gt;
* Ice tower plus for RPi 5 - [[ EP-0224 ]] &lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mini Tower Kit Series==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0187 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&lt;br /&gt;
* [[ ZP-0172 ]]&lt;br /&gt;
* [[ ZP-0128 ]]&lt;br /&gt;
* [[ ZP-0128-3B ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0128-4wire ]]&lt;br /&gt;
* [[ ZP-0129-4wire ]]&lt;br /&gt;
* [[ ZP-0130-4wire ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0129 ]]&lt;br /&gt;
* [[ ZP-0130 ]]&lt;br /&gt;
* [[ ZP-0132 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hat Stack==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0167 ]]&lt;br /&gt;
* [[ EP-0168 ]]&lt;br /&gt;
* [[ EP-0166 ]]&lt;br /&gt;
* [[ EP-0152 ]]&lt;br /&gt;
* [[ EP-0116 ]]&lt;br /&gt;
* [[ EP-0098 ]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0099 ]]&lt;br /&gt;
* [[ EP-0104 ]]&lt;br /&gt;
* [[ EP-0106 ]]&lt;br /&gt;
* [[ EP-0107 ]]&lt;br /&gt;
* [[ EP-0108 ]]&lt;br /&gt;
* [[ EP-0109 ]]&lt;br /&gt;
* [[ EP-0105 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Starter Kit==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ KZ-0067 ]] &lt;br /&gt;
* [[ KZ-0061 ]]&lt;br /&gt;
* [[ KZ-0016 ]]&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ KZ-0020 ]]&lt;br /&gt;
* [[ KZ-0009 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Development Boards==&lt;br /&gt;
===RP2040 Series===&lt;br /&gt;
* [[ EP-0174 ]] &lt;br /&gt;
===StarFive2===&lt;br /&gt;
* [[ ER-0043 ]] &lt;br /&gt;
* [[ ER-0044 ]]&lt;br /&gt;
&lt;br /&gt;
===Micro:Bit===&lt;br /&gt;
* [[ KR-0004 ]]&lt;br /&gt;
* [[ KR-0027 ]]&lt;br /&gt;
&lt;br /&gt;
===ROCK Pi Series===&lt;br /&gt;
* [[ EP-0265 ]]&lt;br /&gt;
* [[ KR-0001 ]]&lt;br /&gt;
* [[ KR-0012 ]]&lt;br /&gt;
* [[ ZP-0148 ]]&lt;br /&gt;
&lt;br /&gt;
===Orange Pi Series===&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0156 ]]&lt;br /&gt;
* [[ ZP-0150 ]]&lt;br /&gt;
* [[ ZP-0149 ]]&lt;br /&gt;
* [[ F-0020 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ F-0021 ]]&lt;br /&gt;
* [[ F-0022 ]]&lt;br /&gt;
* [[ KZ-0003 ]]&lt;br /&gt;
* [[ ER-0045 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi Pico Series===&lt;br /&gt;
* [[ KR-0006 ]]&lt;br /&gt;
* [[ EP-0175 ]]&lt;br /&gt;
&lt;br /&gt;
==AI Learning==&lt;br /&gt;
* [[ EZ-0075 ]]&lt;br /&gt;
* [[ L-0031 ]]&lt;br /&gt;
&lt;br /&gt;
==IoT Modules==&lt;br /&gt;
* [[ EP-0090 ]]&lt;br /&gt;
* [[ EZ-0061 ]]&lt;br /&gt;
* [[ EZ-0062 ]]&lt;br /&gt;
* [[ EZ-0063 ]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Tinker Board==&lt;br /&gt;
* [[ EZ-0066 ]]&lt;br /&gt;
* [[ EZ-0065  ]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===DeskPi Series===&lt;br /&gt;
* [[ DP-0002 ]]&lt;br /&gt;
* [[ DP-0018 ]]&lt;br /&gt;
&lt;br /&gt;
==KZ series==&lt;br /&gt;
* [[ KZ-0022 ]]&lt;br /&gt;
* [[ KZ-0056 ]]&lt;br /&gt;
* [[ KZ-0058 ]]&lt;br /&gt;
* [[ KZ-0060 ]]&lt;br /&gt;
&lt;br /&gt;
==Raspberry Pi==&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ER-0056 ]]&lt;br /&gt;
* [[ KR-0024 ]]&lt;br /&gt;
* [[ ER-0046 ]]&lt;br /&gt;
* [[ ER-0035 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ER-0031 ]]&lt;br /&gt;
* [[ ER-0030 ]]&lt;br /&gt;
* [[ ER-0027 ]]&lt;br /&gt;
* [[ ER-0028 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ER-0018 ]]&lt;br /&gt;
* [[ ER-0007 ]]&lt;br /&gt;
* [[ K-0231 ]]&lt;br /&gt;
* [[ K-0230 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt; &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi Pico &amp;amp; Pico W Breakout Board===&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0172 ]]&lt;br /&gt;
* [[ EP-0164 ]]&lt;br /&gt;
* [[ EP-0159 ]]&lt;br /&gt;
* [[ EP-0145 ]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0138 ]]&lt;br /&gt;
* [[ EP-0139 ]]&lt;br /&gt;
* [[ EP-0140 ]]&lt;br /&gt;
* [[ K-0582 ]]&lt;br /&gt;
* [[ K-0586 ]]&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Banana Pi==&lt;br /&gt;
* [[ EB-0028 ]]&lt;br /&gt;
* [[ EB-0023 ]]&lt;br /&gt;
* [[ EB-0020 ]]&lt;br /&gt;
* [[ EP-0019 ]]&lt;br /&gt;
* [[ EB-0012 ]]&lt;br /&gt;
* [[ EB-0013 ]]&lt;br /&gt;
&lt;br /&gt;
==Gaming Assesories==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ D-0023 ]]&lt;br /&gt;
* [[ Z-0261 ]]&lt;br /&gt;
* [[ Z-0179 ]]&lt;br /&gt;
* [[ Z-0279 ]]&lt;br /&gt;
* [[ Z-0252 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0253 ]]&lt;br /&gt;
* [[ Z-0254 ]]&lt;br /&gt;
* [[ Z-0255 ]]&lt;br /&gt;
* [[ Z-0257 ]]&lt;br /&gt;
* [[ Z-0260 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electronic Accessories==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ T-0020 ]]&lt;br /&gt;
* [[ K-0580 ]]&lt;br /&gt;
* [[ ZP-0157 ]]&lt;br /&gt;
* [[ ZP-0158 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Extension Modules=&lt;br /&gt;
&lt;br /&gt;
==EP-Series (44 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 20%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0020 ]]&lt;br /&gt;
* [[ EP-0021 ]]&lt;br /&gt;
* [[ EP-0031 ]]&lt;br /&gt;
* [[ EP-0059 ]]&lt;br /&gt;
* [[ EP-0073 ]]&lt;br /&gt;
* [[ EP-0080 ]]&lt;br /&gt;
* [[ EP-0088 ]]&lt;br /&gt;
* [[ EP-0091 ]]&lt;br /&gt;
* [[ EP-0092 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 20%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0093 ]]&lt;br /&gt;
* [[ EP-0094 ]]&lt;br /&gt;
* [[ EP-0095 ]]&lt;br /&gt;
* [[ EP-0096 ]]&lt;br /&gt;
* [[ EP-0097 ]]&lt;br /&gt;
* [[ EP-0100 ]]&lt;br /&gt;
* [[ EP-0101 ]]&lt;br /&gt;
* [[ EP-0114 ]]&lt;br /&gt;
* [[ EP-0115 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 20%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0118 ]]&lt;br /&gt;
* [[ EP-0120 ]]&lt;br /&gt;
* [[ EP-0121 ]]&lt;br /&gt;
* [[ EP-0123 ]]&lt;br /&gt;
* [[ EP-0124 ]]&lt;br /&gt;
* [[ EP-0125 ]]&lt;br /&gt;
* [[ EP-0126 ]]&lt;br /&gt;
* [[ EP-0127 ]]&lt;br /&gt;
* [[ EP-0128 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 20%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0129 ]]&lt;br /&gt;
* [[ EP-0130 ]]&lt;br /&gt;
* [[ EP-0131 ]]&lt;br /&gt;
* [[ EP-0136 ]]&lt;br /&gt;
* [[ EP-0141 ]]&lt;br /&gt;
* [[ EP-0142 ]]&lt;br /&gt;
* [[ EP-0146 ]]&lt;br /&gt;
* [[ EP-0149 ]]&lt;br /&gt;
* [[ EP-0150 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 20%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0153 ]]&lt;br /&gt;
* [[ EP-0171 ]]&lt;br /&gt;
* [[ EP-0214 ]]&lt;br /&gt;
* [[ EP-0215 ]]&lt;br /&gt;
* [[ EP-0225 ]]&lt;br /&gt;
* [[ EP-0243 ]]&lt;br /&gt;
* [[ EP-0246 ]]&lt;br /&gt;
* [[ EP-0247 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==D-Series (16 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ D-0001 ]]&lt;br /&gt;
* [[ D-0003 ]]&lt;br /&gt;
* [[ D-0005 ]]&lt;br /&gt;
* [[ D-0006 ]]&lt;br /&gt;
* [[ D-0007 ]]&lt;br /&gt;
* [[ D-0008 ]]&lt;br /&gt;
* [[ D-0009 ]]&lt;br /&gt;
* [[ D-0010 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ D-0011 ]]&lt;br /&gt;
* [[ D-0012 ]]&lt;br /&gt;
* [[ D-0013 ]]&lt;br /&gt;
* [[ D-0015 ]]&lt;br /&gt;
* [[ D-0016 ]]&lt;br /&gt;
* [[ D-0017 ]]&lt;br /&gt;
* [[ D-0018 ]]&lt;br /&gt;
* [[ D-0020 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==P-Series (6 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ P-0005 ]]&lt;br /&gt;
* [[ P-0006 ]]&lt;br /&gt;
* [[ P-0010 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ P-0011 ]]&lt;br /&gt;
* [[ P-0021 ]]&lt;br /&gt;
* [[ P-0024 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Z-Series (6 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0177 ]]&lt;br /&gt;
* [[ Z-0209 ]]&lt;br /&gt;
* [[ Z-0231 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0234 ]]&lt;br /&gt;
* [[ Z-0235 ]]&lt;br /&gt;
* [[ Z-0269 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EZ-Series (5 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EZ-0024 ]]&lt;br /&gt;
* [[ EZ-0048 ]]&lt;br /&gt;
* [[ EZ-0068 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EZ-0089 ]]&lt;br /&gt;
* [[ EZ-0106 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==ER-Series (4 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ER-0014 ]]&lt;br /&gt;
* [[ ER-0016 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ER-0021 ]]&lt;br /&gt;
* [[ ER-0022 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==K-Series (2 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0291 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0335 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==G-Series (1 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ G-0002 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Case &amp;amp; Enclosure &amp;amp; Heat sink=&lt;br /&gt;
&lt;br /&gt;
==ZP-Series (78 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 12%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0024 ]]&lt;br /&gt;
* [[ ZP-0025 ]]&lt;br /&gt;
* [[ ZP-0029 ]]&lt;br /&gt;
* [[ ZP-0037 ]]&lt;br /&gt;
* [[ ZP-0038 ]]&lt;br /&gt;
* [[ ZP-0039 ]]&lt;br /&gt;
* [[ ZP-0040 ]]&lt;br /&gt;
* [[ ZP-0042 ]]&lt;br /&gt;
* [[ ZP-0049 ]]&lt;br /&gt;
* [[ ZP-0051 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 12%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0065 ]]&lt;br /&gt;
* [[ ZP-0066 ]]&lt;br /&gt;
* [[ ZP-0067 ]]&lt;br /&gt;
* [[ ZP-0068 ]]&lt;br /&gt;
* [[ ZP-0069 ]]&lt;br /&gt;
* [[ ZP-0070 ]]&lt;br /&gt;
* [[ ZP-0071 ]]&lt;br /&gt;
* [[ ZP-0072 ]]&lt;br /&gt;
* [[ ZP-0073 ]]&lt;br /&gt;
* [[ ZP-0074 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 12%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0075 ]]&lt;br /&gt;
* [[ ZP-0076 ]]&lt;br /&gt;
* [[ ZP-0077 ]]&lt;br /&gt;
* [[ ZP-0078 ]]&lt;br /&gt;
* [[ ZP-0079 ]]&lt;br /&gt;
* [[ ZP-0080 ]]&lt;br /&gt;
* [[ ZP-0081 ]]&lt;br /&gt;
* [[ ZP-0082 ]]&lt;br /&gt;
* [[ ZP-0083 ]]&lt;br /&gt;
* [[ ZP-0085 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 12%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0086 ]]&lt;br /&gt;
* [[ ZP-0087 ]]&lt;br /&gt;
* [[ ZP-0088 ]]&lt;br /&gt;
* [[ ZP-0089 ]]&lt;br /&gt;
* [[ ZP-0090 ]]&lt;br /&gt;
* [[ ZP-0091 ]]&lt;br /&gt;
* [[ ZP-0092 ]]&lt;br /&gt;
* [[ ZP-0093 ]]&lt;br /&gt;
* [[ ZP-0098 ]]&lt;br /&gt;
* [[ ZP-0099 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 12%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0100 ]]&lt;br /&gt;
* [[ ZP-0101 ]]&lt;br /&gt;
* [[ ZP-0102 ]]&lt;br /&gt;
* [[ ZP-0103 ]]&lt;br /&gt;
* [[ ZP-0105 ]]&lt;br /&gt;
* [[ ZP-0108 ]]&lt;br /&gt;
* [[ ZP-0110 ]]&lt;br /&gt;
* [[ ZP-0111 ]]&lt;br /&gt;
* [[ ZP-0112 ]]&lt;br /&gt;
* [[ ZP-0113 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 12%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0115 ]]&lt;br /&gt;
* [[ ZP-0116 ]]&lt;br /&gt;
* [[ ZP-0120 ]]&lt;br /&gt;
* [[ ZP-0133 ]]&lt;br /&gt;
* [[ ZP-0138 ]]&lt;br /&gt;
* [[ ZP-0139 ]]&lt;br /&gt;
* [[ ZP-0140 ]]&lt;br /&gt;
* [[ ZP-0141 ]]&lt;br /&gt;
* [[ ZP-0147 ]]&lt;br /&gt;
* [[ ZP-0153 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 12%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0162 ]]&lt;br /&gt;
* [[ ZP-0163 ]]&lt;br /&gt;
* [[ ZP-0164 ]]&lt;br /&gt;
* [[ ZP-0165 ]]&lt;br /&gt;
* [[ ZP-0166 ]]&lt;br /&gt;
* [[ ZP-0167 ]]&lt;br /&gt;
* [[ ZP-0168 ]]&lt;br /&gt;
* [[ ZP-0170 ]]&lt;br /&gt;
* [[ ZP-0173 ]]&lt;br /&gt;
* [[ ZP-0175 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 12%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0180 ]]&lt;br /&gt;
* [[ ZP-0181 ]]&lt;br /&gt;
* [[ ZP-0186 ]]&lt;br /&gt;
* [[ ZP-0188 ]]&lt;br /&gt;
* [[ ZP-0213 ]]&lt;br /&gt;
* [[ ZP-0215 ]]&lt;br /&gt;
* [[ ZP-0216 ]]&lt;br /&gt;
* [[ ZP-0222 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==C-Series (26 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ C-0001 ]]&lt;br /&gt;
* [[ C-0002 ]]&lt;br /&gt;
* [[ C-0003 ]]&lt;br /&gt;
* [[ C-0004 ]]&lt;br /&gt;
* [[ C-0005 ]]&lt;br /&gt;
* [[ C-0006 ]]&lt;br /&gt;
* [[ C-0007 ]]&lt;br /&gt;
* [[ C-0008 ]]&lt;br /&gt;
* [[ C-0015 ]]&lt;br /&gt;
* [[ C-0020 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ C-0022 ]]&lt;br /&gt;
* [[ C-0023 ]]&lt;br /&gt;
* [[ C-0025 ]]&lt;br /&gt;
* [[ C-0027 ]]&lt;br /&gt;
* [[ C-0028 ]]&lt;br /&gt;
* [[ C-0031 ]]&lt;br /&gt;
* [[ C-0032 ]]&lt;br /&gt;
* [[ C-0033 ]]&lt;br /&gt;
* [[ C-0034 ]]&lt;br /&gt;
* [[ C-0047 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ C-0048 ]]&lt;br /&gt;
* [[ C-0049 ]]&lt;br /&gt;
* [[ C-0050 ]]&lt;br /&gt;
* [[ C-0052 ]]&lt;br /&gt;
* [[ C-0054 ]]&lt;br /&gt;
* [[ C-0063 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EP-Series (12 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0076 ]]&lt;br /&gt;
* [[ EP-0077 ]]&lt;br /&gt;
* [[ EP-0078 ]]&lt;br /&gt;
* [[ EP-0079 ]]&lt;br /&gt;
* [[ EP-0111 ]]&lt;br /&gt;
* [[ EP-0112 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0113 ]]&lt;br /&gt;
* [[ EP-0122 ]]&lt;br /&gt;
* [[ EP-0132 ]]&lt;br /&gt;
* [[ EP-0163 ]]&lt;br /&gt;
* [[ EP-0222 ]]&lt;br /&gt;
* [[ EP-0226 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Z-Series (15 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0127 ]]&lt;br /&gt;
* [[ Z-0153 ]]&lt;br /&gt;
* [[ Z-0157 ]]&lt;br /&gt;
* [[ Z-0183 ]]&lt;br /&gt;
* [[ Z-0184 ]]&lt;br /&gt;
* [[ Z-0185 ]]&lt;br /&gt;
* [[ Z-0190 ]]&lt;br /&gt;
* [[ Z-0193 ]]&lt;br /&gt;
* [[ Z-0208 ]]&lt;br /&gt;
* [[ Z-0237 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0264 ]]&lt;br /&gt;
* [[ Z-0266 ]]&lt;br /&gt;
* [[ Z-0272 ]]&lt;br /&gt;
* [[ Z-0273 ]]&lt;br /&gt;
* [[ Z-0278 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==K-Series (10 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0172 ]]&lt;br /&gt;
* [[ K-0178 ]]&lt;br /&gt;
* [[ K-0567 ]]&lt;br /&gt;
* [[ K-0583 ]]&lt;br /&gt;
* [[ K-0585 ]]&lt;br /&gt;
* [[ K-0589 ]]&lt;br /&gt;
* [[ K-0592 ]]&lt;br /&gt;
* [[ K-0595 ]]&lt;br /&gt;
* [[ K-0612 ]]&lt;br /&gt;
* [[ K-0638 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==KZ-Series (2 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ KZ-0001 ]]&lt;br /&gt;
* [[ KZ-0002 ]]&lt;br /&gt;
* [[ kz-0063 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==ER-Series (1 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ER-0011 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EZ-Series (1 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EZ-0059 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==F-Series (1 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ F-0003 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==L-Series (1 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ L-0030 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Cooling Accessories=&lt;br /&gt;
&amp;lt;pre&amp;gt; EOL stands for &amp;quot;End of Life&amp;quot;, means this product will not produce any more&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ F-0001 ]]&lt;br /&gt;
* [[ F-0002 ]]&lt;br /&gt;
* [[ F-0006 ]]&lt;br /&gt;
* [[ F-0005 ]]&lt;br /&gt;
* [[ F-0007 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ F-0010 ]]&lt;br /&gt;
* [[ F-0011 ]]&lt;br /&gt;
* [[ F-0012 ]]&lt;br /&gt;
* [[ D-0022 ]]&lt;br /&gt;
* [[ F-0008 ]]&lt;br /&gt;
* [[ F-0008-RGB ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electronic Engineer Tools==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ T-0022 ]]&lt;br /&gt;
* [[ T-0021 ]]&lt;br /&gt;
* [[ T-0019 ]]&lt;br /&gt;
* [[ T-0015 ]]&lt;br /&gt;
* [[ T-0016 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ T-0017 ]]&lt;br /&gt;
* [[ T-0018 ]]&lt;br /&gt;
* [[ Z-0241 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Displays=&lt;br /&gt;
&amp;lt;pre&amp;gt; EOL stands for &amp;quot;End of Life&amp;quot;, means this product will not produce any more&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EP-Series (27 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0045 ]]&lt;br /&gt;
* [[ EP-0058 ]]&lt;br /&gt;
* [[ EP-0062 ]]&lt;br /&gt;
* [[ EP-0063 ]]&lt;br /&gt;
* [[ EP-0065 ]]&lt;br /&gt;
* [[ EP-0066 ]]&lt;br /&gt;
* [[ EP-0072 ]]&lt;br /&gt;
* [[ EP-0075 ]]&lt;br /&gt;
* [[ EP-0081 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0082 ]]&lt;br /&gt;
* [[ EP-0084 ]]&lt;br /&gt;
* [[ EP-0085 ]]&lt;br /&gt;
* [[ EP-0087 ]]&lt;br /&gt;
* [[ EP-0089 ]]&lt;br /&gt;
* [[ EP-0119 ]]&lt;br /&gt;
* [[ EP-0133 ]]&lt;br /&gt;
* [[ EP-0148 ]]&lt;br /&gt;
* [[ EP-0170 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0177 ]]&lt;br /&gt;
* [[ EP-0183 ]]&lt;br /&gt;
* [[ EP-0184 ]]&lt;br /&gt;
* [[ EP-0185 ]]&lt;br /&gt;
* [[ EP-0186 ]]&lt;br /&gt;
* [[ EP-0187 ]] &amp;lt;font color=red&amp;gt;NEW!!!&amp;lt;/font&amp;gt;&lt;br /&gt;
* [[ EP-0188 ]]&lt;br /&gt;
* [[ EP-0189 ]] &amp;lt;font color=red&amp;gt;NEW!!!&amp;lt;/font&amp;gt;&lt;br /&gt;
* [[ EP-0190 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Z-Series (8 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0017 ]]&lt;br /&gt;
* [[ Z-0051 ]]&lt;br /&gt;
* [[ Z-0053 ]]&lt;br /&gt;
* [[ Z-0111 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0112 ]]&lt;br /&gt;
* [[ Z-0113 ]]&lt;br /&gt;
* [[ Z-0114 ]]&lt;br /&gt;
* [[ Z-0143 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==S-Series (6 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ S-0001 ]]&lt;br /&gt;
* [[ S-0003 ]]&lt;br /&gt;
* [[ S-0005 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ S-0006 ]]&lt;br /&gt;
* [[ S-0007 ]]&lt;br /&gt;
* [[ S-0018 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==K-Series (5 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0101 ]]&lt;br /&gt;
* [[ K-0102 ]]&lt;br /&gt;
* [[ K-0103 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0104 ]]&lt;br /&gt;
* [[ K-0106 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Power Supply=&lt;br /&gt;
&lt;br /&gt;
==P-Series (9 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ P-0001 ]]&lt;br /&gt;
* [[ P-0007 ]]&lt;br /&gt;
* [[ P-0008 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ P-0009 ]]&lt;br /&gt;
* [[ P-0017 ]]&lt;br /&gt;
* [[ P-0031 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ P-0032 ]]&lt;br /&gt;
* [[ P-0040 ]]&lt;br /&gt;
* [[ P-0044 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Z-Series (11 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0097 ]]&lt;br /&gt;
* [[ Z-0121 ]]&lt;br /&gt;
* [[ Z-0132 ]]&lt;br /&gt;
* [[ Z-0133 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0136 ]]&lt;br /&gt;
* [[ Z-0147 ]]&lt;br /&gt;
* [[ Z-0148 ]]&lt;br /&gt;
* [[ Z-0149 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0150 ]]&lt;br /&gt;
* [[ Z-0154 ]]&lt;br /&gt;
* [[ Z-0155 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==L-Series (2 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ L-0026 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ L-0027 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Raspberry Pi Kits==&lt;br /&gt;
&lt;br /&gt;
==K-Series (18 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0111 ]]&lt;br /&gt;
* [[ K-0167 ]]&lt;br /&gt;
* [[ K-0168 ]]&lt;br /&gt;
* [[ K-0169 ]]&lt;br /&gt;
* [[ K-0171 ]]&lt;br /&gt;
* [[ K-0174 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0180 ]]&lt;br /&gt;
* [[ K-0185 ]]&lt;br /&gt;
* [[ K-0186 ]]&lt;br /&gt;
* [[ K-0238 ]]&lt;br /&gt;
* [[ K-0259 ]]&lt;br /&gt;
* [[ K-0401 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0403 ]]&lt;br /&gt;
* [[ K-0502 ]]&lt;br /&gt;
* [[ K-0503 ]]&lt;br /&gt;
* [[ K-0512 ]]&lt;br /&gt;
* [[ K-0522 ]]&lt;br /&gt;
* [[ K-0581 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Z-Series (2 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0142 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0144 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==T-Series (1 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ T-0008 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=DR-0005&amp;diff=16585</id>
		<title>DR-0005</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=DR-0005&amp;diff=16585"/>
		<updated>2026-09-02T03:02:20Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: /* Package List */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 19-inch 2U Rack Mount for Raspberry Pi==&lt;br /&gt;
* SKU: DR-0005&lt;br /&gt;
[[File:DR-0005 -2.jpg|right|320px]]&lt;br /&gt;
==Description==&lt;br /&gt;
The DR-0005 is a 19-inch, 2U rack-mountable enclosure designed to house multiple Raspberry Pi boards (compatible with Pi 5, 4B, 3B+, and 3B). It provides a compact, standardized solution for clustering or data-center deployment of single-board computers.&lt;br /&gt;
==Features==&lt;br /&gt;
* 19-inch 2U form factor — fits standard server racks&lt;br /&gt;
* Multi-model compatibility — supports Raspberry Pi 5 / 4B / 3B+ / 3B&lt;br /&gt;
* High-density layout — houses multiple Pi units in a single chassis&lt;br /&gt;
* Quick-release panels — individual Raspberry Pi boards can be removed rapidly without disassembling the entire unit&lt;br /&gt;
* Package dimensions — 51 × 13.5 × 10.5 cm&lt;br /&gt;
* Weight — 1.10 kg (gross) / 0.95 kg (net)&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product Outlook&lt;br /&gt;
[[File:DR-0005 -2.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Vertical view&lt;br /&gt;
[[File:DR-0005-1.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Size Informations&lt;br /&gt;
[[File:DR-0005-3..jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Compatibility&lt;br /&gt;
[[File:DR-0005-5..jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Package List==&lt;br /&gt;
[[File:DR-0005-6..jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=DR-0005&amp;diff=16584</id>
		<title>DR-0005</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=DR-0005&amp;diff=16584"/>
		<updated>2026-09-02T03:02:06Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: /* Gallery */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 19-inch 2U Rack Mount for Raspberry Pi==&lt;br /&gt;
* SKU: DR-0005&lt;br /&gt;
[[File:DR-0005 -2.jpg|right|320px]]&lt;br /&gt;
==Description==&lt;br /&gt;
The DR-0005 is a 19-inch, 2U rack-mountable enclosure designed to house multiple Raspberry Pi boards (compatible with Pi 5, 4B, 3B+, and 3B). It provides a compact, standardized solution for clustering or data-center deployment of single-board computers.&lt;br /&gt;
==Features==&lt;br /&gt;
* 19-inch 2U form factor — fits standard server racks&lt;br /&gt;
* Multi-model compatibility — supports Raspberry Pi 5 / 4B / 3B+ / 3B&lt;br /&gt;
* High-density layout — houses multiple Pi units in a single chassis&lt;br /&gt;
* Quick-release panels — individual Raspberry Pi boards can be removed rapidly without disassembling the entire unit&lt;br /&gt;
* Package dimensions — 51 × 13.5 × 10.5 cm&lt;br /&gt;
* Weight — 1.10 kg (gross) / 0.95 kg (net)&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product Outlook&lt;br /&gt;
[[File:DR-0005 -2.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Vertical view&lt;br /&gt;
[[File:DR-0005-1.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Size Informations&lt;br /&gt;
[[File:DR-0005-3..jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Compatibility&lt;br /&gt;
[[File:DR-0005-5..jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Package List==&lt;br /&gt;
[[File:DR-0005-6..jpg|right|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=DR-0005&amp;diff=16583</id>
		<title>DR-0005</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=DR-0005&amp;diff=16583"/>
		<updated>2026-09-02T03:01:39Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: Created page with &amp;quot;== 19-inch 2U Rack Mount for Raspberry Pi== * SKU: DR-0005 320px ==Description== The DR-0005 is a 19-inch, 2U rack-mountable enclosure designed to house multiple Raspberry Pi boards (compatible with Pi 5, 4B, 3B+, and 3B). It provides a compact, standardized solution for clustering or data-center deployment of single-board computers. ==Features== * 19-inch 2U form factor — fits standard server racks * Multi-model compatibility — supports...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 19-inch 2U Rack Mount for Raspberry Pi==&lt;br /&gt;
* SKU: DR-0005&lt;br /&gt;
[[File:DR-0005 -2.jpg|right|320px]]&lt;br /&gt;
==Description==&lt;br /&gt;
The DR-0005 is a 19-inch, 2U rack-mountable enclosure designed to house multiple Raspberry Pi boards (compatible with Pi 5, 4B, 3B+, and 3B). It provides a compact, standardized solution for clustering or data-center deployment of single-board computers.&lt;br /&gt;
==Features==&lt;br /&gt;
* 19-inch 2U form factor — fits standard server racks&lt;br /&gt;
* Multi-model compatibility — supports Raspberry Pi 5 / 4B / 3B+ / 3B&lt;br /&gt;
* High-density layout — houses multiple Pi units in a single chassis&lt;br /&gt;
* Quick-release panels — individual Raspberry Pi boards can be removed rapidly without disassembling the entire unit&lt;br /&gt;
* Package dimensions — 51 × 13.5 × 10.5 cm&lt;br /&gt;
* Weight — 1.10 kg (gross) / 0.95 kg (net)&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product Outlook&lt;br /&gt;
[[File:DR-0005 -2.jpg|right|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Vertical view&lt;br /&gt;
[[File:DR-0005-1.jpg|right|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Size Informations&lt;br /&gt;
[[File:DR-0005-3..jpg|right|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Compatibility&lt;br /&gt;
[[File:DR-0005-5..jpg|right|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
==Package List==&lt;br /&gt;
[[File:DR-0005-6..jpg|right|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=File:DR-0005-6..jpg&amp;diff=16582</id>
		<title>File:DR-0005-6..jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=File:DR-0005-6..jpg&amp;diff=16582"/>
		<updated>2026-09-02T03:01:06Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=File:DR-0005-5..jpg&amp;diff=16581</id>
		<title>File:DR-0005-5..jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=File:DR-0005-5..jpg&amp;diff=16581"/>
		<updated>2026-09-02T02:59:56Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=File:DR-0005-3..jpg&amp;diff=16580</id>
		<title>File:DR-0005-3..jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=File:DR-0005-3..jpg&amp;diff=16580"/>
		<updated>2026-09-02T02:58:55Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=File:DR-0005-1.jpg&amp;diff=16579</id>
		<title>File:DR-0005-1.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=File:DR-0005-1.jpg&amp;diff=16579"/>
		<updated>2026-09-02T02:58:12Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=File:DR-0005_-2.jpg&amp;diff=16578</id>
		<title>File:DR-0005 -2.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=File:DR-0005_-2.jpg&amp;diff=16578"/>
		<updated>2026-09-02T02:56:57Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=Main_Page&amp;diff=16577</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=Main_Page&amp;diff=16577"/>
		<updated>2026-09-02T02:52:16Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: /* Rackmount Series */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border:1px solid #a2a9b1; background:#f8f9fa; padding:12px; margin:0 0 16px 0;&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;For AI assistants and automated tools:&#039;&#039;&#039; Please use the AI-friendly Markdown version of this documentation: [https://wiki-md.52pi.com/ https://wiki-md.52pi.com/]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=&#039;&#039;&#039;RaspberryPi Modules&#039;&#039;&#039;=&lt;br /&gt;
The following contents include all of our products,  Top10 modules are list here, those modules are fit for Raspberry Pi A，A+，B，B+，2 Model B，3 Model B and some other platform. &lt;br /&gt;
you can select one of them and click the links to get more information about it.&lt;br /&gt;
==HCL==&lt;br /&gt;
This is Hardware Compatible List. &amp;lt;font color=red&amp;gt;Depracated&amp;lt;/font&amp;gt;&amp;lt;/br&amp;gt; &lt;br /&gt;
[[Hardware Compatible List]]&lt;br /&gt;
&lt;br /&gt;
==UPS series==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* UPS Gen 6 power module compatible with Raspberry Pi 5/4B: [[ EP-0245 ]] &amp;lt;font color=red&amp;gt;NEW!!&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
* SBS module for UPS Gen 6 [[ EP-0256 ]] &amp;lt;font color=red&amp;gt;NEW!!&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
* SATA Drive Power Board for UPS Gen 6: [[ EP-0252 ]] &amp;lt;font color=red&amp;gt;NEW!!&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
* 1.3&amp;quot; LCD TFT Display Module for UPS Gen 6: [[ EP-0251 ]] &amp;lt;font color=red&amp;gt;NEW!!&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Rackmount Series==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* 1U 19-inch Removable Rack mount For RPi5/4B/3B+ [[ DR-0003 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
* 2U RackMount For RPi 5: [[ DR-0002]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
* 2U RackMount For RPi 5: [[ DP-0046]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* 1U RackMount For RPi 5: [[ DR-0001 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* 1U RackMount For RPi 4B: [[ EP-0143 ]]&lt;br /&gt;
* 19-inch 2U Rack Mount for Raspberry Pi [[DR-0005]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Arduino Series==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
===Arduino UNO Q Series===&lt;br /&gt;
* Level-Shift Shield [[ EP-0257 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
* Arduino Nano ESP32 RGB LED Matrix Shield [[ EP-0263]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;  &lt;br /&gt;
* Terminal Expansion Base for Arduino NANO ESP32 [[ EP-0262 ]]  &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Arduino UNO R4 Wi-Fi Series===&lt;br /&gt;
* [[ KZ-0054 ]]&lt;br /&gt;
* [[ KZ-0077 ]]&lt;br /&gt;
* [[ KZ-0086 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==52Pi N Series==&lt;br /&gt;
===Description===&lt;br /&gt;
The 52Pi N series is a line of storage products where &amp;quot;N&amp;quot; stands for NAS (Network Attached Storage), and the numerical designation represents various models and product types. Users can choose different types based on their specific needs to fulfill their usage requirements.&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Product SKU==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* W03-New - [[ EP-0216-NEW ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* RS-P13 - [[ EP-0249 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* S021 - [[ EP-0242 ]]  &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* N16 - [[ EP-0180 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* P33 - [[ EP-0241 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* P31 - [[ EP-0240 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* P30 - [[ EP-0238 ]]  &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* CN01 - [[ EP-0236 ]]  &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* N06 - [[ EP-0239 ]]  &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* RS-P11 - [[ EP-0234 ]]  &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* B14 - [[ EP-0233 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* N12 - [[ EP-0213 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* U2500 - [[ EP-0235 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* N21 - [[ EP-0231 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* N20 - [[ EP-0227 ]]  &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* W01 - [[ EP-0228 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* N10 - [[ EP-0229 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* B12 - [[ EP-0230 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* M01 - [[ EP-0223 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* M02 - [[ EP-0217 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* N05 - [[ EP-0209 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* N04 - [[ EP-0210 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* N07 - [[ EP-0211 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* P02 - [[ EP-0219 ]]   &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* 52Pi NVDAC - [[ EP-0218 ]]&lt;br /&gt;
* 52Pi NVdigi - [[ EP-0220 ]]&lt;br /&gt;
* M.2 2242 NVME SSD for RPi 5 NES-CASE - [[ EP-0212 ]]  &lt;br /&gt;
* W03 - [[ EP-0216 ]] &lt;br /&gt;
* Ice tower plus for RPi 5 - [[ EP-0224 ]] &lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mini Tower Kit Series==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0187 ]] &amp;lt;font color=red&amp;gt;NEW&amp;lt;/font&amp;gt;&lt;br /&gt;
* [[ ZP-0172 ]]&lt;br /&gt;
* [[ ZP-0128 ]]&lt;br /&gt;
* [[ ZP-0128-3B ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0128-4wire ]]&lt;br /&gt;
* [[ ZP-0129-4wire ]]&lt;br /&gt;
* [[ ZP-0130-4wire ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0129 ]]&lt;br /&gt;
* [[ ZP-0130 ]]&lt;br /&gt;
* [[ ZP-0132 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hat Stack==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0167 ]]&lt;br /&gt;
* [[ EP-0168 ]]&lt;br /&gt;
* [[ EP-0166 ]]&lt;br /&gt;
* [[ EP-0152 ]]&lt;br /&gt;
* [[ EP-0116 ]]&lt;br /&gt;
* [[ EP-0098 ]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0099 ]]&lt;br /&gt;
* [[ EP-0104 ]]&lt;br /&gt;
* [[ EP-0106 ]]&lt;br /&gt;
* [[ EP-0107 ]]&lt;br /&gt;
* [[ EP-0108 ]]&lt;br /&gt;
* [[ EP-0109 ]]&lt;br /&gt;
* [[ EP-0105 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Starter Kit==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ KZ-0067 ]] &lt;br /&gt;
* [[ KZ-0061 ]]&lt;br /&gt;
* [[ KZ-0016 ]]&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ KZ-0020 ]]&lt;br /&gt;
* [[ KZ-0009 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Development Boards==&lt;br /&gt;
===RP2040 Series===&lt;br /&gt;
* [[ EP-0174 ]] &lt;br /&gt;
===StarFive2===&lt;br /&gt;
* [[ ER-0043 ]] &lt;br /&gt;
* [[ ER-0044 ]]&lt;br /&gt;
&lt;br /&gt;
===Micro:Bit===&lt;br /&gt;
* [[ KR-0004 ]]&lt;br /&gt;
* [[ KR-0027 ]]&lt;br /&gt;
&lt;br /&gt;
===ROCK Pi Series===&lt;br /&gt;
* [[ EP-0265 ]]&lt;br /&gt;
* [[ KR-0001 ]]&lt;br /&gt;
* [[ KR-0012 ]]&lt;br /&gt;
* [[ ZP-0148 ]]&lt;br /&gt;
&lt;br /&gt;
===Orange Pi Series===&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0156 ]]&lt;br /&gt;
* [[ ZP-0150 ]]&lt;br /&gt;
* [[ ZP-0149 ]]&lt;br /&gt;
* [[ F-0020 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ F-0021 ]]&lt;br /&gt;
* [[ F-0022 ]]&lt;br /&gt;
* [[ KZ-0003 ]]&lt;br /&gt;
* [[ ER-0045 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi Pico Series===&lt;br /&gt;
* [[ KR-0006 ]]&lt;br /&gt;
* [[ EP-0175 ]]&lt;br /&gt;
&lt;br /&gt;
==AI Learning==&lt;br /&gt;
* [[ EZ-0075 ]]&lt;br /&gt;
* [[ L-0031 ]]&lt;br /&gt;
&lt;br /&gt;
==IoT Modules==&lt;br /&gt;
* [[ EP-0090 ]]&lt;br /&gt;
* [[ EZ-0061 ]]&lt;br /&gt;
* [[ EZ-0062 ]]&lt;br /&gt;
* [[ EZ-0063 ]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Tinker Board==&lt;br /&gt;
* [[ EZ-0066 ]]&lt;br /&gt;
* [[ EZ-0065  ]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===DeskPi Series===&lt;br /&gt;
* [[ DP-0002 ]]&lt;br /&gt;
* [[ DP-0018 ]]&lt;br /&gt;
&lt;br /&gt;
==KZ series==&lt;br /&gt;
* [[ KZ-0022 ]]&lt;br /&gt;
* [[ KZ-0056 ]]&lt;br /&gt;
* [[ KZ-0058 ]]&lt;br /&gt;
* [[ KZ-0060 ]]&lt;br /&gt;
&lt;br /&gt;
==Raspberry Pi==&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ER-0056 ]]&lt;br /&gt;
* [[ KR-0024 ]]&lt;br /&gt;
* [[ ER-0046 ]]&lt;br /&gt;
* [[ ER-0035 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ER-0031 ]]&lt;br /&gt;
* [[ ER-0030 ]]&lt;br /&gt;
* [[ ER-0027 ]]&lt;br /&gt;
* [[ ER-0028 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ER-0018 ]]&lt;br /&gt;
* [[ ER-0007 ]]&lt;br /&gt;
* [[ K-0231 ]]&lt;br /&gt;
* [[ K-0230 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt; &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Raspberry Pi Pico &amp;amp; Pico W Breakout Board===&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0172 ]]&lt;br /&gt;
* [[ EP-0164 ]]&lt;br /&gt;
* [[ EP-0159 ]]&lt;br /&gt;
* [[ EP-0145 ]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0138 ]]&lt;br /&gt;
* [[ EP-0139 ]]&lt;br /&gt;
* [[ EP-0140 ]]&lt;br /&gt;
* [[ K-0582 ]]&lt;br /&gt;
* [[ K-0586 ]]&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Banana Pi==&lt;br /&gt;
* [[ EB-0028 ]]&lt;br /&gt;
* [[ EB-0023 ]]&lt;br /&gt;
* [[ EB-0020 ]]&lt;br /&gt;
* [[ EP-0019 ]]&lt;br /&gt;
* [[ EB-0012 ]]&lt;br /&gt;
* [[ EB-0013 ]]&lt;br /&gt;
&lt;br /&gt;
==Gaming Assesories==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ D-0023 ]]&lt;br /&gt;
* [[ Z-0261 ]]&lt;br /&gt;
* [[ Z-0179 ]]&lt;br /&gt;
* [[ Z-0279 ]]&lt;br /&gt;
* [[ Z-0252 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0253 ]]&lt;br /&gt;
* [[ Z-0254 ]]&lt;br /&gt;
* [[ Z-0255 ]]&lt;br /&gt;
* [[ Z-0257 ]]&lt;br /&gt;
* [[ Z-0260 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electronic Accessories==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ T-0020 ]]&lt;br /&gt;
* [[ K-0580 ]]&lt;br /&gt;
* [[ ZP-0157 ]]&lt;br /&gt;
* [[ ZP-0158 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Extension Modules=&lt;br /&gt;
&lt;br /&gt;
==EP-Series (44 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 20%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0020 ]]&lt;br /&gt;
* [[ EP-0021 ]]&lt;br /&gt;
* [[ EP-0031 ]]&lt;br /&gt;
* [[ EP-0059 ]]&lt;br /&gt;
* [[ EP-0073 ]]&lt;br /&gt;
* [[ EP-0080 ]]&lt;br /&gt;
* [[ EP-0088 ]]&lt;br /&gt;
* [[ EP-0091 ]]&lt;br /&gt;
* [[ EP-0092 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 20%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0093 ]]&lt;br /&gt;
* [[ EP-0094 ]]&lt;br /&gt;
* [[ EP-0095 ]]&lt;br /&gt;
* [[ EP-0096 ]]&lt;br /&gt;
* [[ EP-0097 ]]&lt;br /&gt;
* [[ EP-0100 ]]&lt;br /&gt;
* [[ EP-0101 ]]&lt;br /&gt;
* [[ EP-0114 ]]&lt;br /&gt;
* [[ EP-0115 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 20%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0118 ]]&lt;br /&gt;
* [[ EP-0120 ]]&lt;br /&gt;
* [[ EP-0121 ]]&lt;br /&gt;
* [[ EP-0123 ]]&lt;br /&gt;
* [[ EP-0124 ]]&lt;br /&gt;
* [[ EP-0125 ]]&lt;br /&gt;
* [[ EP-0126 ]]&lt;br /&gt;
* [[ EP-0127 ]]&lt;br /&gt;
* [[ EP-0128 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 20%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0129 ]]&lt;br /&gt;
* [[ EP-0130 ]]&lt;br /&gt;
* [[ EP-0131 ]]&lt;br /&gt;
* [[ EP-0136 ]]&lt;br /&gt;
* [[ EP-0141 ]]&lt;br /&gt;
* [[ EP-0142 ]]&lt;br /&gt;
* [[ EP-0146 ]]&lt;br /&gt;
* [[ EP-0149 ]]&lt;br /&gt;
* [[ EP-0150 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 20%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0153 ]]&lt;br /&gt;
* [[ EP-0171 ]]&lt;br /&gt;
* [[ EP-0214 ]]&lt;br /&gt;
* [[ EP-0215 ]]&lt;br /&gt;
* [[ EP-0225 ]]&lt;br /&gt;
* [[ EP-0243 ]]&lt;br /&gt;
* [[ EP-0246 ]]&lt;br /&gt;
* [[ EP-0247 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==D-Series (16 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ D-0001 ]]&lt;br /&gt;
* [[ D-0003 ]]&lt;br /&gt;
* [[ D-0005 ]]&lt;br /&gt;
* [[ D-0006 ]]&lt;br /&gt;
* [[ D-0007 ]]&lt;br /&gt;
* [[ D-0008 ]]&lt;br /&gt;
* [[ D-0009 ]]&lt;br /&gt;
* [[ D-0010 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ D-0011 ]]&lt;br /&gt;
* [[ D-0012 ]]&lt;br /&gt;
* [[ D-0013 ]]&lt;br /&gt;
* [[ D-0015 ]]&lt;br /&gt;
* [[ D-0016 ]]&lt;br /&gt;
* [[ D-0017 ]]&lt;br /&gt;
* [[ D-0018 ]]&lt;br /&gt;
* [[ D-0020 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==P-Series (6 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ P-0005 ]]&lt;br /&gt;
* [[ P-0006 ]]&lt;br /&gt;
* [[ P-0010 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ P-0011 ]]&lt;br /&gt;
* [[ P-0021 ]]&lt;br /&gt;
* [[ P-0024 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Z-Series (6 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0177 ]]&lt;br /&gt;
* [[ Z-0209 ]]&lt;br /&gt;
* [[ Z-0231 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0234 ]]&lt;br /&gt;
* [[ Z-0235 ]]&lt;br /&gt;
* [[ Z-0269 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EZ-Series (5 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EZ-0024 ]]&lt;br /&gt;
* [[ EZ-0048 ]]&lt;br /&gt;
* [[ EZ-0068 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EZ-0089 ]]&lt;br /&gt;
* [[ EZ-0106 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==ER-Series (4 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ER-0014 ]]&lt;br /&gt;
* [[ ER-0016 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ER-0021 ]]&lt;br /&gt;
* [[ ER-0022 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==K-Series (2 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0291 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0335 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==G-Series (1 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ G-0002 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Case &amp;amp; Enclosure &amp;amp; Heat sink=&lt;br /&gt;
&lt;br /&gt;
==ZP-Series (78 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 12%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0024 ]]&lt;br /&gt;
* [[ ZP-0025 ]]&lt;br /&gt;
* [[ ZP-0029 ]]&lt;br /&gt;
* [[ ZP-0037 ]]&lt;br /&gt;
* [[ ZP-0038 ]]&lt;br /&gt;
* [[ ZP-0039 ]]&lt;br /&gt;
* [[ ZP-0040 ]]&lt;br /&gt;
* [[ ZP-0042 ]]&lt;br /&gt;
* [[ ZP-0049 ]]&lt;br /&gt;
* [[ ZP-0051 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 12%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0065 ]]&lt;br /&gt;
* [[ ZP-0066 ]]&lt;br /&gt;
* [[ ZP-0067 ]]&lt;br /&gt;
* [[ ZP-0068 ]]&lt;br /&gt;
* [[ ZP-0069 ]]&lt;br /&gt;
* [[ ZP-0070 ]]&lt;br /&gt;
* [[ ZP-0071 ]]&lt;br /&gt;
* [[ ZP-0072 ]]&lt;br /&gt;
* [[ ZP-0073 ]]&lt;br /&gt;
* [[ ZP-0074 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 12%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0075 ]]&lt;br /&gt;
* [[ ZP-0076 ]]&lt;br /&gt;
* [[ ZP-0077 ]]&lt;br /&gt;
* [[ ZP-0078 ]]&lt;br /&gt;
* [[ ZP-0079 ]]&lt;br /&gt;
* [[ ZP-0080 ]]&lt;br /&gt;
* [[ ZP-0081 ]]&lt;br /&gt;
* [[ ZP-0082 ]]&lt;br /&gt;
* [[ ZP-0083 ]]&lt;br /&gt;
* [[ ZP-0085 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 12%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0086 ]]&lt;br /&gt;
* [[ ZP-0087 ]]&lt;br /&gt;
* [[ ZP-0088 ]]&lt;br /&gt;
* [[ ZP-0089 ]]&lt;br /&gt;
* [[ ZP-0090 ]]&lt;br /&gt;
* [[ ZP-0091 ]]&lt;br /&gt;
* [[ ZP-0092 ]]&lt;br /&gt;
* [[ ZP-0093 ]]&lt;br /&gt;
* [[ ZP-0098 ]]&lt;br /&gt;
* [[ ZP-0099 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 12%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0100 ]]&lt;br /&gt;
* [[ ZP-0101 ]]&lt;br /&gt;
* [[ ZP-0102 ]]&lt;br /&gt;
* [[ ZP-0103 ]]&lt;br /&gt;
* [[ ZP-0105 ]]&lt;br /&gt;
* [[ ZP-0108 ]]&lt;br /&gt;
* [[ ZP-0110 ]]&lt;br /&gt;
* [[ ZP-0111 ]]&lt;br /&gt;
* [[ ZP-0112 ]]&lt;br /&gt;
* [[ ZP-0113 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 12%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0115 ]]&lt;br /&gt;
* [[ ZP-0116 ]]&lt;br /&gt;
* [[ ZP-0120 ]]&lt;br /&gt;
* [[ ZP-0133 ]]&lt;br /&gt;
* [[ ZP-0138 ]]&lt;br /&gt;
* [[ ZP-0139 ]]&lt;br /&gt;
* [[ ZP-0140 ]]&lt;br /&gt;
* [[ ZP-0141 ]]&lt;br /&gt;
* [[ ZP-0147 ]]&lt;br /&gt;
* [[ ZP-0153 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 12%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0162 ]]&lt;br /&gt;
* [[ ZP-0163 ]]&lt;br /&gt;
* [[ ZP-0164 ]]&lt;br /&gt;
* [[ ZP-0165 ]]&lt;br /&gt;
* [[ ZP-0166 ]]&lt;br /&gt;
* [[ ZP-0167 ]]&lt;br /&gt;
* [[ ZP-0168 ]]&lt;br /&gt;
* [[ ZP-0170 ]]&lt;br /&gt;
* [[ ZP-0173 ]]&lt;br /&gt;
* [[ ZP-0175 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 12%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ZP-0180 ]]&lt;br /&gt;
* [[ ZP-0181 ]]&lt;br /&gt;
* [[ ZP-0186 ]]&lt;br /&gt;
* [[ ZP-0188 ]]&lt;br /&gt;
* [[ ZP-0213 ]]&lt;br /&gt;
* [[ ZP-0215 ]]&lt;br /&gt;
* [[ ZP-0216 ]]&lt;br /&gt;
* [[ ZP-0222 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==C-Series (26 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ C-0001 ]]&lt;br /&gt;
* [[ C-0002 ]]&lt;br /&gt;
* [[ C-0003 ]]&lt;br /&gt;
* [[ C-0004 ]]&lt;br /&gt;
* [[ C-0005 ]]&lt;br /&gt;
* [[ C-0006 ]]&lt;br /&gt;
* [[ C-0007 ]]&lt;br /&gt;
* [[ C-0008 ]]&lt;br /&gt;
* [[ C-0015 ]]&lt;br /&gt;
* [[ C-0020 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ C-0022 ]]&lt;br /&gt;
* [[ C-0023 ]]&lt;br /&gt;
* [[ C-0025 ]]&lt;br /&gt;
* [[ C-0027 ]]&lt;br /&gt;
* [[ C-0028 ]]&lt;br /&gt;
* [[ C-0031 ]]&lt;br /&gt;
* [[ C-0032 ]]&lt;br /&gt;
* [[ C-0033 ]]&lt;br /&gt;
* [[ C-0034 ]]&lt;br /&gt;
* [[ C-0047 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ C-0048 ]]&lt;br /&gt;
* [[ C-0049 ]]&lt;br /&gt;
* [[ C-0050 ]]&lt;br /&gt;
* [[ C-0052 ]]&lt;br /&gt;
* [[ C-0054 ]]&lt;br /&gt;
* [[ C-0063 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EP-Series (12 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0076 ]]&lt;br /&gt;
* [[ EP-0077 ]]&lt;br /&gt;
* [[ EP-0078 ]]&lt;br /&gt;
* [[ EP-0079 ]]&lt;br /&gt;
* [[ EP-0111 ]]&lt;br /&gt;
* [[ EP-0112 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0113 ]]&lt;br /&gt;
* [[ EP-0122 ]]&lt;br /&gt;
* [[ EP-0132 ]]&lt;br /&gt;
* [[ EP-0163 ]]&lt;br /&gt;
* [[ EP-0222 ]]&lt;br /&gt;
* [[ EP-0226 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Z-Series (15 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0127 ]]&lt;br /&gt;
* [[ Z-0153 ]]&lt;br /&gt;
* [[ Z-0157 ]]&lt;br /&gt;
* [[ Z-0183 ]]&lt;br /&gt;
* [[ Z-0184 ]]&lt;br /&gt;
* [[ Z-0185 ]]&lt;br /&gt;
* [[ Z-0190 ]]&lt;br /&gt;
* [[ Z-0193 ]]&lt;br /&gt;
* [[ Z-0208 ]]&lt;br /&gt;
* [[ Z-0237 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0264 ]]&lt;br /&gt;
* [[ Z-0266 ]]&lt;br /&gt;
* [[ Z-0272 ]]&lt;br /&gt;
* [[ Z-0273 ]]&lt;br /&gt;
* [[ Z-0278 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==K-Series (10 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0172 ]]&lt;br /&gt;
* [[ K-0178 ]]&lt;br /&gt;
* [[ K-0567 ]]&lt;br /&gt;
* [[ K-0583 ]]&lt;br /&gt;
* [[ K-0585 ]]&lt;br /&gt;
* [[ K-0589 ]]&lt;br /&gt;
* [[ K-0592 ]]&lt;br /&gt;
* [[ K-0595 ]]&lt;br /&gt;
* [[ K-0612 ]]&lt;br /&gt;
* [[ K-0638 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==KZ-Series (2 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ KZ-0001 ]]&lt;br /&gt;
* [[ KZ-0002 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==ER-Series (1 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ER-0011 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EZ-Series (1 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EZ-0059 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==F-Series (1 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ F-0003 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==L-Series (1 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ L-0030 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Cooling Accessories=&lt;br /&gt;
&amp;lt;pre&amp;gt; EOL stands for &amp;quot;End of Life&amp;quot;, means this product will not produce any more&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ F-0001 ]]&lt;br /&gt;
* [[ F-0002 ]]&lt;br /&gt;
* [[ F-0006 ]]&lt;br /&gt;
* [[ F-0005 ]]&lt;br /&gt;
* [[ F-0007 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ F-0010 ]]&lt;br /&gt;
* [[ F-0011 ]]&lt;br /&gt;
* [[ F-0012 ]]&lt;br /&gt;
* [[ D-0022 ]]&lt;br /&gt;
* [[ F-0008 ]]&lt;br /&gt;
* [[ F-0008-RGB ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Electronic Engineer Tools==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ T-0022 ]]&lt;br /&gt;
* [[ T-0021 ]]&lt;br /&gt;
* [[ T-0019 ]]&lt;br /&gt;
* [[ T-0015 ]]&lt;br /&gt;
* [[ T-0016 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ T-0017 ]]&lt;br /&gt;
* [[ T-0018 ]]&lt;br /&gt;
* [[ Z-0241 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Displays=&lt;br /&gt;
&amp;lt;pre&amp;gt; EOL stands for &amp;quot;End of Life&amp;quot;, means this product will not produce any more&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EP-Series (27 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0045 ]]&lt;br /&gt;
* [[ EP-0058 ]]&lt;br /&gt;
* [[ EP-0062 ]]&lt;br /&gt;
* [[ EP-0063 ]]&lt;br /&gt;
* [[ EP-0065 ]]&lt;br /&gt;
* [[ EP-0066 ]]&lt;br /&gt;
* [[ EP-0072 ]]&lt;br /&gt;
* [[ EP-0075 ]]&lt;br /&gt;
* [[ EP-0081 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0082 ]]&lt;br /&gt;
* [[ EP-0084 ]]&lt;br /&gt;
* [[ EP-0085 ]]&lt;br /&gt;
* [[ EP-0087 ]]&lt;br /&gt;
* [[ EP-0089 ]]&lt;br /&gt;
* [[ EP-0119 ]]&lt;br /&gt;
* [[ EP-0133 ]]&lt;br /&gt;
* [[ EP-0148 ]]&lt;br /&gt;
* [[ EP-0170 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0177 ]]&lt;br /&gt;
* [[ EP-0183 ]]&lt;br /&gt;
* [[ EP-0184 ]]&lt;br /&gt;
* [[ EP-0185 ]]&lt;br /&gt;
* [[ EP-0186 ]]&lt;br /&gt;
* [[ EP-0187 ]] &amp;lt;font color=red&amp;gt;NEW!!!&amp;lt;/font&amp;gt;&lt;br /&gt;
* [[ EP-0188 ]]&lt;br /&gt;
* [[ EP-0189 ]] &amp;lt;font color=red&amp;gt;NEW!!!&amp;lt;/font&amp;gt;&lt;br /&gt;
* [[ EP-0190 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Z-Series (8 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0017 ]]&lt;br /&gt;
* [[ Z-0051 ]]&lt;br /&gt;
* [[ Z-0053 ]]&lt;br /&gt;
* [[ Z-0111 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0112 ]]&lt;br /&gt;
* [[ Z-0113 ]]&lt;br /&gt;
* [[ Z-0114 ]]&lt;br /&gt;
* [[ Z-0143 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==S-Series (6 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ S-0001 ]]&lt;br /&gt;
* [[ S-0003 ]]&lt;br /&gt;
* [[ S-0005 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ S-0006 ]]&lt;br /&gt;
* [[ S-0007 ]]&lt;br /&gt;
* [[ S-0018 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==K-Series (5 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0101 ]]&lt;br /&gt;
* [[ K-0102 ]]&lt;br /&gt;
* [[ K-0103 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0104 ]]&lt;br /&gt;
* [[ K-0106 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Power Supply=&lt;br /&gt;
&lt;br /&gt;
==P-Series (9 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ P-0001 ]]&lt;br /&gt;
* [[ P-0007 ]]&lt;br /&gt;
* [[ P-0008 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ P-0009 ]]&lt;br /&gt;
* [[ P-0017 ]]&lt;br /&gt;
* [[ P-0031 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ P-0032 ]]&lt;br /&gt;
* [[ P-0040 ]]&lt;br /&gt;
* [[ P-0044 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Z-Series (11 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0097 ]]&lt;br /&gt;
* [[ Z-0121 ]]&lt;br /&gt;
* [[ Z-0132 ]]&lt;br /&gt;
* [[ Z-0133 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0136 ]]&lt;br /&gt;
* [[ Z-0147 ]]&lt;br /&gt;
* [[ Z-0148 ]]&lt;br /&gt;
* [[ Z-0149 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0150 ]]&lt;br /&gt;
* [[ Z-0154 ]]&lt;br /&gt;
* [[ Z-0155 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==L-Series (2 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ L-0026 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ L-0027 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Raspberry Pi Kits==&lt;br /&gt;
&lt;br /&gt;
==K-Series (18 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0111 ]]&lt;br /&gt;
* [[ K-0167 ]]&lt;br /&gt;
* [[ K-0168 ]]&lt;br /&gt;
* [[ K-0169 ]]&lt;br /&gt;
* [[ K-0171 ]]&lt;br /&gt;
* [[ K-0174 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0180 ]]&lt;br /&gt;
* [[ K-0185 ]]&lt;br /&gt;
* [[ K-0186 ]]&lt;br /&gt;
* [[ K-0238 ]]&lt;br /&gt;
* [[ K-0259 ]]&lt;br /&gt;
* [[ K-0401 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 33%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0403 ]]&lt;br /&gt;
* [[ K-0502 ]]&lt;br /&gt;
* [[ K-0503 ]]&lt;br /&gt;
* [[ K-0512 ]]&lt;br /&gt;
* [[ K-0522 ]]&lt;br /&gt;
* [[ K-0581 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Z-Series (2 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0142 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 50%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ Z-0144 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==T-Series (1 items)==&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; style=&amp;quot;width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;text-align: left; vertical-align: top; width: 100%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ T-0008 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=DR-0001&amp;diff=16576</id>
		<title>DR-0001</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=DR-0001&amp;diff=16576"/>
		<updated>2026-08-21T06:17:30Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: /* 3. Files Created / Modified */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==1U Rackmount for Raspberry Pi 5 ==&lt;br /&gt;
* Purchase URL: [ https://52pi.com ] or [ https://deskpi.com ]&lt;br /&gt;
[[File:DR-0001-1.jpg|right|320px]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
This is an upgraded version of a 1U Rackmount designed for compatibility with both Raspberry Pi 5 . It features a motherboard that supports PCIe expansion, allowing the PCIe interface of the Raspberry Pi 5 to be extended to accommodate an M.2 NVMe SSD in 2230/2242/2260/2280 form factors. The expansion board also routes the Raspberry Pi&#039;s 5V and GND, SDA, and SCL pins to the rear through PogoPin connectors, providing I2C interface peripherals in a Grove format. Additionally, a red LED is included on the board for the Raspberry Pi ID signal pin, which can be programmed to indicate the current device by controlling the GPIO4 pin&#039;s high or low level, acting as a programmable device ID signal light.&lt;br /&gt;
&lt;br /&gt;
The Rackmount supports the connection of up to five Raspberry Pi devices and can also be configured with an OLED display frame in place of one of the Raspberry Pi slots. These components can be easily adjusted and removed due to the use of hand-tightened screws. The OLED display features a 0.91-inch screen and communicates with the Raspberry Pi via I2C protocol, displaying real-time information such as CPU status, memory status, IP information, and serial numbers. The content displayed on the OLED can be fully customized.&lt;br /&gt;
==Features==&lt;br /&gt;
* &amp;lt;strong&amp;gt;Compatibility:&amp;lt;/strong&amp;gt; Designed to work with both Raspberry Pi 5.&lt;br /&gt;
* &amp;lt;strong&amp;gt;PCIe Expansion Support:&amp;lt;/strong&amp;gt;  Includes a motherboard that enables PCIe expansion, allowing the connection of M.2 NVMe SSDs in various form factors (2230/2242/2260/2280).&lt;br /&gt;
* &amp;lt;strong&amp;gt;I2C Interface: &amp;lt;/strong&amp;gt; The board routes the Raspberry Pi&#039;s 5V, GND, SDA, and SCL pins to the rear through PogoPin connectors, offering I2C interface peripherals in a Grove format.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Programmable LED Indicator: &amp;lt;/strong&amp;gt; A red LED on the board serves as a programmable device ID signal, controllable via the GPIO4 pin to indicate the status or identity of the device.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Modular Design:&amp;lt;/strong&amp;gt;  Supports the integration of up to five Raspberry Pi devices, with the option to replace one slot with an OLED display frame.&lt;br /&gt;
* &amp;lt;strong&amp;gt;OLED Display Integration:&amp;lt;/strong&amp;gt;  The option to include a 0.91-inch OLED screen that communicates with the Raspberry Pi via I2C, displaying customizable information such as CPU usage, memory status, IP address, and serial numbers.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Easy Assembly and Disassembly:&amp;lt;/strong&amp;gt;  Components are secured with hand-tightened screws, allowing for convenient adjustments and removal.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Customizable Display Content: &amp;lt;/strong&amp;gt; The information displayed on the OLED screen can be fully customized to meet specific needs or preferences.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Rackmount Form Factor: &amp;lt;/strong&amp;gt; Designed to fit into a 1U rack space, making it suitable for data centers or other environments where space is at a premium.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Versatility:&amp;lt;/strong&amp;gt;  The Rackmount can be configured in various ways to suit different use cases, whether for development, testing, or deployment in a production environment.&lt;br /&gt;
===Specifications===&lt;br /&gt;
* Form Factor: 1U Rackmount design suitable for standard 19-inch racks.&lt;br /&gt;
* Raspberry Pi Compatibility: Specifically designed for Raspberry Pi 5.&lt;br /&gt;
* PCIe Expansion:Supports M.2 NVMe SSDs in 2230, 2242, 2260, and 2280 form factors. Provides a PCIe interface for high-speed data transfer.&lt;br /&gt;
* I/O Connectivity: Rear I2C interface via PogoPin connectors for external peripherals.&lt;br /&gt;
* GPIO4 pin for programmable LED control.&lt;br /&gt;
* LED Indicator:Red LED for device identification or status indication. Programmable through software to show different statuses.&lt;br /&gt;
* Modular Bays: Five bays for Raspberry Pi devices. One bay can be replaced with an OLED display module.&lt;br /&gt;
* OLED Display Specifications:0.91-inch screen size, 128x32 pixels. I2C communication protocol.&lt;br /&gt;
* Customizable display for system information.&lt;br /&gt;
* Physical Security:Hand-tightened screws for secure mounting of Raspberry Pi devices and OLED display.&lt;br /&gt;
* Ensures stability and ease of maintenance.&lt;br /&gt;
* Power Requirements: Compatibility with Raspberry Pi&#039;s standard power supply.&lt;br /&gt;
* Material and Construction: Durable metal construction for the rackmount chassis. High-quality components for reliable performance.&lt;br /&gt;
* Mounting Options: Standard rackmount holes for easy installation into a rack.&lt;br /&gt;
* Includes additional mounting accessories for different setups.&lt;br /&gt;
* Software Compatibility: Compatible with Raspberry Pi&#039;s operating system and software ecosystem.&lt;br /&gt;
* Support for GPIO programming for custom LED and device control.&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product outlook&lt;br /&gt;
[[ File:DR-0001-6.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Application Senario &lt;br /&gt;
[[ File:DR-0001-2.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&amp;lt;font color=red&amp;gt; NOTE: Raspberry Pis are not included in the package, additional purchase required!&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* Easy to assemble and maintain&lt;br /&gt;
[[ File:DR-0001-3.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
[[File:DR-0001-12.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Customizable OLED display screen, with a size of 0.91 inches&lt;br /&gt;
[[ File:DR-0001-4.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Ports Definitions and Featrues &lt;br /&gt;
Programmable I/O controlled UID indicator light, which can be programmed to control the LED blinking to indicate the device&#039;s location, facilitating faster troubleshooting and easier maintenance operations.&lt;br /&gt;
[[ File:DR-0001-5.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===How to connect OLED display to Raspberry Pi on GPIO pins===&lt;br /&gt;
* Please refer to following figure to connect OLED display to Raspberry Pi on GPIO. &lt;br /&gt;
&amp;lt;font color=red&amp;gt;NOTE: OLED&#039;s VCC should be connected to 3.3V power rail, Do not connect it to 5V power rail!!!&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[ File:DR-0001-7.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Grove Connector Support I2C and Uart&lt;br /&gt;
[[ File:DR-0001-8.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Accessories Dimension&lt;br /&gt;
[[ File:DR-0001-9.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* OLED assemble details&lt;br /&gt;
Please remove the protection film from acrylic panel and use the washer between OLED PCB board and acrylic panel.&lt;br /&gt;
[[ File:DR-0001-10.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* PCIe Expansion board for Raspberry Pi 5 only&lt;br /&gt;
The expansion board supports M.2 NVMe M-key SSD 2230/2242/2260/2280, and the board will be powered by Raspberry Pi 5 via PogoPin on the PCB board, please make sure the board&#039;s pogoins are contact well with the soldering point on back of the Raspberry Pi 5 on GPIO pins. &lt;br /&gt;
[[File:DR-0001-11.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to assemble it? ==&lt;br /&gt;
* Please note that there are several details you need to pay attention, plesae check out following figure.&lt;br /&gt;
[[ File:DR-0001-安装.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Package Includes==&lt;br /&gt;
* Following figure shows the details of the product: &lt;br /&gt;
[[ File:DR-0001-清单.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to enable I2C OLED display?==&lt;br /&gt;
* We assume that you are using Raspberry Pi OS 64bit(bookworm, the latest official image) &lt;br /&gt;
To enable I2C and UART on your Raspberry Pi, you can follow these detailed steps:&lt;br /&gt;
&lt;br /&gt;
===Enabling I2C===&lt;br /&gt;
* Method 1. Using the Raspberry Pi Configuration Tool: &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo raspi-config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to open the configuration tool. Navigate to `Interface Options`, Select `I2C` and enable it.&lt;br /&gt;
&lt;br /&gt;
* Method  2. Using the Command Line:&lt;br /&gt;
You can also enable I2C by editing the `/boot/firmware/config.txt` file and adding `dtparam=i2c_arm=on` if it&#039;s not already present, After making changes, reboot your Pi.&lt;br /&gt;
&lt;br /&gt;
===Verifying I2C===&lt;br /&gt;
* Install I2C tools using `sudo apt-get install -y i2c-tools`.&lt;br /&gt;
* Use &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
i2cdetect -y 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to scan for I2C devices, if you see `3c` means that the OLED display has been recognized by your Raspberry Pi. &lt;br /&gt;
&lt;br /&gt;
===Enabling UART===&lt;br /&gt;
* Method 1. Using the Raspberry Pi Configuration Tool:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo raspi-config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Go to `Interface Options`, Select `Serial` and enable it.&lt;br /&gt;
&amp;lt;pre&amp;gt; Note: This will also enable the login shell on the serial port. &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Method 2. Using the Command Line:&lt;br /&gt;
Edit `/boot/config.txt` and add `enable_uart=1`, save it and then reboot your Pi.&lt;br /&gt;
&lt;br /&gt;
===Accessing UART===&lt;br /&gt;
* Connect your Pi to a USB-to-TTL converter, On Windows, you may need to install drivers for the converter. on Linux just use a terminal program like `minicom`, `putty`, or `screen` to access the UART interface.&lt;br /&gt;
&lt;br /&gt;
Remember to check the documentation for your specific Raspberry Pi model, as the steps might vary slightly. If you need more detailed instructions or encounter any issues, refer to the [ https://www.raspberrypi.org/documentation/ ]  or community forums for additional support.&lt;br /&gt;
&lt;br /&gt;
===How to display customized information on OLED display? ===&lt;br /&gt;
* Final result&lt;br /&gt;
[[File:DR-0001 applications-01.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
==How to customize content on OLED ?==&lt;br /&gt;
* For example: If you want to display current IP address of wlan interface and the serial number of your Raspberry Pi 5, please follow next steps to configure it. &lt;br /&gt;
===Install Virtal environment package ===&lt;br /&gt;
* Open a terminal and typing following commands:&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo apt update &lt;br /&gt;
sudo apt upgrade -y &lt;br /&gt;
sudo apt -y install virtualenv &lt;br /&gt;
sudo usermod -a -G i2c,spi,gpio pi&lt;br /&gt;
sudo apt install python3-dev python3-pip python3-numpy libfreetype6-dev libjpeg-dev build-essential&lt;br /&gt;
sudo apt install libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev libportmidi-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:Install pre-insistpackages.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
[[File:Install-pre-insistpackage-02.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Create virtual environment===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
virtualenv -p python3 venv &lt;br /&gt;
cd venv/&lt;br /&gt;
source bin/activate &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Install SSD1306 driver and library for OLED 0.91===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pip install luma.oled&lt;br /&gt;
pip install psutil&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Clone luma.examples repository===&lt;br /&gt;
Log out and in again and clone this repository:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone https://github.com/rm-hull/luma.examples.git&lt;br /&gt;
cd luma.examples/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Install luma libraries===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -H pip install -e . --break-system-packages  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:Install luma libraries.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
===Test the demo ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd examples/&lt;br /&gt;
sudo python 3d_box.py --width=128 --height=32 -r 2 &lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=red&amp;gt;&amp;lt;p&amp;gt;NOTE: &amp;lt;br&amp;gt;&lt;br /&gt;
 --width=128 and --height=32 should be added to declear the OLED&#039;s resolution information. &amp;lt;br&amp;gt;&lt;br /&gt;
 -r 2  means --rotate 2 , Allowed values are: 0, 1, 2, 3  (default:0) &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
If you see a 3D-box rotating animation is in the middle of screen means that you have installed the OLED driver successfully! &lt;br /&gt;
[[File:Test demo 3dbox.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
[[File:Test demo 3dbox-2.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
and then press &amp;quot;Ctrol+C&amp;quot; abort the demo.&lt;br /&gt;
&lt;br /&gt;
==Use the demo code==&lt;br /&gt;
* There are a lot of demo codes in the examples folder, you can test it as you want. &lt;br /&gt;
for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo python carousel.py --width=128 --height=32 -r 2 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
It will display all information of your Raspberry Pi 5 and scrolling display. &lt;br /&gt;
===Customize the display on screen===&lt;br /&gt;
Modify the sys_info.py python file and adding your own function to show the information you want, do remember backup the origin file. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp sys_info.py sys_info.py.bak &lt;br /&gt;
vim.tiny sys_info.py &lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Press &#039;i&#039; to insert mode, and paste following lines into it. you can modify this file by other text editor what you like. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
# Copyright (c) 2014-2022 Richard Hull and contributors&lt;br /&gt;
# See LICENSE.rst for details.&lt;br /&gt;
# PYTHON_ARGCOMPLETE_OK&lt;br /&gt;
&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Display basic system information.&lt;br /&gt;
&lt;br /&gt;
Needs psutil (+ dependencies) installed::&lt;br /&gt;
&lt;br /&gt;
  $ sudo apt-get install python-dev&lt;br /&gt;
  $ sudo -H pip install psutil&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
import os&lt;br /&gt;
import sys&lt;br /&gt;
import time&lt;br /&gt;
from pathlib import Path&lt;br /&gt;
from datetime import datetime&lt;br /&gt;
import subprocess as sp&lt;br /&gt;
&lt;br /&gt;
if os.name != &#039;posix&#039;:&lt;br /&gt;
    sys.exit(f&#039;{os.name} platform is not supported&#039;)&lt;br /&gt;
&lt;br /&gt;
from demo_opts import get_device&lt;br /&gt;
from luma.core.render import canvas&lt;br /&gt;
from PIL import ImageFont&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    import psutil&lt;br /&gt;
except ImportError:&lt;br /&gt;
    print(&amp;quot;The psutil library was not found. Run &#039;sudo -H pip install psutil&#039; to install it.&amp;quot;)&lt;br /&gt;
    sys.exit()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# TODO: custom font bitmaps for up/down arrows&lt;br /&gt;
# TODO: Load histogram&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def bytes2human(n):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; bytes2human(10000)&lt;br /&gt;
    &#039;9K&#039;&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; bytes2human(100001221)&lt;br /&gt;
    &#039;95M&#039;&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    symbols = (&#039;K&#039;, &#039;M&#039;, &#039;G&#039;, &#039;T&#039;, &#039;P&#039;, &#039;E&#039;, &#039;Z&#039;, &#039;Y&#039;)&lt;br /&gt;
    prefix = {}&lt;br /&gt;
    for i, s in enumerate(symbols):&lt;br /&gt;
        prefix[s] = 1 &amp;lt;&amp;lt; (i + 1) * 10&lt;br /&gt;
    for s in reversed(symbols):&lt;br /&gt;
        if n &amp;gt;= prefix[s]:&lt;br /&gt;
            value = int(float(n) / prefix[s])&lt;br /&gt;
            return &#039;%s%s&#039; % (value, s)&lt;br /&gt;
    return f&amp;quot;{n}B&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def cpu_usage():&lt;br /&gt;
    # load average, uptime&lt;br /&gt;
    uptime = datetime.now() - datetime.fromtimestamp(psutil.boot_time())&lt;br /&gt;
    #av1, av2, av3 = os.getloadavg()&lt;br /&gt;
    #return &amp;quot;Ld:%.1f %.1f %.1f Up: %s&amp;quot; \&lt;br /&gt;
    #    % (av1, av2, av3, str(uptime).split(&#039;.&#039;)[0])&lt;br /&gt;
    return &amp;quot;Up: %s&amp;quot; % (str(uptime).split(&#039;.&#039;)[0])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def mem_usage():&lt;br /&gt;
    usage = psutil.virtual_memory()&lt;br /&gt;
    return &amp;quot;Mem: %s %.0f%%&amp;quot; \&lt;br /&gt;
        % (bytes2human(usage.used), 100 - usage.percent)&lt;br /&gt;
&lt;br /&gt;
def disk_usage(dir):&lt;br /&gt;
    usage = psutil.disk_usage(dir)&lt;br /&gt;
    return &amp;quot;SD:  %s %.0f%%&amp;quot; \&lt;br /&gt;
        % (bytes2human(usage.used), usage.percent)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def network(iface):&lt;br /&gt;
    stat = psutil.net_io_counters(pernic=True)[iface]&lt;br /&gt;
    return &amp;quot;%s: Tx%s, Rx%s&amp;quot; % \&lt;br /&gt;
           (iface, bytes2human(stat.bytes_sent), bytes2human(stat.bytes_recv))&lt;br /&gt;
&lt;br /&gt;
def mem_usage():&lt;br /&gt;
    usage = psutil.virtual_memory()&lt;br /&gt;
    return &amp;quot;Mem: %s %.0f%%&amp;quot; \&lt;br /&gt;
        % (bytes2human(usage.used), 100 - usage.percent)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def disk_usage(dir):&lt;br /&gt;
    usage = psutil.disk_usage(dir)&lt;br /&gt;
    return &amp;quot;SD:  %s %.0f%%&amp;quot; \&lt;br /&gt;
        % (bytes2human(usage.used), usage.percent)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def network(iface):&lt;br /&gt;
    stat = psutil.net_io_counters(pernic=True)[iface]&lt;br /&gt;
    return &amp;quot;%s: Tx%s, Rx%s&amp;quot; % \&lt;br /&gt;
           (iface, bytes2human(stat.bytes_sent), bytes2human(stat.bytes_recv))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def get_ip_address():&lt;br /&gt;
    ip = sp.getoutput(&#039;hostname -I&#039;)&lt;br /&gt;
    return &amp;quot;IP: %s&amp;quot; % ip&lt;br /&gt;
&lt;br /&gt;
def get_id():&lt;br /&gt;
    id_of_pi = sp.getoutput(&amp;quot;cat /proc/cpuinfo | grep -i serial| awk -F: &#039;{print $2}&#039;|xargs&amp;quot;)&lt;br /&gt;
    return &amp;quot;%s&amp;quot; % id_of_pi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def stats(device):&lt;br /&gt;
    # use custom font&lt;br /&gt;
    font_path = str(Path(__file__).resolve().parent.joinpath(&#039;fonts&#039;, &#039;C&amp;amp;C Red Alert [INET].ttf&#039;))&lt;br /&gt;
    #font_path = str(Path(__file__).resolve().parent.joinpath(&#039;fonts&#039;, &#039;DejaVuSansMono.ttf&#039;))&lt;br /&gt;
    font2 = ImageFont.truetype(font_path, 15)&lt;br /&gt;
&lt;br /&gt;
    with canvas(device) as draw:&lt;br /&gt;
        # draw.text((0, 0), cpu_usage(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
        draw.text((0, 0), get_id(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
        if device.height &amp;gt;= 32:&lt;br /&gt;
            #draw.text((0, 11), mem_usage(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            #draw.text((0, 16), disk_usage(&#039;/&#039;), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            draw.text((0, 16), get_ip_address(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        if device.height &amp;gt;= 64:&lt;br /&gt;
            draw.text((0, 26), disk_usage(&#039;/&#039;), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            try:&lt;br /&gt;
                draw.text((0, 38), network(&#039;wlan0&#039;), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            except KeyError:&lt;br /&gt;
                # no wifi enabled/available&lt;br /&gt;
                pass&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    while True:&lt;br /&gt;
        stats(device)&lt;br /&gt;
        time.sleep(5)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    try:&lt;br /&gt;
        device = get_device()&lt;br /&gt;
        main()&lt;br /&gt;
    except KeyboardInterrupt:&lt;br /&gt;
        pass&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Here let me explain to you what i did.&lt;br /&gt;
* adding &amp;quot; import subprocess as sp&amp;quot;, this will help me to execute some shell command in OS. &lt;br /&gt;
* adding following parts:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def get_ip_address():&lt;br /&gt;
    ip = sp.getoutput(&#039;hostname -I&#039;)&lt;br /&gt;
    return &amp;quot;IP: %s&amp;quot; % ip&lt;br /&gt;
&lt;br /&gt;
def get_id():&lt;br /&gt;
    id_of_pi = sp.getoutput(&amp;quot;cat /proc/cpuinfo | grep -i serial| awk -F: &#039;{print $2}&#039;|xargs&amp;quot;)&lt;br /&gt;
    return &amp;quot;%s&amp;quot; % id_of_pi&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
* get_ip_address will execute the command &amp;quot;hostname -I&amp;quot; in system and grab the IP address and return it to main process.&lt;br /&gt;
* get_id is to read /proc/cpuinfo file and grab the serial number and return to main process.&lt;br /&gt;
&lt;br /&gt;
===Use custom font===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   font_path = str(Path(__file__).resolve().parent.joinpath(&#039;fonts&#039;, &#039;C&amp;amp;C Red Alert [INET].ttf&#039;))&lt;br /&gt;
   font2 = ImageFont.truetype(font_path, 15)   # change font size to 15. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Modify the draw function===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  with canvas(device) as draw:&lt;br /&gt;
        # draw.text((0, 0), cpu_usage(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
        draw.text((0, 0), get_id(), font=font2, fill=&amp;quot;white&amp;quot;)         #####　draw id on screen at (0,0) position, (x,y)&lt;br /&gt;
        if device.height &amp;gt;= 32:&lt;br /&gt;
            #draw.text((0, 11), mem_usage(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            #draw.text((0, 16), disk_usage(&#039;/&#039;), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            draw.text((0, 16), get_ip_address(), font=font2, fill=&amp;quot;white&amp;quot;)   ####　draw text on (0,16) with IP address. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to create a systemd file to make it automatically start at boot up==&lt;br /&gt;
* Step1. create a shell script called it &#039;start_led.sh&#039; &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
cd /home/pi/venv/ &amp;amp;&amp;amp; source /home/pi/venv/bin/activate &lt;br /&gt;
/usr/bin/python3 /home/pi/luma.examples/examples/sys_info.py --width=128 --height=32 -r 2 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
save it and grant executable permission and test it.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x start_led.sh &lt;br /&gt;
./start_led.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
If if works properly, just press &amp;quot;ctrol+c&amp;quot; to abort the test.&lt;br /&gt;
* Step2. create a systemd file and enable it.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo vim.tiny /etc/systemd/system/rackmount_oled.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
And then, adding following lines:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Rackmount OLED service on RPi5&lt;br /&gt;
DefaultDependencies=no&lt;br /&gt;
StartLimitIntervalSec=60&lt;br /&gt;
StartLimitBurst=5&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
ExecStart=/bin/bash /home/pi/start_led.sh&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Save it and quit. &lt;br /&gt;
===Enable rackmount_oled.service===&lt;br /&gt;
* reload daemon&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl daemon-reload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Enable service&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo systemctl enable rackmount_oled.service &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Start service &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start rackmount_oled.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Restart service&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart rackmount_oled.service &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Stop service&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl stop rackmount_oled.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Disable service &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl disable rackmount_oled.service &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to enable PCIe function on Raspberry Pi 5?==&lt;br /&gt;
* To enable PCIe functionality on the Raspberry Pi 5, follow these steps:&lt;br /&gt;
&lt;br /&gt;
===1. Enable the PCIe External Connector:===&lt;br /&gt;
By default, the PCIe connector on the Raspberry Pi 5 is not enabled. To enable it, you need to add a configuration parameter to the `config.txt` file located in the `/boot/firmware` directory. You can use either of these lines:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dtparam=pciex1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After adding the line, reboot your Raspberry Pi for the changes to take effect.&lt;br /&gt;
&lt;br /&gt;
===2.Enable PCIe Gen 3.0 (Optional):===&lt;br /&gt;
The Raspberry Pi 5&#039;s PCIe connection is certified for Gen 2.0 speeds. However, if you want to attempt using Gen 3.0 speeds, add the following line to the `config.txt` file as well:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dtparam=pciex1_gen=3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 Be aware that the Raspberry Pi 5 is not certified for Gen 3.0 speeds, and using this setting may result in instability .&lt;br /&gt;
&lt;br /&gt;
===3.Booting from PCIe:===&lt;br /&gt;
If you intend to boot from a device connected via PCIe, such as an NVMe SSD, you will need to modify the boot order in the EEPROM. Use the following command to edit the EEPROM configuration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &lt;br /&gt;
sudo apt upgrade -y &lt;br /&gt;
sudo rpi-eeprom-config --edit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then, change the `BOOT_ORDER` line to include NVMe in the boot order:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BOOT_ORDER=0xf416&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This setting will make the Raspberry Pi attempt to boot from an NVMe device connected to the PCIe port .&lt;br /&gt;
===4. Kernel Compilation (Advanced):===&lt;br /&gt;
If you need to compile the kernel to add support for specific PCIe devices, you can follow the steps outlined in the Raspberry Pi documentation. This involves cloning the Raspberry Pi kernel repository, configuring the kernel with `make menuconfig`, and enabling the necessary modules for your devices .&lt;br /&gt;
Remember to always check the compatibility of the devices you intend to use with the Raspberry Pi 5&#039;s PCIe interface, as not all devices may be supported out of the box.&lt;br /&gt;
&lt;br /&gt;
==How to light up identical LED? ==&lt;br /&gt;
To light up UID LED indicator on a Raspberry Pi 5, you&#039;ll make sure the GPIO Pin of the UID LED connected to. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GPIO (General Purpose Input/Output) pins on the Raspberry Pi.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Steps===&lt;br /&gt;
* 1. Identify GPIO Pins: &amp;lt;font color=red&amp;gt;GPIO4&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* 2. Power On:&lt;br /&gt;
Make sure your Raspberry Pi is powered off before connecting the LED. Once everything is connected, you can power on your Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
* 3. Software Setup:&lt;br /&gt;
You&#039;ll need to write a small program to turn the GPIO pin on and off to control the LED. You can use Python with the `gpiozero` library or `RPi.GPIO` library to control the GPIO pins.&lt;br /&gt;
&lt;br /&gt;
===Example Python Code with gpiozero:===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from gpiozero import LED&lt;br /&gt;
from time import sleep&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
led = LED(&#039;GPIO4&#039;)&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    led.on()&lt;br /&gt;
    sleep(1)&lt;br /&gt;
    led.off()&lt;br /&gt;
    sleep(1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Example Python Code with RPi.GPIO:===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import RPi.GPIO as GPIO&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
# Set the GPIO mode&lt;br /&gt;
GPIO.setmode(GPIO.BCM)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GPIO_PIN = 4&lt;br /&gt;
&lt;br /&gt;
# Set up the GPIO pin as an output channel&lt;br /&gt;
GPIO.setup(GPIO_PIN, GPIO.OUT)&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    GPIO.output(GPIO_PIN, GPIO.HIGH)  # Turn on the LED&lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
    GPIO.output(GPIO_PIN, GPIO.LOW)   # Turn off the LED&lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
&lt;br /&gt;
# Clean up the GPIO pins before exiting the program&lt;br /&gt;
GPIO.cleanup()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Safety Tips:===&lt;br /&gt;
* Be careful not to short any pins on the Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
=== SSD1306 OLED Black-Screen Debugging Report &amp;amp; Operation Guide===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;Target hardware:&amp;lt;/strong&amp;gt; 0.91&amp;quot; OLED, 128×32 px, SSD1306, I2C, address 0x3C, Raspberry Pi 5&lt;br /&gt;
&amp;lt;strong&amp;gt;Software:&amp;lt;/strong&amp;gt; luma.oled 3.15.0, luma.core 2.6.0, Python 3.13, smbus2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1. Executive Summary — What Was Actually Wrong ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;Nothing was wrong with the code, the luma library, or the SSD1306 register configuration.&amp;lt;/strong&amp;gt;&lt;br /&gt;
No library or example source code was modified. The failures came from hardware and&lt;br /&gt;
configuration, in one layers:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;A parameter mismatch in the examples.&amp;lt;/strong&amp;gt;  The examples in this directory default to&lt;br /&gt;
  `ssd1305 / 128×64`; this panel is `ssd1306 / 128×32`. Running without parameters&lt;br /&gt;
  produces a black or garbled screen. The fix is to pass the correct display, interface,&lt;br /&gt;
  geometry and address — done via the config file `ssd1306_128x32.conf`.&lt;br /&gt;
&lt;br /&gt;
* ssd1306_128x32.conf contents:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--display=ssd1306&lt;br /&gt;
--interface=i2c&lt;br /&gt;
--i2c-port=1&lt;br /&gt;
--i2c-address=0x3c&lt;br /&gt;
--width=128&lt;br /&gt;
--height=32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Put this configuration file to your demo code location:&lt;br /&gt;
[[ File:Democodeconfig.png|left| 800px ]] &lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* How to execute with config file&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo python3 demo.py -f ssd1306_128x32.conf &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. What Was Done, Step by Step (Method and Basis)===&lt;br /&gt;
&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
     |+ Diagnosis — locating the fault&lt;br /&gt;
     ! Method !! Basis / Reasoning&lt;br /&gt;
     |-&lt;br /&gt;
     | Bus scan with &amp;lt;code&amp;gt;i2cdetect&amp;lt;/code&amp;gt; || An ACK at 0x3C proves all four wires&lt;br /&gt;
   (VCC/GND/SDA/SCL) are connected and the driver IC is powered&lt;br /&gt;
     |-&lt;br /&gt;
     | Source inspection of ssd1306 in luma.oled 3.15.0 || The 128×32 init sequence&lt;br /&gt;
   (multiplex 0x1F, compins 0x02, charge pump 0x14) matches the datasheet standard — a&lt;br /&gt;
   register-level bug was ruled out on evidence&lt;br /&gt;
     |-&lt;br /&gt;
     | Raw-register write of 0xA5 (force all-on) || This command bypasses GDDRAM; a&lt;br /&gt;
   healthy panel must glow. No light = fault in the high-voltage path (charge pump /&lt;br /&gt;
   panel / flex cable)&lt;br /&gt;
     |-&lt;br /&gt;
     | Status-register read before/after DISPLAY ON/OFF commands || Per the SSD1306&lt;br /&gt;
   datasheet, bit 6 is the display ON/OFF flag. It flipped correctly, proving the chip&lt;br /&gt;
   executes commands — fault isolated to the panel side&lt;br /&gt;
     |-&lt;br /&gt;
     | 5 consecutive bus scans + 10 consecutive status reads || All values stable and&lt;br /&gt;
   identical — ruled out loose wiring and parasitic power&lt;br /&gt;
     |}&lt;br /&gt;
&lt;br /&gt;
===3. Files Created / Modified===&lt;br /&gt;
&lt;br /&gt;
  {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
     |+ Fixes and deliverables&lt;br /&gt;
     ! File !! Type !! Description&lt;br /&gt;
     |-&lt;br /&gt;
     | &amp;lt;code&amp;gt;ssd1306_128x32.conf&amp;lt;/code&amp;gt; || Fixed || Initially written in INI format,&lt;br /&gt;
   causing &amp;quot;unrecognized arguments&amp;quot;. Based on the source of&lt;br /&gt;
   &amp;lt;code&amp;gt;luma.core.cmdline.load_config&amp;lt;/code&amp;gt; (reads line by line, no whitespace&lt;br /&gt;
   splitting), rewritten as one &amp;lt;code&amp;gt;--key=value&amp;lt;/code&amp;gt; per line; demo.py then ran&lt;br /&gt;
   successfully&lt;br /&gt;
     |}&lt;br /&gt;
&lt;br /&gt;
No files in luma.oled / luma.core or the example scripts were modified.&lt;br /&gt;
&lt;br /&gt;
===4. Final Working Configuration===&lt;br /&gt;
&lt;br /&gt;
* Module: bare 0.91&amp;quot; 128×32 SSD1306, &amp;lt;strong&amp;gt;no onboard regulator&amp;lt;/strong&amp;gt;&lt;br /&gt;
* Wiring: VCC → &amp;lt;strong&amp;gt;3.3 V&amp;lt;/strong&amp;gt; (pin 1), GND → GND, SDA → GPIO2 (pin 3), SCL → GPIO3 (pin 5)&lt;br /&gt;
* No RST/RES connection needed (I2C interface)&lt;br /&gt;
* I2C address: `0x3C`&lt;br /&gt;
&lt;br /&gt;
=== 5. Operating Instructions===&lt;br /&gt;
&lt;br /&gt;
==== Run any luma example in this directory====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python demo.py    -f ssd1306_128x32.conf&lt;br /&gt;
python clock.py   -f ssd1306_128x32.conf&lt;br /&gt;
python pi_logo.py -f ssd1306_128x32.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or pass parameters explicitly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python demo.py -d ssd1306 -i i2c --i2c-port 1 --i2c-address 0x3c --width 128 --height 32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Minimal code (luma)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from luma.core.interface.serial import i2c&lt;br /&gt;
from luma.oled.device import ssd1306&lt;br /&gt;
from luma.core.render import canvas&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
device = ssd1306(i2c(port=1, address=0x3C), width=128, height=32)&lt;br /&gt;
with canvas(device) as draw:&lt;br /&gt;
    draw.rectangle(device.bounding_box, outline=&amp;quot;white&amp;quot;)&lt;br /&gt;
    draw.text((4, 10), &amp;quot;OK 128x32&amp;quot;, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===6. Black-Screen Decision Tree (for future modules)===&lt;br /&gt;
&lt;br /&gt;
* `i2cdetect -y 1` shows the address?&lt;br /&gt;
  &amp;lt;strong&amp;gt;No&amp;lt;/strong&amp;gt; → power/wiring fault: measure VCC-GND **at the module&#039;s solder pads**, check SDA=pin 3, SCL=pin 5, try fresh dupont wires.&lt;br /&gt;
  &amp;lt;strong&amp;gt;Yes&amp;lt;/strong&amp;gt; → continue.&lt;br /&gt;
&lt;br /&gt;
* Run `python oled_diagnose.py`. Any step lights the panel?&lt;br /&gt;
  &amp;lt;strong&amp;gt;Yes&amp;lt;/strong&amp;gt; → software/parameter issue; use the matching parameters (`-d ssd1306 --width 128 --height 32 --i2c-address 0x3c`).&lt;br /&gt;
  &amp;lt;strong&amp;gt;No&amp;lt;/strong&amp;gt; → continue.&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
* 1U Rackmount for Raspberry Pi 5 with M.2 NVMe SSD support.&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=DR-0001&amp;diff=16575</id>
		<title>DR-0001</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=DR-0001&amp;diff=16575"/>
		<updated>2026-08-21T06:15:46Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: /* Run the library-free raw driver */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==1U Rackmount for Raspberry Pi 5 ==&lt;br /&gt;
* Purchase URL: [ https://52pi.com ] or [ https://deskpi.com ]&lt;br /&gt;
[[File:DR-0001-1.jpg|right|320px]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
This is an upgraded version of a 1U Rackmount designed for compatibility with both Raspberry Pi 5 . It features a motherboard that supports PCIe expansion, allowing the PCIe interface of the Raspberry Pi 5 to be extended to accommodate an M.2 NVMe SSD in 2230/2242/2260/2280 form factors. The expansion board also routes the Raspberry Pi&#039;s 5V and GND, SDA, and SCL pins to the rear through PogoPin connectors, providing I2C interface peripherals in a Grove format. Additionally, a red LED is included on the board for the Raspberry Pi ID signal pin, which can be programmed to indicate the current device by controlling the GPIO4 pin&#039;s high or low level, acting as a programmable device ID signal light.&lt;br /&gt;
&lt;br /&gt;
The Rackmount supports the connection of up to five Raspberry Pi devices and can also be configured with an OLED display frame in place of one of the Raspberry Pi slots. These components can be easily adjusted and removed due to the use of hand-tightened screws. The OLED display features a 0.91-inch screen and communicates with the Raspberry Pi via I2C protocol, displaying real-time information such as CPU status, memory status, IP information, and serial numbers. The content displayed on the OLED can be fully customized.&lt;br /&gt;
==Features==&lt;br /&gt;
* &amp;lt;strong&amp;gt;Compatibility:&amp;lt;/strong&amp;gt; Designed to work with both Raspberry Pi 5.&lt;br /&gt;
* &amp;lt;strong&amp;gt;PCIe Expansion Support:&amp;lt;/strong&amp;gt;  Includes a motherboard that enables PCIe expansion, allowing the connection of M.2 NVMe SSDs in various form factors (2230/2242/2260/2280).&lt;br /&gt;
* &amp;lt;strong&amp;gt;I2C Interface: &amp;lt;/strong&amp;gt; The board routes the Raspberry Pi&#039;s 5V, GND, SDA, and SCL pins to the rear through PogoPin connectors, offering I2C interface peripherals in a Grove format.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Programmable LED Indicator: &amp;lt;/strong&amp;gt; A red LED on the board serves as a programmable device ID signal, controllable via the GPIO4 pin to indicate the status or identity of the device.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Modular Design:&amp;lt;/strong&amp;gt;  Supports the integration of up to five Raspberry Pi devices, with the option to replace one slot with an OLED display frame.&lt;br /&gt;
* &amp;lt;strong&amp;gt;OLED Display Integration:&amp;lt;/strong&amp;gt;  The option to include a 0.91-inch OLED screen that communicates with the Raspberry Pi via I2C, displaying customizable information such as CPU usage, memory status, IP address, and serial numbers.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Easy Assembly and Disassembly:&amp;lt;/strong&amp;gt;  Components are secured with hand-tightened screws, allowing for convenient adjustments and removal.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Customizable Display Content: &amp;lt;/strong&amp;gt; The information displayed on the OLED screen can be fully customized to meet specific needs or preferences.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Rackmount Form Factor: &amp;lt;/strong&amp;gt; Designed to fit into a 1U rack space, making it suitable for data centers or other environments where space is at a premium.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Versatility:&amp;lt;/strong&amp;gt;  The Rackmount can be configured in various ways to suit different use cases, whether for development, testing, or deployment in a production environment.&lt;br /&gt;
===Specifications===&lt;br /&gt;
* Form Factor: 1U Rackmount design suitable for standard 19-inch racks.&lt;br /&gt;
* Raspberry Pi Compatibility: Specifically designed for Raspberry Pi 5.&lt;br /&gt;
* PCIe Expansion:Supports M.2 NVMe SSDs in 2230, 2242, 2260, and 2280 form factors. Provides a PCIe interface for high-speed data transfer.&lt;br /&gt;
* I/O Connectivity: Rear I2C interface via PogoPin connectors for external peripherals.&lt;br /&gt;
* GPIO4 pin for programmable LED control.&lt;br /&gt;
* LED Indicator:Red LED for device identification or status indication. Programmable through software to show different statuses.&lt;br /&gt;
* Modular Bays: Five bays for Raspberry Pi devices. One bay can be replaced with an OLED display module.&lt;br /&gt;
* OLED Display Specifications:0.91-inch screen size, 128x32 pixels. I2C communication protocol.&lt;br /&gt;
* Customizable display for system information.&lt;br /&gt;
* Physical Security:Hand-tightened screws for secure mounting of Raspberry Pi devices and OLED display.&lt;br /&gt;
* Ensures stability and ease of maintenance.&lt;br /&gt;
* Power Requirements: Compatibility with Raspberry Pi&#039;s standard power supply.&lt;br /&gt;
* Material and Construction: Durable metal construction for the rackmount chassis. High-quality components for reliable performance.&lt;br /&gt;
* Mounting Options: Standard rackmount holes for easy installation into a rack.&lt;br /&gt;
* Includes additional mounting accessories for different setups.&lt;br /&gt;
* Software Compatibility: Compatible with Raspberry Pi&#039;s operating system and software ecosystem.&lt;br /&gt;
* Support for GPIO programming for custom LED and device control.&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product outlook&lt;br /&gt;
[[ File:DR-0001-6.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Application Senario &lt;br /&gt;
[[ File:DR-0001-2.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&amp;lt;font color=red&amp;gt; NOTE: Raspberry Pis are not included in the package, additional purchase required!&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* Easy to assemble and maintain&lt;br /&gt;
[[ File:DR-0001-3.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
[[File:DR-0001-12.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Customizable OLED display screen, with a size of 0.91 inches&lt;br /&gt;
[[ File:DR-0001-4.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Ports Definitions and Featrues &lt;br /&gt;
Programmable I/O controlled UID indicator light, which can be programmed to control the LED blinking to indicate the device&#039;s location, facilitating faster troubleshooting and easier maintenance operations.&lt;br /&gt;
[[ File:DR-0001-5.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===How to connect OLED display to Raspberry Pi on GPIO pins===&lt;br /&gt;
* Please refer to following figure to connect OLED display to Raspberry Pi on GPIO. &lt;br /&gt;
&amp;lt;font color=red&amp;gt;NOTE: OLED&#039;s VCC should be connected to 3.3V power rail, Do not connect it to 5V power rail!!!&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[ File:DR-0001-7.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Grove Connector Support I2C and Uart&lt;br /&gt;
[[ File:DR-0001-8.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Accessories Dimension&lt;br /&gt;
[[ File:DR-0001-9.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* OLED assemble details&lt;br /&gt;
Please remove the protection film from acrylic panel and use the washer between OLED PCB board and acrylic panel.&lt;br /&gt;
[[ File:DR-0001-10.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* PCIe Expansion board for Raspberry Pi 5 only&lt;br /&gt;
The expansion board supports M.2 NVMe M-key SSD 2230/2242/2260/2280, and the board will be powered by Raspberry Pi 5 via PogoPin on the PCB board, please make sure the board&#039;s pogoins are contact well with the soldering point on back of the Raspberry Pi 5 on GPIO pins. &lt;br /&gt;
[[File:DR-0001-11.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to assemble it? ==&lt;br /&gt;
* Please note that there are several details you need to pay attention, plesae check out following figure.&lt;br /&gt;
[[ File:DR-0001-安装.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Package Includes==&lt;br /&gt;
* Following figure shows the details of the product: &lt;br /&gt;
[[ File:DR-0001-清单.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to enable I2C OLED display?==&lt;br /&gt;
* We assume that you are using Raspberry Pi OS 64bit(bookworm, the latest official image) &lt;br /&gt;
To enable I2C and UART on your Raspberry Pi, you can follow these detailed steps:&lt;br /&gt;
&lt;br /&gt;
===Enabling I2C===&lt;br /&gt;
* Method 1. Using the Raspberry Pi Configuration Tool: &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo raspi-config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to open the configuration tool. Navigate to `Interface Options`, Select `I2C` and enable it.&lt;br /&gt;
&lt;br /&gt;
* Method  2. Using the Command Line:&lt;br /&gt;
You can also enable I2C by editing the `/boot/firmware/config.txt` file and adding `dtparam=i2c_arm=on` if it&#039;s not already present, After making changes, reboot your Pi.&lt;br /&gt;
&lt;br /&gt;
===Verifying I2C===&lt;br /&gt;
* Install I2C tools using `sudo apt-get install -y i2c-tools`.&lt;br /&gt;
* Use &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
i2cdetect -y 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to scan for I2C devices, if you see `3c` means that the OLED display has been recognized by your Raspberry Pi. &lt;br /&gt;
&lt;br /&gt;
===Enabling UART===&lt;br /&gt;
* Method 1. Using the Raspberry Pi Configuration Tool:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo raspi-config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Go to `Interface Options`, Select `Serial` and enable it.&lt;br /&gt;
&amp;lt;pre&amp;gt; Note: This will also enable the login shell on the serial port. &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Method 2. Using the Command Line:&lt;br /&gt;
Edit `/boot/config.txt` and add `enable_uart=1`, save it and then reboot your Pi.&lt;br /&gt;
&lt;br /&gt;
===Accessing UART===&lt;br /&gt;
* Connect your Pi to a USB-to-TTL converter, On Windows, you may need to install drivers for the converter. on Linux just use a terminal program like `minicom`, `putty`, or `screen` to access the UART interface.&lt;br /&gt;
&lt;br /&gt;
Remember to check the documentation for your specific Raspberry Pi model, as the steps might vary slightly. If you need more detailed instructions or encounter any issues, refer to the [ https://www.raspberrypi.org/documentation/ ]  or community forums for additional support.&lt;br /&gt;
&lt;br /&gt;
===How to display customized information on OLED display? ===&lt;br /&gt;
* Final result&lt;br /&gt;
[[File:DR-0001 applications-01.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
==How to customize content on OLED ?==&lt;br /&gt;
* For example: If you want to display current IP address of wlan interface and the serial number of your Raspberry Pi 5, please follow next steps to configure it. &lt;br /&gt;
===Install Virtal environment package ===&lt;br /&gt;
* Open a terminal and typing following commands:&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo apt update &lt;br /&gt;
sudo apt upgrade -y &lt;br /&gt;
sudo apt -y install virtualenv &lt;br /&gt;
sudo usermod -a -G i2c,spi,gpio pi&lt;br /&gt;
sudo apt install python3-dev python3-pip python3-numpy libfreetype6-dev libjpeg-dev build-essential&lt;br /&gt;
sudo apt install libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev libportmidi-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:Install pre-insistpackages.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
[[File:Install-pre-insistpackage-02.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Create virtual environment===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
virtualenv -p python3 venv &lt;br /&gt;
cd venv/&lt;br /&gt;
source bin/activate &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Install SSD1306 driver and library for OLED 0.91===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pip install luma.oled&lt;br /&gt;
pip install psutil&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Clone luma.examples repository===&lt;br /&gt;
Log out and in again and clone this repository:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone https://github.com/rm-hull/luma.examples.git&lt;br /&gt;
cd luma.examples/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Install luma libraries===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -H pip install -e . --break-system-packages  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:Install luma libraries.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
===Test the demo ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd examples/&lt;br /&gt;
sudo python 3d_box.py --width=128 --height=32 -r 2 &lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=red&amp;gt;&amp;lt;p&amp;gt;NOTE: &amp;lt;br&amp;gt;&lt;br /&gt;
 --width=128 and --height=32 should be added to declear the OLED&#039;s resolution information. &amp;lt;br&amp;gt;&lt;br /&gt;
 -r 2  means --rotate 2 , Allowed values are: 0, 1, 2, 3  (default:0) &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
If you see a 3D-box rotating animation is in the middle of screen means that you have installed the OLED driver successfully! &lt;br /&gt;
[[File:Test demo 3dbox.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
[[File:Test demo 3dbox-2.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
and then press &amp;quot;Ctrol+C&amp;quot; abort the demo.&lt;br /&gt;
&lt;br /&gt;
==Use the demo code==&lt;br /&gt;
* There are a lot of demo codes in the examples folder, you can test it as you want. &lt;br /&gt;
for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo python carousel.py --width=128 --height=32 -r 2 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
It will display all information of your Raspberry Pi 5 and scrolling display. &lt;br /&gt;
===Customize the display on screen===&lt;br /&gt;
Modify the sys_info.py python file and adding your own function to show the information you want, do remember backup the origin file. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp sys_info.py sys_info.py.bak &lt;br /&gt;
vim.tiny sys_info.py &lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Press &#039;i&#039; to insert mode, and paste following lines into it. you can modify this file by other text editor what you like. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
# Copyright (c) 2014-2022 Richard Hull and contributors&lt;br /&gt;
# See LICENSE.rst for details.&lt;br /&gt;
# PYTHON_ARGCOMPLETE_OK&lt;br /&gt;
&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Display basic system information.&lt;br /&gt;
&lt;br /&gt;
Needs psutil (+ dependencies) installed::&lt;br /&gt;
&lt;br /&gt;
  $ sudo apt-get install python-dev&lt;br /&gt;
  $ sudo -H pip install psutil&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
import os&lt;br /&gt;
import sys&lt;br /&gt;
import time&lt;br /&gt;
from pathlib import Path&lt;br /&gt;
from datetime import datetime&lt;br /&gt;
import subprocess as sp&lt;br /&gt;
&lt;br /&gt;
if os.name != &#039;posix&#039;:&lt;br /&gt;
    sys.exit(f&#039;{os.name} platform is not supported&#039;)&lt;br /&gt;
&lt;br /&gt;
from demo_opts import get_device&lt;br /&gt;
from luma.core.render import canvas&lt;br /&gt;
from PIL import ImageFont&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    import psutil&lt;br /&gt;
except ImportError:&lt;br /&gt;
    print(&amp;quot;The psutil library was not found. Run &#039;sudo -H pip install psutil&#039; to install it.&amp;quot;)&lt;br /&gt;
    sys.exit()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# TODO: custom font bitmaps for up/down arrows&lt;br /&gt;
# TODO: Load histogram&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def bytes2human(n):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; bytes2human(10000)&lt;br /&gt;
    &#039;9K&#039;&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; bytes2human(100001221)&lt;br /&gt;
    &#039;95M&#039;&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    symbols = (&#039;K&#039;, &#039;M&#039;, &#039;G&#039;, &#039;T&#039;, &#039;P&#039;, &#039;E&#039;, &#039;Z&#039;, &#039;Y&#039;)&lt;br /&gt;
    prefix = {}&lt;br /&gt;
    for i, s in enumerate(symbols):&lt;br /&gt;
        prefix[s] = 1 &amp;lt;&amp;lt; (i + 1) * 10&lt;br /&gt;
    for s in reversed(symbols):&lt;br /&gt;
        if n &amp;gt;= prefix[s]:&lt;br /&gt;
            value = int(float(n) / prefix[s])&lt;br /&gt;
            return &#039;%s%s&#039; % (value, s)&lt;br /&gt;
    return f&amp;quot;{n}B&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def cpu_usage():&lt;br /&gt;
    # load average, uptime&lt;br /&gt;
    uptime = datetime.now() - datetime.fromtimestamp(psutil.boot_time())&lt;br /&gt;
    #av1, av2, av3 = os.getloadavg()&lt;br /&gt;
    #return &amp;quot;Ld:%.1f %.1f %.1f Up: %s&amp;quot; \&lt;br /&gt;
    #    % (av1, av2, av3, str(uptime).split(&#039;.&#039;)[0])&lt;br /&gt;
    return &amp;quot;Up: %s&amp;quot; % (str(uptime).split(&#039;.&#039;)[0])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def mem_usage():&lt;br /&gt;
    usage = psutil.virtual_memory()&lt;br /&gt;
    return &amp;quot;Mem: %s %.0f%%&amp;quot; \&lt;br /&gt;
        % (bytes2human(usage.used), 100 - usage.percent)&lt;br /&gt;
&lt;br /&gt;
def disk_usage(dir):&lt;br /&gt;
    usage = psutil.disk_usage(dir)&lt;br /&gt;
    return &amp;quot;SD:  %s %.0f%%&amp;quot; \&lt;br /&gt;
        % (bytes2human(usage.used), usage.percent)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def network(iface):&lt;br /&gt;
    stat = psutil.net_io_counters(pernic=True)[iface]&lt;br /&gt;
    return &amp;quot;%s: Tx%s, Rx%s&amp;quot; % \&lt;br /&gt;
           (iface, bytes2human(stat.bytes_sent), bytes2human(stat.bytes_recv))&lt;br /&gt;
&lt;br /&gt;
def mem_usage():&lt;br /&gt;
    usage = psutil.virtual_memory()&lt;br /&gt;
    return &amp;quot;Mem: %s %.0f%%&amp;quot; \&lt;br /&gt;
        % (bytes2human(usage.used), 100 - usage.percent)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def disk_usage(dir):&lt;br /&gt;
    usage = psutil.disk_usage(dir)&lt;br /&gt;
    return &amp;quot;SD:  %s %.0f%%&amp;quot; \&lt;br /&gt;
        % (bytes2human(usage.used), usage.percent)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def network(iface):&lt;br /&gt;
    stat = psutil.net_io_counters(pernic=True)[iface]&lt;br /&gt;
    return &amp;quot;%s: Tx%s, Rx%s&amp;quot; % \&lt;br /&gt;
           (iface, bytes2human(stat.bytes_sent), bytes2human(stat.bytes_recv))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def get_ip_address():&lt;br /&gt;
    ip = sp.getoutput(&#039;hostname -I&#039;)&lt;br /&gt;
    return &amp;quot;IP: %s&amp;quot; % ip&lt;br /&gt;
&lt;br /&gt;
def get_id():&lt;br /&gt;
    id_of_pi = sp.getoutput(&amp;quot;cat /proc/cpuinfo | grep -i serial| awk -F: &#039;{print $2}&#039;|xargs&amp;quot;)&lt;br /&gt;
    return &amp;quot;%s&amp;quot; % id_of_pi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def stats(device):&lt;br /&gt;
    # use custom font&lt;br /&gt;
    font_path = str(Path(__file__).resolve().parent.joinpath(&#039;fonts&#039;, &#039;C&amp;amp;C Red Alert [INET].ttf&#039;))&lt;br /&gt;
    #font_path = str(Path(__file__).resolve().parent.joinpath(&#039;fonts&#039;, &#039;DejaVuSansMono.ttf&#039;))&lt;br /&gt;
    font2 = ImageFont.truetype(font_path, 15)&lt;br /&gt;
&lt;br /&gt;
    with canvas(device) as draw:&lt;br /&gt;
        # draw.text((0, 0), cpu_usage(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
        draw.text((0, 0), get_id(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
        if device.height &amp;gt;= 32:&lt;br /&gt;
            #draw.text((0, 11), mem_usage(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            #draw.text((0, 16), disk_usage(&#039;/&#039;), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            draw.text((0, 16), get_ip_address(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        if device.height &amp;gt;= 64:&lt;br /&gt;
            draw.text((0, 26), disk_usage(&#039;/&#039;), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            try:&lt;br /&gt;
                draw.text((0, 38), network(&#039;wlan0&#039;), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            except KeyError:&lt;br /&gt;
                # no wifi enabled/available&lt;br /&gt;
                pass&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    while True:&lt;br /&gt;
        stats(device)&lt;br /&gt;
        time.sleep(5)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    try:&lt;br /&gt;
        device = get_device()&lt;br /&gt;
        main()&lt;br /&gt;
    except KeyboardInterrupt:&lt;br /&gt;
        pass&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Here let me explain to you what i did.&lt;br /&gt;
* adding &amp;quot; import subprocess as sp&amp;quot;, this will help me to execute some shell command in OS. &lt;br /&gt;
* adding following parts:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def get_ip_address():&lt;br /&gt;
    ip = sp.getoutput(&#039;hostname -I&#039;)&lt;br /&gt;
    return &amp;quot;IP: %s&amp;quot; % ip&lt;br /&gt;
&lt;br /&gt;
def get_id():&lt;br /&gt;
    id_of_pi = sp.getoutput(&amp;quot;cat /proc/cpuinfo | grep -i serial| awk -F: &#039;{print $2}&#039;|xargs&amp;quot;)&lt;br /&gt;
    return &amp;quot;%s&amp;quot; % id_of_pi&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
* get_ip_address will execute the command &amp;quot;hostname -I&amp;quot; in system and grab the IP address and return it to main process.&lt;br /&gt;
* get_id is to read /proc/cpuinfo file and grab the serial number and return to main process.&lt;br /&gt;
&lt;br /&gt;
===Use custom font===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   font_path = str(Path(__file__).resolve().parent.joinpath(&#039;fonts&#039;, &#039;C&amp;amp;C Red Alert [INET].ttf&#039;))&lt;br /&gt;
   font2 = ImageFont.truetype(font_path, 15)   # change font size to 15. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Modify the draw function===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  with canvas(device) as draw:&lt;br /&gt;
        # draw.text((0, 0), cpu_usage(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
        draw.text((0, 0), get_id(), font=font2, fill=&amp;quot;white&amp;quot;)         #####　draw id on screen at (0,0) position, (x,y)&lt;br /&gt;
        if device.height &amp;gt;= 32:&lt;br /&gt;
            #draw.text((0, 11), mem_usage(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            #draw.text((0, 16), disk_usage(&#039;/&#039;), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            draw.text((0, 16), get_ip_address(), font=font2, fill=&amp;quot;white&amp;quot;)   ####　draw text on (0,16) with IP address. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to create a systemd file to make it automatically start at boot up==&lt;br /&gt;
* Step1. create a shell script called it &#039;start_led.sh&#039; &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
cd /home/pi/venv/ &amp;amp;&amp;amp; source /home/pi/venv/bin/activate &lt;br /&gt;
/usr/bin/python3 /home/pi/luma.examples/examples/sys_info.py --width=128 --height=32 -r 2 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
save it and grant executable permission and test it.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x start_led.sh &lt;br /&gt;
./start_led.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
If if works properly, just press &amp;quot;ctrol+c&amp;quot; to abort the test.&lt;br /&gt;
* Step2. create a systemd file and enable it.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo vim.tiny /etc/systemd/system/rackmount_oled.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
And then, adding following lines:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Rackmount OLED service on RPi5&lt;br /&gt;
DefaultDependencies=no&lt;br /&gt;
StartLimitIntervalSec=60&lt;br /&gt;
StartLimitBurst=5&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
ExecStart=/bin/bash /home/pi/start_led.sh&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Save it and quit. &lt;br /&gt;
===Enable rackmount_oled.service===&lt;br /&gt;
* reload daemon&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl daemon-reload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Enable service&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo systemctl enable rackmount_oled.service &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Start service &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start rackmount_oled.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Restart service&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart rackmount_oled.service &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Stop service&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl stop rackmount_oled.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Disable service &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl disable rackmount_oled.service &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to enable PCIe function on Raspberry Pi 5?==&lt;br /&gt;
* To enable PCIe functionality on the Raspberry Pi 5, follow these steps:&lt;br /&gt;
&lt;br /&gt;
===1. Enable the PCIe External Connector:===&lt;br /&gt;
By default, the PCIe connector on the Raspberry Pi 5 is not enabled. To enable it, you need to add a configuration parameter to the `config.txt` file located in the `/boot/firmware` directory. You can use either of these lines:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dtparam=pciex1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After adding the line, reboot your Raspberry Pi for the changes to take effect.&lt;br /&gt;
&lt;br /&gt;
===2.Enable PCIe Gen 3.0 (Optional):===&lt;br /&gt;
The Raspberry Pi 5&#039;s PCIe connection is certified for Gen 2.0 speeds. However, if you want to attempt using Gen 3.0 speeds, add the following line to the `config.txt` file as well:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dtparam=pciex1_gen=3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 Be aware that the Raspberry Pi 5 is not certified for Gen 3.0 speeds, and using this setting may result in instability .&lt;br /&gt;
&lt;br /&gt;
===3.Booting from PCIe:===&lt;br /&gt;
If you intend to boot from a device connected via PCIe, such as an NVMe SSD, you will need to modify the boot order in the EEPROM. Use the following command to edit the EEPROM configuration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &lt;br /&gt;
sudo apt upgrade -y &lt;br /&gt;
sudo rpi-eeprom-config --edit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then, change the `BOOT_ORDER` line to include NVMe in the boot order:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BOOT_ORDER=0xf416&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This setting will make the Raspberry Pi attempt to boot from an NVMe device connected to the PCIe port .&lt;br /&gt;
===4. Kernel Compilation (Advanced):===&lt;br /&gt;
If you need to compile the kernel to add support for specific PCIe devices, you can follow the steps outlined in the Raspberry Pi documentation. This involves cloning the Raspberry Pi kernel repository, configuring the kernel with `make menuconfig`, and enabling the necessary modules for your devices .&lt;br /&gt;
Remember to always check the compatibility of the devices you intend to use with the Raspberry Pi 5&#039;s PCIe interface, as not all devices may be supported out of the box.&lt;br /&gt;
&lt;br /&gt;
==How to light up identical LED? ==&lt;br /&gt;
To light up UID LED indicator on a Raspberry Pi 5, you&#039;ll make sure the GPIO Pin of the UID LED connected to. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GPIO (General Purpose Input/Output) pins on the Raspberry Pi.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Steps===&lt;br /&gt;
* 1. Identify GPIO Pins: &amp;lt;font color=red&amp;gt;GPIO4&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* 2. Power On:&lt;br /&gt;
Make sure your Raspberry Pi is powered off before connecting the LED. Once everything is connected, you can power on your Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
* 3. Software Setup:&lt;br /&gt;
You&#039;ll need to write a small program to turn the GPIO pin on and off to control the LED. You can use Python with the `gpiozero` library or `RPi.GPIO` library to control the GPIO pins.&lt;br /&gt;
&lt;br /&gt;
===Example Python Code with gpiozero:===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from gpiozero import LED&lt;br /&gt;
from time import sleep&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
led = LED(&#039;GPIO4&#039;)&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    led.on()&lt;br /&gt;
    sleep(1)&lt;br /&gt;
    led.off()&lt;br /&gt;
    sleep(1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Example Python Code with RPi.GPIO:===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import RPi.GPIO as GPIO&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
# Set the GPIO mode&lt;br /&gt;
GPIO.setmode(GPIO.BCM)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GPIO_PIN = 4&lt;br /&gt;
&lt;br /&gt;
# Set up the GPIO pin as an output channel&lt;br /&gt;
GPIO.setup(GPIO_PIN, GPIO.OUT)&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    GPIO.output(GPIO_PIN, GPIO.HIGH)  # Turn on the LED&lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
    GPIO.output(GPIO_PIN, GPIO.LOW)   # Turn off the LED&lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
&lt;br /&gt;
# Clean up the GPIO pins before exiting the program&lt;br /&gt;
GPIO.cleanup()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Safety Tips:===&lt;br /&gt;
* Be careful not to short any pins on the Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
=== SSD1306 OLED Black-Screen Debugging Report &amp;amp; Operation Guide===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;Target hardware:&amp;lt;/strong&amp;gt; 0.91&amp;quot; OLED, 128×32 px, SSD1306, I2C, address 0x3C, Raspberry Pi 5&lt;br /&gt;
&amp;lt;strong&amp;gt;Software:&amp;lt;/strong&amp;gt; luma.oled 3.15.0, luma.core 2.6.0, Python 3.13, smbus2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1. Executive Summary — What Was Actually Wrong ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;Nothing was wrong with the code, the luma library, or the SSD1306 register configuration.&amp;lt;/strong&amp;gt;&lt;br /&gt;
No library or example source code was modified. The failures came from hardware and&lt;br /&gt;
configuration, in one layers:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;A parameter mismatch in the examples.&amp;lt;/strong&amp;gt;  The examples in this directory default to&lt;br /&gt;
  `ssd1305 / 128×64`; this panel is `ssd1306 / 128×32`. Running without parameters&lt;br /&gt;
  produces a black or garbled screen. The fix is to pass the correct display, interface,&lt;br /&gt;
  geometry and address — done via the config file `ssd1306_128x32.conf`.&lt;br /&gt;
&lt;br /&gt;
* ssd1306_128x32.conf contents:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--display=ssd1306&lt;br /&gt;
--interface=i2c&lt;br /&gt;
--i2c-port=1&lt;br /&gt;
--i2c-address=0x3c&lt;br /&gt;
--width=128&lt;br /&gt;
--height=32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Put this configuration file to your demo code location:&lt;br /&gt;
[[ File:Democodeconfig.png|left| 800px ]] &lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* How to execute with config file&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo python3 demo.py -f ssd1306_128x32.conf &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. What Was Done, Step by Step (Method and Basis)===&lt;br /&gt;
&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
     |+ Diagnosis — locating the fault&lt;br /&gt;
     ! Method !! Basis / Reasoning&lt;br /&gt;
     |-&lt;br /&gt;
     | Bus scan with &amp;lt;code&amp;gt;i2cdetect&amp;lt;/code&amp;gt; || An ACK at 0x3C proves all four wires&lt;br /&gt;
   (VCC/GND/SDA/SCL) are connected and the driver IC is powered&lt;br /&gt;
     |-&lt;br /&gt;
     | Source inspection of ssd1306 in luma.oled 3.15.0 || The 128×32 init sequence&lt;br /&gt;
   (multiplex 0x1F, compins 0x02, charge pump 0x14) matches the datasheet standard — a&lt;br /&gt;
   register-level bug was ruled out on evidence&lt;br /&gt;
     |-&lt;br /&gt;
     | Raw-register write of 0xA5 (force all-on) || This command bypasses GDDRAM; a&lt;br /&gt;
   healthy panel must glow. No light = fault in the high-voltage path (charge pump /&lt;br /&gt;
   panel / flex cable)&lt;br /&gt;
     |-&lt;br /&gt;
     | Status-register read before/after DISPLAY ON/OFF commands || Per the SSD1306&lt;br /&gt;
   datasheet, bit 6 is the display ON/OFF flag. It flipped correctly, proving the chip&lt;br /&gt;
   executes commands — fault isolated to the panel side&lt;br /&gt;
     |-&lt;br /&gt;
     | 5 consecutive bus scans + 10 consecutive status reads || All values stable and&lt;br /&gt;
   identical — ruled out loose wiring and parasitic power&lt;br /&gt;
     |}&lt;br /&gt;
&lt;br /&gt;
===3. Files Created / Modified===&lt;br /&gt;
&lt;br /&gt;
  {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
     |+ Fixes and deliverables&lt;br /&gt;
     ! File !! Type !! Description&lt;br /&gt;
     |-&lt;br /&gt;
     | &amp;lt;code&amp;gt;ssd1306_128x32.conf&amp;lt;/code&amp;gt; || Fixed || Initially written in INI format,&lt;br /&gt;
   causing &amp;quot;unrecognized arguments&amp;quot;. Based on the source of&lt;br /&gt;
   &amp;lt;code&amp;gt;luma.core.cmdline.load_config&amp;lt;/code&amp;gt; (reads line by line, no whitespace&lt;br /&gt;
   splitting), rewritten as one &amp;lt;code&amp;gt;--key=value&amp;lt;/code&amp;gt; per line; demo.py then ran&lt;br /&gt;
   successfully&lt;br /&gt;
     |-&lt;br /&gt;
     | &amp;lt;code&amp;gt;ssd1306_raw.py&amp;lt;/code&amp;gt; || Created || Library-free SSD1306 driver; writes&lt;br /&gt;
   registers directly via smbus2 (PIL used only for pixel rendering)&lt;br /&gt;
     |-&lt;br /&gt;
     | &amp;lt;code&amp;gt;OLED_128x32_I2C_manual.md&amp;lt;/code&amp;gt; || Created / updated || Bilingual&lt;br /&gt;
   operation manual; added the regulator/supply-voltage rule and the hardware-failure&lt;br /&gt;
   criterion&lt;br /&gt;
     |-&lt;br /&gt;
     | &amp;lt;code&amp;gt;SSD1306_Debug_Report_EN.md&amp;lt;/code&amp;gt; || Created || Full English debugging&lt;br /&gt;
   report and operation guide&lt;br /&gt;
     |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
No files in luma.oled / luma.core or the example scripts were modified.&lt;br /&gt;
&lt;br /&gt;
===4. Final Working Configuration===&lt;br /&gt;
&lt;br /&gt;
* Module: bare 0.91&amp;quot; 128×32 SSD1306, &amp;lt;strong&amp;gt;no onboard regulator&amp;lt;/strong&amp;gt;&lt;br /&gt;
* Wiring: VCC → &amp;lt;strong&amp;gt;3.3 V&amp;lt;/strong&amp;gt; (pin 1), GND → GND, SDA → GPIO2 (pin 3), SCL → GPIO3 (pin 5)&lt;br /&gt;
* No RST/RES connection needed (I2C interface)&lt;br /&gt;
* I2C address: `0x3C`&lt;br /&gt;
&lt;br /&gt;
=== 5. Operating Instructions===&lt;br /&gt;
&lt;br /&gt;
==== Run any luma example in this directory====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python demo.py    -f ssd1306_128x32.conf&lt;br /&gt;
python clock.py   -f ssd1306_128x32.conf&lt;br /&gt;
python pi_logo.py -f ssd1306_128x32.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or pass parameters explicitly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python demo.py -d ssd1306 -i i2c --i2c-port 1 --i2c-address 0x3c --width 128 --height 32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Minimal code (luma)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from luma.core.interface.serial import i2c&lt;br /&gt;
from luma.oled.device import ssd1306&lt;br /&gt;
from luma.core.render import canvas&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
device = ssd1306(i2c(port=1, address=0x3C), width=128, height=32)&lt;br /&gt;
with canvas(device) as draw:&lt;br /&gt;
    draw.rectangle(device.bounding_box, outline=&amp;quot;white&amp;quot;)&lt;br /&gt;
    draw.text((4, 10), &amp;quot;OK 128x32&amp;quot;, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===6. Black-Screen Decision Tree (for future modules)===&lt;br /&gt;
&lt;br /&gt;
* `i2cdetect -y 1` shows the address?&lt;br /&gt;
  &amp;lt;strong&amp;gt;No&amp;lt;/strong&amp;gt; → power/wiring fault: measure VCC-GND **at the module&#039;s solder pads**, check SDA=pin 3, SCL=pin 5, try fresh dupont wires.&lt;br /&gt;
  &amp;lt;strong&amp;gt;Yes&amp;lt;/strong&amp;gt; → continue.&lt;br /&gt;
&lt;br /&gt;
* Run `python oled_diagnose.py`. Any step lights the panel?&lt;br /&gt;
  &amp;lt;strong&amp;gt;Yes&amp;lt;/strong&amp;gt; → software/parameter issue; use the matching parameters (`-d ssd1306 --width 128 --height 32 --i2c-address 0x3c`).&lt;br /&gt;
  &amp;lt;strong&amp;gt;No&amp;lt;/strong&amp;gt; → continue.&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
* 1U Rackmount for Raspberry Pi 5 with M.2 NVMe SSD support.&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=DR-0001&amp;diff=16574</id>
		<title>DR-0001</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=DR-0001&amp;diff=16574"/>
		<updated>2026-08-21T06:15:07Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: /* 6. Black-Screen Decision Tree (for future modules) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==1U Rackmount for Raspberry Pi 5 ==&lt;br /&gt;
* Purchase URL: [ https://52pi.com ] or [ https://deskpi.com ]&lt;br /&gt;
[[File:DR-0001-1.jpg|right|320px]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
This is an upgraded version of a 1U Rackmount designed for compatibility with both Raspberry Pi 5 . It features a motherboard that supports PCIe expansion, allowing the PCIe interface of the Raspberry Pi 5 to be extended to accommodate an M.2 NVMe SSD in 2230/2242/2260/2280 form factors. The expansion board also routes the Raspberry Pi&#039;s 5V and GND, SDA, and SCL pins to the rear through PogoPin connectors, providing I2C interface peripherals in a Grove format. Additionally, a red LED is included on the board for the Raspberry Pi ID signal pin, which can be programmed to indicate the current device by controlling the GPIO4 pin&#039;s high or low level, acting as a programmable device ID signal light.&lt;br /&gt;
&lt;br /&gt;
The Rackmount supports the connection of up to five Raspberry Pi devices and can also be configured with an OLED display frame in place of one of the Raspberry Pi slots. These components can be easily adjusted and removed due to the use of hand-tightened screws. The OLED display features a 0.91-inch screen and communicates with the Raspberry Pi via I2C protocol, displaying real-time information such as CPU status, memory status, IP information, and serial numbers. The content displayed on the OLED can be fully customized.&lt;br /&gt;
==Features==&lt;br /&gt;
* &amp;lt;strong&amp;gt;Compatibility:&amp;lt;/strong&amp;gt; Designed to work with both Raspberry Pi 5.&lt;br /&gt;
* &amp;lt;strong&amp;gt;PCIe Expansion Support:&amp;lt;/strong&amp;gt;  Includes a motherboard that enables PCIe expansion, allowing the connection of M.2 NVMe SSDs in various form factors (2230/2242/2260/2280).&lt;br /&gt;
* &amp;lt;strong&amp;gt;I2C Interface: &amp;lt;/strong&amp;gt; The board routes the Raspberry Pi&#039;s 5V, GND, SDA, and SCL pins to the rear through PogoPin connectors, offering I2C interface peripherals in a Grove format.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Programmable LED Indicator: &amp;lt;/strong&amp;gt; A red LED on the board serves as a programmable device ID signal, controllable via the GPIO4 pin to indicate the status or identity of the device.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Modular Design:&amp;lt;/strong&amp;gt;  Supports the integration of up to five Raspberry Pi devices, with the option to replace one slot with an OLED display frame.&lt;br /&gt;
* &amp;lt;strong&amp;gt;OLED Display Integration:&amp;lt;/strong&amp;gt;  The option to include a 0.91-inch OLED screen that communicates with the Raspberry Pi via I2C, displaying customizable information such as CPU usage, memory status, IP address, and serial numbers.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Easy Assembly and Disassembly:&amp;lt;/strong&amp;gt;  Components are secured with hand-tightened screws, allowing for convenient adjustments and removal.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Customizable Display Content: &amp;lt;/strong&amp;gt; The information displayed on the OLED screen can be fully customized to meet specific needs or preferences.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Rackmount Form Factor: &amp;lt;/strong&amp;gt; Designed to fit into a 1U rack space, making it suitable for data centers or other environments where space is at a premium.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Versatility:&amp;lt;/strong&amp;gt;  The Rackmount can be configured in various ways to suit different use cases, whether for development, testing, or deployment in a production environment.&lt;br /&gt;
===Specifications===&lt;br /&gt;
* Form Factor: 1U Rackmount design suitable for standard 19-inch racks.&lt;br /&gt;
* Raspberry Pi Compatibility: Specifically designed for Raspberry Pi 5.&lt;br /&gt;
* PCIe Expansion:Supports M.2 NVMe SSDs in 2230, 2242, 2260, and 2280 form factors. Provides a PCIe interface for high-speed data transfer.&lt;br /&gt;
* I/O Connectivity: Rear I2C interface via PogoPin connectors for external peripherals.&lt;br /&gt;
* GPIO4 pin for programmable LED control.&lt;br /&gt;
* LED Indicator:Red LED for device identification or status indication. Programmable through software to show different statuses.&lt;br /&gt;
* Modular Bays: Five bays for Raspberry Pi devices. One bay can be replaced with an OLED display module.&lt;br /&gt;
* OLED Display Specifications:0.91-inch screen size, 128x32 pixels. I2C communication protocol.&lt;br /&gt;
* Customizable display for system information.&lt;br /&gt;
* Physical Security:Hand-tightened screws for secure mounting of Raspberry Pi devices and OLED display.&lt;br /&gt;
* Ensures stability and ease of maintenance.&lt;br /&gt;
* Power Requirements: Compatibility with Raspberry Pi&#039;s standard power supply.&lt;br /&gt;
* Material and Construction: Durable metal construction for the rackmount chassis. High-quality components for reliable performance.&lt;br /&gt;
* Mounting Options: Standard rackmount holes for easy installation into a rack.&lt;br /&gt;
* Includes additional mounting accessories for different setups.&lt;br /&gt;
* Software Compatibility: Compatible with Raspberry Pi&#039;s operating system and software ecosystem.&lt;br /&gt;
* Support for GPIO programming for custom LED and device control.&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product outlook&lt;br /&gt;
[[ File:DR-0001-6.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Application Senario &lt;br /&gt;
[[ File:DR-0001-2.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&amp;lt;font color=red&amp;gt; NOTE: Raspberry Pis are not included in the package, additional purchase required!&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* Easy to assemble and maintain&lt;br /&gt;
[[ File:DR-0001-3.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
[[File:DR-0001-12.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Customizable OLED display screen, with a size of 0.91 inches&lt;br /&gt;
[[ File:DR-0001-4.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Ports Definitions and Featrues &lt;br /&gt;
Programmable I/O controlled UID indicator light, which can be programmed to control the LED blinking to indicate the device&#039;s location, facilitating faster troubleshooting and easier maintenance operations.&lt;br /&gt;
[[ File:DR-0001-5.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===How to connect OLED display to Raspberry Pi on GPIO pins===&lt;br /&gt;
* Please refer to following figure to connect OLED display to Raspberry Pi on GPIO. &lt;br /&gt;
&amp;lt;font color=red&amp;gt;NOTE: OLED&#039;s VCC should be connected to 3.3V power rail, Do not connect it to 5V power rail!!!&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[ File:DR-0001-7.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Grove Connector Support I2C and Uart&lt;br /&gt;
[[ File:DR-0001-8.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Accessories Dimension&lt;br /&gt;
[[ File:DR-0001-9.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* OLED assemble details&lt;br /&gt;
Please remove the protection film from acrylic panel and use the washer between OLED PCB board and acrylic panel.&lt;br /&gt;
[[ File:DR-0001-10.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* PCIe Expansion board for Raspberry Pi 5 only&lt;br /&gt;
The expansion board supports M.2 NVMe M-key SSD 2230/2242/2260/2280, and the board will be powered by Raspberry Pi 5 via PogoPin on the PCB board, please make sure the board&#039;s pogoins are contact well with the soldering point on back of the Raspberry Pi 5 on GPIO pins. &lt;br /&gt;
[[File:DR-0001-11.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to assemble it? ==&lt;br /&gt;
* Please note that there are several details you need to pay attention, plesae check out following figure.&lt;br /&gt;
[[ File:DR-0001-安装.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Package Includes==&lt;br /&gt;
* Following figure shows the details of the product: &lt;br /&gt;
[[ File:DR-0001-清单.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to enable I2C OLED display?==&lt;br /&gt;
* We assume that you are using Raspberry Pi OS 64bit(bookworm, the latest official image) &lt;br /&gt;
To enable I2C and UART on your Raspberry Pi, you can follow these detailed steps:&lt;br /&gt;
&lt;br /&gt;
===Enabling I2C===&lt;br /&gt;
* Method 1. Using the Raspberry Pi Configuration Tool: &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo raspi-config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to open the configuration tool. Navigate to `Interface Options`, Select `I2C` and enable it.&lt;br /&gt;
&lt;br /&gt;
* Method  2. Using the Command Line:&lt;br /&gt;
You can also enable I2C by editing the `/boot/firmware/config.txt` file and adding `dtparam=i2c_arm=on` if it&#039;s not already present, After making changes, reboot your Pi.&lt;br /&gt;
&lt;br /&gt;
===Verifying I2C===&lt;br /&gt;
* Install I2C tools using `sudo apt-get install -y i2c-tools`.&lt;br /&gt;
* Use &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
i2cdetect -y 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to scan for I2C devices, if you see `3c` means that the OLED display has been recognized by your Raspberry Pi. &lt;br /&gt;
&lt;br /&gt;
===Enabling UART===&lt;br /&gt;
* Method 1. Using the Raspberry Pi Configuration Tool:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo raspi-config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Go to `Interface Options`, Select `Serial` and enable it.&lt;br /&gt;
&amp;lt;pre&amp;gt; Note: This will also enable the login shell on the serial port. &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Method 2. Using the Command Line:&lt;br /&gt;
Edit `/boot/config.txt` and add `enable_uart=1`, save it and then reboot your Pi.&lt;br /&gt;
&lt;br /&gt;
===Accessing UART===&lt;br /&gt;
* Connect your Pi to a USB-to-TTL converter, On Windows, you may need to install drivers for the converter. on Linux just use a terminal program like `minicom`, `putty`, or `screen` to access the UART interface.&lt;br /&gt;
&lt;br /&gt;
Remember to check the documentation for your specific Raspberry Pi model, as the steps might vary slightly. If you need more detailed instructions or encounter any issues, refer to the [ https://www.raspberrypi.org/documentation/ ]  or community forums for additional support.&lt;br /&gt;
&lt;br /&gt;
===How to display customized information on OLED display? ===&lt;br /&gt;
* Final result&lt;br /&gt;
[[File:DR-0001 applications-01.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
==How to customize content on OLED ?==&lt;br /&gt;
* For example: If you want to display current IP address of wlan interface and the serial number of your Raspberry Pi 5, please follow next steps to configure it. &lt;br /&gt;
===Install Virtal environment package ===&lt;br /&gt;
* Open a terminal and typing following commands:&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo apt update &lt;br /&gt;
sudo apt upgrade -y &lt;br /&gt;
sudo apt -y install virtualenv &lt;br /&gt;
sudo usermod -a -G i2c,spi,gpio pi&lt;br /&gt;
sudo apt install python3-dev python3-pip python3-numpy libfreetype6-dev libjpeg-dev build-essential&lt;br /&gt;
sudo apt install libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev libportmidi-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:Install pre-insistpackages.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
[[File:Install-pre-insistpackage-02.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Create virtual environment===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
virtualenv -p python3 venv &lt;br /&gt;
cd venv/&lt;br /&gt;
source bin/activate &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Install SSD1306 driver and library for OLED 0.91===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pip install luma.oled&lt;br /&gt;
pip install psutil&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Clone luma.examples repository===&lt;br /&gt;
Log out and in again and clone this repository:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone https://github.com/rm-hull/luma.examples.git&lt;br /&gt;
cd luma.examples/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Install luma libraries===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -H pip install -e . --break-system-packages  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:Install luma libraries.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
===Test the demo ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd examples/&lt;br /&gt;
sudo python 3d_box.py --width=128 --height=32 -r 2 &lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=red&amp;gt;&amp;lt;p&amp;gt;NOTE: &amp;lt;br&amp;gt;&lt;br /&gt;
 --width=128 and --height=32 should be added to declear the OLED&#039;s resolution information. &amp;lt;br&amp;gt;&lt;br /&gt;
 -r 2  means --rotate 2 , Allowed values are: 0, 1, 2, 3  (default:0) &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
If you see a 3D-box rotating animation is in the middle of screen means that you have installed the OLED driver successfully! &lt;br /&gt;
[[File:Test demo 3dbox.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
[[File:Test demo 3dbox-2.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
and then press &amp;quot;Ctrol+C&amp;quot; abort the demo.&lt;br /&gt;
&lt;br /&gt;
==Use the demo code==&lt;br /&gt;
* There are a lot of demo codes in the examples folder, you can test it as you want. &lt;br /&gt;
for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo python carousel.py --width=128 --height=32 -r 2 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
It will display all information of your Raspberry Pi 5 and scrolling display. &lt;br /&gt;
===Customize the display on screen===&lt;br /&gt;
Modify the sys_info.py python file and adding your own function to show the information you want, do remember backup the origin file. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp sys_info.py sys_info.py.bak &lt;br /&gt;
vim.tiny sys_info.py &lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Press &#039;i&#039; to insert mode, and paste following lines into it. you can modify this file by other text editor what you like. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
# Copyright (c) 2014-2022 Richard Hull and contributors&lt;br /&gt;
# See LICENSE.rst for details.&lt;br /&gt;
# PYTHON_ARGCOMPLETE_OK&lt;br /&gt;
&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Display basic system information.&lt;br /&gt;
&lt;br /&gt;
Needs psutil (+ dependencies) installed::&lt;br /&gt;
&lt;br /&gt;
  $ sudo apt-get install python-dev&lt;br /&gt;
  $ sudo -H pip install psutil&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
import os&lt;br /&gt;
import sys&lt;br /&gt;
import time&lt;br /&gt;
from pathlib import Path&lt;br /&gt;
from datetime import datetime&lt;br /&gt;
import subprocess as sp&lt;br /&gt;
&lt;br /&gt;
if os.name != &#039;posix&#039;:&lt;br /&gt;
    sys.exit(f&#039;{os.name} platform is not supported&#039;)&lt;br /&gt;
&lt;br /&gt;
from demo_opts import get_device&lt;br /&gt;
from luma.core.render import canvas&lt;br /&gt;
from PIL import ImageFont&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    import psutil&lt;br /&gt;
except ImportError:&lt;br /&gt;
    print(&amp;quot;The psutil library was not found. Run &#039;sudo -H pip install psutil&#039; to install it.&amp;quot;)&lt;br /&gt;
    sys.exit()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# TODO: custom font bitmaps for up/down arrows&lt;br /&gt;
# TODO: Load histogram&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def bytes2human(n):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; bytes2human(10000)&lt;br /&gt;
    &#039;9K&#039;&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; bytes2human(100001221)&lt;br /&gt;
    &#039;95M&#039;&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    symbols = (&#039;K&#039;, &#039;M&#039;, &#039;G&#039;, &#039;T&#039;, &#039;P&#039;, &#039;E&#039;, &#039;Z&#039;, &#039;Y&#039;)&lt;br /&gt;
    prefix = {}&lt;br /&gt;
    for i, s in enumerate(symbols):&lt;br /&gt;
        prefix[s] = 1 &amp;lt;&amp;lt; (i + 1) * 10&lt;br /&gt;
    for s in reversed(symbols):&lt;br /&gt;
        if n &amp;gt;= prefix[s]:&lt;br /&gt;
            value = int(float(n) / prefix[s])&lt;br /&gt;
            return &#039;%s%s&#039; % (value, s)&lt;br /&gt;
    return f&amp;quot;{n}B&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def cpu_usage():&lt;br /&gt;
    # load average, uptime&lt;br /&gt;
    uptime = datetime.now() - datetime.fromtimestamp(psutil.boot_time())&lt;br /&gt;
    #av1, av2, av3 = os.getloadavg()&lt;br /&gt;
    #return &amp;quot;Ld:%.1f %.1f %.1f Up: %s&amp;quot; \&lt;br /&gt;
    #    % (av1, av2, av3, str(uptime).split(&#039;.&#039;)[0])&lt;br /&gt;
    return &amp;quot;Up: %s&amp;quot; % (str(uptime).split(&#039;.&#039;)[0])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def mem_usage():&lt;br /&gt;
    usage = psutil.virtual_memory()&lt;br /&gt;
    return &amp;quot;Mem: %s %.0f%%&amp;quot; \&lt;br /&gt;
        % (bytes2human(usage.used), 100 - usage.percent)&lt;br /&gt;
&lt;br /&gt;
def disk_usage(dir):&lt;br /&gt;
    usage = psutil.disk_usage(dir)&lt;br /&gt;
    return &amp;quot;SD:  %s %.0f%%&amp;quot; \&lt;br /&gt;
        % (bytes2human(usage.used), usage.percent)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def network(iface):&lt;br /&gt;
    stat = psutil.net_io_counters(pernic=True)[iface]&lt;br /&gt;
    return &amp;quot;%s: Tx%s, Rx%s&amp;quot; % \&lt;br /&gt;
           (iface, bytes2human(stat.bytes_sent), bytes2human(stat.bytes_recv))&lt;br /&gt;
&lt;br /&gt;
def mem_usage():&lt;br /&gt;
    usage = psutil.virtual_memory()&lt;br /&gt;
    return &amp;quot;Mem: %s %.0f%%&amp;quot; \&lt;br /&gt;
        % (bytes2human(usage.used), 100 - usage.percent)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def disk_usage(dir):&lt;br /&gt;
    usage = psutil.disk_usage(dir)&lt;br /&gt;
    return &amp;quot;SD:  %s %.0f%%&amp;quot; \&lt;br /&gt;
        % (bytes2human(usage.used), usage.percent)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def network(iface):&lt;br /&gt;
    stat = psutil.net_io_counters(pernic=True)[iface]&lt;br /&gt;
    return &amp;quot;%s: Tx%s, Rx%s&amp;quot; % \&lt;br /&gt;
           (iface, bytes2human(stat.bytes_sent), bytes2human(stat.bytes_recv))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def get_ip_address():&lt;br /&gt;
    ip = sp.getoutput(&#039;hostname -I&#039;)&lt;br /&gt;
    return &amp;quot;IP: %s&amp;quot; % ip&lt;br /&gt;
&lt;br /&gt;
def get_id():&lt;br /&gt;
    id_of_pi = sp.getoutput(&amp;quot;cat /proc/cpuinfo | grep -i serial| awk -F: &#039;{print $2}&#039;|xargs&amp;quot;)&lt;br /&gt;
    return &amp;quot;%s&amp;quot; % id_of_pi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def stats(device):&lt;br /&gt;
    # use custom font&lt;br /&gt;
    font_path = str(Path(__file__).resolve().parent.joinpath(&#039;fonts&#039;, &#039;C&amp;amp;C Red Alert [INET].ttf&#039;))&lt;br /&gt;
    #font_path = str(Path(__file__).resolve().parent.joinpath(&#039;fonts&#039;, &#039;DejaVuSansMono.ttf&#039;))&lt;br /&gt;
    font2 = ImageFont.truetype(font_path, 15)&lt;br /&gt;
&lt;br /&gt;
    with canvas(device) as draw:&lt;br /&gt;
        # draw.text((0, 0), cpu_usage(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
        draw.text((0, 0), get_id(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
        if device.height &amp;gt;= 32:&lt;br /&gt;
            #draw.text((0, 11), mem_usage(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            #draw.text((0, 16), disk_usage(&#039;/&#039;), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            draw.text((0, 16), get_ip_address(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        if device.height &amp;gt;= 64:&lt;br /&gt;
            draw.text((0, 26), disk_usage(&#039;/&#039;), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            try:&lt;br /&gt;
                draw.text((0, 38), network(&#039;wlan0&#039;), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            except KeyError:&lt;br /&gt;
                # no wifi enabled/available&lt;br /&gt;
                pass&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    while True:&lt;br /&gt;
        stats(device)&lt;br /&gt;
        time.sleep(5)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    try:&lt;br /&gt;
        device = get_device()&lt;br /&gt;
        main()&lt;br /&gt;
    except KeyboardInterrupt:&lt;br /&gt;
        pass&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Here let me explain to you what i did.&lt;br /&gt;
* adding &amp;quot; import subprocess as sp&amp;quot;, this will help me to execute some shell command in OS. &lt;br /&gt;
* adding following parts:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def get_ip_address():&lt;br /&gt;
    ip = sp.getoutput(&#039;hostname -I&#039;)&lt;br /&gt;
    return &amp;quot;IP: %s&amp;quot; % ip&lt;br /&gt;
&lt;br /&gt;
def get_id():&lt;br /&gt;
    id_of_pi = sp.getoutput(&amp;quot;cat /proc/cpuinfo | grep -i serial| awk -F: &#039;{print $2}&#039;|xargs&amp;quot;)&lt;br /&gt;
    return &amp;quot;%s&amp;quot; % id_of_pi&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
* get_ip_address will execute the command &amp;quot;hostname -I&amp;quot; in system and grab the IP address and return it to main process.&lt;br /&gt;
* get_id is to read /proc/cpuinfo file and grab the serial number and return to main process.&lt;br /&gt;
&lt;br /&gt;
===Use custom font===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   font_path = str(Path(__file__).resolve().parent.joinpath(&#039;fonts&#039;, &#039;C&amp;amp;C Red Alert [INET].ttf&#039;))&lt;br /&gt;
   font2 = ImageFont.truetype(font_path, 15)   # change font size to 15. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Modify the draw function===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  with canvas(device) as draw:&lt;br /&gt;
        # draw.text((0, 0), cpu_usage(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
        draw.text((0, 0), get_id(), font=font2, fill=&amp;quot;white&amp;quot;)         #####　draw id on screen at (0,0) position, (x,y)&lt;br /&gt;
        if device.height &amp;gt;= 32:&lt;br /&gt;
            #draw.text((0, 11), mem_usage(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            #draw.text((0, 16), disk_usage(&#039;/&#039;), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            draw.text((0, 16), get_ip_address(), font=font2, fill=&amp;quot;white&amp;quot;)   ####　draw text on (0,16) with IP address. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to create a systemd file to make it automatically start at boot up==&lt;br /&gt;
* Step1. create a shell script called it &#039;start_led.sh&#039; &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
cd /home/pi/venv/ &amp;amp;&amp;amp; source /home/pi/venv/bin/activate &lt;br /&gt;
/usr/bin/python3 /home/pi/luma.examples/examples/sys_info.py --width=128 --height=32 -r 2 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
save it and grant executable permission and test it.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x start_led.sh &lt;br /&gt;
./start_led.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
If if works properly, just press &amp;quot;ctrol+c&amp;quot; to abort the test.&lt;br /&gt;
* Step2. create a systemd file and enable it.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo vim.tiny /etc/systemd/system/rackmount_oled.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
And then, adding following lines:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Rackmount OLED service on RPi5&lt;br /&gt;
DefaultDependencies=no&lt;br /&gt;
StartLimitIntervalSec=60&lt;br /&gt;
StartLimitBurst=5&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
ExecStart=/bin/bash /home/pi/start_led.sh&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Save it and quit. &lt;br /&gt;
===Enable rackmount_oled.service===&lt;br /&gt;
* reload daemon&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl daemon-reload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Enable service&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo systemctl enable rackmount_oled.service &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Start service &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start rackmount_oled.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Restart service&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart rackmount_oled.service &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Stop service&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl stop rackmount_oled.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Disable service &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl disable rackmount_oled.service &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to enable PCIe function on Raspberry Pi 5?==&lt;br /&gt;
* To enable PCIe functionality on the Raspberry Pi 5, follow these steps:&lt;br /&gt;
&lt;br /&gt;
===1. Enable the PCIe External Connector:===&lt;br /&gt;
By default, the PCIe connector on the Raspberry Pi 5 is not enabled. To enable it, you need to add a configuration parameter to the `config.txt` file located in the `/boot/firmware` directory. You can use either of these lines:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dtparam=pciex1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After adding the line, reboot your Raspberry Pi for the changes to take effect.&lt;br /&gt;
&lt;br /&gt;
===2.Enable PCIe Gen 3.0 (Optional):===&lt;br /&gt;
The Raspberry Pi 5&#039;s PCIe connection is certified for Gen 2.0 speeds. However, if you want to attempt using Gen 3.0 speeds, add the following line to the `config.txt` file as well:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dtparam=pciex1_gen=3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 Be aware that the Raspberry Pi 5 is not certified for Gen 3.0 speeds, and using this setting may result in instability .&lt;br /&gt;
&lt;br /&gt;
===3.Booting from PCIe:===&lt;br /&gt;
If you intend to boot from a device connected via PCIe, such as an NVMe SSD, you will need to modify the boot order in the EEPROM. Use the following command to edit the EEPROM configuration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &lt;br /&gt;
sudo apt upgrade -y &lt;br /&gt;
sudo rpi-eeprom-config --edit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then, change the `BOOT_ORDER` line to include NVMe in the boot order:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BOOT_ORDER=0xf416&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This setting will make the Raspberry Pi attempt to boot from an NVMe device connected to the PCIe port .&lt;br /&gt;
===4. Kernel Compilation (Advanced):===&lt;br /&gt;
If you need to compile the kernel to add support for specific PCIe devices, you can follow the steps outlined in the Raspberry Pi documentation. This involves cloning the Raspberry Pi kernel repository, configuring the kernel with `make menuconfig`, and enabling the necessary modules for your devices .&lt;br /&gt;
Remember to always check the compatibility of the devices you intend to use with the Raspberry Pi 5&#039;s PCIe interface, as not all devices may be supported out of the box.&lt;br /&gt;
&lt;br /&gt;
==How to light up identical LED? ==&lt;br /&gt;
To light up UID LED indicator on a Raspberry Pi 5, you&#039;ll make sure the GPIO Pin of the UID LED connected to. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GPIO (General Purpose Input/Output) pins on the Raspberry Pi.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Steps===&lt;br /&gt;
* 1. Identify GPIO Pins: &amp;lt;font color=red&amp;gt;GPIO4&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* 2. Power On:&lt;br /&gt;
Make sure your Raspberry Pi is powered off before connecting the LED. Once everything is connected, you can power on your Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
* 3. Software Setup:&lt;br /&gt;
You&#039;ll need to write a small program to turn the GPIO pin on and off to control the LED. You can use Python with the `gpiozero` library or `RPi.GPIO` library to control the GPIO pins.&lt;br /&gt;
&lt;br /&gt;
===Example Python Code with gpiozero:===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from gpiozero import LED&lt;br /&gt;
from time import sleep&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
led = LED(&#039;GPIO4&#039;)&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    led.on()&lt;br /&gt;
    sleep(1)&lt;br /&gt;
    led.off()&lt;br /&gt;
    sleep(1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Example Python Code with RPi.GPIO:===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import RPi.GPIO as GPIO&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
# Set the GPIO mode&lt;br /&gt;
GPIO.setmode(GPIO.BCM)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GPIO_PIN = 4&lt;br /&gt;
&lt;br /&gt;
# Set up the GPIO pin as an output channel&lt;br /&gt;
GPIO.setup(GPIO_PIN, GPIO.OUT)&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    GPIO.output(GPIO_PIN, GPIO.HIGH)  # Turn on the LED&lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
    GPIO.output(GPIO_PIN, GPIO.LOW)   # Turn off the LED&lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
&lt;br /&gt;
# Clean up the GPIO pins before exiting the program&lt;br /&gt;
GPIO.cleanup()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Safety Tips:===&lt;br /&gt;
* Be careful not to short any pins on the Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
=== SSD1306 OLED Black-Screen Debugging Report &amp;amp; Operation Guide===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;Target hardware:&amp;lt;/strong&amp;gt; 0.91&amp;quot; OLED, 128×32 px, SSD1306, I2C, address 0x3C, Raspberry Pi 5&lt;br /&gt;
&amp;lt;strong&amp;gt;Software:&amp;lt;/strong&amp;gt; luma.oled 3.15.0, luma.core 2.6.0, Python 3.13, smbus2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1. Executive Summary — What Was Actually Wrong ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;Nothing was wrong with the code, the luma library, or the SSD1306 register configuration.&amp;lt;/strong&amp;gt;&lt;br /&gt;
No library or example source code was modified. The failures came from hardware and&lt;br /&gt;
configuration, in one layers:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;A parameter mismatch in the examples.&amp;lt;/strong&amp;gt;  The examples in this directory default to&lt;br /&gt;
  `ssd1305 / 128×64`; this panel is `ssd1306 / 128×32`. Running without parameters&lt;br /&gt;
  produces a black or garbled screen. The fix is to pass the correct display, interface,&lt;br /&gt;
  geometry and address — done via the config file `ssd1306_128x32.conf`.&lt;br /&gt;
&lt;br /&gt;
* ssd1306_128x32.conf contents:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--display=ssd1306&lt;br /&gt;
--interface=i2c&lt;br /&gt;
--i2c-port=1&lt;br /&gt;
--i2c-address=0x3c&lt;br /&gt;
--width=128&lt;br /&gt;
--height=32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Put this configuration file to your demo code location:&lt;br /&gt;
[[ File:Democodeconfig.png|left| 800px ]] &lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* How to execute with config file&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo python3 demo.py -f ssd1306_128x32.conf &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. What Was Done, Step by Step (Method and Basis)===&lt;br /&gt;
&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
     |+ Diagnosis — locating the fault&lt;br /&gt;
     ! Method !! Basis / Reasoning&lt;br /&gt;
     |-&lt;br /&gt;
     | Bus scan with &amp;lt;code&amp;gt;i2cdetect&amp;lt;/code&amp;gt; || An ACK at 0x3C proves all four wires&lt;br /&gt;
   (VCC/GND/SDA/SCL) are connected and the driver IC is powered&lt;br /&gt;
     |-&lt;br /&gt;
     | Source inspection of ssd1306 in luma.oled 3.15.0 || The 128×32 init sequence&lt;br /&gt;
   (multiplex 0x1F, compins 0x02, charge pump 0x14) matches the datasheet standard — a&lt;br /&gt;
   register-level bug was ruled out on evidence&lt;br /&gt;
     |-&lt;br /&gt;
     | Raw-register write of 0xA5 (force all-on) || This command bypasses GDDRAM; a&lt;br /&gt;
   healthy panel must glow. No light = fault in the high-voltage path (charge pump /&lt;br /&gt;
   panel / flex cable)&lt;br /&gt;
     |-&lt;br /&gt;
     | Status-register read before/after DISPLAY ON/OFF commands || Per the SSD1306&lt;br /&gt;
   datasheet, bit 6 is the display ON/OFF flag. It flipped correctly, proving the chip&lt;br /&gt;
   executes commands — fault isolated to the panel side&lt;br /&gt;
     |-&lt;br /&gt;
     | 5 consecutive bus scans + 10 consecutive status reads || All values stable and&lt;br /&gt;
   identical — ruled out loose wiring and parasitic power&lt;br /&gt;
     |}&lt;br /&gt;
&lt;br /&gt;
===3. Files Created / Modified===&lt;br /&gt;
&lt;br /&gt;
  {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
     |+ Fixes and deliverables&lt;br /&gt;
     ! File !! Type !! Description&lt;br /&gt;
     |-&lt;br /&gt;
     | &amp;lt;code&amp;gt;ssd1306_128x32.conf&amp;lt;/code&amp;gt; || Fixed || Initially written in INI format,&lt;br /&gt;
   causing &amp;quot;unrecognized arguments&amp;quot;. Based on the source of&lt;br /&gt;
   &amp;lt;code&amp;gt;luma.core.cmdline.load_config&amp;lt;/code&amp;gt; (reads line by line, no whitespace&lt;br /&gt;
   splitting), rewritten as one &amp;lt;code&amp;gt;--key=value&amp;lt;/code&amp;gt; per line; demo.py then ran&lt;br /&gt;
   successfully&lt;br /&gt;
     |-&lt;br /&gt;
     | &amp;lt;code&amp;gt;ssd1306_raw.py&amp;lt;/code&amp;gt; || Created || Library-free SSD1306 driver; writes&lt;br /&gt;
   registers directly via smbus2 (PIL used only for pixel rendering)&lt;br /&gt;
     |-&lt;br /&gt;
     | &amp;lt;code&amp;gt;OLED_128x32_I2C_manual.md&amp;lt;/code&amp;gt; || Created / updated || Bilingual&lt;br /&gt;
   operation manual; added the regulator/supply-voltage rule and the hardware-failure&lt;br /&gt;
   criterion&lt;br /&gt;
     |-&lt;br /&gt;
     | &amp;lt;code&amp;gt;SSD1306_Debug_Report_EN.md&amp;lt;/code&amp;gt; || Created || Full English debugging&lt;br /&gt;
   report and operation guide&lt;br /&gt;
     |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
No files in luma.oled / luma.core or the example scripts were modified.&lt;br /&gt;
&lt;br /&gt;
===4. Final Working Configuration===&lt;br /&gt;
&lt;br /&gt;
* Module: bare 0.91&amp;quot; 128×32 SSD1306, &amp;lt;strong&amp;gt;no onboard regulator&amp;lt;/strong&amp;gt;&lt;br /&gt;
* Wiring: VCC → &amp;lt;strong&amp;gt;3.3 V&amp;lt;/strong&amp;gt; (pin 1), GND → GND, SDA → GPIO2 (pin 3), SCL → GPIO3 (pin 5)&lt;br /&gt;
* No RST/RES connection needed (I2C interface)&lt;br /&gt;
* I2C address: `0x3C`&lt;br /&gt;
&lt;br /&gt;
=== 5. Operating Instructions===&lt;br /&gt;
&lt;br /&gt;
==== Run any luma example in this directory====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python demo.py    -f ssd1306_128x32.conf&lt;br /&gt;
python clock.py   -f ssd1306_128x32.conf&lt;br /&gt;
python pi_logo.py -f ssd1306_128x32.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or pass parameters explicitly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python demo.py -d ssd1306 -i i2c --i2c-port 1 --i2c-address 0x3c --width 128 --height 32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Run the library-free raw driver===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python ssd1306_raw.py                 # 0.96&amp;quot; 128x64&lt;br /&gt;
python ssd1306_raw.py --height 32     # 0.91&amp;quot; 128x32 (this panel)&lt;br /&gt;
python ssd1306_raw.py --addr 0x3D     # modules with address 0x3D&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Minimal code (luma)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from luma.core.interface.serial import i2c&lt;br /&gt;
from luma.oled.device import ssd1306&lt;br /&gt;
from luma.core.render import canvas&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
device = ssd1306(i2c(port=1, address=0x3C), width=128, height=32)&lt;br /&gt;
with canvas(device) as draw:&lt;br /&gt;
    draw.rectangle(device.bounding_box, outline=&amp;quot;white&amp;quot;)&lt;br /&gt;
    draw.text((4, 10), &amp;quot;OK 128x32&amp;quot;, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===6. Black-Screen Decision Tree (for future modules)===&lt;br /&gt;
&lt;br /&gt;
* `i2cdetect -y 1` shows the address?&lt;br /&gt;
  &amp;lt;strong&amp;gt;No&amp;lt;/strong&amp;gt; → power/wiring fault: measure VCC-GND **at the module&#039;s solder pads**, check SDA=pin 3, SCL=pin 5, try fresh dupont wires.&lt;br /&gt;
  &amp;lt;strong&amp;gt;Yes&amp;lt;/strong&amp;gt; → continue.&lt;br /&gt;
&lt;br /&gt;
* Run `python oled_diagnose.py`. Any step lights the panel?&lt;br /&gt;
  &amp;lt;strong&amp;gt;Yes&amp;lt;/strong&amp;gt; → software/parameter issue; use the matching parameters (`-d ssd1306 --width 128 --height 32 --i2c-address 0x3c`).&lt;br /&gt;
  &amp;lt;strong&amp;gt;No&amp;lt;/strong&amp;gt; → continue.&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
* 1U Rackmount for Raspberry Pi 5 with M.2 NVMe SSD support.&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=DR-0001&amp;diff=16573</id>
		<title>DR-0001</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=DR-0001&amp;diff=16573"/>
		<updated>2026-08-21T06:14:45Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: /* 2. What Was Done, Step by Step (Method and Basis) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==1U Rackmount for Raspberry Pi 5 ==&lt;br /&gt;
* Purchase URL: [ https://52pi.com ] or [ https://deskpi.com ]&lt;br /&gt;
[[File:DR-0001-1.jpg|right|320px]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
This is an upgraded version of a 1U Rackmount designed for compatibility with both Raspberry Pi 5 . It features a motherboard that supports PCIe expansion, allowing the PCIe interface of the Raspberry Pi 5 to be extended to accommodate an M.2 NVMe SSD in 2230/2242/2260/2280 form factors. The expansion board also routes the Raspberry Pi&#039;s 5V and GND, SDA, and SCL pins to the rear through PogoPin connectors, providing I2C interface peripherals in a Grove format. Additionally, a red LED is included on the board for the Raspberry Pi ID signal pin, which can be programmed to indicate the current device by controlling the GPIO4 pin&#039;s high or low level, acting as a programmable device ID signal light.&lt;br /&gt;
&lt;br /&gt;
The Rackmount supports the connection of up to five Raspberry Pi devices and can also be configured with an OLED display frame in place of one of the Raspberry Pi slots. These components can be easily adjusted and removed due to the use of hand-tightened screws. The OLED display features a 0.91-inch screen and communicates with the Raspberry Pi via I2C protocol, displaying real-time information such as CPU status, memory status, IP information, and serial numbers. The content displayed on the OLED can be fully customized.&lt;br /&gt;
==Features==&lt;br /&gt;
* &amp;lt;strong&amp;gt;Compatibility:&amp;lt;/strong&amp;gt; Designed to work with both Raspberry Pi 5.&lt;br /&gt;
* &amp;lt;strong&amp;gt;PCIe Expansion Support:&amp;lt;/strong&amp;gt;  Includes a motherboard that enables PCIe expansion, allowing the connection of M.2 NVMe SSDs in various form factors (2230/2242/2260/2280).&lt;br /&gt;
* &amp;lt;strong&amp;gt;I2C Interface: &amp;lt;/strong&amp;gt; The board routes the Raspberry Pi&#039;s 5V, GND, SDA, and SCL pins to the rear through PogoPin connectors, offering I2C interface peripherals in a Grove format.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Programmable LED Indicator: &amp;lt;/strong&amp;gt; A red LED on the board serves as a programmable device ID signal, controllable via the GPIO4 pin to indicate the status or identity of the device.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Modular Design:&amp;lt;/strong&amp;gt;  Supports the integration of up to five Raspberry Pi devices, with the option to replace one slot with an OLED display frame.&lt;br /&gt;
* &amp;lt;strong&amp;gt;OLED Display Integration:&amp;lt;/strong&amp;gt;  The option to include a 0.91-inch OLED screen that communicates with the Raspberry Pi via I2C, displaying customizable information such as CPU usage, memory status, IP address, and serial numbers.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Easy Assembly and Disassembly:&amp;lt;/strong&amp;gt;  Components are secured with hand-tightened screws, allowing for convenient adjustments and removal.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Customizable Display Content: &amp;lt;/strong&amp;gt; The information displayed on the OLED screen can be fully customized to meet specific needs or preferences.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Rackmount Form Factor: &amp;lt;/strong&amp;gt; Designed to fit into a 1U rack space, making it suitable for data centers or other environments where space is at a premium.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Versatility:&amp;lt;/strong&amp;gt;  The Rackmount can be configured in various ways to suit different use cases, whether for development, testing, or deployment in a production environment.&lt;br /&gt;
===Specifications===&lt;br /&gt;
* Form Factor: 1U Rackmount design suitable for standard 19-inch racks.&lt;br /&gt;
* Raspberry Pi Compatibility: Specifically designed for Raspberry Pi 5.&lt;br /&gt;
* PCIe Expansion:Supports M.2 NVMe SSDs in 2230, 2242, 2260, and 2280 form factors. Provides a PCIe interface for high-speed data transfer.&lt;br /&gt;
* I/O Connectivity: Rear I2C interface via PogoPin connectors for external peripherals.&lt;br /&gt;
* GPIO4 pin for programmable LED control.&lt;br /&gt;
* LED Indicator:Red LED for device identification or status indication. Programmable through software to show different statuses.&lt;br /&gt;
* Modular Bays: Five bays for Raspberry Pi devices. One bay can be replaced with an OLED display module.&lt;br /&gt;
* OLED Display Specifications:0.91-inch screen size, 128x32 pixels. I2C communication protocol.&lt;br /&gt;
* Customizable display for system information.&lt;br /&gt;
* Physical Security:Hand-tightened screws for secure mounting of Raspberry Pi devices and OLED display.&lt;br /&gt;
* Ensures stability and ease of maintenance.&lt;br /&gt;
* Power Requirements: Compatibility with Raspberry Pi&#039;s standard power supply.&lt;br /&gt;
* Material and Construction: Durable metal construction for the rackmount chassis. High-quality components for reliable performance.&lt;br /&gt;
* Mounting Options: Standard rackmount holes for easy installation into a rack.&lt;br /&gt;
* Includes additional mounting accessories for different setups.&lt;br /&gt;
* Software Compatibility: Compatible with Raspberry Pi&#039;s operating system and software ecosystem.&lt;br /&gt;
* Support for GPIO programming for custom LED and device control.&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product outlook&lt;br /&gt;
[[ File:DR-0001-6.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Application Senario &lt;br /&gt;
[[ File:DR-0001-2.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&amp;lt;font color=red&amp;gt; NOTE: Raspberry Pis are not included in the package, additional purchase required!&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* Easy to assemble and maintain&lt;br /&gt;
[[ File:DR-0001-3.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
[[File:DR-0001-12.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Customizable OLED display screen, with a size of 0.91 inches&lt;br /&gt;
[[ File:DR-0001-4.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Ports Definitions and Featrues &lt;br /&gt;
Programmable I/O controlled UID indicator light, which can be programmed to control the LED blinking to indicate the device&#039;s location, facilitating faster troubleshooting and easier maintenance operations.&lt;br /&gt;
[[ File:DR-0001-5.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===How to connect OLED display to Raspberry Pi on GPIO pins===&lt;br /&gt;
* Please refer to following figure to connect OLED display to Raspberry Pi on GPIO. &lt;br /&gt;
&amp;lt;font color=red&amp;gt;NOTE: OLED&#039;s VCC should be connected to 3.3V power rail, Do not connect it to 5V power rail!!!&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[ File:DR-0001-7.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Grove Connector Support I2C and Uart&lt;br /&gt;
[[ File:DR-0001-8.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Accessories Dimension&lt;br /&gt;
[[ File:DR-0001-9.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* OLED assemble details&lt;br /&gt;
Please remove the protection film from acrylic panel and use the washer between OLED PCB board and acrylic panel.&lt;br /&gt;
[[ File:DR-0001-10.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* PCIe Expansion board for Raspberry Pi 5 only&lt;br /&gt;
The expansion board supports M.2 NVMe M-key SSD 2230/2242/2260/2280, and the board will be powered by Raspberry Pi 5 via PogoPin on the PCB board, please make sure the board&#039;s pogoins are contact well with the soldering point on back of the Raspberry Pi 5 on GPIO pins. &lt;br /&gt;
[[File:DR-0001-11.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to assemble it? ==&lt;br /&gt;
* Please note that there are several details you need to pay attention, plesae check out following figure.&lt;br /&gt;
[[ File:DR-0001-安装.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Package Includes==&lt;br /&gt;
* Following figure shows the details of the product: &lt;br /&gt;
[[ File:DR-0001-清单.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to enable I2C OLED display?==&lt;br /&gt;
* We assume that you are using Raspberry Pi OS 64bit(bookworm, the latest official image) &lt;br /&gt;
To enable I2C and UART on your Raspberry Pi, you can follow these detailed steps:&lt;br /&gt;
&lt;br /&gt;
===Enabling I2C===&lt;br /&gt;
* Method 1. Using the Raspberry Pi Configuration Tool: &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo raspi-config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to open the configuration tool. Navigate to `Interface Options`, Select `I2C` and enable it.&lt;br /&gt;
&lt;br /&gt;
* Method  2. Using the Command Line:&lt;br /&gt;
You can also enable I2C by editing the `/boot/firmware/config.txt` file and adding `dtparam=i2c_arm=on` if it&#039;s not already present, After making changes, reboot your Pi.&lt;br /&gt;
&lt;br /&gt;
===Verifying I2C===&lt;br /&gt;
* Install I2C tools using `sudo apt-get install -y i2c-tools`.&lt;br /&gt;
* Use &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
i2cdetect -y 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to scan for I2C devices, if you see `3c` means that the OLED display has been recognized by your Raspberry Pi. &lt;br /&gt;
&lt;br /&gt;
===Enabling UART===&lt;br /&gt;
* Method 1. Using the Raspberry Pi Configuration Tool:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo raspi-config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Go to `Interface Options`, Select `Serial` and enable it.&lt;br /&gt;
&amp;lt;pre&amp;gt; Note: This will also enable the login shell on the serial port. &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Method 2. Using the Command Line:&lt;br /&gt;
Edit `/boot/config.txt` and add `enable_uart=1`, save it and then reboot your Pi.&lt;br /&gt;
&lt;br /&gt;
===Accessing UART===&lt;br /&gt;
* Connect your Pi to a USB-to-TTL converter, On Windows, you may need to install drivers for the converter. on Linux just use a terminal program like `minicom`, `putty`, or `screen` to access the UART interface.&lt;br /&gt;
&lt;br /&gt;
Remember to check the documentation for your specific Raspberry Pi model, as the steps might vary slightly. If you need more detailed instructions or encounter any issues, refer to the [ https://www.raspberrypi.org/documentation/ ]  or community forums for additional support.&lt;br /&gt;
&lt;br /&gt;
===How to display customized information on OLED display? ===&lt;br /&gt;
* Final result&lt;br /&gt;
[[File:DR-0001 applications-01.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
==How to customize content on OLED ?==&lt;br /&gt;
* For example: If you want to display current IP address of wlan interface and the serial number of your Raspberry Pi 5, please follow next steps to configure it. &lt;br /&gt;
===Install Virtal environment package ===&lt;br /&gt;
* Open a terminal and typing following commands:&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo apt update &lt;br /&gt;
sudo apt upgrade -y &lt;br /&gt;
sudo apt -y install virtualenv &lt;br /&gt;
sudo usermod -a -G i2c,spi,gpio pi&lt;br /&gt;
sudo apt install python3-dev python3-pip python3-numpy libfreetype6-dev libjpeg-dev build-essential&lt;br /&gt;
sudo apt install libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev libportmidi-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:Install pre-insistpackages.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
[[File:Install-pre-insistpackage-02.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Create virtual environment===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
virtualenv -p python3 venv &lt;br /&gt;
cd venv/&lt;br /&gt;
source bin/activate &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Install SSD1306 driver and library for OLED 0.91===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pip install luma.oled&lt;br /&gt;
pip install psutil&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Clone luma.examples repository===&lt;br /&gt;
Log out and in again and clone this repository:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone https://github.com/rm-hull/luma.examples.git&lt;br /&gt;
cd luma.examples/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Install luma libraries===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -H pip install -e . --break-system-packages  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:Install luma libraries.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
===Test the demo ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd examples/&lt;br /&gt;
sudo python 3d_box.py --width=128 --height=32 -r 2 &lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=red&amp;gt;&amp;lt;p&amp;gt;NOTE: &amp;lt;br&amp;gt;&lt;br /&gt;
 --width=128 and --height=32 should be added to declear the OLED&#039;s resolution information. &amp;lt;br&amp;gt;&lt;br /&gt;
 -r 2  means --rotate 2 , Allowed values are: 0, 1, 2, 3  (default:0) &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
If you see a 3D-box rotating animation is in the middle of screen means that you have installed the OLED driver successfully! &lt;br /&gt;
[[File:Test demo 3dbox.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
[[File:Test demo 3dbox-2.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
and then press &amp;quot;Ctrol+C&amp;quot; abort the demo.&lt;br /&gt;
&lt;br /&gt;
==Use the demo code==&lt;br /&gt;
* There are a lot of demo codes in the examples folder, you can test it as you want. &lt;br /&gt;
for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo python carousel.py --width=128 --height=32 -r 2 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
It will display all information of your Raspberry Pi 5 and scrolling display. &lt;br /&gt;
===Customize the display on screen===&lt;br /&gt;
Modify the sys_info.py python file and adding your own function to show the information you want, do remember backup the origin file. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp sys_info.py sys_info.py.bak &lt;br /&gt;
vim.tiny sys_info.py &lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Press &#039;i&#039; to insert mode, and paste following lines into it. you can modify this file by other text editor what you like. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
# Copyright (c) 2014-2022 Richard Hull and contributors&lt;br /&gt;
# See LICENSE.rst for details.&lt;br /&gt;
# PYTHON_ARGCOMPLETE_OK&lt;br /&gt;
&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Display basic system information.&lt;br /&gt;
&lt;br /&gt;
Needs psutil (+ dependencies) installed::&lt;br /&gt;
&lt;br /&gt;
  $ sudo apt-get install python-dev&lt;br /&gt;
  $ sudo -H pip install psutil&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
import os&lt;br /&gt;
import sys&lt;br /&gt;
import time&lt;br /&gt;
from pathlib import Path&lt;br /&gt;
from datetime import datetime&lt;br /&gt;
import subprocess as sp&lt;br /&gt;
&lt;br /&gt;
if os.name != &#039;posix&#039;:&lt;br /&gt;
    sys.exit(f&#039;{os.name} platform is not supported&#039;)&lt;br /&gt;
&lt;br /&gt;
from demo_opts import get_device&lt;br /&gt;
from luma.core.render import canvas&lt;br /&gt;
from PIL import ImageFont&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    import psutil&lt;br /&gt;
except ImportError:&lt;br /&gt;
    print(&amp;quot;The psutil library was not found. Run &#039;sudo -H pip install psutil&#039; to install it.&amp;quot;)&lt;br /&gt;
    sys.exit()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# TODO: custom font bitmaps for up/down arrows&lt;br /&gt;
# TODO: Load histogram&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def bytes2human(n):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; bytes2human(10000)&lt;br /&gt;
    &#039;9K&#039;&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; bytes2human(100001221)&lt;br /&gt;
    &#039;95M&#039;&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    symbols = (&#039;K&#039;, &#039;M&#039;, &#039;G&#039;, &#039;T&#039;, &#039;P&#039;, &#039;E&#039;, &#039;Z&#039;, &#039;Y&#039;)&lt;br /&gt;
    prefix = {}&lt;br /&gt;
    for i, s in enumerate(symbols):&lt;br /&gt;
        prefix[s] = 1 &amp;lt;&amp;lt; (i + 1) * 10&lt;br /&gt;
    for s in reversed(symbols):&lt;br /&gt;
        if n &amp;gt;= prefix[s]:&lt;br /&gt;
            value = int(float(n) / prefix[s])&lt;br /&gt;
            return &#039;%s%s&#039; % (value, s)&lt;br /&gt;
    return f&amp;quot;{n}B&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def cpu_usage():&lt;br /&gt;
    # load average, uptime&lt;br /&gt;
    uptime = datetime.now() - datetime.fromtimestamp(psutil.boot_time())&lt;br /&gt;
    #av1, av2, av3 = os.getloadavg()&lt;br /&gt;
    #return &amp;quot;Ld:%.1f %.1f %.1f Up: %s&amp;quot; \&lt;br /&gt;
    #    % (av1, av2, av3, str(uptime).split(&#039;.&#039;)[0])&lt;br /&gt;
    return &amp;quot;Up: %s&amp;quot; % (str(uptime).split(&#039;.&#039;)[0])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def mem_usage():&lt;br /&gt;
    usage = psutil.virtual_memory()&lt;br /&gt;
    return &amp;quot;Mem: %s %.0f%%&amp;quot; \&lt;br /&gt;
        % (bytes2human(usage.used), 100 - usage.percent)&lt;br /&gt;
&lt;br /&gt;
def disk_usage(dir):&lt;br /&gt;
    usage = psutil.disk_usage(dir)&lt;br /&gt;
    return &amp;quot;SD:  %s %.0f%%&amp;quot; \&lt;br /&gt;
        % (bytes2human(usage.used), usage.percent)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def network(iface):&lt;br /&gt;
    stat = psutil.net_io_counters(pernic=True)[iface]&lt;br /&gt;
    return &amp;quot;%s: Tx%s, Rx%s&amp;quot; % \&lt;br /&gt;
           (iface, bytes2human(stat.bytes_sent), bytes2human(stat.bytes_recv))&lt;br /&gt;
&lt;br /&gt;
def mem_usage():&lt;br /&gt;
    usage = psutil.virtual_memory()&lt;br /&gt;
    return &amp;quot;Mem: %s %.0f%%&amp;quot; \&lt;br /&gt;
        % (bytes2human(usage.used), 100 - usage.percent)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def disk_usage(dir):&lt;br /&gt;
    usage = psutil.disk_usage(dir)&lt;br /&gt;
    return &amp;quot;SD:  %s %.0f%%&amp;quot; \&lt;br /&gt;
        % (bytes2human(usage.used), usage.percent)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def network(iface):&lt;br /&gt;
    stat = psutil.net_io_counters(pernic=True)[iface]&lt;br /&gt;
    return &amp;quot;%s: Tx%s, Rx%s&amp;quot; % \&lt;br /&gt;
           (iface, bytes2human(stat.bytes_sent), bytes2human(stat.bytes_recv))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def get_ip_address():&lt;br /&gt;
    ip = sp.getoutput(&#039;hostname -I&#039;)&lt;br /&gt;
    return &amp;quot;IP: %s&amp;quot; % ip&lt;br /&gt;
&lt;br /&gt;
def get_id():&lt;br /&gt;
    id_of_pi = sp.getoutput(&amp;quot;cat /proc/cpuinfo | grep -i serial| awk -F: &#039;{print $2}&#039;|xargs&amp;quot;)&lt;br /&gt;
    return &amp;quot;%s&amp;quot; % id_of_pi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def stats(device):&lt;br /&gt;
    # use custom font&lt;br /&gt;
    font_path = str(Path(__file__).resolve().parent.joinpath(&#039;fonts&#039;, &#039;C&amp;amp;C Red Alert [INET].ttf&#039;))&lt;br /&gt;
    #font_path = str(Path(__file__).resolve().parent.joinpath(&#039;fonts&#039;, &#039;DejaVuSansMono.ttf&#039;))&lt;br /&gt;
    font2 = ImageFont.truetype(font_path, 15)&lt;br /&gt;
&lt;br /&gt;
    with canvas(device) as draw:&lt;br /&gt;
        # draw.text((0, 0), cpu_usage(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
        draw.text((0, 0), get_id(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
        if device.height &amp;gt;= 32:&lt;br /&gt;
            #draw.text((0, 11), mem_usage(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            #draw.text((0, 16), disk_usage(&#039;/&#039;), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            draw.text((0, 16), get_ip_address(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        if device.height &amp;gt;= 64:&lt;br /&gt;
            draw.text((0, 26), disk_usage(&#039;/&#039;), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            try:&lt;br /&gt;
                draw.text((0, 38), network(&#039;wlan0&#039;), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            except KeyError:&lt;br /&gt;
                # no wifi enabled/available&lt;br /&gt;
                pass&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    while True:&lt;br /&gt;
        stats(device)&lt;br /&gt;
        time.sleep(5)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    try:&lt;br /&gt;
        device = get_device()&lt;br /&gt;
        main()&lt;br /&gt;
    except KeyboardInterrupt:&lt;br /&gt;
        pass&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Here let me explain to you what i did.&lt;br /&gt;
* adding &amp;quot; import subprocess as sp&amp;quot;, this will help me to execute some shell command in OS. &lt;br /&gt;
* adding following parts:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def get_ip_address():&lt;br /&gt;
    ip = sp.getoutput(&#039;hostname -I&#039;)&lt;br /&gt;
    return &amp;quot;IP: %s&amp;quot; % ip&lt;br /&gt;
&lt;br /&gt;
def get_id():&lt;br /&gt;
    id_of_pi = sp.getoutput(&amp;quot;cat /proc/cpuinfo | grep -i serial| awk -F: &#039;{print $2}&#039;|xargs&amp;quot;)&lt;br /&gt;
    return &amp;quot;%s&amp;quot; % id_of_pi&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
* get_ip_address will execute the command &amp;quot;hostname -I&amp;quot; in system and grab the IP address and return it to main process.&lt;br /&gt;
* get_id is to read /proc/cpuinfo file and grab the serial number and return to main process.&lt;br /&gt;
&lt;br /&gt;
===Use custom font===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   font_path = str(Path(__file__).resolve().parent.joinpath(&#039;fonts&#039;, &#039;C&amp;amp;C Red Alert [INET].ttf&#039;))&lt;br /&gt;
   font2 = ImageFont.truetype(font_path, 15)   # change font size to 15. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Modify the draw function===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  with canvas(device) as draw:&lt;br /&gt;
        # draw.text((0, 0), cpu_usage(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
        draw.text((0, 0), get_id(), font=font2, fill=&amp;quot;white&amp;quot;)         #####　draw id on screen at (0,0) position, (x,y)&lt;br /&gt;
        if device.height &amp;gt;= 32:&lt;br /&gt;
            #draw.text((0, 11), mem_usage(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            #draw.text((0, 16), disk_usage(&#039;/&#039;), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            draw.text((0, 16), get_ip_address(), font=font2, fill=&amp;quot;white&amp;quot;)   ####　draw text on (0,16) with IP address. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to create a systemd file to make it automatically start at boot up==&lt;br /&gt;
* Step1. create a shell script called it &#039;start_led.sh&#039; &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
cd /home/pi/venv/ &amp;amp;&amp;amp; source /home/pi/venv/bin/activate &lt;br /&gt;
/usr/bin/python3 /home/pi/luma.examples/examples/sys_info.py --width=128 --height=32 -r 2 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
save it and grant executable permission and test it.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x start_led.sh &lt;br /&gt;
./start_led.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
If if works properly, just press &amp;quot;ctrol+c&amp;quot; to abort the test.&lt;br /&gt;
* Step2. create a systemd file and enable it.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo vim.tiny /etc/systemd/system/rackmount_oled.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
And then, adding following lines:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Rackmount OLED service on RPi5&lt;br /&gt;
DefaultDependencies=no&lt;br /&gt;
StartLimitIntervalSec=60&lt;br /&gt;
StartLimitBurst=5&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
ExecStart=/bin/bash /home/pi/start_led.sh&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Save it and quit. &lt;br /&gt;
===Enable rackmount_oled.service===&lt;br /&gt;
* reload daemon&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl daemon-reload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Enable service&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo systemctl enable rackmount_oled.service &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Start service &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start rackmount_oled.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Restart service&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart rackmount_oled.service &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Stop service&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl stop rackmount_oled.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Disable service &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl disable rackmount_oled.service &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to enable PCIe function on Raspberry Pi 5?==&lt;br /&gt;
* To enable PCIe functionality on the Raspberry Pi 5, follow these steps:&lt;br /&gt;
&lt;br /&gt;
===1. Enable the PCIe External Connector:===&lt;br /&gt;
By default, the PCIe connector on the Raspberry Pi 5 is not enabled. To enable it, you need to add a configuration parameter to the `config.txt` file located in the `/boot/firmware` directory. You can use either of these lines:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dtparam=pciex1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After adding the line, reboot your Raspberry Pi for the changes to take effect.&lt;br /&gt;
&lt;br /&gt;
===2.Enable PCIe Gen 3.0 (Optional):===&lt;br /&gt;
The Raspberry Pi 5&#039;s PCIe connection is certified for Gen 2.0 speeds. However, if you want to attempt using Gen 3.0 speeds, add the following line to the `config.txt` file as well:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dtparam=pciex1_gen=3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 Be aware that the Raspberry Pi 5 is not certified for Gen 3.0 speeds, and using this setting may result in instability .&lt;br /&gt;
&lt;br /&gt;
===3.Booting from PCIe:===&lt;br /&gt;
If you intend to boot from a device connected via PCIe, such as an NVMe SSD, you will need to modify the boot order in the EEPROM. Use the following command to edit the EEPROM configuration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &lt;br /&gt;
sudo apt upgrade -y &lt;br /&gt;
sudo rpi-eeprom-config --edit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then, change the `BOOT_ORDER` line to include NVMe in the boot order:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BOOT_ORDER=0xf416&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This setting will make the Raspberry Pi attempt to boot from an NVMe device connected to the PCIe port .&lt;br /&gt;
===4. Kernel Compilation (Advanced):===&lt;br /&gt;
If you need to compile the kernel to add support for specific PCIe devices, you can follow the steps outlined in the Raspberry Pi documentation. This involves cloning the Raspberry Pi kernel repository, configuring the kernel with `make menuconfig`, and enabling the necessary modules for your devices .&lt;br /&gt;
Remember to always check the compatibility of the devices you intend to use with the Raspberry Pi 5&#039;s PCIe interface, as not all devices may be supported out of the box.&lt;br /&gt;
&lt;br /&gt;
==How to light up identical LED? ==&lt;br /&gt;
To light up UID LED indicator on a Raspberry Pi 5, you&#039;ll make sure the GPIO Pin of the UID LED connected to. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GPIO (General Purpose Input/Output) pins on the Raspberry Pi.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Steps===&lt;br /&gt;
* 1. Identify GPIO Pins: &amp;lt;font color=red&amp;gt;GPIO4&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* 2. Power On:&lt;br /&gt;
Make sure your Raspberry Pi is powered off before connecting the LED. Once everything is connected, you can power on your Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
* 3. Software Setup:&lt;br /&gt;
You&#039;ll need to write a small program to turn the GPIO pin on and off to control the LED. You can use Python with the `gpiozero` library or `RPi.GPIO` library to control the GPIO pins.&lt;br /&gt;
&lt;br /&gt;
===Example Python Code with gpiozero:===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from gpiozero import LED&lt;br /&gt;
from time import sleep&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
led = LED(&#039;GPIO4&#039;)&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    led.on()&lt;br /&gt;
    sleep(1)&lt;br /&gt;
    led.off()&lt;br /&gt;
    sleep(1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Example Python Code with RPi.GPIO:===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import RPi.GPIO as GPIO&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
# Set the GPIO mode&lt;br /&gt;
GPIO.setmode(GPIO.BCM)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GPIO_PIN = 4&lt;br /&gt;
&lt;br /&gt;
# Set up the GPIO pin as an output channel&lt;br /&gt;
GPIO.setup(GPIO_PIN, GPIO.OUT)&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    GPIO.output(GPIO_PIN, GPIO.HIGH)  # Turn on the LED&lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
    GPIO.output(GPIO_PIN, GPIO.LOW)   # Turn off the LED&lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
&lt;br /&gt;
# Clean up the GPIO pins before exiting the program&lt;br /&gt;
GPIO.cleanup()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Safety Tips:===&lt;br /&gt;
* Be careful not to short any pins on the Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
=== SSD1306 OLED Black-Screen Debugging Report &amp;amp; Operation Guide===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;Target hardware:&amp;lt;/strong&amp;gt; 0.91&amp;quot; OLED, 128×32 px, SSD1306, I2C, address 0x3C, Raspberry Pi 5&lt;br /&gt;
&amp;lt;strong&amp;gt;Software:&amp;lt;/strong&amp;gt; luma.oled 3.15.0, luma.core 2.6.0, Python 3.13, smbus2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1. Executive Summary — What Was Actually Wrong ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;Nothing was wrong with the code, the luma library, or the SSD1306 register configuration.&amp;lt;/strong&amp;gt;&lt;br /&gt;
No library or example source code was modified. The failures came from hardware and&lt;br /&gt;
configuration, in one layers:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;A parameter mismatch in the examples.&amp;lt;/strong&amp;gt;  The examples in this directory default to&lt;br /&gt;
  `ssd1305 / 128×64`; this panel is `ssd1306 / 128×32`. Running without parameters&lt;br /&gt;
  produces a black or garbled screen. The fix is to pass the correct display, interface,&lt;br /&gt;
  geometry and address — done via the config file `ssd1306_128x32.conf`.&lt;br /&gt;
&lt;br /&gt;
* ssd1306_128x32.conf contents:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--display=ssd1306&lt;br /&gt;
--interface=i2c&lt;br /&gt;
--i2c-port=1&lt;br /&gt;
--i2c-address=0x3c&lt;br /&gt;
--width=128&lt;br /&gt;
--height=32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Put this configuration file to your demo code location:&lt;br /&gt;
[[ File:Democodeconfig.png|left| 800px ]] &lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* How to execute with config file&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo python3 demo.py -f ssd1306_128x32.conf &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. What Was Done, Step by Step (Method and Basis)===&lt;br /&gt;
&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
     |+ Diagnosis — locating the fault&lt;br /&gt;
     ! Method !! Basis / Reasoning&lt;br /&gt;
     |-&lt;br /&gt;
     | Bus scan with &amp;lt;code&amp;gt;i2cdetect&amp;lt;/code&amp;gt; || An ACK at 0x3C proves all four wires&lt;br /&gt;
   (VCC/GND/SDA/SCL) are connected and the driver IC is powered&lt;br /&gt;
     |-&lt;br /&gt;
     | Source inspection of ssd1306 in luma.oled 3.15.0 || The 128×32 init sequence&lt;br /&gt;
   (multiplex 0x1F, compins 0x02, charge pump 0x14) matches the datasheet standard — a&lt;br /&gt;
   register-level bug was ruled out on evidence&lt;br /&gt;
     |-&lt;br /&gt;
     | Raw-register write of 0xA5 (force all-on) || This command bypasses GDDRAM; a&lt;br /&gt;
   healthy panel must glow. No light = fault in the high-voltage path (charge pump /&lt;br /&gt;
   panel / flex cable)&lt;br /&gt;
     |-&lt;br /&gt;
     | Status-register read before/after DISPLAY ON/OFF commands || Per the SSD1306&lt;br /&gt;
   datasheet, bit 6 is the display ON/OFF flag. It flipped correctly, proving the chip&lt;br /&gt;
   executes commands — fault isolated to the panel side&lt;br /&gt;
     |-&lt;br /&gt;
     | 5 consecutive bus scans + 10 consecutive status reads || All values stable and&lt;br /&gt;
   identical — ruled out loose wiring and parasitic power&lt;br /&gt;
     |}&lt;br /&gt;
&lt;br /&gt;
===3. Files Created / Modified===&lt;br /&gt;
&lt;br /&gt;
  {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
     |+ Fixes and deliverables&lt;br /&gt;
     ! File !! Type !! Description&lt;br /&gt;
     |-&lt;br /&gt;
     | &amp;lt;code&amp;gt;ssd1306_128x32.conf&amp;lt;/code&amp;gt; || Fixed || Initially written in INI format,&lt;br /&gt;
   causing &amp;quot;unrecognized arguments&amp;quot;. Based on the source of&lt;br /&gt;
   &amp;lt;code&amp;gt;luma.core.cmdline.load_config&amp;lt;/code&amp;gt; (reads line by line, no whitespace&lt;br /&gt;
   splitting), rewritten as one &amp;lt;code&amp;gt;--key=value&amp;lt;/code&amp;gt; per line; demo.py then ran&lt;br /&gt;
   successfully&lt;br /&gt;
     |-&lt;br /&gt;
     | &amp;lt;code&amp;gt;ssd1306_raw.py&amp;lt;/code&amp;gt; || Created || Library-free SSD1306 driver; writes&lt;br /&gt;
   registers directly via smbus2 (PIL used only for pixel rendering)&lt;br /&gt;
     |-&lt;br /&gt;
     | &amp;lt;code&amp;gt;OLED_128x32_I2C_manual.md&amp;lt;/code&amp;gt; || Created / updated || Bilingual&lt;br /&gt;
   operation manual; added the regulator/supply-voltage rule and the hardware-failure&lt;br /&gt;
   criterion&lt;br /&gt;
     |-&lt;br /&gt;
     | &amp;lt;code&amp;gt;SSD1306_Debug_Report_EN.md&amp;lt;/code&amp;gt; || Created || Full English debugging&lt;br /&gt;
   report and operation guide&lt;br /&gt;
     |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
No files in luma.oled / luma.core or the example scripts were modified.&lt;br /&gt;
&lt;br /&gt;
===4. Final Working Configuration===&lt;br /&gt;
&lt;br /&gt;
* Module: bare 0.91&amp;quot; 128×32 SSD1306, &amp;lt;strong&amp;gt;no onboard regulator&amp;lt;/strong&amp;gt;&lt;br /&gt;
* Wiring: VCC → &amp;lt;strong&amp;gt;3.3 V&amp;lt;/strong&amp;gt; (pin 1), GND → GND, SDA → GPIO2 (pin 3), SCL → GPIO3 (pin 5)&lt;br /&gt;
* No RST/RES connection needed (I2C interface)&lt;br /&gt;
* I2C address: `0x3C`&lt;br /&gt;
&lt;br /&gt;
=== 5. Operating Instructions===&lt;br /&gt;
&lt;br /&gt;
==== Run any luma example in this directory====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python demo.py    -f ssd1306_128x32.conf&lt;br /&gt;
python clock.py   -f ssd1306_128x32.conf&lt;br /&gt;
python pi_logo.py -f ssd1306_128x32.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or pass parameters explicitly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python demo.py -d ssd1306 -i i2c --i2c-port 1 --i2c-address 0x3c --width 128 --height 32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Run the library-free raw driver===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python ssd1306_raw.py                 # 0.96&amp;quot; 128x64&lt;br /&gt;
python ssd1306_raw.py --height 32     # 0.91&amp;quot; 128x32 (this panel)&lt;br /&gt;
python ssd1306_raw.py --addr 0x3D     # modules with address 0x3D&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Minimal code (luma)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from luma.core.interface.serial import i2c&lt;br /&gt;
from luma.oled.device import ssd1306&lt;br /&gt;
from luma.core.render import canvas&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
device = ssd1306(i2c(port=1, address=0x3C), width=128, height=32)&lt;br /&gt;
with canvas(device) as draw:&lt;br /&gt;
    draw.rectangle(device.bounding_box, outline=&amp;quot;white&amp;quot;)&lt;br /&gt;
    draw.text((4, 10), &amp;quot;OK 128x32&amp;quot;, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===6. Black-Screen Decision Tree (for future modules)===&lt;br /&gt;
&lt;br /&gt;
* `i2cdetect -y 1` shows the address?&lt;br /&gt;
  &amp;lt;strong&amp;gt;No&amp;lt;/strong&amp;gt; → power/wiring fault: measure VCC-GND **at the module&#039;s solder pads**, check SDA=pin 3, SCL=pin 5, try fresh dupont wires.&lt;br /&gt;
  &amp;lt;strong&amp;gt;Yes&amp;lt;/strong&amp;gt; → continue.&lt;br /&gt;
&lt;br /&gt;
* Run `python oled_diagnose.py`. Any step lights the panel?&lt;br /&gt;
  &amp;lt;strong&amp;gt;Yes&amp;lt;/strong&amp;gt; → software/parameter issue; use the matching parameters (`-d ssd1306 --width 128 --height 32 --i2c-address 0x3c`).&lt;br /&gt;
  &amp;lt;strong&amp;gt;No&amp;lt;/strong&amp;gt; → continue.&lt;br /&gt;
&lt;br /&gt;
* Status-register test: does bit 6 flip after `0xAF`/`0xAE`?&lt;br /&gt;
  &amp;lt;strong&amp;gt;Yes&amp;lt;/strong&amp;gt; (chip executes commands, panel still dark) → charge pump/panel hardware. Check whether the module has a regulator: AMS1117 → power with **5 V**; no regulator → power with **3.3 V**. Still dark at the correct voltage → defective module, return it.&lt;br /&gt;
  &amp;lt;strong&amp;gt;No&amp;lt;/strong&amp;gt; → module-level fault (reset circuit / dead IC), return it.&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
* 1U Rackmount for Raspberry Pi 5 with M.2 NVMe SSD support.&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=DR-0001&amp;diff=16572</id>
		<title>DR-0001</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=DR-0001&amp;diff=16572"/>
		<updated>2026-08-19T05:33:04Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: /* 1. Executive Summary — What Was Actually Wrong */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==1U Rackmount for Raspberry Pi 5 ==&lt;br /&gt;
* Purchase URL: [ https://52pi.com ] or [ https://deskpi.com ]&lt;br /&gt;
[[File:DR-0001-1.jpg|right|320px]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
This is an upgraded version of a 1U Rackmount designed for compatibility with both Raspberry Pi 5 . It features a motherboard that supports PCIe expansion, allowing the PCIe interface of the Raspberry Pi 5 to be extended to accommodate an M.2 NVMe SSD in 2230/2242/2260/2280 form factors. The expansion board also routes the Raspberry Pi&#039;s 5V and GND, SDA, and SCL pins to the rear through PogoPin connectors, providing I2C interface peripherals in a Grove format. Additionally, a red LED is included on the board for the Raspberry Pi ID signal pin, which can be programmed to indicate the current device by controlling the GPIO4 pin&#039;s high or low level, acting as a programmable device ID signal light.&lt;br /&gt;
&lt;br /&gt;
The Rackmount supports the connection of up to five Raspberry Pi devices and can also be configured with an OLED display frame in place of one of the Raspberry Pi slots. These components can be easily adjusted and removed due to the use of hand-tightened screws. The OLED display features a 0.91-inch screen and communicates with the Raspberry Pi via I2C protocol, displaying real-time information such as CPU status, memory status, IP information, and serial numbers. The content displayed on the OLED can be fully customized.&lt;br /&gt;
==Features==&lt;br /&gt;
* &amp;lt;strong&amp;gt;Compatibility:&amp;lt;/strong&amp;gt; Designed to work with both Raspberry Pi 5.&lt;br /&gt;
* &amp;lt;strong&amp;gt;PCIe Expansion Support:&amp;lt;/strong&amp;gt;  Includes a motherboard that enables PCIe expansion, allowing the connection of M.2 NVMe SSDs in various form factors (2230/2242/2260/2280).&lt;br /&gt;
* &amp;lt;strong&amp;gt;I2C Interface: &amp;lt;/strong&amp;gt; The board routes the Raspberry Pi&#039;s 5V, GND, SDA, and SCL pins to the rear through PogoPin connectors, offering I2C interface peripherals in a Grove format.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Programmable LED Indicator: &amp;lt;/strong&amp;gt; A red LED on the board serves as a programmable device ID signal, controllable via the GPIO4 pin to indicate the status or identity of the device.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Modular Design:&amp;lt;/strong&amp;gt;  Supports the integration of up to five Raspberry Pi devices, with the option to replace one slot with an OLED display frame.&lt;br /&gt;
* &amp;lt;strong&amp;gt;OLED Display Integration:&amp;lt;/strong&amp;gt;  The option to include a 0.91-inch OLED screen that communicates with the Raspberry Pi via I2C, displaying customizable information such as CPU usage, memory status, IP address, and serial numbers.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Easy Assembly and Disassembly:&amp;lt;/strong&amp;gt;  Components are secured with hand-tightened screws, allowing for convenient adjustments and removal.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Customizable Display Content: &amp;lt;/strong&amp;gt; The information displayed on the OLED screen can be fully customized to meet specific needs or preferences.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Rackmount Form Factor: &amp;lt;/strong&amp;gt; Designed to fit into a 1U rack space, making it suitable for data centers or other environments where space is at a premium.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Versatility:&amp;lt;/strong&amp;gt;  The Rackmount can be configured in various ways to suit different use cases, whether for development, testing, or deployment in a production environment.&lt;br /&gt;
===Specifications===&lt;br /&gt;
* Form Factor: 1U Rackmount design suitable for standard 19-inch racks.&lt;br /&gt;
* Raspberry Pi Compatibility: Specifically designed for Raspberry Pi 5.&lt;br /&gt;
* PCIe Expansion:Supports M.2 NVMe SSDs in 2230, 2242, 2260, and 2280 form factors. Provides a PCIe interface for high-speed data transfer.&lt;br /&gt;
* I/O Connectivity: Rear I2C interface via PogoPin connectors for external peripherals.&lt;br /&gt;
* GPIO4 pin for programmable LED control.&lt;br /&gt;
* LED Indicator:Red LED for device identification or status indication. Programmable through software to show different statuses.&lt;br /&gt;
* Modular Bays: Five bays for Raspberry Pi devices. One bay can be replaced with an OLED display module.&lt;br /&gt;
* OLED Display Specifications:0.91-inch screen size, 128x32 pixels. I2C communication protocol.&lt;br /&gt;
* Customizable display for system information.&lt;br /&gt;
* Physical Security:Hand-tightened screws for secure mounting of Raspberry Pi devices and OLED display.&lt;br /&gt;
* Ensures stability and ease of maintenance.&lt;br /&gt;
* Power Requirements: Compatibility with Raspberry Pi&#039;s standard power supply.&lt;br /&gt;
* Material and Construction: Durable metal construction for the rackmount chassis. High-quality components for reliable performance.&lt;br /&gt;
* Mounting Options: Standard rackmount holes for easy installation into a rack.&lt;br /&gt;
* Includes additional mounting accessories for different setups.&lt;br /&gt;
* Software Compatibility: Compatible with Raspberry Pi&#039;s operating system and software ecosystem.&lt;br /&gt;
* Support for GPIO programming for custom LED and device control.&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product outlook&lt;br /&gt;
[[ File:DR-0001-6.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Application Senario &lt;br /&gt;
[[ File:DR-0001-2.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&amp;lt;font color=red&amp;gt; NOTE: Raspberry Pis are not included in the package, additional purchase required!&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* Easy to assemble and maintain&lt;br /&gt;
[[ File:DR-0001-3.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
[[File:DR-0001-12.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Customizable OLED display screen, with a size of 0.91 inches&lt;br /&gt;
[[ File:DR-0001-4.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Ports Definitions and Featrues &lt;br /&gt;
Programmable I/O controlled UID indicator light, which can be programmed to control the LED blinking to indicate the device&#039;s location, facilitating faster troubleshooting and easier maintenance operations.&lt;br /&gt;
[[ File:DR-0001-5.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===How to connect OLED display to Raspberry Pi on GPIO pins===&lt;br /&gt;
* Please refer to following figure to connect OLED display to Raspberry Pi on GPIO. &lt;br /&gt;
&amp;lt;font color=red&amp;gt;NOTE: OLED&#039;s VCC should be connected to 3.3V power rail, Do not connect it to 5V power rail!!!&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[ File:DR-0001-7.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Grove Connector Support I2C and Uart&lt;br /&gt;
[[ File:DR-0001-8.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Accessories Dimension&lt;br /&gt;
[[ File:DR-0001-9.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* OLED assemble details&lt;br /&gt;
Please remove the protection film from acrylic panel and use the washer between OLED PCB board and acrylic panel.&lt;br /&gt;
[[ File:DR-0001-10.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* PCIe Expansion board for Raspberry Pi 5 only&lt;br /&gt;
The expansion board supports M.2 NVMe M-key SSD 2230/2242/2260/2280, and the board will be powered by Raspberry Pi 5 via PogoPin on the PCB board, please make sure the board&#039;s pogoins are contact well with the soldering point on back of the Raspberry Pi 5 on GPIO pins. &lt;br /&gt;
[[File:DR-0001-11.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to assemble it? ==&lt;br /&gt;
* Please note that there are several details you need to pay attention, plesae check out following figure.&lt;br /&gt;
[[ File:DR-0001-安装.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Package Includes==&lt;br /&gt;
* Following figure shows the details of the product: &lt;br /&gt;
[[ File:DR-0001-清单.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to enable I2C OLED display?==&lt;br /&gt;
* We assume that you are using Raspberry Pi OS 64bit(bookworm, the latest official image) &lt;br /&gt;
To enable I2C and UART on your Raspberry Pi, you can follow these detailed steps:&lt;br /&gt;
&lt;br /&gt;
===Enabling I2C===&lt;br /&gt;
* Method 1. Using the Raspberry Pi Configuration Tool: &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo raspi-config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to open the configuration tool. Navigate to `Interface Options`, Select `I2C` and enable it.&lt;br /&gt;
&lt;br /&gt;
* Method  2. Using the Command Line:&lt;br /&gt;
You can also enable I2C by editing the `/boot/firmware/config.txt` file and adding `dtparam=i2c_arm=on` if it&#039;s not already present, After making changes, reboot your Pi.&lt;br /&gt;
&lt;br /&gt;
===Verifying I2C===&lt;br /&gt;
* Install I2C tools using `sudo apt-get install -y i2c-tools`.&lt;br /&gt;
* Use &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
i2cdetect -y 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to scan for I2C devices, if you see `3c` means that the OLED display has been recognized by your Raspberry Pi. &lt;br /&gt;
&lt;br /&gt;
===Enabling UART===&lt;br /&gt;
* Method 1. Using the Raspberry Pi Configuration Tool:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo raspi-config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Go to `Interface Options`, Select `Serial` and enable it.&lt;br /&gt;
&amp;lt;pre&amp;gt; Note: This will also enable the login shell on the serial port. &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Method 2. Using the Command Line:&lt;br /&gt;
Edit `/boot/config.txt` and add `enable_uart=1`, save it and then reboot your Pi.&lt;br /&gt;
&lt;br /&gt;
===Accessing UART===&lt;br /&gt;
* Connect your Pi to a USB-to-TTL converter, On Windows, you may need to install drivers for the converter. on Linux just use a terminal program like `minicom`, `putty`, or `screen` to access the UART interface.&lt;br /&gt;
&lt;br /&gt;
Remember to check the documentation for your specific Raspberry Pi model, as the steps might vary slightly. If you need more detailed instructions or encounter any issues, refer to the [ https://www.raspberrypi.org/documentation/ ]  or community forums for additional support.&lt;br /&gt;
&lt;br /&gt;
===How to display customized information on OLED display? ===&lt;br /&gt;
* Final result&lt;br /&gt;
[[File:DR-0001 applications-01.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
==How to customize content on OLED ?==&lt;br /&gt;
* For example: If you want to display current IP address of wlan interface and the serial number of your Raspberry Pi 5, please follow next steps to configure it. &lt;br /&gt;
===Install Virtal environment package ===&lt;br /&gt;
* Open a terminal and typing following commands:&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo apt update &lt;br /&gt;
sudo apt upgrade -y &lt;br /&gt;
sudo apt -y install virtualenv &lt;br /&gt;
sudo usermod -a -G i2c,spi,gpio pi&lt;br /&gt;
sudo apt install python3-dev python3-pip python3-numpy libfreetype6-dev libjpeg-dev build-essential&lt;br /&gt;
sudo apt install libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev libportmidi-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:Install pre-insistpackages.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
[[File:Install-pre-insistpackage-02.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Create virtual environment===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
virtualenv -p python3 venv &lt;br /&gt;
cd venv/&lt;br /&gt;
source bin/activate &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Install SSD1306 driver and library for OLED 0.91===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pip install luma.oled&lt;br /&gt;
pip install psutil&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Clone luma.examples repository===&lt;br /&gt;
Log out and in again and clone this repository:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone https://github.com/rm-hull/luma.examples.git&lt;br /&gt;
cd luma.examples/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Install luma libraries===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -H pip install -e . --break-system-packages  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:Install luma libraries.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
===Test the demo ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd examples/&lt;br /&gt;
sudo python 3d_box.py --width=128 --height=32 -r 2 &lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=red&amp;gt;&amp;lt;p&amp;gt;NOTE: &amp;lt;br&amp;gt;&lt;br /&gt;
 --width=128 and --height=32 should be added to declear the OLED&#039;s resolution information. &amp;lt;br&amp;gt;&lt;br /&gt;
 -r 2  means --rotate 2 , Allowed values are: 0, 1, 2, 3  (default:0) &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
If you see a 3D-box rotating animation is in the middle of screen means that you have installed the OLED driver successfully! &lt;br /&gt;
[[File:Test demo 3dbox.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
[[File:Test demo 3dbox-2.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
and then press &amp;quot;Ctrol+C&amp;quot; abort the demo.&lt;br /&gt;
&lt;br /&gt;
==Use the demo code==&lt;br /&gt;
* There are a lot of demo codes in the examples folder, you can test it as you want. &lt;br /&gt;
for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo python carousel.py --width=128 --height=32 -r 2 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
It will display all information of your Raspberry Pi 5 and scrolling display. &lt;br /&gt;
===Customize the display on screen===&lt;br /&gt;
Modify the sys_info.py python file and adding your own function to show the information you want, do remember backup the origin file. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp sys_info.py sys_info.py.bak &lt;br /&gt;
vim.tiny sys_info.py &lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Press &#039;i&#039; to insert mode, and paste following lines into it. you can modify this file by other text editor what you like. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
# Copyright (c) 2014-2022 Richard Hull and contributors&lt;br /&gt;
# See LICENSE.rst for details.&lt;br /&gt;
# PYTHON_ARGCOMPLETE_OK&lt;br /&gt;
&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Display basic system information.&lt;br /&gt;
&lt;br /&gt;
Needs psutil (+ dependencies) installed::&lt;br /&gt;
&lt;br /&gt;
  $ sudo apt-get install python-dev&lt;br /&gt;
  $ sudo -H pip install psutil&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
import os&lt;br /&gt;
import sys&lt;br /&gt;
import time&lt;br /&gt;
from pathlib import Path&lt;br /&gt;
from datetime import datetime&lt;br /&gt;
import subprocess as sp&lt;br /&gt;
&lt;br /&gt;
if os.name != &#039;posix&#039;:&lt;br /&gt;
    sys.exit(f&#039;{os.name} platform is not supported&#039;)&lt;br /&gt;
&lt;br /&gt;
from demo_opts import get_device&lt;br /&gt;
from luma.core.render import canvas&lt;br /&gt;
from PIL import ImageFont&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    import psutil&lt;br /&gt;
except ImportError:&lt;br /&gt;
    print(&amp;quot;The psutil library was not found. Run &#039;sudo -H pip install psutil&#039; to install it.&amp;quot;)&lt;br /&gt;
    sys.exit()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# TODO: custom font bitmaps for up/down arrows&lt;br /&gt;
# TODO: Load histogram&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def bytes2human(n):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; bytes2human(10000)&lt;br /&gt;
    &#039;9K&#039;&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; bytes2human(100001221)&lt;br /&gt;
    &#039;95M&#039;&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    symbols = (&#039;K&#039;, &#039;M&#039;, &#039;G&#039;, &#039;T&#039;, &#039;P&#039;, &#039;E&#039;, &#039;Z&#039;, &#039;Y&#039;)&lt;br /&gt;
    prefix = {}&lt;br /&gt;
    for i, s in enumerate(symbols):&lt;br /&gt;
        prefix[s] = 1 &amp;lt;&amp;lt; (i + 1) * 10&lt;br /&gt;
    for s in reversed(symbols):&lt;br /&gt;
        if n &amp;gt;= prefix[s]:&lt;br /&gt;
            value = int(float(n) / prefix[s])&lt;br /&gt;
            return &#039;%s%s&#039; % (value, s)&lt;br /&gt;
    return f&amp;quot;{n}B&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def cpu_usage():&lt;br /&gt;
    # load average, uptime&lt;br /&gt;
    uptime = datetime.now() - datetime.fromtimestamp(psutil.boot_time())&lt;br /&gt;
    #av1, av2, av3 = os.getloadavg()&lt;br /&gt;
    #return &amp;quot;Ld:%.1f %.1f %.1f Up: %s&amp;quot; \&lt;br /&gt;
    #    % (av1, av2, av3, str(uptime).split(&#039;.&#039;)[0])&lt;br /&gt;
    return &amp;quot;Up: %s&amp;quot; % (str(uptime).split(&#039;.&#039;)[0])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def mem_usage():&lt;br /&gt;
    usage = psutil.virtual_memory()&lt;br /&gt;
    return &amp;quot;Mem: %s %.0f%%&amp;quot; \&lt;br /&gt;
        % (bytes2human(usage.used), 100 - usage.percent)&lt;br /&gt;
&lt;br /&gt;
def disk_usage(dir):&lt;br /&gt;
    usage = psutil.disk_usage(dir)&lt;br /&gt;
    return &amp;quot;SD:  %s %.0f%%&amp;quot; \&lt;br /&gt;
        % (bytes2human(usage.used), usage.percent)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def network(iface):&lt;br /&gt;
    stat = psutil.net_io_counters(pernic=True)[iface]&lt;br /&gt;
    return &amp;quot;%s: Tx%s, Rx%s&amp;quot; % \&lt;br /&gt;
           (iface, bytes2human(stat.bytes_sent), bytes2human(stat.bytes_recv))&lt;br /&gt;
&lt;br /&gt;
def mem_usage():&lt;br /&gt;
    usage = psutil.virtual_memory()&lt;br /&gt;
    return &amp;quot;Mem: %s %.0f%%&amp;quot; \&lt;br /&gt;
        % (bytes2human(usage.used), 100 - usage.percent)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def disk_usage(dir):&lt;br /&gt;
    usage = psutil.disk_usage(dir)&lt;br /&gt;
    return &amp;quot;SD:  %s %.0f%%&amp;quot; \&lt;br /&gt;
        % (bytes2human(usage.used), usage.percent)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def network(iface):&lt;br /&gt;
    stat = psutil.net_io_counters(pernic=True)[iface]&lt;br /&gt;
    return &amp;quot;%s: Tx%s, Rx%s&amp;quot; % \&lt;br /&gt;
           (iface, bytes2human(stat.bytes_sent), bytes2human(stat.bytes_recv))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def get_ip_address():&lt;br /&gt;
    ip = sp.getoutput(&#039;hostname -I&#039;)&lt;br /&gt;
    return &amp;quot;IP: %s&amp;quot; % ip&lt;br /&gt;
&lt;br /&gt;
def get_id():&lt;br /&gt;
    id_of_pi = sp.getoutput(&amp;quot;cat /proc/cpuinfo | grep -i serial| awk -F: &#039;{print $2}&#039;|xargs&amp;quot;)&lt;br /&gt;
    return &amp;quot;%s&amp;quot; % id_of_pi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def stats(device):&lt;br /&gt;
    # use custom font&lt;br /&gt;
    font_path = str(Path(__file__).resolve().parent.joinpath(&#039;fonts&#039;, &#039;C&amp;amp;C Red Alert [INET].ttf&#039;))&lt;br /&gt;
    #font_path = str(Path(__file__).resolve().parent.joinpath(&#039;fonts&#039;, &#039;DejaVuSansMono.ttf&#039;))&lt;br /&gt;
    font2 = ImageFont.truetype(font_path, 15)&lt;br /&gt;
&lt;br /&gt;
    with canvas(device) as draw:&lt;br /&gt;
        # draw.text((0, 0), cpu_usage(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
        draw.text((0, 0), get_id(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
        if device.height &amp;gt;= 32:&lt;br /&gt;
            #draw.text((0, 11), mem_usage(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            #draw.text((0, 16), disk_usage(&#039;/&#039;), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            draw.text((0, 16), get_ip_address(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        if device.height &amp;gt;= 64:&lt;br /&gt;
            draw.text((0, 26), disk_usage(&#039;/&#039;), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            try:&lt;br /&gt;
                draw.text((0, 38), network(&#039;wlan0&#039;), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            except KeyError:&lt;br /&gt;
                # no wifi enabled/available&lt;br /&gt;
                pass&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    while True:&lt;br /&gt;
        stats(device)&lt;br /&gt;
        time.sleep(5)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    try:&lt;br /&gt;
        device = get_device()&lt;br /&gt;
        main()&lt;br /&gt;
    except KeyboardInterrupt:&lt;br /&gt;
        pass&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Here let me explain to you what i did.&lt;br /&gt;
* adding &amp;quot; import subprocess as sp&amp;quot;, this will help me to execute some shell command in OS. &lt;br /&gt;
* adding following parts:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def get_ip_address():&lt;br /&gt;
    ip = sp.getoutput(&#039;hostname -I&#039;)&lt;br /&gt;
    return &amp;quot;IP: %s&amp;quot; % ip&lt;br /&gt;
&lt;br /&gt;
def get_id():&lt;br /&gt;
    id_of_pi = sp.getoutput(&amp;quot;cat /proc/cpuinfo | grep -i serial| awk -F: &#039;{print $2}&#039;|xargs&amp;quot;)&lt;br /&gt;
    return &amp;quot;%s&amp;quot; % id_of_pi&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
* get_ip_address will execute the command &amp;quot;hostname -I&amp;quot; in system and grab the IP address and return it to main process.&lt;br /&gt;
* get_id is to read /proc/cpuinfo file and grab the serial number and return to main process.&lt;br /&gt;
&lt;br /&gt;
===Use custom font===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   font_path = str(Path(__file__).resolve().parent.joinpath(&#039;fonts&#039;, &#039;C&amp;amp;C Red Alert [INET].ttf&#039;))&lt;br /&gt;
   font2 = ImageFont.truetype(font_path, 15)   # change font size to 15. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Modify the draw function===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  with canvas(device) as draw:&lt;br /&gt;
        # draw.text((0, 0), cpu_usage(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
        draw.text((0, 0), get_id(), font=font2, fill=&amp;quot;white&amp;quot;)         #####　draw id on screen at (0,0) position, (x,y)&lt;br /&gt;
        if device.height &amp;gt;= 32:&lt;br /&gt;
            #draw.text((0, 11), mem_usage(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            #draw.text((0, 16), disk_usage(&#039;/&#039;), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            draw.text((0, 16), get_ip_address(), font=font2, fill=&amp;quot;white&amp;quot;)   ####　draw text on (0,16) with IP address. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to create a systemd file to make it automatically start at boot up==&lt;br /&gt;
* Step1. create a shell script called it &#039;start_led.sh&#039; &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
cd /home/pi/venv/ &amp;amp;&amp;amp; source /home/pi/venv/bin/activate &lt;br /&gt;
/usr/bin/python3 /home/pi/luma.examples/examples/sys_info.py --width=128 --height=32 -r 2 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
save it and grant executable permission and test it.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x start_led.sh &lt;br /&gt;
./start_led.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
If if works properly, just press &amp;quot;ctrol+c&amp;quot; to abort the test.&lt;br /&gt;
* Step2. create a systemd file and enable it.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo vim.tiny /etc/systemd/system/rackmount_oled.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
And then, adding following lines:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Rackmount OLED service on RPi5&lt;br /&gt;
DefaultDependencies=no&lt;br /&gt;
StartLimitIntervalSec=60&lt;br /&gt;
StartLimitBurst=5&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
ExecStart=/bin/bash /home/pi/start_led.sh&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Save it and quit. &lt;br /&gt;
===Enable rackmount_oled.service===&lt;br /&gt;
* reload daemon&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl daemon-reload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Enable service&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo systemctl enable rackmount_oled.service &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Start service &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start rackmount_oled.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Restart service&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart rackmount_oled.service &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Stop service&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl stop rackmount_oled.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Disable service &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl disable rackmount_oled.service &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to enable PCIe function on Raspberry Pi 5?==&lt;br /&gt;
* To enable PCIe functionality on the Raspberry Pi 5, follow these steps:&lt;br /&gt;
&lt;br /&gt;
===1. Enable the PCIe External Connector:===&lt;br /&gt;
By default, the PCIe connector on the Raspberry Pi 5 is not enabled. To enable it, you need to add a configuration parameter to the `config.txt` file located in the `/boot/firmware` directory. You can use either of these lines:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dtparam=pciex1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After adding the line, reboot your Raspberry Pi for the changes to take effect.&lt;br /&gt;
&lt;br /&gt;
===2.Enable PCIe Gen 3.0 (Optional):===&lt;br /&gt;
The Raspberry Pi 5&#039;s PCIe connection is certified for Gen 2.0 speeds. However, if you want to attempt using Gen 3.0 speeds, add the following line to the `config.txt` file as well:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dtparam=pciex1_gen=3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 Be aware that the Raspberry Pi 5 is not certified for Gen 3.0 speeds, and using this setting may result in instability .&lt;br /&gt;
&lt;br /&gt;
===3.Booting from PCIe:===&lt;br /&gt;
If you intend to boot from a device connected via PCIe, such as an NVMe SSD, you will need to modify the boot order in the EEPROM. Use the following command to edit the EEPROM configuration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &lt;br /&gt;
sudo apt upgrade -y &lt;br /&gt;
sudo rpi-eeprom-config --edit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then, change the `BOOT_ORDER` line to include NVMe in the boot order:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BOOT_ORDER=0xf416&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This setting will make the Raspberry Pi attempt to boot from an NVMe device connected to the PCIe port .&lt;br /&gt;
===4. Kernel Compilation (Advanced):===&lt;br /&gt;
If you need to compile the kernel to add support for specific PCIe devices, you can follow the steps outlined in the Raspberry Pi documentation. This involves cloning the Raspberry Pi kernel repository, configuring the kernel with `make menuconfig`, and enabling the necessary modules for your devices .&lt;br /&gt;
Remember to always check the compatibility of the devices you intend to use with the Raspberry Pi 5&#039;s PCIe interface, as not all devices may be supported out of the box.&lt;br /&gt;
&lt;br /&gt;
==How to light up identical LED? ==&lt;br /&gt;
To light up UID LED indicator on a Raspberry Pi 5, you&#039;ll make sure the GPIO Pin of the UID LED connected to. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GPIO (General Purpose Input/Output) pins on the Raspberry Pi.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Steps===&lt;br /&gt;
* 1. Identify GPIO Pins: &amp;lt;font color=red&amp;gt;GPIO4&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* 2. Power On:&lt;br /&gt;
Make sure your Raspberry Pi is powered off before connecting the LED. Once everything is connected, you can power on your Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
* 3. Software Setup:&lt;br /&gt;
You&#039;ll need to write a small program to turn the GPIO pin on and off to control the LED. You can use Python with the `gpiozero` library or `RPi.GPIO` library to control the GPIO pins.&lt;br /&gt;
&lt;br /&gt;
===Example Python Code with gpiozero:===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from gpiozero import LED&lt;br /&gt;
from time import sleep&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
led = LED(&#039;GPIO4&#039;)&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    led.on()&lt;br /&gt;
    sleep(1)&lt;br /&gt;
    led.off()&lt;br /&gt;
    sleep(1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Example Python Code with RPi.GPIO:===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import RPi.GPIO as GPIO&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
# Set the GPIO mode&lt;br /&gt;
GPIO.setmode(GPIO.BCM)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GPIO_PIN = 4&lt;br /&gt;
&lt;br /&gt;
# Set up the GPIO pin as an output channel&lt;br /&gt;
GPIO.setup(GPIO_PIN, GPIO.OUT)&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    GPIO.output(GPIO_PIN, GPIO.HIGH)  # Turn on the LED&lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
    GPIO.output(GPIO_PIN, GPIO.LOW)   # Turn off the LED&lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
&lt;br /&gt;
# Clean up the GPIO pins before exiting the program&lt;br /&gt;
GPIO.cleanup()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Safety Tips:===&lt;br /&gt;
* Be careful not to short any pins on the Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
=== SSD1306 OLED Black-Screen Debugging Report &amp;amp; Operation Guide===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;Target hardware:&amp;lt;/strong&amp;gt; 0.91&amp;quot; OLED, 128×32 px, SSD1306, I2C, address 0x3C, Raspberry Pi 5&lt;br /&gt;
&amp;lt;strong&amp;gt;Software:&amp;lt;/strong&amp;gt; luma.oled 3.15.0, luma.core 2.6.0, Python 3.13, smbus2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1. Executive Summary — What Was Actually Wrong ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;Nothing was wrong with the code, the luma library, or the SSD1306 register configuration.&amp;lt;/strong&amp;gt;&lt;br /&gt;
No library or example source code was modified. The failures came from hardware and&lt;br /&gt;
configuration, in one layers:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;A parameter mismatch in the examples.&amp;lt;/strong&amp;gt;  The examples in this directory default to&lt;br /&gt;
  `ssd1305 / 128×64`; this panel is `ssd1306 / 128×32`. Running without parameters&lt;br /&gt;
  produces a black or garbled screen. The fix is to pass the correct display, interface,&lt;br /&gt;
  geometry and address — done via the config file `ssd1306_128x32.conf`.&lt;br /&gt;
&lt;br /&gt;
* ssd1306_128x32.conf contents:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--display=ssd1306&lt;br /&gt;
--interface=i2c&lt;br /&gt;
--i2c-port=1&lt;br /&gt;
--i2c-address=0x3c&lt;br /&gt;
--width=128&lt;br /&gt;
--height=32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Put this configuration file to your demo code location:&lt;br /&gt;
[[ File:Democodeconfig.png|left| 800px ]] &lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* How to execute with config file&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo python3 demo.py -f ssd1306_128x32.conf &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. What Was Done, Step by Step (Method and Basis)===&lt;br /&gt;
&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
     |+ Diagnosis — locating the fault&lt;br /&gt;
     ! Method !! Basis / Reasoning&lt;br /&gt;
     |-&lt;br /&gt;
     | Bus scan with &amp;lt;code&amp;gt;i2cdetect&amp;lt;/code&amp;gt; || An ACK at 0x3C proves all four wires&lt;br /&gt;
   (VCC/GND/SDA/SCL) are connected and the driver IC is powered&lt;br /&gt;
     |-&lt;br /&gt;
     | Source inspection of ssd1306 in luma.oled 3.15.0 || The 128×32 init sequence&lt;br /&gt;
   (multiplex 0x1F, compins 0x02, charge pump 0x14) matches the datasheet standard — a&lt;br /&gt;
   register-level bug was ruled out on evidence&lt;br /&gt;
     |-&lt;br /&gt;
     | Raw-register write of 0xA5 (force all-on) || This command bypasses GDDRAM; a&lt;br /&gt;
   healthy panel must glow. No light = fault in the high-voltage path (charge pump /&lt;br /&gt;
   panel / flex cable)&lt;br /&gt;
     |-&lt;br /&gt;
     | Status-register read before/after DISPLAY ON/OFF commands || Per the SSD1306&lt;br /&gt;
   datasheet, bit 6 is the display ON/OFF flag. It flipped correctly, proving the chip&lt;br /&gt;
   executes commands — fault isolated to the panel side&lt;br /&gt;
     |-&lt;br /&gt;
     | 5 consecutive bus scans + 10 consecutive status reads || All values stable and&lt;br /&gt;
   identical — ruled out loose wiring and parasitic power&lt;br /&gt;
     |-&lt;br /&gt;
     | 3.3V / 5V supply switching test || Modules with an AMS1117 regulator require 5V;&lt;br /&gt;
   bare modules without a regulator require 3.3V. The working module lit at 3.3V&lt;br /&gt;
     |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===3. Files Created / Modified===&lt;br /&gt;
&lt;br /&gt;
  {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
     |+ Fixes and deliverables&lt;br /&gt;
     ! File !! Type !! Description&lt;br /&gt;
     |-&lt;br /&gt;
     | &amp;lt;code&amp;gt;ssd1306_128x32.conf&amp;lt;/code&amp;gt; || Fixed || Initially written in INI format,&lt;br /&gt;
   causing &amp;quot;unrecognized arguments&amp;quot;. Based on the source of&lt;br /&gt;
   &amp;lt;code&amp;gt;luma.core.cmdline.load_config&amp;lt;/code&amp;gt; (reads line by line, no whitespace&lt;br /&gt;
   splitting), rewritten as one &amp;lt;code&amp;gt;--key=value&amp;lt;/code&amp;gt; per line; demo.py then ran&lt;br /&gt;
   successfully&lt;br /&gt;
     |-&lt;br /&gt;
     | &amp;lt;code&amp;gt;ssd1306_raw.py&amp;lt;/code&amp;gt; || Created || Library-free SSD1306 driver; writes&lt;br /&gt;
   registers directly via smbus2 (PIL used only for pixel rendering)&lt;br /&gt;
     |-&lt;br /&gt;
     | &amp;lt;code&amp;gt;OLED_128x32_I2C_manual.md&amp;lt;/code&amp;gt; || Created / updated || Bilingual&lt;br /&gt;
   operation manual; added the regulator/supply-voltage rule and the hardware-failure&lt;br /&gt;
   criterion&lt;br /&gt;
     |-&lt;br /&gt;
     | &amp;lt;code&amp;gt;SSD1306_Debug_Report_EN.md&amp;lt;/code&amp;gt; || Created || Full English debugging&lt;br /&gt;
   report and operation guide&lt;br /&gt;
     |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
No files in luma.oled / luma.core or the example scripts were modified.&lt;br /&gt;
&lt;br /&gt;
===4. Final Working Configuration===&lt;br /&gt;
&lt;br /&gt;
* Module: bare 0.91&amp;quot; 128×32 SSD1306, &amp;lt;strong&amp;gt;no onboard regulator&amp;lt;/strong&amp;gt;&lt;br /&gt;
* Wiring: VCC → &amp;lt;strong&amp;gt;3.3 V&amp;lt;/strong&amp;gt; (pin 1), GND → GND, SDA → GPIO2 (pin 3), SCL → GPIO3 (pin 5)&lt;br /&gt;
* No RST/RES connection needed (I2C interface)&lt;br /&gt;
* I2C address: `0x3C`&lt;br /&gt;
&lt;br /&gt;
=== 5. Operating Instructions===&lt;br /&gt;
&lt;br /&gt;
==== Run any luma example in this directory====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python demo.py    -f ssd1306_128x32.conf&lt;br /&gt;
python clock.py   -f ssd1306_128x32.conf&lt;br /&gt;
python pi_logo.py -f ssd1306_128x32.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or pass parameters explicitly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python demo.py -d ssd1306 -i i2c --i2c-port 1 --i2c-address 0x3c --width 128 --height 32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Run the library-free raw driver===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python ssd1306_raw.py                 # 0.96&amp;quot; 128x64&lt;br /&gt;
python ssd1306_raw.py --height 32     # 0.91&amp;quot; 128x32 (this panel)&lt;br /&gt;
python ssd1306_raw.py --addr 0x3D     # modules with address 0x3D&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Minimal code (luma)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from luma.core.interface.serial import i2c&lt;br /&gt;
from luma.oled.device import ssd1306&lt;br /&gt;
from luma.core.render import canvas&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
device = ssd1306(i2c(port=1, address=0x3C), width=128, height=32)&lt;br /&gt;
with canvas(device) as draw:&lt;br /&gt;
    draw.rectangle(device.bounding_box, outline=&amp;quot;white&amp;quot;)&lt;br /&gt;
    draw.text((4, 10), &amp;quot;OK 128x32&amp;quot;, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===6. Black-Screen Decision Tree (for future modules)===&lt;br /&gt;
&lt;br /&gt;
* `i2cdetect -y 1` shows the address?&lt;br /&gt;
  &amp;lt;strong&amp;gt;No&amp;lt;/strong&amp;gt; → power/wiring fault: measure VCC-GND **at the module&#039;s solder pads**, check SDA=pin 3, SCL=pin 5, try fresh dupont wires.&lt;br /&gt;
  &amp;lt;strong&amp;gt;Yes&amp;lt;/strong&amp;gt; → continue.&lt;br /&gt;
&lt;br /&gt;
* Run `python oled_diagnose.py`. Any step lights the panel?&lt;br /&gt;
  &amp;lt;strong&amp;gt;Yes&amp;lt;/strong&amp;gt; → software/parameter issue; use the matching parameters (`-d ssd1306 --width 128 --height 32 --i2c-address 0x3c`).&lt;br /&gt;
  &amp;lt;strong&amp;gt;No&amp;lt;/strong&amp;gt; → continue.&lt;br /&gt;
&lt;br /&gt;
* Status-register test: does bit 6 flip after `0xAF`/`0xAE`?&lt;br /&gt;
  &amp;lt;strong&amp;gt;Yes&amp;lt;/strong&amp;gt; (chip executes commands, panel still dark) → charge pump/panel hardware. Check whether the module has a regulator: AMS1117 → power with **5 V**; no regulator → power with **3.3 V**. Still dark at the correct voltage → defective module, return it.&lt;br /&gt;
  &amp;lt;strong&amp;gt;No&amp;lt;/strong&amp;gt; → module-level fault (reset circuit / dead IC), return it.&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
* 1U Rackmount for Raspberry Pi 5 with M.2 NVMe SSD support.&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=File:Democodeconfig.png&amp;diff=16571</id>
		<title>File:Democodeconfig.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=File:Democodeconfig.png&amp;diff=16571"/>
		<updated>2026-08-19T05:23:29Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=DR-0001&amp;diff=16570</id>
		<title>DR-0001</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=DR-0001&amp;diff=16570"/>
		<updated>2026-08-19T05:18:30Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: /* FAQ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==1U Rackmount for Raspberry Pi 5 ==&lt;br /&gt;
* Purchase URL: [ https://52pi.com ] or [ https://deskpi.com ]&lt;br /&gt;
[[File:DR-0001-1.jpg|right|320px]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
This is an upgraded version of a 1U Rackmount designed for compatibility with both Raspberry Pi 5 . It features a motherboard that supports PCIe expansion, allowing the PCIe interface of the Raspberry Pi 5 to be extended to accommodate an M.2 NVMe SSD in 2230/2242/2260/2280 form factors. The expansion board also routes the Raspberry Pi&#039;s 5V and GND, SDA, and SCL pins to the rear through PogoPin connectors, providing I2C interface peripherals in a Grove format. Additionally, a red LED is included on the board for the Raspberry Pi ID signal pin, which can be programmed to indicate the current device by controlling the GPIO4 pin&#039;s high or low level, acting as a programmable device ID signal light.&lt;br /&gt;
&lt;br /&gt;
The Rackmount supports the connection of up to five Raspberry Pi devices and can also be configured with an OLED display frame in place of one of the Raspberry Pi slots. These components can be easily adjusted and removed due to the use of hand-tightened screws. The OLED display features a 0.91-inch screen and communicates with the Raspberry Pi via I2C protocol, displaying real-time information such as CPU status, memory status, IP information, and serial numbers. The content displayed on the OLED can be fully customized.&lt;br /&gt;
==Features==&lt;br /&gt;
* &amp;lt;strong&amp;gt;Compatibility:&amp;lt;/strong&amp;gt; Designed to work with both Raspberry Pi 5.&lt;br /&gt;
* &amp;lt;strong&amp;gt;PCIe Expansion Support:&amp;lt;/strong&amp;gt;  Includes a motherboard that enables PCIe expansion, allowing the connection of M.2 NVMe SSDs in various form factors (2230/2242/2260/2280).&lt;br /&gt;
* &amp;lt;strong&amp;gt;I2C Interface: &amp;lt;/strong&amp;gt; The board routes the Raspberry Pi&#039;s 5V, GND, SDA, and SCL pins to the rear through PogoPin connectors, offering I2C interface peripherals in a Grove format.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Programmable LED Indicator: &amp;lt;/strong&amp;gt; A red LED on the board serves as a programmable device ID signal, controllable via the GPIO4 pin to indicate the status or identity of the device.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Modular Design:&amp;lt;/strong&amp;gt;  Supports the integration of up to five Raspberry Pi devices, with the option to replace one slot with an OLED display frame.&lt;br /&gt;
* &amp;lt;strong&amp;gt;OLED Display Integration:&amp;lt;/strong&amp;gt;  The option to include a 0.91-inch OLED screen that communicates with the Raspberry Pi via I2C, displaying customizable information such as CPU usage, memory status, IP address, and serial numbers.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Easy Assembly and Disassembly:&amp;lt;/strong&amp;gt;  Components are secured with hand-tightened screws, allowing for convenient adjustments and removal.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Customizable Display Content: &amp;lt;/strong&amp;gt; The information displayed on the OLED screen can be fully customized to meet specific needs or preferences.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Rackmount Form Factor: &amp;lt;/strong&amp;gt; Designed to fit into a 1U rack space, making it suitable for data centers or other environments where space is at a premium.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Versatility:&amp;lt;/strong&amp;gt;  The Rackmount can be configured in various ways to suit different use cases, whether for development, testing, or deployment in a production environment.&lt;br /&gt;
===Specifications===&lt;br /&gt;
* Form Factor: 1U Rackmount design suitable for standard 19-inch racks.&lt;br /&gt;
* Raspberry Pi Compatibility: Specifically designed for Raspberry Pi 5.&lt;br /&gt;
* PCIe Expansion:Supports M.2 NVMe SSDs in 2230, 2242, 2260, and 2280 form factors. Provides a PCIe interface for high-speed data transfer.&lt;br /&gt;
* I/O Connectivity: Rear I2C interface via PogoPin connectors for external peripherals.&lt;br /&gt;
* GPIO4 pin for programmable LED control.&lt;br /&gt;
* LED Indicator:Red LED for device identification or status indication. Programmable through software to show different statuses.&lt;br /&gt;
* Modular Bays: Five bays for Raspberry Pi devices. One bay can be replaced with an OLED display module.&lt;br /&gt;
* OLED Display Specifications:0.91-inch screen size, 128x32 pixels. I2C communication protocol.&lt;br /&gt;
* Customizable display for system information.&lt;br /&gt;
* Physical Security:Hand-tightened screws for secure mounting of Raspberry Pi devices and OLED display.&lt;br /&gt;
* Ensures stability and ease of maintenance.&lt;br /&gt;
* Power Requirements: Compatibility with Raspberry Pi&#039;s standard power supply.&lt;br /&gt;
* Material and Construction: Durable metal construction for the rackmount chassis. High-quality components for reliable performance.&lt;br /&gt;
* Mounting Options: Standard rackmount holes for easy installation into a rack.&lt;br /&gt;
* Includes additional mounting accessories for different setups.&lt;br /&gt;
* Software Compatibility: Compatible with Raspberry Pi&#039;s operating system and software ecosystem.&lt;br /&gt;
* Support for GPIO programming for custom LED and device control.&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product outlook&lt;br /&gt;
[[ File:DR-0001-6.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Application Senario &lt;br /&gt;
[[ File:DR-0001-2.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&amp;lt;font color=red&amp;gt; NOTE: Raspberry Pis are not included in the package, additional purchase required!&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* Easy to assemble and maintain&lt;br /&gt;
[[ File:DR-0001-3.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
[[File:DR-0001-12.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Customizable OLED display screen, with a size of 0.91 inches&lt;br /&gt;
[[ File:DR-0001-4.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Ports Definitions and Featrues &lt;br /&gt;
Programmable I/O controlled UID indicator light, which can be programmed to control the LED blinking to indicate the device&#039;s location, facilitating faster troubleshooting and easier maintenance operations.&lt;br /&gt;
[[ File:DR-0001-5.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===How to connect OLED display to Raspberry Pi on GPIO pins===&lt;br /&gt;
* Please refer to following figure to connect OLED display to Raspberry Pi on GPIO. &lt;br /&gt;
&amp;lt;font color=red&amp;gt;NOTE: OLED&#039;s VCC should be connected to 3.3V power rail, Do not connect it to 5V power rail!!!&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[ File:DR-0001-7.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Grove Connector Support I2C and Uart&lt;br /&gt;
[[ File:DR-0001-8.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Accessories Dimension&lt;br /&gt;
[[ File:DR-0001-9.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* OLED assemble details&lt;br /&gt;
Please remove the protection film from acrylic panel and use the washer between OLED PCB board and acrylic panel.&lt;br /&gt;
[[ File:DR-0001-10.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* PCIe Expansion board for Raspberry Pi 5 only&lt;br /&gt;
The expansion board supports M.2 NVMe M-key SSD 2230/2242/2260/2280, and the board will be powered by Raspberry Pi 5 via PogoPin on the PCB board, please make sure the board&#039;s pogoins are contact well with the soldering point on back of the Raspberry Pi 5 on GPIO pins. &lt;br /&gt;
[[File:DR-0001-11.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to assemble it? ==&lt;br /&gt;
* Please note that there are several details you need to pay attention, plesae check out following figure.&lt;br /&gt;
[[ File:DR-0001-安装.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Package Includes==&lt;br /&gt;
* Following figure shows the details of the product: &lt;br /&gt;
[[ File:DR-0001-清单.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to enable I2C OLED display?==&lt;br /&gt;
* We assume that you are using Raspberry Pi OS 64bit(bookworm, the latest official image) &lt;br /&gt;
To enable I2C and UART on your Raspberry Pi, you can follow these detailed steps:&lt;br /&gt;
&lt;br /&gt;
===Enabling I2C===&lt;br /&gt;
* Method 1. Using the Raspberry Pi Configuration Tool: &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo raspi-config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to open the configuration tool. Navigate to `Interface Options`, Select `I2C` and enable it.&lt;br /&gt;
&lt;br /&gt;
* Method  2. Using the Command Line:&lt;br /&gt;
You can also enable I2C by editing the `/boot/firmware/config.txt` file and adding `dtparam=i2c_arm=on` if it&#039;s not already present, After making changes, reboot your Pi.&lt;br /&gt;
&lt;br /&gt;
===Verifying I2C===&lt;br /&gt;
* Install I2C tools using `sudo apt-get install -y i2c-tools`.&lt;br /&gt;
* Use &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
i2cdetect -y 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to scan for I2C devices, if you see `3c` means that the OLED display has been recognized by your Raspberry Pi. &lt;br /&gt;
&lt;br /&gt;
===Enabling UART===&lt;br /&gt;
* Method 1. Using the Raspberry Pi Configuration Tool:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo raspi-config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Go to `Interface Options`, Select `Serial` and enable it.&lt;br /&gt;
&amp;lt;pre&amp;gt; Note: This will also enable the login shell on the serial port. &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Method 2. Using the Command Line:&lt;br /&gt;
Edit `/boot/config.txt` and add `enable_uart=1`, save it and then reboot your Pi.&lt;br /&gt;
&lt;br /&gt;
===Accessing UART===&lt;br /&gt;
* Connect your Pi to a USB-to-TTL converter, On Windows, you may need to install drivers for the converter. on Linux just use a terminal program like `minicom`, `putty`, or `screen` to access the UART interface.&lt;br /&gt;
&lt;br /&gt;
Remember to check the documentation for your specific Raspberry Pi model, as the steps might vary slightly. If you need more detailed instructions or encounter any issues, refer to the [ https://www.raspberrypi.org/documentation/ ]  or community forums for additional support.&lt;br /&gt;
&lt;br /&gt;
===How to display customized information on OLED display? ===&lt;br /&gt;
* Final result&lt;br /&gt;
[[File:DR-0001 applications-01.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
==How to customize content on OLED ?==&lt;br /&gt;
* For example: If you want to display current IP address of wlan interface and the serial number of your Raspberry Pi 5, please follow next steps to configure it. &lt;br /&gt;
===Install Virtal environment package ===&lt;br /&gt;
* Open a terminal and typing following commands:&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo apt update &lt;br /&gt;
sudo apt upgrade -y &lt;br /&gt;
sudo apt -y install virtualenv &lt;br /&gt;
sudo usermod -a -G i2c,spi,gpio pi&lt;br /&gt;
sudo apt install python3-dev python3-pip python3-numpy libfreetype6-dev libjpeg-dev build-essential&lt;br /&gt;
sudo apt install libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev libportmidi-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:Install pre-insistpackages.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
[[File:Install-pre-insistpackage-02.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Create virtual environment===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
virtualenv -p python3 venv &lt;br /&gt;
cd venv/&lt;br /&gt;
source bin/activate &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Install SSD1306 driver and library for OLED 0.91===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pip install luma.oled&lt;br /&gt;
pip install psutil&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Clone luma.examples repository===&lt;br /&gt;
Log out and in again and clone this repository:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone https://github.com/rm-hull/luma.examples.git&lt;br /&gt;
cd luma.examples/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Install luma libraries===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -H pip install -e . --break-system-packages  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:Install luma libraries.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
===Test the demo ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd examples/&lt;br /&gt;
sudo python 3d_box.py --width=128 --height=32 -r 2 &lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=red&amp;gt;&amp;lt;p&amp;gt;NOTE: &amp;lt;br&amp;gt;&lt;br /&gt;
 --width=128 and --height=32 should be added to declear the OLED&#039;s resolution information. &amp;lt;br&amp;gt;&lt;br /&gt;
 -r 2  means --rotate 2 , Allowed values are: 0, 1, 2, 3  (default:0) &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
If you see a 3D-box rotating animation is in the middle of screen means that you have installed the OLED driver successfully! &lt;br /&gt;
[[File:Test demo 3dbox.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
[[File:Test demo 3dbox-2.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
and then press &amp;quot;Ctrol+C&amp;quot; abort the demo.&lt;br /&gt;
&lt;br /&gt;
==Use the demo code==&lt;br /&gt;
* There are a lot of demo codes in the examples folder, you can test it as you want. &lt;br /&gt;
for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo python carousel.py --width=128 --height=32 -r 2 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
It will display all information of your Raspberry Pi 5 and scrolling display. &lt;br /&gt;
===Customize the display on screen===&lt;br /&gt;
Modify the sys_info.py python file and adding your own function to show the information you want, do remember backup the origin file. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp sys_info.py sys_info.py.bak &lt;br /&gt;
vim.tiny sys_info.py &lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Press &#039;i&#039; to insert mode, and paste following lines into it. you can modify this file by other text editor what you like. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
# Copyright (c) 2014-2022 Richard Hull and contributors&lt;br /&gt;
# See LICENSE.rst for details.&lt;br /&gt;
# PYTHON_ARGCOMPLETE_OK&lt;br /&gt;
&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Display basic system information.&lt;br /&gt;
&lt;br /&gt;
Needs psutil (+ dependencies) installed::&lt;br /&gt;
&lt;br /&gt;
  $ sudo apt-get install python-dev&lt;br /&gt;
  $ sudo -H pip install psutil&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
import os&lt;br /&gt;
import sys&lt;br /&gt;
import time&lt;br /&gt;
from pathlib import Path&lt;br /&gt;
from datetime import datetime&lt;br /&gt;
import subprocess as sp&lt;br /&gt;
&lt;br /&gt;
if os.name != &#039;posix&#039;:&lt;br /&gt;
    sys.exit(f&#039;{os.name} platform is not supported&#039;)&lt;br /&gt;
&lt;br /&gt;
from demo_opts import get_device&lt;br /&gt;
from luma.core.render import canvas&lt;br /&gt;
from PIL import ImageFont&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    import psutil&lt;br /&gt;
except ImportError:&lt;br /&gt;
    print(&amp;quot;The psutil library was not found. Run &#039;sudo -H pip install psutil&#039; to install it.&amp;quot;)&lt;br /&gt;
    sys.exit()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# TODO: custom font bitmaps for up/down arrows&lt;br /&gt;
# TODO: Load histogram&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def bytes2human(n):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; bytes2human(10000)&lt;br /&gt;
    &#039;9K&#039;&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; bytes2human(100001221)&lt;br /&gt;
    &#039;95M&#039;&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    symbols = (&#039;K&#039;, &#039;M&#039;, &#039;G&#039;, &#039;T&#039;, &#039;P&#039;, &#039;E&#039;, &#039;Z&#039;, &#039;Y&#039;)&lt;br /&gt;
    prefix = {}&lt;br /&gt;
    for i, s in enumerate(symbols):&lt;br /&gt;
        prefix[s] = 1 &amp;lt;&amp;lt; (i + 1) * 10&lt;br /&gt;
    for s in reversed(symbols):&lt;br /&gt;
        if n &amp;gt;= prefix[s]:&lt;br /&gt;
            value = int(float(n) / prefix[s])&lt;br /&gt;
            return &#039;%s%s&#039; % (value, s)&lt;br /&gt;
    return f&amp;quot;{n}B&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def cpu_usage():&lt;br /&gt;
    # load average, uptime&lt;br /&gt;
    uptime = datetime.now() - datetime.fromtimestamp(psutil.boot_time())&lt;br /&gt;
    #av1, av2, av3 = os.getloadavg()&lt;br /&gt;
    #return &amp;quot;Ld:%.1f %.1f %.1f Up: %s&amp;quot; \&lt;br /&gt;
    #    % (av1, av2, av3, str(uptime).split(&#039;.&#039;)[0])&lt;br /&gt;
    return &amp;quot;Up: %s&amp;quot; % (str(uptime).split(&#039;.&#039;)[0])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def mem_usage():&lt;br /&gt;
    usage = psutil.virtual_memory()&lt;br /&gt;
    return &amp;quot;Mem: %s %.0f%%&amp;quot; \&lt;br /&gt;
        % (bytes2human(usage.used), 100 - usage.percent)&lt;br /&gt;
&lt;br /&gt;
def disk_usage(dir):&lt;br /&gt;
    usage = psutil.disk_usage(dir)&lt;br /&gt;
    return &amp;quot;SD:  %s %.0f%%&amp;quot; \&lt;br /&gt;
        % (bytes2human(usage.used), usage.percent)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def network(iface):&lt;br /&gt;
    stat = psutil.net_io_counters(pernic=True)[iface]&lt;br /&gt;
    return &amp;quot;%s: Tx%s, Rx%s&amp;quot; % \&lt;br /&gt;
           (iface, bytes2human(stat.bytes_sent), bytes2human(stat.bytes_recv))&lt;br /&gt;
&lt;br /&gt;
def mem_usage():&lt;br /&gt;
    usage = psutil.virtual_memory()&lt;br /&gt;
    return &amp;quot;Mem: %s %.0f%%&amp;quot; \&lt;br /&gt;
        % (bytes2human(usage.used), 100 - usage.percent)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def disk_usage(dir):&lt;br /&gt;
    usage = psutil.disk_usage(dir)&lt;br /&gt;
    return &amp;quot;SD:  %s %.0f%%&amp;quot; \&lt;br /&gt;
        % (bytes2human(usage.used), usage.percent)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def network(iface):&lt;br /&gt;
    stat = psutil.net_io_counters(pernic=True)[iface]&lt;br /&gt;
    return &amp;quot;%s: Tx%s, Rx%s&amp;quot; % \&lt;br /&gt;
           (iface, bytes2human(stat.bytes_sent), bytes2human(stat.bytes_recv))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def get_ip_address():&lt;br /&gt;
    ip = sp.getoutput(&#039;hostname -I&#039;)&lt;br /&gt;
    return &amp;quot;IP: %s&amp;quot; % ip&lt;br /&gt;
&lt;br /&gt;
def get_id():&lt;br /&gt;
    id_of_pi = sp.getoutput(&amp;quot;cat /proc/cpuinfo | grep -i serial| awk -F: &#039;{print $2}&#039;|xargs&amp;quot;)&lt;br /&gt;
    return &amp;quot;%s&amp;quot; % id_of_pi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def stats(device):&lt;br /&gt;
    # use custom font&lt;br /&gt;
    font_path = str(Path(__file__).resolve().parent.joinpath(&#039;fonts&#039;, &#039;C&amp;amp;C Red Alert [INET].ttf&#039;))&lt;br /&gt;
    #font_path = str(Path(__file__).resolve().parent.joinpath(&#039;fonts&#039;, &#039;DejaVuSansMono.ttf&#039;))&lt;br /&gt;
    font2 = ImageFont.truetype(font_path, 15)&lt;br /&gt;
&lt;br /&gt;
    with canvas(device) as draw:&lt;br /&gt;
        # draw.text((0, 0), cpu_usage(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
        draw.text((0, 0), get_id(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
        if device.height &amp;gt;= 32:&lt;br /&gt;
            #draw.text((0, 11), mem_usage(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            #draw.text((0, 16), disk_usage(&#039;/&#039;), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            draw.text((0, 16), get_ip_address(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        if device.height &amp;gt;= 64:&lt;br /&gt;
            draw.text((0, 26), disk_usage(&#039;/&#039;), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            try:&lt;br /&gt;
                draw.text((0, 38), network(&#039;wlan0&#039;), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            except KeyError:&lt;br /&gt;
                # no wifi enabled/available&lt;br /&gt;
                pass&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    while True:&lt;br /&gt;
        stats(device)&lt;br /&gt;
        time.sleep(5)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    try:&lt;br /&gt;
        device = get_device()&lt;br /&gt;
        main()&lt;br /&gt;
    except KeyboardInterrupt:&lt;br /&gt;
        pass&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Here let me explain to you what i did.&lt;br /&gt;
* adding &amp;quot; import subprocess as sp&amp;quot;, this will help me to execute some shell command in OS. &lt;br /&gt;
* adding following parts:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def get_ip_address():&lt;br /&gt;
    ip = sp.getoutput(&#039;hostname -I&#039;)&lt;br /&gt;
    return &amp;quot;IP: %s&amp;quot; % ip&lt;br /&gt;
&lt;br /&gt;
def get_id():&lt;br /&gt;
    id_of_pi = sp.getoutput(&amp;quot;cat /proc/cpuinfo | grep -i serial| awk -F: &#039;{print $2}&#039;|xargs&amp;quot;)&lt;br /&gt;
    return &amp;quot;%s&amp;quot; % id_of_pi&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
* get_ip_address will execute the command &amp;quot;hostname -I&amp;quot; in system and grab the IP address and return it to main process.&lt;br /&gt;
* get_id is to read /proc/cpuinfo file and grab the serial number and return to main process.&lt;br /&gt;
&lt;br /&gt;
===Use custom font===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   font_path = str(Path(__file__).resolve().parent.joinpath(&#039;fonts&#039;, &#039;C&amp;amp;C Red Alert [INET].ttf&#039;))&lt;br /&gt;
   font2 = ImageFont.truetype(font_path, 15)   # change font size to 15. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Modify the draw function===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  with canvas(device) as draw:&lt;br /&gt;
        # draw.text((0, 0), cpu_usage(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
        draw.text((0, 0), get_id(), font=font2, fill=&amp;quot;white&amp;quot;)         #####　draw id on screen at (0,0) position, (x,y)&lt;br /&gt;
        if device.height &amp;gt;= 32:&lt;br /&gt;
            #draw.text((0, 11), mem_usage(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            #draw.text((0, 16), disk_usage(&#039;/&#039;), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            draw.text((0, 16), get_ip_address(), font=font2, fill=&amp;quot;white&amp;quot;)   ####　draw text on (0,16) with IP address. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to create a systemd file to make it automatically start at boot up==&lt;br /&gt;
* Step1. create a shell script called it &#039;start_led.sh&#039; &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
cd /home/pi/venv/ &amp;amp;&amp;amp; source /home/pi/venv/bin/activate &lt;br /&gt;
/usr/bin/python3 /home/pi/luma.examples/examples/sys_info.py --width=128 --height=32 -r 2 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
save it and grant executable permission and test it.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x start_led.sh &lt;br /&gt;
./start_led.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
If if works properly, just press &amp;quot;ctrol+c&amp;quot; to abort the test.&lt;br /&gt;
* Step2. create a systemd file and enable it.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo vim.tiny /etc/systemd/system/rackmount_oled.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
And then, adding following lines:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Rackmount OLED service on RPi5&lt;br /&gt;
DefaultDependencies=no&lt;br /&gt;
StartLimitIntervalSec=60&lt;br /&gt;
StartLimitBurst=5&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
ExecStart=/bin/bash /home/pi/start_led.sh&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Save it and quit. &lt;br /&gt;
===Enable rackmount_oled.service===&lt;br /&gt;
* reload daemon&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl daemon-reload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Enable service&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo systemctl enable rackmount_oled.service &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Start service &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start rackmount_oled.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Restart service&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart rackmount_oled.service &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Stop service&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl stop rackmount_oled.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Disable service &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl disable rackmount_oled.service &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to enable PCIe function on Raspberry Pi 5?==&lt;br /&gt;
* To enable PCIe functionality on the Raspberry Pi 5, follow these steps:&lt;br /&gt;
&lt;br /&gt;
===1. Enable the PCIe External Connector:===&lt;br /&gt;
By default, the PCIe connector on the Raspberry Pi 5 is not enabled. To enable it, you need to add a configuration parameter to the `config.txt` file located in the `/boot/firmware` directory. You can use either of these lines:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dtparam=pciex1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After adding the line, reboot your Raspberry Pi for the changes to take effect.&lt;br /&gt;
&lt;br /&gt;
===2.Enable PCIe Gen 3.0 (Optional):===&lt;br /&gt;
The Raspberry Pi 5&#039;s PCIe connection is certified for Gen 2.0 speeds. However, if you want to attempt using Gen 3.0 speeds, add the following line to the `config.txt` file as well:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dtparam=pciex1_gen=3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 Be aware that the Raspberry Pi 5 is not certified for Gen 3.0 speeds, and using this setting may result in instability .&lt;br /&gt;
&lt;br /&gt;
===3.Booting from PCIe:===&lt;br /&gt;
If you intend to boot from a device connected via PCIe, such as an NVMe SSD, you will need to modify the boot order in the EEPROM. Use the following command to edit the EEPROM configuration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &lt;br /&gt;
sudo apt upgrade -y &lt;br /&gt;
sudo rpi-eeprom-config --edit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then, change the `BOOT_ORDER` line to include NVMe in the boot order:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BOOT_ORDER=0xf416&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This setting will make the Raspberry Pi attempt to boot from an NVMe device connected to the PCIe port .&lt;br /&gt;
===4. Kernel Compilation (Advanced):===&lt;br /&gt;
If you need to compile the kernel to add support for specific PCIe devices, you can follow the steps outlined in the Raspberry Pi documentation. This involves cloning the Raspberry Pi kernel repository, configuring the kernel with `make menuconfig`, and enabling the necessary modules for your devices .&lt;br /&gt;
Remember to always check the compatibility of the devices you intend to use with the Raspberry Pi 5&#039;s PCIe interface, as not all devices may be supported out of the box.&lt;br /&gt;
&lt;br /&gt;
==How to light up identical LED? ==&lt;br /&gt;
To light up UID LED indicator on a Raspberry Pi 5, you&#039;ll make sure the GPIO Pin of the UID LED connected to. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GPIO (General Purpose Input/Output) pins on the Raspberry Pi.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Steps===&lt;br /&gt;
* 1. Identify GPIO Pins: &amp;lt;font color=red&amp;gt;GPIO4&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* 2. Power On:&lt;br /&gt;
Make sure your Raspberry Pi is powered off before connecting the LED. Once everything is connected, you can power on your Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
* 3. Software Setup:&lt;br /&gt;
You&#039;ll need to write a small program to turn the GPIO pin on and off to control the LED. You can use Python with the `gpiozero` library or `RPi.GPIO` library to control the GPIO pins.&lt;br /&gt;
&lt;br /&gt;
===Example Python Code with gpiozero:===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from gpiozero import LED&lt;br /&gt;
from time import sleep&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
led = LED(&#039;GPIO4&#039;)&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    led.on()&lt;br /&gt;
    sleep(1)&lt;br /&gt;
    led.off()&lt;br /&gt;
    sleep(1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Example Python Code with RPi.GPIO:===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import RPi.GPIO as GPIO&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
# Set the GPIO mode&lt;br /&gt;
GPIO.setmode(GPIO.BCM)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GPIO_PIN = 4&lt;br /&gt;
&lt;br /&gt;
# Set up the GPIO pin as an output channel&lt;br /&gt;
GPIO.setup(GPIO_PIN, GPIO.OUT)&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    GPIO.output(GPIO_PIN, GPIO.HIGH)  # Turn on the LED&lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
    GPIO.output(GPIO_PIN, GPIO.LOW)   # Turn off the LED&lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
&lt;br /&gt;
# Clean up the GPIO pins before exiting the program&lt;br /&gt;
GPIO.cleanup()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Safety Tips:===&lt;br /&gt;
* Be careful not to short any pins on the Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
=== SSD1306 OLED Black-Screen Debugging Report &amp;amp; Operation Guide===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;Target hardware:&amp;lt;/strong&amp;gt; 0.91&amp;quot; OLED, 128×32 px, SSD1306, I2C, address 0x3C, Raspberry Pi 5&lt;br /&gt;
&amp;lt;strong&amp;gt;Software:&amp;lt;/strong&amp;gt; luma.oled 3.15.0, luma.core 2.6.0, Python 3.13, smbus2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1. Executive Summary — What Was Actually Wrong ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;Nothing was wrong with the code, the luma library, or the SSD1306 register configuration.&amp;lt;/strong&amp;gt;&lt;br /&gt;
No library or example source code was modified. The failures came from hardware and&lt;br /&gt;
configuration, in three layers:&lt;br /&gt;
&lt;br /&gt;
1. &amp;lt;strong&amp;gt;Two defective display modules.&amp;lt;/strong&amp;gt;  The driver IC responded on I2C and executed&lt;br /&gt;
  commands correctly, but the panel itself never lit — dead charge-pump / flex-cable /&lt;br /&gt;
  panel. The first module had worked before and died of age; the replacement (0.96&amp;quot;)&lt;br /&gt;
  showed the identical signature, indicating a bad batch.&lt;br /&gt;
2. &amp;lt;strong&amp;gt;A supply-voltage trap.&amp;lt;/strong&amp;gt;  Modules with an onboard AMS1117 regulator (~1.1 V dropout)&lt;br /&gt;
  must be fed &amp;lt;strong&amp;gt; 5V&amp;lt;/strong&amp;gt; ; at 3.3 V the logic still works (so the chip ACKs and responds,&lt;br /&gt;
  which is very misleading) but the charge pump cannot start → black screen. Bare&lt;br /&gt;
  modules with &amp;lt;strong&amp;gt; no regulator must use 3.3 V&amp;lt;/strong&amp;gt; ; feeding them 5 V does not work and risks&lt;br /&gt;
  damage. The final working module is a bare one and runs correctly at 3.3 V.&lt;br /&gt;
3. &amp;lt;strong&amp;gt;A parameter mismatch in the examples.&amp;lt;/strong&amp;gt;  The examples in this directory default to&lt;br /&gt;
  `ssd1305 / 128×64`; this panel is `ssd1306 / 128×32`. Running without parameters&lt;br /&gt;
  produces a black or garbled screen. The fix is to pass the correct display, interface,&lt;br /&gt;
  geometry and address — done via the config file `ssd1306_128x32.conf`.&lt;br /&gt;
&lt;br /&gt;
=== 2. What Was Done, Step by Step (Method and Basis)===&lt;br /&gt;
&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
     |+ Diagnosis — locating the fault&lt;br /&gt;
     ! Method !! Basis / Reasoning&lt;br /&gt;
     |-&lt;br /&gt;
     | Bus scan with &amp;lt;code&amp;gt;i2cdetect&amp;lt;/code&amp;gt; || An ACK at 0x3C proves all four wires&lt;br /&gt;
   (VCC/GND/SDA/SCL) are connected and the driver IC is powered&lt;br /&gt;
     |-&lt;br /&gt;
     | Source inspection of ssd1306 in luma.oled 3.15.0 || The 128×32 init sequence&lt;br /&gt;
   (multiplex 0x1F, compins 0x02, charge pump 0x14) matches the datasheet standard — a&lt;br /&gt;
   register-level bug was ruled out on evidence&lt;br /&gt;
     |-&lt;br /&gt;
     | Raw-register write of 0xA5 (force all-on) || This command bypasses GDDRAM; a&lt;br /&gt;
   healthy panel must glow. No light = fault in the high-voltage path (charge pump /&lt;br /&gt;
   panel / flex cable)&lt;br /&gt;
     |-&lt;br /&gt;
     | Status-register read before/after DISPLAY ON/OFF commands || Per the SSD1306&lt;br /&gt;
   datasheet, bit 6 is the display ON/OFF flag. It flipped correctly, proving the chip&lt;br /&gt;
   executes commands — fault isolated to the panel side&lt;br /&gt;
     |-&lt;br /&gt;
     | 5 consecutive bus scans + 10 consecutive status reads || All values stable and&lt;br /&gt;
   identical — ruled out loose wiring and parasitic power&lt;br /&gt;
     |-&lt;br /&gt;
     | 3.3V / 5V supply switching test || Modules with an AMS1117 regulator require 5V;&lt;br /&gt;
   bare modules without a regulator require 3.3V. The working module lit at 3.3V&lt;br /&gt;
     |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===3. Files Created / Modified===&lt;br /&gt;
&lt;br /&gt;
  {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
     |+ Fixes and deliverables&lt;br /&gt;
     ! File !! Type !! Description&lt;br /&gt;
     |-&lt;br /&gt;
     | &amp;lt;code&amp;gt;ssd1306_128x32.conf&amp;lt;/code&amp;gt; || Fixed || Initially written in INI format,&lt;br /&gt;
   causing &amp;quot;unrecognized arguments&amp;quot;. Based on the source of&lt;br /&gt;
   &amp;lt;code&amp;gt;luma.core.cmdline.load_config&amp;lt;/code&amp;gt; (reads line by line, no whitespace&lt;br /&gt;
   splitting), rewritten as one &amp;lt;code&amp;gt;--key=value&amp;lt;/code&amp;gt; per line; demo.py then ran&lt;br /&gt;
   successfully&lt;br /&gt;
     |-&lt;br /&gt;
     | &amp;lt;code&amp;gt;ssd1306_raw.py&amp;lt;/code&amp;gt; || Created || Library-free SSD1306 driver; writes&lt;br /&gt;
   registers directly via smbus2 (PIL used only for pixel rendering)&lt;br /&gt;
     |-&lt;br /&gt;
     | &amp;lt;code&amp;gt;OLED_128x32_I2C_manual.md&amp;lt;/code&amp;gt; || Created / updated || Bilingual&lt;br /&gt;
   operation manual; added the regulator/supply-voltage rule and the hardware-failure&lt;br /&gt;
   criterion&lt;br /&gt;
     |-&lt;br /&gt;
     | &amp;lt;code&amp;gt;SSD1306_Debug_Report_EN.md&amp;lt;/code&amp;gt; || Created || Full English debugging&lt;br /&gt;
   report and operation guide&lt;br /&gt;
     |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
No files in luma.oled / luma.core or the example scripts were modified.&lt;br /&gt;
&lt;br /&gt;
===4. Final Working Configuration===&lt;br /&gt;
&lt;br /&gt;
* Module: bare 0.91&amp;quot; 128×32 SSD1306, &amp;lt;strong&amp;gt;no onboard regulator&amp;lt;/strong&amp;gt;&lt;br /&gt;
* Wiring: VCC → &amp;lt;strong&amp;gt;3.3 V&amp;lt;/strong&amp;gt; (pin 1), GND → GND, SDA → GPIO2 (pin 3), SCL → GPIO3 (pin 5)&lt;br /&gt;
* No RST/RES connection needed (I2C interface)&lt;br /&gt;
* I2C address: `0x3C`&lt;br /&gt;
&lt;br /&gt;
=== 5. Operating Instructions===&lt;br /&gt;
&lt;br /&gt;
==== Run any luma example in this directory====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python demo.py    -f ssd1306_128x32.conf&lt;br /&gt;
python clock.py   -f ssd1306_128x32.conf&lt;br /&gt;
python pi_logo.py -f ssd1306_128x32.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or pass parameters explicitly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python demo.py -d ssd1306 -i i2c --i2c-port 1 --i2c-address 0x3c --width 128 --height 32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Run the library-free raw driver===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python ssd1306_raw.py                 # 0.96&amp;quot; 128x64&lt;br /&gt;
python ssd1306_raw.py --height 32     # 0.91&amp;quot; 128x32 (this panel)&lt;br /&gt;
python ssd1306_raw.py --addr 0x3D     # modules with address 0x3D&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Minimal code (luma)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from luma.core.interface.serial import i2c&lt;br /&gt;
from luma.oled.device import ssd1306&lt;br /&gt;
from luma.core.render import canvas&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
device = ssd1306(i2c(port=1, address=0x3C), width=128, height=32)&lt;br /&gt;
with canvas(device) as draw:&lt;br /&gt;
    draw.rectangle(device.bounding_box, outline=&amp;quot;white&amp;quot;)&lt;br /&gt;
    draw.text((4, 10), &amp;quot;OK 128x32&amp;quot;, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===6. Black-Screen Decision Tree (for future modules)===&lt;br /&gt;
&lt;br /&gt;
* `i2cdetect -y 1` shows the address?&lt;br /&gt;
  &amp;lt;strong&amp;gt;No&amp;lt;/strong&amp;gt; → power/wiring fault: measure VCC-GND **at the module&#039;s solder pads**, check SDA=pin 3, SCL=pin 5, try fresh dupont wires.&lt;br /&gt;
  &amp;lt;strong&amp;gt;Yes&amp;lt;/strong&amp;gt; → continue.&lt;br /&gt;
&lt;br /&gt;
* Run `python oled_diagnose.py`. Any step lights the panel?&lt;br /&gt;
  &amp;lt;strong&amp;gt;Yes&amp;lt;/strong&amp;gt; → software/parameter issue; use the matching parameters (`-d ssd1306 --width 128 --height 32 --i2c-address 0x3c`).&lt;br /&gt;
  &amp;lt;strong&amp;gt;No&amp;lt;/strong&amp;gt; → continue.&lt;br /&gt;
&lt;br /&gt;
* Status-register test: does bit 6 flip after `0xAF`/`0xAE`?&lt;br /&gt;
  &amp;lt;strong&amp;gt;Yes&amp;lt;/strong&amp;gt; (chip executes commands, panel still dark) → charge pump/panel hardware. Check whether the module has a regulator: AMS1117 → power with **5 V**; no regulator → power with **3.3 V**. Still dark at the correct voltage → defective module, return it.&lt;br /&gt;
  &amp;lt;strong&amp;gt;No&amp;lt;/strong&amp;gt; → module-level fault (reset circuit / dead IC), return it.&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
* 1U Rackmount for Raspberry Pi 5 with M.2 NVMe SSD support.&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=DR-0001&amp;diff=16569</id>
		<title>DR-0001</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=DR-0001&amp;diff=16569"/>
		<updated>2026-08-19T05:18:09Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: /* Keywords */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==1U Rackmount for Raspberry Pi 5 ==&lt;br /&gt;
* Purchase URL: [ https://52pi.com ] or [ https://deskpi.com ]&lt;br /&gt;
[[File:DR-0001-1.jpg|right|320px]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
This is an upgraded version of a 1U Rackmount designed for compatibility with both Raspberry Pi 5 . It features a motherboard that supports PCIe expansion, allowing the PCIe interface of the Raspberry Pi 5 to be extended to accommodate an M.2 NVMe SSD in 2230/2242/2260/2280 form factors. The expansion board also routes the Raspberry Pi&#039;s 5V and GND, SDA, and SCL pins to the rear through PogoPin connectors, providing I2C interface peripherals in a Grove format. Additionally, a red LED is included on the board for the Raspberry Pi ID signal pin, which can be programmed to indicate the current device by controlling the GPIO4 pin&#039;s high or low level, acting as a programmable device ID signal light.&lt;br /&gt;
&lt;br /&gt;
The Rackmount supports the connection of up to five Raspberry Pi devices and can also be configured with an OLED display frame in place of one of the Raspberry Pi slots. These components can be easily adjusted and removed due to the use of hand-tightened screws. The OLED display features a 0.91-inch screen and communicates with the Raspberry Pi via I2C protocol, displaying real-time information such as CPU status, memory status, IP information, and serial numbers. The content displayed on the OLED can be fully customized.&lt;br /&gt;
==Features==&lt;br /&gt;
* &amp;lt;strong&amp;gt;Compatibility:&amp;lt;/strong&amp;gt; Designed to work with both Raspberry Pi 5.&lt;br /&gt;
* &amp;lt;strong&amp;gt;PCIe Expansion Support:&amp;lt;/strong&amp;gt;  Includes a motherboard that enables PCIe expansion, allowing the connection of M.2 NVMe SSDs in various form factors (2230/2242/2260/2280).&lt;br /&gt;
* &amp;lt;strong&amp;gt;I2C Interface: &amp;lt;/strong&amp;gt; The board routes the Raspberry Pi&#039;s 5V, GND, SDA, and SCL pins to the rear through PogoPin connectors, offering I2C interface peripherals in a Grove format.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Programmable LED Indicator: &amp;lt;/strong&amp;gt; A red LED on the board serves as a programmable device ID signal, controllable via the GPIO4 pin to indicate the status or identity of the device.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Modular Design:&amp;lt;/strong&amp;gt;  Supports the integration of up to five Raspberry Pi devices, with the option to replace one slot with an OLED display frame.&lt;br /&gt;
* &amp;lt;strong&amp;gt;OLED Display Integration:&amp;lt;/strong&amp;gt;  The option to include a 0.91-inch OLED screen that communicates with the Raspberry Pi via I2C, displaying customizable information such as CPU usage, memory status, IP address, and serial numbers.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Easy Assembly and Disassembly:&amp;lt;/strong&amp;gt;  Components are secured with hand-tightened screws, allowing for convenient adjustments and removal.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Customizable Display Content: &amp;lt;/strong&amp;gt; The information displayed on the OLED screen can be fully customized to meet specific needs or preferences.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Rackmount Form Factor: &amp;lt;/strong&amp;gt; Designed to fit into a 1U rack space, making it suitable for data centers or other environments where space is at a premium.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Versatility:&amp;lt;/strong&amp;gt;  The Rackmount can be configured in various ways to suit different use cases, whether for development, testing, or deployment in a production environment.&lt;br /&gt;
===Specifications===&lt;br /&gt;
* Form Factor: 1U Rackmount design suitable for standard 19-inch racks.&lt;br /&gt;
* Raspberry Pi Compatibility: Specifically designed for Raspberry Pi 5.&lt;br /&gt;
* PCIe Expansion:Supports M.2 NVMe SSDs in 2230, 2242, 2260, and 2280 form factors. Provides a PCIe interface for high-speed data transfer.&lt;br /&gt;
* I/O Connectivity: Rear I2C interface via PogoPin connectors for external peripherals.&lt;br /&gt;
* GPIO4 pin for programmable LED control.&lt;br /&gt;
* LED Indicator:Red LED for device identification or status indication. Programmable through software to show different statuses.&lt;br /&gt;
* Modular Bays: Five bays for Raspberry Pi devices. One bay can be replaced with an OLED display module.&lt;br /&gt;
* OLED Display Specifications:0.91-inch screen size, 128x32 pixels. I2C communication protocol.&lt;br /&gt;
* Customizable display for system information.&lt;br /&gt;
* Physical Security:Hand-tightened screws for secure mounting of Raspberry Pi devices and OLED display.&lt;br /&gt;
* Ensures stability and ease of maintenance.&lt;br /&gt;
* Power Requirements: Compatibility with Raspberry Pi&#039;s standard power supply.&lt;br /&gt;
* Material and Construction: Durable metal construction for the rackmount chassis. High-quality components for reliable performance.&lt;br /&gt;
* Mounting Options: Standard rackmount holes for easy installation into a rack.&lt;br /&gt;
* Includes additional mounting accessories for different setups.&lt;br /&gt;
* Software Compatibility: Compatible with Raspberry Pi&#039;s operating system and software ecosystem.&lt;br /&gt;
* Support for GPIO programming for custom LED and device control.&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product outlook&lt;br /&gt;
[[ File:DR-0001-6.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Application Senario &lt;br /&gt;
[[ File:DR-0001-2.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&amp;lt;font color=red&amp;gt; NOTE: Raspberry Pis are not included in the package, additional purchase required!&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* Easy to assemble and maintain&lt;br /&gt;
[[ File:DR-0001-3.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
[[File:DR-0001-12.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Customizable OLED display screen, with a size of 0.91 inches&lt;br /&gt;
[[ File:DR-0001-4.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Ports Definitions and Featrues &lt;br /&gt;
Programmable I/O controlled UID indicator light, which can be programmed to control the LED blinking to indicate the device&#039;s location, facilitating faster troubleshooting and easier maintenance operations.&lt;br /&gt;
[[ File:DR-0001-5.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===How to connect OLED display to Raspberry Pi on GPIO pins===&lt;br /&gt;
* Please refer to following figure to connect OLED display to Raspberry Pi on GPIO. &lt;br /&gt;
&amp;lt;font color=red&amp;gt;NOTE: OLED&#039;s VCC should be connected to 3.3V power rail, Do not connect it to 5V power rail!!!&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[ File:DR-0001-7.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Grove Connector Support I2C and Uart&lt;br /&gt;
[[ File:DR-0001-8.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Accessories Dimension&lt;br /&gt;
[[ File:DR-0001-9.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* OLED assemble details&lt;br /&gt;
Please remove the protection film from acrylic panel and use the washer between OLED PCB board and acrylic panel.&lt;br /&gt;
[[ File:DR-0001-10.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* PCIe Expansion board for Raspberry Pi 5 only&lt;br /&gt;
The expansion board supports M.2 NVMe M-key SSD 2230/2242/2260/2280, and the board will be powered by Raspberry Pi 5 via PogoPin on the PCB board, please make sure the board&#039;s pogoins are contact well with the soldering point on back of the Raspberry Pi 5 on GPIO pins. &lt;br /&gt;
[[File:DR-0001-11.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to assemble it? ==&lt;br /&gt;
* Please note that there are several details you need to pay attention, plesae check out following figure.&lt;br /&gt;
[[ File:DR-0001-安装.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Package Includes==&lt;br /&gt;
* Following figure shows the details of the product: &lt;br /&gt;
[[ File:DR-0001-清单.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to enable I2C OLED display?==&lt;br /&gt;
* We assume that you are using Raspberry Pi OS 64bit(bookworm, the latest official image) &lt;br /&gt;
To enable I2C and UART on your Raspberry Pi, you can follow these detailed steps:&lt;br /&gt;
&lt;br /&gt;
===Enabling I2C===&lt;br /&gt;
* Method 1. Using the Raspberry Pi Configuration Tool: &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo raspi-config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to open the configuration tool. Navigate to `Interface Options`, Select `I2C` and enable it.&lt;br /&gt;
&lt;br /&gt;
* Method  2. Using the Command Line:&lt;br /&gt;
You can also enable I2C by editing the `/boot/firmware/config.txt` file and adding `dtparam=i2c_arm=on` if it&#039;s not already present, After making changes, reboot your Pi.&lt;br /&gt;
&lt;br /&gt;
===Verifying I2C===&lt;br /&gt;
* Install I2C tools using `sudo apt-get install -y i2c-tools`.&lt;br /&gt;
* Use &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
i2cdetect -y 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to scan for I2C devices, if you see `3c` means that the OLED display has been recognized by your Raspberry Pi. &lt;br /&gt;
&lt;br /&gt;
===Enabling UART===&lt;br /&gt;
* Method 1. Using the Raspberry Pi Configuration Tool:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo raspi-config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Go to `Interface Options`, Select `Serial` and enable it.&lt;br /&gt;
&amp;lt;pre&amp;gt; Note: This will also enable the login shell on the serial port. &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Method 2. Using the Command Line:&lt;br /&gt;
Edit `/boot/config.txt` and add `enable_uart=1`, save it and then reboot your Pi.&lt;br /&gt;
&lt;br /&gt;
===Accessing UART===&lt;br /&gt;
* Connect your Pi to a USB-to-TTL converter, On Windows, you may need to install drivers for the converter. on Linux just use a terminal program like `minicom`, `putty`, or `screen` to access the UART interface.&lt;br /&gt;
&lt;br /&gt;
Remember to check the documentation for your specific Raspberry Pi model, as the steps might vary slightly. If you need more detailed instructions or encounter any issues, refer to the [ https://www.raspberrypi.org/documentation/ ]  or community forums for additional support.&lt;br /&gt;
&lt;br /&gt;
===How to display customized information on OLED display? ===&lt;br /&gt;
* Final result&lt;br /&gt;
[[File:DR-0001 applications-01.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
==How to customize content on OLED ?==&lt;br /&gt;
* For example: If you want to display current IP address of wlan interface and the serial number of your Raspberry Pi 5, please follow next steps to configure it. &lt;br /&gt;
===Install Virtal environment package ===&lt;br /&gt;
* Open a terminal and typing following commands:&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo apt update &lt;br /&gt;
sudo apt upgrade -y &lt;br /&gt;
sudo apt -y install virtualenv &lt;br /&gt;
sudo usermod -a -G i2c,spi,gpio pi&lt;br /&gt;
sudo apt install python3-dev python3-pip python3-numpy libfreetype6-dev libjpeg-dev build-essential&lt;br /&gt;
sudo apt install libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev libportmidi-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:Install pre-insistpackages.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
[[File:Install-pre-insistpackage-02.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Create virtual environment===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
virtualenv -p python3 venv &lt;br /&gt;
cd venv/&lt;br /&gt;
source bin/activate &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Install SSD1306 driver and library for OLED 0.91===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pip install luma.oled&lt;br /&gt;
pip install psutil&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Clone luma.examples repository===&lt;br /&gt;
Log out and in again and clone this repository:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone https://github.com/rm-hull/luma.examples.git&lt;br /&gt;
cd luma.examples/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Install luma libraries===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -H pip install -e . --break-system-packages  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:Install luma libraries.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
===Test the demo ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd examples/&lt;br /&gt;
sudo python 3d_box.py --width=128 --height=32 -r 2 &lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=red&amp;gt;&amp;lt;p&amp;gt;NOTE: &amp;lt;br&amp;gt;&lt;br /&gt;
 --width=128 and --height=32 should be added to declear the OLED&#039;s resolution information. &amp;lt;br&amp;gt;&lt;br /&gt;
 -r 2  means --rotate 2 , Allowed values are: 0, 1, 2, 3  (default:0) &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
If you see a 3D-box rotating animation is in the middle of screen means that you have installed the OLED driver successfully! &lt;br /&gt;
[[File:Test demo 3dbox.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
[[File:Test demo 3dbox-2.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
and then press &amp;quot;Ctrol+C&amp;quot; abort the demo.&lt;br /&gt;
&lt;br /&gt;
==Use the demo code==&lt;br /&gt;
* There are a lot of demo codes in the examples folder, you can test it as you want. &lt;br /&gt;
for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo python carousel.py --width=128 --height=32 -r 2 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
It will display all information of your Raspberry Pi 5 and scrolling display. &lt;br /&gt;
===Customize the display on screen===&lt;br /&gt;
Modify the sys_info.py python file and adding your own function to show the information you want, do remember backup the origin file. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp sys_info.py sys_info.py.bak &lt;br /&gt;
vim.tiny sys_info.py &lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Press &#039;i&#039; to insert mode, and paste following lines into it. you can modify this file by other text editor what you like. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
# Copyright (c) 2014-2022 Richard Hull and contributors&lt;br /&gt;
# See LICENSE.rst for details.&lt;br /&gt;
# PYTHON_ARGCOMPLETE_OK&lt;br /&gt;
&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Display basic system information.&lt;br /&gt;
&lt;br /&gt;
Needs psutil (+ dependencies) installed::&lt;br /&gt;
&lt;br /&gt;
  $ sudo apt-get install python-dev&lt;br /&gt;
  $ sudo -H pip install psutil&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
import os&lt;br /&gt;
import sys&lt;br /&gt;
import time&lt;br /&gt;
from pathlib import Path&lt;br /&gt;
from datetime import datetime&lt;br /&gt;
import subprocess as sp&lt;br /&gt;
&lt;br /&gt;
if os.name != &#039;posix&#039;:&lt;br /&gt;
    sys.exit(f&#039;{os.name} platform is not supported&#039;)&lt;br /&gt;
&lt;br /&gt;
from demo_opts import get_device&lt;br /&gt;
from luma.core.render import canvas&lt;br /&gt;
from PIL import ImageFont&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    import psutil&lt;br /&gt;
except ImportError:&lt;br /&gt;
    print(&amp;quot;The psutil library was not found. Run &#039;sudo -H pip install psutil&#039; to install it.&amp;quot;)&lt;br /&gt;
    sys.exit()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# TODO: custom font bitmaps for up/down arrows&lt;br /&gt;
# TODO: Load histogram&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def bytes2human(n):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; bytes2human(10000)&lt;br /&gt;
    &#039;9K&#039;&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; bytes2human(100001221)&lt;br /&gt;
    &#039;95M&#039;&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    symbols = (&#039;K&#039;, &#039;M&#039;, &#039;G&#039;, &#039;T&#039;, &#039;P&#039;, &#039;E&#039;, &#039;Z&#039;, &#039;Y&#039;)&lt;br /&gt;
    prefix = {}&lt;br /&gt;
    for i, s in enumerate(symbols):&lt;br /&gt;
        prefix[s] = 1 &amp;lt;&amp;lt; (i + 1) * 10&lt;br /&gt;
    for s in reversed(symbols):&lt;br /&gt;
        if n &amp;gt;= prefix[s]:&lt;br /&gt;
            value = int(float(n) / prefix[s])&lt;br /&gt;
            return &#039;%s%s&#039; % (value, s)&lt;br /&gt;
    return f&amp;quot;{n}B&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def cpu_usage():&lt;br /&gt;
    # load average, uptime&lt;br /&gt;
    uptime = datetime.now() - datetime.fromtimestamp(psutil.boot_time())&lt;br /&gt;
    #av1, av2, av3 = os.getloadavg()&lt;br /&gt;
    #return &amp;quot;Ld:%.1f %.1f %.1f Up: %s&amp;quot; \&lt;br /&gt;
    #    % (av1, av2, av3, str(uptime).split(&#039;.&#039;)[0])&lt;br /&gt;
    return &amp;quot;Up: %s&amp;quot; % (str(uptime).split(&#039;.&#039;)[0])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def mem_usage():&lt;br /&gt;
    usage = psutil.virtual_memory()&lt;br /&gt;
    return &amp;quot;Mem: %s %.0f%%&amp;quot; \&lt;br /&gt;
        % (bytes2human(usage.used), 100 - usage.percent)&lt;br /&gt;
&lt;br /&gt;
def disk_usage(dir):&lt;br /&gt;
    usage = psutil.disk_usage(dir)&lt;br /&gt;
    return &amp;quot;SD:  %s %.0f%%&amp;quot; \&lt;br /&gt;
        % (bytes2human(usage.used), usage.percent)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def network(iface):&lt;br /&gt;
    stat = psutil.net_io_counters(pernic=True)[iface]&lt;br /&gt;
    return &amp;quot;%s: Tx%s, Rx%s&amp;quot; % \&lt;br /&gt;
           (iface, bytes2human(stat.bytes_sent), bytes2human(stat.bytes_recv))&lt;br /&gt;
&lt;br /&gt;
def mem_usage():&lt;br /&gt;
    usage = psutil.virtual_memory()&lt;br /&gt;
    return &amp;quot;Mem: %s %.0f%%&amp;quot; \&lt;br /&gt;
        % (bytes2human(usage.used), 100 - usage.percent)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def disk_usage(dir):&lt;br /&gt;
    usage = psutil.disk_usage(dir)&lt;br /&gt;
    return &amp;quot;SD:  %s %.0f%%&amp;quot; \&lt;br /&gt;
        % (bytes2human(usage.used), usage.percent)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def network(iface):&lt;br /&gt;
    stat = psutil.net_io_counters(pernic=True)[iface]&lt;br /&gt;
    return &amp;quot;%s: Tx%s, Rx%s&amp;quot; % \&lt;br /&gt;
           (iface, bytes2human(stat.bytes_sent), bytes2human(stat.bytes_recv))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def get_ip_address():&lt;br /&gt;
    ip = sp.getoutput(&#039;hostname -I&#039;)&lt;br /&gt;
    return &amp;quot;IP: %s&amp;quot; % ip&lt;br /&gt;
&lt;br /&gt;
def get_id():&lt;br /&gt;
    id_of_pi = sp.getoutput(&amp;quot;cat /proc/cpuinfo | grep -i serial| awk -F: &#039;{print $2}&#039;|xargs&amp;quot;)&lt;br /&gt;
    return &amp;quot;%s&amp;quot; % id_of_pi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def stats(device):&lt;br /&gt;
    # use custom font&lt;br /&gt;
    font_path = str(Path(__file__).resolve().parent.joinpath(&#039;fonts&#039;, &#039;C&amp;amp;C Red Alert [INET].ttf&#039;))&lt;br /&gt;
    #font_path = str(Path(__file__).resolve().parent.joinpath(&#039;fonts&#039;, &#039;DejaVuSansMono.ttf&#039;))&lt;br /&gt;
    font2 = ImageFont.truetype(font_path, 15)&lt;br /&gt;
&lt;br /&gt;
    with canvas(device) as draw:&lt;br /&gt;
        # draw.text((0, 0), cpu_usage(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
        draw.text((0, 0), get_id(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
        if device.height &amp;gt;= 32:&lt;br /&gt;
            #draw.text((0, 11), mem_usage(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            #draw.text((0, 16), disk_usage(&#039;/&#039;), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            draw.text((0, 16), get_ip_address(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        if device.height &amp;gt;= 64:&lt;br /&gt;
            draw.text((0, 26), disk_usage(&#039;/&#039;), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            try:&lt;br /&gt;
                draw.text((0, 38), network(&#039;wlan0&#039;), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            except KeyError:&lt;br /&gt;
                # no wifi enabled/available&lt;br /&gt;
                pass&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    while True:&lt;br /&gt;
        stats(device)&lt;br /&gt;
        time.sleep(5)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    try:&lt;br /&gt;
        device = get_device()&lt;br /&gt;
        main()&lt;br /&gt;
    except KeyboardInterrupt:&lt;br /&gt;
        pass&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Here let me explain to you what i did.&lt;br /&gt;
* adding &amp;quot; import subprocess as sp&amp;quot;, this will help me to execute some shell command in OS. &lt;br /&gt;
* adding following parts:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def get_ip_address():&lt;br /&gt;
    ip = sp.getoutput(&#039;hostname -I&#039;)&lt;br /&gt;
    return &amp;quot;IP: %s&amp;quot; % ip&lt;br /&gt;
&lt;br /&gt;
def get_id():&lt;br /&gt;
    id_of_pi = sp.getoutput(&amp;quot;cat /proc/cpuinfo | grep -i serial| awk -F: &#039;{print $2}&#039;|xargs&amp;quot;)&lt;br /&gt;
    return &amp;quot;%s&amp;quot; % id_of_pi&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
* get_ip_address will execute the command &amp;quot;hostname -I&amp;quot; in system and grab the IP address and return it to main process.&lt;br /&gt;
* get_id is to read /proc/cpuinfo file and grab the serial number and return to main process.&lt;br /&gt;
&lt;br /&gt;
===Use custom font===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   font_path = str(Path(__file__).resolve().parent.joinpath(&#039;fonts&#039;, &#039;C&amp;amp;C Red Alert [INET].ttf&#039;))&lt;br /&gt;
   font2 = ImageFont.truetype(font_path, 15)   # change font size to 15. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Modify the draw function===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  with canvas(device) as draw:&lt;br /&gt;
        # draw.text((0, 0), cpu_usage(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
        draw.text((0, 0), get_id(), font=font2, fill=&amp;quot;white&amp;quot;)         #####　draw id on screen at (0,0) position, (x,y)&lt;br /&gt;
        if device.height &amp;gt;= 32:&lt;br /&gt;
            #draw.text((0, 11), mem_usage(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            #draw.text((0, 16), disk_usage(&#039;/&#039;), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            draw.text((0, 16), get_ip_address(), font=font2, fill=&amp;quot;white&amp;quot;)   ####　draw text on (0,16) with IP address. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to create a systemd file to make it automatically start at boot up==&lt;br /&gt;
* Step1. create a shell script called it &#039;start_led.sh&#039; &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
cd /home/pi/venv/ &amp;amp;&amp;amp; source /home/pi/venv/bin/activate &lt;br /&gt;
/usr/bin/python3 /home/pi/luma.examples/examples/sys_info.py --width=128 --height=32 -r 2 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
save it and grant executable permission and test it.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x start_led.sh &lt;br /&gt;
./start_led.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
If if works properly, just press &amp;quot;ctrol+c&amp;quot; to abort the test.&lt;br /&gt;
* Step2. create a systemd file and enable it.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo vim.tiny /etc/systemd/system/rackmount_oled.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
And then, adding following lines:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Rackmount OLED service on RPi5&lt;br /&gt;
DefaultDependencies=no&lt;br /&gt;
StartLimitIntervalSec=60&lt;br /&gt;
StartLimitBurst=5&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
ExecStart=/bin/bash /home/pi/start_led.sh&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Save it and quit. &lt;br /&gt;
===Enable rackmount_oled.service===&lt;br /&gt;
* reload daemon&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl daemon-reload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Enable service&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo systemctl enable rackmount_oled.service &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Start service &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start rackmount_oled.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Restart service&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart rackmount_oled.service &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Stop service&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl stop rackmount_oled.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Disable service &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl disable rackmount_oled.service &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to enable PCIe function on Raspberry Pi 5?==&lt;br /&gt;
* To enable PCIe functionality on the Raspberry Pi 5, follow these steps:&lt;br /&gt;
&lt;br /&gt;
===1. Enable the PCIe External Connector:===&lt;br /&gt;
By default, the PCIe connector on the Raspberry Pi 5 is not enabled. To enable it, you need to add a configuration parameter to the `config.txt` file located in the `/boot/firmware` directory. You can use either of these lines:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dtparam=pciex1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After adding the line, reboot your Raspberry Pi for the changes to take effect.&lt;br /&gt;
&lt;br /&gt;
===2.Enable PCIe Gen 3.0 (Optional):===&lt;br /&gt;
The Raspberry Pi 5&#039;s PCIe connection is certified for Gen 2.0 speeds. However, if you want to attempt using Gen 3.0 speeds, add the following line to the `config.txt` file as well:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dtparam=pciex1_gen=3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 Be aware that the Raspberry Pi 5 is not certified for Gen 3.0 speeds, and using this setting may result in instability .&lt;br /&gt;
&lt;br /&gt;
===3.Booting from PCIe:===&lt;br /&gt;
If you intend to boot from a device connected via PCIe, such as an NVMe SSD, you will need to modify the boot order in the EEPROM. Use the following command to edit the EEPROM configuration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &lt;br /&gt;
sudo apt upgrade -y &lt;br /&gt;
sudo rpi-eeprom-config --edit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then, change the `BOOT_ORDER` line to include NVMe in the boot order:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BOOT_ORDER=0xf416&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This setting will make the Raspberry Pi attempt to boot from an NVMe device connected to the PCIe port .&lt;br /&gt;
===4. Kernel Compilation (Advanced):===&lt;br /&gt;
If you need to compile the kernel to add support for specific PCIe devices, you can follow the steps outlined in the Raspberry Pi documentation. This involves cloning the Raspberry Pi kernel repository, configuring the kernel with `make menuconfig`, and enabling the necessary modules for your devices .&lt;br /&gt;
Remember to always check the compatibility of the devices you intend to use with the Raspberry Pi 5&#039;s PCIe interface, as not all devices may be supported out of the box.&lt;br /&gt;
&lt;br /&gt;
==How to light up identical LED? ==&lt;br /&gt;
To light up UID LED indicator on a Raspberry Pi 5, you&#039;ll make sure the GPIO Pin of the UID LED connected to. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GPIO (General Purpose Input/Output) pins on the Raspberry Pi.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Steps===&lt;br /&gt;
* 1. Identify GPIO Pins: &amp;lt;font color=red&amp;gt;GPIO4&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* 2. Power On:&lt;br /&gt;
Make sure your Raspberry Pi is powered off before connecting the LED. Once everything is connected, you can power on your Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
* 3. Software Setup:&lt;br /&gt;
You&#039;ll need to write a small program to turn the GPIO pin on and off to control the LED. You can use Python with the `gpiozero` library or `RPi.GPIO` library to control the GPIO pins.&lt;br /&gt;
&lt;br /&gt;
===Example Python Code with gpiozero:===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from gpiozero import LED&lt;br /&gt;
from time import sleep&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
led = LED(&#039;GPIO4&#039;)&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    led.on()&lt;br /&gt;
    sleep(1)&lt;br /&gt;
    led.off()&lt;br /&gt;
    sleep(1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Example Python Code with RPi.GPIO:===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import RPi.GPIO as GPIO&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
# Set the GPIO mode&lt;br /&gt;
GPIO.setmode(GPIO.BCM)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GPIO_PIN = 4&lt;br /&gt;
&lt;br /&gt;
# Set up the GPIO pin as an output channel&lt;br /&gt;
GPIO.setup(GPIO_PIN, GPIO.OUT)&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    GPIO.output(GPIO_PIN, GPIO.HIGH)  # Turn on the LED&lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
    GPIO.output(GPIO_PIN, GPIO.LOW)   # Turn off the LED&lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
&lt;br /&gt;
# Clean up the GPIO pins before exiting the program&lt;br /&gt;
GPIO.cleanup()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Safety Tips:===&lt;br /&gt;
* Be careful not to short any pins on the Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
*  SSD1306 OLED Black-Screen Debugging Report &amp;amp; Operation Guide&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;Target hardware:&amp;lt;/strong&amp;gt; 0.91&amp;quot; OLED, 128×32 px, SSD1306, I2C, address 0x3C, Raspberry Pi 5&lt;br /&gt;
&amp;lt;strong&amp;gt;Software:&amp;lt;/strong&amp;gt; luma.oled 3.15.0, luma.core 2.6.0, Python 3.13, smbus2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1. Executive Summary — What Was Actually Wrong ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;Nothing was wrong with the code, the luma library, or the SSD1306 register configuration.&amp;lt;/strong&amp;gt;&lt;br /&gt;
No library or example source code was modified. The failures came from hardware and&lt;br /&gt;
configuration, in three layers:&lt;br /&gt;
&lt;br /&gt;
1. &amp;lt;strong&amp;gt;Two defective display modules.&amp;lt;/strong&amp;gt;  The driver IC responded on I2C and executed&lt;br /&gt;
  commands correctly, but the panel itself never lit — dead charge-pump / flex-cable /&lt;br /&gt;
  panel. The first module had worked before and died of age; the replacement (0.96&amp;quot;)&lt;br /&gt;
  showed the identical signature, indicating a bad batch.&lt;br /&gt;
2. &amp;lt;strong&amp;gt;A supply-voltage trap.&amp;lt;/strong&amp;gt;  Modules with an onboard AMS1117 regulator (~1.1 V dropout)&lt;br /&gt;
  must be fed &amp;lt;strong&amp;gt; 5V&amp;lt;/strong&amp;gt; ; at 3.3 V the logic still works (so the chip ACKs and responds,&lt;br /&gt;
  which is very misleading) but the charge pump cannot start → black screen. Bare&lt;br /&gt;
  modules with &amp;lt;strong&amp;gt; no regulator must use 3.3 V&amp;lt;/strong&amp;gt; ; feeding them 5 V does not work and risks&lt;br /&gt;
  damage. The final working module is a bare one and runs correctly at 3.3 V.&lt;br /&gt;
3. &amp;lt;strong&amp;gt;A parameter mismatch in the examples.&amp;lt;/strong&amp;gt;  The examples in this directory default to&lt;br /&gt;
  `ssd1305 / 128×64`; this panel is `ssd1306 / 128×32`. Running without parameters&lt;br /&gt;
  produces a black or garbled screen. The fix is to pass the correct display, interface,&lt;br /&gt;
  geometry and address — done via the config file `ssd1306_128x32.conf`.&lt;br /&gt;
&lt;br /&gt;
=== 2. What Was Done, Step by Step (Method and Basis)===&lt;br /&gt;
&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
     |+ Diagnosis — locating the fault&lt;br /&gt;
     ! Method !! Basis / Reasoning&lt;br /&gt;
     |-&lt;br /&gt;
     | Bus scan with &amp;lt;code&amp;gt;i2cdetect&amp;lt;/code&amp;gt; || An ACK at 0x3C proves all four wires&lt;br /&gt;
   (VCC/GND/SDA/SCL) are connected and the driver IC is powered&lt;br /&gt;
     |-&lt;br /&gt;
     | Source inspection of ssd1306 in luma.oled 3.15.0 || The 128×32 init sequence&lt;br /&gt;
   (multiplex 0x1F, compins 0x02, charge pump 0x14) matches the datasheet standard — a&lt;br /&gt;
   register-level bug was ruled out on evidence&lt;br /&gt;
     |-&lt;br /&gt;
     | Raw-register write of 0xA5 (force all-on) || This command bypasses GDDRAM; a&lt;br /&gt;
   healthy panel must glow. No light = fault in the high-voltage path (charge pump /&lt;br /&gt;
   panel / flex cable)&lt;br /&gt;
     |-&lt;br /&gt;
     | Status-register read before/after DISPLAY ON/OFF commands || Per the SSD1306&lt;br /&gt;
   datasheet, bit 6 is the display ON/OFF flag. It flipped correctly, proving the chip&lt;br /&gt;
   executes commands — fault isolated to the panel side&lt;br /&gt;
     |-&lt;br /&gt;
     | 5 consecutive bus scans + 10 consecutive status reads || All values stable and&lt;br /&gt;
   identical — ruled out loose wiring and parasitic power&lt;br /&gt;
     |-&lt;br /&gt;
     | 3.3V / 5V supply switching test || Modules with an AMS1117 regulator require 5V;&lt;br /&gt;
   bare modules without a regulator require 3.3V. The working module lit at 3.3V&lt;br /&gt;
     |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===3. Files Created / Modified===&lt;br /&gt;
&lt;br /&gt;
  {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
     |+ Fixes and deliverables&lt;br /&gt;
     ! File !! Type !! Description&lt;br /&gt;
     |-&lt;br /&gt;
     | &amp;lt;code&amp;gt;ssd1306_128x32.conf&amp;lt;/code&amp;gt; || Fixed || Initially written in INI format,&lt;br /&gt;
   causing &amp;quot;unrecognized arguments&amp;quot;. Based on the source of&lt;br /&gt;
   &amp;lt;code&amp;gt;luma.core.cmdline.load_config&amp;lt;/code&amp;gt; (reads line by line, no whitespace&lt;br /&gt;
   splitting), rewritten as one &amp;lt;code&amp;gt;--key=value&amp;lt;/code&amp;gt; per line; demo.py then ran&lt;br /&gt;
   successfully&lt;br /&gt;
     |-&lt;br /&gt;
     | &amp;lt;code&amp;gt;ssd1306_raw.py&amp;lt;/code&amp;gt; || Created || Library-free SSD1306 driver; writes&lt;br /&gt;
   registers directly via smbus2 (PIL used only for pixel rendering)&lt;br /&gt;
     |-&lt;br /&gt;
     | &amp;lt;code&amp;gt;OLED_128x32_I2C_manual.md&amp;lt;/code&amp;gt; || Created / updated || Bilingual&lt;br /&gt;
   operation manual; added the regulator/supply-voltage rule and the hardware-failure&lt;br /&gt;
   criterion&lt;br /&gt;
     |-&lt;br /&gt;
     | &amp;lt;code&amp;gt;SSD1306_Debug_Report_EN.md&amp;lt;/code&amp;gt; || Created || Full English debugging&lt;br /&gt;
   report and operation guide&lt;br /&gt;
     |}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
No files in luma.oled / luma.core or the example scripts were modified.&lt;br /&gt;
&lt;br /&gt;
===4. Final Working Configuration===&lt;br /&gt;
&lt;br /&gt;
* Module: bare 0.91&amp;quot; 128×32 SSD1306, &amp;lt;strong&amp;gt;no onboard regulator&amp;lt;/strong&amp;gt;&lt;br /&gt;
* Wiring: VCC → &amp;lt;strong&amp;gt;3.3 V&amp;lt;/strong&amp;gt; (pin 1), GND → GND, SDA → GPIO2 (pin 3), SCL → GPIO3 (pin 5)&lt;br /&gt;
* No RST/RES connection needed (I2C interface)&lt;br /&gt;
* I2C address: `0x3C`&lt;br /&gt;
&lt;br /&gt;
=== 5. Operating Instructions===&lt;br /&gt;
&lt;br /&gt;
==== Run any luma example in this directory====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python demo.py    -f ssd1306_128x32.conf&lt;br /&gt;
python clock.py   -f ssd1306_128x32.conf&lt;br /&gt;
python pi_logo.py -f ssd1306_128x32.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or pass parameters explicitly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python demo.py -d ssd1306 -i i2c --i2c-port 1 --i2c-address 0x3c --width 128 --height 32&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Run the library-free raw driver===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python ssd1306_raw.py                 # 0.96&amp;quot; 128x64&lt;br /&gt;
python ssd1306_raw.py --height 32     # 0.91&amp;quot; 128x32 (this panel)&lt;br /&gt;
python ssd1306_raw.py --addr 0x3D     # modules with address 0x3D&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Minimal code (luma)===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from luma.core.interface.serial import i2c&lt;br /&gt;
from luma.oled.device import ssd1306&lt;br /&gt;
from luma.core.render import canvas&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
device = ssd1306(i2c(port=1, address=0x3C), width=128, height=32)&lt;br /&gt;
with canvas(device) as draw:&lt;br /&gt;
    draw.rectangle(device.bounding_box, outline=&amp;quot;white&amp;quot;)&lt;br /&gt;
    draw.text((4, 10), &amp;quot;OK 128x32&amp;quot;, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===6. Black-Screen Decision Tree (for future modules)===&lt;br /&gt;
&lt;br /&gt;
* `i2cdetect -y 1` shows the address?&lt;br /&gt;
  &amp;lt;strong&amp;gt;No&amp;lt;/strong&amp;gt; → power/wiring fault: measure VCC-GND **at the module&#039;s solder pads**, check SDA=pin 3, SCL=pin 5, try fresh dupont wires.&lt;br /&gt;
  &amp;lt;strong&amp;gt;Yes&amp;lt;/strong&amp;gt; → continue.&lt;br /&gt;
&lt;br /&gt;
* Run `python oled_diagnose.py`. Any step lights the panel?&lt;br /&gt;
  &amp;lt;strong&amp;gt;Yes&amp;lt;/strong&amp;gt; → software/parameter issue; use the matching parameters (`-d ssd1306 --width 128 --height 32 --i2c-address 0x3c`).&lt;br /&gt;
  &amp;lt;strong&amp;gt;No&amp;lt;/strong&amp;gt; → continue.&lt;br /&gt;
&lt;br /&gt;
* Status-register test: does bit 6 flip after `0xAF`/`0xAE`?&lt;br /&gt;
  &amp;lt;strong&amp;gt;Yes&amp;lt;/strong&amp;gt; (chip executes commands, panel still dark) → charge pump/panel hardware. Check whether the module has a regulator: AMS1117 → power with **5 V**; no regulator → power with **3.3 V**. Still dark at the correct voltage → defective module, return it.&lt;br /&gt;
  &amp;lt;strong&amp;gt;No&amp;lt;/strong&amp;gt; → module-level fault (reset circuit / dead IC), return it.&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
* 1U Rackmount for Raspberry Pi 5 with M.2 NVMe SSD support.&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=DR-0001&amp;diff=16568</id>
		<title>DR-0001</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=DR-0001&amp;diff=16568"/>
		<updated>2026-08-19T03:00:52Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: /* Install SSD1306 driver libarary for OLED 0.91 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==1U Rackmount for Raspberry Pi 5 ==&lt;br /&gt;
* Purchase URL: [ https://52pi.com ] or [ https://deskpi.com ]&lt;br /&gt;
[[File:DR-0001-1.jpg|right|320px]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
This is an upgraded version of a 1U Rackmount designed for compatibility with both Raspberry Pi 5 . It features a motherboard that supports PCIe expansion, allowing the PCIe interface of the Raspberry Pi 5 to be extended to accommodate an M.2 NVMe SSD in 2230/2242/2260/2280 form factors. The expansion board also routes the Raspberry Pi&#039;s 5V and GND, SDA, and SCL pins to the rear through PogoPin connectors, providing I2C interface peripherals in a Grove format. Additionally, a red LED is included on the board for the Raspberry Pi ID signal pin, which can be programmed to indicate the current device by controlling the GPIO4 pin&#039;s high or low level, acting as a programmable device ID signal light.&lt;br /&gt;
&lt;br /&gt;
The Rackmount supports the connection of up to five Raspberry Pi devices and can also be configured with an OLED display frame in place of one of the Raspberry Pi slots. These components can be easily adjusted and removed due to the use of hand-tightened screws. The OLED display features a 0.91-inch screen and communicates with the Raspberry Pi via I2C protocol, displaying real-time information such as CPU status, memory status, IP information, and serial numbers. The content displayed on the OLED can be fully customized.&lt;br /&gt;
==Features==&lt;br /&gt;
* &amp;lt;strong&amp;gt;Compatibility:&amp;lt;/strong&amp;gt; Designed to work with both Raspberry Pi 5.&lt;br /&gt;
* &amp;lt;strong&amp;gt;PCIe Expansion Support:&amp;lt;/strong&amp;gt;  Includes a motherboard that enables PCIe expansion, allowing the connection of M.2 NVMe SSDs in various form factors (2230/2242/2260/2280).&lt;br /&gt;
* &amp;lt;strong&amp;gt;I2C Interface: &amp;lt;/strong&amp;gt; The board routes the Raspberry Pi&#039;s 5V, GND, SDA, and SCL pins to the rear through PogoPin connectors, offering I2C interface peripherals in a Grove format.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Programmable LED Indicator: &amp;lt;/strong&amp;gt; A red LED on the board serves as a programmable device ID signal, controllable via the GPIO4 pin to indicate the status or identity of the device.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Modular Design:&amp;lt;/strong&amp;gt;  Supports the integration of up to five Raspberry Pi devices, with the option to replace one slot with an OLED display frame.&lt;br /&gt;
* &amp;lt;strong&amp;gt;OLED Display Integration:&amp;lt;/strong&amp;gt;  The option to include a 0.91-inch OLED screen that communicates with the Raspberry Pi via I2C, displaying customizable information such as CPU usage, memory status, IP address, and serial numbers.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Easy Assembly and Disassembly:&amp;lt;/strong&amp;gt;  Components are secured with hand-tightened screws, allowing for convenient adjustments and removal.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Customizable Display Content: &amp;lt;/strong&amp;gt; The information displayed on the OLED screen can be fully customized to meet specific needs or preferences.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Rackmount Form Factor: &amp;lt;/strong&amp;gt; Designed to fit into a 1U rack space, making it suitable for data centers or other environments where space is at a premium.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Versatility:&amp;lt;/strong&amp;gt;  The Rackmount can be configured in various ways to suit different use cases, whether for development, testing, or deployment in a production environment.&lt;br /&gt;
===Specifications===&lt;br /&gt;
* Form Factor: 1U Rackmount design suitable for standard 19-inch racks.&lt;br /&gt;
* Raspberry Pi Compatibility: Specifically designed for Raspberry Pi 5.&lt;br /&gt;
* PCIe Expansion:Supports M.2 NVMe SSDs in 2230, 2242, 2260, and 2280 form factors. Provides a PCIe interface for high-speed data transfer.&lt;br /&gt;
* I/O Connectivity: Rear I2C interface via PogoPin connectors for external peripherals.&lt;br /&gt;
* GPIO4 pin for programmable LED control.&lt;br /&gt;
* LED Indicator:Red LED for device identification or status indication. Programmable through software to show different statuses.&lt;br /&gt;
* Modular Bays: Five bays for Raspberry Pi devices. One bay can be replaced with an OLED display module.&lt;br /&gt;
* OLED Display Specifications:0.91-inch screen size, 128x32 pixels. I2C communication protocol.&lt;br /&gt;
* Customizable display for system information.&lt;br /&gt;
* Physical Security:Hand-tightened screws for secure mounting of Raspberry Pi devices and OLED display.&lt;br /&gt;
* Ensures stability and ease of maintenance.&lt;br /&gt;
* Power Requirements: Compatibility with Raspberry Pi&#039;s standard power supply.&lt;br /&gt;
* Material and Construction: Durable metal construction for the rackmount chassis. High-quality components for reliable performance.&lt;br /&gt;
* Mounting Options: Standard rackmount holes for easy installation into a rack.&lt;br /&gt;
* Includes additional mounting accessories for different setups.&lt;br /&gt;
* Software Compatibility: Compatible with Raspberry Pi&#039;s operating system and software ecosystem.&lt;br /&gt;
* Support for GPIO programming for custom LED and device control.&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product outlook&lt;br /&gt;
[[ File:DR-0001-6.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Application Senario &lt;br /&gt;
[[ File:DR-0001-2.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&amp;lt;font color=red&amp;gt; NOTE: Raspberry Pis are not included in the package, additional purchase required!&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* Easy to assemble and maintain&lt;br /&gt;
[[ File:DR-0001-3.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
[[File:DR-0001-12.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Customizable OLED display screen, with a size of 0.91 inches&lt;br /&gt;
[[ File:DR-0001-4.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Ports Definitions and Featrues &lt;br /&gt;
Programmable I/O controlled UID indicator light, which can be programmed to control the LED blinking to indicate the device&#039;s location, facilitating faster troubleshooting and easier maintenance operations.&lt;br /&gt;
[[ File:DR-0001-5.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===How to connect OLED display to Raspberry Pi on GPIO pins===&lt;br /&gt;
* Please refer to following figure to connect OLED display to Raspberry Pi on GPIO. &lt;br /&gt;
&amp;lt;font color=red&amp;gt;NOTE: OLED&#039;s VCC should be connected to 3.3V power rail, Do not connect it to 5V power rail!!!&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[ File:DR-0001-7.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Grove Connector Support I2C and Uart&lt;br /&gt;
[[ File:DR-0001-8.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Accessories Dimension&lt;br /&gt;
[[ File:DR-0001-9.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* OLED assemble details&lt;br /&gt;
Please remove the protection film from acrylic panel and use the washer between OLED PCB board and acrylic panel.&lt;br /&gt;
[[ File:DR-0001-10.jpg |left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* PCIe Expansion board for Raspberry Pi 5 only&lt;br /&gt;
The expansion board supports M.2 NVMe M-key SSD 2230/2242/2260/2280, and the board will be powered by Raspberry Pi 5 via PogoPin on the PCB board, please make sure the board&#039;s pogoins are contact well with the soldering point on back of the Raspberry Pi 5 on GPIO pins. &lt;br /&gt;
[[File:DR-0001-11.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;:&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to assemble it? ==&lt;br /&gt;
* Please note that there are several details you need to pay attention, plesae check out following figure.&lt;br /&gt;
[[ File:DR-0001-安装.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Package Includes==&lt;br /&gt;
* Following figure shows the details of the product: &lt;br /&gt;
[[ File:DR-0001-清单.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to enable I2C OLED display?==&lt;br /&gt;
* We assume that you are using Raspberry Pi OS 64bit(bookworm, the latest official image) &lt;br /&gt;
To enable I2C and UART on your Raspberry Pi, you can follow these detailed steps:&lt;br /&gt;
&lt;br /&gt;
===Enabling I2C===&lt;br /&gt;
* Method 1. Using the Raspberry Pi Configuration Tool: &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo raspi-config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to open the configuration tool. Navigate to `Interface Options`, Select `I2C` and enable it.&lt;br /&gt;
&lt;br /&gt;
* Method  2. Using the Command Line:&lt;br /&gt;
You can also enable I2C by editing the `/boot/firmware/config.txt` file and adding `dtparam=i2c_arm=on` if it&#039;s not already present, After making changes, reboot your Pi.&lt;br /&gt;
&lt;br /&gt;
===Verifying I2C===&lt;br /&gt;
* Install I2C tools using `sudo apt-get install -y i2c-tools`.&lt;br /&gt;
* Use &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
i2cdetect -y 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to scan for I2C devices, if you see `3c` means that the OLED display has been recognized by your Raspberry Pi. &lt;br /&gt;
&lt;br /&gt;
===Enabling UART===&lt;br /&gt;
* Method 1. Using the Raspberry Pi Configuration Tool:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo raspi-config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Go to `Interface Options`, Select `Serial` and enable it.&lt;br /&gt;
&amp;lt;pre&amp;gt; Note: This will also enable the login shell on the serial port. &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Method 2. Using the Command Line:&lt;br /&gt;
Edit `/boot/config.txt` and add `enable_uart=1`, save it and then reboot your Pi.&lt;br /&gt;
&lt;br /&gt;
===Accessing UART===&lt;br /&gt;
* Connect your Pi to a USB-to-TTL converter, On Windows, you may need to install drivers for the converter. on Linux just use a terminal program like `minicom`, `putty`, or `screen` to access the UART interface.&lt;br /&gt;
&lt;br /&gt;
Remember to check the documentation for your specific Raspberry Pi model, as the steps might vary slightly. If you need more detailed instructions or encounter any issues, refer to the [ https://www.raspberrypi.org/documentation/ ]  or community forums for additional support.&lt;br /&gt;
&lt;br /&gt;
===How to display customized information on OLED display? ===&lt;br /&gt;
* Final result&lt;br /&gt;
[[File:DR-0001 applications-01.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
==How to customize content on OLED ?==&lt;br /&gt;
* For example: If you want to display current IP address of wlan interface and the serial number of your Raspberry Pi 5, please follow next steps to configure it. &lt;br /&gt;
===Install Virtal environment package ===&lt;br /&gt;
* Open a terminal and typing following commands:&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo apt update &lt;br /&gt;
sudo apt upgrade -y &lt;br /&gt;
sudo apt -y install virtualenv &lt;br /&gt;
sudo usermod -a -G i2c,spi,gpio pi&lt;br /&gt;
sudo apt install python3-dev python3-pip python3-numpy libfreetype6-dev libjpeg-dev build-essential&lt;br /&gt;
sudo apt install libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev libportmidi-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:Install pre-insistpackages.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
[[File:Install-pre-insistpackage-02.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Create virtual environment===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
virtualenv -p python3 venv &lt;br /&gt;
cd venv/&lt;br /&gt;
source bin/activate &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Install SSD1306 driver and library for OLED 0.91===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pip install luma.oled&lt;br /&gt;
pip install psutil&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Clone luma.examples repository===&lt;br /&gt;
Log out and in again and clone this repository:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone https://github.com/rm-hull/luma.examples.git&lt;br /&gt;
cd luma.examples/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Install luma libraries===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -H pip install -e . --break-system-packages  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:Install luma libraries.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
===Test the demo ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd examples/&lt;br /&gt;
sudo python 3d_box.py --width=128 --height=32 -r 2 &lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=red&amp;gt;&amp;lt;p&amp;gt;NOTE: &amp;lt;br&amp;gt;&lt;br /&gt;
 --width=128 and --height=32 should be added to declear the OLED&#039;s resolution information. &amp;lt;br&amp;gt;&lt;br /&gt;
 -r 2  means --rotate 2 , Allowed values are: 0, 1, 2, 3  (default:0) &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
If you see a 3D-box rotating animation is in the middle of screen means that you have installed the OLED driver successfully! &lt;br /&gt;
[[File:Test demo 3dbox.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
[[File:Test demo 3dbox-2.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;;&amp;gt;&lt;br /&gt;
and then press &amp;quot;Ctrol+C&amp;quot; abort the demo.&lt;br /&gt;
&lt;br /&gt;
==Use the demo code==&lt;br /&gt;
* There are a lot of demo codes in the examples folder, you can test it as you want. &lt;br /&gt;
for example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo python carousel.py --width=128 --height=32 -r 2 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
It will display all information of your Raspberry Pi 5 and scrolling display. &lt;br /&gt;
===Customize the display on screen===&lt;br /&gt;
Modify the sys_info.py python file and adding your own function to show the information you want, do remember backup the origin file. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp sys_info.py sys_info.py.bak &lt;br /&gt;
vim.tiny sys_info.py &lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Press &#039;i&#039; to insert mode, and paste following lines into it. you can modify this file by other text editor what you like. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# -*- coding: utf-8 -*-&lt;br /&gt;
# Copyright (c) 2014-2022 Richard Hull and contributors&lt;br /&gt;
# See LICENSE.rst for details.&lt;br /&gt;
# PYTHON_ARGCOMPLETE_OK&lt;br /&gt;
&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Display basic system information.&lt;br /&gt;
&lt;br /&gt;
Needs psutil (+ dependencies) installed::&lt;br /&gt;
&lt;br /&gt;
  $ sudo apt-get install python-dev&lt;br /&gt;
  $ sudo -H pip install psutil&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
import os&lt;br /&gt;
import sys&lt;br /&gt;
import time&lt;br /&gt;
from pathlib import Path&lt;br /&gt;
from datetime import datetime&lt;br /&gt;
import subprocess as sp&lt;br /&gt;
&lt;br /&gt;
if os.name != &#039;posix&#039;:&lt;br /&gt;
    sys.exit(f&#039;{os.name} platform is not supported&#039;)&lt;br /&gt;
&lt;br /&gt;
from demo_opts import get_device&lt;br /&gt;
from luma.core.render import canvas&lt;br /&gt;
from PIL import ImageFont&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    import psutil&lt;br /&gt;
except ImportError:&lt;br /&gt;
    print(&amp;quot;The psutil library was not found. Run &#039;sudo -H pip install psutil&#039; to install it.&amp;quot;)&lt;br /&gt;
    sys.exit()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# TODO: custom font bitmaps for up/down arrows&lt;br /&gt;
# TODO: Load histogram&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def bytes2human(n):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; bytes2human(10000)&lt;br /&gt;
    &#039;9K&#039;&lt;br /&gt;
    &amp;gt;&amp;gt;&amp;gt; bytes2human(100001221)&lt;br /&gt;
    &#039;95M&#039;&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    symbols = (&#039;K&#039;, &#039;M&#039;, &#039;G&#039;, &#039;T&#039;, &#039;P&#039;, &#039;E&#039;, &#039;Z&#039;, &#039;Y&#039;)&lt;br /&gt;
    prefix = {}&lt;br /&gt;
    for i, s in enumerate(symbols):&lt;br /&gt;
        prefix[s] = 1 &amp;lt;&amp;lt; (i + 1) * 10&lt;br /&gt;
    for s in reversed(symbols):&lt;br /&gt;
        if n &amp;gt;= prefix[s]:&lt;br /&gt;
            value = int(float(n) / prefix[s])&lt;br /&gt;
            return &#039;%s%s&#039; % (value, s)&lt;br /&gt;
    return f&amp;quot;{n}B&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def cpu_usage():&lt;br /&gt;
    # load average, uptime&lt;br /&gt;
    uptime = datetime.now() - datetime.fromtimestamp(psutil.boot_time())&lt;br /&gt;
    #av1, av2, av3 = os.getloadavg()&lt;br /&gt;
    #return &amp;quot;Ld:%.1f %.1f %.1f Up: %s&amp;quot; \&lt;br /&gt;
    #    % (av1, av2, av3, str(uptime).split(&#039;.&#039;)[0])&lt;br /&gt;
    return &amp;quot;Up: %s&amp;quot; % (str(uptime).split(&#039;.&#039;)[0])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def mem_usage():&lt;br /&gt;
    usage = psutil.virtual_memory()&lt;br /&gt;
    return &amp;quot;Mem: %s %.0f%%&amp;quot; \&lt;br /&gt;
        % (bytes2human(usage.used), 100 - usage.percent)&lt;br /&gt;
&lt;br /&gt;
def disk_usage(dir):&lt;br /&gt;
    usage = psutil.disk_usage(dir)&lt;br /&gt;
    return &amp;quot;SD:  %s %.0f%%&amp;quot; \&lt;br /&gt;
        % (bytes2human(usage.used), usage.percent)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def network(iface):&lt;br /&gt;
    stat = psutil.net_io_counters(pernic=True)[iface]&lt;br /&gt;
    return &amp;quot;%s: Tx%s, Rx%s&amp;quot; % \&lt;br /&gt;
           (iface, bytes2human(stat.bytes_sent), bytes2human(stat.bytes_recv))&lt;br /&gt;
&lt;br /&gt;
def mem_usage():&lt;br /&gt;
    usage = psutil.virtual_memory()&lt;br /&gt;
    return &amp;quot;Mem: %s %.0f%%&amp;quot; \&lt;br /&gt;
        % (bytes2human(usage.used), 100 - usage.percent)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def disk_usage(dir):&lt;br /&gt;
    usage = psutil.disk_usage(dir)&lt;br /&gt;
    return &amp;quot;SD:  %s %.0f%%&amp;quot; \&lt;br /&gt;
        % (bytes2human(usage.used), usage.percent)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def network(iface):&lt;br /&gt;
    stat = psutil.net_io_counters(pernic=True)[iface]&lt;br /&gt;
    return &amp;quot;%s: Tx%s, Rx%s&amp;quot; % \&lt;br /&gt;
           (iface, bytes2human(stat.bytes_sent), bytes2human(stat.bytes_recv))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def get_ip_address():&lt;br /&gt;
    ip = sp.getoutput(&#039;hostname -I&#039;)&lt;br /&gt;
    return &amp;quot;IP: %s&amp;quot; % ip&lt;br /&gt;
&lt;br /&gt;
def get_id():&lt;br /&gt;
    id_of_pi = sp.getoutput(&amp;quot;cat /proc/cpuinfo | grep -i serial| awk -F: &#039;{print $2}&#039;|xargs&amp;quot;)&lt;br /&gt;
    return &amp;quot;%s&amp;quot; % id_of_pi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def stats(device):&lt;br /&gt;
    # use custom font&lt;br /&gt;
    font_path = str(Path(__file__).resolve().parent.joinpath(&#039;fonts&#039;, &#039;C&amp;amp;C Red Alert [INET].ttf&#039;))&lt;br /&gt;
    #font_path = str(Path(__file__).resolve().parent.joinpath(&#039;fonts&#039;, &#039;DejaVuSansMono.ttf&#039;))&lt;br /&gt;
    font2 = ImageFont.truetype(font_path, 15)&lt;br /&gt;
&lt;br /&gt;
    with canvas(device) as draw:&lt;br /&gt;
        # draw.text((0, 0), cpu_usage(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
        draw.text((0, 0), get_id(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
        if device.height &amp;gt;= 32:&lt;br /&gt;
            #draw.text((0, 11), mem_usage(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            #draw.text((0, 16), disk_usage(&#039;/&#039;), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            draw.text((0, 16), get_ip_address(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        if device.height &amp;gt;= 64:&lt;br /&gt;
            draw.text((0, 26), disk_usage(&#039;/&#039;), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            try:&lt;br /&gt;
                draw.text((0, 38), network(&#039;wlan0&#039;), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            except KeyError:&lt;br /&gt;
                # no wifi enabled/available&lt;br /&gt;
                pass&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    while True:&lt;br /&gt;
        stats(device)&lt;br /&gt;
        time.sleep(5)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    try:&lt;br /&gt;
        device = get_device()&lt;br /&gt;
        main()&lt;br /&gt;
    except KeyboardInterrupt:&lt;br /&gt;
        pass&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Here let me explain to you what i did.&lt;br /&gt;
* adding &amp;quot; import subprocess as sp&amp;quot;, this will help me to execute some shell command in OS. &lt;br /&gt;
* adding following parts:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def get_ip_address():&lt;br /&gt;
    ip = sp.getoutput(&#039;hostname -I&#039;)&lt;br /&gt;
    return &amp;quot;IP: %s&amp;quot; % ip&lt;br /&gt;
&lt;br /&gt;
def get_id():&lt;br /&gt;
    id_of_pi = sp.getoutput(&amp;quot;cat /proc/cpuinfo | grep -i serial| awk -F: &#039;{print $2}&#039;|xargs&amp;quot;)&lt;br /&gt;
    return &amp;quot;%s&amp;quot; % id_of_pi&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
* get_ip_address will execute the command &amp;quot;hostname -I&amp;quot; in system and grab the IP address and return it to main process.&lt;br /&gt;
* get_id is to read /proc/cpuinfo file and grab the serial number and return to main process.&lt;br /&gt;
&lt;br /&gt;
===Use custom font===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   font_path = str(Path(__file__).resolve().parent.joinpath(&#039;fonts&#039;, &#039;C&amp;amp;C Red Alert [INET].ttf&#039;))&lt;br /&gt;
   font2 = ImageFont.truetype(font_path, 15)   # change font size to 15. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Modify the draw function===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  with canvas(device) as draw:&lt;br /&gt;
        # draw.text((0, 0), cpu_usage(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
        draw.text((0, 0), get_id(), font=font2, fill=&amp;quot;white&amp;quot;)         #####　draw id on screen at (0,0) position, (x,y)&lt;br /&gt;
        if device.height &amp;gt;= 32:&lt;br /&gt;
            #draw.text((0, 11), mem_usage(), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            #draw.text((0, 16), disk_usage(&#039;/&#039;), font=font2, fill=&amp;quot;white&amp;quot;)&lt;br /&gt;
            draw.text((0, 16), get_ip_address(), font=font2, fill=&amp;quot;white&amp;quot;)   ####　draw text on (0,16) with IP address. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to create a systemd file to make it automatically start at boot up==&lt;br /&gt;
* Step1. create a shell script called it &#039;start_led.sh&#039; &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#&lt;br /&gt;
cd /home/pi/venv/ &amp;amp;&amp;amp; source /home/pi/venv/bin/activate &lt;br /&gt;
/usr/bin/python3 /home/pi/luma.examples/examples/sys_info.py --width=128 --height=32 -r 2 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
save it and grant executable permission and test it.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x start_led.sh &lt;br /&gt;
./start_led.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
If if works properly, just press &amp;quot;ctrol+c&amp;quot; to abort the test.&lt;br /&gt;
* Step2. create a systemd file and enable it.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo vim.tiny /etc/systemd/system/rackmount_oled.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
And then, adding following lines:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Rackmount OLED service on RPi5&lt;br /&gt;
DefaultDependencies=no&lt;br /&gt;
StartLimitIntervalSec=60&lt;br /&gt;
StartLimitBurst=5&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
ExecStart=/bin/bash /home/pi/start_led.sh&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Save it and quit. &lt;br /&gt;
===Enable rackmount_oled.service===&lt;br /&gt;
* reload daemon&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl daemon-reload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Enable service&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo systemctl enable rackmount_oled.service &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Start service &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start rackmount_oled.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Restart service&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl restart rackmount_oled.service &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Stop service&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl stop rackmount_oled.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Disable service &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl disable rackmount_oled.service &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to enable PCIe function on Raspberry Pi 5?==&lt;br /&gt;
* To enable PCIe functionality on the Raspberry Pi 5, follow these steps:&lt;br /&gt;
&lt;br /&gt;
===1. Enable the PCIe External Connector:===&lt;br /&gt;
By default, the PCIe connector on the Raspberry Pi 5 is not enabled. To enable it, you need to add a configuration parameter to the `config.txt` file located in the `/boot/firmware` directory. You can use either of these lines:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dtparam=pciex1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After adding the line, reboot your Raspberry Pi for the changes to take effect.&lt;br /&gt;
&lt;br /&gt;
===2.Enable PCIe Gen 3.0 (Optional):===&lt;br /&gt;
The Raspberry Pi 5&#039;s PCIe connection is certified for Gen 2.0 speeds. However, if you want to attempt using Gen 3.0 speeds, add the following line to the `config.txt` file as well:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dtparam=pciex1_gen=3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 Be aware that the Raspberry Pi 5 is not certified for Gen 3.0 speeds, and using this setting may result in instability .&lt;br /&gt;
&lt;br /&gt;
===3.Booting from PCIe:===&lt;br /&gt;
If you intend to boot from a device connected via PCIe, such as an NVMe SSD, you will need to modify the boot order in the EEPROM. Use the following command to edit the EEPROM configuration:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &lt;br /&gt;
sudo apt upgrade -y &lt;br /&gt;
sudo rpi-eeprom-config --edit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then, change the `BOOT_ORDER` line to include NVMe in the boot order:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BOOT_ORDER=0xf416&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This setting will make the Raspberry Pi attempt to boot from an NVMe device connected to the PCIe port .&lt;br /&gt;
===4. Kernel Compilation (Advanced):===&lt;br /&gt;
If you need to compile the kernel to add support for specific PCIe devices, you can follow the steps outlined in the Raspberry Pi documentation. This involves cloning the Raspberry Pi kernel repository, configuring the kernel with `make menuconfig`, and enabling the necessary modules for your devices .&lt;br /&gt;
Remember to always check the compatibility of the devices you intend to use with the Raspberry Pi 5&#039;s PCIe interface, as not all devices may be supported out of the box.&lt;br /&gt;
&lt;br /&gt;
==How to light up identical LED? ==&lt;br /&gt;
To light up UID LED indicator on a Raspberry Pi 5, you&#039;ll make sure the GPIO Pin of the UID LED connected to. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GPIO (General Purpose Input/Output) pins on the Raspberry Pi.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
===Steps===&lt;br /&gt;
* 1. Identify GPIO Pins: &amp;lt;font color=red&amp;gt;GPIO4&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* 2. Power On:&lt;br /&gt;
Make sure your Raspberry Pi is powered off before connecting the LED. Once everything is connected, you can power on your Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
* 3. Software Setup:&lt;br /&gt;
You&#039;ll need to write a small program to turn the GPIO pin on and off to control the LED. You can use Python with the `gpiozero` library or `RPi.GPIO` library to control the GPIO pins.&lt;br /&gt;
&lt;br /&gt;
===Example Python Code with gpiozero:===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from gpiozero import LED&lt;br /&gt;
from time import sleep&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
led = LED(&#039;GPIO4&#039;)&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    led.on()&lt;br /&gt;
    sleep(1)&lt;br /&gt;
    led.off()&lt;br /&gt;
    sleep(1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Example Python Code with RPi.GPIO:===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import RPi.GPIO as GPIO&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
# Set the GPIO mode&lt;br /&gt;
GPIO.setmode(GPIO.BCM)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
GPIO_PIN = 4&lt;br /&gt;
&lt;br /&gt;
# Set up the GPIO pin as an output channel&lt;br /&gt;
GPIO.setup(GPIO_PIN, GPIO.OUT)&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    GPIO.output(GPIO_PIN, GPIO.HIGH)  # Turn on the LED&lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
    GPIO.output(GPIO_PIN, GPIO.LOW)   # Turn off the LED&lt;br /&gt;
    time.sleep(1)&lt;br /&gt;
&lt;br /&gt;
# Clean up the GPIO pins before exiting the program&lt;br /&gt;
GPIO.cleanup()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Safety Tips:===&lt;br /&gt;
* Be careful not to short any pins on the Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
* 1U Rackmount for Raspberry Pi 5 with M.2 NVMe SSD support.&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=EP-0245&amp;diff=16567</id>
		<title>EP-0245</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=EP-0245&amp;diff=16567"/>
		<updated>2026-08-05T06:09:24Z</updated>

		<summary type="html">&lt;p&gt;Yoyojacky: /* Key Features */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==UPS Gen 6 power module compatible with Raspberry Pi 5/4B==&lt;br /&gt;
[[File:EP-0245-01.jpg|right|320px]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
The UPS Gen 6 is the latest version of the UPS Plus series, designed for enhanced power management on Raspberry Pi or other SBCs. It supports up to 4 channels of 8.4V lithium battery packs in parallel and can be expanded with two 3.7V 18650 batteries in series. The device features intelligent power path management, prioritizing external power and switching to battery power during outages. It also supports real - time monitoring of battery status via I2C and custom firmware uploads through DFU. Additional features include programmable LEDs, a PikaPython interface for advanced monitoring, auto - restart on power recovery, safe shutdown countdown, and low - battery loop protection. UPS Gen 6 offers a versatile solution for your projects and will gain more features through future OTA firmware upgrades.&lt;br /&gt;
NOTE: For convenience, the UPS Gen 6 motherboard will be referred to as **upsv6** in our subsequent code links.&lt;br /&gt;
===Key Features===&lt;br /&gt;
* Bumpless Transfer&lt;br /&gt;
* Hard Disk Power Supply Interface&lt;br /&gt;
* Cooling System&lt;br /&gt;
* OTA Expansion for Additional Functions&lt;br /&gt;
* I2C Communication Interface&lt;br /&gt;
* PikaPython Script Execution Capability&lt;br /&gt;
* Physical Power Button&lt;br /&gt;
* With AC power connected: up to 80W max.&lt;br /&gt;
* On battery power (no load stress): up to 40W max.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NOTE: Actual sustained output will vary depending on battery condition and operating temperature.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Specifications===&lt;br /&gt;
* &amp;lt;strong&amp;gt;Device Compatibility:&amp;lt;/strong&amp;gt; Supports Raspberry Pi and Orange Pi series devices.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Expansion Battery Pack Support:&amp;lt;/strong&amp;gt;Supports 18650 battery packs with two batteries in series, providing a typical voltage of 7.4V and a maximum voltage of 8.4V, with up to four parallel battery packs supported.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Power Management:&amp;lt;/strong&amp;gt; Bumpless Transfer, Full UPS (Uninterruptible Power Supply) characteristics, supporting seamless failover to battery power.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Communication Interface: &amp;lt;/strong&amp;gt;I2C protocol for battery and device status monitoring and controlling. &lt;br /&gt;
* &amp;lt;strong&amp;gt;DIY Features: &amp;lt;/strong&amp;gt;Programmable LED control via configuring i2c registers.&lt;br /&gt;
* &amp;lt;strong&amp;gt;PikaPython support:&amp;lt;/strong&amp;gt;PikaPython script interpreter for Python script injection.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Power Recovery Settings: &amp;lt;/strong&amp;gt;Configurable voltage thresholds for auto-restart.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Safe shutdown timer:&amp;lt;/strong&amp;gt; Saft shutdown timer to prevent data loss.&lt;br /&gt;
* &amp;lt;strong&amp;gt;OTA Upgrade Features:&amp;lt;/strong&amp;gt;Get more feature via OTA upgrade.&lt;br /&gt;
&lt;br /&gt;
===Compatibility Note===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
The screws, copper pillars, and other additional components of this product are primarily designed to fit the Raspberry Pi 5 and Raspberry Pi 4B. However, the product&#039;s functionality is compatible with other SBC (Single Board Computer) development boards on the market that are pin-compatible with the Raspberry Pi. If you need to install it smoothly, you may need to check whether the positioning hole locations match those of the Raspberry Pi 5 or Raspberry Pi 4B. Otherwise, it may not be physically compatible. This is hereby declared.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===UPS features Details===&lt;br /&gt;
==== Feature 1: Auto Start Mode====&lt;br /&gt;
* Register: auto_start_mode&lt;br /&gt;
* Function: Enables automatic power-on logic when written.&lt;br /&gt;
* Conditions for Auto Start:  when Battery voltage &amp;gt; auto_start_voltage and Valid external power source present&lt;br /&gt;
* Protection Mechanism: Monitors battery voltage after auto-start; If voltage drops to battery_protection_voltage multiple times:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   Auto-start attempts will be abandoned&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Manual Shutdown by Button&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   Auto clears auto_start_mode functionality&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Feature 2: Delayed Shutdown ====&lt;br /&gt;
* Register: shutdown_countdown&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  Initiates shutdown after specified seconds when written.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* &amp;lt;font color=red&amp;gt;&amp;lt;strong&amp;gt; Important Notes&amp;lt;/strong&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  Combined with active auto_start_mode: Functions as a reboot if conditions are met&lt;br /&gt;
  For complete shutdown: Must clear auto_start_mode setting&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Feature 3: Runtime Tracking ====&lt;br /&gt;
* Register: runtime&lt;br /&gt;
* Unit: milliseconds (ms)&lt;br /&gt;
* Functionality: Tracks continuous operation time since last power-on&lt;br /&gt;
&lt;br /&gt;
==== Feature 4: Force OTA Mode ====&lt;br /&gt;
* Register: ota_request&lt;br /&gt;
* Write value: &amp;lt;strong&amp;gt;0xA5A5&amp;lt;/strong&amp;gt;&lt;br /&gt;
* Behavior: Immediately forces device into OTA mode&lt;br /&gt;
&lt;br /&gt;
==== Feature 5: Physical Button Control====&lt;br /&gt;
* Current Implementation&lt;br /&gt;
Single button operation&lt;br /&gt;
Toggles power state immediately&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Note: It should be emphasized that it is not recommended to use the button to force power off, as this can cause file system damage, which is equivalent to forcibly shutting down a computer by pressing the power button.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
---- &lt;br /&gt;
&amp;lt;font color=red&amp;gt;&amp;lt;strong&amp;gt;Important Notice&amp;lt;/strong&amp;gt;&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* Immediate shutdown risks: Potential data loss&lt;br /&gt;
* Recommended method: Use shutdown_countdown for safe shutdown&lt;br /&gt;
&lt;br /&gt;
==== Feature 6: L_FAST LED Indicators ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! LED State	 !! Meaning &lt;br /&gt;
|-&lt;br /&gt;
| Fast blinking ||  Bootloader mode&lt;br /&gt;
|-&lt;br /&gt;
| Solid on || Fast charging available&lt;br /&gt;
|-&lt;br /&gt;
| Slow blinking || UPS Fault&lt;br /&gt;
|-&lt;br /&gt;
|Off || No input power&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product Outlook&lt;br /&gt;
[[File:EP-0245-01.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Back face&lt;br /&gt;
[[File:EP-0245-02.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Assembly status&lt;br /&gt;
[[File:EP-0245-03.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Port definitions &lt;br /&gt;
[[File:EP-0245-04.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;font color=red&amp;gt;&amp;lt;strong&amp;gt;Please note: When the 12v HDD power port is needed for external power supply, &lt;br /&gt;
an external PD power source and a battery need to be connected simultaneously. &lt;br /&gt;
Otherwise, the 12v HDD power port will not be able to supply power properly.&amp;lt;/strong&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
* Easy to install &lt;br /&gt;
[[File:EP-0245-05.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Heat dissipation effect &lt;br /&gt;
[[File:EP-0245-06.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* External Power supply &lt;br /&gt;
[[File:EP-0245-07.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
[[File:EP-0245-08.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Standard Output for HDD (12V/5V)&lt;br /&gt;
[[File:EP-0245-09.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Mechanical Drawings&lt;br /&gt;
Unit: mm &lt;br /&gt;
* Bottom view&lt;br /&gt;
[[File:UPSGen6 MD01.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Front view &lt;br /&gt;
[[File:UPSGen6 MD02.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Top view&lt;br /&gt;
[[File:UPSGen6 MD03.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Package List==&lt;br /&gt;
* 1 x Aluminum Heatsink with Automatically controlled Fan. &lt;br /&gt;
* 1 x UPS Gen 6 mainboard &lt;br /&gt;
* 1 x A series connect battery case&lt;br /&gt;
* 1 x 4CM Battery Connector wire&lt;br /&gt;
* 1 x Acrylic battery base frame &lt;br /&gt;
* 1 x Metal battery base frame &lt;br /&gt;
* 1 x Copper pillar pack&lt;br /&gt;
* 1 x Flat heat screws pack (M2.5)  &lt;br /&gt;
* 1 x UPS Gen 6 instructions&lt;br /&gt;
[[File:EP-0245-PL.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to assemble it?==&lt;br /&gt;
* For Raspberry Pi 4B &lt;br /&gt;
[[File:EP-0245-IN-PI-4.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; &amp;gt;&lt;br /&gt;
* For Raspberry Pi 5&lt;br /&gt;
[[File:EP-0245-IN-PI-5.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; &amp;gt;&lt;br /&gt;
==YouTube Video==&lt;br /&gt;
* [ UPS Gen 6 power module compatible with Raspberry Pi 5/4B | https://youtu.be/zbpnDJvAF1s]&lt;br /&gt;
&lt;br /&gt;
==User Manual==&lt;br /&gt;
*　&amp;lt;font color=red&amp;gt;&amp;lt;strong&amp;gt;Please read the user manual carefully before proceeding.&amp;lt;/strong&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;pre&amp;gt;This documentation assumes you are using a Raspberry Pi for testing. You can also use Orange Pi devices, but you will need to adjust the I2C controller address based on your specific setup. The default I2C device address for Raspberry Pi is /dev/i2c-1, while Orange Pi may use /dev/i2c-3. Adjust these settings according to your hardware.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===The testing environment for this documentation includes:===&lt;br /&gt;
* Raspberry Pi 5&lt;br /&gt;
* 4 battery packs, each consisting of two fully charged 18650 lithium batteries connected in series to provide 8.4V.&lt;br /&gt;
* A 100W USB-C PD protocol charger.&lt;br /&gt;
* Raspberry Pi OS 64-bit Bookworm, updated to the latest version.&lt;br /&gt;
&lt;br /&gt;
If you are using a different operating system, refer to its specific environment configuration. Note that we currently provide configuration guidance only for Raspberry Pi OS. For other systems, please resolve compatibility issues independently.&lt;br /&gt;
&lt;br /&gt;
=== Register Summary Table ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address !!  Name !! Width !! Access !! Description !! Default Value    &lt;br /&gt;
|-&lt;br /&gt;
| 0x00 ||WHO_AM_I ||8 ||R　|| Device identification register	|| 0xA6&lt;br /&gt;
|-&lt;br /&gt;
| 0x01	||version||	8 || R || Version number ||	-&lt;br /&gt;
|-&lt;br /&gt;
|0x02 || uuid0	||32 || R || Unique ID (lower 32 bits)	|| -&lt;br /&gt;
|-&lt;br /&gt;
|0x06	||uuid1	||32 || R || Unique ID (middle 32 bits)	|| -&lt;br /&gt;
|-&lt;br /&gt;
|0x0A	||uuid2	|| 32 || R || Unique ID (upper 32 bits) || -&lt;br /&gt;
|-&lt;br /&gt;
|0x0E	||output_voltage ||	16 ||	R	|| Output voltage (unit: mV, 5000mV output) || -&lt;br /&gt;
|-&lt;br /&gt;
|0x10	||input_voltage	||16||	R||	Input voltage (unit: mV) ||	-&lt;br /&gt;
|-&lt;br /&gt;
|0x12	||battery_voltage	||16	||R	|| Battery voltage (unit: mV) ||	-&lt;br /&gt;
|-&lt;br /&gt;
|0x14	|| mcu_voltage||	16||	R	|| MCU voltage (unit: mV)	|| -&lt;br /&gt;
|-&lt;br /&gt;
|0x16	|| output_current	|| 16	|| R	|| Output current (unit: mA, 5V output)	|| -&lt;br /&gt;
|-&lt;br /&gt;
|0x18	||input_current ||	16 ||	R ||	Input current (unit: mA)	|| -&lt;br /&gt;
|-&lt;br /&gt;
|0x1A	||battery_current || 16 || R || Battery current (signed, unit: mA)	|| -&lt;br /&gt;
|-&lt;br /&gt;
|0x1C	|| temperature || 8 || R || Temperature (two&#039;s complement, unit: °C) || -&lt;br /&gt;
|-&lt;br /&gt;
|0x1D	|| CR1	|| 8 || R/W || Control Register 1 || 0x01&lt;br /&gt;
|-&lt;br /&gt;
|0x1E	|| CR2 || 8 || R/W || Control Register 2 (Reserved) || 0x00&lt;br /&gt;
|-&lt;br /&gt;
|0x1F  || SR1 || 8 || R || Status Register 1 ||	-&lt;br /&gt;
|-&lt;br /&gt;
|0x20	|| SR2 || 8 || R || Status Register 2 || -&lt;br /&gt;
|-&lt;br /&gt;
|0x21	|| battery_protection_voltage || 16 || R/W || Battery protection voltage (unit: mV) || 7400&lt;br /&gt;
|-&lt;br /&gt;
|0x23	|| shutdown_countdown	|| 16 || R/W	|| Shutdown countdown (unit: seconds) || -&lt;br /&gt;
|-&lt;br /&gt;
|0x25	|| auto_start_voltage || 16	|| R/W  || Auto-start voltage threshold (unit: mV)  || 7400&lt;br /&gt;
|-&lt;br /&gt;
|0x27	|| rsv || 16 || R/W	|| Python output buffer content length || -&lt;br /&gt;
|-&lt;br /&gt;
|0x29  || ota_request	|| 16 ||  W || Writing to 0xA5A5 will request OTA mode.  || -&lt;br /&gt;
|-&lt;br /&gt;
|0x2B  || runtime || 64 || R || Cumulative runtime (unit: millisecond) ||	-&lt;br /&gt;
|-&lt;br /&gt;
|0x33	|| charge_detect_interval_s	 || 16	 || R/W	 || Charge detection interval (unit: seconds) || -&lt;br /&gt;
|-&lt;br /&gt;
|0x35  || led_ctl || 8 || R/W || LED control register || 0x01 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Control Register CR1 (Address: 0x1D) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit !!  Name !! Access !! Description !! Default Value    &lt;br /&gt;
|-&lt;br /&gt;
|BIT0 	|| auto_start_mode	|| 	R/W	|| 	Auto-start mode (0=disabled, 1=enabled)		|| 1&lt;br /&gt;
 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Status Register SR1 (Address: 0x1F)===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit !!  Name !! Access !! Description !! Default Value    &lt;br /&gt;
|-&lt;br /&gt;
| BIT0	|| sw_status ||	R || 5V output status (0=off, 1=on)	|| -&lt;br /&gt;
|-&lt;br /&gt;
|BIT1	|| fast || R || Fast charging status (0=slow charging/no external power, 1=12V fast charging)||	-&lt;br /&gt;
|-&lt;br /&gt;
|BIT2	|| charge || R || Charge/discharge status (0=charging, 1=discharging) ||	-&lt;br /&gt;
|-&lt;br /&gt;
|BIT3	|| input_low	|| R || Input voltage low (0=normal, 1=low)	|| -&lt;br /&gt;
|-&lt;br /&gt;
|BIT4	|| output_low	|| R || 5V output low (0=normal, 1=low) ||	-&lt;br /&gt;
|-&lt;br /&gt;
|BIT5	|| battery_low	|| R || Battery voltage low (0=normal, 1=low)	 || -&lt;br /&gt;
|-&lt;br /&gt;
|BIT6	|| adc_mismatch	|| R || ADC mismatch (0=normal, 1=INA219 vs MCU sampling difference exceeded) || -&lt;br /&gt;
|-&lt;br /&gt;
|BIT7	|| battery_fail || R || Battery failure (0=normal, 1=failure) || -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Status Register SR2 (Address: 0x20)===&lt;br /&gt;
* Not Avaliable right now.&lt;br /&gt;
&lt;br /&gt;
===LED Control Register （Address: 0x35)===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit !!  Name !! Access !! Description !! Default Value    &lt;br /&gt;
|-&lt;br /&gt;
| BIT0	||	i2c_ack|| R/W || LED on during I2C communication || 1&lt;br /&gt;
|-&lt;br /&gt;
| BIT1	||	bat_charge || R/W || LED on during battery charging || 0&lt;br /&gt;
|-&lt;br /&gt;
| BIT2	||	bat_discharge || R/W || LED on during battery discharging || 0&lt;br /&gt;
|-&lt;br /&gt;
| BIT3	||	fault_report|| R/W || LED on when fault detected || 0&lt;br /&gt;
|-&lt;br /&gt;
| BIT4	||	ok_report|| R/W || LED on during normal operation || 0&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Special Notes===&lt;br /&gt;
* Data Format:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  Voltage/current values are unsigned integers&lt;br /&gt;
  battery_current is signed (two&#039;s complement format)&lt;br /&gt;
  temperature is signed 8-bit integer (two&#039;s complement), range: -40°C to +85°C&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Reserved Bits:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  All reserved bits default to 0&lt;br /&gt;
  Write operations to reserved bits are ignored (recommended to maintain default values)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* The register definitions in the bootloader state are not fully compatible.&lt;br /&gt;
===Getting Start===&lt;br /&gt;
* Assume that your Device Environment: Raspberry Pi 5, operating system: Raspberry Pi OS 64-bit (Bookworm).&lt;br /&gt;
* Assume that your Raspberry Pi 5 can access internet including GitHub. &lt;br /&gt;
* Assume that you have already assembled the UPS v6 with your Raspberry Pi 5 and booting up properly. &lt;br /&gt;
* Please refer to the following steps for operation:&lt;br /&gt;
====Install Dependencies package and libraries====&lt;br /&gt;
* Open a terminal and typing: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &lt;br /&gt;
sudo apt upgrade -y &lt;br /&gt;
sudo apt -y install build-essential cmake libi2c-dev libssl-dev gcc-arm-none-eabi git wget vim virtualenv i2c-tools&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Download Demo codes repository ===&lt;br /&gt;
* In order to use this module easily, I recommend you download the repository from GitHub, URL: [ https://github.com/geeekpi/upsv6_pub.git ] &lt;br /&gt;
* Download to Raspberry Pi 5 locally, you need to open a terminal and typing following commands:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/&lt;br /&gt;
git clone https://github.com/geeekpi/upsv6_pub.git &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
or just open a browser and access this URL: [ https://github.com/geeekpi/upsv6_pub.git ], click `code` -&amp;gt;  click `Download ZIP` and then extract the contents to your Raspberry Pi 5 on desktop. &lt;br /&gt;
[[File:Downloadrepo.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Upload new firmware=== &lt;br /&gt;
* Step 1. Enter into OTA mode &lt;br /&gt;
* Step 2. Upload new firmware_encrypted.bin file &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python enable_ota.py &lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Check if the UPS v6 has been entered into OTA mode: &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
i2cdetect -y 1 &lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
If the i2c device address is changed from 0x17 to 0x18 means UPS Gen 6 is already in OTA mode. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./user_write_tool firmware_encrypted.bin &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Until you see following figure: &lt;br /&gt;
[[File:Flash complete.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Push button status===&lt;br /&gt;
* Push button will keep the status after last operation.&lt;br /&gt;
&lt;br /&gt;
==How to read UPS status==&lt;br /&gt;
* Step 1. Download repository by using git command, open a terminal and typing following command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~&lt;br /&gt;
git clone https://github.com/geeekpi/upsv6_pub.git&lt;br /&gt;
cd upsv6_pub/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Step 2. Enable I2C function by using raspi-config command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo raspi-config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Navigate to 3 Interface Options -&amp;gt; I2C -&amp;gt; YES -&amp;gt; OK -&amp;gt; Finished&lt;br /&gt;
* Step 3. Execute Python script &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python script/tools/python_demo/read_device_basic_demo.py &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==How to calculate input and output power? ==&lt;br /&gt;
To calculate the input and output power using the values read from the registers, you need to follow these steps:&lt;br /&gt;
* Read the voltage and current values from the respective registers.&lt;br /&gt;
* Convert the voltage from millivolts (mV) to volts (V) by dividing by 1000.&lt;br /&gt;
* Convert the current from milliamperes (mA) to amperes (A) by dividing by 1000.&lt;br /&gt;
* Calculate the power using the formula:&lt;br /&gt;
  &amp;lt;pre&amp;gt;Power (W)=Voltage (V)×Current (A)&amp;lt;/pre&amp;gt;&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Here is the modified Python code that includes the calculation of input and output power:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from smbus2 import SMBus&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
# Device address&lt;br /&gt;
DEVICE_ADDRESS = 0x17&lt;br /&gt;
&lt;br /&gt;
# init SMBus&lt;br /&gt;
bus = SMBus(1)  # 1 means I2C no.1 bus&lt;br /&gt;
&lt;br /&gt;
# Define registers address&lt;br /&gt;
# WHO_AM_I_REG = 0x00 // will always be 0xA6&lt;br /&gt;
VERSION_REG = 0x01&lt;br /&gt;
UID0_REG = 0x02&lt;br /&gt;
UID1_REG = 0x06&lt;br /&gt;
UID2_REG = 0x0A&lt;br /&gt;
OUTPUT_VOLTAGE_REG = 0x0E&lt;br /&gt;
INPUT_VOLTAGE_REG = 0x10&lt;br /&gt;
BATTERY_VOLTAGE_REG = 0x12&lt;br /&gt;
MCU_VOLTAGE_REG = 0x14&lt;br /&gt;
OUTPUT_CURRENT_REG = 0x16&lt;br /&gt;
INPUT_CURRENT_REG = 0x18&lt;br /&gt;
BATTERY_CURRENT_REG = 0x1A&lt;br /&gt;
TEMPERATURE_REG = 0x1C&lt;br /&gt;
&lt;br /&gt;
# Define ANSI color&lt;br /&gt;
RED = &#039;\033[95m&#039;&lt;br /&gt;
GREEN = &#039;\033[92m&#039;&lt;br /&gt;
END_COLOR = &#039;\033[0m&#039;&lt;br /&gt;
&lt;br /&gt;
# read 8bit register&lt;br /&gt;
def read_byte_register(register_address):&lt;br /&gt;
    value = bus.read_byte_data(DEVICE_ADDRESS, register_address)&lt;br /&gt;
    if value &amp;gt; 127:&lt;br /&gt;
        value -= 256&lt;br /&gt;
    return value&lt;br /&gt;
&lt;br /&gt;
# read 16bit register&lt;br /&gt;
def read_word_register(register_address):&lt;br /&gt;
    value = bus.read_word_data(DEVICE_ADDRESS, register_address)&lt;br /&gt;
    if value &amp;gt; 32767:&lt;br /&gt;
        value -= 65536&lt;br /&gt;
    return value&lt;br /&gt;
&lt;br /&gt;
# read 32bit register&lt;br /&gt;
def read_dword_register(register_address):&lt;br /&gt;
    low = bus.read_word_data(DEVICE_ADDRESS, register_address)&lt;br /&gt;
    high = bus.read_word_data(DEVICE_ADDRESS, register_address + 2)&lt;br /&gt;
    return (high &amp;lt;&amp;lt; 16) | low&lt;br /&gt;
&lt;br /&gt;
# read all registers data&lt;br /&gt;
def read_all_registers():&lt;br /&gt;
    registers = {&lt;br /&gt;
        &amp;quot;WHO_AM_I&amp;quot;: &amp;quot;0xA6&amp;quot;,&lt;br /&gt;
        &amp;quot;VERSION&amp;quot;: read_byte_register(VERSION_REG),&lt;br /&gt;
        &amp;quot;UID0&amp;quot;: read_dword_register(UID0_REG),&lt;br /&gt;
        &amp;quot;UID1&amp;quot;: read_dword_register(UID1_REG),&lt;br /&gt;
        &amp;quot;UID2&amp;quot;: read_dword_register(UID2_REG),&lt;br /&gt;
        &amp;quot;OUTPUT_VOLTAGE&amp;quot;: read_word_register(OUTPUT_VOLTAGE_REG),&lt;br /&gt;
        &amp;quot;INPUT_VOLTAGE&amp;quot;: read_word_register(INPUT_VOLTAGE_REG),&lt;br /&gt;
        &amp;quot;BATTERY_VOLTAGE&amp;quot;: read_word_register(BATTERY_VOLTAGE_REG),&lt;br /&gt;
        &amp;quot;MCU_VOLTAGE&amp;quot;: read_word_register(MCU_VOLTAGE_REG),&lt;br /&gt;
        &amp;quot;OUTPUT_CURRENT&amp;quot;: read_word_register(OUTPUT_CURRENT_REG),&lt;br /&gt;
        &amp;quot;INPUT_CURRENT&amp;quot;: read_word_register(INPUT_CURRENT_REG),&lt;br /&gt;
        &amp;quot;BATTERY_CURRENT&amp;quot;: read_word_register(BATTERY_CURRENT_REG),&lt;br /&gt;
        &amp;quot;TEMPERATURE&amp;quot;: read_byte_register(TEMPERATURE_REG)&lt;br /&gt;
    }&lt;br /&gt;
    return registers&lt;br /&gt;
&lt;br /&gt;
# Calculate power&lt;br /&gt;
def calculate_power(voltage_mv, current_ma):&lt;br /&gt;
    # Convert mV to V and mA to A&lt;br /&gt;
    voltage_v = voltage_mv / 1000.0&lt;br /&gt;
    current_a = current_ma / 1000.0&lt;br /&gt;
    # Calculate power in watts&lt;br /&gt;
    power_w = voltage_v * current_a&lt;br /&gt;
    return power_w&lt;br /&gt;
&lt;br /&gt;
# read and print out all registers data.&lt;br /&gt;
try:&lt;br /&gt;
    while True:&lt;br /&gt;
        print(f&amp;quot;{RED}=== 52Pi UPS V6 Raw Data Output ==={END_COLOR}&amp;quot;)&lt;br /&gt;
        registers = read_all_registers()&lt;br /&gt;
        &lt;br /&gt;
        # Extract voltage and current values&lt;br /&gt;
        input_voltage_mv = registers[&amp;quot;INPUT_VOLTAGE&amp;quot;]&lt;br /&gt;
        input_current_ma = registers[&amp;quot;INPUT_CURRENT&amp;quot;]&lt;br /&gt;
        output_voltage_mv = registers[&amp;quot;OUTPUT_VOLTAGE&amp;quot;]&lt;br /&gt;
        output_current_ma = registers[&amp;quot;OUTPUT_CURRENT&amp;quot;]&lt;br /&gt;
        &lt;br /&gt;
        # Calculate input and output power&lt;br /&gt;
        input_power_w = calculate_power(input_voltage_mv, input_current_ma)&lt;br /&gt;
        output_power_w = calculate_power(output_voltage_mv, output_current_ma)&lt;br /&gt;
        &lt;br /&gt;
        # Print all register values&lt;br /&gt;
        for key, value in registers.items():&lt;br /&gt;
            if &amp;quot;VOLTAGE&amp;quot; in key:&lt;br /&gt;
                print(f&amp;quot;* {key}: {GREEN}{value}mV{END_COLOR} &amp;quot;)&lt;br /&gt;
            elif &amp;quot;CURRENT&amp;quot; in key:&lt;br /&gt;
                print(f&amp;quot;* {key}: {RED}{value}mA{END_COLOR} &amp;quot;)&lt;br /&gt;
            elif &amp;quot;TEMPERATURE&amp;quot; in key:&lt;br /&gt;
                print(f&amp;quot;* {key}: {GREEN}{value}C{END_COLOR} &amp;quot;)&lt;br /&gt;
            elif &amp;quot;WHO_AM_I&amp;quot; in key:&lt;br /&gt;
                print(f&amp;quot;* {key}: {value}&amp;quot;)&lt;br /&gt;
            else:&lt;br /&gt;
                print(f&amp;quot;* {key}: {value}&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        # Print calculated power values&lt;br /&gt;
        print(f&amp;quot;* INPUT_POWER: {GREEN}{input_power_w:.2f}W{END_COLOR}&amp;quot;)&lt;br /&gt;
        print(f&amp;quot;* OUTPUT_POWER: {RED}{output_power_w:.2f}W{END_COLOR}&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        print(&amp;quot;-&amp;quot;*80)&lt;br /&gt;
        print(&amp;quot; &amp;quot;*80)&lt;br /&gt;
        time.sleep(2)  # flush interval in 2 seconds&lt;br /&gt;
except KeyboardInterrupt:&lt;br /&gt;
    # Shutdown SMBus&lt;br /&gt;
    bus.close()&lt;br /&gt;
    print(&amp;quot;Quit Demo&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Save it and execute it by using :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python calculate_power.py &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You will see the result on ternimal:&lt;br /&gt;
[[File:Calculate power.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both&amp;quot;&amp;gt;&lt;br /&gt;
===Explanation of Power Calculation===&lt;br /&gt;
* Reading Voltage and Current:&lt;br /&gt;
The voltage and current values are read from the respective registers in millivolts (mV) and milliamperes (mA).&lt;br /&gt;
* Unit Conversion:&lt;br /&gt;
The voltage is converted from millivolts to volts by dividing by 1000. &amp;lt;br&amp;gt; &lt;br /&gt;
The current is converted from milliamperes to amperes by dividing by 1000.&lt;br /&gt;
* Power Calculation:&lt;br /&gt;
The power is calculated using the formula:&lt;br /&gt;
&amp;lt;pre&amp;gt; Power (W)=Voltage (V)×Current (A)&amp;lt;/pre&amp;gt;&lt;br /&gt;
This ensures that the power is correctly calculated in watts.&lt;br /&gt;
* Output:&lt;br /&gt;
The calculated input and output power values are printed in watts, formatted to two decimal places.&lt;br /&gt;
This code will continuously read the register values, calculate the input and output power, and print the results every 2 seconds.&lt;br /&gt;
&lt;br /&gt;
==How to send the UPS Gen 6&#039;s data to Home assistant==&lt;br /&gt;
===Modify the configuration on Home assistant===&lt;br /&gt;
* Please find the home assistant configuration.yaml file and adding following lines, In my case, I have use a docker container for my home assistant application.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo vim /opt/homeassistant/configuration.yaml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
adding:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Loads default set of integrations. Do not remove.&lt;br /&gt;
default_config:&lt;br /&gt;
&lt;br /&gt;
# Load frontend themes from the themes folder&lt;br /&gt;
frontend:&lt;br /&gt;
  themes: !include_dir_merge_named themes&lt;br /&gt;
&lt;br /&gt;
automation: !include automations.yaml&lt;br /&gt;
script: !include scripts.yaml&lt;br /&gt;
scene: !include scenes.yaml&lt;br /&gt;
&lt;br /&gt;
mqtt:&lt;br /&gt;
  sensor:&lt;br /&gt;
    - name: &amp;quot;OUTPUT_VOLTAGE&amp;quot;&lt;br /&gt;
      state_topic: &amp;quot;ups_status/OUTPUT_VOLTAGE&amp;quot;&lt;br /&gt;
      unit_of_measurement: &amp;quot;mV&amp;quot;&lt;br /&gt;
      value_template: &amp;quot;{{ value | int }}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    - name: &amp;quot;OUTPUT_CURRENT&amp;quot;&lt;br /&gt;
      state_topic: &amp;quot;ups_status/OUTPUT_CURRENT&amp;quot;&lt;br /&gt;
      unit_of_measurement: &amp;quot;mA&amp;quot;&lt;br /&gt;
      value_template: &amp;quot;{{ value | int }}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    - name: &amp;quot;INPUT_VOLTAGE&amp;quot;&lt;br /&gt;
      state_topic: &amp;quot;ups_status/INPUT_VOLTAGE&amp;quot;&lt;br /&gt;
      unit_of_measurement: &amp;quot;mV&amp;quot;&lt;br /&gt;
      value_template: &amp;quot;{{ value | int }}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    - name: &amp;quot;BATTERY_VOLTAGE&amp;quot;&lt;br /&gt;
      state_topic: &amp;quot;ups_status/BATTERY_VOLTAGE&amp;quot;&lt;br /&gt;
      unit_of_measurement: &amp;quot;mV&amp;quot;&lt;br /&gt;
      value_template: &amp;quot;{{ value | int }}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    - name: &amp;quot;MCU_VOLTAGE&amp;quot;&lt;br /&gt;
      state_topic: &amp;quot;ups_status/MCU_VOLTAGE&amp;quot;&lt;br /&gt;
      unit_of_measurement: &amp;quot;mV&amp;quot;&lt;br /&gt;
      value_template: &amp;quot;{{ value | int }}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    - name: &amp;quot;INPUT_CURRENT&amp;quot;&lt;br /&gt;
      state_topic: &amp;quot;ups_status/INPUT_CURRENT&amp;quot;&lt;br /&gt;
      unit_of_measurement: &amp;quot;mA&amp;quot;&lt;br /&gt;
      value_template: &amp;quot;{{ value | int }}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    - name: &amp;quot;BATTERY_CURRENT&amp;quot;&lt;br /&gt;
      state_topic: &amp;quot;ups_status/BATTERY_CURRENT&amp;quot;&lt;br /&gt;
      unit_of_measurement: &amp;quot;mA&amp;quot;&lt;br /&gt;
      value_template: &amp;quot;{{ value | int }}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    - name: &amp;quot;TEMPERATURE&amp;quot;&lt;br /&gt;
      state_topic: &amp;quot;ups_status/TEMPERATURE&amp;quot;&lt;br /&gt;
      unit_of_measurement: &amp;quot;C&amp;quot;&lt;br /&gt;
      value_template: &amp;quot;{{ value | int }}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Restart Home assistant docker &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo docker restart $(sudo docker ps -qa)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Create a python script on Raspberry Pi ===&lt;br /&gt;
* filename: send_data_to_mqtt.py， please install paho library first.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt -y install python3-paho-mqtt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
and then create a python script file and name it &#039;send_data_to_mqtt.py&#039; with following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from smbus2 import SMBus&lt;br /&gt;
import time&lt;br /&gt;
import paho.mqtt.client as mqtt&lt;br /&gt;
&lt;br /&gt;
# MQTT server configure&lt;br /&gt;
MQTT_BROKER = &amp;quot;192.168.3.218&amp;quot;   # Replace this IP address to your Raspberry Pi&#039;s IP address &lt;br /&gt;
MQTT_PORT = 1883                  &lt;br /&gt;
MQTT_USERNAME = &amp;quot;jacky&amp;quot;         # Replace it to your MQTT user&#039;s name &lt;br /&gt;
MQTT_PASSWORD = &amp;quot;mypassword&amp;quot;    # Replace it to your MQTT user&#039;s password &lt;br /&gt;
MQTT_TOPIC = &amp;quot;ups_status&amp;quot;       # define a MQTT topic &lt;br /&gt;
&lt;br /&gt;
# Device address&lt;br /&gt;
DEVICE_ADDRESS = 0x17&lt;br /&gt;
&lt;br /&gt;
# init SMBus&lt;br /&gt;
bus = SMBus(1)  # 1 means I2C no.1 bus&lt;br /&gt;
&lt;br /&gt;
# init mqtt client&lt;br /&gt;
mqtt_client = mqtt.Client()&lt;br /&gt;
mqtt_client.username_pw_set(MQTT_USERNAME, password=MQTT_PASSWORD)&lt;br /&gt;
&lt;br /&gt;
# connect to mqtt server&lt;br /&gt;
def connect_mqtt():&lt;br /&gt;
    try:&lt;br /&gt;
        mqtt_client.connect(MQTT_BROKER, MQTT_PORT, 60)&lt;br /&gt;
        print(f&amp;quot;{GREEN}Connected to MQTT Broker at {MQTT_BROKER}:{MQTT_PORT}{END_COLOR}&amp;quot;)&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        print(f&amp;quot;{RED}Failed to connect to MQTT Broker: {e}{END_COLOR}&amp;quot;)&lt;br /&gt;
        exit(1)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Define registers address&lt;br /&gt;
# WHO_AM_I_REG = 0x00 // will always be 0xA6&lt;br /&gt;
VERSION_REG = 0x01&lt;br /&gt;
UID0_REG = 0x02&lt;br /&gt;
UID1_REG = 0x06&lt;br /&gt;
UID2_REG = 0x0A&lt;br /&gt;
OUTPUT_VOLTAGE_REG = 0x0E&lt;br /&gt;
INPUT_VOLTAGE_REG = 0x10&lt;br /&gt;
BATTERY_VOLTAGE_REG = 0x12&lt;br /&gt;
MCU_VOLTAGE_REG = 0x14&lt;br /&gt;
OUTPUT_CURRENT_REG = 0x16&lt;br /&gt;
INPUT_CURRENT_REG = 0x18&lt;br /&gt;
BATTERY_CURRENT_REG = 0x1A&lt;br /&gt;
TEMPERATURE_REG = 0x1C&lt;br /&gt;
&lt;br /&gt;
# Define ANSI color&lt;br /&gt;
RED = &#039;\033[95m&#039;&lt;br /&gt;
GREEN = &#039;\033[92m&#039;&lt;br /&gt;
END_COLOR = &#039;\033[0m&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# read 8bit register&lt;br /&gt;
def read_byte_register(register_address):&lt;br /&gt;
    value = bus.read_byte_data(DEVICE_ADDRESS, register_address)&lt;br /&gt;
    if value &amp;gt; 127:&lt;br /&gt;
        value -= 256&lt;br /&gt;
    return value&lt;br /&gt;
&lt;br /&gt;
# read 16bit register&lt;br /&gt;
def read_word_register(register_address):&lt;br /&gt;
    value = bus.read_word_data(DEVICE_ADDRESS, register_address)&lt;br /&gt;
    if value &amp;gt; 32767:&lt;br /&gt;
        value -= 65536&lt;br /&gt;
    return value&lt;br /&gt;
&lt;br /&gt;
# read 32bit register&lt;br /&gt;
def read_dword_register(register_address):&lt;br /&gt;
    low = bus.read_word_data(DEVICE_ADDRESS, register_address)&lt;br /&gt;
    high = bus.read_word_data(DEVICE_ADDRESS, register_address + 2)&lt;br /&gt;
    return (high &amp;lt;&amp;lt; 16) | low&lt;br /&gt;
&lt;br /&gt;
# read all registers data&lt;br /&gt;
def read_all_registers():&lt;br /&gt;
    registers = {&lt;br /&gt;
        &amp;quot;WHO_AM_I&amp;quot;: &amp;quot;0xA6&amp;quot;,&lt;br /&gt;
        &amp;quot;VERSION&amp;quot;: read_byte_register(VERSION_REG),&lt;br /&gt;
        &amp;quot;UID0&amp;quot;: read_dword_register(UID0_REG),&lt;br /&gt;
        &amp;quot;UID1&amp;quot;: read_dword_register(UID1_REG),&lt;br /&gt;
        &amp;quot;UID2&amp;quot;: read_dword_register(UID2_REG),&lt;br /&gt;
        &amp;quot;OUTPUT_VOLTAGE&amp;quot;: read_word_register(OUTPUT_VOLTAGE_REG),&lt;br /&gt;
        &amp;quot;INPUT_VOLTAGE&amp;quot;: read_word_register(INPUT_VOLTAGE_REG),&lt;br /&gt;
        &amp;quot;BATTERY_VOLTAGE&amp;quot;: read_word_register(BATTERY_VOLTAGE_REG),&lt;br /&gt;
        &amp;quot;MCU_VOLTAGE&amp;quot;: read_word_register(MCU_VOLTAGE_REG),&lt;br /&gt;
        &amp;quot;OUTPUT_CURRENT&amp;quot;: read_word_register(OUTPUT_CURRENT_REG),&lt;br /&gt;
        &amp;quot;INPUT_CURRENT&amp;quot;: read_word_register(INPUT_CURRENT_REG),&lt;br /&gt;
        &amp;quot;BATTERY_CURRENT&amp;quot;: read_word_register(BATTERY_CURRENT_REG),&lt;br /&gt;
        &amp;quot;TEMPERATURE&amp;quot;: read_byte_register(TEMPERATURE_REG)&lt;br /&gt;
    }&lt;br /&gt;
    return registers&lt;br /&gt;
&lt;br /&gt;
# send data to MQTT server&lt;br /&gt;
def send_data_to_mqtt(data):&lt;br /&gt;
    try:&lt;br /&gt;
        for key, value in data.items():&lt;br /&gt;
            if key in [&amp;quot;OUTPUT_VOLTAGE&amp;quot;, &amp;quot;INPUT_VOLTAGE&amp;quot;, &amp;quot;BATTERY_VOLTAGE&amp;quot;, &amp;quot;MCU_VOLTAGE&amp;quot;]:&lt;br /&gt;
                mqtt_client.publish(f&amp;quot;{MQTT_TOPIC}/{key}&amp;quot;, value)&lt;br /&gt;
            elif key in [&amp;quot;OUTPUT_CURRENT&amp;quot;, &amp;quot;INPUT_CURRENT&amp;quot;, &amp;quot;BATTERY_CURRENT&amp;quot;]:&lt;br /&gt;
                mqtt_client.publish(f&amp;quot;{MQTT_TOPIC}/{key}&amp;quot;, value)&lt;br /&gt;
            elif key == &amp;quot;TEMPERATURE&amp;quot;:&lt;br /&gt;
                mqtt_client.publish(f&amp;quot;{MQTT_TOPIC}/{key}&amp;quot;, value)&lt;br /&gt;
        print(f&amp;quot;{GREEN}Data sent to MQTT topic {MQTT_TOPIC}:{data}{END_COLOR}&amp;quot;)&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        print(f&amp;quot;{RED}Failed to send data to MQTT broker:{e}{END_COLOR}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# main loop&lt;br /&gt;
def main():&lt;br /&gt;
    connect_mqtt()&lt;br /&gt;
    mqtt_client.loop_start()  # start mqtt loop&lt;br /&gt;
    try:&lt;br /&gt;
        while True:&lt;br /&gt;
            print(f&amp;quot;{RED}===52Pi UPS v6 Raw data output ==={END_COLOR}&amp;quot;)&lt;br /&gt;
            registers = read_all_registers()&lt;br /&gt;
            send_data_to_mqtt(registers)&lt;br /&gt;
            time.sleep(2)&lt;br /&gt;
    except KeyboardInterrupt:&lt;br /&gt;
        bus.close()&lt;br /&gt;
        mqtt_client.loop_stop()&lt;br /&gt;
        mqtt_client.disconnect()&lt;br /&gt;
        print(&amp;quot;Quit Demo&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
and then execute the python script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python send_data_to_mqtt.py &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:Send data to mqtt.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Adding Card in Home assistant&lt;br /&gt;
[[File:Adding card to HA.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Finally result&lt;br /&gt;
[[File:Result of ha.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to monitor battery and safe shutdown ==&lt;br /&gt;
Here is the modified code, rewritten as a systemd service to monitor only the battery voltage and current. &lt;br /&gt;
When the battery voltage drops below 7400mV, it triggers a shutdown operation. &lt;br /&gt;
The monitoring interval is set to check every 2 minutes.&lt;br /&gt;
* Python Code (demo) &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/env python3&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
This script monitors the battery voltage and current of a 52Pi UPS V6 device.&lt;br /&gt;
If the battery voltage drops below 7400mV, it triggers a shutdown process.&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
from smbus2 import SMBus&lt;br /&gt;
import time&lt;br /&gt;
import subprocess&lt;br /&gt;
import logging&lt;br /&gt;
&lt;br /&gt;
#define log file path&lt;br /&gt;
LOG_FILE = &amp;quot;/var/log/battery_monitor.log&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# configure logging settings&lt;br /&gt;
logging.basicConfig(filename=LOG_FILE, level=logging.INFO, format=&#039;%(asctime)s - %(message)s&#039;)&lt;br /&gt;
&lt;br /&gt;
# Device address&lt;br /&gt;
DEVICE_ADDRESS = 0x17&lt;br /&gt;
&lt;br /&gt;
# Define registers address&lt;br /&gt;
BATTERY_VOLTAGE_REG = 0x12&lt;br /&gt;
BATTERY_CURRENT_REG = 0x1A&lt;br /&gt;
&lt;br /&gt;
# Threshold for battery voltage&lt;br /&gt;
BATTERY_VOLTAGE_THRESHOLD = 7400  # in mV&lt;br /&gt;
&lt;br /&gt;
# Shutdown command&lt;br /&gt;
SHUTDOWN_COMMAND = &amp;quot;sudo sync ; sudo init 0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Initialize SMBus&lt;br /&gt;
bus = SMBus(1)  # 1 means I2C no.1 bus&lt;br /&gt;
&lt;br /&gt;
# Read 16-bit register&lt;br /&gt;
def read_word_register(register_address):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Read a 16-bit register from the device.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    value = bus.read_word_data(DEVICE_ADDRESS, register_address)&lt;br /&gt;
    if value &amp;gt; 32767:&lt;br /&gt;
        value -= 65536&lt;br /&gt;
    return value&lt;br /&gt;
&lt;br /&gt;
# Read battery voltage and current&lt;br /&gt;
def read_battery_status():&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Read the battery voltage and current from the device.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    battery_voltage = read_word_register(BATTERY_VOLTAGE_REG)&lt;br /&gt;
    battery_current = read_word_register(BATTERY_CURRENT_REG)&lt;br /&gt;
    return battery_voltage, battery_current&lt;br /&gt;
&lt;br /&gt;
# Check battery status and trigger shutdown if necessary&lt;br /&gt;
def check_battery_status():&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Check the battery status and trigger shutdown if the voltage is below the threshold.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    battery_voltage, battery_current = read_battery_status()&lt;br /&gt;
    logging.info(f&amp;quot;Battery Voltage: {battery_voltage}mV, Current: {battery_current}mA.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    if battery_voltage &amp;lt; BATTERY_VOLTAGE_THRESHOLD:&lt;br /&gt;
        logging.info(f&amp;quot;Battery voltage is below {BATTERY_VOLTAGE_THRESHOLD}mV. Initiating shutdown.&amp;quot;)&lt;br /&gt;
        logging.info(f&amp;quot;Battery voltage is below {BATTERY_VOLTAGE_THRESHOLD}mV. Initiating shutdown.&amp;quot;)&lt;br /&gt;
        subprocess.run(SHUTDOWN_COMMAND, shell=True)&lt;br /&gt;
&lt;br /&gt;
# Main loop&lt;br /&gt;
def main():&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Main loop to periodically check the battery status.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    try:&lt;br /&gt;
        while True:&lt;br /&gt;
            check_battery_status()&lt;br /&gt;
            time.sleep(120)  # Check every 2 minutes&lt;br /&gt;
    except KeyboardInterrupt:&lt;br /&gt;
        print(&amp;quot;Exiting battery monitor script.&amp;quot;)&lt;br /&gt;
    finally:&lt;br /&gt;
        bus.close()&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Please save it and name it as &#039;battery_monitory.py&#039; and put it to your own location. in this case, the file location is `/home/pi/upsv6_pub/script/tools/python_demo/battery_monitor.py`. &lt;br /&gt;
===Code Explanation===&lt;br /&gt;
* Optimization:&lt;br /&gt;
   - Removed unnecessary `read_byte_register` and `read_dword_register` functions, as only the battery voltage and current are monitored, both of which are 16-bit registers.&lt;br /&gt;
   - Removed the redundant `read_all_registers` function and directly read the battery voltage and current in `check_battery_status`.&lt;br /&gt;
   - Removed excess print statements, retaining only those for battery voltage and current.&lt;br /&gt;
&lt;br /&gt;
* Monitoring Logic:&lt;br /&gt;
   - Checks the battery voltage and current every 2 minutes.&lt;br /&gt;
   - If the battery voltage falls below 7400mV, it calls `subprocess.run` to execute the shutdown command.&lt;br /&gt;
&lt;br /&gt;
* Comments:&lt;br /&gt;
   - Added detailed English comments to explain the purpose of each function and the main logic.&lt;br /&gt;
&lt;br /&gt;
===Creating a systemd Service===&lt;br /&gt;
To run this script as a systemd service, you need to create a systemd service file.&lt;br /&gt;
&lt;br /&gt;
* Create the Service File:&lt;br /&gt;
   Create a service file in the `/etc/systemd/system/` directory, for example, `battery_monitor.service`.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   sudo nano /etc/systemd/system/battery_monitor.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Edit the Service File:&lt;br /&gt;
   Add the following content to the file:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   [Unit]&lt;br /&gt;
   Description=Battery Monitor Service&lt;br /&gt;
   After=network.target&lt;br /&gt;
&lt;br /&gt;
   [Service]&lt;br /&gt;
   ExecStart=/usr/bin/python3 /path/to/your/script/battery_monitor.py   # Do remember replace this path to your own battery_monitor.py file&#039;s location. &lt;br /&gt;
   Restart=always&lt;br /&gt;
   User=pi&lt;br /&gt;
&lt;br /&gt;
   [Install]&lt;br /&gt;
   WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
   - `ExecStart` specifies the path to the script.&lt;br /&gt;
   - `Restart=always` ensures the service restarts automatically if it fails.&lt;br /&gt;
   - `User=pi` specifies that the script runs as the `pi` user.&lt;br /&gt;
===Create log file and grant permissions===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo touch /var/log/battery_monitor.log&lt;br /&gt;
sudo chown pi:pi /var/log/battery_monitor.log&lt;br /&gt;
sudo chmod 664 /var/log/battery_monitor.log&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
===Start the Service===&lt;br /&gt;
   After saving the file, run the following commands to start the service and enable it to start on boot:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   sudo systemctl daemon-reload&lt;br /&gt;
   sudo systemctl enable battery_monitor.service&lt;br /&gt;
   sudo systemctl start battery_monitor.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Check Service Status===&lt;br /&gt;
   Use the following command to check the service status:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   sudo systemctl status battery_monitor.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With this setup, the script will run as a systemd service, checking the battery voltage and current every 2 minutes and triggering a shutdown operation when the voltage falls below 7400mV.&lt;br /&gt;
&lt;br /&gt;
===How to plot the power status by using matplotlib===&lt;br /&gt;
Here is the detailed step-by-step guide and code example in English to create a real-time dynamic plot using matplotlib to display input and output power.&lt;br /&gt;
* Step 1: Install Necessary Libraries&lt;br /&gt;
Ensure you have the smbus2 and matplotlib libraries installed. If not, you can install them using the following command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &lt;br /&gt;
sudo apt -y install python3-smbus2 python3-matplotlib python3-numpy &lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Step 2: Write the Code&lt;br /&gt;
Here is the complete code example that reads input and output power in real-time and uses matplotlib to dynamically display these values.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from smbus2 import SMBus&lt;br /&gt;
import time&lt;br /&gt;
import matplotlib.pyplot as plt&lt;br /&gt;
import matplotlib.animation as animation&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
# Device address&lt;br /&gt;
DEVICE_ADDRESS = 0x17&lt;br /&gt;
&lt;br /&gt;
# Define registers address&lt;br /&gt;
VERSION_REG = 0x01&lt;br /&gt;
OUTPUT_VOLTAGE_REG = 0x0E&lt;br /&gt;
INPUT_VOLTAGE_REG = 0x10&lt;br /&gt;
OUTPUT_CURRENT_REG = 0x16&lt;br /&gt;
INPUT_CURRENT_REG = 0x18&lt;br /&gt;
&lt;br /&gt;
# Initialize SMBus&lt;br /&gt;
bus = SMBus(1)  # 1 means I2C no.1 bus&lt;br /&gt;
&lt;br /&gt;
# Read 16-bit register&lt;br /&gt;
def read_word_register(register_address):&lt;br /&gt;
    value = bus.read_word_data(DEVICE_ADDRESS, register_address)&lt;br /&gt;
    if value &amp;gt; 32767:&lt;br /&gt;
        value -= 65536&lt;br /&gt;
    return value&lt;br /&gt;
&lt;br /&gt;
# Calculate power&lt;br /&gt;
def calculate_power(voltage_mv, current_ma):&lt;br /&gt;
    voltage_v = voltage_mv / 1000.0&lt;br /&gt;
    current_a = current_ma / 1000.0&lt;br /&gt;
    return voltage_v * current_a  # Result in watts&lt;br /&gt;
&lt;br /&gt;
# Initialize lists to store data&lt;br /&gt;
input_power_data = []&lt;br /&gt;
output_power_data = []&lt;br /&gt;
time_data = []&lt;br /&gt;
&lt;br /&gt;
# Initialize time&lt;br /&gt;
start_time = time.time()&lt;br /&gt;
&lt;br /&gt;
# Function to update the plot&lt;br /&gt;
def update(frame):&lt;br /&gt;
    global start_time&lt;br /&gt;
&lt;br /&gt;
    # Read voltage and current values&lt;br /&gt;
    input_voltage_mv = read_word_register(INPUT_VOLTAGE_REG)&lt;br /&gt;
    input_current_ma = read_word_register(INPUT_CURRENT_REG)&lt;br /&gt;
    output_voltage_mv = read_word_register(OUTPUT_VOLTAGE_REG)&lt;br /&gt;
    output_current_ma = read_word_register(OUTPUT_CURRENT_REG)&lt;br /&gt;
&lt;br /&gt;
    # Calculate input and output power&lt;br /&gt;
    input_power_w = calculate_power(input_voltage_mv, input_current_ma)&lt;br /&gt;
    output_power_w = calculate_power(output_voltage_mv, output_current_ma)&lt;br /&gt;
&lt;br /&gt;
    # Append data&lt;br /&gt;
    current_time = time.time() - start_time&lt;br /&gt;
    time_data.append(current_time)&lt;br /&gt;
    input_power_data.append(input_power_w)&lt;br /&gt;
    output_power_data.append(output_power_w)&lt;br /&gt;
&lt;br /&gt;
    # Limit the data to the last 100 points&lt;br /&gt;
    if len(time_data) &amp;gt; 100:&lt;br /&gt;
        time_data.pop(0)&lt;br /&gt;
        input_power_data.pop(0)&lt;br /&gt;
        output_power_data.pop(0)&lt;br /&gt;
&lt;br /&gt;
    # Clear the previous plot&lt;br /&gt;
    ax.clear()&lt;br /&gt;
&lt;br /&gt;
    # Plot input power&lt;br /&gt;
    ax.plot(time_data, input_power_data, label=&#039;Input Power (W)&#039;, color=&#039;blue&#039;)&lt;br /&gt;
    ax.set_ylabel(&#039;Power (W)&#039;)&lt;br /&gt;
    ax.set_xlabel(&#039;Time (s)&#039;)&lt;br /&gt;
    ax.legend(loc=&#039;upper left&#039;)&lt;br /&gt;
&lt;br /&gt;
    # Plot output power&lt;br /&gt;
    ax.plot(time_data, output_power_data, label=&#039;Output Power (W)&#039;, color=&#039;red&#039;)&lt;br /&gt;
    ax.legend(loc=&#039;upper left&#039;)&lt;br /&gt;
&lt;br /&gt;
    # Set title&lt;br /&gt;
    ax.set_title(&#039;Real-time Input and Output Power&#039;)&lt;br /&gt;
&lt;br /&gt;
# Create a figure and axis&lt;br /&gt;
fig, ax = plt.subplots()&lt;br /&gt;
&lt;br /&gt;
# Create the animation&lt;br /&gt;
ani = animation.FuncAnimation(fig, update, interval=2000)  # Update every 2 seconds&lt;br /&gt;
&lt;br /&gt;
# Show the plot&lt;br /&gt;
plt.show()&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Save it as `plot_power.py`, or just find it in the repository of `upsv6_pub` on GitHub.  &lt;br /&gt;
* Execute it: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python plot_power.py &lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
It will plot the input and output power status in animation. &lt;br /&gt;
[[File:Plot power.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Explanation of the Code===&lt;br /&gt;
* Initialize SMBus and Register Addresses:&lt;br /&gt;
The smbus2 library is used to initialize the I2C bus, and the register addresses for reading voltage and current values are defined.&lt;br /&gt;
* Read Register Values:&lt;br /&gt;
The read_word_register function reads 16-bit values from the specified registers.&lt;br /&gt;
* Calculate Power:&lt;br /&gt;
The calculate_power function converts millivolts (mV) to volts (V) and milliamperes (mA) to amperes (A), then calculates the power in watts.&lt;br /&gt;
* Store Data:&lt;br /&gt;
Lists input_power_data, output_power_data, and time_data are used to store the power values and corresponding time stamps.&lt;br /&gt;
* Dynamic Plot Update:&lt;br /&gt;
The matplotlib.animation.FuncAnimation function is used to create a dynamic plot that updates every 2 seconds.&lt;br /&gt;
The update function reads the latest power values, appends them to the data lists, and updates the plot.&lt;br /&gt;
* Limit Data Points:&lt;br /&gt;
To prevent performance issues with too much data, the lists are limited to the last 100 data points.&lt;br /&gt;
* Display the Plot:&lt;br /&gt;
The plot is displayed using plt.show(), showing real-time updates of input and output power.&lt;br /&gt;
* Running the Code&lt;br /&gt;
When you run the code, you will see a dynamic plot that updates every 2 seconds, showing the real-time changes in input and output power. The plot will display the last 100 data points for both input and output power.&lt;br /&gt;
* If external power is failed, you will see some picture like this:&lt;br /&gt;
[[File:Plot power01.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===How to plot input and output power by using pygame===&lt;br /&gt;
* Create a python file named: `plot_power_pygame.py` &lt;br /&gt;
&amp;lt;pre&amp;gt; vim plot_power_pygame.py &amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
* Copy and paste following demo code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import pygame&lt;br /&gt;
import sys&lt;br /&gt;
from smbus2 import SMBus&lt;br /&gt;
import math&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
# Device address&lt;br /&gt;
DEVICE_ADDRESS = 0x17&lt;br /&gt;
&lt;br /&gt;
# Define registers address&lt;br /&gt;
VERSION_REG = 0x01&lt;br /&gt;
OUTPUT_VOLTAGE_REG = 0x0E&lt;br /&gt;
INPUT_VOLTAGE_REG = 0x10&lt;br /&gt;
OUTPUT_CURRENT_REG = 0x16&lt;br /&gt;
INPUT_CURRENT_REG = 0x18&lt;br /&gt;
&lt;br /&gt;
# Initialize SMBus&lt;br /&gt;
bus = SMBus(1)  # 1 means I2C no.1 bus&lt;br /&gt;
&lt;br /&gt;
# Read 16-bit register&lt;br /&gt;
def read_word_register(register_address):&lt;br /&gt;
    value = bus.read_word_data(DEVICE_ADDRESS, register_address)&lt;br /&gt;
    if value &amp;gt; 32767:&lt;br /&gt;
        value -= 65536&lt;br /&gt;
    return value&lt;br /&gt;
&lt;br /&gt;
# Calculate power&lt;br /&gt;
def calculate_power(voltage_mv, current_ma):&lt;br /&gt;
    voltage_v = voltage_mv / 1000.0&lt;br /&gt;
    current_a = current_ma / 1000.0&lt;br /&gt;
    return voltage_v * current_a  # Result in watts&lt;br /&gt;
&lt;br /&gt;
# Initialize Pygame&lt;br /&gt;
pygame.init()&lt;br /&gt;
&lt;br /&gt;
# Set up the display&lt;br /&gt;
screen = pygame.display.set_mode((800, 400))&lt;br /&gt;
pygame.display.set_caption(&amp;quot;Power Gauges&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Define colors&lt;br /&gt;
BLACK = (0, 0, 0)&lt;br /&gt;
CYAN = (0, 255, 255)&lt;br /&gt;
RED = (255, 0, 0)&lt;br /&gt;
&lt;br /&gt;
# Draw the gauge background&lt;br /&gt;
def draw_gauge_background(x_offset, title):&lt;br /&gt;
    pygame.draw.circle(screen, CYAN, (200 + x_offset, 200), 130, 2)&lt;br /&gt;
    max_power = 30  # Maximum power is 30W for the gauge&lt;br /&gt;
    num_ticks = int(max_power / 0.5)  # Number of ticks&lt;br /&gt;
    for i in range(num_ticks + 1):&lt;br /&gt;
        angle = math.radians(270 - (i / num_ticks * 180))  # 0 point at the bottom&lt;br /&gt;
        x1 = 200 + 120 * math.cos(angle) + x_offset&lt;br /&gt;
        y1 = 200 + 120 * math.sin(angle)&lt;br /&gt;
        x2 = 200 + 124 * math.cos(angle) + x_offset&lt;br /&gt;
        y2 = 200 + 124 * math.sin(angle)&lt;br /&gt;
        pygame.draw.line(screen, CYAN, (x1, y1), (x2, y2), 1)&lt;br /&gt;
        if i % 5 == 0:  # Only display every 5th tick&lt;br /&gt;
            font = pygame.font.SysFont(None, 16)&lt;br /&gt;
            img = font.render(f&amp;quot;{i * 0.5:.1f}&amp;quot;, True, CYAN)&lt;br /&gt;
            text_width, text_height = font.size(f&amp;quot;{i * 0.5:.1f}&amp;quot;)&lt;br /&gt;
            text_x = 200 + (135 + 3) * math.cos(angle) + x_offset - text_width / 2&lt;br /&gt;
            text_y = 200 + (135 + 3) * math.sin(angle) - text_height / 2&lt;br /&gt;
            screen.blit(img, (text_x, text_y))&lt;br /&gt;
&lt;br /&gt;
    # Draw title&lt;br /&gt;
    font = pygame.font.SysFont(None, 24)&lt;br /&gt;
    img = font.render(title, True, CYAN)&lt;br /&gt;
    screen.blit(img, (200 + x_offset - img.get_width() / 2, 10))&lt;br /&gt;
&lt;br /&gt;
# Draw the needle&lt;br /&gt;
def draw_needle(x_offset, power):&lt;br /&gt;
    max_power = 30  # Maximum power is 100W for the gauge&lt;br /&gt;
    angle = 270 - (power / max_power * 180)  # 0 point at the bottom&lt;br /&gt;
    angle_rad = math.radians(angle)&lt;br /&gt;
    x = 200 + 120 * math.cos(angle_rad) + x_offset&lt;br /&gt;
    y = 200 + 120 * math.sin(angle_rad)&lt;br /&gt;
    pygame.draw.line(screen, RED, (200 + x_offset, 200), (x, y), 2)&lt;br /&gt;
&lt;br /&gt;
# Main loop&lt;br /&gt;
def main():&lt;br /&gt;
    clock = pygame.time.Clock()&lt;br /&gt;
    while True:&lt;br /&gt;
        for event in pygame.event.get():&lt;br /&gt;
            if event.type == pygame.QUIT:&lt;br /&gt;
                pygame.quit()&lt;br /&gt;
                sys.exit()&lt;br /&gt;
&lt;br /&gt;
        # Read power values&lt;br /&gt;
        input_voltage_mv = read_word_register(INPUT_VOLTAGE_REG)&lt;br /&gt;
        input_current_ma = read_word_register(INPUT_CURRENT_REG)&lt;br /&gt;
        input_power_w = calculate_power(input_voltage_mv, input_current_ma)&lt;br /&gt;
&lt;br /&gt;
        output_voltage_mv = read_word_register(OUTPUT_VOLTAGE_REG)&lt;br /&gt;
        output_current_ma = read_word_register(OUTPUT_CURRENT_REG)&lt;br /&gt;
        output_power_w = calculate_power(output_voltage_mv, output_current_ma)&lt;br /&gt;
&lt;br /&gt;
        # Update the gauges&lt;br /&gt;
        screen.fill(BLACK)&lt;br /&gt;
        draw_gauge_background(0, &amp;quot;INPUT&amp;quot;)&lt;br /&gt;
        draw_gauge_background(400, &amp;quot;OUTPUT&amp;quot;)&lt;br /&gt;
        draw_needle(0, input_power_w)&lt;br /&gt;
        draw_needle(400, output_power_w)&lt;br /&gt;
        pygame.display.flip()&lt;br /&gt;
        clock.tick(0.5)  # Update every 2 seconds&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Save it and execute it.&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
python plot_power_pygame.py &lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
===Demostration===&lt;br /&gt;
* Gaugue Figure &lt;br /&gt;
[[File:Plot power pygame.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt; &lt;br /&gt;
===Explaination of demo code===&lt;br /&gt;
* Implementation Explanation&lt;br /&gt;
This code is designed to create a graphical user interface (GUI) using Pygame to display power gauges for input and output power readings from a device connected via I2C. &lt;br /&gt;
The gauges are represented as circular meters with needles that move based on the power values read from the device. &lt;br /&gt;
The code also includes titles for each gauge (&amp;quot;INPUT&amp;quot; and &amp;quot;OUTPUT&amp;quot;) and evenly spaced tick marks with numerical labels.&lt;br /&gt;
====Key Components and Logic====&lt;br /&gt;
* I2C Communication: The code uses the smbus2 library to communicate with an I2C device at address 0x17. Functions like read_word_register are used to read 16-bit values from specific registers on the device, which correspond to input and output voltage and current readings.&lt;br /&gt;
* Power Calculation: The calculate_power function converts the raw voltage and current readings from millivolts and milliamps to volts and amps, respectively, and then calculates the power in watts.&lt;br /&gt;
* Pygame Initialization: Pygame is initialized to create a window with a size of 800x400 pixels. Colors for the background, tick marks, and needle are defined.&lt;br /&gt;
* Gauge Background Drawing:&lt;br /&gt;
The draw_gauge_background function draws the circular gauge, including:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1. A circle representing the gauge outline.&lt;br /&gt;
2. Tick marks spaced evenly around the gauge. The tick marks are spaced based on a maximum power value of 30W, with each tick representing 0.5W.&lt;br /&gt;
3. Numerical labels for every 5th tick mark, positioned slightly outside the gauge to avoid overlap.&lt;br /&gt;
4. A title (&amp;quot;INPUT&amp;quot; or &amp;quot;OUTPUT&amp;quot;) displayed above each gauge.&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
* Needle Drawing: The draw_needle function calculates the angle of the needle based on the power value and draws it on the gauge. The angle is adjusted so that 0W corresponds to the bottom of the gauge.&lt;br /&gt;
* Main Loop: The main function contains the main loop of the program:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1. It reads the power values from the I2C device.&lt;br /&gt;
2. It updates the gauges by clearing the screen, redrawing the gauge backgrounds, and drawing the needles based on the current power values.&lt;br /&gt;
3. It updates the display and limits the refresh rate to once every 2 seconds.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Features and Enhancements===&lt;br /&gt;
* Tick Marks and Labels: The tick marks are evenly spaced around the gauge, and labels are added to indicate power values in watts. The labels are positioned slightly outside the gauge to ensure they are readable.&lt;br /&gt;
* Titles: Each gauge has a title (&amp;quot;INPUT&amp;quot; and &amp;quot;OUTPUT&amp;quot;) to distinguish between the two power readings.&lt;br /&gt;
* Needle Positioning: The needle&#039;s position is calculated based on the power value, with 0W starting at the bottom of the gauge and increasing clockwise.&lt;br /&gt;
* This implementation provides a clear and visually intuitive way to monitor input and output power readings from an I2C device in real-time.&lt;br /&gt;
==Model and Structure file download==&lt;br /&gt;
* STEP File: [[  File:UPS Gen6 STEP file.zip ]]&lt;br /&gt;
* STP structure File: [[ File:UPS Gen6 STP StructureFile.zip ]]&lt;br /&gt;
===More information===&lt;br /&gt;
* Please visit: [ https://github.com/geeekpi/upsv6_pub/ ]&lt;/div&gt;</summary>
		<author><name>Yoyojacky</name></author>
	</entry>
</feed>