<?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=TaterLi</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=TaterLi"/>
	<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=Special:Contributions/TaterLi"/>
	<updated>2026-11-04T21:56:45Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.2</generator>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=Main_Page&amp;diff=16277</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=Main_Page&amp;diff=16277"/>
		<updated>2026-03-30T07:31:37Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: &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;
&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 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-0117 ]]&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;
* [[ 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;
* [[ 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;
&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-0243 ]] &lt;br /&gt;
* [[ EP-0246 ]]&lt;br /&gt;
* [[ EP-0247 ]]&lt;br /&gt;
* [[ EP-0225 ]]&lt;br /&gt;
* [[ EP-0215 ]]&lt;br /&gt;
* [[ EP-0214 ]]&lt;br /&gt;
* [[ EP-0171 ]]&lt;br /&gt;
* [[ D-0001 ]]&lt;br /&gt;
* [[ EZ-0106 ]]&lt;br /&gt;
* [[ EP-0153 ]]&lt;br /&gt;
* [[ EP-0150 ]]&lt;br /&gt;
* [[ EP-0146 ]]&lt;br /&gt;
* [[ EP-0149 ]]&lt;br /&gt;
* [[ P-0021 ]]&lt;br /&gt;
* [[ P-0024 ]]&lt;br /&gt;
* [[ EP-0142 ]] &lt;br /&gt;
* [[ EP-0141 ]]&lt;br /&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;
* [[ EP-0136 ]]&lt;br /&gt;
* [[ EP-0131 ]]&lt;br /&gt;
* [[ EP-0130 ]]&lt;br /&gt;
* [[ D-0020 ]]&lt;br /&gt;
* [[ ER-0014 ]]&lt;br /&gt;
* [[ EP-0129 ]]&lt;br /&gt;
* [[ EP-0128 ]]&lt;br /&gt;
* [[ EP-0127 ]]&lt;br /&gt;
* [[ EP-0123 ]]&lt;br /&gt;
* [[ EP-0124 ]]&lt;br /&gt;
* [[ EP-0125 ]]&lt;br /&gt;
* [[ EP-0126 ]]&lt;br /&gt;
* [[ K-0335 ]]&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;
* [[ ER-0022 ]]&lt;br /&gt;
* [[ D-0018 ]]&lt;br /&gt;
* [[ G-0002 ]]&lt;br /&gt;
* [[ D-0010 ]]&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;
* [[ EP-0120 ]]&lt;br /&gt;
* [[ EP-0121 ]]&lt;br /&gt;
* [[ EP-0118 ]]&lt;br /&gt;
* [[ D-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: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ D-0009 ]]&lt;br /&gt;
* [[ D-0011 ]]&lt;br /&gt;
* [[ D-0005 ]]&lt;br /&gt;
* [[ D-0006 ]]&lt;br /&gt;
* [[ D-0007 ]]&lt;br /&gt;
* [[ P-0010 ]]&lt;br /&gt;
* [[ P-0011 ]]&lt;br /&gt;
* [[ D-0003 ]]&lt;br /&gt;
* [[ EZ-0089 ]]&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: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ER-0021 ]]&lt;br /&gt;
* [[ P-0005 ]]&lt;br /&gt;
* [[ P-0006 ]]&lt;br /&gt;
* [[ Z-0269 ]]&lt;br /&gt;
* [[ Z-0231 ]]&lt;br /&gt;
* [[ Z-0209 ]]&lt;br /&gt;
* [[ ER-0016 ]]&lt;br /&gt;
* [[ Z-0234 ]]&lt;br /&gt;
* [[ Z-0235 ]]&lt;br /&gt;
* [[ EP-0101 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&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-0097 ]] &lt;br /&gt;
* [[ EP-0095 ]]&lt;br /&gt;
* [[ EP-0096 ]]&lt;br /&gt;
* [[ EZ-0068 ]]&lt;br /&gt;
* [[ EP-0094 ]]&lt;br /&gt;
* [[ K-0291 ]]&lt;br /&gt;
* [[ EP-0091 ]]&lt;br /&gt;
* [[ EP-0092 ]]&lt;br /&gt;
* [[ EP-0093 ]]&lt;br /&gt;
* [[ EP-0088 ]]&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-0114 ]]&lt;br /&gt;
* [[ EP-0100 ]]&lt;br /&gt;
* [[ EP-0080 ]]&lt;br /&gt;
* [[ EP-0031 ]]&lt;br /&gt;
* [[ EP-0059 ]]&lt;br /&gt;
* [[ Z-0177 ]]&lt;br /&gt;
* [[ EP-0021 ]]&lt;br /&gt;
* [[ EP-0020 ]]&lt;br /&gt;
* [[ EZ-0024 ]]&lt;br /&gt;
* [[ EZ-0048 ]]&lt;br /&gt;
&amp;lt;/td&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-0073 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Case &amp;amp; Enclosure &amp;amp; Heat sink==&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;
* [[ C-0063 ]]&lt;br /&gt;
* [[ ZP-0215 ]]&lt;br /&gt;
* [[ ZP-0213 ]]&lt;br /&gt;
* [[ ZP-0188 ]]&lt;br /&gt;
* [[ EP-0226 ]]&lt;br /&gt;
* [[ EP-0222 ]]&lt;br /&gt;
* [[ C-0052 ]]&lt;br /&gt;
* [[ ZP-0186 ]]&lt;br /&gt;
* [[ ZP-0175 ]]&lt;br /&gt;
* [[ C-0054 ]]&lt;br /&gt;
* [[ ZP-0181 ]]&lt;br /&gt;
* [[ ZP-0173 ]]&lt;br /&gt;
* [[ ZP-0170 ]]&lt;br /&gt;
* [[ C-0050 ]]&lt;br /&gt;
* [[ ZP-0167 ]]&lt;br /&gt;
* [[ C-0047 ]]&lt;br /&gt;
* [[ C-0048 ]]&lt;br /&gt;
* [[ C-0049 ]]&lt;br /&gt;
* [[ ZP-0163 ]]&lt;br /&gt;
* [[ ZP-0166 ]]&lt;br /&gt;
* [[ ZP-0162 ]]&lt;br /&gt;
* [[ ZP-0180 ]]&lt;br /&gt;
* [[ ZP-0164 ]]&lt;br /&gt;
* [[ ZP-0153 ]]&lt;br /&gt;
* [[ ZP-0147 ]]&lt;br /&gt;
* [[ K-0638 ]]&lt;br /&gt;
* [[ KZ-0001 ]]&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;
* [[ KZ-0002 ]]&lt;br /&gt;
* [[ ZP-0138 ]]&lt;br /&gt;
* [[ ZP-0139 ]]&lt;br /&gt;
* [[ ZP-0140 ]]&lt;br /&gt;
* [[ ZP-0141 ]]&lt;br /&gt;
* [[ EP-0163 ]]&lt;br /&gt;
* [[ ZP-0120 ]]&lt;br /&gt;
* [[ K-0612 ]]&lt;br /&gt;
* [[ C-0031 ]]&lt;br /&gt;
* [[ K-0595 ]]&lt;br /&gt;
* [[ ZP-0165 ]]&lt;br /&gt;
* [[ ZP-0168 ]]&lt;br /&gt;
* [[ K-0583 ]]&lt;br /&gt;
* [[ K-0585 ]]&lt;br /&gt;
* [[ ZP-0115 ]]&lt;br /&gt;
* [[ ZP-0113 ]]&lt;br /&gt;
* [[ ZP-0111 ]]&lt;br /&gt;
* [[ ZP-0112 ]]&lt;br /&gt;
* [[ C-0027 ]]&lt;br /&gt;
* [[ ZP-0110 ]]&lt;br /&gt;
* [[ C-0023 ]]&lt;br /&gt;
* [[ C-0025 ]]&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-0132 ]]&lt;br /&gt;
* [[ K-0567 ]]&lt;br /&gt;
* [[ C-0022 ]]&lt;br /&gt;
* [[ C-0020]]&lt;br /&gt;
* [[ ZP-0105 ]]&lt;br /&gt;
* [[ ZP-0133 ]]&lt;br /&gt;
* [[ C-0032 ]]&lt;br /&gt;
* [[ C-0033 ]]&lt;br /&gt;
* [[ C-0034 ]]&lt;br /&gt;
* [[ ZP-0103 ]]&lt;br /&gt;
* [[ C-0015 ]]&lt;br /&gt;
* [[ ZP-0108 ]]&lt;br /&gt;
* [[ ZP-0089 ]]&lt;br /&gt;
* [[ F-0003 ]]&lt;br /&gt;
* [[ ZP-0102 ]]&lt;br /&gt;
* [[ ZP-0101 ]]&lt;br /&gt;
* [[ ZP-0040 ]]&lt;br /&gt;
* [[ ZP-0039 ]]&lt;br /&gt;
* [[ EP-0122 ]]&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-0100 ]]&lt;br /&gt;
* [[ ZP-0099 ]]&lt;br /&gt;
* [[ EP-0077 ]]&lt;br /&gt;
* [[ EP-0078 ]]&lt;br /&gt;
* [[ EP-0079 ]]&lt;br /&gt;
* [[ ER-0011 ]]&lt;br /&gt;
* [[ EZ-0059 ]]&lt;br /&gt;
* [[ Z-0153 ]]&lt;br /&gt;
* [[ EP-0076 ]]&lt;br /&gt;
* [[ ZP-0098 ]]&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-0092 ]]&lt;br /&gt;
* [[ ZP-0093 ]]&lt;br /&gt;
* [[ C-0008 ]]&lt;br /&gt;
* [[ C-0006 ]]&lt;br /&gt;
* [[ C-0003 ]]&lt;br /&gt;
* [[ ZP-0090 ]]&lt;br /&gt;
* [[ ZP-0091 ]]&lt;br /&gt;
* [[ C-0005 ]]&lt;br /&gt;
* [[ C-0004 ]]&lt;br /&gt;
* [[ ZP-0088 ]]&lt;br /&gt;
* [[ K-0592 ]]&lt;br /&gt;
* [[ K-0589 ]]&lt;br /&gt;
* [[ ZP-0116 ]]&lt;br /&gt;
* [[ C-0028 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&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-0087 ]] &lt;br /&gt;
* [[ C-0002 ]]&lt;br /&gt;
* [[ C-0001 ]]&lt;br /&gt;
* [[ EP-0112 ]]&lt;br /&gt;
* [[ ZP-0086 ]]&lt;br /&gt;
* [[ ZP-0079 ]]&lt;br /&gt;
* [[ ZP-0078 ]]&lt;br /&gt;
* [[ ZP-0068 ]]&lt;br /&gt;
* [[ Z-0278 ]]&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: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0113 ]]&lt;br /&gt;
* [[ EP-0111 ]]&lt;br /&gt;
* [[ ZP-0081 ]]&lt;br /&gt;
* [[ ZP-0082 ]]&lt;br /&gt;
* [[ ZP-0083 ]]&lt;br /&gt;
* [[ Z-0272 ]]&lt;br /&gt;
* [[ C-0007 ]]&lt;br /&gt;
* [[ Z-0273 ]]&lt;br /&gt;
* [[ ZP-0080 ]]&lt;br /&gt;
* [[ ZP-0077 ]]&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-0074 ]]&lt;br /&gt;
* [[ ZP-0075 ]]&lt;br /&gt;
* [[ ZP-0073 ]]&lt;br /&gt;
* [[ ZP-0076 ]]&lt;br /&gt;
* [[ ZP-0067 ]]&lt;br /&gt;
* [[ ZP-0066 ]]&lt;br /&gt;
* [[ ZP-0065 ]]&lt;br /&gt;
* [[ ZP-0038 ]]&lt;br /&gt;
* [[ ZP-0072 ]]&lt;br /&gt;
* [[ Z-0266 ]]&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-0070 ]]&lt;br /&gt;
* [[ ZP-0071 ]]&lt;br /&gt;
* [[ Z-0264 ]]&lt;br /&gt;
* [[ ZP-0051 ]]&lt;br /&gt;
* [[ Z-0237 ]]&lt;br /&gt;
* [[ ZP-0025 ]]&lt;br /&gt;
* [[ ZP-0069 ]]&lt;br /&gt;
* [[ ZP-0042 ]]&lt;br /&gt;
* [[ Z-0185 ]]&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-0037 ]]&lt;br /&gt;
* [[ Z-0183 ]] &lt;br /&gt;
* [[ Z-0127 ]]&lt;br /&gt;
* [[ K-0172 ]]&lt;br /&gt;
* [[ K-0178 ]]&lt;br /&gt;
* [[ Z-0157 ]]&lt;br /&gt;
* [[ ZP-0024 ]]&lt;br /&gt;
* [[ L-0030 ]]&lt;br /&gt;
* [[ ZP-0029 ]]&lt;br /&gt;
* [[ ZP-0049 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&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;
* [[ Z-0193 ]]&lt;br /&gt;
* [[ Z-0208 ]]&lt;br /&gt;
* [[ Z-0190 ]]&lt;br /&gt;
* [[ Z-0184 ]]&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;
==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;
&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-0189 ]] &amp;lt;font color=red&amp;gt;NEW!!!&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* [[ EP-0187 ]] &amp;lt;font color=red&amp;gt;NEW!!!&amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* [[ EP-0190 ]]&lt;br /&gt;
* [[ EP-0188 ]]&lt;br /&gt;
* [[ EP-0185 ]]&lt;br /&gt;
* [[ EP-0186 ]]&lt;br /&gt;
* [[ EP-0183 ]]&lt;br /&gt;
* [[ EP-0184 ]]&lt;br /&gt;
* [[ EP-0177 ]]&lt;br /&gt;
* [[ EP-0170 ]]&lt;br /&gt;
* [[ S-0018 ]] &lt;br /&gt;
* [[ EP-0133 ]]&lt;br /&gt;
* [[ EP-0119 ]]&lt;br /&gt;
* [[ S-0007 ]]&lt;br /&gt;
* [[ S-0006 ]]&lt;br /&gt;
* [[ S-0005 ]]&lt;br /&gt;
* [[ EP-0060 ]]&amp;lt;font color=red&amp;gt;EOL&amp;lt;/font&amp;gt;&lt;br /&gt;
* [[ EP-0049 ]] &amp;lt;font color=red&amp;gt;EOL&amp;lt;/font&amp;gt;&lt;br /&gt;
* [[ EP-0045 ]]&lt;br /&gt;
* [[ EP-0058 ]]&lt;br /&gt;
* [[ EP-0075 ]]&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-0148 ]]&lt;br /&gt;
* [[ EP-0062 ]]&lt;br /&gt;
* [[ EP-0063 ]]&lt;br /&gt;
* [[ EP-0066 ]]&lt;br /&gt;
* [[ EP-0065 ]]&lt;br /&gt;
* [[ Z-0053 ]]&lt;br /&gt;
* [[ EP-0072 ]]&lt;br /&gt;
* [[ EP-0081 ]]&lt;br /&gt;
* [[ EP-0089 ]]&lt;br /&gt;
* [[ EP-0087 ]]&lt;br /&gt;
* [[ EP-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: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ EP-0084 ]]&lt;br /&gt;
* [[ EP-0082 ]]&lt;br /&gt;
* [[ Z-0017 ]]&lt;br /&gt;
* [[ Z-0051 ]]&lt;br /&gt;
* [[ K-0106 ]]&lt;br /&gt;
* [[ Z-0111 ]]&lt;br /&gt;
* [[ Z-0112 ]]&lt;br /&gt;
* [[ K-0101 ]]&lt;br /&gt;
* [[ K-0102 ]]&lt;br /&gt;
* [[ S-0003 ]]&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;
* [[ S-0001 ]]&lt;br /&gt;
* [[ Z-0113 ]]&lt;br /&gt;
* [[ Z-0114 ]]&lt;br /&gt;
* [[ Z-0143 ]]&lt;br /&gt;
* [[ K-0103 ]]&lt;br /&gt;
* [[ K-0104 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Power Supply==&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;
* [[ P-0044 ]]&lt;br /&gt;
* [[ P-0040 ]]&lt;br /&gt;
* [[ P-0031 ]]&lt;br /&gt;
* [[ P-0032 ]]&lt;br /&gt;
* [[ P-0017 ]]&lt;br /&gt;
* [[ P-0007 ]] &lt;br /&gt;
* [[ P-0008 ]] &lt;br /&gt;
* [[ P-0009 ]] &lt;br /&gt;
* [[ P-0004 ]] &amp;lt;font color=red&amp;gt;EOL&amp;lt;/font&amp;gt;&lt;br /&gt;
* [[ P-0003 ]] &amp;lt;font color=red&amp;gt;EOL&amp;lt;/font&amp;gt;&lt;br /&gt;
* [[ P-0002 ]] &amp;lt;font color=red&amp;gt;EOL&amp;lt;/font&amp;gt;&lt;br /&gt;
* [[ P-0001 ]]&lt;br /&gt;
* [[ Z-0132 ]]&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;
* [[ Z-0147 ]]&lt;br /&gt;
* [[ Z-0148 ]]&lt;br /&gt;
* [[ Z-0149 ]]&lt;br /&gt;
* [[ Z-0150 ]]&lt;br /&gt;
* [[ Z-0154 ]]&lt;br /&gt;
* [[ Z-0155 ]]&lt;br /&gt;
* [[ L-0026 ]]&lt;br /&gt;
* [[ L-0027 ]]&lt;br /&gt;
* [[ Z-0133 ]]&lt;br /&gt;
* [[ Z-0121 ]]&lt;br /&gt;
* [[ Z-0097 ]]&lt;br /&gt;
* [[ Z-0136 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Raspberry Pi Kits==&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;
* [[ K-0401 ]]&lt;br /&gt;
* [[ K-0503 ]]&lt;br /&gt;
* [[ K-0581 ]]&lt;br /&gt;
* [[ K-0522 ]]&lt;br /&gt;
* [[ T-0008 ]]&lt;br /&gt;
* [[ K-0512 ]]&lt;br /&gt;
* [[ K-0502 ]]&lt;br /&gt;
* [[ K-0403 ]]&lt;br /&gt;
* [[ K-0167 ]]&lt;br /&gt;
* [[ K-0168 ]]&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;
* [[ K-0169 ]]&lt;br /&gt;
* [[ K-0259 ]]&lt;br /&gt;
* [[ K-0238 ]]&lt;br /&gt;
* [[ K-0185 ]]&lt;br /&gt;
* [[ K-0186 ]]&lt;br /&gt;
* [[ Z-0142 ]]&lt;br /&gt;
* [[ K-0111 ]]&lt;br /&gt;
* [[ Z-0144 ]]&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: 10%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ K-0180 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Official Support Products==&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;
* [[ Z-0104 ]]&lt;br /&gt;
* [[ Z-0088 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==X-Series Expansion Board==&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;
&amp;lt;b&amp;gt;&amp;lt;font color=red&amp;gt;New Products 2022.08.23 updated&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* [[ EZ-0105 ]]&lt;br /&gt;
* [[ EZ-0099 ]]&lt;br /&gt;
* [[ EZ-0096 ]]&lt;br /&gt;
* [[ EZ-0094 ]]&lt;br /&gt;
* [[ EZ-0095 ]]&lt;br /&gt;
* [[ EZ-0090 ]]&lt;br /&gt;
* [[ EZ-0087 ]]&lt;br /&gt;
* [[ EZ-0088 ]]&lt;br /&gt;
* [[ EZ-0086 ]]&lt;br /&gt;
* [[ EZ-0083 ]]&lt;br /&gt;
* [[ EZ-0082 ]]&lt;br /&gt;
* [[ EZ-0076 ]]&lt;br /&gt;
* [[ EZ-0077 ]]&lt;br /&gt;
* [[ EZ-0078 ]]&lt;br /&gt;
* [[ EZ-0079 ]]&lt;br /&gt;
* [[ EZ-0080 ]]&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;
&amp;lt;b&amp;gt;&amp;lt;font color=Green&amp;gt;Old Products 2018.6.6 updated&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* [[ X720 SKU: EZ-0072]]&lt;br /&gt;
* [[ X730 SKU: EZ-0073]]&lt;br /&gt;
* [[ X830 SKU: EZ-0064]]&lt;br /&gt;
* [[ X105 SKU: EZ-0008]]&lt;br /&gt;
* [[ X200 SKU: EZ-0002]]&lt;br /&gt;
* [[ X300 SKU: EZ-0003]]&lt;br /&gt;
* [[ X205 SKU: EZ-0046]]&lt;br /&gt;
* [[ X400 SKU: EZ-0044]]&lt;br /&gt;
* [[ X600  SKU:EZ-0045]]&lt;br /&gt;
* [[ X3000 SKU:EZ-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: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ X6000P SKU:EZ-0052 ]]&lt;br /&gt;
* [[ X5000P SKU:EZ-0053 ]]&lt;br /&gt;
* [[ X4000P SKU:EZ-0054 ]]&lt;br /&gt;
* [[ X4000K SKU:EZ-0055 ]]&lt;br /&gt;
* [[ X6000K SKU:EZ-0056 ]]&lt;br /&gt;
* [[ X5000K SKU:EZ-0057 ]]&lt;br /&gt;
* [[ X1000K SKU:EZ-0058 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
===X series Acrylic Case===&lt;br /&gt;
* [[ ZP-0096 ]]&lt;br /&gt;
* [[ ZP-0097 ]]&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=EP-0172&amp;diff=13312</id>
		<title>EP-0172</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=EP-0172&amp;diff=13312"/>
		<updated>2023-06-16T06:04:03Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: /* Specifications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Pico Breadboard Kit Plus version==&lt;br /&gt;
==Description==&lt;br /&gt;
The Pico Breadboard Kit with a 3.5-inch touch screen, mini PSP joystick, RGB light, buzzer, and two buttons is a versatile electronics kit designed for prototyping and experimentation. This compact kit combines various components to create interactive projects and offers a user-friendly interface.&lt;br /&gt;
==Features==&lt;br /&gt;
* &amp;lt;strong&amp;gt;3.5-inch Capacitive Touch Screen:&amp;lt;/strong&amp;gt; The kit includes a high-resolution touch screen for displaying visual outputs and receiving user input.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Mini PSP Joystick:&amp;lt;/strong&amp;gt; The built-in mini joystick provides precise analog control for navigating menus and controlling movement in projects.&lt;br /&gt;
* &amp;lt;strong&amp;gt;RGB Light:&amp;lt;/strong&amp;gt; The kit features an RGB light that can emit various colors, allowing for dynamic visual effects and status indicators.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Buzzer:&amp;lt;/strong&amp;gt; An integrated buzzer produces audible feedback, enabling sound effects or alerts in your projects.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Two Buttons:&amp;lt;/strong&amp;gt; The kit includes two buttons for user input, providing additional control options and interactivity.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Label:&amp;lt;/strong&amp;gt; Drop the jumper, all the information is marked on the PCB and can also be disconnected by removing the 0R resistor.&lt;br /&gt;
===Specifications===&lt;br /&gt;
* Joystick: Mini PSP joystick for analog control&lt;br /&gt;
* Light: RGB light for color output&lt;br /&gt;
* Buzzer: Integrated buzzer for audible feedback&lt;br /&gt;
* Buttons: Two buttons for user input&lt;br /&gt;
* TFT Size: 3.5 inches TFT&lt;br /&gt;
* TFT Resolution: 320x480 Pixels&lt;br /&gt;
* TFT IC: ST7796SU1 (*May vary with lot*)&lt;br /&gt;
* TFT Touch Type: Capacitive Touch Screen&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
TBD.&lt;br /&gt;
==Package Include==&lt;br /&gt;
* 1 x Pico Breadboard Kit Plus version&lt;br /&gt;
* 1 x 3.5&amp;quot; Capacitive Touch TFT (already installed on the kit)&lt;br /&gt;
&lt;br /&gt;
==Getting Start==&lt;br /&gt;
* Install CMake (at least version 3.13), and GCC cross compiler &#039;&#039;&#039;(Raspberry Pi OSis pre-installed by default, other systems please install it yourself.)&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install Pico-SDK in Your OS(like Raspberry Pi OS).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget https://github.com/raspberrypi/pico-setup/blob/master/pico_setup.sh -O pico_setup.sh&lt;br /&gt;
chmod a+x pico_setup.sh&lt;br /&gt;
./pico_setup.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Download the demo project directly and build it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/pi/&lt;br /&gt;
git clone --recursive https://github.com/geeekpi/pico_breakboard_kit.git&lt;br /&gt;
Build Projects&lt;br /&gt;
cd pico_breakboard_kit/&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build/&lt;br /&gt;
cmake --no-warn-unused-cli -DPICO_OPTIMIZED_DEBUG=1 -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_BUILD_TYPE:STRING=Debug ../&lt;br /&gt;
make -j4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Upload firmware to Pico Unplug Raspberry Pi Pico from Raspberry Pi and press boot_sel button and then connect the Raspberry Pi Pico back to Raspberry Pi. Execute following command to copy the *.uf2 file to Pico.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp firmware.uf2 /media/pi/RPI-RP2/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After a while, when the firmware has been uploaded to Pico, it will restart automatically, you can test the demo code according to the information on screen. Have fun!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;If you want to do UI development, please refer to the LVGL development guide, we have implemented the screen and touch driver, you can use it directly.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
* Q: Why is is so slow when I drag the circle ring on screen? &lt;br /&gt;
&amp;lt;pre&amp;gt;Because of the memory of pico is just 264KB, and graphic interface may consume a lot of memory to show the graphic widget.&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Q: Can I use MicroPython with LVGL to drive the screen? &lt;br /&gt;
&amp;lt;pre&amp;gt;No, it is lack of memory, so it may stack when you upload the firmware.&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Firmware Download==&lt;br /&gt;
* Firmware Demo: [[ File:Pico breadboard kit Plus verison demo firmware.zip  ]]&lt;br /&gt;
===How to use it?===&lt;br /&gt;
* Download the firmware demo and unzip it.&lt;br /&gt;
* Upload firmware to Pico Unplug Raspberry Pi Pico from Raspberry Pi and press boot_sel button and then connect the Raspberry Pi Pico back to Raspberry Pi.&lt;br /&gt;
* Copy the *.uf2 file to RPI-RP2 folder, that&#039;s it. &lt;br /&gt;
==GitHub==&lt;br /&gt;
* Repository on GitHub: [ https://github.com/geeekpi/pico_breakboard_kit ]&lt;br /&gt;
==Keywords==&lt;br /&gt;
* Pico Breadboard Kit, 3.5-inch touch screen, mini PSP joystick, RGB light, buzzer, buttons, prototyping, experimentation, interactive projects, user-friendly interface.&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=EP-0172&amp;diff=13311</id>
		<title>EP-0172</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=EP-0172&amp;diff=13311"/>
		<updated>2023-06-16T06:02:54Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: /* Package Include */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Pico Breadboard Kit Plus version==&lt;br /&gt;
==Description==&lt;br /&gt;
The Pico Breadboard Kit with a 3.5-inch touch screen, mini PSP joystick, RGB light, buzzer, and two buttons is a versatile electronics kit designed for prototyping and experimentation. This compact kit combines various components to create interactive projects and offers a user-friendly interface.&lt;br /&gt;
==Features==&lt;br /&gt;
* &amp;lt;strong&amp;gt;3.5-inch Capacitive Touch Screen:&amp;lt;/strong&amp;gt; The kit includes a high-resolution touch screen for displaying visual outputs and receiving user input.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Mini PSP Joystick:&amp;lt;/strong&amp;gt; The built-in mini joystick provides precise analog control for navigating menus and controlling movement in projects.&lt;br /&gt;
* &amp;lt;strong&amp;gt;RGB Light:&amp;lt;/strong&amp;gt; The kit features an RGB light that can emit various colors, allowing for dynamic visual effects and status indicators.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Buzzer:&amp;lt;/strong&amp;gt; An integrated buzzer produces audible feedback, enabling sound effects or alerts in your projects.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Two Buttons:&amp;lt;/strong&amp;gt; The kit includes two buttons for user input, providing additional control options and interactivity.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Label:&amp;lt;/strong&amp;gt; Drop the jumper, all the information is marked on the PCB and can also be disconnected by removing the 0R resistor.&lt;br /&gt;
===Specifications===&lt;br /&gt;
* Screen Size: 3.5 inches TFT &lt;br /&gt;
* Joystick: Mini PSP joystick for analog control&lt;br /&gt;
* Light: RGB light for color output&lt;br /&gt;
* Buzzer: Integrated buzzer for audible feedback&lt;br /&gt;
* Buttons: Two buttons for user input&lt;br /&gt;
* Resolution: 320x480 Pixels&lt;br /&gt;
* Screen IC: ST7796SU1&lt;br /&gt;
* Input Voltage: 3.3V&lt;br /&gt;
* Touch Type: Capacitive Touch Screen&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
TBD.&lt;br /&gt;
==Package Include==&lt;br /&gt;
* 1 x Pico Breadboard Kit Plus version&lt;br /&gt;
* 1 x 3.5&amp;quot; Capacitive Touch TFT (already installed on the kit)&lt;br /&gt;
&lt;br /&gt;
==Getting Start==&lt;br /&gt;
* Install CMake (at least version 3.13), and GCC cross compiler &#039;&#039;&#039;(Raspberry Pi OSis pre-installed by default, other systems please install it yourself.)&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install Pico-SDK in Your OS(like Raspberry Pi OS).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget https://github.com/raspberrypi/pico-setup/blob/master/pico_setup.sh -O pico_setup.sh&lt;br /&gt;
chmod a+x pico_setup.sh&lt;br /&gt;
./pico_setup.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Download the demo project directly and build it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/pi/&lt;br /&gt;
git clone --recursive https://github.com/geeekpi/pico_breakboard_kit.git&lt;br /&gt;
Build Projects&lt;br /&gt;
cd pico_breakboard_kit/&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build/&lt;br /&gt;
cmake --no-warn-unused-cli -DPICO_OPTIMIZED_DEBUG=1 -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_BUILD_TYPE:STRING=Debug ../&lt;br /&gt;
make -j4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Upload firmware to Pico Unplug Raspberry Pi Pico from Raspberry Pi and press boot_sel button and then connect the Raspberry Pi Pico back to Raspberry Pi. Execute following command to copy the *.uf2 file to Pico.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp firmware.uf2 /media/pi/RPI-RP2/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After a while, when the firmware has been uploaded to Pico, it will restart automatically, you can test the demo code according to the information on screen. Have fun!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;If you want to do UI development, please refer to the LVGL development guide, we have implemented the screen and touch driver, you can use it directly.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
* Q: Why is is so slow when I drag the circle ring on screen? &lt;br /&gt;
&amp;lt;pre&amp;gt;Because of the memory of pico is just 264KB, and graphic interface may consume a lot of memory to show the graphic widget.&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Q: Can I use MicroPython with LVGL to drive the screen? &lt;br /&gt;
&amp;lt;pre&amp;gt;No, it is lack of memory, so it may stack when you upload the firmware.&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Firmware Download==&lt;br /&gt;
* Firmware Demo: [[ File:Pico breadboard kit Plus verison demo firmware.zip  ]]&lt;br /&gt;
===How to use it?===&lt;br /&gt;
* Download the firmware demo and unzip it.&lt;br /&gt;
* Upload firmware to Pico Unplug Raspberry Pi Pico from Raspberry Pi and press boot_sel button and then connect the Raspberry Pi Pico back to Raspberry Pi.&lt;br /&gt;
* Copy the *.uf2 file to RPI-RP2 folder, that&#039;s it. &lt;br /&gt;
==GitHub==&lt;br /&gt;
* Repository on GitHub: [ https://github.com/geeekpi/pico_breakboard_kit ]&lt;br /&gt;
==Keywords==&lt;br /&gt;
* Pico Breadboard Kit, 3.5-inch touch screen, mini PSP joystick, RGB light, buzzer, buttons, prototyping, experimentation, interactive projects, user-friendly interface.&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=EP-0172&amp;diff=13310</id>
		<title>EP-0172</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=EP-0172&amp;diff=13310"/>
		<updated>2023-06-16T06:02:04Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: /* Getting Start */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Pico Breadboard Kit Plus version==&lt;br /&gt;
==Description==&lt;br /&gt;
The Pico Breadboard Kit with a 3.5-inch touch screen, mini PSP joystick, RGB light, buzzer, and two buttons is a versatile electronics kit designed for prototyping and experimentation. This compact kit combines various components to create interactive projects and offers a user-friendly interface.&lt;br /&gt;
==Features==&lt;br /&gt;
* &amp;lt;strong&amp;gt;3.5-inch Capacitive Touch Screen:&amp;lt;/strong&amp;gt; The kit includes a high-resolution touch screen for displaying visual outputs and receiving user input.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Mini PSP Joystick:&amp;lt;/strong&amp;gt; The built-in mini joystick provides precise analog control for navigating menus and controlling movement in projects.&lt;br /&gt;
* &amp;lt;strong&amp;gt;RGB Light:&amp;lt;/strong&amp;gt; The kit features an RGB light that can emit various colors, allowing for dynamic visual effects and status indicators.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Buzzer:&amp;lt;/strong&amp;gt; An integrated buzzer produces audible feedback, enabling sound effects or alerts in your projects.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Two Buttons:&amp;lt;/strong&amp;gt; The kit includes two buttons for user input, providing additional control options and interactivity.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Label:&amp;lt;/strong&amp;gt; Drop the jumper, all the information is marked on the PCB and can also be disconnected by removing the 0R resistor.&lt;br /&gt;
===Specifications===&lt;br /&gt;
* Screen Size: 3.5 inches TFT &lt;br /&gt;
* Joystick: Mini PSP joystick for analog control&lt;br /&gt;
* Light: RGB light for color output&lt;br /&gt;
* Buzzer: Integrated buzzer for audible feedback&lt;br /&gt;
* Buttons: Two buttons for user input&lt;br /&gt;
* Resolution: 320x480 Pixels&lt;br /&gt;
* Screen IC: ST7796SU1&lt;br /&gt;
* Input Voltage: 3.3V&lt;br /&gt;
* Touch Type: Capacitive Touch Screen&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
TBD.&lt;br /&gt;
==Package Include==&lt;br /&gt;
* 1 x Pico Breadboard Kit Plus version&lt;br /&gt;
==Getting Start==&lt;br /&gt;
* Install CMake (at least version 3.13), and GCC cross compiler &#039;&#039;&#039;(Raspberry Pi OSis pre-installed by default, other systems please install it yourself.)&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install Pico-SDK in Your OS(like Raspberry Pi OS).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget https://github.com/raspberrypi/pico-setup/blob/master/pico_setup.sh -O pico_setup.sh&lt;br /&gt;
chmod a+x pico_setup.sh&lt;br /&gt;
./pico_setup.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Download the demo project directly and build it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/pi/&lt;br /&gt;
git clone --recursive https://github.com/geeekpi/pico_breakboard_kit.git&lt;br /&gt;
Build Projects&lt;br /&gt;
cd pico_breakboard_kit/&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build/&lt;br /&gt;
cmake --no-warn-unused-cli -DPICO_OPTIMIZED_DEBUG=1 -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_BUILD_TYPE:STRING=Debug ../&lt;br /&gt;
make -j4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Upload firmware to Pico Unplug Raspberry Pi Pico from Raspberry Pi and press boot_sel button and then connect the Raspberry Pi Pico back to Raspberry Pi. Execute following command to copy the *.uf2 file to Pico.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp firmware.uf2 /media/pi/RPI-RP2/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After a while, when the firmware has been uploaded to Pico, it will restart automatically, you can test the demo code according to the information on screen. Have fun!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;If you want to do UI development, please refer to the LVGL development guide, we have implemented the screen and touch driver, you can use it directly.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
* Q: Why is is so slow when I drag the circle ring on screen? &lt;br /&gt;
&amp;lt;pre&amp;gt;Because of the memory of pico is just 264KB, and graphic interface may consume a lot of memory to show the graphic widget.&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Q: Can I use MicroPython with LVGL to drive the screen? &lt;br /&gt;
&amp;lt;pre&amp;gt;No, it is lack of memory, so it may stack when you upload the firmware.&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Firmware Download==&lt;br /&gt;
* Firmware Demo: [[ File:Pico breadboard kit Plus verison demo firmware.zip  ]]&lt;br /&gt;
===How to use it?===&lt;br /&gt;
* Download the firmware demo and unzip it.&lt;br /&gt;
* Upload firmware to Pico Unplug Raspberry Pi Pico from Raspberry Pi and press boot_sel button and then connect the Raspberry Pi Pico back to Raspberry Pi.&lt;br /&gt;
* Copy the *.uf2 file to RPI-RP2 folder, that&#039;s it. &lt;br /&gt;
==GitHub==&lt;br /&gt;
* Repository on GitHub: [ https://github.com/geeekpi/pico_breakboard_kit ]&lt;br /&gt;
==Keywords==&lt;br /&gt;
* Pico Breadboard Kit, 3.5-inch touch screen, mini PSP joystick, RGB light, buzzer, buttons, prototyping, experimentation, interactive projects, user-friendly interface.&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=EP-0172&amp;diff=13309</id>
		<title>EP-0172</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=EP-0172&amp;diff=13309"/>
		<updated>2023-06-16T06:01:16Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: /* Features */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Pico Breadboard Kit Plus version==&lt;br /&gt;
==Description==&lt;br /&gt;
The Pico Breadboard Kit with a 3.5-inch touch screen, mini PSP joystick, RGB light, buzzer, and two buttons is a versatile electronics kit designed for prototyping and experimentation. This compact kit combines various components to create interactive projects and offers a user-friendly interface.&lt;br /&gt;
==Features==&lt;br /&gt;
* &amp;lt;strong&amp;gt;3.5-inch Capacitive Touch Screen:&amp;lt;/strong&amp;gt; The kit includes a high-resolution touch screen for displaying visual outputs and receiving user input.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Mini PSP Joystick:&amp;lt;/strong&amp;gt; The built-in mini joystick provides precise analog control for navigating menus and controlling movement in projects.&lt;br /&gt;
* &amp;lt;strong&amp;gt;RGB Light:&amp;lt;/strong&amp;gt; The kit features an RGB light that can emit various colors, allowing for dynamic visual effects and status indicators.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Buzzer:&amp;lt;/strong&amp;gt; An integrated buzzer produces audible feedback, enabling sound effects or alerts in your projects.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Two Buttons:&amp;lt;/strong&amp;gt; The kit includes two buttons for user input, providing additional control options and interactivity.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Label:&amp;lt;/strong&amp;gt; Drop the jumper, all the information is marked on the PCB and can also be disconnected by removing the 0R resistor.&lt;br /&gt;
===Specifications===&lt;br /&gt;
* Screen Size: 3.5 inches TFT &lt;br /&gt;
* Joystick: Mini PSP joystick for analog control&lt;br /&gt;
* Light: RGB light for color output&lt;br /&gt;
* Buzzer: Integrated buzzer for audible feedback&lt;br /&gt;
* Buttons: Two buttons for user input&lt;br /&gt;
* Resolution: 320x480 Pixels&lt;br /&gt;
* Screen IC: ST7796SU1&lt;br /&gt;
* Input Voltage: 3.3V&lt;br /&gt;
* Touch Type: Capacitive Touch Screen&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
TBD.&lt;br /&gt;
==Package Include==&lt;br /&gt;
* 1 x Pico Breadboard Kit Plus version&lt;br /&gt;
==Getting Start==&lt;br /&gt;
* Install CMake (at least version 3.13), and GCC cross compiler &#039;&#039;&#039;(Raspberry Pi OSis pre-installed by default, other systems please install it yourself.)&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install Pico-SDK in Your OS(like Raspberry Pi OS).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget https://github.com/raspberrypi/pico-setup/blob/master/pico_setup.sh -O pico_setup.sh&lt;br /&gt;
chmod a+x pico_setup.sh&lt;br /&gt;
./pico_setup.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Download the demo project directly and build it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/pi/&lt;br /&gt;
git clone --recursive https://github.com/geeekpi/pico_breakboard_kit.git&lt;br /&gt;
Build Projects&lt;br /&gt;
cd pico_breakboard_kit/&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build/&lt;br /&gt;
cmake --no-warn-unused-cli -DPICO_OPTIMIZED_DEBUG=1 -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_BUILD_TYPE:STRING=Debug ../&lt;br /&gt;
make -j4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Upload firmware to Pico Unplug Raspberry Pi Pico from Raspberry Pi and press boot_sel button and then connect the Raspberry Pi Pico back to Raspberry Pi. Execute following command to copy the *.uf2 file to Pico.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp firmware.uf2 /media/pi/RPI-RP2/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After a while, when the firmware has been uploaded to Pico, it will restart automatically, you can test the demo code according to the information on screen. Have fun!&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
* Q: Why is is so slow when I drag the circle ring on screen? &lt;br /&gt;
&amp;lt;pre&amp;gt;Because of the memory of pico is just 264KB, and graphic interface may consume a lot of memory to show the graphic widget.&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Q: Can I use MicroPython with LVGL to drive the screen? &lt;br /&gt;
&amp;lt;pre&amp;gt;No, it is lack of memory, so it may stack when you upload the firmware.&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Firmware Download==&lt;br /&gt;
* Firmware Demo: [[ File:Pico breadboard kit Plus verison demo firmware.zip  ]]&lt;br /&gt;
===How to use it?===&lt;br /&gt;
* Download the firmware demo and unzip it.&lt;br /&gt;
* Upload firmware to Pico Unplug Raspberry Pi Pico from Raspberry Pi and press boot_sel button and then connect the Raspberry Pi Pico back to Raspberry Pi.&lt;br /&gt;
* Copy the *.uf2 file to RPI-RP2 folder, that&#039;s it. &lt;br /&gt;
==GitHub==&lt;br /&gt;
* Repository on GitHub: [ https://github.com/geeekpi/pico_breakboard_kit ]&lt;br /&gt;
==Keywords==&lt;br /&gt;
* Pico Breadboard Kit, 3.5-inch touch screen, mini PSP joystick, RGB light, buzzer, buttons, prototyping, experimentation, interactive projects, user-friendly interface.&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=EP-0172&amp;diff=13308</id>
		<title>EP-0172</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=EP-0172&amp;diff=13308"/>
		<updated>2023-06-16T05:59:29Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: /* Getting Start */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Pico Breadboard Kit Plus version==&lt;br /&gt;
==Description==&lt;br /&gt;
The Pico Breadboard Kit with a 3.5-inch touch screen, mini PSP joystick, RGB light, buzzer, and two buttons is a versatile electronics kit designed for prototyping and experimentation. This compact kit combines various components to create interactive projects and offers a user-friendly interface.&lt;br /&gt;
==Features==&lt;br /&gt;
* &amp;lt;strong&amp;gt;3.5-inch Touch Screen:&amp;lt;/strong&amp;gt; The kit includes a high-resolution touch screen for displaying visual outputs and receiving user input.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Mini PSP Joystick:&amp;lt;/strong&amp;gt; The built-in mini joystick provides precise analog control for navigating menus and controlling movement in projects.&lt;br /&gt;
* &amp;lt;strong&amp;gt;RGB Light:&amp;lt;/strong&amp;gt; The kit features an RGB light that can emit various colors, allowing for dynamic visual effects and status indicators.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Buzzer:&amp;lt;/strong&amp;gt; An integrated buzzer produces audible feedback, enabling sound effects or alerts in your projects.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Two Buttons:&amp;lt;/strong&amp;gt; The kit includes two buttons for user input, providing additional control options and interactivity.&lt;br /&gt;
===Specifications===&lt;br /&gt;
* Screen Size: 3.5 inches TFT &lt;br /&gt;
* Joystick: Mini PSP joystick for analog control&lt;br /&gt;
* Light: RGB light for color output&lt;br /&gt;
* Buzzer: Integrated buzzer for audible feedback&lt;br /&gt;
* Buttons: Two buttons for user input&lt;br /&gt;
* Resolution: 320x480 Pixels&lt;br /&gt;
* Screen IC: ST7796SU1&lt;br /&gt;
* Input Voltage: 3.3V&lt;br /&gt;
* Touch Type: Capacitive Touch Screen&lt;br /&gt;
==Gallery==&lt;br /&gt;
TBD.&lt;br /&gt;
==Package Include==&lt;br /&gt;
* 1 x Pico Breadboard Kit Plus version&lt;br /&gt;
==Getting Start==&lt;br /&gt;
* Install CMake (at least version 3.13), and GCC cross compiler &#039;&#039;&#039;(Raspberry Pi OSis pre-installed by default, other systems please install it yourself.)&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install Pico-SDK in Your OS(like Raspberry Pi OS).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget https://github.com/raspberrypi/pico-setup/blob/master/pico_setup.sh -O pico_setup.sh&lt;br /&gt;
chmod a+x pico_setup.sh&lt;br /&gt;
./pico_setup.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Download the demo project directly and build it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/pi/&lt;br /&gt;
git clone --recursive https://github.com/geeekpi/pico_breakboard_kit.git&lt;br /&gt;
Build Projects&lt;br /&gt;
cd pico_breakboard_kit/&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build/&lt;br /&gt;
cmake --no-warn-unused-cli -DPICO_OPTIMIZED_DEBUG=1 -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_BUILD_TYPE:STRING=Debug ../&lt;br /&gt;
make -j4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Upload firmware to Pico Unplug Raspberry Pi Pico from Raspberry Pi and press boot_sel button and then connect the Raspberry Pi Pico back to Raspberry Pi. Execute following command to copy the *.uf2 file to Pico.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp firmware.uf2 /media/pi/RPI-RP2/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After a while, when the firmware has been uploaded to Pico, it will restart automatically, you can test the demo code according to the information on screen. Have fun!&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
* Q: Why is is so slow when I drag the circle ring on screen? &lt;br /&gt;
&amp;lt;pre&amp;gt;Because of the memory of pico is just 264KB, and graphic interface may consume a lot of memory to show the graphic widget.&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Q: Can I use MicroPython with LVGL to drive the screen? &lt;br /&gt;
&amp;lt;pre&amp;gt;No, it is lack of memory, so it may stack when you upload the firmware.&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Firmware Download==&lt;br /&gt;
* Firmware Demo: [[ File:Pico breadboard kit Plus verison demo firmware.zip  ]]&lt;br /&gt;
===How to use it?===&lt;br /&gt;
* Download the firmware demo and unzip it.&lt;br /&gt;
* Upload firmware to Pico Unplug Raspberry Pi Pico from Raspberry Pi and press boot_sel button and then connect the Raspberry Pi Pico back to Raspberry Pi.&lt;br /&gt;
* Copy the *.uf2 file to RPI-RP2 folder, that&#039;s it. &lt;br /&gt;
==GitHub==&lt;br /&gt;
* Repository on GitHub: [ https://github.com/geeekpi/pico_breakboard_kit ]&lt;br /&gt;
==Keywords==&lt;br /&gt;
* Pico Breadboard Kit, 3.5-inch touch screen, mini PSP joystick, RGB light, buzzer, buttons, prototyping, experimentation, interactive projects, user-friendly interface.&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=EP-0172&amp;diff=13307</id>
		<title>EP-0172</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=EP-0172&amp;diff=13307"/>
		<updated>2023-06-16T05:58:42Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: /* Getting Start */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Pico Breadboard Kit Plus version==&lt;br /&gt;
==Description==&lt;br /&gt;
The Pico Breadboard Kit with a 3.5-inch touch screen, mini PSP joystick, RGB light, buzzer, and two buttons is a versatile electronics kit designed for prototyping and experimentation. This compact kit combines various components to create interactive projects and offers a user-friendly interface.&lt;br /&gt;
==Features==&lt;br /&gt;
* &amp;lt;strong&amp;gt;3.5-inch Touch Screen:&amp;lt;/strong&amp;gt; The kit includes a high-resolution touch screen for displaying visual outputs and receiving user input.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Mini PSP Joystick:&amp;lt;/strong&amp;gt; The built-in mini joystick provides precise analog control for navigating menus and controlling movement in projects.&lt;br /&gt;
* &amp;lt;strong&amp;gt;RGB Light:&amp;lt;/strong&amp;gt; The kit features an RGB light that can emit various colors, allowing for dynamic visual effects and status indicators.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Buzzer:&amp;lt;/strong&amp;gt; An integrated buzzer produces audible feedback, enabling sound effects or alerts in your projects.&lt;br /&gt;
* &amp;lt;strong&amp;gt;Two Buttons:&amp;lt;/strong&amp;gt; The kit includes two buttons for user input, providing additional control options and interactivity.&lt;br /&gt;
===Specifications===&lt;br /&gt;
* Screen Size: 3.5 inches TFT &lt;br /&gt;
* Joystick: Mini PSP joystick for analog control&lt;br /&gt;
* Light: RGB light for color output&lt;br /&gt;
* Buzzer: Integrated buzzer for audible feedback&lt;br /&gt;
* Buttons: Two buttons for user input&lt;br /&gt;
* Resolution: 320x480 Pixels&lt;br /&gt;
* Screen IC: ST7796SU1&lt;br /&gt;
* Input Voltage: 3.3V&lt;br /&gt;
* Touch Type: Capacitive Touch Screen&lt;br /&gt;
==Gallery==&lt;br /&gt;
TBD.&lt;br /&gt;
==Package Include==&lt;br /&gt;
* 1 x Pico Breadboard Kit Plus version&lt;br /&gt;
==Getting Start==&lt;br /&gt;
* Install CMake (at least version 3.13), and GCC cross compiler &#039;&#039;&#039;(Raspbian is pre-installed by default, other systems please install it yourself.)&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Install Pico-SDK in Raspberry Pi Assume that you are using Raspberry Pi OS 64bit (Bullseye) as operating system on Raspberry Pi. Here we are using Raspberry Pi 4B as PC to compile the project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget https://github.com/raspberrypi/pico-setup/blob/master/pico_setup.sh -O pico_setup.sh&lt;br /&gt;
chmod a+x pico_setup.sh&lt;br /&gt;
./pico_setup.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Download the demo project directly and build it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/pi/&lt;br /&gt;
git clone --recursive https://github.com/geeekpi/pico_breakboard_kit.git&lt;br /&gt;
Build Projects&lt;br /&gt;
cd pico_breakboard_kit/&lt;br /&gt;
mkdir build&lt;br /&gt;
cd build/&lt;br /&gt;
cmake --no-warn-unused-cli -DPICO_OPTIMIZED_DEBUG=1 -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_BUILD_TYPE:STRING=Debug ../&lt;br /&gt;
make -j4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Upload firmware to Pico Unplug Raspberry Pi Pico from Raspberry Pi and press boot_sel button and then connect the Raspberry Pi Pico back to Raspberry Pi. Execute following command to copy the *.uf2 file to Pico.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp firmware.uf2 /media/pi/RPI-RP2/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After a while, when the firmware has been uploaded to Pico, it will restart automatically, you can test the demo code according to the information on screen. Have fun!&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
* Q: Why is is so slow when I drag the circle ring on screen? &lt;br /&gt;
&amp;lt;pre&amp;gt;Because of the memory of pico is just 264KB, and graphic interface may consume a lot of memory to show the graphic widget.&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Q: Can I use MicroPython with LVGL to drive the screen? &lt;br /&gt;
&amp;lt;pre&amp;gt;No, it is lack of memory, so it may stack when you upload the firmware.&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Firmware Download==&lt;br /&gt;
* Firmware Demo: [[ File:Pico breadboard kit Plus verison demo firmware.zip  ]]&lt;br /&gt;
===How to use it?===&lt;br /&gt;
* Download the firmware demo and unzip it.&lt;br /&gt;
* Upload firmware to Pico Unplug Raspberry Pi Pico from Raspberry Pi and press boot_sel button and then connect the Raspberry Pi Pico back to Raspberry Pi.&lt;br /&gt;
* Copy the *.uf2 file to RPI-RP2 folder, that&#039;s it. &lt;br /&gt;
==GitHub==&lt;br /&gt;
* Repository on GitHub: [ https://github.com/geeekpi/pico_breakboard_kit ]&lt;br /&gt;
==Keywords==&lt;br /&gt;
* Pico Breadboard Kit, 3.5-inch touch screen, mini PSP joystick, RGB light, buzzer, buttons, prototyping, experimentation, interactive projects, user-friendly interface.&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=EP-0168&amp;diff=12874</id>
		<title>EP-0168</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=EP-0168&amp;diff=12874"/>
		<updated>2023-04-14T02:03:11Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: Update the compatibilty&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==LED Screw Terminal Hat for Raspberry Pi==&lt;br /&gt;
[[File:EP-0168-7.jpg|right|320px]]&lt;br /&gt;
&lt;br /&gt;
==Descriptions==&lt;br /&gt;
LED Screw Terminal Hat for Raspberry Pi is a GPIO expansion board which is for easy connecting to the 40-Pins GPIO of Raspberry Pi and it can be observing the Pin status via LED indicators, once the GPIO has level changed, the led indicator will be blinking.&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
NOTE: Raspberry Pi board dose not include in the package, additional purchase required!!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* Compatibility: Raspberry Pi 40Pin GPIO (Raspberry Pi 4B/3B/3B+/zero/zero w/zero 2w)&lt;br /&gt;
* Easy to assemble&lt;br /&gt;
* Screw terminal &lt;br /&gt;
* GPIO LED indicator &lt;br /&gt;
* Stable connection for wiring circuit&lt;br /&gt;
* GPIO function mark sticky&lt;br /&gt;
&lt;br /&gt;
==Specifications==&lt;br /&gt;
* GPIO status LED and power 5V / 3.3V indication. &lt;br /&gt;
* GPIO output level high LED on, output level low LED off. &lt;br /&gt;
* 5V Red , 3.3V Red, GPIOs Light blue. &lt;br /&gt;
* The driving current of each LED is 4-6mA. &lt;br /&gt;
* Terminal block pitch 2.54mm/0.1&amp;quot;, wire size range 28AWG to 18AWG, strip length 4.5mm, screw M1.6 steel, pin header and cage copper.&lt;br /&gt;
* 2x20 positions header connect to Raspberry Pi board&lt;br /&gt;
* FR-4 fiber glass PCB, dual copper layers.&lt;br /&gt;
* M2.5 Mounting Hole&lt;br /&gt;
* Dimension: 61mm x 35mm x 20mm&lt;br /&gt;
[[File:EP-0168-13.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product Outlook&lt;br /&gt;
{|&lt;br /&gt;
|[[File:EP-0168-10.jpg|left|320px]]&lt;br /&gt;
|[[File:EP-0168-9.jpg|none|320px]]&lt;br /&gt;
|[[File:EP-0168-8.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
* Application scenario &lt;br /&gt;
[[File:EP-0168-6.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
[[File:EP-0168-4.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Assembled Status&lt;br /&gt;
{|&lt;br /&gt;
|[[File:EP-0168-1.jpg|left|320px]]&lt;br /&gt;
|[[File:EP-0168-2.jpg|none|320px]]&lt;br /&gt;
|[[File:EP-0168-3.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;font color=red &amp;gt;Note: Please make sure the white dot is against to GPIO Pin 2 (Physical Number 2，which is 5V), wrong direction may damage your Pi!!!&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How to assemble it==&lt;br /&gt;
* Peel off the protection film from both side of acrylic panel.&lt;br /&gt;
* Fix copper pillar to acrylic panel with M2.5 screws.&lt;br /&gt;
* Fix Raspberry Pi to acrylic panel with copper pillar and screws.&lt;br /&gt;
* Connect LED screw terminal hat to GPIO Pins.(make sure the white dot facing 5V on GPIO Pin) please Note that mark point position.&lt;br /&gt;
* Fix screw terminal hat with screws. &lt;br /&gt;
* Unscrew the terminal and insert jump wire, and screw it tight. (make sure the copper wire is connect to screw terminal properly)&lt;br /&gt;
&amp;lt;font color=red&amp;gt; The LED screw terminal hat does not have any protection circuit on the board, please double check the circuit that you build, wrong connection may damage your Pi, it is on your own risk.&amp;lt;/font&amp;gt;&lt;br /&gt;
[[File:EP-0168-14.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;
* 1 x LED screw terminal hat pack&lt;br /&gt;
[[File:EP-0168-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;
==Keywords==&lt;br /&gt;
* LED Screw Terminal Hat for Raspberry Pi, Screw terminal hat, 40pin screw terminal hat&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=EP-0136&amp;diff=11742</id>
		<title>EP-0136</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=EP-0136&amp;diff=11742"/>
		<updated>2021-12-01T02:44:32Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==UPS Plus==&lt;br /&gt;
[[File:UPS V2 1.jpg|right|320px]]&lt;br /&gt;
==Descriptions==&lt;br /&gt;
UPS Plus is a new generation of UPS power management module which supports OTA firmware upgrade and supports RTC onboard. &amp;lt;br&amp;gt;&lt;br /&gt;
And there are two INA219 chip onboard to detect batteries voltage and the voltage output from UPS Plus to Raspberry Pi.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Raspberry Model !! Compatibility  &lt;br /&gt;
|-&lt;br /&gt;
| Raspberry Pi A || &amp;lt;font color=green&amp;gt;YES&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi A+ ||&amp;lt;font color=green&amp;gt;YES&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Raspberry Pi B ||&amp;lt;font color=green&amp;gt;YES&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi B+ ||&amp;lt;font color=green&amp;gt;YES&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi 2B ||&amp;lt;font color=green&amp;gt;YES&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi 3B || &amp;lt;font color=green&amp;gt;YES&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi 3B+ || &amp;lt;font color=green&amp;gt;YES&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi 4B || &amp;lt;font color=green&amp;gt;YES&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi Zero || &amp;lt;font color=red&amp;gt;NO&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi Zero W ||&amp;lt;font color=red&amp;gt;NO&amp;lt;/font&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* Easy to install&lt;br /&gt;
* Enhanced power management&lt;br /&gt;
* Remote OTA firmware upgrade&lt;br /&gt;
* Programmable BACK-TO-AC auto power up&lt;br /&gt;
* Programmable sample period&lt;br /&gt;
* I2C communication&lt;br /&gt;
* Standalone RTC&lt;br /&gt;
* Support stacked battery design&lt;br /&gt;
===Specifications===&lt;br /&gt;
* Current/voltage monitoring of Raspberry Pi power supply port.&lt;br /&gt;
* Battery terminal current/voltage monitoring, supports two-way monitoring of charge and discharge.&lt;br /&gt;
* Independent RTC function.&lt;br /&gt;
* OTA function (supports forced upgrade mode and active upgrade mode).&lt;br /&gt;
* Power estimation&lt;br /&gt;
&amp;lt;pre&amp;gt;Note: At least one full charge and discharge cycle must be completed!)&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Adjustable sampling period.&lt;br /&gt;
* Support FCP, AFC, SFCP fast charge protocol.&lt;br /&gt;
* Support BC1.2 charging protocol.&lt;br /&gt;
* Battery temperature monitoring &lt;br /&gt;
&amp;lt;pre&amp;gt;Note: the forced temperature protection cannot be turned off, threshold: 65 degrees!&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Programmable Power Voltage Detector(PVD) function, Default value: 3.6V &lt;br /&gt;
* Incoming call self-start function.&lt;br /&gt;
* Power down memory function.&lt;br /&gt;
* Programmable shutdown / forced restart.&lt;br /&gt;
* Running time statistics &lt;br /&gt;
* Electrostatic protection.&lt;br /&gt;
* Linear compensation range discharge capacity: 5V 4.5A.&lt;br /&gt;
* Non-linear compensation range discharge capacity: 5V 8A.&lt;br /&gt;
* Charging capacity 4.5V 5A/5V 2.5A/9V 2A/12V 1.5A.&lt;br /&gt;
* Stacked battery design&lt;br /&gt;
&amp;lt;pre&amp;gt;NOTE: Stacked power board need to be special accessories.Can not support None official accessories.&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Use I2C communication without occupying additional ports.&lt;br /&gt;
* Support 4.2V 4.35V 4.4V 4.5V 18650 lithium battery &lt;br /&gt;
&amp;lt;pre&amp;gt;Note: Different types of batteries cannot be mixed!&amp;lt;/pre&amp;gt;&lt;br /&gt;
* After-sales data telemetry.&lt;br /&gt;
&lt;br /&gt;
===Register Mapping===&lt;br /&gt;
===USB Plus V5.0 Register Mapping Chart===&lt;br /&gt;
* 0x17 - Operation Mode&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address !! Function !! Range !! Unit&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 - 0x02 || Voltage of UPS&#039;s MCU || 2400 - 3600 || mV &lt;br /&gt;
|-&lt;br /&gt;
| 0x03 - 0x04 || Voltage of Pogopin&#039;s Bottom ||  0 - 5500 || mV &lt;br /&gt;
|-&lt;br /&gt;
| 0x05 - 0x06 || Voltage of Batteries&#039; Terminal ||  0 - 4500 || mV &lt;br /&gt;
|-&lt;br /&gt;
| 0x07 - 0x08 || Voltage of USB-C Charging Port ||  0 - 13500 || mV &lt;br /&gt;
|-&lt;br /&gt;
| 0x09 - 0x0A || Voltage of MicroUSB Charging Port ||  0 - 13500 || mV &lt;br /&gt;
|-&lt;br /&gt;
| 0x0B - 0x0C || Batteries Temperature ||  -20 - 65 || ℃ &lt;br /&gt;
|-&lt;br /&gt;
| 0x0D - 0x0E ||  Full Voltage ||  0 - 4500 || mV &lt;br /&gt;
|-&lt;br /&gt;
| 0x0F - 0x10 ||  Empty Voltage ||  0 - 4500 || mV &lt;br /&gt;
|-&lt;br /&gt;
| 0x11 - 0x12 ||  Protection Voltage ||  0 - 4500 || mV &lt;br /&gt;
|-&lt;br /&gt;
| 0x13 - 0x14 || Battery Remaining || 0 - 100 || % &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 - 0x16 || Sample Period || 1 - 1440 || Min&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || Power Status/Operation Mode ||  0/1 || Bool &lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || Shutdown Countdown ||  0(False)/10 - 255 || Bool/Sec &lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || Back-To-AC Auto Power up ||  0/1 || Bool&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || Restart Countdown  ||  0(False)/10- 255 || Bool/Sec&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B ||  Reset to Factory Defaults || 0/1 || Bool &lt;br /&gt;
|-&lt;br /&gt;
| 0x1C - 0x1F || Cumulative Running Time  ||  0 - 2147483647 ||  Sec &lt;br /&gt;
|-&lt;br /&gt;
| 0x20 - 0x23 ||  Accumulated Charging Time ||  0 - 2147483647|| Sec&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 - 0x27 || Running Time  ||  0 - 2147483647 || Sec&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 - 0x29 || Version ||  1 || Fixed &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || (FW.V5+) Battery Parameters self-programmed by user||  0/1 || Bool&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B - 0xEF || [Reserved] ||  NA || NA&lt;br /&gt;
|-&lt;br /&gt;
| 0xF0 - 0xFB || Serial Number ||  Device UID || Fixed&lt;br /&gt;
|-&lt;br /&gt;
| 0xFC - 0xFF || Factory Testing || NA || NA&lt;br /&gt;
|}&lt;br /&gt;
* 0x18 - OTA Firmware Upgrade Mode&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address !! Function  &lt;br /&gt;
|-&lt;br /&gt;
| 0x01 - 0x10 || Encrypted buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 - 0xEF || [Reserved]&lt;br /&gt;
|-&lt;br /&gt;
| 0xF0 - 0xFB || Serial Number&lt;br /&gt;
|-&lt;br /&gt;
| 0xFC - 0xFF || Factory Test&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product Outlook&lt;br /&gt;
{|&lt;br /&gt;
|[[File:UPS V2 1.jpg|left|320px]]&lt;br /&gt;
|[[File:UPS V2 2.jpg|left|320px]]&lt;br /&gt;
|[[File:UPS V2 3.jpg|left|320px]]&lt;br /&gt;
|}&lt;br /&gt;
* Application scenario&lt;br /&gt;
[[File:UPS V2 13.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
===PCB Drawing===&lt;br /&gt;
* PCBDOC File: [[ File:UPS PLUS PCBDOC.zip ]]&lt;br /&gt;
&lt;br /&gt;
===Function Area Display===&lt;br /&gt;
* Function Details &lt;br /&gt;
{|&lt;br /&gt;
|[[File:UPS V2 10.jpg|left|320px]]&lt;br /&gt;
|[[File:UPS V2 11.jpg|none|320px]]&lt;br /&gt;
|[[File:UPS V2 12.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===LED light status definition===&lt;br /&gt;
* Discharge Status &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Power C(%) !! LED1 !! LED2 !! LED3 !! LED4&lt;br /&gt;
|-&lt;br /&gt;
| C &amp;gt;= 75% ||  ON   || ON   ||   ON   ||  ON     &lt;br /&gt;
|-&lt;br /&gt;
| 50% &amp;lt;= C &amp;lt;75%	||   ON ||  ON  ||   ON   ||   OFF   &lt;br /&gt;
|-&lt;br /&gt;
| 25% &amp;lt;= C &amp;lt;50% ||  ON  ||  ON  ||    OFF  ||   OFF    &lt;br /&gt;
|-&lt;br /&gt;
| 0% &amp;lt;= C &amp;lt; 25% ||   ON || OFF  ||   OFF  ||   OFF  &lt;br /&gt;
|-&lt;br /&gt;
| Wrong Batteries Parameters ||   1.5Hz Blinking ||  OFF  ||    OFF  ||   OFF&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Charging Status &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Power C(%) !! LED1 !! LED2 !! LED3 !! LED4&lt;br /&gt;
|-&lt;br /&gt;
| 100% ||  ON   || ON   ||   ON   ||  ON     &lt;br /&gt;
|-&lt;br /&gt;
| 75% &amp;lt;= C||   ON ||  ON  ||   ON   ||   1.5Hz Blink&lt;br /&gt;
|-&lt;br /&gt;
| 50% &amp;lt;= C &amp;lt;75% ||  ON  ||  ON  ||     1.5Hz Blink  ||   OFF    &lt;br /&gt;
|-&lt;br /&gt;
| 25% &amp;lt;= C &amp;lt; 50% ||   ON || 1.5Hz Blink  ||   OFF  ||   OFF  &lt;br /&gt;
|-&lt;br /&gt;
|  C &amp;lt; 25% ||   1.5Hz Blinking ||  OFF  ||    OFF  ||   OFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==How To Assemble==&lt;br /&gt;
* How to Assemble&lt;br /&gt;
[[File:UPS V2 4-2.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How To Use==&lt;br /&gt;
===General Settings===&lt;br /&gt;
* Download the latest Raspbian OS image from: [ https://www.raspberrypi.org/software/operating-systems/ ]&lt;br /&gt;
* Unzip it and flash it to MicroSD card(TF card) with Etcher imaging tool. [ https://www.balena.io/etcher/ ]&lt;br /&gt;
* Follow the installation method to assemble the Raspberry Pi and UPS Plus.&lt;br /&gt;
* After booting up and make sure Raspberry Pi can access internet.&lt;br /&gt;
* Enable &amp;lt;font color=red&amp;gt;I2C function&amp;lt;/font&amp;gt; by using &amp;quot;raspi-config&amp;quot; tool, Navigate to &amp;quot;interface options&amp;quot; and select &amp;quot;I2C&amp;quot; and enable it follow the instructions.&lt;br /&gt;
&amp;lt;pre&amp;gt; NOTE: It is very important to enable I2C function on Raspberry Pi, If miss this step, Raspberry Pi will not detect UPSPLUS module.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt; sudo raspi-config&amp;lt;/pre&amp;gt; &lt;br /&gt;
* Install smbus2 library.&lt;br /&gt;
&amp;lt;pre&amp;gt;pip install smbus2&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Download repository from GitHub and entering the folder that contains demo code.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~ &lt;br /&gt;
git clone https://github.com/geeekpi/upsplus.git&lt;br /&gt;
cd upsplus/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Automatic Shutdown Protection===&lt;br /&gt;
* If you want to use one script to install upsplus&#039;s demo code, just follow the steps below.&lt;br /&gt;
* Open a terminal by press &amp;quot;Ctrl+ALT+T&amp;quot; or just click terminal icon on the task bar.&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -Lso- https://git.io/JLygb | bash &amp;lt;/pre&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -Lso- https://raw.githubusercontent.com/geeekpi/upsplus/main/install.sh | bash&amp;lt;/pre&amp;gt;&lt;br /&gt;
* When encountering low battery, it will automatically shut down and turn off the UPS and it will restart when AC power comes.&lt;br /&gt;
&lt;br /&gt;
===How To Update UPS Firmware via OTA ===&lt;br /&gt;
* Enter the OTA firmware upgrade mode:&lt;br /&gt;
===Method 1===&lt;br /&gt;
&amp;lt;font color=red&amp;gt;NOTE: Do not power off or disconnect the network during the upgrade process. If the upgrade fails, the UPS Pro will not work normally.&amp;lt;/font&amp;gt;&lt;br /&gt;
* Power off the Raspberry Pi.&lt;br /&gt;
* Cut off the external charging power (MicroUSB and USB-C)&lt;br /&gt;
* Take out all the batteries.&lt;br /&gt;
* Press and hold the UPS Pro switch key and insert the battery into the battery compartment.&lt;br /&gt;
At this time, the device will be forced to enter OTA mode.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;The function of the switch button will no longer be available at this time.&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Raspberry Pi will be running and please execute the following python script in the system terminal to complete the upgrade. &lt;br /&gt;
* Download python scripts from github:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~&lt;br /&gt;
git clone https://github.com/geeekpi/upsplus.git&lt;br /&gt;
cd ~/upsplus&lt;br /&gt;
python3 OTA_firmware_upgrade.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;font color=red&amp;gt;&amp;lt;b&amp;gt;The first time it runs, it may prompt that the device is not registered.If it is a legal device, just wait a few seconds and try again.&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
* UPS Pro Will be turned off after upgrading, Please unplug the power supply, remove the batteries from UPS Pro.&lt;br /&gt;
* Insert the batteries back to UPS Pro and then connect power supply and turn it on by press power switch.&lt;br /&gt;
&lt;br /&gt;
===Method 2===&lt;br /&gt;
* Open a terminal and typing: &lt;br /&gt;
&amp;lt;pre&amp;gt;i2cset -y 1 0x17 50 127 b&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Shutdown Raspberry Pi and remove all batteries and power supply.&lt;br /&gt;
* Insert batteries back into the battery slot.&lt;br /&gt;
* Execute OTA_firmware_upgrade.py python script in a terminal.&lt;br /&gt;
* UPS Pro Will be turned off after upgrading, Please unplug the power supply, remove the batteries from UPS Pro.&lt;br /&gt;
* Insert the batteries back to UPS Pro and then connect power supply and turn it on by press power switch.&lt;br /&gt;
&lt;br /&gt;
===How To Collect Data===&lt;br /&gt;
* Data Collection&lt;br /&gt;
Data collection will only collect information on abnormal voltage changes and battery charging and discharging status during equipment operation through UPS in order to provide better after-sales service, and will not collect your private information. &amp;lt;br&amp;gt;&lt;br /&gt;
Please rest assured that every UPS we sell will Have a unique serial number so that we can provide battery quality analysis and feedback.&amp;lt;br&amp;gt;&lt;br /&gt;
It submits your UPS Pro operating status information to the server provided by us through a python script.&amp;lt;br&amp;gt;&lt;br /&gt;
* Download Repository and execute:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~&lt;br /&gt;
curl -Lso- https://git.io/JLygb | bash&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
When encountering low battery, it will automatically shut down and turn off the UPS and it will restart when AC power comes.&lt;br /&gt;
&lt;br /&gt;
===How To Setup RTC===&lt;br /&gt;
====Using Overlays====&lt;br /&gt;
* Overlays are loaded using the &amp;quot;dtoverlay&amp;quot; config.txt setting. &lt;br /&gt;
As an example,consider I2C Real Time Clock drivers. In the pre-DT world these would be loaded&lt;br /&gt;
by writing a magic string comprising a device identifier and an I2C address to&lt;br /&gt;
a special file in /sys/class/i2c-adapter, having first loaded the driver for&lt;br /&gt;
the I2C interface and the RTC device - something like this:&lt;br /&gt;
PS: sudo su means use root user to operate the system file, otherwise you may encount an error: &amp;quot;Permission denied&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    sudo modprobe i2c-bcm2835&lt;br /&gt;
    sudo modprobe rtc-ds1307&lt;br /&gt;
    sudo su &lt;br /&gt;
    echo ds1307 0x68 &amp;gt; /sys/class/i2c-adapter/i2c-1/new_device&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
With DT enabled, this becomes a line in config.txt:&amp;lt;br&amp;gt;&lt;br /&gt;
Edit /boot/config.txt file via vim.tiny tool or nano in a terminal:&lt;br /&gt;
&amp;lt;code&amp;gt; sudo vim.tiny /boot/config.txt&amp;lt;/code&amp;gt;&amp;lt;/br&amp;gt; &lt;br /&gt;
And then add this parameter:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    dtoverlay=i2c-rtc,ds1307&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This causes the file /boot/overlays/i2c-rtc.dtbo to be loaded and a &amp;quot;node&amp;quot;&lt;br /&gt;
describing the DS1307 I2C device to be added to the Device Tree for the Pi. By&lt;br /&gt;
default it uses address 0x68, but this can be modified with an additional DT&lt;br /&gt;
parameter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    dtoverlay=i2c-rtc,ds1307,addr=0x68&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Parameters usually have default values, although certain parameters are&lt;br /&gt;
mandatory. See the list of overlays below for a description of the parameters&lt;br /&gt;
and their defaults.&lt;br /&gt;
&lt;br /&gt;
===For Raspberry Pi 4B ===&lt;br /&gt;
Here we assume that you have already burned the Raspbian Image into TF card and connect to your PC and logged in.&lt;br /&gt;
Open a terminal and modify /boot/config.txt file using what you favorate editor such as vim.tiny or nano, add parameters as following picture:&lt;br /&gt;
[[File:DS1307-4B(1).png|thumb|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; &amp;gt;&lt;br /&gt;
&#039;&#039;&#039;You can read /boot/overlay/README and find this info to add support for ds1307 I2C Real Time Clock device.&#039;&#039;&#039;&lt;br /&gt;
[[File:DS1307-4B(2).png|thumb|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; &amp;gt;&lt;br /&gt;
please ensure that /boot/config.txt file include two paramaters:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dtoverlay=i2c-rtc,ds1307 &lt;br /&gt;
dtparam=i2c_arm=on&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After that, please make sure you have disabled the &amp;quot;fake hwclock&amp;quot; which interferes with the &#039;real&#039; hwclock&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get -y remove fake-hwclock&lt;br /&gt;
sudo update-rc.d -f fake-hwclock remove&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now with the fake-hw clock off, you can start the original &#039;hardware clock&#039; script.&amp;lt;br&amp;gt;&lt;br /&gt;
Edit the script file /lib/udev/hwclock-set  with nano or vim editor and comment out these three lines:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if [ -e /run/systemd/system ] ; then&lt;br /&gt;
 exit 0&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Finally  result like this: &amp;lt;br&amp;gt;&lt;br /&gt;
[[File:DS1307-4B(6).png|thumb|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
save and reboot your RPi.&lt;br /&gt;
----&lt;br /&gt;
===How to test RTC===&lt;br /&gt;
* Open terminal and typing: &lt;br /&gt;
&amp;lt;pre&amp;gt;sudo hwclock -w &amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo hwclock &amp;lt;/pre&amp;gt;&lt;br /&gt;
* Result will be like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pi@upstest:~ $ sudo hwclock -w&lt;br /&gt;
pi@upstest:~ $ sudo hwclock&lt;br /&gt;
2021-05-12 11:41:23.601270+08:00&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===For Raspberry Pi 3B ===&lt;br /&gt;
Here we assume that you have already burned the Raspbian Image into TF card and connect to your PC and logged in.&lt;br /&gt;
Open a terminal and modify /boot/config.txt file using what you favorate editor such as vim.tiny or nano, add parameters as following picture:&lt;br /&gt;
[[File:Ds13076.png|thumb|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; &amp;gt;&lt;br /&gt;
&#039;&#039;&#039;You can read /boot/overlay/README and find this info to add support for ds1307 I2C Real Time Clock device.&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;Name:   i2c-rtc&lt;br /&gt;
Info:   Adds support for a number of I2C Real Time Clock devices&lt;br /&gt;
Load:   dtoverlay=i2c-rtc,&amp;lt;param&amp;gt;=&amp;lt;val&amp;gt;&lt;br /&gt;
Params: ds1307                  Select the DS1307 device&amp;lt;/pre&amp;gt;&lt;br /&gt;
please ensure that /boot/config.txt file include those three paramaters:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
device_tree=bcm2710-rpi-3-b.dtb&lt;br /&gt;
dtoverlay=i2c-rtc,ds1307&lt;br /&gt;
dtparam=i2c_arm=on&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After that, please make sure you have disabled the &amp;quot;fake hwclock&amp;quot; which interferes with the &#039;real&#039; hwclock&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get -y remove fake-hwclock&lt;br /&gt;
sudo update-rc.d -f fake-hwclock remove&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now with the fake-hw clock off, you can start the original &#039;hardware clock&#039; script.&amp;lt;br&amp;gt;&lt;br /&gt;
Edit the script file /lib/udev/hwclock-set  with nano or vim editor and comment out these three lines:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if [ -e /run/systemd/system ] ; then&lt;br /&gt;
 exit 0&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Finally  result like this: &amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Raspberry pi hwclock-set.png|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
save and reboot your RPi.&lt;br /&gt;
&lt;br /&gt;
===How To Adjust The Sampling Period===&lt;br /&gt;
* If you want to change the sampling interval, you can change it with the following demo code in python:&lt;br /&gt;
&amp;lt;font color=red&amp;gt;NOTE: Change the number of `SAMPLE_TIME` will adjust the sampling period: range from 2 to 60, unit minute. If the quality of the charger is not good, you need to increase the period, for example: adjust to 3~5, if the quality of the battery is not good, you need to decrease the sampling period, for example: 1~2 &amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* Demo code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import smbus&lt;br /&gt;
&lt;br /&gt;
DEVICE_BUS = 1&lt;br /&gt;
DEVICE_ADDR = 0x17&lt;br /&gt;
SAMPLE_TIME = 2  &lt;br /&gt;
&lt;br /&gt;
bus = smbus.SMBus(DEVICE_BUS)&lt;br /&gt;
&lt;br /&gt;
aReceiveBuf = []&lt;br /&gt;
aReceiveBuf.append(0x00)  &lt;br /&gt;
&lt;br /&gt;
bus.write_byte_data(DEVICE_ADDR, 21,SAMPLE_TIME &amp;amp; 0xFF)&lt;br /&gt;
bus.write_byte_data(DEVICE_ADDR, 22,(SAMPLE_TIME &amp;gt;&amp;gt; 8)&amp;amp; 0xFF)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Setting Sampling Period to: %d Min&amp;quot; % SAMPLE_TIME)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Save it to a file and execute it:&lt;br /&gt;
&amp;lt;pre&amp;gt;python3 ups_change_sample_period.py&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== How to detect if the battery is dead ===&lt;br /&gt;
* There are two python scripts in the location /home/pi/bin/ after executing command &amp;quot;curl -Lso- https://raw.githubusercontent.com/geeekpi/upsplus/main/install.sh | bash&amp;quot; , as following picture:&lt;br /&gt;
[[File:Ups location.jpg|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Execute the `upsPlus.py` script &amp;lt;font color=red&amp;gt;&amp;lt;strong&amp;gt;2-3&amp;lt;/strong&amp;gt;&amp;lt;/font&amp;gt;times through the following commands to determine whether the battery is continuously discharging, and if the charge is less than the discharge, the battery will soon be lower than the set shutdown threshold and shut down.&lt;br /&gt;
At this time, you need to replace the battery, or change the sampling period, or replace the high-quality fast charger plug&lt;br /&gt;
&amp;lt;pre&amp;gt; python3 /home/pi/bin/upsPlus.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
* For example:&lt;br /&gt;
[[File:Ups batteries status.jpg|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
The battery shown in the figure：&amp;lt;font color=red&amp;gt;Battery Current (discharge) Rate: 1553.902 mA&amp;lt;/font&amp;gt;, But the last information was: &amp;lt;font color=red&amp;gt;Currently charging via Micro USB Port.&amp;lt;/font&amp;gt; &lt;br /&gt;
There is a charging port inserted, but the battery discharge is displayed, which means the battery is bad.&lt;br /&gt;
&lt;br /&gt;
===How to Setup back-to-ac function manully===&lt;br /&gt;
* Login to Raspberry Pi and open a terminal, Typing following command:&lt;br /&gt;
&amp;lt;pre&amp;gt; i2cset -y 1 0x17 25 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Check if the command is enabled the function by read the register value:&lt;br /&gt;
&amp;lt;pre&amp;gt; i2cget -y 1 0x17 25 &amp;lt;/pre&amp;gt;&lt;br /&gt;
===How to Setup shuting down countdown function manully===&lt;br /&gt;
* Login to Raspberry Pi and open a terminal, Typing following command:&lt;br /&gt;
&amp;lt;pre&amp;gt; i2cset -y 1 0x17 24 20&amp;lt;/pre&amp;gt;&lt;br /&gt;
PS: 20 means countdown number is 20 seconds, you can change to another integer number. &lt;br /&gt;
* Check if the command is enabled the function by read the register value:&lt;br /&gt;
&amp;lt;pre&amp;gt; i2cget -y 1 0x17 25 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===How to self-diagnose UPS PLUS ===&lt;br /&gt;
* Please visit this URL in browser:  [ https://api.52pi.com/ ]&lt;br /&gt;
[[File:Ups diagnosistool.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Filling the blank with your Deivce UIDs which can be getting from /home/pi/bin/upsPlus_iot.py script, open a terminal and typing:&lt;br /&gt;
&amp;lt;pre&amp;gt; python3 /home/pi/bin/upsPlus_iot.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:Ups uids.jpg|left | 500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Copy UID0, UID1, UID2 to browser and press &amp;quot;Diagnosis&amp;quot; button on the page:&lt;br /&gt;
[[File:Ups dignosis.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Then you will get the test results and suggestions on the page.&lt;br /&gt;
[[File:Dignosis result.png|left|500px]]&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; Pink color means it is critical message and Blue color means suggestion.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Parameter freezing issue==&lt;br /&gt;
According to our tracking test, about 0.8% of users after a period of time, read the UPS parameters found that the value no longer changes, the cause of this is complex, and the number of users is small, we are working to solve this problem, if you encounter this problem, please try to completely reinstall the battery, power supply and Raspberry Pi and observe again, usually the problem is solved, if there are still problems, please contact us.&lt;br /&gt;
&lt;br /&gt;
==Battery Logger==&lt;br /&gt;
* Thanks for Nordln&#039;s help.&lt;br /&gt;
* UPS Plus Battery Logger: [ https://github.com/Nordln/upsplusv5-battery-logger.git ]&lt;br /&gt;
[[File:Ups logger.jpg|left|500px]]&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;
* 1 x UPS Plus For Raspberry Pi&lt;br /&gt;
* 4 x M2.5 copper pillar &lt;br /&gt;
* 4 x M2.5 screws&lt;br /&gt;
* 4 x M2.5 long copper stick&lt;br /&gt;
* 4 x M2.5 nuts&lt;br /&gt;
* 1 x Acrylic shield&lt;br /&gt;
* 1 x Instructions&lt;br /&gt;
[[File:UPS V2 9.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Tutorial Video==&lt;br /&gt;
* Youtube link:&lt;br /&gt;
[ https://youtu.be/jQljQJ41I5A ]&lt;br /&gt;
* QRCODE:&lt;br /&gt;
[[File:Upsplus tutorial1.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
* Q: How to set battery capacity, Full voltage, low voltage?&lt;br /&gt;
** A: It only affects the charging method and the calculation of the charge level, the protection threshold, and does not change the actual battery parameters. more info please refer to: [ https://github.com/geeekpi/upsplus/issues/80 ]&lt;br /&gt;
* Q: Why it will turn on my Raspberry Pi once I plug the power supply into the charging port?  &lt;br /&gt;
** A: When the BACK-TO-AC function of the Raspberry Pi is turned on, the Raspberry Pi will be automatically activated when the external power supply is connected to the charging port. This setting is for some applications that use the Raspberry Pi as a server scenario, because the external power supply After the power is supplied, the UPS detects the charging status and executes the automatic startup operation, so that some scenes where the Raspberry Pi is placed in the computer room can easily start the Raspberry Pi, no need to press the button to start the UPS, if you want Using BACK-TO-AC, you can also turn off this function. After turning off this function, you need to press the power button again every time you start it. &lt;br /&gt;
&lt;br /&gt;
* Q: Why does my UPS shut down suddently and I can not turn it on? &lt;br /&gt;
** A: Please use power supply with QC protocol and try to change batteries with better quality. we recommend you to connect QC power supply while your UPS need to provide service at 7x24.  &lt;br /&gt;
* Q: Why does the battery light go off sometime and lights up in a while? &lt;br /&gt;
** A: This is because the power chip performs battery re-sampling, and the purpose is that the data of inferior batteries is inaccurate during the sampling process.&lt;br /&gt;
* Q: Why is the power cut off every once in a while? &lt;br /&gt;
** A: Please check the battery charging current, the data discharge direction or the charging direction. If the load is too large, the charging may not be enough, which will cause this problem.&lt;br /&gt;
* Q: What kind of wall charger should I use? &lt;br /&gt;
** A: If the load is normal, it is recommended to use an ordinary 5V@2A charging head. If you need to carry a slightly higher load, it is recommended to use a fast charging source. We support FCP, AFC, SFCP protocols Fast charging source.&lt;br /&gt;
* Q: Can I directly input 9V and 12V to the USB port?&lt;br /&gt;
**  A: No, if you must do this, you must remove the DP, DM and other related detection pins, and ensure that the power supply is stable.&lt;br /&gt;
* Q: I heard howling, why is this? &lt;br /&gt;
** A: Because of the no-load protection mechanism, the howling will disappear after the load is installed.&lt;br /&gt;
* Q: using firmware v. 4, when AC power comes back on during the shutdown countdown, I realized that the 5V supply for the raspberry pi is not switched off at the end of the countdown. so, after shutdown of the operating system, the raspberry pi will never restart automatically.&lt;br /&gt;
IMHO the following would be better: once a shutdown countdown starts, and we have the Back-To-AC Auto Power UP flag set, then:&lt;br /&gt;
the shutdown sequence should proceed to its end,&lt;br /&gt;
switch off the 5V-power for a certain time (a couple of seconds maybe), regardless of AC Power.&lt;br /&gt;
switch the 5V back on when AC power is restored.&lt;br /&gt;
otherwise, I am very happy with the product.&lt;br /&gt;
one more thing: would be nice to have some sort of alert for new firmware releases and release notes for these.&lt;br /&gt;
** A: Please refer to this URL: https://github.com/geeekpi/upsplus/issues/7&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
* UPS Plus, GeeekPi UPS V5, UPS for Raspberry Pi&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=EP-0136&amp;diff=10484</id>
		<title>EP-0136</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=EP-0136&amp;diff=10484"/>
		<updated>2021-06-20T11:36:13Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: /* How to self-diagnose UPS PLUS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==UPS Plus==&lt;br /&gt;
[[File:UPS V2 1.jpg|right|320px]]&lt;br /&gt;
==Descriptions==&lt;br /&gt;
UPS Plus is a new generation of UPS power management module which supports OTA firmware upgrade and supports RTC onboard. &amp;lt;br&amp;gt;&lt;br /&gt;
And there are two INA219 chip onboard to detect batteries voltage and the voltage output from UPS Plus to Raspberry Pi.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Raspberry Model !! Compatibility  &lt;br /&gt;
|-&lt;br /&gt;
| Raspberry Pi A || &amp;lt;font color=green&amp;gt;YES&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi A+ ||&amp;lt;font color=green&amp;gt;YES&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Raspberry Pi B ||&amp;lt;font color=green&amp;gt;YES&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi B+ ||&amp;lt;font color=green&amp;gt;YES&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi 2B ||&amp;lt;font color=green&amp;gt;YES&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi 3B || &amp;lt;font color=green&amp;gt;YES&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi 3B+ || &amp;lt;font color=green&amp;gt;YES&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi 4B || &amp;lt;font color=green&amp;gt;YES&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi Zero || &amp;lt;font color=red&amp;gt;NO&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi Zero W ||&amp;lt;font color=red&amp;gt;NO&amp;lt;/font&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* Easy to install&lt;br /&gt;
* Enhanced power management&lt;br /&gt;
* Remote OTA firmware upgrade&lt;br /&gt;
* Programmable BACK-TO-AC auto power up&lt;br /&gt;
* Programmable sample period&lt;br /&gt;
* I2C communication&lt;br /&gt;
* Standalone RTC&lt;br /&gt;
* Support stacked battery design&lt;br /&gt;
===Specifications===&lt;br /&gt;
* Current/voltage monitoring of Raspberry Pi power supply port.&lt;br /&gt;
* Battery terminal current/voltage monitoring, supports two-way monitoring of charge and discharge.&lt;br /&gt;
* Independent RTC function.&lt;br /&gt;
* OTA function (supports forced upgrade mode and active upgrade mode).&lt;br /&gt;
* Power estimation&lt;br /&gt;
&amp;lt;pre&amp;gt;Note: At least one full charge and discharge cycle must be completed!)&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Adjustable sampling period.&lt;br /&gt;
* Support FCP, AFC, SFCP fast charge protocol.&lt;br /&gt;
* Support BC1.2 charging protocol.&lt;br /&gt;
* Battery temperature monitoring &lt;br /&gt;
&amp;lt;pre&amp;gt;Note: the forced temperature protection cannot be turned off, threshold: 65 degrees!&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Programmable Power Voltage Detector(PVD) function, Default value: 3.6V &lt;br /&gt;
* Incoming call self-start function.&lt;br /&gt;
* Power down memory function.&lt;br /&gt;
* Programmable shutdown / forced restart.&lt;br /&gt;
* Running time statistics &lt;br /&gt;
* Electrostatic protection.&lt;br /&gt;
* Linear compensation range discharge capacity: 5V 4.5A.&lt;br /&gt;
* Non-linear compensation range discharge capacity: 5V 8A.&lt;br /&gt;
* Charging capacity 4.5V 5A/5V 2.5A/9V 2A/12V 1.5A.&lt;br /&gt;
* Stacked battery design&lt;br /&gt;
&amp;lt;pre&amp;gt;NOTE: Stacked power board need to be special accessories.Can not support None official accessories.&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Use I2C communication without occupying additional ports.&lt;br /&gt;
* Support 4.2V 4.35V 4.4V 4.5V lithium battery &lt;br /&gt;
&amp;lt;pre&amp;gt;Note: Different types of batteries cannot be mixed!&amp;lt;/pre&amp;gt;&lt;br /&gt;
* After-sales data telemetry.&lt;br /&gt;
&lt;br /&gt;
===Register Mapping===&lt;br /&gt;
===USB Plus V5.0 Register Mapping Chart===&lt;br /&gt;
* 0x17 - Operation Mode&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address !! Function !! Range !! Unit&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 - 0x02 || Voltage of UPS&#039;s MCU || 2400 - 3600 || mV &lt;br /&gt;
|-&lt;br /&gt;
| 0x03 - 0x04 || Voltage of Pogopin&#039;s Bottom ||  0 - 5500 || mV &lt;br /&gt;
|-&lt;br /&gt;
| 0x05 - 0x06 || Voltage of Batteries&#039; Terminal ||  0 - 4500 || mV &lt;br /&gt;
|-&lt;br /&gt;
| 0x07 - 0x08 || Voltage of USB-C Charging Port ||  0 - 13500 || mV &lt;br /&gt;
|-&lt;br /&gt;
| 0x09 - 0x0A || Voltage of MicroUSB Charging Port ||  0 - 13500 || mV &lt;br /&gt;
|-&lt;br /&gt;
| 0x0B - 0x0C || Batteries Temperature ||  -20 - 65 || ℃ &lt;br /&gt;
|-&lt;br /&gt;
| 0x0D - 0x0E ||  Full Voltage ||  0 - 4500 || mV &lt;br /&gt;
|-&lt;br /&gt;
| 0x0F - 0x10 ||  Empty Voltage ||  0 - 4500 || mV &lt;br /&gt;
|-&lt;br /&gt;
| 0x11 - 0x12 ||  Protection Voltage ||  0 - 4500 || mV &lt;br /&gt;
|-&lt;br /&gt;
| 0x13 - 0x14 || Battery Remaining || 0 - 100 || % &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 - 0x16 || Sample Period || 1 - 1440 || Min&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || Power Status/Operation Mode ||  0/1 || Bool &lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || Shutdown Countdown ||  0(False)/10 - 255 || Bool/Sec &lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || Back-To-AC Auto Power up ||  0/1 || Bool&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || Restart Countdown  ||  0(False)/10- 255 || Bool/Sec&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B ||  Reset to Factory Defaults || 0/1 || Bool &lt;br /&gt;
|-&lt;br /&gt;
| 0x1C - 0x1F || Cumulative Running Time  ||  0 - 2147483647 ||  Sec &lt;br /&gt;
|-&lt;br /&gt;
| 0x20 - 0x23 ||  Accumulated Charging Time ||  0 - 2147483647|| Sec&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 - 0x27 || Running Time  ||  0 - 2147483647 || Sec&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 - 0x29 || Version ||  1 || Fixed &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || (FW.V5+) Battery Parameters self-programmed by user||  0/1 || Bool&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B - 0xEF || [Reserved] ||  NA || NA&lt;br /&gt;
|-&lt;br /&gt;
| 0xF0 - 0xFB || Serial Number ||  Device UID || Fixed&lt;br /&gt;
|-&lt;br /&gt;
| 0xFC - 0xFF || Factory Testing || NA || NA&lt;br /&gt;
|}&lt;br /&gt;
* 0x18 - OTA Firmware Upgrade Mode&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address !! Function  &lt;br /&gt;
|-&lt;br /&gt;
| 0x01 - 0x10 || Encrypted buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 - 0xEF || [Reserved]&lt;br /&gt;
|-&lt;br /&gt;
| 0xF0 - 0xFB || Serial Number&lt;br /&gt;
|-&lt;br /&gt;
| 0xFC - 0xFF || Factory Test&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product Outlook&lt;br /&gt;
{|&lt;br /&gt;
|[[File:UPS V2 1.jpg|left|320px]]&lt;br /&gt;
|[[File:UPS V2 2.jpg|left|320px]]&lt;br /&gt;
|[[File:UPS V2 3.jpg|left|320px]]&lt;br /&gt;
|}&lt;br /&gt;
* Application scenario&lt;br /&gt;
[[File:UPS V2 13.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
===PCB Drawing===&lt;br /&gt;
* PCBDOC File: [[ File:UPS PLUS PCBDOC.zip ]]&lt;br /&gt;
&lt;br /&gt;
===Function Area Display===&lt;br /&gt;
* Function Details &lt;br /&gt;
{|&lt;br /&gt;
|[[File:UPS V2 10.jpg|left|320px]]&lt;br /&gt;
|[[File:UPS V2 11.jpg|none|320px]]&lt;br /&gt;
|[[File:UPS V2 12.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===LED light status definition===&lt;br /&gt;
* Discharge Status &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Power C(%) !! LED1 !! LED2 !! LED3 !! LED4&lt;br /&gt;
|-&lt;br /&gt;
| C &amp;gt;= 75% ||  ON   || ON   ||   ON   ||  ON     &lt;br /&gt;
|-&lt;br /&gt;
| 50% &amp;lt;= C &amp;lt;75%	||   ON ||  ON  ||   ON   ||   OFF   &lt;br /&gt;
|-&lt;br /&gt;
| 25% &amp;lt;= C &amp;lt;50% ||  ON  ||  ON  ||    OFF  ||   OFF    &lt;br /&gt;
|-&lt;br /&gt;
| 0% &amp;lt;= C &amp;lt; 25% ||   ON || OFF  ||   OFF  ||   OFF  &lt;br /&gt;
|-&lt;br /&gt;
| Wrong Batteries Parameters ||   1.5Hz Blinking ||  OFF  ||    OFF  ||   OFF&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Charging Status &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Power C(%) !! LED1 !! LED2 !! LED3 !! LED4&lt;br /&gt;
|-&lt;br /&gt;
| 100% ||  ON   || ON   ||   ON   ||  ON     &lt;br /&gt;
|-&lt;br /&gt;
| 75% &amp;lt;= C||   ON ||  ON  ||   ON   ||   1.5Hz Blink&lt;br /&gt;
|-&lt;br /&gt;
| 50% &amp;lt;= C &amp;lt;75% ||  ON  ||  ON  ||     1.5Hz Blink  ||   OFF    &lt;br /&gt;
|-&lt;br /&gt;
| 25% &amp;lt;= C &amp;lt; 50% ||   ON || 1.5Hz Blink  ||   OFF  ||   OFF  &lt;br /&gt;
|-&lt;br /&gt;
|  C &amp;lt; 25% ||   1.5Hz Blinking ||  OFF  ||    OFF  ||   OFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==How To Assemble==&lt;br /&gt;
* How to Assemble&lt;br /&gt;
[[File:UPS V2 4-2.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How To Use==&lt;br /&gt;
===General Settings===&lt;br /&gt;
* Download the latest Raspbian OS image from: [ https://www.raspberrypi.org/software/operating-systems/ ]&lt;br /&gt;
* Unzip it and flash it to MicroSD card(TF card) with Etcher imaging tool. [ https://www.balena.io/etcher/ ]&lt;br /&gt;
* Follow the installation method to assemble the Raspberry Pi and UPS Plus.&lt;br /&gt;
* After booting up and make sure Raspberry Pi can access internet.&lt;br /&gt;
* Enable &amp;lt;font color=red&amp;gt;I2C function&amp;lt;/font&amp;gt; by using &amp;quot;raspi-config&amp;quot; tool, Navigate to &amp;quot;interface options&amp;quot; and select &amp;quot;I2C&amp;quot; and enable it follow the instructions.&lt;br /&gt;
&amp;lt;pre&amp;gt; NOTE: It is very important to enable I2C function on Raspberry Pi, If miss this step, Raspberry Pi will not detect UPSPLUS module.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt; sudo raspi-config&amp;lt;/pre&amp;gt; &lt;br /&gt;
* Install smbus2 library.&lt;br /&gt;
&amp;lt;pre&amp;gt;pip install smbus2&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Download repository from GitHub and entering the folder that contains demo code.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~ &lt;br /&gt;
git clone https://github.com/geeekpi/upsplus.git&lt;br /&gt;
cd upsplus/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Automatic Shutdown Protection===&lt;br /&gt;
* If you want to use one script to install upsplus&#039;s demo code, just follow the steps below.&lt;br /&gt;
* Open a terminal by press &amp;quot;Ctrl+ALT+T&amp;quot; or just click terminal icon on the task bar.&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -Lso- https://git.io/JLygb | bash &amp;lt;/pre&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -Lso- https://raw.githubusercontent.com/geeekpi/upsplus/main/install.sh | bash&amp;lt;/pre&amp;gt;&lt;br /&gt;
* When encountering low battery, it will automatically shut down and turn off the UPS and it will restart when AC power comes.&lt;br /&gt;
&lt;br /&gt;
===How To Update UPS Firmware via OTA ===&lt;br /&gt;
* Enter the OTA firmware upgrade mode:&lt;br /&gt;
===Method 1===&lt;br /&gt;
&amp;lt;font color=red&amp;gt;NOTE: Do not power off or disconnect the network during the upgrade process. If the upgrade fails, the UPS Pro will not work normally.&amp;lt;/font&amp;gt;&lt;br /&gt;
* Power off the Raspberry Pi.&lt;br /&gt;
* Cut off the external charging power (MicroUSB and USB-C)&lt;br /&gt;
* Take out all the batteries.&lt;br /&gt;
* Press and hold the UPS Pro switch key and insert the battery into the battery compartment.&lt;br /&gt;
At this time, the device will be forced to enter OTA mode.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;The function of the switch button will no longer be available at this time.&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Raspberry Pi will be running and please execute the following python script in the system terminal to complete the upgrade. &lt;br /&gt;
* Download python scripts from github:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~&lt;br /&gt;
git clone https://github.com/geeekpi/upsplus.git&lt;br /&gt;
cd ~/upsplus&lt;br /&gt;
python3 OTA_firmware_upgrade.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;font color=red&amp;gt;&amp;lt;b&amp;gt;The first time it runs, it may prompt that the device is not registered.If it is a legal device, just wait a few seconds and try again.&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
* UPS Pro Will be turned off after upgrading, Please unplug the power supply, remove the batteries from UPS Pro.&lt;br /&gt;
* Insert the batteries back to UPS Pro and then connect power supply and turn it on by press power switch.&lt;br /&gt;
&lt;br /&gt;
===Method 2===&lt;br /&gt;
* Open a terminal and typing: &lt;br /&gt;
&amp;lt;pre&amp;gt;i2cset -y 1 0x17 50 127 b&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Shutdown Raspberry Pi and remove all batteries and power supply.&lt;br /&gt;
* Insert batteries back into the battery slot.&lt;br /&gt;
* Execute OTA_firmware_upgrade.py python script in a terminal.&lt;br /&gt;
* UPS Pro Will be turned off after upgrading, Please unplug the power supply, remove the batteries from UPS Pro.&lt;br /&gt;
* Insert the batteries back to UPS Pro and then connect power supply and turn it on by press power switch.&lt;br /&gt;
&lt;br /&gt;
===How To Collect Data===&lt;br /&gt;
* Data Collection&lt;br /&gt;
Data collection will only collect information on abnormal voltage changes and battery charging and discharging status during equipment operation through UPS in order to provide better after-sales service, and will not collect your private information. &amp;lt;br&amp;gt;&lt;br /&gt;
Please rest assured that every UPS we sell will Have a unique serial number so that we can provide battery quality analysis and feedback.&amp;lt;br&amp;gt;&lt;br /&gt;
It submits your UPS Pro operating status information to the server provided by us through a python script.&amp;lt;br&amp;gt;&lt;br /&gt;
* Download Repository and execute:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~&lt;br /&gt;
curl -Lso- https://git.io/JLygb | bash&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
When encountering low battery, it will automatically shut down and turn off the UPS and it will restart when AC power comes.&lt;br /&gt;
&lt;br /&gt;
===How To Setup RTC===&lt;br /&gt;
====Using Overlays====&lt;br /&gt;
* Overlays are loaded using the &amp;quot;dtoverlay&amp;quot; config.txt setting. &lt;br /&gt;
As an example,consider I2C Real Time Clock drivers. In the pre-DT world these would be loaded&lt;br /&gt;
by writing a magic string comprising a device identifier and an I2C address to&lt;br /&gt;
a special file in /sys/class/i2c-adapter, having first loaded the driver for&lt;br /&gt;
the I2C interface and the RTC device - something like this:&lt;br /&gt;
PS: sudo su means use root user to operate the system file, otherwise you may encount an error: &amp;quot;Permission denied&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    sudo modprobe i2c-bcm2835&lt;br /&gt;
    sudo modprobe rtc-ds1307&lt;br /&gt;
    sudo su &lt;br /&gt;
    echo ds1307 0x68 &amp;gt; /sys/class/i2c-adapter/i2c-1/new_device&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
With DT enabled, this becomes a line in config.txt:&amp;lt;br&amp;gt;&lt;br /&gt;
Edit /boot/config.txt file via vim.tiny tool or nano in a terminal:&lt;br /&gt;
&amp;lt;code&amp;gt; sudo vim.tiny /boot/config.txt&amp;lt;/code&amp;gt;&amp;lt;/br&amp;gt; &lt;br /&gt;
And then add this parameter:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    dtoverlay=i2c-rtc,ds1307&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This causes the file /boot/overlays/i2c-rtc.dtbo to be loaded and a &amp;quot;node&amp;quot;&lt;br /&gt;
describing the DS1307 I2C device to be added to the Device Tree for the Pi. By&lt;br /&gt;
default it uses address 0x68, but this can be modified with an additional DT&lt;br /&gt;
parameter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    dtoverlay=i2c-rtc,ds1307,addr=0x68&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Parameters usually have default values, although certain parameters are&lt;br /&gt;
mandatory. See the list of overlays below for a description of the parameters&lt;br /&gt;
and their defaults.&lt;br /&gt;
&lt;br /&gt;
===For Raspberry Pi 4B ===&lt;br /&gt;
Here we assume that you have already burned the Raspbian Image into TF card and connect to your PC and logged in.&lt;br /&gt;
Open a terminal and modify /boot/config.txt file using what you favorate editor such as vim.tiny or nano, add parameters as following picture:&lt;br /&gt;
[[File:DS1307-4B(1).png|thumb|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; &amp;gt;&lt;br /&gt;
&#039;&#039;&#039;You can read /boot/overlay/README and find this info to add support for ds1307 I2C Real Time Clock device.&#039;&#039;&#039;&lt;br /&gt;
[[File:DS1307-4B(2).png|thumb|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; &amp;gt;&lt;br /&gt;
please ensure that /boot/config.txt file include two paramaters:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dtoverlay=i2c-rtc,ds1307 &lt;br /&gt;
dtparam=i2c_arm=on&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After that, please make sure you have disabled the &amp;quot;fake hwclock&amp;quot; which interferes with the &#039;real&#039; hwclock&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get -y remove fake-hwclock&lt;br /&gt;
sudo update-rc.d -f fake-hwclock remove&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now with the fake-hw clock off, you can start the original &#039;hardware clock&#039; script.&amp;lt;br&amp;gt;&lt;br /&gt;
Edit the script file /lib/udev/hwclock-set  with nano or vim editor and comment out these three lines:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if [ -e /run/systemd/system ] ; then&lt;br /&gt;
 exit 0&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Finally  result like this: &amp;lt;br&amp;gt;&lt;br /&gt;
[[File:DS1307-4B(6).png|thumb|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
save and reboot your RPi.&lt;br /&gt;
----&lt;br /&gt;
===How to test RTC===&lt;br /&gt;
* Open terminal and typing: &lt;br /&gt;
&amp;lt;pre&amp;gt;sudo hwclock -w &amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo hwclock &amp;lt;/pre&amp;gt;&lt;br /&gt;
* Result will be like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pi@upstest:~ $ sudo hwclock -w&lt;br /&gt;
pi@upstest:~ $ sudo hwclock&lt;br /&gt;
2021-05-12 11:41:23.601270+08:00&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===For Raspberry Pi 3B ===&lt;br /&gt;
Here we assume that you have already burned the Raspbian Image into TF card and connect to your PC and logged in.&lt;br /&gt;
Open a terminal and modify /boot/config.txt file using what you favorate editor such as vim.tiny or nano, add parameters as following picture:&lt;br /&gt;
[[File:Ds13076.png|thumb|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; &amp;gt;&lt;br /&gt;
&#039;&#039;&#039;You can read /boot/overlay/README and find this info to add support for ds1307 I2C Real Time Clock device.&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;Name:   i2c-rtc&lt;br /&gt;
Info:   Adds support for a number of I2C Real Time Clock devices&lt;br /&gt;
Load:   dtoverlay=i2c-rtc,&amp;lt;param&amp;gt;=&amp;lt;val&amp;gt;&lt;br /&gt;
Params: ds1307                  Select the DS1307 device&amp;lt;/pre&amp;gt;&lt;br /&gt;
please ensure that /boot/config.txt file include those three paramaters:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
device_tree=bcm2710-rpi-3-b.dtb&lt;br /&gt;
dtoverlay=i2c-rtc,ds1307&lt;br /&gt;
dtparam=i2c_arm=on&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After that, please make sure you have disabled the &amp;quot;fake hwclock&amp;quot; which interferes with the &#039;real&#039; hwclock&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get -y remove fake-hwclock&lt;br /&gt;
sudo update-rc.d -f fake-hwclock remove&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now with the fake-hw clock off, you can start the original &#039;hardware clock&#039; script.&amp;lt;br&amp;gt;&lt;br /&gt;
Edit the script file /lib/udev/hwclock-set  with nano or vim editor and comment out these three lines:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if [ -e /run/systemd/system ] ; then&lt;br /&gt;
 exit 0&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Finally  result like this: &amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Raspberry pi hwclock-set.png|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
save and reboot your RPi.&lt;br /&gt;
&lt;br /&gt;
===How To Adjust The Sampling Period===&lt;br /&gt;
* If you want to change the sampling interval, you can change it with the following demo code in python:&lt;br /&gt;
&amp;lt;font color=red&amp;gt;NOTE: Change the number of `SAMPLE_TIME` will adjust the sampling period: range from 2 to 60, unit minute. If the quality of the charger is not good, you need to increase the period, for example: adjust to 3~5, if the quality of the battery is not good, you need to decrease the sampling period, for example: 1~2 &amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* Demo code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import smbus&lt;br /&gt;
&lt;br /&gt;
DEVICE_BUS = 1&lt;br /&gt;
DEVICE_ADDR = 0x17&lt;br /&gt;
SAMPLE_TIME = 2  &lt;br /&gt;
&lt;br /&gt;
bus = smbus.SMBus(DEVICE_BUS)&lt;br /&gt;
&lt;br /&gt;
aReceiveBuf = []&lt;br /&gt;
aReceiveBuf.append(0x00)  &lt;br /&gt;
&lt;br /&gt;
bus.write_byte_data(DEVICE_ADDR, 21,SAMPLE_TIME &amp;amp; 0xFF)&lt;br /&gt;
bus.write_byte_data(DEVICE_ADDR, 22,(SAMPLE_TIME &amp;gt;&amp;gt; 8)&amp;amp; 0xFF)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Setting Sampling Period to: %d Min&amp;quot; % SAMPLE_TIME)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Save it to a file and execute it:&lt;br /&gt;
&amp;lt;pre&amp;gt;python3 ups_change_sample_period.py&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== How to detect if the battery is dead ===&lt;br /&gt;
* There are two python scripts in the location /home/pi/bin/ after executing command &amp;quot;curl -Lso- https://raw.githubusercontent.com/geeekpi/upsplus/main/install.sh | bash&amp;quot; , as following picture:&lt;br /&gt;
[[File:Ups location.jpg|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Execute the `upsPlus.py` script &amp;lt;font color=red&amp;gt;&amp;lt;strong&amp;gt;2-3&amp;lt;/strong&amp;gt;&amp;lt;/font&amp;gt;times through the following commands to determine whether the battery is continuously discharging, and if the charge is less than the discharge, the battery will soon be lower than the set shutdown threshold and shut down.&lt;br /&gt;
At this time, you need to replace the battery, or change the sampling period, or replace the high-quality fast charger plug&lt;br /&gt;
&amp;lt;pre&amp;gt; python3 /home/pi/bin/upsPlus.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
* For example:&lt;br /&gt;
[[File:Ups batteries status.jpg|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
The battery shown in the figure：&amp;lt;font color=red&amp;gt;Battery Current (discharge) Rate: 1553.902 mA&amp;lt;/font&amp;gt;, But the last information was: &amp;lt;font color=red&amp;gt;Currently charging via Micro USB Port.&amp;lt;/font&amp;gt; &lt;br /&gt;
There is a charging port inserted, but the battery discharge is displayed, which means the battery is bad.&lt;br /&gt;
&lt;br /&gt;
===How to Setup back-to-ac function manully===&lt;br /&gt;
* Login to Raspberry Pi and open a terminal, Typing following command:&lt;br /&gt;
&amp;lt;pre&amp;gt; i2cset -y 1 0x17 25 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Check if the command is enabled the function by read the register value:&lt;br /&gt;
&amp;lt;pre&amp;gt; i2cget -y 1 0x17 25 &amp;lt;/pre&amp;gt;&lt;br /&gt;
===How to Setup shutting down countdown function manully===&lt;br /&gt;
* Login to Raspberry Pi and open a terminal, Typing following command:&lt;br /&gt;
&amp;lt;pre&amp;gt; i2cset -y 1 0x17 24 20&amp;lt;/pre&amp;gt;&lt;br /&gt;
PS: 20 means countdown number is 20 seconds, you can change to another integer number. &lt;br /&gt;
* Check if the command is enabled the function by read the register value:&lt;br /&gt;
&amp;lt;pre&amp;gt; i2cget -y 1 0x17 25 &amp;lt;/pre&amp;gt;&lt;br /&gt;
===How to self-diagnose UPS PLUS ===&lt;br /&gt;
* Please visit this URL in browser:  [ https://api.52pi.com/ ]&lt;br /&gt;
[[File:Ups diagnosistool.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Filling the blank with your Deivce UIDs which can be getting from /home/pi/bin/upsPlus_iot.py script, open a terminal and typing:&lt;br /&gt;
&amp;lt;pre&amp;gt; python3 /home/pi/bin/upsPlus_iot.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:Ups uids.jpg|left | 500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Copy UID0, UID1, UID2 to browser and press &amp;quot;Diagnosis&amp;quot; button on the page:&lt;br /&gt;
[[File:Ups dignosis.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Then you will get the test results and suggestions on the page.&lt;br /&gt;
[[File:Dignosis result.png|left|500px]]&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; Pink color means it is critical message and Blue color means suggestion.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Parameter freezing issue==&lt;br /&gt;
According to our tracking test, about 0.8% of users after a period of time, read the UPS parameters found that the value no longer changes, the cause of this is complex, and the number of users is small, we are working to solve this problem, if you encounter this problem, please try to completely reinstall the battery, power supply and Raspberry Pi and observe again, usually the problem is solved, if there are still problems, please contact us.&lt;br /&gt;
&lt;br /&gt;
==Battery Logger==&lt;br /&gt;
* Thanks for Nordln&#039;s help.&lt;br /&gt;
* UPS Plus Battery Logger: [ https://github.com/Nordln/upsplusv5-battery-logger.git ]&lt;br /&gt;
[[File:Ups logger.jpg|left|500px]]&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;
* 1 x UPS Plus For Raspberry Pi&lt;br /&gt;
* 4 x M2.5 copper pillar &lt;br /&gt;
* 4 x M2.5 screws&lt;br /&gt;
* 4 x M2.5 long copper stick&lt;br /&gt;
* 4 x M2.5 nuts&lt;br /&gt;
* 1 x Acrylic shield&lt;br /&gt;
* 1 x Instructions&lt;br /&gt;
[[File:UPS V2 9.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Tutorial Video==&lt;br /&gt;
* Youtube link:&lt;br /&gt;
[ https://youtu.be/jQljQJ41I5A ]&lt;br /&gt;
* QRCODE:&lt;br /&gt;
[[File:Upsplus tutorial1.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
* Q: Why does the battery light go off sometime and lights up in a while? &lt;br /&gt;
** A: This is because the power chip performs battery re-sampling, and the purpose is that the data of inferior batteries is inaccurate during the sampling process.&lt;br /&gt;
* Q: Why is the power cut off every once in a while? &lt;br /&gt;
** A: Please check the battery charging current, the data discharge direction or the charging direction. If the load is too large, the charging may not be enough, which will cause this problem.&lt;br /&gt;
* Q: What kind of wall charger should I use? &lt;br /&gt;
** A: If the load is normal, it is recommended to use an ordinary 5V@2A charging head. If you need to carry a slightly higher load, it is recommended to use a fast charging source. We support FCP, AFC, SFCP protocols Fast charging source.&lt;br /&gt;
* Q: Can I directly input 9V and 12V to the USB port?&lt;br /&gt;
**  A: No, if you must do this, you must remove the DP, DM and other related detection pins, and ensure that the power supply is stable.&lt;br /&gt;
* Q: I heard howling, why is this? &lt;br /&gt;
** A: Because of the no-load protection mechanism, the howling will disappear after the load is installed.&lt;br /&gt;
* Q: using firmware v. 4, when AC power comes back on during the shutdown countdown, I realized that the 5V supply for the raspberry pi is not switched off at the end of the countdown. so, after shutdown of the operating system, the raspberry pi will never restart automatically.&lt;br /&gt;
IMHO the following would be better: once a shutdown countdown starts, and we have the Back-To-AC Auto Power UP flag set, then:&lt;br /&gt;
the shutdown sequence should proceed to its end,&lt;br /&gt;
switch off the 5V-power for a certain time (a couple of seconds maybe), regardless of AC Power.&lt;br /&gt;
switch the 5V back on when AC power is restored.&lt;br /&gt;
otherwise, I am very happy with the product.&lt;br /&gt;
one more thing: would be nice to have some sort of alert for new firmware releases and release notes for these.&lt;br /&gt;
** A: Please refer to this URL: https://github.com/geeekpi/upsplus/issues/7&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
* UPS Plus, GeeekPi UPS V5, UPS for Raspberry Pi&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=EP-0136&amp;diff=10383</id>
		<title>EP-0136</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=EP-0136&amp;diff=10383"/>
		<updated>2021-06-01T09:08:58Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: /* Battery Logger */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==UPS Plus==&lt;br /&gt;
[[File:UPS V2 1.jpg|right|320px]]&lt;br /&gt;
==Descriptions==&lt;br /&gt;
UPS Plus is a new generation of UPS power management module which supports OTA firmware upgrade and supports RTC onboard. &amp;lt;br&amp;gt;&lt;br /&gt;
And there are two INA219 chip onboard to detect batteries voltage and the voltage output from UPS Plus to Raspberry Pi.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Raspberry Model !! Compatibility  &lt;br /&gt;
|-&lt;br /&gt;
| Raspberry Pi A || &amp;lt;font color=green&amp;gt;YES&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi A+ ||&amp;lt;font color=green&amp;gt;YES&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Raspberry Pi B ||&amp;lt;font color=green&amp;gt;YES&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi B+ ||&amp;lt;font color=green&amp;gt;YES&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi 2B ||&amp;lt;font color=green&amp;gt;YES&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi 3B || &amp;lt;font color=green&amp;gt;YES&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi 3B+ || &amp;lt;font color=green&amp;gt;YES&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi 4B || &amp;lt;font color=green&amp;gt;YES&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi Zero || &amp;lt;font color=red&amp;gt;NO&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi Zero W ||&amp;lt;font color=red&amp;gt;NO&amp;lt;/font&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* Easy to install&lt;br /&gt;
* Enhanced power management&lt;br /&gt;
* Remote OTA firmware upgrade&lt;br /&gt;
* Programmable BACK-TO-AC auto power up&lt;br /&gt;
* Programmable sample period&lt;br /&gt;
* I2C communication&lt;br /&gt;
* Standalone RTC&lt;br /&gt;
* Support stacked battery design&lt;br /&gt;
===Specifications===&lt;br /&gt;
* Current/voltage monitoring of Raspberry Pi power supply port.&lt;br /&gt;
* Battery terminal current/voltage monitoring, supports two-way monitoring of charge and discharge.&lt;br /&gt;
* Independent RTC function.&lt;br /&gt;
* OTA function (supports forced upgrade mode and active upgrade mode).&lt;br /&gt;
* Power estimation&lt;br /&gt;
&amp;lt;pre&amp;gt;Note: At least one full charge and discharge cycle must be completed!)&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Adjustable sampling period.&lt;br /&gt;
* Support FCP, AFC, SFCP fast charge protocol.&lt;br /&gt;
* Support BC1.2 charging protocol.&lt;br /&gt;
* Battery temperature monitoring &lt;br /&gt;
&amp;lt;pre&amp;gt;Note: the forced temperature protection cannot be turned off, threshold: 65 degrees!&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Programmable Power Voltage Detector(PVD) function, Default value: 3.6V &lt;br /&gt;
* Incoming call self-start function.&lt;br /&gt;
* Power down memory function.&lt;br /&gt;
* Programmable shutdown / forced restart.&lt;br /&gt;
* Running time statistics &lt;br /&gt;
* Electrostatic protection.&lt;br /&gt;
* Linear compensation range discharge capacity: 5V 4.5A.&lt;br /&gt;
* Non-linear compensation range discharge capacity: 5V 8A.&lt;br /&gt;
* Charging capacity 4.5V 5A/5V 2.5A/9V 2A/12V 1.5A.&lt;br /&gt;
* Stacked battery design&lt;br /&gt;
&amp;lt;pre&amp;gt;NOTE: Stacked power board need to be special accessories.Can not support None official accessories.&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Use I2C communication without occupying additional ports.&lt;br /&gt;
* Support 4.2V 4.35V 4.4V 4.5V lithium battery &lt;br /&gt;
&amp;lt;pre&amp;gt;Note: Different types of batteries cannot be mixed!&amp;lt;/pre&amp;gt;&lt;br /&gt;
* After-sales data telemetry.&lt;br /&gt;
&lt;br /&gt;
===Register Mapping===&lt;br /&gt;
===USB Plus V5.0 Register Mapping Chart===&lt;br /&gt;
* 0x17 - Operation Mode&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address !! Function !! Range !! Unit&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 - 0x02 || Voltage of UPS&#039;s MCU || 2400 - 3600 || mV &lt;br /&gt;
|-&lt;br /&gt;
| 0x03 - 0x04 || Voltage of Pogopin&#039;s Bottom ||  0 - 5500 || mV &lt;br /&gt;
|-&lt;br /&gt;
| 0x05 - 0x06 || Voltage of Batteries&#039; Terminal ||  0 - 4500 || mV &lt;br /&gt;
|-&lt;br /&gt;
| 0x07 - 0x08 || Voltage of USB-C Charging Port ||  0 - 13500 || mV &lt;br /&gt;
|-&lt;br /&gt;
| 0x09 - 0x0A || Voltage of MicroUSB Charging Port ||  0 - 13500 || mV &lt;br /&gt;
|-&lt;br /&gt;
| 0x0B - 0x0C || Batteries Temperature ||  -20 - 65 || ℃ &lt;br /&gt;
|-&lt;br /&gt;
| 0x0D - 0x0E ||  Full Voltage ||  0 - 4500 || mV &lt;br /&gt;
|-&lt;br /&gt;
| 0x0F - 0x10 ||  Empty Voltage ||  0 - 4500 || mV &lt;br /&gt;
|-&lt;br /&gt;
| 0x11 - 0x12 ||  Protection Voltage ||  0 - 4500 || mV &lt;br /&gt;
|-&lt;br /&gt;
| 0x13 - 0x14 || Battery Remaining || 0 - 100 || % &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 - 0x16 || Sample Period || 1 - 1440 || Min&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || Power Status/Operation Mode ||  0/1 || Bool &lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || Shutdown Countdown ||  0(False)/10 - 255 || Bool/Sec &lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || Back-To-AC Auto Power up ||  0/1 || Bool&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || Restart Countdown  ||  0(False)/10- 255 || Bool/Sec&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B ||  Reset to Factory Defaults || 0/1 || Bool &lt;br /&gt;
|-&lt;br /&gt;
| 0x1C - 0x1F || Cumulative Running Time  ||  0 - 2147483647 ||  Sec &lt;br /&gt;
|-&lt;br /&gt;
| 0x20 - 0x23 ||  Accumulated Charging Time ||  0 - 2147483647|| Sec&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 - 0x27 || Running Time  ||  0 - 2147483647 || Sec&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 - 0x29 || Version ||  1 || Fixed &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || (FW.V5+) Battery Parameters self-programmed by user||  0/1 || Bool&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B - 0xEF || [Reserved] ||  NA || NA&lt;br /&gt;
|-&lt;br /&gt;
| 0xF0 - 0xFB || Serial Number ||  Device UID || Fixed&lt;br /&gt;
|-&lt;br /&gt;
| 0xFC - 0xFF || Factory Testing || NA || NA&lt;br /&gt;
|}&lt;br /&gt;
* 0x18 - OTA Firmware Upgrade Mode&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address !! Function  &lt;br /&gt;
|-&lt;br /&gt;
| 0x01 - 0x10 || Encrypted buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 - 0xEF || [Reserved]&lt;br /&gt;
|-&lt;br /&gt;
| 0xF0 - 0xFB || Serial Number&lt;br /&gt;
|-&lt;br /&gt;
| 0xFC - 0xFF || Factory Test&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product Outlook&lt;br /&gt;
{|&lt;br /&gt;
|[[File:UPS V2 1.jpg|left|320px]]&lt;br /&gt;
|[[File:UPS V2 2.jpg|left|320px]]&lt;br /&gt;
|[[File:UPS V2 3.jpg|left|320px]]&lt;br /&gt;
|}&lt;br /&gt;
* Application scenario&lt;br /&gt;
[[File:UPS V2 13.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
===PCB Drawing===&lt;br /&gt;
* PCBDOC File: [[ File:UPS PLUS PCBDOC.zip ]]&lt;br /&gt;
&lt;br /&gt;
===Function Area Display===&lt;br /&gt;
* Function Details &lt;br /&gt;
{|&lt;br /&gt;
|[[File:UPS V2 10.jpg|left|320px]]&lt;br /&gt;
|[[File:UPS V2 11.jpg|none|320px]]&lt;br /&gt;
|[[File:UPS V2 12.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===LED light status definition===&lt;br /&gt;
* Discharge Status &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Power C(%) !! LED1 !! LED2 !! LED3 !! LED4&lt;br /&gt;
|-&lt;br /&gt;
| C &amp;gt;= 75% ||  ON   || ON   ||   ON   ||  ON     &lt;br /&gt;
|-&lt;br /&gt;
| 50% &amp;lt;= C &amp;lt;75%	||   ON ||  ON  ||   ON   ||   OFF   &lt;br /&gt;
|-&lt;br /&gt;
| 25% &amp;lt;= C &amp;lt;50% ||  ON  ||  ON  ||    OFF  ||   OFF    &lt;br /&gt;
|-&lt;br /&gt;
| 0% &amp;lt;= C &amp;lt; 25% ||   ON || OFF  ||   OFF  ||   OFF  &lt;br /&gt;
|-&lt;br /&gt;
| Wrong Batteries Parameters ||   1.5Hz Blinking ||  OFF  ||    OFF  ||   OFF&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Charging Status &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Power C(%) !! LED1 !! LED2 !! LED3 !! LED4&lt;br /&gt;
|-&lt;br /&gt;
| 100% ||  ON   || ON   ||   ON   ||  ON     &lt;br /&gt;
|-&lt;br /&gt;
| 75% &amp;lt;= C||   ON ||  ON  ||   ON   ||   1.5Hz Blink&lt;br /&gt;
|-&lt;br /&gt;
| 50% &amp;lt;= C &amp;lt;75% ||  ON  ||  ON  ||     1.5Hz Blink  ||   OFF    &lt;br /&gt;
|-&lt;br /&gt;
| 25% &amp;lt;= C &amp;lt; 50% ||   ON || 1.5Hz Blink  ||   OFF  ||   OFF  &lt;br /&gt;
|-&lt;br /&gt;
|  C &amp;lt; 25% ||   1.5Hz Blinking ||  OFF  ||    OFF  ||   OFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==How To Assemble==&lt;br /&gt;
* How to Assemble&lt;br /&gt;
[[File:UPS V2 4-2.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How To Use==&lt;br /&gt;
===General Settings===&lt;br /&gt;
* Download the latest Raspbian OS image from: [ https://www.raspberrypi.org/software/operating-systems/ ]&lt;br /&gt;
* Unzip it and flash it to MicroSD card(TF card) with Etcher imaging tool. [ https://www.balena.io/etcher/ ]&lt;br /&gt;
* Follow the installation method to assemble the Raspberry Pi and UPS Plus.&lt;br /&gt;
* After booting up and make sure Raspberry Pi can access internet.&lt;br /&gt;
* Enable &amp;lt;font color=red&amp;gt;I2C function&amp;lt;/font&amp;gt; by using &amp;quot;raspi-config&amp;quot; tool, Navigate to &amp;quot;interface options&amp;quot; and select &amp;quot;I2C&amp;quot; and enable it follow the instructions.&lt;br /&gt;
&amp;lt;pre&amp;gt; NOTE: It is very important to enable I2C function on Raspberry Pi, If miss this step, Raspberry Pi will not detect UPSPLUS module.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt; sudo raspi-config&amp;lt;/pre&amp;gt; &lt;br /&gt;
* Install smbus2 library.&lt;br /&gt;
&amp;lt;pre&amp;gt;pip install smbus2&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Download repository from GitHub and entering the folder that contains demo code.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~ &lt;br /&gt;
git clone https://github.com/geeekpi/upsplus.git&lt;br /&gt;
cd upsplus/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Automatic Shutdown Protection===&lt;br /&gt;
* If you want to use one script to install upsplus&#039;s demo code, just follow the steps below.&lt;br /&gt;
* Open a terminal by press &amp;quot;Ctrl+ALT+T&amp;quot; or just click terminal icon on the task bar.&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -Lso- https://git.io/JLygb | bash &amp;lt;/pre&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -Lso- https://raw.githubusercontent.com/geeekpi/upsplus/main/install.sh | bash&amp;lt;/pre&amp;gt;&lt;br /&gt;
* When encountering low battery, it will automatically shut down and turn off the UPS and it will restart when AC power comes.&lt;br /&gt;
&lt;br /&gt;
===How To Update UPS Firmware via OTA ===&lt;br /&gt;
* Enter the OTA firmware upgrade mode:&lt;br /&gt;
===Method 1===&lt;br /&gt;
&amp;lt;font color=red&amp;gt;NOTE: Do not power off or disconnect the network during the upgrade process. If the upgrade fails, the UPS Pro will not work normally.&amp;lt;/font&amp;gt;&lt;br /&gt;
* Power off the Raspberry Pi.&lt;br /&gt;
* Cut off the external charging power (MicroUSB and USB-C)&lt;br /&gt;
* Take out all the batteries.&lt;br /&gt;
* Press and hold the UPS Pro switch key and insert the battery into the battery compartment.&lt;br /&gt;
At this time, the device will be forced to enter OTA mode.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;The function of the switch button will no longer be available at this time.&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Raspberry Pi will be running and please execute the following python script in the system terminal to complete the upgrade. &lt;br /&gt;
* Download python scripts from github:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~&lt;br /&gt;
git clone https://github.com/geeekpi/upsplus.git&lt;br /&gt;
cd ~/upsplus&lt;br /&gt;
python3 OTA_firmware_upgrade.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;font color=red&amp;gt;&amp;lt;b&amp;gt;The first time it runs, it may prompt that the device is not registered.If it is a legal device, just wait a few seconds and try again.&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
* UPS Pro Will be turned off after upgrading, Please unplug the power supply, remove the batteries from UPS Pro.&lt;br /&gt;
* Insert the batteries back to UPS Pro and then connect power supply and turn it on by press power switch.&lt;br /&gt;
&lt;br /&gt;
===Method 2===&lt;br /&gt;
* Open a terminal and typing: &lt;br /&gt;
&amp;lt;pre&amp;gt;i2cset -y 1 0x17 50 127 b&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Shutdown Raspberry Pi and remove all batteries and power supply.&lt;br /&gt;
* Insert batteries back into the battery slot.&lt;br /&gt;
* Execute OTA_firmware_upgrade.py python script in a terminal.&lt;br /&gt;
* UPS Pro Will be turned off after upgrading, Please unplug the power supply, remove the batteries from UPS Pro.&lt;br /&gt;
* Insert the batteries back to UPS Pro and then connect power supply and turn it on by press power switch.&lt;br /&gt;
&lt;br /&gt;
===How To Collect Data===&lt;br /&gt;
* Data Collection&lt;br /&gt;
Data collection will only collect information on abnormal voltage changes and battery charging and discharging status during equipment operation through UPS in order to provide better after-sales service, and will not collect your private information. &amp;lt;br&amp;gt;&lt;br /&gt;
Please rest assured that every UPS we sell will Have a unique serial number so that we can provide battery quality analysis and feedback.&amp;lt;br&amp;gt;&lt;br /&gt;
It submits your UPS Pro operating status information to the server provided by us through a python script.&amp;lt;br&amp;gt;&lt;br /&gt;
* Download Repository and execute:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~&lt;br /&gt;
curl -Lso- https://git.io/JLygb | bash&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
When encountering low battery, it will automatically shut down and turn off the UPS and it will restart when AC power comes.&lt;br /&gt;
&lt;br /&gt;
===How To Setup RTC===&lt;br /&gt;
====Using Overlays====&lt;br /&gt;
* Overlays are loaded using the &amp;quot;dtoverlay&amp;quot; config.txt setting. &lt;br /&gt;
As an example,consider I2C Real Time Clock drivers. In the pre-DT world these would be loaded&lt;br /&gt;
by writing a magic string comprising a device identifier and an I2C address to&lt;br /&gt;
a special file in /sys/class/i2c-adapter, having first loaded the driver for&lt;br /&gt;
the I2C interface and the RTC device - something like this:&lt;br /&gt;
PS: sudo su means use root user to operate the system file, otherwise you may encount an error: &amp;quot;Permission denied&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    sudo modprobe i2c-bcm2835&lt;br /&gt;
    sudo modprobe rtc-ds1307&lt;br /&gt;
    sudo su &lt;br /&gt;
    echo ds1307 0x68 &amp;gt; /sys/class/i2c-adapter/i2c-1/new_device&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
With DT enabled, this becomes a line in config.txt:&amp;lt;br&amp;gt;&lt;br /&gt;
Edit /boot/config.txt file via vim.tiny tool or nano in a terminal:&lt;br /&gt;
&amp;lt;code&amp;gt; sudo vim.tiny /boot/config.txt&amp;lt;/code&amp;gt;&amp;lt;/br&amp;gt; &lt;br /&gt;
And then add this parameter:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    dtoverlay=i2c-rtc,ds1307&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This causes the file /boot/overlays/i2c-rtc.dtbo to be loaded and a &amp;quot;node&amp;quot;&lt;br /&gt;
describing the DS1307 I2C device to be added to the Device Tree for the Pi. By&lt;br /&gt;
default it uses address 0x68, but this can be modified with an additional DT&lt;br /&gt;
parameter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    dtoverlay=i2c-rtc,ds1307,addr=0x68&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Parameters usually have default values, although certain parameters are&lt;br /&gt;
mandatory. See the list of overlays below for a description of the parameters&lt;br /&gt;
and their defaults.&lt;br /&gt;
&lt;br /&gt;
===For Raspberry Pi 4B ===&lt;br /&gt;
Here we assume that you have already burned the Raspbian Image into TF card and connect to your PC and logged in.&lt;br /&gt;
Open a terminal and modify /boot/config.txt file using what you favorate editor such as vim.tiny or nano, add parameters as following picture:&lt;br /&gt;
[[File:DS1307-4B(1).png|thumb|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; &amp;gt;&lt;br /&gt;
&#039;&#039;&#039;You can read /boot/overlay/README and find this info to add support for ds1307 I2C Real Time Clock device.&#039;&#039;&#039;&lt;br /&gt;
[[File:DS1307-4B(2).png|thumb|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; &amp;gt;&lt;br /&gt;
please ensure that /boot/config.txt file include two paramaters:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dtoverlay=i2c-rtc,ds1307 &lt;br /&gt;
dtparam=i2c_arm=on&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After that, please make sure you have disabled the &amp;quot;fake hwclock&amp;quot; which interferes with the &#039;real&#039; hwclock&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get -y remove fake-hwclock&lt;br /&gt;
sudo update-rc.d -f fake-hwclock remove&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now with the fake-hw clock off, you can start the original &#039;hardware clock&#039; script.&amp;lt;br&amp;gt;&lt;br /&gt;
Edit the script file /lib/udev/hwclock-set  with nano or vim editor and comment out these three lines:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if [ -e /run/systemd/system ] ; then&lt;br /&gt;
 exit 0&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Finally  result like this: &amp;lt;br&amp;gt;&lt;br /&gt;
[[File:DS1307-4B(6).png|thumb|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
save and reboot your RPi.&lt;br /&gt;
----&lt;br /&gt;
===How to test RTC===&lt;br /&gt;
* Open terminal and typing: &lt;br /&gt;
&amp;lt;pre&amp;gt;sudo hwclock -w &amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo hwclock &amp;lt;/pre&amp;gt;&lt;br /&gt;
* Result will be like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pi@upstest:~ $ sudo hwclock -w&lt;br /&gt;
pi@upstest:~ $ sudo hwclock&lt;br /&gt;
2021-05-12 11:41:23.601270+08:00&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===For Raspberry Pi 3B ===&lt;br /&gt;
Here we assume that you have already burned the Raspbian Image into TF card and connect to your PC and logged in.&lt;br /&gt;
Open a terminal and modify /boot/config.txt file using what you favorate editor such as vim.tiny or nano, add parameters as following picture:&lt;br /&gt;
[[File:Ds13076.png|thumb|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; &amp;gt;&lt;br /&gt;
&#039;&#039;&#039;You can read /boot/overlay/README and find this info to add support for ds1307 I2C Real Time Clock device.&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;Name:   i2c-rtc&lt;br /&gt;
Info:   Adds support for a number of I2C Real Time Clock devices&lt;br /&gt;
Load:   dtoverlay=i2c-rtc,&amp;lt;param&amp;gt;=&amp;lt;val&amp;gt;&lt;br /&gt;
Params: ds1307                  Select the DS1307 device&amp;lt;/pre&amp;gt;&lt;br /&gt;
please ensure that /boot/config.txt file include those three paramaters:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
device_tree=bcm2710-rpi-3-b.dtb&lt;br /&gt;
dtoverlay=i2c-rtc,ds1307&lt;br /&gt;
dtparam=i2c_arm=on&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After that, please make sure you have disabled the &amp;quot;fake hwclock&amp;quot; which interferes with the &#039;real&#039; hwclock&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get -y remove fake-hwclock&lt;br /&gt;
sudo update-rc.d -f fake-hwclock remove&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now with the fake-hw clock off, you can start the original &#039;hardware clock&#039; script.&amp;lt;br&amp;gt;&lt;br /&gt;
Edit the script file /lib/udev/hwclock-set  with nano or vim editor and comment out these three lines:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if [ -e /run/systemd/system ] ; then&lt;br /&gt;
 exit 0&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Finally  result like this: &amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Raspberry pi hwclock-set.png|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
save and reboot your RPi.&lt;br /&gt;
&lt;br /&gt;
===How To Adjust The Sampling Period===&lt;br /&gt;
* If you want to change the sampling interval, you can change it with the following demo code in python:&lt;br /&gt;
&amp;lt;font color=red&amp;gt;NOTE: Change the number of `SAMPLE_TIME` will adjust the sampling period: range from 2 to 60, unit minute. If the quality of the charger is not good, you need to increase the period, for example: adjust to 3~5, if the quality of the battery is not good, you need to decrease the sampling period, for example: 1~2 &amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* Demo code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import smbus&lt;br /&gt;
&lt;br /&gt;
DEVICE_BUS = 1&lt;br /&gt;
DEVICE_ADDR = 0x17&lt;br /&gt;
SAMPLE_TIME = 2  &lt;br /&gt;
&lt;br /&gt;
bus = smbus.SMBus(DEVICE_BUS)&lt;br /&gt;
&lt;br /&gt;
aReceiveBuf = []&lt;br /&gt;
aReceiveBuf.append(0x00)  &lt;br /&gt;
&lt;br /&gt;
bus.write_byte_data(DEVICE_ADDR, 21,SAMPLE_TIME &amp;amp; 0xFF)&lt;br /&gt;
bus.write_byte_data(DEVICE_ADDR, 22,(SAMPLE_TIME &amp;gt;&amp;gt; 8)&amp;amp; 0xFF)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Setting Sampling Period to: %d Min&amp;quot; % SAMPLE_TIME)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Save it to a file and execute it:&lt;br /&gt;
&amp;lt;pre&amp;gt;python3 ups_change_sample_period.py&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== How to detect if the battery is dead ===&lt;br /&gt;
* There are two python scripts in the location /home/pi/bin/ after executing command &amp;quot;curl -Lso- https://raw.githubusercontent.com/geeekpi/upsplus/main/install.sh | bash&amp;quot; , as following picture:&lt;br /&gt;
[[File:Ups location.jpg|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Execute the `upsPlus.py` script &amp;lt;font color=red&amp;gt;&amp;lt;strong&amp;gt;2-3&amp;lt;/strong&amp;gt;&amp;lt;/font&amp;gt;times through the following commands to determine whether the battery is continuously discharging, and if the charge is less than the discharge, the battery will soon be lower than the set shutdown threshold and shut down.&lt;br /&gt;
At this time, you need to replace the battery, or change the sampling period, or replace the high-quality fast charger plug&lt;br /&gt;
&amp;lt;pre&amp;gt; python3 /home/pi/bin/upsPlus.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
* For example:&lt;br /&gt;
[[File:Ups batteries status.jpg|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
The battery shown in the figure：&amp;lt;font color=red&amp;gt;Battery Current (discharge) Rate: 1553.902 mA&amp;lt;/font&amp;gt;, But the last information was: &amp;lt;font color=red&amp;gt;Currently charging via Micro USB Port.&amp;lt;/font&amp;gt; &lt;br /&gt;
There is a charging port inserted, but the battery discharge is displayed, which means the battery is bad.&lt;br /&gt;
&lt;br /&gt;
===How to Setup back-to-ac function manully===&lt;br /&gt;
* Login to Raspberry Pi and open a terminal, Typing following command:&lt;br /&gt;
&amp;lt;pre&amp;gt; i2cset -y 1 0x17 25 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Check if the command is enabled the function by read the register value:&lt;br /&gt;
&amp;lt;pre&amp;gt; i2cget -y 1 0x17 25 &amp;lt;/pre&amp;gt;&lt;br /&gt;
===How to Setup shutting down countdown function manully===&lt;br /&gt;
* Login to Raspberry Pi and open a terminal, Typing following command:&lt;br /&gt;
&amp;lt;pre&amp;gt; i2cset -y 1 0x17 24 20&amp;lt;/pre&amp;gt;&lt;br /&gt;
PS: 20 means countdown number is 20 seconds, you can change to another integer number. &lt;br /&gt;
* Check if the command is enabled the function by read the register value:&lt;br /&gt;
&amp;lt;pre&amp;gt; i2cget -y 1 0x17 25 &amp;lt;/pre&amp;gt;&lt;br /&gt;
===How to self-diagnose UPS PLUS ===&lt;br /&gt;
* Please visit this URL in browser:  [ https://api.thekoziolfoundation.com/ ]&lt;br /&gt;
[[File:Ups diagnosistool.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Filling the blank with your Deivce UIDs which can be getting from /home/pi/bin/upsPlus_iot.py script, open a terminal and typing:&lt;br /&gt;
&amp;lt;pre&amp;gt; python3 /home/pi/bin/upsPlus_iot.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:Ups uids.jpg|left | 500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Copy UID0, UID1, UID2 to browser and press &amp;quot;Diagnosis&amp;quot; button on the page:&lt;br /&gt;
[[File:Ups dignosis.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Then you will get the test results and suggestions on the page.&lt;br /&gt;
[[File:Dignosis result.png|left|500px]]&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; Pink color means it is critical message and Blue color means suggestion.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Parameter freezing issue==&lt;br /&gt;
According to our tracking test, about 0.8% of users after a period of time, read the UPS parameters found that the value no longer changes, the cause of this is complex, and the number of users is small, we are working to solve this problem, if you encounter this problem, please try to completely reinstall the battery, power supply and Raspberry Pi and observe again, usually the problem is solved, if there are still problems, please contact us.&lt;br /&gt;
&lt;br /&gt;
==Battery Logger==&lt;br /&gt;
* Thanks for Nordln&#039;s help.&lt;br /&gt;
* UPS Plus Battery Logger: [ https://github.com/Nordln/upsplusv5-battery-logger.git ]&lt;br /&gt;
[[File:Ups logger.jpg|left|500px]]&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;
* 1 x UPS Plus For Raspberry Pi&lt;br /&gt;
* 4 x M2.5 copper pillar &lt;br /&gt;
* 4 x M2.5 screws&lt;br /&gt;
* 4 x M2.5 long copper stick&lt;br /&gt;
* 4 x M2.5 nuts&lt;br /&gt;
* 1 x Acrylic shield&lt;br /&gt;
* 1 x Instructions&lt;br /&gt;
[[File:UPS V2 9.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Tutorial Video==&lt;br /&gt;
* Youtube link:&lt;br /&gt;
[ https://youtu.be/jQljQJ41I5A ]&lt;br /&gt;
* QRCODE:&lt;br /&gt;
[[File:Upsplus tutorial1.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
* Q: Why does the battery light go off sometime and lights up in a while? &lt;br /&gt;
** A: This is because the power chip performs battery re-sampling, and the purpose is that the data of inferior batteries is inaccurate during the sampling process.&lt;br /&gt;
* Q: Why is the power cut off every once in a while? &lt;br /&gt;
** A: Please check the battery charging current, the data discharge direction or the charging direction. If the load is too large, the charging may not be enough, which will cause this problem.&lt;br /&gt;
* Q: What kind of wall charger should I use? &lt;br /&gt;
** A: If the load is normal, it is recommended to use an ordinary 5V@2A charging head. If you need to carry a slightly higher load, it is recommended to use a fast charging source. We support FCP, AFC, SFCP protocols Fast charging source.&lt;br /&gt;
* Q: Can I directly input 9V and 12V to the USB port?&lt;br /&gt;
**  A: No, if you must do this, you must remove the DP, DM and other related detection pins, and ensure that the power supply is stable.&lt;br /&gt;
* Q: I heard howling, why is this? &lt;br /&gt;
** A: Because of the no-load protection mechanism, the howling will disappear after the load is installed.&lt;br /&gt;
* Q: using firmware v. 4, when AC power comes back on during the shutdown countdown, I realized that the 5V supply for the raspberry pi is not switched off at the end of the countdown. so, after shutdown of the operating system, the raspberry pi will never restart automatically.&lt;br /&gt;
IMHO the following would be better: once a shutdown countdown starts, and we have the Back-To-AC Auto Power UP flag set, then:&lt;br /&gt;
the shutdown sequence should proceed to its end,&lt;br /&gt;
switch off the 5V-power for a certain time (a couple of seconds maybe), regardless of AC Power.&lt;br /&gt;
switch the 5V back on when AC power is restored.&lt;br /&gt;
otherwise, I am very happy with the product.&lt;br /&gt;
one more thing: would be nice to have some sort of alert for new firmware releases and release notes for these.&lt;br /&gt;
** A: Please refer to this URL: https://github.com/geeekpi/upsplus/issues/7&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
* UPS Plus, GeeekPi UPS V5, UPS for Raspberry Pi&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=EP-0136&amp;diff=10382</id>
		<title>EP-0136</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=EP-0136&amp;diff=10382"/>
		<updated>2021-06-01T09:04:41Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: /* USB Plus V5.0 Register Mapping Chart */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==UPS Plus==&lt;br /&gt;
[[File:UPS V2 1.jpg|right|320px]]&lt;br /&gt;
==Descriptions==&lt;br /&gt;
UPS Plus is a new generation of UPS power management module which supports OTA firmware upgrade and supports RTC onboard. &amp;lt;br&amp;gt;&lt;br /&gt;
And there are two INA219 chip onboard to detect batteries voltage and the voltage output from UPS Plus to Raspberry Pi.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Raspberry Model !! Compatibility  &lt;br /&gt;
|-&lt;br /&gt;
| Raspberry Pi A || &amp;lt;font color=green&amp;gt;YES&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi A+ ||&amp;lt;font color=green&amp;gt;YES&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Raspberry Pi B ||&amp;lt;font color=green&amp;gt;YES&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi B+ ||&amp;lt;font color=green&amp;gt;YES&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi 2B ||&amp;lt;font color=green&amp;gt;YES&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi 3B || &amp;lt;font color=green&amp;gt;YES&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi 3B+ || &amp;lt;font color=green&amp;gt;YES&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi 4B || &amp;lt;font color=green&amp;gt;YES&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi Zero || &amp;lt;font color=red&amp;gt;NO&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi Zero W ||&amp;lt;font color=red&amp;gt;NO&amp;lt;/font&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* Easy to install&lt;br /&gt;
* Enhanced power management&lt;br /&gt;
* Remote OTA firmware upgrade&lt;br /&gt;
* Programmable BACK-TO-AC auto power up&lt;br /&gt;
* Programmable sample period&lt;br /&gt;
* I2C communication&lt;br /&gt;
* Standalone RTC&lt;br /&gt;
* Support stacked battery design&lt;br /&gt;
===Specifications===&lt;br /&gt;
* Current/voltage monitoring of Raspberry Pi power supply port.&lt;br /&gt;
* Battery terminal current/voltage monitoring, supports two-way monitoring of charge and discharge.&lt;br /&gt;
* Independent RTC function.&lt;br /&gt;
* OTA function (supports forced upgrade mode and active upgrade mode).&lt;br /&gt;
* Power estimation&lt;br /&gt;
&amp;lt;pre&amp;gt;Note: At least one full charge and discharge cycle must be completed!)&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Adjustable sampling period.&lt;br /&gt;
* Support FCP, AFC, SFCP fast charge protocol.&lt;br /&gt;
* Support BC1.2 charging protocol.&lt;br /&gt;
* Battery temperature monitoring &lt;br /&gt;
&amp;lt;pre&amp;gt;Note: the forced temperature protection cannot be turned off, threshold: 65 degrees!&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Programmable Power Voltage Detector(PVD) function, Default value: 3.6V &lt;br /&gt;
* Incoming call self-start function.&lt;br /&gt;
* Power down memory function.&lt;br /&gt;
* Programmable shutdown / forced restart.&lt;br /&gt;
* Running time statistics &lt;br /&gt;
* Electrostatic protection.&lt;br /&gt;
* Linear compensation range discharge capacity: 5V 4.5A.&lt;br /&gt;
* Non-linear compensation range discharge capacity: 5V 8A.&lt;br /&gt;
* Charging capacity 4.5V 5A/5V 2.5A/9V 2A/12V 1.5A.&lt;br /&gt;
* Stacked battery design&lt;br /&gt;
&amp;lt;pre&amp;gt;NOTE: Stacked power board need to be special accessories.Can not support None official accessories.&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Use I2C communication without occupying additional ports.&lt;br /&gt;
* Support 4.2V 4.35V 4.4V 4.5V lithium battery &lt;br /&gt;
&amp;lt;pre&amp;gt;Note: Different types of batteries cannot be mixed!&amp;lt;/pre&amp;gt;&lt;br /&gt;
* After-sales data telemetry.&lt;br /&gt;
&lt;br /&gt;
===Register Mapping===&lt;br /&gt;
===USB Plus V5.0 Register Mapping Chart===&lt;br /&gt;
* 0x17 - Operation Mode&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address !! Function !! Range !! Unit&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 - 0x02 || Voltage of UPS&#039;s MCU || 2400 - 3600 || mV &lt;br /&gt;
|-&lt;br /&gt;
| 0x03 - 0x04 || Voltage of Pogopin&#039;s Bottom ||  0 - 5500 || mV &lt;br /&gt;
|-&lt;br /&gt;
| 0x05 - 0x06 || Voltage of Batteries&#039; Terminal ||  0 - 4500 || mV &lt;br /&gt;
|-&lt;br /&gt;
| 0x07 - 0x08 || Voltage of USB-C Charging Port ||  0 - 13500 || mV &lt;br /&gt;
|-&lt;br /&gt;
| 0x09 - 0x0A || Voltage of MicroUSB Charging Port ||  0 - 13500 || mV &lt;br /&gt;
|-&lt;br /&gt;
| 0x0B - 0x0C || Batteries Temperature ||  -20 - 65 || ℃ &lt;br /&gt;
|-&lt;br /&gt;
| 0x0D - 0x0E ||  Full Voltage ||  0 - 4500 || mV &lt;br /&gt;
|-&lt;br /&gt;
| 0x0F - 0x10 ||  Empty Voltage ||  0 - 4500 || mV &lt;br /&gt;
|-&lt;br /&gt;
| 0x11 - 0x12 ||  Protection Voltage ||  0 - 4500 || mV &lt;br /&gt;
|-&lt;br /&gt;
| 0x13 - 0x14 || Battery Remaining || 0 - 100 || % &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 - 0x16 || Sample Period || 1 - 1440 || Min&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || Power Status/Operation Mode ||  0/1 || Bool &lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || Shutdown Countdown ||  0(False)/10 - 255 || Bool/Sec &lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || Back-To-AC Auto Power up ||  0/1 || Bool&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || Restart Countdown  ||  0(False)/10- 255 || Bool/Sec&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B ||  Reset to Factory Defaults || 0/1 || Bool &lt;br /&gt;
|-&lt;br /&gt;
| 0x1C - 0x1F || Cumulative Running Time  ||  0 - 2147483647 ||  Sec &lt;br /&gt;
|-&lt;br /&gt;
| 0x20 - 0x23 ||  Accumulated Charging Time ||  0 - 2147483647|| Sec&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 - 0x27 || Running Time  ||  0 - 2147483647 || Sec&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 - 0x29 || Version ||  1 || Fixed &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || (FW.V5+) Battery Parameters self-programmed by user||  0/1 || Bool&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B - 0xEF || [Reserved] ||  NA || NA&lt;br /&gt;
|-&lt;br /&gt;
| 0xF0 - 0xFB || Serial Number ||  Device UID || Fixed&lt;br /&gt;
|-&lt;br /&gt;
| 0xFC - 0xFF || Factory Testing || NA || NA&lt;br /&gt;
|}&lt;br /&gt;
* 0x18 - OTA Firmware Upgrade Mode&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address !! Function  &lt;br /&gt;
|-&lt;br /&gt;
| 0x01 - 0x10 || Encrypted buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 - 0xEF || [Reserved]&lt;br /&gt;
|-&lt;br /&gt;
| 0xF0 - 0xFB || Serial Number&lt;br /&gt;
|-&lt;br /&gt;
| 0xFC - 0xFF || Factory Test&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product Outlook&lt;br /&gt;
{|&lt;br /&gt;
|[[File:UPS V2 1.jpg|left|320px]]&lt;br /&gt;
|[[File:UPS V2 2.jpg|left|320px]]&lt;br /&gt;
|[[File:UPS V2 3.jpg|left|320px]]&lt;br /&gt;
|}&lt;br /&gt;
* Application scenario&lt;br /&gt;
[[File:UPS V2 13.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
===PCB Drawing===&lt;br /&gt;
* PCBDOC File: [[ File:UPS PLUS PCBDOC.zip ]]&lt;br /&gt;
&lt;br /&gt;
===Function Area Display===&lt;br /&gt;
* Function Details &lt;br /&gt;
{|&lt;br /&gt;
|[[File:UPS V2 10.jpg|left|320px]]&lt;br /&gt;
|[[File:UPS V2 11.jpg|none|320px]]&lt;br /&gt;
|[[File:UPS V2 12.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===LED light status definition===&lt;br /&gt;
* Discharge Status &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Power C(%) !! LED1 !! LED2 !! LED3 !! LED4&lt;br /&gt;
|-&lt;br /&gt;
| C &amp;gt;= 75% ||  ON   || ON   ||   ON   ||  ON     &lt;br /&gt;
|-&lt;br /&gt;
| 50% &amp;lt;= C &amp;lt;75%	||   ON ||  ON  ||   ON   ||   OFF   &lt;br /&gt;
|-&lt;br /&gt;
| 25% &amp;lt;= C &amp;lt;50% ||  ON  ||  ON  ||    OFF  ||   OFF    &lt;br /&gt;
|-&lt;br /&gt;
| 0% &amp;lt;= C &amp;lt; 25% ||   ON || OFF  ||   OFF  ||   OFF  &lt;br /&gt;
|-&lt;br /&gt;
| Wrong Batteries Parameters ||   1.5Hz Blinking ||  OFF  ||    OFF  ||   OFF&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Charging Status &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Power C(%) !! LED1 !! LED2 !! LED3 !! LED4&lt;br /&gt;
|-&lt;br /&gt;
| 100% ||  ON   || ON   ||   ON   ||  ON     &lt;br /&gt;
|-&lt;br /&gt;
| 75% &amp;lt;= C||   ON ||  ON  ||   ON   ||   1.5Hz Blink&lt;br /&gt;
|-&lt;br /&gt;
| 50% &amp;lt;= C &amp;lt;75% ||  ON  ||  ON  ||     1.5Hz Blink  ||   OFF    &lt;br /&gt;
|-&lt;br /&gt;
| 25% &amp;lt;= C &amp;lt; 50% ||   ON || 1.5Hz Blink  ||   OFF  ||   OFF  &lt;br /&gt;
|-&lt;br /&gt;
|  C &amp;lt; 25% ||   1.5Hz Blinking ||  OFF  ||    OFF  ||   OFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==How To Assemble==&lt;br /&gt;
* How to Assemble&lt;br /&gt;
[[File:UPS V2 4-2.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How To Use==&lt;br /&gt;
===General Settings===&lt;br /&gt;
* Download the latest Raspbian OS image from: [ https://www.raspberrypi.org/software/operating-systems/ ]&lt;br /&gt;
* Unzip it and flash it to MicroSD card(TF card) with Etcher imaging tool. [ https://www.balena.io/etcher/ ]&lt;br /&gt;
* Follow the installation method to assemble the Raspberry Pi and UPS Plus.&lt;br /&gt;
* After booting up and make sure Raspberry Pi can access internet.&lt;br /&gt;
* Enable &amp;lt;font color=red&amp;gt;I2C function&amp;lt;/font&amp;gt; by using &amp;quot;raspi-config&amp;quot; tool, Navigate to &amp;quot;interface options&amp;quot; and select &amp;quot;I2C&amp;quot; and enable it follow the instructions.&lt;br /&gt;
&amp;lt;pre&amp;gt; NOTE: It is very important to enable I2C function on Raspberry Pi, If miss this step, Raspberry Pi will not detect UPSPLUS module.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt; sudo raspi-config&amp;lt;/pre&amp;gt; &lt;br /&gt;
* Install smbus2 library.&lt;br /&gt;
&amp;lt;pre&amp;gt;pip install smbus2&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Download repository from GitHub and entering the folder that contains demo code.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~ &lt;br /&gt;
git clone https://github.com/geeekpi/upsplus.git&lt;br /&gt;
cd upsplus/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Automatic Shutdown Protection===&lt;br /&gt;
* If you want to use one script to install upsplus&#039;s demo code, just follow the steps below.&lt;br /&gt;
* Open a terminal by press &amp;quot;Ctrl+ALT+T&amp;quot; or just click terminal icon on the task bar.&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -Lso- https://git.io/JLygb | bash &amp;lt;/pre&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -Lso- https://raw.githubusercontent.com/geeekpi/upsplus/main/install.sh | bash&amp;lt;/pre&amp;gt;&lt;br /&gt;
* When encountering low battery, it will automatically shut down and turn off the UPS and it will restart when AC power comes.&lt;br /&gt;
&lt;br /&gt;
===How To Update UPS Firmware via OTA ===&lt;br /&gt;
* Enter the OTA firmware upgrade mode:&lt;br /&gt;
===Method 1===&lt;br /&gt;
&amp;lt;font color=red&amp;gt;NOTE: Do not power off or disconnect the network during the upgrade process. If the upgrade fails, the UPS Pro will not work normally.&amp;lt;/font&amp;gt;&lt;br /&gt;
* Power off the Raspberry Pi.&lt;br /&gt;
* Cut off the external charging power (MicroUSB and USB-C)&lt;br /&gt;
* Take out all the batteries.&lt;br /&gt;
* Press and hold the UPS Pro switch key and insert the battery into the battery compartment.&lt;br /&gt;
At this time, the device will be forced to enter OTA mode.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;The function of the switch button will no longer be available at this time.&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Raspberry Pi will be running and please execute the following python script in the system terminal to complete the upgrade. &lt;br /&gt;
* Download python scripts from github:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~&lt;br /&gt;
git clone https://github.com/geeekpi/upsplus.git&lt;br /&gt;
cd ~/upsplus&lt;br /&gt;
python3 OTA_firmware_upgrade.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;font color=red&amp;gt;&amp;lt;b&amp;gt;The first time it runs, it may prompt that the device is not registered.If it is a legal device, just wait a few seconds and try again.&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
* UPS Pro Will be turned off after upgrading, Please unplug the power supply, remove the batteries from UPS Pro.&lt;br /&gt;
* Insert the batteries back to UPS Pro and then connect power supply and turn it on by press power switch.&lt;br /&gt;
&lt;br /&gt;
===Method 2===&lt;br /&gt;
* Open a terminal and typing: &lt;br /&gt;
&amp;lt;pre&amp;gt;i2cset -y 1 0x17 50 127 b&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Shutdown Raspberry Pi and remove all batteries and power supply.&lt;br /&gt;
* Insert batteries back into the battery slot.&lt;br /&gt;
* Execute OTA_firmware_upgrade.py python script in a terminal.&lt;br /&gt;
* UPS Pro Will be turned off after upgrading, Please unplug the power supply, remove the batteries from UPS Pro.&lt;br /&gt;
* Insert the batteries back to UPS Pro and then connect power supply and turn it on by press power switch.&lt;br /&gt;
&lt;br /&gt;
===How To Collect Data===&lt;br /&gt;
* Data Collection&lt;br /&gt;
Data collection will only collect information on abnormal voltage changes and battery charging and discharging status during equipment operation through UPS in order to provide better after-sales service, and will not collect your private information. &amp;lt;br&amp;gt;&lt;br /&gt;
Please rest assured that every UPS we sell will Have a unique serial number so that we can provide battery quality analysis and feedback.&amp;lt;br&amp;gt;&lt;br /&gt;
It submits your UPS Pro operating status information to the server provided by us through a python script.&amp;lt;br&amp;gt;&lt;br /&gt;
* Download Repository and execute:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~&lt;br /&gt;
curl -Lso- https://git.io/JLygb | bash&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
When encountering low battery, it will automatically shut down and turn off the UPS and it will restart when AC power comes.&lt;br /&gt;
&lt;br /&gt;
===How To Setup RTC===&lt;br /&gt;
====Using Overlays====&lt;br /&gt;
* Overlays are loaded using the &amp;quot;dtoverlay&amp;quot; config.txt setting. &lt;br /&gt;
As an example,consider I2C Real Time Clock drivers. In the pre-DT world these would be loaded&lt;br /&gt;
by writing a magic string comprising a device identifier and an I2C address to&lt;br /&gt;
a special file in /sys/class/i2c-adapter, having first loaded the driver for&lt;br /&gt;
the I2C interface and the RTC device - something like this:&lt;br /&gt;
PS: sudo su means use root user to operate the system file, otherwise you may encount an error: &amp;quot;Permission denied&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    sudo modprobe i2c-bcm2835&lt;br /&gt;
    sudo modprobe rtc-ds1307&lt;br /&gt;
    sudo su &lt;br /&gt;
    echo ds1307 0x68 &amp;gt; /sys/class/i2c-adapter/i2c-1/new_device&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
With DT enabled, this becomes a line in config.txt:&amp;lt;br&amp;gt;&lt;br /&gt;
Edit /boot/config.txt file via vim.tiny tool or nano in a terminal:&lt;br /&gt;
&amp;lt;code&amp;gt; sudo vim.tiny /boot/config.txt&amp;lt;/code&amp;gt;&amp;lt;/br&amp;gt; &lt;br /&gt;
And then add this parameter:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    dtoverlay=i2c-rtc,ds1307&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This causes the file /boot/overlays/i2c-rtc.dtbo to be loaded and a &amp;quot;node&amp;quot;&lt;br /&gt;
describing the DS1307 I2C device to be added to the Device Tree for the Pi. By&lt;br /&gt;
default it uses address 0x68, but this can be modified with an additional DT&lt;br /&gt;
parameter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    dtoverlay=i2c-rtc,ds1307,addr=0x68&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Parameters usually have default values, although certain parameters are&lt;br /&gt;
mandatory. See the list of overlays below for a description of the parameters&lt;br /&gt;
and their defaults.&lt;br /&gt;
&lt;br /&gt;
===For Raspberry Pi 4B ===&lt;br /&gt;
Here we assume that you have already burned the Raspbian Image into TF card and connect to your PC and logged in.&lt;br /&gt;
Open a terminal and modify /boot/config.txt file using what you favorate editor such as vim.tiny or nano, add parameters as following picture:&lt;br /&gt;
[[File:DS1307-4B(1).png|thumb|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; &amp;gt;&lt;br /&gt;
&#039;&#039;&#039;You can read /boot/overlay/README and find this info to add support for ds1307 I2C Real Time Clock device.&#039;&#039;&#039;&lt;br /&gt;
[[File:DS1307-4B(2).png|thumb|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; &amp;gt;&lt;br /&gt;
please ensure that /boot/config.txt file include two paramaters:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dtoverlay=i2c-rtc,ds1307 &lt;br /&gt;
dtparam=i2c_arm=on&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After that, please make sure you have disabled the &amp;quot;fake hwclock&amp;quot; which interferes with the &#039;real&#039; hwclock&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get -y remove fake-hwclock&lt;br /&gt;
sudo update-rc.d -f fake-hwclock remove&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now with the fake-hw clock off, you can start the original &#039;hardware clock&#039; script.&amp;lt;br&amp;gt;&lt;br /&gt;
Edit the script file /lib/udev/hwclock-set  with nano or vim editor and comment out these three lines:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if [ -e /run/systemd/system ] ; then&lt;br /&gt;
 exit 0&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Finally  result like this: &amp;lt;br&amp;gt;&lt;br /&gt;
[[File:DS1307-4B(6).png|thumb|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
save and reboot your RPi.&lt;br /&gt;
----&lt;br /&gt;
===How to test RTC===&lt;br /&gt;
* Open terminal and typing: &lt;br /&gt;
&amp;lt;pre&amp;gt;sudo hwclock -w &amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo hwclock &amp;lt;/pre&amp;gt;&lt;br /&gt;
* Result will be like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pi@upstest:~ $ sudo hwclock -w&lt;br /&gt;
pi@upstest:~ $ sudo hwclock&lt;br /&gt;
2021-05-12 11:41:23.601270+08:00&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===For Raspberry Pi 3B ===&lt;br /&gt;
Here we assume that you have already burned the Raspbian Image into TF card and connect to your PC and logged in.&lt;br /&gt;
Open a terminal and modify /boot/config.txt file using what you favorate editor such as vim.tiny or nano, add parameters as following picture:&lt;br /&gt;
[[File:Ds13076.png|thumb|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; &amp;gt;&lt;br /&gt;
&#039;&#039;&#039;You can read /boot/overlay/README and find this info to add support for ds1307 I2C Real Time Clock device.&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;Name:   i2c-rtc&lt;br /&gt;
Info:   Adds support for a number of I2C Real Time Clock devices&lt;br /&gt;
Load:   dtoverlay=i2c-rtc,&amp;lt;param&amp;gt;=&amp;lt;val&amp;gt;&lt;br /&gt;
Params: ds1307                  Select the DS1307 device&amp;lt;/pre&amp;gt;&lt;br /&gt;
please ensure that /boot/config.txt file include those three paramaters:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
device_tree=bcm2710-rpi-3-b.dtb&lt;br /&gt;
dtoverlay=i2c-rtc,ds1307&lt;br /&gt;
dtparam=i2c_arm=on&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After that, please make sure you have disabled the &amp;quot;fake hwclock&amp;quot; which interferes with the &#039;real&#039; hwclock&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get -y remove fake-hwclock&lt;br /&gt;
sudo update-rc.d -f fake-hwclock remove&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now with the fake-hw clock off, you can start the original &#039;hardware clock&#039; script.&amp;lt;br&amp;gt;&lt;br /&gt;
Edit the script file /lib/udev/hwclock-set  with nano or vim editor and comment out these three lines:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if [ -e /run/systemd/system ] ; then&lt;br /&gt;
 exit 0&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Finally  result like this: &amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Raspberry pi hwclock-set.png|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
save and reboot your RPi.&lt;br /&gt;
&lt;br /&gt;
===How To Adjust The Sampling Period===&lt;br /&gt;
* If you want to change the sampling interval, you can change it with the following demo code in python:&lt;br /&gt;
&amp;lt;font color=red&amp;gt;NOTE: Change the number of `SAMPLE_TIME` will adjust the sampling period: range from 2 to 60, unit minute. If the quality of the charger is not good, you need to increase the period, for example: adjust to 3~5, if the quality of the battery is not good, you need to decrease the sampling period, for example: 1~2 &amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* Demo code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import smbus&lt;br /&gt;
&lt;br /&gt;
DEVICE_BUS = 1&lt;br /&gt;
DEVICE_ADDR = 0x17&lt;br /&gt;
SAMPLE_TIME = 2  &lt;br /&gt;
&lt;br /&gt;
bus = smbus.SMBus(DEVICE_BUS)&lt;br /&gt;
&lt;br /&gt;
aReceiveBuf = []&lt;br /&gt;
aReceiveBuf.append(0x00)  &lt;br /&gt;
&lt;br /&gt;
bus.write_byte_data(DEVICE_ADDR, 21,SAMPLE_TIME &amp;amp; 0xFF)&lt;br /&gt;
bus.write_byte_data(DEVICE_ADDR, 22,(SAMPLE_TIME &amp;gt;&amp;gt; 8)&amp;amp; 0xFF)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Setting Sampling Period to: %d Min&amp;quot; % SAMPLE_TIME)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Save it to a file and execute it:&lt;br /&gt;
&amp;lt;pre&amp;gt;python3 ups_change_sample_period.py&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== How to detect if the battery is dead ===&lt;br /&gt;
* There are two python scripts in the location /home/pi/bin/ after executing command &amp;quot;curl -Lso- https://raw.githubusercontent.com/geeekpi/upsplus/main/install.sh | bash&amp;quot; , as following picture:&lt;br /&gt;
[[File:Ups location.jpg|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Execute the `upsPlus.py` script &amp;lt;font color=red&amp;gt;&amp;lt;strong&amp;gt;2-3&amp;lt;/strong&amp;gt;&amp;lt;/font&amp;gt;times through the following commands to determine whether the battery is continuously discharging, and if the charge is less than the discharge, the battery will soon be lower than the set shutdown threshold and shut down.&lt;br /&gt;
At this time, you need to replace the battery, or change the sampling period, or replace the high-quality fast charger plug&lt;br /&gt;
&amp;lt;pre&amp;gt; python3 /home/pi/bin/upsPlus.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
* For example:&lt;br /&gt;
[[File:Ups batteries status.jpg|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
The battery shown in the figure：&amp;lt;font color=red&amp;gt;Battery Current (discharge) Rate: 1553.902 mA&amp;lt;/font&amp;gt;, But the last information was: &amp;lt;font color=red&amp;gt;Currently charging via Micro USB Port.&amp;lt;/font&amp;gt; &lt;br /&gt;
There is a charging port inserted, but the battery discharge is displayed, which means the battery is bad.&lt;br /&gt;
&lt;br /&gt;
===How to Setup back-to-ac function manully===&lt;br /&gt;
* Login to Raspberry Pi and open a terminal, Typing following command:&lt;br /&gt;
&amp;lt;pre&amp;gt; i2cset -y 1 0x17 25 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Check if the command is enabled the function by read the register value:&lt;br /&gt;
&amp;lt;pre&amp;gt; i2cget -y 1 0x17 25 &amp;lt;/pre&amp;gt;&lt;br /&gt;
===How to Setup shutting down countdown function manully===&lt;br /&gt;
* Login to Raspberry Pi and open a terminal, Typing following command:&lt;br /&gt;
&amp;lt;pre&amp;gt; i2cset -y 1 0x17 24 20&amp;lt;/pre&amp;gt;&lt;br /&gt;
PS: 20 means countdown number is 20 seconds, you can change to another integer number. &lt;br /&gt;
* Check if the command is enabled the function by read the register value:&lt;br /&gt;
&amp;lt;pre&amp;gt; i2cget -y 1 0x17 25 &amp;lt;/pre&amp;gt;&lt;br /&gt;
===How to self-diagnose UPS PLUS ===&lt;br /&gt;
* Please visit this URL in browser:  [ https://api.thekoziolfoundation.com/ ]&lt;br /&gt;
[[File:Ups diagnosistool.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Filling the blank with your Deivce UIDs which can be getting from /home/pi/bin/upsPlus_iot.py script, open a terminal and typing:&lt;br /&gt;
&amp;lt;pre&amp;gt; python3 /home/pi/bin/upsPlus_iot.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:Ups uids.jpg|left | 500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Copy UID0, UID1, UID2 to browser and press &amp;quot;Diagnosis&amp;quot; button on the page:&lt;br /&gt;
[[File:Ups dignosis.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Then you will get the test results and suggestions on the page.&lt;br /&gt;
[[File:Dignosis result.png|left|500px]]&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; Pink color means it is critical message and Blue color means suggestion.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Battery Logger==&lt;br /&gt;
* Thanks for Nordln&#039;s help.&lt;br /&gt;
* UPS Plus Battery Logger: [ https://github.com/Nordln/upsplusv5-battery-logger.git ]&lt;br /&gt;
[[File:Ups logger.jpg|left|500px]]&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;
* 1 x UPS Plus For Raspberry Pi&lt;br /&gt;
* 4 x M2.5 copper pillar &lt;br /&gt;
* 4 x M2.5 screws&lt;br /&gt;
* 4 x M2.5 long copper stick&lt;br /&gt;
* 4 x M2.5 nuts&lt;br /&gt;
* 1 x Acrylic shield&lt;br /&gt;
* 1 x Instructions&lt;br /&gt;
[[File:UPS V2 9.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Tutorial Video==&lt;br /&gt;
* Youtube link:&lt;br /&gt;
[ https://youtu.be/jQljQJ41I5A ]&lt;br /&gt;
* QRCODE:&lt;br /&gt;
[[File:Upsplus tutorial1.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
* Q: Why does the battery light go off sometime and lights up in a while? &lt;br /&gt;
** A: This is because the power chip performs battery re-sampling, and the purpose is that the data of inferior batteries is inaccurate during the sampling process.&lt;br /&gt;
* Q: Why is the power cut off every once in a while? &lt;br /&gt;
** A: Please check the battery charging current, the data discharge direction or the charging direction. If the load is too large, the charging may not be enough, which will cause this problem.&lt;br /&gt;
* Q: What kind of wall charger should I use? &lt;br /&gt;
** A: If the load is normal, it is recommended to use an ordinary 5V@2A charging head. If you need to carry a slightly higher load, it is recommended to use a fast charging source. We support FCP, AFC, SFCP protocols Fast charging source.&lt;br /&gt;
* Q: Can I directly input 9V and 12V to the USB port?&lt;br /&gt;
**  A: No, if you must do this, you must remove the DP, DM and other related detection pins, and ensure that the power supply is stable.&lt;br /&gt;
* Q: I heard howling, why is this? &lt;br /&gt;
** A: Because of the no-load protection mechanism, the howling will disappear after the load is installed.&lt;br /&gt;
* Q: using firmware v. 4, when AC power comes back on during the shutdown countdown, I realized that the 5V supply for the raspberry pi is not switched off at the end of the countdown. so, after shutdown of the operating system, the raspberry pi will never restart automatically.&lt;br /&gt;
IMHO the following would be better: once a shutdown countdown starts, and we have the Back-To-AC Auto Power UP flag set, then:&lt;br /&gt;
the shutdown sequence should proceed to its end,&lt;br /&gt;
switch off the 5V-power for a certain time (a couple of seconds maybe), regardless of AC Power.&lt;br /&gt;
switch the 5V back on when AC power is restored.&lt;br /&gt;
otherwise, I am very happy with the product.&lt;br /&gt;
one more thing: would be nice to have some sort of alert for new firmware releases and release notes for these.&lt;br /&gt;
** A: Please refer to this URL: https://github.com/geeekpi/upsplus/issues/7&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
* UPS Plus, GeeekPi UPS V5, UPS for Raspberry Pi&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=EP-0136&amp;diff=10381</id>
		<title>EP-0136</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=EP-0136&amp;diff=10381"/>
		<updated>2021-06-01T09:04:26Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: /* USB Plus V5.0 Register Mapping Chart */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==UPS Plus==&lt;br /&gt;
[[File:UPS V2 1.jpg|right|320px]]&lt;br /&gt;
==Descriptions==&lt;br /&gt;
UPS Plus is a new generation of UPS power management module which supports OTA firmware upgrade and supports RTC onboard. &amp;lt;br&amp;gt;&lt;br /&gt;
And there are two INA219 chip onboard to detect batteries voltage and the voltage output from UPS Plus to Raspberry Pi.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compatibility==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Raspberry Model !! Compatibility  &lt;br /&gt;
|-&lt;br /&gt;
| Raspberry Pi A || &amp;lt;font color=green&amp;gt;YES&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi A+ ||&amp;lt;font color=green&amp;gt;YES&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Raspberry Pi B ||&amp;lt;font color=green&amp;gt;YES&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi B+ ||&amp;lt;font color=green&amp;gt;YES&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi 2B ||&amp;lt;font color=green&amp;gt;YES&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi 3B || &amp;lt;font color=green&amp;gt;YES&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi 3B+ || &amp;lt;font color=green&amp;gt;YES&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi 4B || &amp;lt;font color=green&amp;gt;YES&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi Zero || &amp;lt;font color=red&amp;gt;NO&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi Zero W ||&amp;lt;font color=red&amp;gt;NO&amp;lt;/font&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* Easy to install&lt;br /&gt;
* Enhanced power management&lt;br /&gt;
* Remote OTA firmware upgrade&lt;br /&gt;
* Programmable BACK-TO-AC auto power up&lt;br /&gt;
* Programmable sample period&lt;br /&gt;
* I2C communication&lt;br /&gt;
* Standalone RTC&lt;br /&gt;
* Support stacked battery design&lt;br /&gt;
===Specifications===&lt;br /&gt;
* Current/voltage monitoring of Raspberry Pi power supply port.&lt;br /&gt;
* Battery terminal current/voltage monitoring, supports two-way monitoring of charge and discharge.&lt;br /&gt;
* Independent RTC function.&lt;br /&gt;
* OTA function (supports forced upgrade mode and active upgrade mode).&lt;br /&gt;
* Power estimation&lt;br /&gt;
&amp;lt;pre&amp;gt;Note: At least one full charge and discharge cycle must be completed!)&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Adjustable sampling period.&lt;br /&gt;
* Support FCP, AFC, SFCP fast charge protocol.&lt;br /&gt;
* Support BC1.2 charging protocol.&lt;br /&gt;
* Battery temperature monitoring &lt;br /&gt;
&amp;lt;pre&amp;gt;Note: the forced temperature protection cannot be turned off, threshold: 65 degrees!&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Programmable Power Voltage Detector(PVD) function, Default value: 3.6V &lt;br /&gt;
* Incoming call self-start function.&lt;br /&gt;
* Power down memory function.&lt;br /&gt;
* Programmable shutdown / forced restart.&lt;br /&gt;
* Running time statistics &lt;br /&gt;
* Electrostatic protection.&lt;br /&gt;
* Linear compensation range discharge capacity: 5V 4.5A.&lt;br /&gt;
* Non-linear compensation range discharge capacity: 5V 8A.&lt;br /&gt;
* Charging capacity 4.5V 5A/5V 2.5A/9V 2A/12V 1.5A.&lt;br /&gt;
* Stacked battery design&lt;br /&gt;
&amp;lt;pre&amp;gt;NOTE: Stacked power board need to be special accessories.Can not support None official accessories.&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Use I2C communication without occupying additional ports.&lt;br /&gt;
* Support 4.2V 4.35V 4.4V 4.5V lithium battery &lt;br /&gt;
&amp;lt;pre&amp;gt;Note: Different types of batteries cannot be mixed!&amp;lt;/pre&amp;gt;&lt;br /&gt;
* After-sales data telemetry.&lt;br /&gt;
&lt;br /&gt;
===Register Mapping===&lt;br /&gt;
===USB Plus V5.0 Register Mapping Chart===&lt;br /&gt;
* 0x17 - Operation Mode&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address !! Function !! Range !! Unit&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 - 0x02 || Voltage of UPS&#039;s MCU || 2400 - 3600 || mV &lt;br /&gt;
|-&lt;br /&gt;
| 0x03 - 0x04 || Voltage of Pogopin&#039;s Bottom ||  0 - 5500 || mV &lt;br /&gt;
|-&lt;br /&gt;
| 0x05 - 0x06 || Voltage of Batteries&#039; Terminal ||  0 - 4500 || mV &lt;br /&gt;
|-&lt;br /&gt;
| 0x07 - 0x08 || Voltage of USB-C Charging Port ||  0 - 13500 || mV &lt;br /&gt;
|-&lt;br /&gt;
| 0x09 - 0x0A || Voltage of MicroUSB Charging Port ||  0 - 13500 || mV &lt;br /&gt;
|-&lt;br /&gt;
| 0x0B - 0x0C || Batteries Temperature ||  -20 - 65 || ℃ &lt;br /&gt;
|-&lt;br /&gt;
| 0x0D - 0x0E ||  Full Voltage ||  0 - 4500 || mV &lt;br /&gt;
|-&lt;br /&gt;
| 0x0F - 0x10 ||  Empty Voltage ||  0 - 4500 || mV &lt;br /&gt;
|-&lt;br /&gt;
| 0x11 - 0x12 ||  Protection Voltage ||  0 - 4500 || mV &lt;br /&gt;
|-&lt;br /&gt;
| 0x13 - 0x14 || Battery Remaining || 0 - 100 || % &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 - 0x16 || Sample Period || 1 - 1440 || Min&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || Power Status/Operation Mode ||  0/1 || Bool &lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || Shutdown Countdown ||  0(False)/10 - 255 || Bool/Sec &lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || Back-To-AC Auto Power up ||  0/1 || Bool&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || Restart Countdown  ||  0(False)/10- 255 || Bool/Sec&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B ||  Reset to Factory Defaults || 0/1 || Bool &lt;br /&gt;
|-&lt;br /&gt;
| 0x1C - 0x1F || Cumulative Running Time  ||  0 - 2147483647 ||  Sec &lt;br /&gt;
|-&lt;br /&gt;
| 0x20 - 0x23 ||  Accumulated Charging Time ||  0 - 2147483647|| Sec&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 - 0x27 || Running Time  ||  0 - 2147483647 || Sec&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 - 0x29 || Version ||  1 || Fixed &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || FixedVbat ||  0/1 || (FW.V5+) Battery Parameters self-programmed by user&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B - 0xEF || [Reserved] ||  NA || NA&lt;br /&gt;
|-&lt;br /&gt;
| 0xF0 - 0xFB || Serial Number ||  Device UID || Fixed&lt;br /&gt;
|-&lt;br /&gt;
| 0xFC - 0xFF || Factory Testing || NA || NA&lt;br /&gt;
|}&lt;br /&gt;
* 0x18 - OTA Firmware Upgrade Mode&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Address !! Function  &lt;br /&gt;
|-&lt;br /&gt;
| 0x01 - 0x10 || Encrypted buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 - 0xEF || [Reserved]&lt;br /&gt;
|-&lt;br /&gt;
| 0xF0 - 0xFB || Serial Number&lt;br /&gt;
|-&lt;br /&gt;
| 0xFC - 0xFF || Factory Test&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product Outlook&lt;br /&gt;
{|&lt;br /&gt;
|[[File:UPS V2 1.jpg|left|320px]]&lt;br /&gt;
|[[File:UPS V2 2.jpg|left|320px]]&lt;br /&gt;
|[[File:UPS V2 3.jpg|left|320px]]&lt;br /&gt;
|}&lt;br /&gt;
* Application scenario&lt;br /&gt;
[[File:UPS V2 13.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
===PCB Drawing===&lt;br /&gt;
* PCBDOC File: [[ File:UPS PLUS PCBDOC.zip ]]&lt;br /&gt;
&lt;br /&gt;
===Function Area Display===&lt;br /&gt;
* Function Details &lt;br /&gt;
{|&lt;br /&gt;
|[[File:UPS V2 10.jpg|left|320px]]&lt;br /&gt;
|[[File:UPS V2 11.jpg|none|320px]]&lt;br /&gt;
|[[File:UPS V2 12.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===LED light status definition===&lt;br /&gt;
* Discharge Status &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Power C(%) !! LED1 !! LED2 !! LED3 !! LED4&lt;br /&gt;
|-&lt;br /&gt;
| C &amp;gt;= 75% ||  ON   || ON   ||   ON   ||  ON     &lt;br /&gt;
|-&lt;br /&gt;
| 50% &amp;lt;= C &amp;lt;75%	||   ON ||  ON  ||   ON   ||   OFF   &lt;br /&gt;
|-&lt;br /&gt;
| 25% &amp;lt;= C &amp;lt;50% ||  ON  ||  ON  ||    OFF  ||   OFF    &lt;br /&gt;
|-&lt;br /&gt;
| 0% &amp;lt;= C &amp;lt; 25% ||   ON || OFF  ||   OFF  ||   OFF  &lt;br /&gt;
|-&lt;br /&gt;
| Wrong Batteries Parameters ||   1.5Hz Blinking ||  OFF  ||    OFF  ||   OFF&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Charging Status &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Power C(%) !! LED1 !! LED2 !! LED3 !! LED4&lt;br /&gt;
|-&lt;br /&gt;
| 100% ||  ON   || ON   ||   ON   ||  ON     &lt;br /&gt;
|-&lt;br /&gt;
| 75% &amp;lt;= C||   ON ||  ON  ||   ON   ||   1.5Hz Blink&lt;br /&gt;
|-&lt;br /&gt;
| 50% &amp;lt;= C &amp;lt;75% ||  ON  ||  ON  ||     1.5Hz Blink  ||   OFF    &lt;br /&gt;
|-&lt;br /&gt;
| 25% &amp;lt;= C &amp;lt; 50% ||   ON || 1.5Hz Blink  ||   OFF  ||   OFF  &lt;br /&gt;
|-&lt;br /&gt;
|  C &amp;lt; 25% ||   1.5Hz Blinking ||  OFF  ||    OFF  ||   OFF&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==How To Assemble==&lt;br /&gt;
* How to Assemble&lt;br /&gt;
[[File:UPS V2 4-2.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==How To Use==&lt;br /&gt;
===General Settings===&lt;br /&gt;
* Download the latest Raspbian OS image from: [ https://www.raspberrypi.org/software/operating-systems/ ]&lt;br /&gt;
* Unzip it and flash it to MicroSD card(TF card) with Etcher imaging tool. [ https://www.balena.io/etcher/ ]&lt;br /&gt;
* Follow the installation method to assemble the Raspberry Pi and UPS Plus.&lt;br /&gt;
* After booting up and make sure Raspberry Pi can access internet.&lt;br /&gt;
* Enable &amp;lt;font color=red&amp;gt;I2C function&amp;lt;/font&amp;gt; by using &amp;quot;raspi-config&amp;quot; tool, Navigate to &amp;quot;interface options&amp;quot; and select &amp;quot;I2C&amp;quot; and enable it follow the instructions.&lt;br /&gt;
&amp;lt;pre&amp;gt; NOTE: It is very important to enable I2C function on Raspberry Pi, If miss this step, Raspberry Pi will not detect UPSPLUS module.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt; sudo raspi-config&amp;lt;/pre&amp;gt; &lt;br /&gt;
* Install smbus2 library.&lt;br /&gt;
&amp;lt;pre&amp;gt;pip install smbus2&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Download repository from GitHub and entering the folder that contains demo code.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~ &lt;br /&gt;
git clone https://github.com/geeekpi/upsplus.git&lt;br /&gt;
cd upsplus/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Automatic Shutdown Protection===&lt;br /&gt;
* If you want to use one script to install upsplus&#039;s demo code, just follow the steps below.&lt;br /&gt;
* Open a terminal by press &amp;quot;Ctrl+ALT+T&amp;quot; or just click terminal icon on the task bar.&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -Lso- https://git.io/JLygb | bash &amp;lt;/pre&amp;gt;&lt;br /&gt;
or&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -Lso- https://raw.githubusercontent.com/geeekpi/upsplus/main/install.sh | bash&amp;lt;/pre&amp;gt;&lt;br /&gt;
* When encountering low battery, it will automatically shut down and turn off the UPS and it will restart when AC power comes.&lt;br /&gt;
&lt;br /&gt;
===How To Update UPS Firmware via OTA ===&lt;br /&gt;
* Enter the OTA firmware upgrade mode:&lt;br /&gt;
===Method 1===&lt;br /&gt;
&amp;lt;font color=red&amp;gt;NOTE: Do not power off or disconnect the network during the upgrade process. If the upgrade fails, the UPS Pro will not work normally.&amp;lt;/font&amp;gt;&lt;br /&gt;
* Power off the Raspberry Pi.&lt;br /&gt;
* Cut off the external charging power (MicroUSB and USB-C)&lt;br /&gt;
* Take out all the batteries.&lt;br /&gt;
* Press and hold the UPS Pro switch key and insert the battery into the battery compartment.&lt;br /&gt;
At this time, the device will be forced to enter OTA mode.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;The function of the switch button will no longer be available at this time.&amp;lt;/pre&amp;gt;&lt;br /&gt;
The Raspberry Pi will be running and please execute the following python script in the system terminal to complete the upgrade. &lt;br /&gt;
* Download python scripts from github:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~&lt;br /&gt;
git clone https://github.com/geeekpi/upsplus.git&lt;br /&gt;
cd ~/upsplus&lt;br /&gt;
python3 OTA_firmware_upgrade.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;font color=red&amp;gt;&amp;lt;b&amp;gt;The first time it runs, it may prompt that the device is not registered.If it is a legal device, just wait a few seconds and try again.&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
* UPS Pro Will be turned off after upgrading, Please unplug the power supply, remove the batteries from UPS Pro.&lt;br /&gt;
* Insert the batteries back to UPS Pro and then connect power supply and turn it on by press power switch.&lt;br /&gt;
&lt;br /&gt;
===Method 2===&lt;br /&gt;
* Open a terminal and typing: &lt;br /&gt;
&amp;lt;pre&amp;gt;i2cset -y 1 0x17 50 127 b&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Shutdown Raspberry Pi and remove all batteries and power supply.&lt;br /&gt;
* Insert batteries back into the battery slot.&lt;br /&gt;
* Execute OTA_firmware_upgrade.py python script in a terminal.&lt;br /&gt;
* UPS Pro Will be turned off after upgrading, Please unplug the power supply, remove the batteries from UPS Pro.&lt;br /&gt;
* Insert the batteries back to UPS Pro and then connect power supply and turn it on by press power switch.&lt;br /&gt;
&lt;br /&gt;
===How To Collect Data===&lt;br /&gt;
* Data Collection&lt;br /&gt;
Data collection will only collect information on abnormal voltage changes and battery charging and discharging status during equipment operation through UPS in order to provide better after-sales service, and will not collect your private information. &amp;lt;br&amp;gt;&lt;br /&gt;
Please rest assured that every UPS we sell will Have a unique serial number so that we can provide battery quality analysis and feedback.&amp;lt;br&amp;gt;&lt;br /&gt;
It submits your UPS Pro operating status information to the server provided by us through a python script.&amp;lt;br&amp;gt;&lt;br /&gt;
* Download Repository and execute:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~&lt;br /&gt;
curl -Lso- https://git.io/JLygb | bash&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
When encountering low battery, it will automatically shut down and turn off the UPS and it will restart when AC power comes.&lt;br /&gt;
&lt;br /&gt;
===How To Setup RTC===&lt;br /&gt;
====Using Overlays====&lt;br /&gt;
* Overlays are loaded using the &amp;quot;dtoverlay&amp;quot; config.txt setting. &lt;br /&gt;
As an example,consider I2C Real Time Clock drivers. In the pre-DT world these would be loaded&lt;br /&gt;
by writing a magic string comprising a device identifier and an I2C address to&lt;br /&gt;
a special file in /sys/class/i2c-adapter, having first loaded the driver for&lt;br /&gt;
the I2C interface and the RTC device - something like this:&lt;br /&gt;
PS: sudo su means use root user to operate the system file, otherwise you may encount an error: &amp;quot;Permission denied&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    sudo modprobe i2c-bcm2835&lt;br /&gt;
    sudo modprobe rtc-ds1307&lt;br /&gt;
    sudo su &lt;br /&gt;
    echo ds1307 0x68 &amp;gt; /sys/class/i2c-adapter/i2c-1/new_device&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
With DT enabled, this becomes a line in config.txt:&amp;lt;br&amp;gt;&lt;br /&gt;
Edit /boot/config.txt file via vim.tiny tool or nano in a terminal:&lt;br /&gt;
&amp;lt;code&amp;gt; sudo vim.tiny /boot/config.txt&amp;lt;/code&amp;gt;&amp;lt;/br&amp;gt; &lt;br /&gt;
And then add this parameter:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    dtoverlay=i2c-rtc,ds1307&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This causes the file /boot/overlays/i2c-rtc.dtbo to be loaded and a &amp;quot;node&amp;quot;&lt;br /&gt;
describing the DS1307 I2C device to be added to the Device Tree for the Pi. By&lt;br /&gt;
default it uses address 0x68, but this can be modified with an additional DT&lt;br /&gt;
parameter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    dtoverlay=i2c-rtc,ds1307,addr=0x68&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Parameters usually have default values, although certain parameters are&lt;br /&gt;
mandatory. See the list of overlays below for a description of the parameters&lt;br /&gt;
and their defaults.&lt;br /&gt;
&lt;br /&gt;
===For Raspberry Pi 4B ===&lt;br /&gt;
Here we assume that you have already burned the Raspbian Image into TF card and connect to your PC and logged in.&lt;br /&gt;
Open a terminal and modify /boot/config.txt file using what you favorate editor such as vim.tiny or nano, add parameters as following picture:&lt;br /&gt;
[[File:DS1307-4B(1).png|thumb|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; &amp;gt;&lt;br /&gt;
&#039;&#039;&#039;You can read /boot/overlay/README and find this info to add support for ds1307 I2C Real Time Clock device.&#039;&#039;&#039;&lt;br /&gt;
[[File:DS1307-4B(2).png|thumb|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; &amp;gt;&lt;br /&gt;
please ensure that /boot/config.txt file include two paramaters:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dtoverlay=i2c-rtc,ds1307 &lt;br /&gt;
dtparam=i2c_arm=on&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After that, please make sure you have disabled the &amp;quot;fake hwclock&amp;quot; which interferes with the &#039;real&#039; hwclock&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get -y remove fake-hwclock&lt;br /&gt;
sudo update-rc.d -f fake-hwclock remove&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now with the fake-hw clock off, you can start the original &#039;hardware clock&#039; script.&amp;lt;br&amp;gt;&lt;br /&gt;
Edit the script file /lib/udev/hwclock-set  with nano or vim editor and comment out these three lines:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if [ -e /run/systemd/system ] ; then&lt;br /&gt;
 exit 0&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Finally  result like this: &amp;lt;br&amp;gt;&lt;br /&gt;
[[File:DS1307-4B(6).png|thumb|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
save and reboot your RPi.&lt;br /&gt;
----&lt;br /&gt;
===How to test RTC===&lt;br /&gt;
* Open terminal and typing: &lt;br /&gt;
&amp;lt;pre&amp;gt;sudo hwclock -w &amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo hwclock &amp;lt;/pre&amp;gt;&lt;br /&gt;
* Result will be like:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pi@upstest:~ $ sudo hwclock -w&lt;br /&gt;
pi@upstest:~ $ sudo hwclock&lt;br /&gt;
2021-05-12 11:41:23.601270+08:00&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===For Raspberry Pi 3B ===&lt;br /&gt;
Here we assume that you have already burned the Raspbian Image into TF card and connect to your PC and logged in.&lt;br /&gt;
Open a terminal and modify /boot/config.txt file using what you favorate editor such as vim.tiny or nano, add parameters as following picture:&lt;br /&gt;
[[File:Ds13076.png|thumb|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot; &amp;gt;&lt;br /&gt;
&#039;&#039;&#039;You can read /boot/overlay/README and find this info to add support for ds1307 I2C Real Time Clock device.&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;Name:   i2c-rtc&lt;br /&gt;
Info:   Adds support for a number of I2C Real Time Clock devices&lt;br /&gt;
Load:   dtoverlay=i2c-rtc,&amp;lt;param&amp;gt;=&amp;lt;val&amp;gt;&lt;br /&gt;
Params: ds1307                  Select the DS1307 device&amp;lt;/pre&amp;gt;&lt;br /&gt;
please ensure that /boot/config.txt file include those three paramaters:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
device_tree=bcm2710-rpi-3-b.dtb&lt;br /&gt;
dtoverlay=i2c-rtc,ds1307&lt;br /&gt;
dtparam=i2c_arm=on&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After that, please make sure you have disabled the &amp;quot;fake hwclock&amp;quot; which interferes with the &#039;real&#039; hwclock&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get -y remove fake-hwclock&lt;br /&gt;
sudo update-rc.d -f fake-hwclock remove&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now with the fake-hw clock off, you can start the original &#039;hardware clock&#039; script.&amp;lt;br&amp;gt;&lt;br /&gt;
Edit the script file /lib/udev/hwclock-set  with nano or vim editor and comment out these three lines:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if [ -e /run/systemd/system ] ; then&lt;br /&gt;
 exit 0&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Finally  result like this: &amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Raspberry pi hwclock-set.png|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
save and reboot your RPi.&lt;br /&gt;
&lt;br /&gt;
===How To Adjust The Sampling Period===&lt;br /&gt;
* If you want to change the sampling interval, you can change it with the following demo code in python:&lt;br /&gt;
&amp;lt;font color=red&amp;gt;NOTE: Change the number of `SAMPLE_TIME` will adjust the sampling period: range from 2 to 60, unit minute. If the quality of the charger is not good, you need to increase the period, for example: adjust to 3~5, if the quality of the battery is not good, you need to decrease the sampling period, for example: 1~2 &amp;lt;/font&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* Demo code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import smbus&lt;br /&gt;
&lt;br /&gt;
DEVICE_BUS = 1&lt;br /&gt;
DEVICE_ADDR = 0x17&lt;br /&gt;
SAMPLE_TIME = 2  &lt;br /&gt;
&lt;br /&gt;
bus = smbus.SMBus(DEVICE_BUS)&lt;br /&gt;
&lt;br /&gt;
aReceiveBuf = []&lt;br /&gt;
aReceiveBuf.append(0x00)  &lt;br /&gt;
&lt;br /&gt;
bus.write_byte_data(DEVICE_ADDR, 21,SAMPLE_TIME &amp;amp; 0xFF)&lt;br /&gt;
bus.write_byte_data(DEVICE_ADDR, 22,(SAMPLE_TIME &amp;gt;&amp;gt; 8)&amp;amp; 0xFF)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Setting Sampling Period to: %d Min&amp;quot; % SAMPLE_TIME)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Save it to a file and execute it:&lt;br /&gt;
&amp;lt;pre&amp;gt;python3 ups_change_sample_period.py&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== How to detect if the battery is dead ===&lt;br /&gt;
* There are two python scripts in the location /home/pi/bin/ after executing command &amp;quot;curl -Lso- https://raw.githubusercontent.com/geeekpi/upsplus/main/install.sh | bash&amp;quot; , as following picture:&lt;br /&gt;
[[File:Ups location.jpg|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Execute the `upsPlus.py` script &amp;lt;font color=red&amp;gt;&amp;lt;strong&amp;gt;2-3&amp;lt;/strong&amp;gt;&amp;lt;/font&amp;gt;times through the following commands to determine whether the battery is continuously discharging, and if the charge is less than the discharge, the battery will soon be lower than the set shutdown threshold and shut down.&lt;br /&gt;
At this time, you need to replace the battery, or change the sampling period, or replace the high-quality fast charger plug&lt;br /&gt;
&amp;lt;pre&amp;gt; python3 /home/pi/bin/upsPlus.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
* For example:&lt;br /&gt;
[[File:Ups batteries status.jpg|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
The battery shown in the figure：&amp;lt;font color=red&amp;gt;Battery Current (discharge) Rate: 1553.902 mA&amp;lt;/font&amp;gt;, But the last information was: &amp;lt;font color=red&amp;gt;Currently charging via Micro USB Port.&amp;lt;/font&amp;gt; &lt;br /&gt;
There is a charging port inserted, but the battery discharge is displayed, which means the battery is bad.&lt;br /&gt;
&lt;br /&gt;
===How to Setup back-to-ac function manully===&lt;br /&gt;
* Login to Raspberry Pi and open a terminal, Typing following command:&lt;br /&gt;
&amp;lt;pre&amp;gt; i2cset -y 1 0x17 25 1&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Check if the command is enabled the function by read the register value:&lt;br /&gt;
&amp;lt;pre&amp;gt; i2cget -y 1 0x17 25 &amp;lt;/pre&amp;gt;&lt;br /&gt;
===How to Setup shutting down countdown function manully===&lt;br /&gt;
* Login to Raspberry Pi and open a terminal, Typing following command:&lt;br /&gt;
&amp;lt;pre&amp;gt; i2cset -y 1 0x17 24 20&amp;lt;/pre&amp;gt;&lt;br /&gt;
PS: 20 means countdown number is 20 seconds, you can change to another integer number. &lt;br /&gt;
* Check if the command is enabled the function by read the register value:&lt;br /&gt;
&amp;lt;pre&amp;gt; i2cget -y 1 0x17 25 &amp;lt;/pre&amp;gt;&lt;br /&gt;
===How to self-diagnose UPS PLUS ===&lt;br /&gt;
* Please visit this URL in browser:  [ https://api.thekoziolfoundation.com/ ]&lt;br /&gt;
[[File:Ups diagnosistool.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Filling the blank with your Deivce UIDs which can be getting from /home/pi/bin/upsPlus_iot.py script, open a terminal and typing:&lt;br /&gt;
&amp;lt;pre&amp;gt; python3 /home/pi/bin/upsPlus_iot.py &amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:Ups uids.jpg|left | 500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Copy UID0, UID1, UID2 to browser and press &amp;quot;Diagnosis&amp;quot; button on the page:&lt;br /&gt;
[[File:Ups dignosis.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* Then you will get the test results and suggestions on the page.&lt;br /&gt;
[[File:Dignosis result.png|left|500px]]&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; Pink color means it is critical message and Blue color means suggestion.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Battery Logger==&lt;br /&gt;
* Thanks for Nordln&#039;s help.&lt;br /&gt;
* UPS Plus Battery Logger: [ https://github.com/Nordln/upsplusv5-battery-logger.git ]&lt;br /&gt;
[[File:Ups logger.jpg|left|500px]]&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;
* 1 x UPS Plus For Raspberry Pi&lt;br /&gt;
* 4 x M2.5 copper pillar &lt;br /&gt;
* 4 x M2.5 screws&lt;br /&gt;
* 4 x M2.5 long copper stick&lt;br /&gt;
* 4 x M2.5 nuts&lt;br /&gt;
* 1 x Acrylic shield&lt;br /&gt;
* 1 x Instructions&lt;br /&gt;
[[File:UPS V2 9.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Tutorial Video==&lt;br /&gt;
* Youtube link:&lt;br /&gt;
[ https://youtu.be/jQljQJ41I5A ]&lt;br /&gt;
* QRCODE:&lt;br /&gt;
[[File:Upsplus tutorial1.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
* Q: Why does the battery light go off sometime and lights up in a while? &lt;br /&gt;
** A: This is because the power chip performs battery re-sampling, and the purpose is that the data of inferior batteries is inaccurate during the sampling process.&lt;br /&gt;
* Q: Why is the power cut off every once in a while? &lt;br /&gt;
** A: Please check the battery charging current, the data discharge direction or the charging direction. If the load is too large, the charging may not be enough, which will cause this problem.&lt;br /&gt;
* Q: What kind of wall charger should I use? &lt;br /&gt;
** A: If the load is normal, it is recommended to use an ordinary 5V@2A charging head. If you need to carry a slightly higher load, it is recommended to use a fast charging source. We support FCP, AFC, SFCP protocols Fast charging source.&lt;br /&gt;
* Q: Can I directly input 9V and 12V to the USB port?&lt;br /&gt;
**  A: No, if you must do this, you must remove the DP, DM and other related detection pins, and ensure that the power supply is stable.&lt;br /&gt;
* Q: I heard howling, why is this? &lt;br /&gt;
** A: Because of the no-load protection mechanism, the howling will disappear after the load is installed.&lt;br /&gt;
* Q: using firmware v. 4, when AC power comes back on during the shutdown countdown, I realized that the 5V supply for the raspberry pi is not switched off at the end of the countdown. so, after shutdown of the operating system, the raspberry pi will never restart automatically.&lt;br /&gt;
IMHO the following would be better: once a shutdown countdown starts, and we have the Back-To-AC Auto Power UP flag set, then:&lt;br /&gt;
the shutdown sequence should proceed to its end,&lt;br /&gt;
switch off the 5V-power for a certain time (a couple of seconds maybe), regardless of AC Power.&lt;br /&gt;
switch the 5V back on when AC power is restored.&lt;br /&gt;
otherwise, I am very happy with the product.&lt;br /&gt;
one more thing: would be nice to have some sort of alert for new firmware releases and release notes for these.&lt;br /&gt;
** A: Please refer to this URL: https://github.com/geeekpi/upsplus/issues/7&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
* UPS Plus, GeeekPi UPS V5, UPS for Raspberry Pi&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=Main_Page&amp;diff=10079</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=Main_Page&amp;diff=10079"/>
		<updated>2021-04-14T03:04:24Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: /* Case &amp;amp; Enclosure &amp;amp; Heat sink */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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.&lt;br /&gt;
[[Hardware Compatible List]]&lt;br /&gt;
&lt;br /&gt;
==Hat Stack==&lt;br /&gt;
* [[ DockerPi RISCV ProtoType Board SKU: EP-0117 ]]&lt;br /&gt;
* [[ DockerPi-H Station Board SKU: EP-0116 ]]&lt;br /&gt;
* [[ DockerPi NightLight SKU: EP-0098 ]]&lt;br /&gt;
* [[ DockerPi 4 Channel Relay SKU: EP-0099 ]]&lt;br /&gt;
* [[ DockerPi PowerBoard SKU: EP-0104 ]]&lt;br /&gt;
* [[ DockerPi Sensor Hub Development Board SKU: EP-0106 ]]&lt;br /&gt;
* [[ DockerPi Motor Board(A) SKU: EP-0108 ]]&lt;br /&gt;
* [[ DockerPi DIY Programmable intelligent toycar SKU: EP-0109]]&lt;br /&gt;
* [[ IoT Node(A) SKU: EP-0105 ]]&lt;br /&gt;
&lt;br /&gt;
==Development Boards==&lt;br /&gt;
==AI Learning==&lt;br /&gt;
* [[ NVIDIA® Jetson Nano™ Developer Kit SKU: EZ-0075 ]]&lt;br /&gt;
* [[ AC8265 Wireless NIC 2.4G/5G WiFi Bluetooth 4.2 for Jetson Nano SKU: L-0031 ]]&lt;br /&gt;
&lt;br /&gt;
==IoT Modules==&lt;br /&gt;
* [[ ESP32 WROVER KIT SKU: EP-0090 ]]&lt;br /&gt;
* [[ ESP32 WROVER SKU: EZ-0061 ]]&lt;br /&gt;
* [[ GeeekNET ESP32 Development Board SKU: EZ-0062 ]]&lt;br /&gt;
* [[ GeeekNET ESP32-WROVER Development Board SKU: EZ-0063 ]]&lt;br /&gt;
----&lt;br /&gt;
==Tinker Board==&lt;br /&gt;
* [[ ASUS Tinker Board SKU: EZ-0066 ]]&lt;br /&gt;
* [[ ASUS Tinker Board Model S SKU: EZ-0065  ]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Raspberry Pi==&lt;br /&gt;
* [[ Raspberry Pi 4 Model B 2GB Version SKU: ER-0018 ]]&lt;br /&gt;
* [[ Raspberry Pi 3 Model B SKU: ER-0007 ]]&lt;br /&gt;
* [[ Raspberry Pi zero w (with enclosure)Kit SKU: K-0231 ]]&lt;br /&gt;
* [[ Raspberry Pi zero (with enclosure) Kit  SKU:K-0230 ]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Banana Pi==&lt;br /&gt;
* [[ Banana Pi R64 SKU: EB-0020 ]]&lt;br /&gt;
* [[ Banana Pi M4 SKU: EP-0019 ]]&lt;br /&gt;
* [[ Banana Pi M64 SKU: EB-0012 ]]&lt;br /&gt;
* [[ Banana Pi M2 ULTRA  SKU: 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: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ USB Game Pad for N64 SKU: D-0023 ]]&lt;br /&gt;
* [[ NT68676 Arcade screen driver board SKU: Z-0261 ]]&lt;br /&gt;
* [[ USB Microphone SKU: Z-0179 ]]&lt;br /&gt;
* [[ GuliKit Route+ Bluetooth Transmitter For Nintendo SWITCH SKU: Z-0279 ]]&lt;br /&gt;
* [[ 8579 Switch Bluetooth Programming Handle (Black) SKU: Z-0252 ]]&lt;br /&gt;
* [[ 8579 Switch Bluetooth Programming Handle (Blue) SKU: Z-0253 ]]&lt;br /&gt;
* [[ 8580 Switch Bluetooth Handle (Gray) SKU: Z-0254 ]]&lt;br /&gt;
* [[ 8951 PS4 Private mode Bluetooth controller SKU: Z-0255 ]]&lt;br /&gt;
* [[ 8577 Switch Split Gamepad SKU: Z-0257 ]]&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;
* [[ GPI Case SKU: 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;
* [[ GeeekPi 40Pin Header Kit Box SKU: T-0020 ]]&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;
&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;
* [[ UPS Plus SKU: EP-0136 ]]&lt;br /&gt;
* [[ Black prototype shield expansion board for Arduino SKU: EP-0131 ]]&lt;br /&gt;
* [[ 24/20-pin ATX DC Power Supply Breakout Board SKU: EP-0130 ]]&lt;br /&gt;
* [[ PCM5122 HIFI Audio DAC Expansion Board For RPi SKU: D-0020 ]]&lt;br /&gt;
* [[ Camera Module For RPi Zero/w SKU: ER-0014 ]]&lt;br /&gt;
* [[ TF-Luna Laser LiDAR module SKU: D-0018 ]]&lt;br /&gt;
* [[ nRF52840 M.2 Developer Kit SKU: G-0002 ]]&lt;br /&gt;
* [[ GPIO Screw Terminal Hat SKU: EP-0129 ]]&lt;br /&gt;
* [[ RPi 4G 3G Hat SKU: EP-0128 ]]&lt;br /&gt;
* [[ RPi Isolated PoE Hat SKU: EP-0127 ]]&lt;br /&gt;
* [[ Easy Multiplexing Board SKU: EP-0123 ]]&lt;br /&gt;
* [[ GeeekPi 1/2 Breadboard SKU: EP-0124 ]]&lt;br /&gt;
* [[ GeeekPi 1/4 Breadboard SKU: EP-0125 ]]&lt;br /&gt;
* [[ GeeekPi Fullsize Breadboard SKU: EP-0126 ]]&lt;br /&gt;
* [[ RPi Prototype Hat Breadboard SKU: K-0335 ]]&lt;br /&gt;
* [[ Jetson Nano 800M IMX219 160 Degree Wide angle Camera SKU:ER-0022 ]]&lt;br /&gt;
* [[ 8 Bit Level conversion module SKU: D-0010 ]]&lt;br /&gt;
* [[ MAX7219 32x8 LED Matrix SKU: D-0012 ]]&lt;br /&gt;
* [[ HC-SR04 Ultrasonic Module SKU: D-0013 ]]&lt;br /&gt;
* [[ 3D printer Endstop mechanical limit switch RAMPS SKU: D-0015 ]]&lt;br /&gt;
* [[ MAX7219 8x8 LED Matrix SKU: D-0016 ]]&lt;br /&gt;
* [[ MAX7219 DIP Chip 8x8 LED Matrix SKU: D-0017 ]]&lt;br /&gt;
* [[ Dual Fan Hat for RPi SKU: EP-0120 ]]&lt;br /&gt;
* [[ GPIO Edge Extension SKU: EP-0121 ]]&lt;br /&gt;
* [[ UPS (With RTC &amp;amp; Coulometer) For Raspberry Pi SKU: EP-0118 ]]&lt;br /&gt;
* [[ Photoelectric limit switch for 3D Printer SKU: D-0008 ]]&lt;br /&gt;
* [[ MAX7219 7-Segment LED matrix SKU: D-0009 ]]&lt;br /&gt;
* [[ Stepper Motor SKU: D-0011 ]]&lt;br /&gt;
* [[ PIR Sensor SKU: D-0005 ]]&lt;br /&gt;
* [[ PCF8574T LCD Driver Board SKU: D-0006 ]]&lt;br /&gt;
* [[ 4Bit-7Seg Digital Display Module SKU: D-0007 ]]&lt;br /&gt;
* [[ 48Vto12V PoE splitter module SKU: P-0010 ]]&lt;br /&gt;
* [[ 48Vto12V PoE splitter module with Gigabit NIC SKU: P-0011 ]]&lt;br /&gt;
* [[ TMC2209 3D Printer Driver Board Pack SKU: D-0003 ]]&lt;br /&gt;
* [[ Vibration Sensor Module SKU: EZ-0089 ]]&lt;br /&gt;
* [[ Pitaya Go IoT SKU: Z-0269 ]]&lt;br /&gt;
* [[ Power-Over-Ethernet (PoE) HAT for RPi 4B/3B+ SKU: EP-0115 ]]&lt;br /&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: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ 8MM Camera module for Raspberr Pi SKU: ER-0021 ]]&lt;br /&gt;
* [[ Gigabit USB-C PoE Splitter SKU:P-0005]]&lt;br /&gt;
* [[ Gigabit USB-C PoE Splitter 48V to 5V for RPi 4B SKU:P-0006]]&lt;br /&gt;
* [[ Pitaya go SKU: Z-0269 ]]&lt;br /&gt;
* [[TFmini PLus Lidar Module（Distance measurement） SKU:Z-0231 ]]&lt;br /&gt;
* [[ Raspberry Pi Zero/Zero W Camera Ribben Cable Wire(Gold finger) SKU: Z-0209 ]]&lt;br /&gt;
* [[ Raspberry Pi night vision camera adjustable-focus module ER-0016 ]]&lt;br /&gt;
* [[1602 Serial LCD Module Display SKU:Z-0234 ]]&lt;br /&gt;
* [[2004 Serial LCD Module Display SKU:Z-0235 ]]&lt;br /&gt;
* [[USB Isolator SKU:EP-0101 ]]&lt;br /&gt;
* [[USB dongle for Raspberry Pi Zero/Zero W SKU:EP-0097 ]] &lt;br /&gt;
* [[MicroBit Basic Extension Board Horizontal Version SKU: EP-0095 ]]&lt;br /&gt;
* [[MicroBit Basic Extension Board Vertical Version SKU: EP-0096 ]]&lt;br /&gt;
* [[TFmini Lidar Module（Distance measurement） SKU:EZ-0068 ]]&lt;br /&gt;
* [[Raspberry Pi GPIO Breakout Board Big Black (T-Type) SKU: EP-0094 ]]&lt;br /&gt;
* [[Raspberry Pi GPIO Breakout Board V1.1(T-Type) SKU: K-0291 ]]&lt;br /&gt;
* [[GeeekPi 1/2 Sized Breadboard SKU: EP-0091 ]]&lt;br /&gt;
* [[GeeekPi 1/4 Sized Breadboard SKU: EP-0092 ]]&lt;br /&gt;
* [[GeeekPi Full Sized Breadboard SKU: EP-0093 ]]&lt;br /&gt;
* [[Pi Zero Enc28j60 Network Adapter Module SKU: EP-0088 ]]&lt;br /&gt;
* [[UPS for Raspberry Pi 4B/3B+/3B SKU: EP-0114]]&lt;br /&gt;
* [[UPS for Raspberry Pi 3B/3B+ SKU: EP-0100]]&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;
* [[USB Joystick controller Board SKU: EP-0080 ]]&lt;br /&gt;
* [[Raspberry Pi LM75B temperature Sensor v1.0  SKU:EP-0031]]&lt;br /&gt;
* [[Raspberry Pi Super Capacitor RTC(English)|Raspberry Pi Super Capacitor RTC]]&lt;br /&gt;
* [[DS1307 RTC Module with BAT for Raspberry Pi  SKU: EP-0059]]&lt;br /&gt;
* [[Raspberry Pi Expansion Board(English)|Raspberry Pi Expansion Board]]&lt;br /&gt;
* [[RPI-B+-GPIO-Triple(English)| RPI-B+-GPIO-Triple]]&lt;br /&gt;
* [[Raspberry Pi Heatsink(English) | Raspberry Pi Heatsink]]&lt;br /&gt;
* [[Raspberry Pi ADC-DAC Module(English) | Raspberry Pi ADC-DAC Module]]&lt;br /&gt;
* [[USB Gamepad SKU: Z-0177 ]]&lt;br /&gt;
* [[RPI B+ GPIO Reference Board SKU:EP-0021 ]]&lt;br /&gt;
* [[RPI B+ Rectangle Extend Board SKU:EP-0020 ]]&lt;br /&gt;
* [[RaspberryPi Downgrade(English)| RaspberryPi Downgrade]]&lt;br /&gt;
* [[RaspberryPi B+ GPIO Reference Board(English)| RaspberryPi B+ GPIO Reference Board]]&lt;br /&gt;
* [[RaspberryPi RS232 UART Board(English)| RaspberryPi RS232 UART Board]]&lt;br /&gt;
* [[GPS Module SKU:EZ-0024]]&lt;br /&gt;
* [[USB-Port-GPS Module SKU:EZ-0048]]&lt;br /&gt;
* [[VGA666 Module For RPi  SKU:EP-0073]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Case &amp;amp; Enclosure &amp;amp; Heat sink==&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;
* [[ Aluminum Alloy CNC Heat Sink without Fan for Raspberry Pi CM4 Module SKU: ZP-0111 ]]&lt;br /&gt;
* [[ Aluminum Alloy CNC Heat Sink with Fan for Raspberry Pi CM4 Module SKU: ZP-0112 ]]&lt;br /&gt;
* [[ Aluminum alloy CNC without fan Armor Case for Raspberry Pi 4B SKU: C-0027 ]]&lt;br /&gt;
* [[ Armor lite heatsink with pwm fan for Raspberry Pi 4B SKU: ZP-0110 ]]&lt;br /&gt;
* [[ Argon One Case V2 SKU: C-0023 ]]&lt;br /&gt;
* [[ Poly+ Black Case for RPi 4B SKU: C-0025 ]]&lt;br /&gt;
* [[ Low-profile ICE tower cooler (Type B) for RPi SKU: EP-0132 ]]&lt;br /&gt;
* [[ Plastic Case Kit for RPi ZeroW/Zero SKU: K-0567 ]]&lt;br /&gt;
* [[ Argon ONE M.2 Case SKU: C-0022 ]]&lt;br /&gt;
* [[ NANOSOUND 1 SKU: C-0020]]&lt;br /&gt;
* [[ Acrylic Case for NT68676 Controller Board SKU: ZP-0105 ]]&lt;br /&gt;
* [[ Nes3Pi SKU: ZP-0103 ]]&lt;br /&gt;
* [[ NesPi 4 Case For RPi 4B SKU: C-0015 ]]&lt;br /&gt;
* [[ Rack Tower Ultimate (12Layer) SKU: ZP-0108 ]]&lt;br /&gt;
* [[ Rack Tower Pro SKU: ZP-0089 ]]&lt;br /&gt;
* [[ Jetson Nano Fan kit SKU: F-0003 ]]&lt;br /&gt;
* [[ Acrylic Set-top box kit for RPi 4B SKU: ZP-0102 ]]&lt;br /&gt;
* [[ Acrylic case for Jetson Nano SKU: ZP-0101 ]]&lt;br /&gt;
* [[ Transparent Layer acrylic bracket shell SKU: ZP-0040 ]]&lt;br /&gt;
* [[ Brown layer acrylic bracket shell SKU: ZP-0039 ]]&lt;br /&gt;
* [[ Black Low-Profile ICE Cooling Fan For RPi SKU: EP-0122 ]]&lt;br /&gt;
* [[ Jetson Nano Iron Case(B01Version) SKU: ZP-0100 ]]&lt;br /&gt;
* [[ Icon Case For RPi 4B SKU: ZP-0099]]&lt;br /&gt;
* [[ Power Button For RPi  SKU: EP-0077]]&lt;br /&gt;
* [[ Pi Supply &amp;amp; USB HUB SKU: EP-0078]]&lt;br /&gt;
* [[ Pi Supply &amp;amp; USB HUB Without Battery SKU: EP-0079]]&lt;br /&gt;
* [[ RPI 5MP CSI Camera SKU: ER-0011]]&lt;br /&gt;
* [[ ESP32 Module SKU: EZ-0059 ]]&lt;br /&gt;
* [[ Brand new 2.4G wireless mini keyboard with mouse touchpad SKU: Z-0153 ]]&lt;br /&gt;
* [[ RPI-ADS1115-ADC-Module SKU:EP-0076]]&lt;br /&gt;
* [[ Acrylic Raspberry Pi set-top box kit SKU: ZP-0098 ]]&lt;br /&gt;
* [[ 6-Layer Acrylic Cluster framework For Raspberry Pi SKU: ZP-0092 ]]&lt;br /&gt;
* [[ Acrylic holder for RPi 4B camera SKU: ZP-0093 ]]&lt;br /&gt;
* [[ Argon ONE Aluminum case with Fan for RPi 4B SKU: C-0008 ]]&lt;br /&gt;
* [[ NEO Case SKU: C-0006 ]]&lt;br /&gt;
* [[ Metal Case for RPi 4B SKU: C-0003 ]]&lt;br /&gt;
* [[ Aluminum Case for RPi 4B with 3510 fan SKU:ZP-0090 ]]&lt;br /&gt;
* [[ Aluminum Case for RPi 4B with 2510 fan SKU:ZP-0091 ]]&lt;br /&gt;
* [[ ABS Case for RPi 4B SKU: C-0005 ]]&lt;br /&gt;
* [[ Metal Case for RPi 4B SKU: C-0004 ]]&lt;br /&gt;
* [[ Rack Tower SKU: ZP-0088 ]]&lt;br /&gt;
* [[ Metal Case For Low-Profile ICE Tower Cooler SKU: ZP-0087 ]] &lt;br /&gt;
* [[ Plastic Case for RPi 4B SKU: C-0002 ]]&lt;br /&gt;
* [[ ABS Case For RPi 4B SKU: C-0001 ]]&lt;br /&gt;
* [[ Low Profile Ice Tower Cooler SKU: EP-0112 ]]&lt;br /&gt;
* [[ Nes4Pi SKU: ZP-0086 ]]&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: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ABS and Acrylic case with 4010 fan for RPi 4B SKU: ZP-0079 ]]&lt;br /&gt;
* [[ 9-Layer Acrylic case (Black &amp;amp; Bigfan) for RPi 4B SKU: ZP-0078 ]]&lt;br /&gt;
* [[ 9-Layer Acrylic case (Black) for RPi 4B SKU: ZP-0068 ]]&lt;br /&gt;
* [[ Aluminum Case with Suspension Fan for RPi 4B SKU: Z-0278 ]]&lt;br /&gt;
* [[ 9-Layer Acrylic case for RPi 4B SKU: ZP-0085 ]]&lt;br /&gt;
* [[ ICE Tower Cooling Fan For Jetson Nano SKU: EP-0113 ]]&lt;br /&gt;
* [[ ICE Tower Cooling Fan  Black SKU: EP-0111 ]]&lt;br /&gt;
* [[ E Type ABS Case for RPi 4B  SKU: ZP-0081 ]]&lt;br /&gt;
* [[ L Type ABS Case for RPi 4B  SKU: ZP-0082 ]]&lt;br /&gt;
* [[ Y Type Aluminum Case for RPi 4B  SKU: ZP-0083 ]]&lt;br /&gt;
* [[ ABS Electrical Box for RPi 4B SKU: Z-0272 ]]&lt;br /&gt;
* [[ ABS Electrical Box for RPi 3B/3B+ SKU: C-0007 ]]&lt;br /&gt;
* [[ ABS Buckle Case for RPi 4B SKU: Z-0273 ]]&lt;br /&gt;
* [[ 5-layer acrylic case for RPi 4B SKU: ZP-0080 ]]&lt;br /&gt;
* [[ Armor Case For RPi 4B with Dual Fan SKU: ZP-0077 ]]&lt;br /&gt;
* [[ Armor Case For RPi 4B/3B/3B+ without Fan SKU: ZP-0074 ]]&lt;br /&gt;
* [[ New ABS H-Type Case for Raspberry Pi 4B SKU: ZP-0075 ]]&lt;br /&gt;
* [[ ABS experiment holder platform SKU: ZP-0073 ]]&lt;br /&gt;
* [[ 9 Layers Acrylic Case with 4010 Fan SKU: ZP-0076 ]]&lt;br /&gt;
* [[ 9 Layers Acrylic Case with Fan SKU: ZP-0067 ]]&lt;br /&gt;
* [[ Single layer Acrylic Case with transparent fan SKU: ZP-0066 ]]&lt;br /&gt;
* [[ Brown single layer Acrylic Case with fan SKU: ZP-0065 ]]&lt;br /&gt;
* [[ Square radiator for Raspberry Pi 4B SKU: ZP-0038 ]]&lt;br /&gt;
* [[ Iron Case for Jetson Nano SKU: ZP-0072 ]]&lt;br /&gt;
* [[ Aluminum Heat Sink Pack for Raspberry Pi 4B SKU: Z-0266 ]]&lt;br /&gt;
* [[ Metal Case for RPi 4B with 4010 Fan SKU: ZP-0070 ]]&lt;br /&gt;
* [[ Metal Case for RPi 4B (Silver &amp;amp; Black) SKU: ZP-0071 ]]&lt;br /&gt;
* [[ Metal Case for RPi 4B (Silver &amp;amp; Black) SKU: Z-0264 ]]&lt;br /&gt;
* [[ ICE-Tower CPU Cooling Fan for Raspberry Pi SKU: EP-0107 ]]&lt;br /&gt;
* [[ Armor Case For RPi 3B+ without Fan SKU: ZP-0051 ]]&lt;br /&gt;
* [[Armor Case for Raspberry Pi 3A+ SKU: Z-0237 ]]&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: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[Acrylic Shell With Fan Guard For RPi SKU: ZP-0025 ]]&lt;br /&gt;
* [[Acrylic Shell With Fan Guard For RPi (Brown Color) SKU: ZP-0069 ]]&lt;br /&gt;
* [[3510 Version Extreme Cooling Fan Kit For Raspberry Pi 4B/3B/3B+  SKU: ZP-0042]]&lt;br /&gt;
* [[New version Copper Heat Sink SKU: Z-0185]]&lt;br /&gt;
* [[Ultimate Cooling Fan Kit For Raspberry Pi 4B/3B+/3B/2B/B+ SKU: ZP-0037]]&lt;br /&gt;
* [[ABS case with fan and heat sink for Raspberry Pi 3B+/3B/2B/B+(Black/White) SKU: Z-0183]] &lt;br /&gt;
* [[Raspberry Pi 3B white acrylic case SKU: Z-0127]]&lt;br /&gt;
* [[Raspberry Pi 3 Enclosure with heat sinks SKU: K-0172]]&lt;br /&gt;
* [[ USB HUB Power Supply for Raspberry Pi Double Layer Acrylic Rack SKU: K-0178 ]]&lt;br /&gt;
* [[ Black ABS enclosure with screwdriver for Raspberry Pi SKU: Z-0157 ]]&lt;br /&gt;
* [[4-layer-Transparent-Acrylic-Case-Clear-Shell-Enclosure-for-Raspberry-Pi-3-Model-B/2B/B+ SKU: ZP-0024]]&lt;br /&gt;
* [[Micro-HDMI-to-Standard-HDMI-Male-Cable-4K-Pi4B SKU:L-0030]]&lt;br /&gt;
* [[ Ultimate Cooling Fan Kit for Raspberry Pi 3/2/B+  SKU: ZP-0029 ]]&lt;br /&gt;
* [[RPi ABS Case SKU: ZP-0049 ]]&lt;br /&gt;
* [[Armor Case For RPi 3B SKU: Z-0193]]&lt;br /&gt;
* [[Armor Case For RPi 3B+ SKU: Z-0208 ]]&lt;br /&gt;
* [[10 Layers Acrylic Case for Raspberry Pi 3B+/3B/2B/B+ SKU: Z-0190]]&lt;br /&gt;
* [[Raspberry Pi 3 Aluminum alloy Case SKU: Z-0184]]&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;
==Cooling 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;
&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;
* [[ 5V Mini Cooling Fan for Raspberry Pi SKU: F-0010 ]]&lt;br /&gt;
* [[ MINIWARE MHP30 Mini Hot Plate Preheater SKU: D-0022 ]]&lt;br /&gt;
* [[ 4010 24V Blue Backlight Fan SKU: F-0008 ]]&lt;br /&gt;
* [[ 5V DVR Mainboard Fan SKU: F-0007 ]]&lt;br /&gt;
* [[ 4010 Blower SKU: F-0005 ]]&lt;br /&gt;
* [[ 5015 Blower SKU: F-0006 ]]&lt;br /&gt;
* [[DC 12V Brushless Blue light Fan SKU: F-0001 ]]&lt;br /&gt;
* [[DC 12V Brushless RGB light Fan SKU: F-0002 ]]&lt;br /&gt;
&amp;lt;/td&amp;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;
* [[ DT71 Mini digital tweezers SKU: T-0022 ]]&lt;br /&gt;
* [[ Desoldering Iron Kit SKU:T-0021 ]]&lt;br /&gt;
* [[ TS80P More-US SKU:T-0019 ]]&lt;br /&gt;
* [[ TS80P kit SKU:T-0015 ]]&lt;br /&gt;
* [[ TS100 kit SKU:T-0016 ]]&lt;br /&gt;
* [[ Tin Lead Rosin Core Solder Wire for Electrical Soldering (1.0mm/0.04Inch) SKU: T-0017 ]]&lt;br /&gt;
* [[ Tin Lead Rosin Core Solder Wire for Electrical Soldering (0.8mm/0.03Inch) SKU: T-0018 ]]&lt;br /&gt;
* [[ DS213 mini oscilloscope SKU: 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;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;
&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;
* [[ 2.13 inch E-paper (BRW) SKU: EP-0133 ]]&lt;br /&gt;
* [[0.91 Inch OLED Display SKU: EP-0119 ]]&lt;br /&gt;
* [[PiOLED (0.91 Inch OLED Module) SKU: S-0007 ]]&lt;br /&gt;
* [[0.91 Inch OLED Module SKU: S-0006]]&lt;br /&gt;
* [[0.96 Inch OLED Module SKU: S-0005]]&lt;br /&gt;
* [[0.91 Inch OLED Module  SKU: EP-0060]]&amp;lt;font color=red&amp;gt;EOL&amp;lt;/font&amp;gt;&lt;br /&gt;
* [[0.96 Inch OLED Module  SKU:EP-0049]] &amp;lt;font color=red&amp;gt;EOL&amp;lt;/font&amp;gt;&lt;br /&gt;
* [[52Pi-BPi LCD 1602 Module SKU:EP-0045]]&lt;br /&gt;
* [[RGB LCD1602 SKU:EP-0058]]&lt;br /&gt;
* [[RPI-RGB-LED-Matrix SKU:EP-0075]]&lt;br /&gt;
* [[Raspberry Pi 2.2 Inch GPIO display(without touch screen)  SKU:EP-0062]]&lt;br /&gt;
* [[Raspberry Pi 2.4 Inch GPIO touch screen  SKU:EP-0063]]&lt;br /&gt;
* [[TFT28 Display + Touch Panel + NoPCB  SKU:EP-0066 ]]&lt;br /&gt;
* [[TFT28 Display + Touch Panel + PCB SKU:EP-0065 ]]&lt;br /&gt;
* [[5-Inch-800x480-HDMI-TFT-LCD-Touch-Screen  SKU:Z-0053]]&lt;br /&gt;
* [[5-Inch-800x480-HDMI-GPIO-Touch-Screen  SKU:EP-0072]]&lt;br /&gt;
* [[5-Inch-800x480-Capacitive-Touch-Screen SKU: 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: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ 7 inch 1024x600 Screen and driver board with Amplifier and Two speakers Kit SKU: EP-0089]]&lt;br /&gt;
* [[7-Inch-1024x600 Capacitive Touch Screen (Extend Two USB HOST Port) with 720P Camera SKU: EP-0087 ]]&lt;br /&gt;
* [[7-Inch-1024x600 Capacitive Touch Screen (Extend Two USB HOST Port) SKU: EP-0085 ]]&lt;br /&gt;
* [[7-Inch-1024x600 Capacitive Touch Screen DIY Kit SKU: EP-0084]]&lt;br /&gt;
* [[7-Inch-1024x600 Capacitive Touch Panel DIY Kit SKU: EP-0082]]&lt;br /&gt;
* [[7-Inch-1024x600 Display Kit (with Touch Screen)   SKU:Z-0017]]&lt;br /&gt;
* [[7-Inch-1024x600 Display Kit (without Touch Screen) SKU:Z-0051]]&lt;br /&gt;
* [[7-Inch-1024x600 Monitor SKU:K-0106 ]]&lt;br /&gt;
* [[7-Inch-800x480 Display Kit(without Touch Screen)  SKU:Z-0111]]&lt;br /&gt;
* [[7-Inch-1280x800 Display Kit(without Touch Screen) SKU:Z-0112]]&lt;br /&gt;
* [[7-Inch-800x480 Monitor  SKU:K-0101]]&lt;br /&gt;
* [[7-Inch-1280*800 Monitor SKU:K-0102]]&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;
* [[15.6 Inch 1920x1080 FHD Display SKU: S-0003 ]]&lt;br /&gt;
* [[10.1 Inch 1280x800 Display Kit(without Touch Screen) SKU: S-0001 ]]&lt;br /&gt;
* [[10.1-Inch-1024x600 Display Kit (without Touch Screen) SKU:Z-0113]]&lt;br /&gt;
* [[10.1-Inch-1366x768 Display Kit(without Touch Screen) SKU:Z-0114]]&lt;br /&gt;
* [[ 10.1-Inch-1280x800 Display Kit(Without Touch Screen) SKU:Z-0143]]&lt;br /&gt;
* [[10.1-Inch-1366x768 Monitor SKU:K-0103]]&lt;br /&gt;
* [[Super Luxury 10.1 LCD Television SKU: K-0104]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Power Supply==&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;
* [[ Milestone wireless charger SKU: P-0017 ]]&lt;br /&gt;
* [[5V-3A EU-Standard with switch SKU:P-0007]] &lt;br /&gt;
* [[5V-3A US-Standard with switch SKU:P-0008]] &lt;br /&gt;
* [[5V-3A UK-Standard with switch SKU:P-0009]] &lt;br /&gt;
* [[5V-3A UK-Standard SKU:P-0004]] &amp;lt;font color=red&amp;gt;EOL&amp;lt;/font&amp;gt;&lt;br /&gt;
* [[5V-3A EU-Standard SKU:P-0003]] &amp;lt;font color=red&amp;gt;EOL&amp;lt;/font&amp;gt;&lt;br /&gt;
* [[5V-3A US-Standard SKU:P-0002]] &amp;lt;font color=red&amp;gt;EOL&amp;lt;/font&amp;gt;&lt;br /&gt;
* [[5V-4A Travel Adapter SKU:P-0001]]&lt;br /&gt;
* [[5V-2.5A-AU-Standard  SKU:Z-0132]]&lt;br /&gt;
* [[5V-2.5A-UK-Standard  SKU:Z-0133]]&lt;br /&gt;
* [[5V-2.5A-US-Standard  SKU:Z-0121]]&lt;br /&gt;
* [[5V-2.5A-EU-Standard  SKU:Z-0097]]&lt;br /&gt;
* [[5V-2.5A-EU/US/UK/AU-Plug  SKU:Z-0136]]&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;
* [[US-Standard-With-Power-Switch-5V-2.5A SKU:Z-0147]]&lt;br /&gt;
* [[EU-Standard-With-Power-Switch-5V-2.5A SKU:Z-0148]]&lt;br /&gt;
* [[AU-Standard-With-Power-Switch-5V-2.5A SKU:Z-0149]]&lt;br /&gt;
* [[UK-Standard-With-Power-Switch-5V-2.5A SKU:Z-0150]]&lt;br /&gt;
* [[Banana Pi US-standard Power Supply SKU: Z-0154]]&lt;br /&gt;
* [[Banana Pi EU-standard Power Supply SKU: Z-0155]]&lt;br /&gt;
* [[MicroUSB Cable with LCD Voltage/Current Display SKU: L-0026 ]]&lt;br /&gt;
* [[MicroUSB Cable with LCD Voltage/Current Display(Support IPhone) SKU: L-0027 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Raspberry Pi Kits==&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;
* [[ Raspberry Pi Pico Starter Kit SKU: K-0581 ]]&lt;br /&gt;
* [[ Metal Alloy Shell with Silver/Black Low-Profile ICE tower Cooler for RPi 4B SKU: K-0522 ]]&lt;br /&gt;
* [[ 220PCS Standoffs M2.5 Brass Spacer Kit for Raspberry Pi SKU: T-0008 ]]&lt;br /&gt;
* [[RPi 4B Starter Kit SKU: K-0512 ]]&lt;br /&gt;
* [[ABS Holder Kit For RPi &amp;amp; Arduino SKU: K-0502 ]]&lt;br /&gt;
* [[ ABS Case for RPi 4B with 3.5 Inch Resistive Touch Screen SKU: K-0403 ]]&lt;br /&gt;
* [[Arcade Game Machine DIY Kits with Joysticks(Double Players) SKU: K-0167 ]]&lt;br /&gt;
* [[Arcade Game Machine DIY Kits without Joysticks (Single Player) SKU: K-0168 ]]&lt;br /&gt;
* [[Arcade Game Machine DIY Kits without Joysticks (Double Players) SKU: K-0169 ]]&lt;br /&gt;
* [[7 inch 1024x600 Capacitive Touch Screen(Extend Two USB Hosts) with 720P Camera and Acrylic Case Kit SKU: K-0259 ]]&lt;br /&gt;
* [[5 inch Capacitive touch screen &amp;amp; Acrylic Case Kit SKU: K-0238 ]]&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: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[Retro Game Kit (Single Player) SKU: K-0185]]&lt;br /&gt;
* [[Retro Game Kit (Double Players) SKU: K-0186 ]]&lt;br /&gt;
* [[Starter Kit  SKU: Z-0142]]&lt;br /&gt;
* [[Raspberry Pi Complete kit SKU: K-0111]]&lt;br /&gt;
* [[Raspberry Pi 3B Overlays Application Kit SKU: Z-0144]]&lt;br /&gt;
* [[Raspberry Pi Retro Gamepads Kit with 10.1 inch Monitor  SKU: K-0171]]&lt;br /&gt;
* [[Raspberry Pi RetroPie Game Kit (with 5 inch GPIO TouchScreen &amp;amp; GamePad x2 )  SKU: K-0174]]&lt;br /&gt;
* [[Raspberry Pi RetroPie Game Kit with 2.4GHz wireless GamePad x2]]&lt;br /&gt;
* [[Raspberry Pi Acrylic DIY Retro Game Arcade Kit SKU:K-0180]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Official Support Products==&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;
* [[Raspberry Pi official 7-Inch-Touch-Screen  SKU:Z-0104]]&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;
* [[Banana Pi official 7-Inch-Capacitance-Screen  SKU:Z-0088]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
==X-Series Expansion Board==&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;
&amp;lt;b&amp;gt;&amp;lt;font color=red&amp;gt;New Products 2020.4.21 updated&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* [[ X872 SKU: EZ-0094 ]]&lt;br /&gt;
* [[ X728 SKU: EZ-0095 ]]&lt;br /&gt;
* [[ X835 SKU: EZ-0090 ]]&lt;br /&gt;
* [[ X856 SKU: EZ-0087 ]]&lt;br /&gt;
* [[ X828 SKU: EZ-0088 ]]&lt;br /&gt;
* [[ X725 SKU: EZ-0086 ]]&lt;br /&gt;
* [[ X855 SKU: EZ-0083 ]]&lt;br /&gt;
* [[ X825 SKU: EZ-0082 ]]&lt;br /&gt;
* [[ X822 SKU: EZ-0076 ]]&lt;br /&gt;
* [[ X852 SKU: EZ-0077 ]]&lt;br /&gt;
* [[ X860 SKU: EZ-0078 ]]&lt;br /&gt;
* [[ X870 SKU: EZ-0079 ]]&lt;br /&gt;
* [[ X735 SKU: EZ-0080 ]]&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;
&amp;lt;b&amp;gt;&amp;lt;font color=Green&amp;gt;Old Products 2018.6.6 updated&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* [[ X720 SKU: EZ-0072]]&lt;br /&gt;
* [[ X730 SKU: EZ-0073]]&lt;br /&gt;
* [[ X830 SKU: EZ-0064]]&lt;br /&gt;
* [[ X105 SKU: EZ-0008]]&lt;br /&gt;
* [[ X200 SKU: EZ-0002]]&lt;br /&gt;
* [[ X300 SKU: EZ-0003]]&lt;br /&gt;
* [[ X205 SKU: EZ-0046]]&lt;br /&gt;
* [[ X400 SKU: EZ-0044]]&lt;br /&gt;
* [[ X600  SKU:EZ-0045]]&lt;br /&gt;
* [[ X3000 SKU:EZ-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: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ X6000P-7.1CH DIY Kits SKU:EZ-0052]]&lt;br /&gt;
* [[ X5000P Raspberry Pi HiFi Sound Card SKU:EZ-0053]]&lt;br /&gt;
* [[ X4000P SKU:EZ-0054]]&lt;br /&gt;
* [[ X4000K DIY Kits SKU:EZ-0055]]&lt;br /&gt;
* [[ X6000K-8.0CH DIY Kits SKU:EZ-0056]]&lt;br /&gt;
* [[ X5000K DIY Kits SKU:EZ-0057]]&lt;br /&gt;
* [[ X1000K DIY Kits SKU:EZ-0058]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
===X series Acrylic Case===&lt;br /&gt;
* [[ Acrylic Case for X725 SKU: ZP-0096 ]]&lt;br /&gt;
* [[ Acrylic Case for X825 SKU: ZP-0097 ]]&lt;br /&gt;
&lt;br /&gt;
==Operation System Card==&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;
* [[OctoPrint]]&lt;br /&gt;
* [[Noobs]]&lt;br /&gt;
* [[Raspbian]]&lt;br /&gt;
* [[DietPi]]&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;
* [[Batocera]]&lt;br /&gt;
* [[RetroPie]]&lt;br /&gt;
* [[Ubuntu Mate 16.04]]&lt;br /&gt;
* [[OSMC]]&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;
* [[5-inch-GPIO-touch-screen-Based-on-Raspbian]]&lt;br /&gt;
* [[Windows 10 IOT R2 (Red Stone) 16GB]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==52Pi Expand Modules ( End Of Life )==&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;
* [[RPI T-Cobbler GPIO Extend Board With Level shifting SKU:EP-0014]]&lt;br /&gt;
* [[RPI T-Cobbler GPIO Extend Board SKU:EP-0003]]&lt;br /&gt;
* [[RPI 16x2 LCD+Keypad Kit SKU:Z-0019]]&lt;br /&gt;
* [[RPI B+ to B GPIO Downgrade Board SKU:EP-0027 ]]&lt;br /&gt;
* [[RPI I2C GPIO Extend Board SKU:EP-0013]]&lt;br /&gt;
* [[RPI AD/DA Extend Board SKU:EP-0022]]&lt;br /&gt;
* [[RPI B GPIO Reference Board SKU:EP-0018]]&lt;br /&gt;
* [[RPI GPIO Triple Extend Board SKU:EP-0012]]&lt;br /&gt;
* [[RPI GPIO Rectangle Extend Board SKU:EP-0011]]&lt;br /&gt;
* [[RPI I2C Logic Level Converter SKU:EP-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: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[RPI Infinity cascade IO expand Module SKU:EP-0028]]&lt;br /&gt;
* [[RPI Arduino Board SKU:EP-0023]]&lt;br /&gt;
* [[RPI RTC Module SKU:EP-0016]]&lt;br /&gt;
* [[RPI B TF TO SD SKU:EP-0032]]&lt;br /&gt;
* [[RPI UART Extend Board SKU:EP-0017]]&lt;br /&gt;
* [[RPI B+ Prototyping Pi Plate  Board SKU:EP-0042]]&lt;br /&gt;
* [[RPI B+ GPIO Triple Extend Board SKU:EP-0029]]&lt;br /&gt;
* [[RPI B Prototyping Pi Plate  Board SKU:EP-0004]]&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;
* [[RPI HAT Breakout Mini Kit SKU:EP-0056]]&lt;br /&gt;
* [[RPI HAT Prototype Module SKU:EP-0057]]&lt;br /&gt;
* [[RPI T Type Extension Board SKU:EP-0046]] &lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Documentation===&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;pre&amp;gt;Some simple guides to setting up the software on your Raspberry Pi.&lt;br /&gt;
Beginners should start with NOOBS, which gives the user a choice of operating system from the standard distributions.&lt;br /&gt;
The recommended distribution for normal use is Raspbian. &lt;br /&gt;
Alternatives are available, such as LibreELEC (Kodi media centre) or Arch Linux.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Installing operation system on your Raspberry Pi &lt;br /&gt;
** [[NOOBS]]&lt;br /&gt;
** [[Installing images]]&lt;br /&gt;
** [[SD Cards]]&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=Jetson_Nano_Metal_Case(B01Version)_SKU:_ZP-0100&amp;diff=10078</id>
		<title>Jetson Nano Metal Case(B01Version) SKU: ZP-0100</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=Jetson_Nano_Metal_Case(B01Version)_SKU:_ZP-0100&amp;diff=10078"/>
		<updated>2021-04-14T03:04:12Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: TaterLi moved page Jetson Nano Metal Case(B01Version) SKU: ZP-0100 to Jetson Nano Iron Case(B01Version) SKU: ZP-0100: correct info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Jetson Nano Iron Case(B01Version) SKU: ZP-0100]]&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=ZP-0100&amp;diff=10077</id>
		<title>ZP-0100</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=ZP-0100&amp;diff=10077"/>
		<updated>2021-04-14T03:04:12Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: TaterLi moved page Jetson Nano Metal Case(B01Version) SKU: ZP-0100 to Jetson Nano Iron Case(B01Version) SKU: ZP-0100: correct info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Jetson Nano Iron Case(B01Version)==&lt;br /&gt;
[[File:JesonNano 01.jpg|right|320px]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;PRE&amp;gt;NOTE: The Jetson Nano mainboard and the antenna, camera are not included in the package&amp;lt;/PRE&amp;gt;&lt;br /&gt;
This is a jetson nano case, which can provide switch button, RESET button, FR mode (Factory Recovery mode) antenna interface mounting hole.&amp;lt;br&amp;gt; &lt;br /&gt;
It can be installed after you purchase the antenna, also provides an internal cooling fan and installation screwdriver, it is Made of sheet iron.&amp;lt;br&amp;gt;&lt;br /&gt;
Tt is very beautiful and strong, which can protect your jetson nano very well, and also provides a fan that supports PWM signal.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* Easy to assemble&lt;br /&gt;
* Contains necessary components&lt;br /&gt;
* Support key switch&lt;br /&gt;
* Support reset button&lt;br /&gt;
* Support factory mode button&lt;br /&gt;
* Support additional antenna installation&lt;br /&gt;
* Provide sheet iron protection&lt;br /&gt;
==Gallery==&lt;br /&gt;
{|&lt;br /&gt;
|[[File:JesonNano 02.jpg|left|320px]]&lt;br /&gt;
|[[File:JesonNano 03.jpg|none|320px]]&lt;br /&gt;
|[[File:JesonNano 04.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
{|&lt;br /&gt;
|[[File:JesonNano 05.jpg|left|320px]]&lt;br /&gt;
|[[File:JesonNano 06.jpg|none|320px]]&lt;br /&gt;
|[[File:JesonNano 07.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Installation Detials==&lt;br /&gt;
[[File:Installation guide1.jpg|left|800px]]&lt;br /&gt;
[[File:Installation guide2.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
==Package Includes==&lt;br /&gt;
* 1 x Jetson Nano iron case&lt;br /&gt;
* 1 x side fan&lt;br /&gt;
* 1 x PWM speed control fan&lt;br /&gt;
* 2 x camera iron bracket&lt;br /&gt;
* 4 x long screws&lt;br /&gt;
* 4 x nut&lt;br /&gt;
* 8 x short screws&lt;br /&gt;
* 8 x acrylic gasket&lt;br /&gt;
* 2 x jumper cap&lt;br /&gt;
* 8 x housing screws&lt;br /&gt;
* 1 x tweezers&lt;br /&gt;
* 1 x screwdriver&lt;br /&gt;
* 1 x Reset button&lt;br /&gt;
* 1 x FC mode button&lt;br /&gt;
* 1 x power switch&lt;br /&gt;
[[File:Jeson-Nano清单.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
* jetson nano, Jetson Nano Iron Case(B01Version), Iron case,&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=ZP-0100&amp;diff=10076</id>
		<title>ZP-0100</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=ZP-0100&amp;diff=10076"/>
		<updated>2021-04-14T03:03:59Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Jetson Nano Iron Case(B01Version)==&lt;br /&gt;
[[File:JesonNano 01.jpg|right|320px]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
&amp;lt;PRE&amp;gt;NOTE: The Jetson Nano mainboard and the antenna, camera are not included in the package&amp;lt;/PRE&amp;gt;&lt;br /&gt;
This is a jetson nano case, which can provide switch button, RESET button, FR mode (Factory Recovery mode) antenna interface mounting hole.&amp;lt;br&amp;gt; &lt;br /&gt;
It can be installed after you purchase the antenna, also provides an internal cooling fan and installation screwdriver, it is Made of sheet iron.&amp;lt;br&amp;gt;&lt;br /&gt;
Tt is very beautiful and strong, which can protect your jetson nano very well, and also provides a fan that supports PWM signal.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* Easy to assemble&lt;br /&gt;
* Contains necessary components&lt;br /&gt;
* Support key switch&lt;br /&gt;
* Support reset button&lt;br /&gt;
* Support factory mode button&lt;br /&gt;
* Support additional antenna installation&lt;br /&gt;
* Provide sheet iron protection&lt;br /&gt;
==Gallery==&lt;br /&gt;
{|&lt;br /&gt;
|[[File:JesonNano 02.jpg|left|320px]]&lt;br /&gt;
|[[File:JesonNano 03.jpg|none|320px]]&lt;br /&gt;
|[[File:JesonNano 04.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
{|&lt;br /&gt;
|[[File:JesonNano 05.jpg|left|320px]]&lt;br /&gt;
|[[File:JesonNano 06.jpg|none|320px]]&lt;br /&gt;
|[[File:JesonNano 07.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Installation Detials==&lt;br /&gt;
[[File:Installation guide1.jpg|left|800px]]&lt;br /&gt;
[[File:Installation guide2.jpg|left|800px]]&lt;br /&gt;
&amp;lt;br style=clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
==Package Includes==&lt;br /&gt;
* 1 x Jetson Nano iron case&lt;br /&gt;
* 1 x side fan&lt;br /&gt;
* 1 x PWM speed control fan&lt;br /&gt;
* 2 x camera iron bracket&lt;br /&gt;
* 4 x long screws&lt;br /&gt;
* 4 x nut&lt;br /&gt;
* 8 x short screws&lt;br /&gt;
* 8 x acrylic gasket&lt;br /&gt;
* 2 x jumper cap&lt;br /&gt;
* 8 x housing screws&lt;br /&gt;
* 1 x tweezers&lt;br /&gt;
* 1 x screwdriver&lt;br /&gt;
* 1 x Reset button&lt;br /&gt;
* 1 x FC mode button&lt;br /&gt;
* 1 x power switch&lt;br /&gt;
[[File:Jeson-Nano清单.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
* jetson nano, Jetson Nano Iron Case(B01Version), Iron case,&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=Main_Page&amp;diff=10075</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=Main_Page&amp;diff=10075"/>
		<updated>2021-04-14T02:57:56Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: /* Case &amp;amp; Enclosure &amp;amp; Heat sink */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&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.&lt;br /&gt;
[[Hardware Compatible List]]&lt;br /&gt;
&lt;br /&gt;
==Hat Stack==&lt;br /&gt;
* [[ DockerPi RISCV ProtoType Board SKU: EP-0117 ]]&lt;br /&gt;
* [[ DockerPi-H Station Board SKU: EP-0116 ]]&lt;br /&gt;
* [[ DockerPi NightLight SKU: EP-0098 ]]&lt;br /&gt;
* [[ DockerPi 4 Channel Relay SKU: EP-0099 ]]&lt;br /&gt;
* [[ DockerPi PowerBoard SKU: EP-0104 ]]&lt;br /&gt;
* [[ DockerPi Sensor Hub Development Board SKU: EP-0106 ]]&lt;br /&gt;
* [[ DockerPi Motor Board(A) SKU: EP-0108 ]]&lt;br /&gt;
* [[ DockerPi DIY Programmable intelligent toycar SKU: EP-0109]]&lt;br /&gt;
* [[ IoT Node(A) SKU: EP-0105 ]]&lt;br /&gt;
&lt;br /&gt;
==Development Boards==&lt;br /&gt;
==AI Learning==&lt;br /&gt;
* [[ NVIDIA® Jetson Nano™ Developer Kit SKU: EZ-0075 ]]&lt;br /&gt;
* [[ AC8265 Wireless NIC 2.4G/5G WiFi Bluetooth 4.2 for Jetson Nano SKU: L-0031 ]]&lt;br /&gt;
&lt;br /&gt;
==IoT Modules==&lt;br /&gt;
* [[ ESP32 WROVER KIT SKU: EP-0090 ]]&lt;br /&gt;
* [[ ESP32 WROVER SKU: EZ-0061 ]]&lt;br /&gt;
* [[ GeeekNET ESP32 Development Board SKU: EZ-0062 ]]&lt;br /&gt;
* [[ GeeekNET ESP32-WROVER Development Board SKU: EZ-0063 ]]&lt;br /&gt;
----&lt;br /&gt;
==Tinker Board==&lt;br /&gt;
* [[ ASUS Tinker Board SKU: EZ-0066 ]]&lt;br /&gt;
* [[ ASUS Tinker Board Model S SKU: EZ-0065  ]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Raspberry Pi==&lt;br /&gt;
* [[ Raspberry Pi 4 Model B 2GB Version SKU: ER-0018 ]]&lt;br /&gt;
* [[ Raspberry Pi 3 Model B SKU: ER-0007 ]]&lt;br /&gt;
* [[ Raspberry Pi zero w (with enclosure)Kit SKU: K-0231 ]]&lt;br /&gt;
* [[ Raspberry Pi zero (with enclosure) Kit  SKU:K-0230 ]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Banana Pi==&lt;br /&gt;
* [[ Banana Pi R64 SKU: EB-0020 ]]&lt;br /&gt;
* [[ Banana Pi M4 SKU: EP-0019 ]]&lt;br /&gt;
* [[ Banana Pi M64 SKU: EB-0012 ]]&lt;br /&gt;
* [[ Banana Pi M2 ULTRA  SKU: 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: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ USB Game Pad for N64 SKU: D-0023 ]]&lt;br /&gt;
* [[ NT68676 Arcade screen driver board SKU: Z-0261 ]]&lt;br /&gt;
* [[ USB Microphone SKU: Z-0179 ]]&lt;br /&gt;
* [[ GuliKit Route+ Bluetooth Transmitter For Nintendo SWITCH SKU: Z-0279 ]]&lt;br /&gt;
* [[ 8579 Switch Bluetooth Programming Handle (Black) SKU: Z-0252 ]]&lt;br /&gt;
* [[ 8579 Switch Bluetooth Programming Handle (Blue) SKU: Z-0253 ]]&lt;br /&gt;
* [[ 8580 Switch Bluetooth Handle (Gray) SKU: Z-0254 ]]&lt;br /&gt;
* [[ 8951 PS4 Private mode Bluetooth controller SKU: Z-0255 ]]&lt;br /&gt;
* [[ 8577 Switch Split Gamepad SKU: Z-0257 ]]&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;
* [[ GPI Case SKU: 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;
* [[ GeeekPi 40Pin Header Kit Box SKU: T-0020 ]]&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;
&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;
* [[ UPS Plus SKU: EP-0136 ]]&lt;br /&gt;
* [[ Black prototype shield expansion board for Arduino SKU: EP-0131 ]]&lt;br /&gt;
* [[ 24/20-pin ATX DC Power Supply Breakout Board SKU: EP-0130 ]]&lt;br /&gt;
* [[ PCM5122 HIFI Audio DAC Expansion Board For RPi SKU: D-0020 ]]&lt;br /&gt;
* [[ Camera Module For RPi Zero/w SKU: ER-0014 ]]&lt;br /&gt;
* [[ TF-Luna Laser LiDAR module SKU: D-0018 ]]&lt;br /&gt;
* [[ nRF52840 M.2 Developer Kit SKU: G-0002 ]]&lt;br /&gt;
* [[ GPIO Screw Terminal Hat SKU: EP-0129 ]]&lt;br /&gt;
* [[ RPi 4G 3G Hat SKU: EP-0128 ]]&lt;br /&gt;
* [[ RPi Isolated PoE Hat SKU: EP-0127 ]]&lt;br /&gt;
* [[ Easy Multiplexing Board SKU: EP-0123 ]]&lt;br /&gt;
* [[ GeeekPi 1/2 Breadboard SKU: EP-0124 ]]&lt;br /&gt;
* [[ GeeekPi 1/4 Breadboard SKU: EP-0125 ]]&lt;br /&gt;
* [[ GeeekPi Fullsize Breadboard SKU: EP-0126 ]]&lt;br /&gt;
* [[ RPi Prototype Hat Breadboard SKU: K-0335 ]]&lt;br /&gt;
* [[ Jetson Nano 800M IMX219 160 Degree Wide angle Camera SKU:ER-0022 ]]&lt;br /&gt;
* [[ 8 Bit Level conversion module SKU: D-0010 ]]&lt;br /&gt;
* [[ MAX7219 32x8 LED Matrix SKU: D-0012 ]]&lt;br /&gt;
* [[ HC-SR04 Ultrasonic Module SKU: D-0013 ]]&lt;br /&gt;
* [[ 3D printer Endstop mechanical limit switch RAMPS SKU: D-0015 ]]&lt;br /&gt;
* [[ MAX7219 8x8 LED Matrix SKU: D-0016 ]]&lt;br /&gt;
* [[ MAX7219 DIP Chip 8x8 LED Matrix SKU: D-0017 ]]&lt;br /&gt;
* [[ Dual Fan Hat for RPi SKU: EP-0120 ]]&lt;br /&gt;
* [[ GPIO Edge Extension SKU: EP-0121 ]]&lt;br /&gt;
* [[ UPS (With RTC &amp;amp; Coulometer) For Raspberry Pi SKU: EP-0118 ]]&lt;br /&gt;
* [[ Photoelectric limit switch for 3D Printer SKU: D-0008 ]]&lt;br /&gt;
* [[ MAX7219 7-Segment LED matrix SKU: D-0009 ]]&lt;br /&gt;
* [[ Stepper Motor SKU: D-0011 ]]&lt;br /&gt;
* [[ PIR Sensor SKU: D-0005 ]]&lt;br /&gt;
* [[ PCF8574T LCD Driver Board SKU: D-0006 ]]&lt;br /&gt;
* [[ 4Bit-7Seg Digital Display Module SKU: D-0007 ]]&lt;br /&gt;
* [[ 48Vto12V PoE splitter module SKU: P-0010 ]]&lt;br /&gt;
* [[ 48Vto12V PoE splitter module with Gigabit NIC SKU: P-0011 ]]&lt;br /&gt;
* [[ TMC2209 3D Printer Driver Board Pack SKU: D-0003 ]]&lt;br /&gt;
* [[ Vibration Sensor Module SKU: EZ-0089 ]]&lt;br /&gt;
* [[ Pitaya Go IoT SKU: Z-0269 ]]&lt;br /&gt;
* [[ Power-Over-Ethernet (PoE) HAT for RPi 4B/3B+ SKU: EP-0115 ]]&lt;br /&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: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ 8MM Camera module for Raspberr Pi SKU: ER-0021 ]]&lt;br /&gt;
* [[ Gigabit USB-C PoE Splitter SKU:P-0005]]&lt;br /&gt;
* [[ Gigabit USB-C PoE Splitter 48V to 5V for RPi 4B SKU:P-0006]]&lt;br /&gt;
* [[ Pitaya go SKU: Z-0269 ]]&lt;br /&gt;
* [[TFmini PLus Lidar Module（Distance measurement） SKU:Z-0231 ]]&lt;br /&gt;
* [[ Raspberry Pi Zero/Zero W Camera Ribben Cable Wire(Gold finger) SKU: Z-0209 ]]&lt;br /&gt;
* [[ Raspberry Pi night vision camera adjustable-focus module ER-0016 ]]&lt;br /&gt;
* [[1602 Serial LCD Module Display SKU:Z-0234 ]]&lt;br /&gt;
* [[2004 Serial LCD Module Display SKU:Z-0235 ]]&lt;br /&gt;
* [[USB Isolator SKU:EP-0101 ]]&lt;br /&gt;
* [[USB dongle for Raspberry Pi Zero/Zero W SKU:EP-0097 ]] &lt;br /&gt;
* [[MicroBit Basic Extension Board Horizontal Version SKU: EP-0095 ]]&lt;br /&gt;
* [[MicroBit Basic Extension Board Vertical Version SKU: EP-0096 ]]&lt;br /&gt;
* [[TFmini Lidar Module（Distance measurement） SKU:EZ-0068 ]]&lt;br /&gt;
* [[Raspberry Pi GPIO Breakout Board Big Black (T-Type) SKU: EP-0094 ]]&lt;br /&gt;
* [[Raspberry Pi GPIO Breakout Board V1.1(T-Type) SKU: K-0291 ]]&lt;br /&gt;
* [[GeeekPi 1/2 Sized Breadboard SKU: EP-0091 ]]&lt;br /&gt;
* [[GeeekPi 1/4 Sized Breadboard SKU: EP-0092 ]]&lt;br /&gt;
* [[GeeekPi Full Sized Breadboard SKU: EP-0093 ]]&lt;br /&gt;
* [[Pi Zero Enc28j60 Network Adapter Module SKU: EP-0088 ]]&lt;br /&gt;
* [[UPS for Raspberry Pi 4B/3B+/3B SKU: EP-0114]]&lt;br /&gt;
* [[UPS for Raspberry Pi 3B/3B+ SKU: EP-0100]]&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;
* [[USB Joystick controller Board SKU: EP-0080 ]]&lt;br /&gt;
* [[Raspberry Pi LM75B temperature Sensor v1.0  SKU:EP-0031]]&lt;br /&gt;
* [[Raspberry Pi Super Capacitor RTC(English)|Raspberry Pi Super Capacitor RTC]]&lt;br /&gt;
* [[DS1307 RTC Module with BAT for Raspberry Pi  SKU: EP-0059]]&lt;br /&gt;
* [[Raspberry Pi Expansion Board(English)|Raspberry Pi Expansion Board]]&lt;br /&gt;
* [[RPI-B+-GPIO-Triple(English)| RPI-B+-GPIO-Triple]]&lt;br /&gt;
* [[Raspberry Pi Heatsink(English) | Raspberry Pi Heatsink]]&lt;br /&gt;
* [[Raspberry Pi ADC-DAC Module(English) | Raspberry Pi ADC-DAC Module]]&lt;br /&gt;
* [[USB Gamepad SKU: Z-0177 ]]&lt;br /&gt;
* [[RPI B+ GPIO Reference Board SKU:EP-0021 ]]&lt;br /&gt;
* [[RPI B+ Rectangle Extend Board SKU:EP-0020 ]]&lt;br /&gt;
* [[RaspberryPi Downgrade(English)| RaspberryPi Downgrade]]&lt;br /&gt;
* [[RaspberryPi B+ GPIO Reference Board(English)| RaspberryPi B+ GPIO Reference Board]]&lt;br /&gt;
* [[RaspberryPi RS232 UART Board(English)| RaspberryPi RS232 UART Board]]&lt;br /&gt;
* [[GPS Module SKU:EZ-0024]]&lt;br /&gt;
* [[USB-Port-GPS Module SKU:EZ-0048]]&lt;br /&gt;
* [[VGA666 Module For RPi  SKU:EP-0073]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Case &amp;amp; Enclosure &amp;amp; Heat sink==&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;
* [[ Aluminum Alloy CNC Heat Sink without Fan for Raspberry Pi CM4 Module SKU: ZP-0111 ]]&lt;br /&gt;
* [[ Aluminum Alloy CNC Heat Sink with Fan for Raspberry Pi CM4 Module SKU: ZP-0112 ]]&lt;br /&gt;
* [[ Aluminum alloy CNC without fan Armor Case for Raspberry Pi 4B SKU: C-0027 ]]&lt;br /&gt;
* [[ Armor lite heatsink with pwm fan for Raspberry Pi 4B SKU: ZP-0110 ]]&lt;br /&gt;
* [[ Argon One Case V2 SKU: C-0023 ]]&lt;br /&gt;
* [[ Poly+ Black Case for RPi 4B SKU: C-0025 ]]&lt;br /&gt;
* [[ Low-profile ICE tower cooler (Type B) for RPi SKU: EP-0132 ]]&lt;br /&gt;
* [[ Plastic Case Kit for RPi ZeroW/Zero SKU: K-0567 ]]&lt;br /&gt;
* [[ Argon ONE M.2 Case SKU: C-0022 ]]&lt;br /&gt;
* [[ NANOSOUND 1 SKU: C-0020]]&lt;br /&gt;
* [[ Acrylic Case for NT68676 Controller Board SKU: ZP-0105 ]]&lt;br /&gt;
* [[ Nes3Pi SKU: ZP-0103 ]]&lt;br /&gt;
* [[ NesPi 4 Case For RPi 4B SKU: C-0015 ]]&lt;br /&gt;
* [[ Rack Tower Ultimate (12Layer) SKU: ZP-0108 ]]&lt;br /&gt;
* [[ Rack Tower Pro SKU: ZP-0089 ]]&lt;br /&gt;
* [[ Jetson Nano Fan kit SKU: F-0003 ]]&lt;br /&gt;
* [[ Acrylic Set-top box kit for RPi 4B SKU: ZP-0102 ]]&lt;br /&gt;
* [[ Acrylic case for Jetson Nano SKU: ZP-0101 ]]&lt;br /&gt;
* [[ Transparent Layer acrylic bracket shell SKU: ZP-0040 ]]&lt;br /&gt;
* [[ Brown layer acrylic bracket shell SKU: ZP-0039 ]]&lt;br /&gt;
* [[ Black Low-Profile ICE Cooling Fan For RPi SKU: EP-0122 ]]&lt;br /&gt;
* [[ Jetson Nano Metal Case(B01Version) SKU: ZP-0100 ]]&lt;br /&gt;
* [[ Icon Case For RPi 4B SKU: ZP-0099]]&lt;br /&gt;
* [[ Power Button For RPi  SKU: EP-0077]]&lt;br /&gt;
* [[ Pi Supply &amp;amp; USB HUB SKU: EP-0078]]&lt;br /&gt;
* [[ Pi Supply &amp;amp; USB HUB Without Battery SKU: EP-0079]]&lt;br /&gt;
* [[ RPI 5MP CSI Camera SKU: ER-0011]]&lt;br /&gt;
* [[ ESP32 Module SKU: EZ-0059 ]]&lt;br /&gt;
* [[ Brand new 2.4G wireless mini keyboard with mouse touchpad SKU: Z-0153 ]]&lt;br /&gt;
* [[ RPI-ADS1115-ADC-Module SKU:EP-0076]]&lt;br /&gt;
* [[ Acrylic Raspberry Pi set-top box kit SKU: ZP-0098 ]]&lt;br /&gt;
* [[ 6-Layer Acrylic Cluster framework For Raspberry Pi SKU: ZP-0092 ]]&lt;br /&gt;
* [[ Acrylic holder for RPi 4B camera SKU: ZP-0093 ]]&lt;br /&gt;
* [[ Argon ONE Aluminum case with Fan for RPi 4B SKU: C-0008 ]]&lt;br /&gt;
* [[ NEO Case SKU: C-0006 ]]&lt;br /&gt;
* [[ Metal Case for RPi 4B SKU: C-0003 ]]&lt;br /&gt;
* [[ Aluminum Case for RPi 4B with 3510 fan SKU:ZP-0090 ]]&lt;br /&gt;
* [[ Aluminum Case for RPi 4B with 2510 fan SKU:ZP-0091 ]]&lt;br /&gt;
* [[ ABS Case for RPi 4B SKU: C-0005 ]]&lt;br /&gt;
* [[ Metal Case for RPi 4B SKU: C-0004 ]]&lt;br /&gt;
* [[ Rack Tower SKU: ZP-0088 ]]&lt;br /&gt;
* [[ Metal Case For Low-Profile ICE Tower Cooler SKU: ZP-0087 ]] &lt;br /&gt;
* [[ Plastic Case for RPi 4B SKU: C-0002 ]]&lt;br /&gt;
* [[ ABS Case For RPi 4B SKU: C-0001 ]]&lt;br /&gt;
* [[ Low Profile Ice Tower Cooler SKU: EP-0112 ]]&lt;br /&gt;
* [[ Nes4Pi SKU: ZP-0086 ]]&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: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ ABS and Acrylic case with 4010 fan for RPi 4B SKU: ZP-0079 ]]&lt;br /&gt;
* [[ 9-Layer Acrylic case (Black &amp;amp; Bigfan) for RPi 4B SKU: ZP-0078 ]]&lt;br /&gt;
* [[ 9-Layer Acrylic case (Black) for RPi 4B SKU: ZP-0068 ]]&lt;br /&gt;
* [[ Aluminum Case with Suspension Fan for RPi 4B SKU: Z-0278 ]]&lt;br /&gt;
* [[ 9-Layer Acrylic case for RPi 4B SKU: ZP-0085 ]]&lt;br /&gt;
* [[ ICE Tower Cooling Fan For Jetson Nano SKU: EP-0113 ]]&lt;br /&gt;
* [[ ICE Tower Cooling Fan  Black SKU: EP-0111 ]]&lt;br /&gt;
* [[ E Type ABS Case for RPi 4B  SKU: ZP-0081 ]]&lt;br /&gt;
* [[ L Type ABS Case for RPi 4B  SKU: ZP-0082 ]]&lt;br /&gt;
* [[ Y Type Aluminum Case for RPi 4B  SKU: ZP-0083 ]]&lt;br /&gt;
* [[ ABS Electrical Box for RPi 4B SKU: Z-0272 ]]&lt;br /&gt;
* [[ ABS Electrical Box for RPi 3B/3B+ SKU: C-0007 ]]&lt;br /&gt;
* [[ ABS Buckle Case for RPi 4B SKU: Z-0273 ]]&lt;br /&gt;
* [[ 5-layer acrylic case for RPi 4B SKU: ZP-0080 ]]&lt;br /&gt;
* [[ Armor Case For RPi 4B with Dual Fan SKU: ZP-0077 ]]&lt;br /&gt;
* [[ Armor Case For RPi 4B/3B/3B+ without Fan SKU: ZP-0074 ]]&lt;br /&gt;
* [[ New ABS H-Type Case for Raspberry Pi 4B SKU: ZP-0075 ]]&lt;br /&gt;
* [[ ABS experiment holder platform SKU: ZP-0073 ]]&lt;br /&gt;
* [[ 9 Layers Acrylic Case with 4010 Fan SKU: ZP-0076 ]]&lt;br /&gt;
* [[ 9 Layers Acrylic Case with Fan SKU: ZP-0067 ]]&lt;br /&gt;
* [[ Single layer Acrylic Case with transparent fan SKU: ZP-0066 ]]&lt;br /&gt;
* [[ Brown single layer Acrylic Case with fan SKU: ZP-0065 ]]&lt;br /&gt;
* [[ Square radiator for Raspberry Pi 4B SKU: ZP-0038 ]]&lt;br /&gt;
* [[ Iron Case for Jetson Nano SKU: ZP-0072 ]]&lt;br /&gt;
* [[ Aluminum Heat Sink Pack for Raspberry Pi 4B SKU: Z-0266 ]]&lt;br /&gt;
* [[ Metal Case for RPi 4B with 4010 Fan SKU: ZP-0070 ]]&lt;br /&gt;
* [[ Metal Case for RPi 4B (Silver &amp;amp; Black) SKU: ZP-0071 ]]&lt;br /&gt;
* [[ Metal Case for RPi 4B (Silver &amp;amp; Black) SKU: Z-0264 ]]&lt;br /&gt;
* [[ ICE-Tower CPU Cooling Fan for Raspberry Pi SKU: EP-0107 ]]&lt;br /&gt;
* [[ Armor Case For RPi 3B+ without Fan SKU: ZP-0051 ]]&lt;br /&gt;
* [[Armor Case for Raspberry Pi 3A+ SKU: Z-0237 ]]&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: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[Acrylic Shell With Fan Guard For RPi SKU: ZP-0025 ]]&lt;br /&gt;
* [[Acrylic Shell With Fan Guard For RPi (Brown Color) SKU: ZP-0069 ]]&lt;br /&gt;
* [[3510 Version Extreme Cooling Fan Kit For Raspberry Pi 4B/3B/3B+  SKU: ZP-0042]]&lt;br /&gt;
* [[New version Copper Heat Sink SKU: Z-0185]]&lt;br /&gt;
* [[Ultimate Cooling Fan Kit For Raspberry Pi 4B/3B+/3B/2B/B+ SKU: ZP-0037]]&lt;br /&gt;
* [[ABS case with fan and heat sink for Raspberry Pi 3B+/3B/2B/B+(Black/White) SKU: Z-0183]] &lt;br /&gt;
* [[Raspberry Pi 3B white acrylic case SKU: Z-0127]]&lt;br /&gt;
* [[Raspberry Pi 3 Enclosure with heat sinks SKU: K-0172]]&lt;br /&gt;
* [[ USB HUB Power Supply for Raspberry Pi Double Layer Acrylic Rack SKU: K-0178 ]]&lt;br /&gt;
* [[ Black ABS enclosure with screwdriver for Raspberry Pi SKU: Z-0157 ]]&lt;br /&gt;
* [[4-layer-Transparent-Acrylic-Case-Clear-Shell-Enclosure-for-Raspberry-Pi-3-Model-B/2B/B+ SKU: ZP-0024]]&lt;br /&gt;
* [[Micro-HDMI-to-Standard-HDMI-Male-Cable-4K-Pi4B SKU:L-0030]]&lt;br /&gt;
* [[ Ultimate Cooling Fan Kit for Raspberry Pi 3/2/B+  SKU: ZP-0029 ]]&lt;br /&gt;
* [[RPi ABS Case SKU: ZP-0049 ]]&lt;br /&gt;
* [[Armor Case For RPi 3B SKU: Z-0193]]&lt;br /&gt;
* [[Armor Case For RPi 3B+ SKU: Z-0208 ]]&lt;br /&gt;
* [[10 Layers Acrylic Case for Raspberry Pi 3B+/3B/2B/B+ SKU: Z-0190]]&lt;br /&gt;
* [[Raspberry Pi 3 Aluminum alloy Case SKU: Z-0184]]&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;
==Cooling 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;
&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;
* [[ 5V Mini Cooling Fan for Raspberry Pi SKU: F-0010 ]]&lt;br /&gt;
* [[ MINIWARE MHP30 Mini Hot Plate Preheater SKU: D-0022 ]]&lt;br /&gt;
* [[ 4010 24V Blue Backlight Fan SKU: F-0008 ]]&lt;br /&gt;
* [[ 5V DVR Mainboard Fan SKU: F-0007 ]]&lt;br /&gt;
* [[ 4010 Blower SKU: F-0005 ]]&lt;br /&gt;
* [[ 5015 Blower SKU: F-0006 ]]&lt;br /&gt;
* [[DC 12V Brushless Blue light Fan SKU: F-0001 ]]&lt;br /&gt;
* [[DC 12V Brushless RGB light Fan SKU: F-0002 ]]&lt;br /&gt;
&amp;lt;/td&amp;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;
* [[ DT71 Mini digital tweezers SKU: T-0022 ]]&lt;br /&gt;
* [[ Desoldering Iron Kit SKU:T-0021 ]]&lt;br /&gt;
* [[ TS80P More-US SKU:T-0019 ]]&lt;br /&gt;
* [[ TS80P kit SKU:T-0015 ]]&lt;br /&gt;
* [[ TS100 kit SKU:T-0016 ]]&lt;br /&gt;
* [[ Tin Lead Rosin Core Solder Wire for Electrical Soldering (1.0mm/0.04Inch) SKU: T-0017 ]]&lt;br /&gt;
* [[ Tin Lead Rosin Core Solder Wire for Electrical Soldering (0.8mm/0.03Inch) SKU: T-0018 ]]&lt;br /&gt;
* [[ DS213 mini oscilloscope SKU: 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;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;
&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;
* [[ 2.13 inch E-paper (BRW) SKU: EP-0133 ]]&lt;br /&gt;
* [[0.91 Inch OLED Display SKU: EP-0119 ]]&lt;br /&gt;
* [[PiOLED (0.91 Inch OLED Module) SKU: S-0007 ]]&lt;br /&gt;
* [[0.91 Inch OLED Module SKU: S-0006]]&lt;br /&gt;
* [[0.96 Inch OLED Module SKU: S-0005]]&lt;br /&gt;
* [[0.91 Inch OLED Module  SKU: EP-0060]]&amp;lt;font color=red&amp;gt;EOL&amp;lt;/font&amp;gt;&lt;br /&gt;
* [[0.96 Inch OLED Module  SKU:EP-0049]] &amp;lt;font color=red&amp;gt;EOL&amp;lt;/font&amp;gt;&lt;br /&gt;
* [[52Pi-BPi LCD 1602 Module SKU:EP-0045]]&lt;br /&gt;
* [[RGB LCD1602 SKU:EP-0058]]&lt;br /&gt;
* [[RPI-RGB-LED-Matrix SKU:EP-0075]]&lt;br /&gt;
* [[Raspberry Pi 2.2 Inch GPIO display(without touch screen)  SKU:EP-0062]]&lt;br /&gt;
* [[Raspberry Pi 2.4 Inch GPIO touch screen  SKU:EP-0063]]&lt;br /&gt;
* [[TFT28 Display + Touch Panel + NoPCB  SKU:EP-0066 ]]&lt;br /&gt;
* [[TFT28 Display + Touch Panel + PCB SKU:EP-0065 ]]&lt;br /&gt;
* [[5-Inch-800x480-HDMI-TFT-LCD-Touch-Screen  SKU:Z-0053]]&lt;br /&gt;
* [[5-Inch-800x480-HDMI-GPIO-Touch-Screen  SKU:EP-0072]]&lt;br /&gt;
* [[5-Inch-800x480-Capacitive-Touch-Screen SKU: 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: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ 7 inch 1024x600 Screen and driver board with Amplifier and Two speakers Kit SKU: EP-0089]]&lt;br /&gt;
* [[7-Inch-1024x600 Capacitive Touch Screen (Extend Two USB HOST Port) with 720P Camera SKU: EP-0087 ]]&lt;br /&gt;
* [[7-Inch-1024x600 Capacitive Touch Screen (Extend Two USB HOST Port) SKU: EP-0085 ]]&lt;br /&gt;
* [[7-Inch-1024x600 Capacitive Touch Screen DIY Kit SKU: EP-0084]]&lt;br /&gt;
* [[7-Inch-1024x600 Capacitive Touch Panel DIY Kit SKU: EP-0082]]&lt;br /&gt;
* [[7-Inch-1024x600 Display Kit (with Touch Screen)   SKU:Z-0017]]&lt;br /&gt;
* [[7-Inch-1024x600 Display Kit (without Touch Screen) SKU:Z-0051]]&lt;br /&gt;
* [[7-Inch-1024x600 Monitor SKU:K-0106 ]]&lt;br /&gt;
* [[7-Inch-800x480 Display Kit(without Touch Screen)  SKU:Z-0111]]&lt;br /&gt;
* [[7-Inch-1280x800 Display Kit(without Touch Screen) SKU:Z-0112]]&lt;br /&gt;
* [[7-Inch-800x480 Monitor  SKU:K-0101]]&lt;br /&gt;
* [[7-Inch-1280*800 Monitor SKU:K-0102]]&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;
* [[15.6 Inch 1920x1080 FHD Display SKU: S-0003 ]]&lt;br /&gt;
* [[10.1 Inch 1280x800 Display Kit(without Touch Screen) SKU: S-0001 ]]&lt;br /&gt;
* [[10.1-Inch-1024x600 Display Kit (without Touch Screen) SKU:Z-0113]]&lt;br /&gt;
* [[10.1-Inch-1366x768 Display Kit(without Touch Screen) SKU:Z-0114]]&lt;br /&gt;
* [[ 10.1-Inch-1280x800 Display Kit(Without Touch Screen) SKU:Z-0143]]&lt;br /&gt;
* [[10.1-Inch-1366x768 Monitor SKU:K-0103]]&lt;br /&gt;
* [[Super Luxury 10.1 LCD Television SKU: K-0104]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Power Supply==&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;
* [[ Milestone wireless charger SKU: P-0017 ]]&lt;br /&gt;
* [[5V-3A EU-Standard with switch SKU:P-0007]] &lt;br /&gt;
* [[5V-3A US-Standard with switch SKU:P-0008]] &lt;br /&gt;
* [[5V-3A UK-Standard with switch SKU:P-0009]] &lt;br /&gt;
* [[5V-3A UK-Standard SKU:P-0004]] &amp;lt;font color=red&amp;gt;EOL&amp;lt;/font&amp;gt;&lt;br /&gt;
* [[5V-3A EU-Standard SKU:P-0003]] &amp;lt;font color=red&amp;gt;EOL&amp;lt;/font&amp;gt;&lt;br /&gt;
* [[5V-3A US-Standard SKU:P-0002]] &amp;lt;font color=red&amp;gt;EOL&amp;lt;/font&amp;gt;&lt;br /&gt;
* [[5V-4A Travel Adapter SKU:P-0001]]&lt;br /&gt;
* [[5V-2.5A-AU-Standard  SKU:Z-0132]]&lt;br /&gt;
* [[5V-2.5A-UK-Standard  SKU:Z-0133]]&lt;br /&gt;
* [[5V-2.5A-US-Standard  SKU:Z-0121]]&lt;br /&gt;
* [[5V-2.5A-EU-Standard  SKU:Z-0097]]&lt;br /&gt;
* [[5V-2.5A-EU/US/UK/AU-Plug  SKU:Z-0136]]&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;
* [[US-Standard-With-Power-Switch-5V-2.5A SKU:Z-0147]]&lt;br /&gt;
* [[EU-Standard-With-Power-Switch-5V-2.5A SKU:Z-0148]]&lt;br /&gt;
* [[AU-Standard-With-Power-Switch-5V-2.5A SKU:Z-0149]]&lt;br /&gt;
* [[UK-Standard-With-Power-Switch-5V-2.5A SKU:Z-0150]]&lt;br /&gt;
* [[Banana Pi US-standard Power Supply SKU: Z-0154]]&lt;br /&gt;
* [[Banana Pi EU-standard Power Supply SKU: Z-0155]]&lt;br /&gt;
* [[MicroUSB Cable with LCD Voltage/Current Display SKU: L-0026 ]]&lt;br /&gt;
* [[MicroUSB Cable with LCD Voltage/Current Display(Support IPhone) SKU: L-0027 ]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Raspberry Pi Kits==&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;
* [[ Raspberry Pi Pico Starter Kit SKU: K-0581 ]]&lt;br /&gt;
* [[ Metal Alloy Shell with Silver/Black Low-Profile ICE tower Cooler for RPi 4B SKU: K-0522 ]]&lt;br /&gt;
* [[ 220PCS Standoffs M2.5 Brass Spacer Kit for Raspberry Pi SKU: T-0008 ]]&lt;br /&gt;
* [[RPi 4B Starter Kit SKU: K-0512 ]]&lt;br /&gt;
* [[ABS Holder Kit For RPi &amp;amp; Arduino SKU: K-0502 ]]&lt;br /&gt;
* [[ ABS Case for RPi 4B with 3.5 Inch Resistive Touch Screen SKU: K-0403 ]]&lt;br /&gt;
* [[Arcade Game Machine DIY Kits with Joysticks(Double Players) SKU: K-0167 ]]&lt;br /&gt;
* [[Arcade Game Machine DIY Kits without Joysticks (Single Player) SKU: K-0168 ]]&lt;br /&gt;
* [[Arcade Game Machine DIY Kits without Joysticks (Double Players) SKU: K-0169 ]]&lt;br /&gt;
* [[7 inch 1024x600 Capacitive Touch Screen(Extend Two USB Hosts) with 720P Camera and Acrylic Case Kit SKU: K-0259 ]]&lt;br /&gt;
* [[5 inch Capacitive touch screen &amp;amp; Acrylic Case Kit SKU: K-0238 ]]&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: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[Retro Game Kit (Single Player) SKU: K-0185]]&lt;br /&gt;
* [[Retro Game Kit (Double Players) SKU: K-0186 ]]&lt;br /&gt;
* [[Starter Kit  SKU: Z-0142]]&lt;br /&gt;
* [[Raspberry Pi Complete kit SKU: K-0111]]&lt;br /&gt;
* [[Raspberry Pi 3B Overlays Application Kit SKU: Z-0144]]&lt;br /&gt;
* [[Raspberry Pi Retro Gamepads Kit with 10.1 inch Monitor  SKU: K-0171]]&lt;br /&gt;
* [[Raspberry Pi RetroPie Game Kit (with 5 inch GPIO TouchScreen &amp;amp; GamePad x2 )  SKU: K-0174]]&lt;br /&gt;
* [[Raspberry Pi RetroPie Game Kit with 2.4GHz wireless GamePad x2]]&lt;br /&gt;
* [[Raspberry Pi Acrylic DIY Retro Game Arcade Kit SKU:K-0180]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Official Support Products==&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;
* [[Raspberry Pi official 7-Inch-Touch-Screen  SKU:Z-0104]]&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;
* [[Banana Pi official 7-Inch-Capacitance-Screen  SKU:Z-0088]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
==X-Series Expansion Board==&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;
&amp;lt;b&amp;gt;&amp;lt;font color=red&amp;gt;New Products 2020.4.21 updated&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* [[ X872 SKU: EZ-0094 ]]&lt;br /&gt;
* [[ X728 SKU: EZ-0095 ]]&lt;br /&gt;
* [[ X835 SKU: EZ-0090 ]]&lt;br /&gt;
* [[ X856 SKU: EZ-0087 ]]&lt;br /&gt;
* [[ X828 SKU: EZ-0088 ]]&lt;br /&gt;
* [[ X725 SKU: EZ-0086 ]]&lt;br /&gt;
* [[ X855 SKU: EZ-0083 ]]&lt;br /&gt;
* [[ X825 SKU: EZ-0082 ]]&lt;br /&gt;
* [[ X822 SKU: EZ-0076 ]]&lt;br /&gt;
* [[ X852 SKU: EZ-0077 ]]&lt;br /&gt;
* [[ X860 SKU: EZ-0078 ]]&lt;br /&gt;
* [[ X870 SKU: EZ-0079 ]]&lt;br /&gt;
* [[ X735 SKU: EZ-0080 ]]&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;
&amp;lt;b&amp;gt;&amp;lt;font color=Green&amp;gt;Old Products 2018.6.6 updated&amp;lt;/font&amp;gt;&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* [[ X720 SKU: EZ-0072]]&lt;br /&gt;
* [[ X730 SKU: EZ-0073]]&lt;br /&gt;
* [[ X830 SKU: EZ-0064]]&lt;br /&gt;
* [[ X105 SKU: EZ-0008]]&lt;br /&gt;
* [[ X200 SKU: EZ-0002]]&lt;br /&gt;
* [[ X300 SKU: EZ-0003]]&lt;br /&gt;
* [[ X205 SKU: EZ-0046]]&lt;br /&gt;
* [[ X400 SKU: EZ-0044]]&lt;br /&gt;
* [[ X600  SKU:EZ-0045]]&lt;br /&gt;
* [[ X3000 SKU:EZ-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: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[ X6000P-7.1CH DIY Kits SKU:EZ-0052]]&lt;br /&gt;
* [[ X5000P Raspberry Pi HiFi Sound Card SKU:EZ-0053]]&lt;br /&gt;
* [[ X4000P SKU:EZ-0054]]&lt;br /&gt;
* [[ X4000K DIY Kits SKU:EZ-0055]]&lt;br /&gt;
* [[ X6000K-8.0CH DIY Kits SKU:EZ-0056]]&lt;br /&gt;
* [[ X5000K DIY Kits SKU:EZ-0057]]&lt;br /&gt;
* [[ X1000K DIY Kits SKU:EZ-0058]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
===X series Acrylic Case===&lt;br /&gt;
* [[ Acrylic Case for X725 SKU: ZP-0096 ]]&lt;br /&gt;
* [[ Acrylic Case for X825 SKU: ZP-0097 ]]&lt;br /&gt;
&lt;br /&gt;
==Operation System Card==&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;
* [[OctoPrint]]&lt;br /&gt;
* [[Noobs]]&lt;br /&gt;
* [[Raspbian]]&lt;br /&gt;
* [[DietPi]]&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;
* [[Batocera]]&lt;br /&gt;
* [[RetroPie]]&lt;br /&gt;
* [[Ubuntu Mate 16.04]]&lt;br /&gt;
* [[OSMC]]&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;
* [[5-inch-GPIO-touch-screen-Based-on-Raspbian]]&lt;br /&gt;
* [[Windows 10 IOT R2 (Red Stone) 16GB]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==52Pi Expand Modules ( End Of Life )==&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;
* [[RPI T-Cobbler GPIO Extend Board With Level shifting SKU:EP-0014]]&lt;br /&gt;
* [[RPI T-Cobbler GPIO Extend Board SKU:EP-0003]]&lt;br /&gt;
* [[RPI 16x2 LCD+Keypad Kit SKU:Z-0019]]&lt;br /&gt;
* [[RPI B+ to B GPIO Downgrade Board SKU:EP-0027 ]]&lt;br /&gt;
* [[RPI I2C GPIO Extend Board SKU:EP-0013]]&lt;br /&gt;
* [[RPI AD/DA Extend Board SKU:EP-0022]]&lt;br /&gt;
* [[RPI B GPIO Reference Board SKU:EP-0018]]&lt;br /&gt;
* [[RPI GPIO Triple Extend Board SKU:EP-0012]]&lt;br /&gt;
* [[RPI GPIO Rectangle Extend Board SKU:EP-0011]]&lt;br /&gt;
* [[RPI I2C Logic Level Converter SKU:EP-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: 32%;&amp;quot;&amp;gt;&lt;br /&gt;
* [[RPI Infinity cascade IO expand Module SKU:EP-0028]]&lt;br /&gt;
* [[RPI Arduino Board SKU:EP-0023]]&lt;br /&gt;
* [[RPI RTC Module SKU:EP-0016]]&lt;br /&gt;
* [[RPI B TF TO SD SKU:EP-0032]]&lt;br /&gt;
* [[RPI UART Extend Board SKU:EP-0017]]&lt;br /&gt;
* [[RPI B+ Prototyping Pi Plate  Board SKU:EP-0042]]&lt;br /&gt;
* [[RPI B+ GPIO Triple Extend Board SKU:EP-0029]]&lt;br /&gt;
* [[RPI B Prototyping Pi Plate  Board SKU:EP-0004]]&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;
* [[RPI HAT Breakout Mini Kit SKU:EP-0056]]&lt;br /&gt;
* [[RPI HAT Prototype Module SKU:EP-0057]]&lt;br /&gt;
* [[RPI T Type Extension Board SKU:EP-0046]] &lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Documentation===&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;pre&amp;gt;Some simple guides to setting up the software on your Raspberry Pi.&lt;br /&gt;
Beginners should start with NOOBS, which gives the user a choice of operating system from the standard distributions.&lt;br /&gt;
The recommended distribution for normal use is Raspbian. &lt;br /&gt;
Alternatives are available, such as LibreELEC (Kodi media centre) or Arch Linux.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Installing operation system on your Raspberry Pi &lt;br /&gt;
** [[NOOBS]]&lt;br /&gt;
** [[Installing images]]&lt;br /&gt;
** [[SD Cards]]&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=Aluminum_Case_for_Jetson_Nano_SKU:_ZP-0072&amp;diff=10074</id>
		<title>Aluminum Case for Jetson Nano SKU: ZP-0072</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=Aluminum_Case_for_Jetson_Nano_SKU:_ZP-0072&amp;diff=10074"/>
		<updated>2021-04-14T02:56:47Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: TaterLi moved page Aluminum Case for Jetson Nano SKU: ZP-0072 to Iron Case for Jetson Nano SKU: ZP-0072: correct info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Iron Case for Jetson Nano SKU: ZP-0072]]&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=ZP-0072&amp;diff=10073</id>
		<title>ZP-0072</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=ZP-0072&amp;diff=10073"/>
		<updated>2021-04-14T02:56:47Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: TaterLi moved page Aluminum Case for Jetson Nano SKU: ZP-0072 to Iron Case for Jetson Nano SKU: ZP-0072: correct info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Iron Case for Jetson Nano==&lt;br /&gt;
[[File:Jetsoncase01.jpg|right|300px]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
This is an all-metal functional enclosure specifically tailored for Jetson Nano.&amp;lt;br&amp;gt;&lt;br /&gt;
Its honeycomb vents reduce the heat generated by your device while it’s performing neural network training or running machine vision programs. &amp;lt;br&amp;gt;&lt;br /&gt;
And the internal super quiet fan will be good auxiliary heat dissipation, beautiful workmanship of the outer casing, perfect interface opening for each connector.&amp;lt;br&amp;gt;&lt;br /&gt;
In addition, in order to consider the equipment that Jetson Nano may use, such as the camera, it specially provide the camera holder for Jetson Nano.&amp;lt;br&amp;gt;&lt;br /&gt;
The metal bracket makes your visual neural network learning device more convenient to use. &amp;lt;br&amp;gt;&lt;br /&gt;
At the same time, it provides two perfect wireless network expansion antenna interfaces for the Jetson Nano on the outer casing, so that you can avoid Metal shielding interference when it accessing network via extend network interface card, such as intel network card.&amp;lt;br&amp;gt;&lt;br /&gt;
A switch button with backlight is provided on the front of the panel. &amp;lt;br&amp;gt;&lt;br /&gt;
In order to prevent mistakenly touching, a reset button is provided on the back of the panel. &amp;lt;br&amp;gt;&lt;br /&gt;
Four anti-skid rubber pads are added to the bottom of the case to prevent skid.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* Easy to assemble&lt;br /&gt;
* Camera holder&lt;br /&gt;
* Extended Antenna Base for the network interface card&lt;br /&gt;
* Honeycomb vents style&lt;br /&gt;
* Super quiet fan&lt;br /&gt;
* Good quality &lt;br /&gt;
* Anti-skid rubber pads&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Jetsoncase01.jpg|left|320px]]&lt;br /&gt;
|[[File:Jetsoncase02.jpg|none|320px]]&lt;br /&gt;
|[[File:Jetsoncase03.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Jetsoncase04.jpg|left|320px]]&lt;br /&gt;
|[[File:Jetsoncase05.jpg|none|320px]]&lt;br /&gt;
|[[File:Jetsoncase01.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==How to assemble==&lt;br /&gt;
* 1.Fix the 4020 fan with long screws to Jetson Nano on the top of heat sink, and connect the cable to Jetson Nano’s FAN J15.Fixed the Reset button and power on/off button on the case, and then fix Jetson Nano to the case.&lt;br /&gt;
* 2.Add Jumper caps on J40 Pin7 and Pin8 to disable auto power-on and connect Reset button to Pin 5 and 6, connect power-on button to Pin 1 and 2 as following picture:&lt;br /&gt;
J40 Button Header&lt;br /&gt;
[[File:Jetsonnano J40Button pin definitions.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
[[File:ZP-0072-Jeson-Nano 8.jpg|left | 800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 3.Connect the pre-installed fan to Jetson Nano’s GPIO, red wire connects to 5V, black wire connects to GND.&lt;br /&gt;
[[File:ZP-0072-Jeson-Nano 7.jpg|left | 800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 4.(Optional) Fixed the camera with M2.0*5 screws and put the acrylic washer between camera and the mounting brackets.&lt;br /&gt;
[[File:ZP-0072-Jeson-Nano 10.jpg |left | 800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 5.(Optional) Fixed the antenna to case and connect to the network interface card (NIC).&lt;br /&gt;
** Step 1. Remove the two screws on Jetson Nano, detach the Jetson Nano and remove the screw in the middle of the board.\&lt;br /&gt;
** Step 2. Connect the extension antenna cable to wireless interface card on IPEX connector, tighten the nut and washer to iron case to each SMA connector, and then put the wireless interface card into the M.2 socket, screw it tightly.&lt;br /&gt;
** Step 3. Insert the Jetson Nano into the socket and make sure the clamps lock it in and then screw it again.&lt;br /&gt;
** Step 4. Connect the antennas to the extension antenna cable.&lt;br /&gt;
{|&lt;br /&gt;
|[[File:WifiA1.jpg|left|320px]]&lt;br /&gt;
|[[File:WifiA2.jpg|none|320px]]&lt;br /&gt;
|[[File:WifiA3.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Wifia10.jpg|left|500px]]&lt;br /&gt;
|[[File:Wifia11.jpg|none|500px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Package Include==&lt;br /&gt;
[[ File:ZP-0072-Jeson-Nano铝合金外壳4.jpg|left | 500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
* jetson nano case, case for jetson nano, iron case, quiet fan, fan, heatsink, honycomb vent, jetson nano&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=ZP-0072&amp;diff=10072</id>
		<title>ZP-0072</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=ZP-0072&amp;diff=10072"/>
		<updated>2021-04-14T02:55:56Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Iron Case for Jetson Nano==&lt;br /&gt;
[[File:Jetsoncase01.jpg|right|300px]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
This is an all-metal functional enclosure specifically tailored for Jetson Nano.&amp;lt;br&amp;gt;&lt;br /&gt;
Its honeycomb vents reduce the heat generated by your device while it’s performing neural network training or running machine vision programs. &amp;lt;br&amp;gt;&lt;br /&gt;
And the internal super quiet fan will be good auxiliary heat dissipation, beautiful workmanship of the outer casing, perfect interface opening for each connector.&amp;lt;br&amp;gt;&lt;br /&gt;
In addition, in order to consider the equipment that Jetson Nano may use, such as the camera, it specially provide the camera holder for Jetson Nano.&amp;lt;br&amp;gt;&lt;br /&gt;
The metal bracket makes your visual neural network learning device more convenient to use. &amp;lt;br&amp;gt;&lt;br /&gt;
At the same time, it provides two perfect wireless network expansion antenna interfaces for the Jetson Nano on the outer casing, so that you can avoid Metal shielding interference when it accessing network via extend network interface card, such as intel network card.&amp;lt;br&amp;gt;&lt;br /&gt;
A switch button with backlight is provided on the front of the panel. &amp;lt;br&amp;gt;&lt;br /&gt;
In order to prevent mistakenly touching, a reset button is provided on the back of the panel. &amp;lt;br&amp;gt;&lt;br /&gt;
Four anti-skid rubber pads are added to the bottom of the case to prevent skid.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* Easy to assemble&lt;br /&gt;
* Camera holder&lt;br /&gt;
* Extended Antenna Base for the network interface card&lt;br /&gt;
* Honeycomb vents style&lt;br /&gt;
* Super quiet fan&lt;br /&gt;
* Good quality &lt;br /&gt;
* Anti-skid rubber pads&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Jetsoncase01.jpg|left|320px]]&lt;br /&gt;
|[[File:Jetsoncase02.jpg|none|320px]]&lt;br /&gt;
|[[File:Jetsoncase03.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Jetsoncase04.jpg|left|320px]]&lt;br /&gt;
|[[File:Jetsoncase05.jpg|none|320px]]&lt;br /&gt;
|[[File:Jetsoncase01.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==How to assemble==&lt;br /&gt;
* 1.Fix the 4020 fan with long screws to Jetson Nano on the top of heat sink, and connect the cable to Jetson Nano’s FAN J15.Fixed the Reset button and power on/off button on the case, and then fix Jetson Nano to the case.&lt;br /&gt;
* 2.Add Jumper caps on J40 Pin7 and Pin8 to disable auto power-on and connect Reset button to Pin 5 and 6, connect power-on button to Pin 1 and 2 as following picture:&lt;br /&gt;
J40 Button Header&lt;br /&gt;
[[File:Jetsonnano J40Button pin definitions.png|left|800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
[[File:ZP-0072-Jeson-Nano 8.jpg|left | 800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 3.Connect the pre-installed fan to Jetson Nano’s GPIO, red wire connects to 5V, black wire connects to GND.&lt;br /&gt;
[[File:ZP-0072-Jeson-Nano 7.jpg|left | 800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 4.(Optional) Fixed the camera with M2.0*5 screws and put the acrylic washer between camera and the mounting brackets.&lt;br /&gt;
[[File:ZP-0072-Jeson-Nano 10.jpg |left | 800px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 5.(Optional) Fixed the antenna to case and connect to the network interface card (NIC).&lt;br /&gt;
** Step 1. Remove the two screws on Jetson Nano, detach the Jetson Nano and remove the screw in the middle of the board.\&lt;br /&gt;
** Step 2. Connect the extension antenna cable to wireless interface card on IPEX connector, tighten the nut and washer to iron case to each SMA connector, and then put the wireless interface card into the M.2 socket, screw it tightly.&lt;br /&gt;
** Step 3. Insert the Jetson Nano into the socket and make sure the clamps lock it in and then screw it again.&lt;br /&gt;
** Step 4. Connect the antennas to the extension antenna cable.&lt;br /&gt;
{|&lt;br /&gt;
|[[File:WifiA1.jpg|left|320px]]&lt;br /&gt;
|[[File:WifiA2.jpg|none|320px]]&lt;br /&gt;
|[[File:WifiA3.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Wifia10.jpg|left|500px]]&lt;br /&gt;
|[[File:Wifia11.jpg|none|500px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Package Include==&lt;br /&gt;
[[ File:ZP-0072-Jeson-Nano铝合金外壳4.jpg|left | 500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
* jetson nano case, case for jetson nano, iron case, quiet fan, fan, heatsink, honycomb vent, jetson nano&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=RTC_EoF-001&amp;diff=8310</id>
		<title>RTC EoF-001</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=RTC_EoF-001&amp;diff=8310"/>
		<updated>2020-04-22T03:37:26Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: /* DT Overlays Used */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Raspberry Pi RTC Module With Battery=&lt;br /&gt;
==Description==&lt;br /&gt;
This RTC module use DS3231 as its Real-Time Clock chip which has build-in crystal oscillator. This RTC module communicates with Raspberry Pi through I2C bus.DS3231 is a low power consumer RTC chip and whose back up supply is a 0.2uF Super-Capacitor,which can keep work for a week at least after power down&lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:CAP RTC.jpg|center|400px]]&lt;br /&gt;
==Compatibility List==&lt;br /&gt;
* Compatibility&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Platform !! Super Capacitor RTC !! Notes&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi 4 Model B || √ ||&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi 3 Model B Plus|| √ ||&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi zero || √||&lt;br /&gt;
|-&lt;br /&gt;
| Raspberry Pi zero W  || √||&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi 3 Model B|| √||&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi 2 Model B|| √||&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi Model B+|| √||	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Technical Details==&lt;br /&gt;
{| width=&amp;quot;998&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! align=&amp;quot;center&amp;quot; scope=&amp;quot;col&amp;quot; style=&amp;quot;width: 40%&amp;quot;  |  Type&lt;br /&gt;
! align=&amp;quot;center&amp;quot; scope=&amp;quot;col&amp;quot; | value&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; scope=&amp;quot;row&amp;quot; | Work Voltage&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5V&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; scope=&amp;quot;row&amp;quot; | Weight&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 4.35g&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; scope=&amp;quot;row&amp;quot;  | Maximum Current&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1.5mA&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; scope=&amp;quot;row&amp;quot; | VBAT Current&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 800nA&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; scope=&amp;quot;row&amp;quot; | work temprature&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0～+50℃&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; scope=&amp;quot;row&amp;quot; | Crystal Oscilator &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Epson 20 ppm &lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; scope=&amp;quot;row&amp;quot; | scale&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 22x26x18.6(mm)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;  scope=&amp;quot;row&amp;quot; | Battery&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | CR1220&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; scope=&amp;quot;row&amp;quot; | RTC chip&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | DS3231 &lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; scope=&amp;quot;row&amp;quot; | mount hole&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 2*5 Stacking Header&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
==Schematic==&lt;br /&gt;
[[Image:RTC_CCAP01.png|700px]]&lt;br /&gt;
&lt;br /&gt;
==LCD module scale==&lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:RTC CCAP02.png|700px]]&lt;br /&gt;
&lt;br /&gt;
==DT Overlays Used==&lt;br /&gt;
With DT enabled, this becomes a line in config.txt:&lt;br /&gt;
&lt;br /&gt;
    dtoverlay=i2c-rtc ds3231&lt;br /&gt;
&lt;br /&gt;
It can adds support for a number of I2C Real Time Clock devices&lt;br /&gt;
&lt;br /&gt;
==Learn==&lt;br /&gt;
*Type in [sudo raspi-config] set up raspberry pi and prepare to enable i2c interface&lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:RTC_tech02.png|700px]]&lt;br /&gt;
*select Advanced Options &lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:RTC_tech03.png|700px]]&lt;br /&gt;
*select I2c &lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:RTC_tech04.png|700px]]&lt;br /&gt;
*select yes enable I2C &lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:RTC_tech05.png|700px]]&lt;br /&gt;
*type in [sudo vim.tiny /etc/modules] to open file modules&lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:RTC_tech06.png|700px]]&lt;br /&gt;
*add i2c-dev device like picture below&lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:RTC_tech07.png|700px]]&lt;br /&gt;
*install i2c-tools ,type in [sudo apt-get install i2c-tools]&lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:RTC_tech08.png|700px]]&lt;br /&gt;
*type in [sudo reboot] wait the raspberry pi restart ,Then type in [sudo i2cdetect –y 1], if RTC works ,it should be like picture below&lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:RTC_tech09.png|700px]]&lt;br /&gt;
*Type in [sudo su –] change root user,then Type in [modprobe i2c-dev] to load I2C device&lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:RTC_tech10.png|700px]]&lt;br /&gt;
*Type in [echo &amp;quot;ds1307 0x68&amp;quot; &amp;gt; /sys/class/i2c-adapter/i2c-1/new_device] add RTC to system &lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:RTC_tech11.png|700px]]&lt;br /&gt;
*Then you can use “hwclock” command to use this RTC module&lt;br /&gt;
If you want to know more about hwclock command you can type in “man hwclock” to get details&lt;br /&gt;
A brief description like following:&lt;br /&gt;
Command [hwclock –r] to get RTC time&lt;br /&gt;
Command [hwclock -w]set the system time to RTC time &lt;br /&gt;
Like following&lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:RTC_tech12.png|700px]]&lt;br /&gt;
&lt;br /&gt;
==Attachment==&lt;br /&gt;
&amp;lt;div id=&amp;quot;tech1&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;[[media:DS3231.pdf|ds3231 date sheet]]&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=RTC_EoF-001&amp;diff=8309</id>
		<title>RTC EoF-001</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=RTC_EoF-001&amp;diff=8309"/>
		<updated>2020-04-22T03:36:34Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: /* Learn */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Raspberry Pi RTC Module With Battery=&lt;br /&gt;
==Description==&lt;br /&gt;
This RTC module use DS3231 as its Real-Time Clock chip which has build-in crystal oscillator. This RTC module communicates with Raspberry Pi through I2C bus.DS3231 is a low power consumer RTC chip and whose back up supply is a 0.2uF Super-Capacitor,which can keep work for a week at least after power down&lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:CAP RTC.jpg|center|400px]]&lt;br /&gt;
==Compatibility List==&lt;br /&gt;
* Compatibility&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Platform !! Super Capacitor RTC !! Notes&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi 4 Model B || √ ||&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi 3 Model B Plus|| √ ||&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi zero || √||&lt;br /&gt;
|-&lt;br /&gt;
| Raspberry Pi zero W  || √||&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi 3 Model B|| √||&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi 2 Model B|| √||&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi Model B+|| √||	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Technical Details==&lt;br /&gt;
{| width=&amp;quot;998&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! align=&amp;quot;center&amp;quot; scope=&amp;quot;col&amp;quot; style=&amp;quot;width: 40%&amp;quot;  |  Type&lt;br /&gt;
! align=&amp;quot;center&amp;quot; scope=&amp;quot;col&amp;quot; | value&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; scope=&amp;quot;row&amp;quot; | Work Voltage&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5V&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; scope=&amp;quot;row&amp;quot; | Weight&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 4.35g&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; scope=&amp;quot;row&amp;quot;  | Maximum Current&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1.5mA&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; scope=&amp;quot;row&amp;quot; | VBAT Current&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 800nA&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; scope=&amp;quot;row&amp;quot; | work temprature&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0～+50℃&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; scope=&amp;quot;row&amp;quot; | Crystal Oscilator &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Epson 20 ppm &lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; scope=&amp;quot;row&amp;quot; | scale&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 22x26x18.6(mm)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;  scope=&amp;quot;row&amp;quot; | Battery&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | CR1220&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; scope=&amp;quot;row&amp;quot; | RTC chip&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | DS3231 &lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; scope=&amp;quot;row&amp;quot; | mount hole&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 2*5 Stacking Header&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
==Schematic==&lt;br /&gt;
[[Image:RTC_CCAP01.png|700px]]&lt;br /&gt;
&lt;br /&gt;
==LCD module scale==&lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:RTC CCAP02.png|700px]]&lt;br /&gt;
&lt;br /&gt;
==DT Overlays Used==&lt;br /&gt;
With DT enabled, this becomes a line in config.txt:&lt;br /&gt;
&lt;br /&gt;
    dtoverlay=i2c-rtc ds3231&lt;br /&gt;
==Learn==&lt;br /&gt;
*Type in [sudo raspi-config] set up raspberry pi and prepare to enable i2c interface&lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:RTC_tech02.png|700px]]&lt;br /&gt;
*select Advanced Options &lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:RTC_tech03.png|700px]]&lt;br /&gt;
*select I2c &lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:RTC_tech04.png|700px]]&lt;br /&gt;
*select yes enable I2C &lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:RTC_tech05.png|700px]]&lt;br /&gt;
*type in [sudo vim.tiny /etc/modules] to open file modules&lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:RTC_tech06.png|700px]]&lt;br /&gt;
*add i2c-dev device like picture below&lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:RTC_tech07.png|700px]]&lt;br /&gt;
*install i2c-tools ,type in [sudo apt-get install i2c-tools]&lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:RTC_tech08.png|700px]]&lt;br /&gt;
*type in [sudo reboot] wait the raspberry pi restart ,Then type in [sudo i2cdetect –y 1], if RTC works ,it should be like picture below&lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:RTC_tech09.png|700px]]&lt;br /&gt;
*Type in [sudo su –] change root user,then Type in [modprobe i2c-dev] to load I2C device&lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:RTC_tech10.png|700px]]&lt;br /&gt;
*Type in [echo &amp;quot;ds1307 0x68&amp;quot; &amp;gt; /sys/class/i2c-adapter/i2c-1/new_device] add RTC to system &lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:RTC_tech11.png|700px]]&lt;br /&gt;
*Then you can use “hwclock” command to use this RTC module&lt;br /&gt;
If you want to know more about hwclock command you can type in “man hwclock” to get details&lt;br /&gt;
A brief description like following:&lt;br /&gt;
Command [hwclock –r] to get RTC time&lt;br /&gt;
Command [hwclock -w]set the system time to RTC time &lt;br /&gt;
Like following&lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:RTC_tech12.png|700px]]&lt;br /&gt;
&lt;br /&gt;
==Attachment==&lt;br /&gt;
&amp;lt;div id=&amp;quot;tech1&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;[[media:DS3231.pdf|ds3231 date sheet]]&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=RTC_EoF-001&amp;diff=8308</id>
		<title>RTC EoF-001</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=RTC_EoF-001&amp;diff=8308"/>
		<updated>2020-04-22T03:35:28Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: /* Compatibility List */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Raspberry Pi RTC Module With Battery=&lt;br /&gt;
==Description==&lt;br /&gt;
This RTC module use DS3231 as its Real-Time Clock chip which has build-in crystal oscillator. This RTC module communicates with Raspberry Pi through I2C bus.DS3231 is a low power consumer RTC chip and whose back up supply is a 0.2uF Super-Capacitor,which can keep work for a week at least after power down&lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:CAP RTC.jpg|center|400px]]&lt;br /&gt;
==Compatibility List==&lt;br /&gt;
* Compatibility&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Platform !! Super Capacitor RTC !! Notes&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi 4 Model B || √ ||&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi 3 Model B Plus|| √ ||&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi zero || √||&lt;br /&gt;
|-&lt;br /&gt;
| Raspberry Pi zero W  || √||&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi 3 Model B|| √||&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi 2 Model B|| √||&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi Model B+|| √||	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Technical Details==&lt;br /&gt;
{| width=&amp;quot;998&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
! align=&amp;quot;center&amp;quot; scope=&amp;quot;col&amp;quot; style=&amp;quot;width: 40%&amp;quot;  |  Type&lt;br /&gt;
! align=&amp;quot;center&amp;quot; scope=&amp;quot;col&amp;quot; | value&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; scope=&amp;quot;row&amp;quot; | Work Voltage&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 5V&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; scope=&amp;quot;row&amp;quot; | Weight&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 4.35g&lt;br /&gt;
|-&lt;br /&gt;
|align=&amp;quot;center&amp;quot; scope=&amp;quot;row&amp;quot;  | Maximum Current&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 1.5mA&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; scope=&amp;quot;row&amp;quot; | VBAT Current&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 800nA&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; scope=&amp;quot;row&amp;quot; | work temprature&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 0～+50℃&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; scope=&amp;quot;row&amp;quot; | Crystal Oscilator &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | Epson 20 ppm &lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; scope=&amp;quot;row&amp;quot; | scale&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 22x26x18.6(mm)&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot;  scope=&amp;quot;row&amp;quot; | Battery&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | CR1220&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; scope=&amp;quot;row&amp;quot; | RTC chip&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | DS3231 &lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; scope=&amp;quot;row&amp;quot; | mount hole&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | 2*5 Stacking Header&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Overview==&lt;br /&gt;
&lt;br /&gt;
==Schematic==&lt;br /&gt;
[[Image:RTC_CCAP01.png|700px]]&lt;br /&gt;
&lt;br /&gt;
==LCD module scale==&lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:RTC CCAP02.png|700px]]&lt;br /&gt;
&lt;br /&gt;
==Learn==&lt;br /&gt;
*Type in [sudo raspi-config] set up raspberry pi and prepare to enable i2c interface&lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:RTC_tech02.png|700px]]&lt;br /&gt;
*select Advanced Options &lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:RTC_tech03.png|700px]]&lt;br /&gt;
*select I2c &lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:RTC_tech04.png|700px]]&lt;br /&gt;
*select yes enable I2C &lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:RTC_tech05.png|700px]]&lt;br /&gt;
*type in [sudo vim.tiny /etc/modules] to open file modules&lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:RTC_tech06.png|700px]]&lt;br /&gt;
*add i2c-dev device like picture below&lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:RTC_tech07.png|700px]]&lt;br /&gt;
*install i2c-tools ,type in [sudo apt-get install i2c-tools]&lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:RTC_tech08.png|700px]]&lt;br /&gt;
*type in [sudo reboot] wait the raspberry pi restart ,Then type in [sudo i2cdetect –y 1], if RTC works ,it should be like picture below&lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:RTC_tech09.png|700px]]&lt;br /&gt;
*Type in [sudo su –] change root user,then Type in [modprobe i2c-dev] to load I2C device&lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:RTC_tech10.png|700px]]&lt;br /&gt;
*Type in [echo &amp;quot;ds1307 0x68&amp;quot; &amp;gt; /sys/class/i2c-adapter/i2c-1/new_device] add RTC to system &lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:RTC_tech11.png|700px]]&lt;br /&gt;
*Then you can use “hwclock” command to use this RTC module&lt;br /&gt;
If you want to know more about hwclock command you can type in “man hwclock” to get details&lt;br /&gt;
A brief description like following:&lt;br /&gt;
Command [hwclock –r] to get RTC time&lt;br /&gt;
Command [hwclock -w]set the system time to RTC time &lt;br /&gt;
Like following&lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:RTC_tech12.png|700px]]&lt;br /&gt;
==Attachment==&lt;br /&gt;
&amp;lt;div id=&amp;quot;tech1&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;[[media:DS3231.pdf|ds3231 date sheet]]&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=EP-0105&amp;diff=7886</id>
		<title>EP-0105</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=EP-0105&amp;diff=7886"/>
		<updated>2020-03-16T04:03:57Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: /* How to use Lora TX &amp;amp; RX with C(Raspberry Pi) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==IoT Node(A)==&lt;br /&gt;
[[File:IoTnodeA1.jpg|right|300px]]&lt;br /&gt;
&lt;br /&gt;
==Descriptions==&lt;br /&gt;
IoT Node(A) is one of Docker Pi series module.&amp;lt;br&amp;gt;&lt;br /&gt;
IOT Node(A) = GPS/BDS + GSM + Lora.&amp;lt;br&amp;gt;&lt;br /&gt;
I2C directly controls Lora, sends and receives data, controls the GSM/GPS/BDS module through SC16IS752, the mainboard only needs I2C support.&amp;lt;br&amp;gt;&lt;br /&gt;
Support Raspberry Pi and other similar products.&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* DockerPi Series&lt;br /&gt;
* Programmable&lt;br /&gt;
* Control directly(without programming)&lt;br /&gt;
* Extend the GPIO Pins &lt;br /&gt;
* GPS/BDS Support&lt;br /&gt;
* GSM Support&lt;br /&gt;
* Lora Support&lt;br /&gt;
* Can Stack with other Stack board&lt;br /&gt;
* Independent of the mainboard hardware (require I2C support)&lt;br /&gt;
&lt;br /&gt;
==Official Compatibility Test==&lt;br /&gt;
Not only support the following development boards, other development boards can be compatible if they have I2C peripherals. (Note: some software changes may be required)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Platform !!DockerPi IoT Node(A)!! Notes&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi All Platform|| √ ||Not Include CM Series &amp;amp; EOL Platform&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Specifications==&lt;br /&gt;
===GPRS section===&lt;br /&gt;
* 1. Low power consumption, standby sleep current &amp;lt;1mA&lt;br /&gt;
* 2. Support GSM/GPRS four frequency bands, including 850, 900, 1800, 1900MHZ;&lt;br /&gt;
* 3. GPRS Class 10;&lt;br /&gt;
* 4. Support GPRS data service, maximum data rate, download 85.6Kbps, upload 42.8Kbps;&lt;br /&gt;
* 5. Support standard GSM07.07, 07.05 AT commands, and access the serial port through I2C interface conversion.&lt;br /&gt;
* 6. AT commands support standard AT and TCP/IP command ports&lt;br /&gt;
===GPS section===&lt;br /&gt;
* 1. Support BDS/GPS joint positioning&lt;br /&gt;
* 2. Support A-GPS, A-BDS&lt;br /&gt;
* 3. Support standard SIM card&lt;br /&gt;
===LORA section===&lt;br /&gt;
* 1. Transmission distance:500 Meters (RF parameters: 0x50 @ China City)&lt;br /&gt;
* 2. Support FSK, GFSK, MSK, GMSK, LoRaTM and OOK modulation methods&lt;br /&gt;
* 3. Ultra-high receiver sensitivity as low as -141 dBm&lt;br /&gt;
* 4. Support preamble detection&lt;br /&gt;
* 5. Packet engine with CRC, up to 256 bytes&lt;br /&gt;
* 6. LORA transceiver indicator&lt;br /&gt;
* 7. Easy TX/RX by Docker Pi&lt;br /&gt;
&lt;br /&gt;
==Mechanical Drawings==&lt;br /&gt;
[[File:Lora mechanical.png|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
{|&lt;br /&gt;
|[[File:IoTnodeA1.jpg|left|320px]]&lt;br /&gt;
|[[File:IoTnodeA2.jpg|none|320px]]&lt;br /&gt;
|[[File:IoTnodeA3.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
{|&lt;br /&gt;
|[[File:IoTnodeA4.jpg|left|320px]]&lt;br /&gt;
|[[File:IoTnodeA5.jpg|none|320px]]&lt;br /&gt;
|[[File:IoTnodeA6.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Package Include==&lt;br /&gt;
* 1 x IoT Node(A) Board &lt;br /&gt;
* 1 x Instructions&lt;br /&gt;
* 4 x M2.5*12 + 6 Copper stick&lt;br /&gt;
* 4 x M2.5*6 Nut&lt;br /&gt;
* 4 x M2.5*6 Half-round head screw&lt;br /&gt;
* 1 x 433MHz L-Shaped Tape Antenna &lt;br /&gt;
* 1 x 2.4GHz PCB Antenna&lt;br /&gt;
* 1 x GPS/BDS High Gain GPS Built-in Ceramic Active Antenna&lt;br /&gt;
&lt;br /&gt;
==On Board Modules Documentations==&lt;br /&gt;
* A9G Module Spicification: [[ File:A9g product specification.pdf ]]&lt;br /&gt;
* A9G Module AT Command Manual: [[ File:A9G AT COMMAND manual.pdf ]]&lt;br /&gt;
* A9G GPRS Instruction Set v1.0 [[ File:A9G gprs series module at instruction set v1.0.pdf ]]&lt;br /&gt;
* GPRS C SDK: [[ File:GPRS C SDK-master.zip ]]&lt;br /&gt;
&lt;br /&gt;
==Technical Details==&lt;br /&gt;
===A9G Module===&lt;br /&gt;
* A9G module offers two serial port. &lt;br /&gt;
* Use I2C &amp;lt;=&amp;gt; UART bridge for communication.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Serial Port  !! Module name  &lt;br /&gt;
|-&lt;br /&gt;
|/dev/ttySC0 || GSM&lt;br /&gt;
|-&lt;br /&gt;
|/dev/ttySC1 || GPS/BDS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Register Map===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Register Address!! Function !! Value&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || LORA_TX1 || Lora TX Buffer 1 - User Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || LORA_TX2 || Lora TX Buffer 2 - User Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || LORA_TX3 || Lora TX Buffer 3 - User Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || LORA_TX4 || Lora TX Buffer 4 - User Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || LORA_TX5 || Lora TX Buffer 5 - User Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || LORA_TX6 || Lora TX Buffer 6 - User Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || LORA_TX7 || Lora TX Buffer 7 - User Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || LORA_TX8 || Lora TX Buffer 8 - User Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || LORA_TX9 || Lora TX Buffer 9 - User Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0a || LORA_TX10 || Lora TX Buffer 10 - User Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0b || LORA_TX11 || Lora TX Buffer 11 - User Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0c || LORA_TX12 || Lora TX Buffer 12 - User Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0d || LORA_TX13 || Lora TX Buffer 13 - User Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0e || LORA_TX14 || Lora TX Buffer 14 - User Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x0f || LORA_TX15 || Lora TX Buffer 15 - User Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || LORA_TX16 || Lora TX Buffer 16 - User Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || LORA_RX1 || Lora RX Buffer 1 - User Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || LORA_RX2 || Lora RX Buffer 2 - User Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || LORA_RX3 || Lora RX Buffer 3 - User Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || LORA_RX4 || Lora RX Buffer 4 - User Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || LORA_RX5 || Lora RX Buffer 5 - User Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || LORA_RX6 || Lora RX Buffer 6 - User Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || LORA_RX7 || Lora RX Buffer 7 - User Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || LORA_RX8 || Lora RX Buffer 8 - User Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || LORA_RX9 || Lora RX Buffer 9 - User Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x1a || LORA_RX10 || Lora RX Buffer 10 - User Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x1b || LORA_RX11 || Lora RX Buffer 11 - User Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x1c || LORA_RX12 || Lora RX Buffer 12 - User Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x1d || LORA_RX13 || Lora RX Buffer 13 - User Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x1e || LORA_RX14 || Lora RX Buffer 14 - User Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x1f || LORA_RX15 || Lora RX Buffer 15 - User Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || LORA_RX16 || Lora RX Buffer 16 - User Data&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* 0x01 - 0x10 Write Only.&lt;br /&gt;
* 0x11 - 0x20 Read Only.&lt;br /&gt;
----&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;height: 200px&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;100&amp;quot; |Register Address &lt;br /&gt;
! colspan=&amp;quot;8&amp;quot;| 0x22 &lt;br /&gt;
|-&lt;br /&gt;
| Name || - &lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; |SpreadingFactor &lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |SignalBandwidth &lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |ErrorCoding &lt;br /&gt;
|-&lt;br /&gt;
|Default Value || 0 ||  1 ||  0 ||  1 ||  1 ||  0 ||  1 ||  1 &lt;br /&gt;
|-&lt;br /&gt;
| Description || Reserved &lt;br /&gt;
! colspan=&amp;quot;3&amp;quot; | Band range 7-12 &lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; |  Spread spectrum bandwidth 6-9 &lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; | Effective data ratio 1-4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* It is recommended to keep the default unless you know the meaning of the LORA parameter.&lt;br /&gt;
----&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;height: 200px&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;100&amp;quot; |Register Address &lt;br /&gt;
! colspan=&amp;quot;8&amp;quot;| 0x23 &lt;br /&gt;
|-&lt;br /&gt;
|Default Value || 0 || 0 ||  0 || 0 ||  0 ||  0 ||  0 ||  0 &lt;br /&gt;
|-&lt;br /&gt;
| Description || L_SET || G_RESET || Reserved || Reserved ||Reserved || Reserved || L_RXNE || L_TX&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* L_SET(Write Only)&lt;br /&gt;
# Write 1 to set parameters from 0x22 to LORA Module.&lt;br /&gt;
# Write 0 not effect&lt;br /&gt;
* G_RESET(Write Only)&lt;br /&gt;
# Write 1 to reset A9G Module&lt;br /&gt;
# Write 0 not effect&lt;br /&gt;
* L_RXNE(Read &amp;amp; Write)&lt;br /&gt;
# Write 1 cause error&lt;br /&gt;
# Write 0 to clear&lt;br /&gt;
# Read 1 means data has been received, please get the data from the register 0x11 - 0x20.&lt;br /&gt;
# Read 0 means no data available now.&lt;br /&gt;
* L_SET(Write Only)&lt;br /&gt;
# Write 1 to send data,please fill in the data in register 0x01 - 0x10 before send.&lt;br /&gt;
# Write 0 not effect&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==How to use==&lt;br /&gt;
===How to assemble===&lt;br /&gt;
* Mount the Iot Node(A) board to Raspberry Pi&lt;br /&gt;
* Hookup GPS antana and Lora antana to IPX port.&lt;br /&gt;
  E1：GPS-ANTANA-IPX&lt;br /&gt;
  E3：LoRa-ANTANA-IPX&lt;br /&gt;
* Screws the GPRS antana on the SMA port.&lt;br /&gt;
{|&lt;br /&gt;
|[[File:IoTnodeA8.jpg|left|440px]]&lt;br /&gt;
|[[File:IoTnodeA7.jpg|none|440px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Configuring I2C(Raspberry Pi)===&lt;br /&gt;
Run &#039;&#039;&#039;sudo raspi-config&#039;&#039;&#039; and follow the prompts to install i2c support for the ARM core and linux kernel&amp;lt;br /&amp;gt;&lt;br /&gt;
Go to &#039;&#039;&#039;Interfacing Options&#039;&#039;&#039;&lt;br /&gt;
[[File:Raspi-config-1.png |none|320px]]&lt;br /&gt;
then &#039;&#039;&#039;I2C&#039;&#039;&#039;&lt;br /&gt;
[[File:Raspi-config-2.png |none|320px]]&lt;br /&gt;
Enable!&lt;br /&gt;
[[File:Raspi-config-3.png |none|320px]]&lt;br /&gt;
Done!&lt;br /&gt;
[[File:Raspi-config-4.png |none|320px]]&lt;br /&gt;
&lt;br /&gt;
=== Replace /boot/overlays/sc16is752-i2c.dtbo(Raspberry Pi)===&lt;br /&gt;
Replace /boot/overlays/sc16is752-i2c.dtbo file with this file: &lt;br /&gt;
&#039;&#039;&#039;[[ File:Sc16is752-i2c.zip ]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:Replace_dtbo_sc16is752.png|none|480px]]&lt;br /&gt;
&lt;br /&gt;
Modify &#039;&#039;&#039;/boot/config.txt&#039;&#039;&#039; file and add following parameter:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; dtoverlay=sc16is752-i2c &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Add_dt_sc16.png|none|480px]]&lt;br /&gt;
&lt;br /&gt;
And then save it and reboot Raspberry Pi.&amp;lt;br&amp;gt;&lt;br /&gt;
* After rebooting, two serial devices will be detected in following location:&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
/dev/ttySC0 &lt;br /&gt;
/dev/ttySC1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===How to use GPS Module with gpsd(Raspberry Pi)===&lt;br /&gt;
A) First, replace the /boot/overlays/sc16is752-i2c.dtbo and make sure I2C is working properly.&lt;br /&gt;
# Replace sc16is752-i2c.dtbo  [[https://wiki.52pi.com/index.php/IoT_Node(A)_SKU:_EP-0105#Replace_.2Fboot.2Foverlays.2Fsc16is752-i2c.dtbo.28Raspberry_Pi.29]]&lt;br /&gt;
# Configuring I2C[[https://wiki.52pi.com/index.php/IoT_Node(A)_SKU:_EP-0105#Configuring_I2C.28Raspberry_Pi.29]]&lt;br /&gt;
&lt;br /&gt;
B)Install gpsd tools.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install gpsd gpsd-clients&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:Gpsd-install.png|none|480px]]&lt;br /&gt;
C)Modify &#039;&#039;&#039;/etc/default/gpsd&#039;&#039;&#039; file and add following parameters:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DEVICES=&amp;quot;/dev/ttySC1&amp;quot;&lt;br /&gt;
GPSD_OPTIONS=&amp;quot;-F /var/run/gpsd.sock&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:Gpsd-config.png|none|480px]]&lt;br /&gt;
&lt;br /&gt;
D)Enter command &#039;&#039;&#039;i2cset -y 1 0x16 0x23 0x40&#039;&#039;&#039; to reset the GPRS module.&lt;br /&gt;
&lt;br /&gt;
E)Python Script For Open GPS:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
import os&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
# Restart gpsd service.&lt;br /&gt;
os.system(&amp;quot;sudo systemctl restart gpsd.socket&amp;quot;)&lt;br /&gt;
# Open serial port  &lt;br /&gt;
ser = serial.Serial(&#039;/dev/ttySC0&#039;, 115200)&lt;br /&gt;
&lt;br /&gt;
i = 0&lt;br /&gt;
&lt;br /&gt;
if ser.isOpen == False:&lt;br /&gt;
    ser.open()&lt;br /&gt;
try:&lt;br /&gt;
    print(&amp;quot;Turn on GPS...&amp;quot;)&lt;br /&gt;
    while True:&lt;br /&gt;
        ser.write(str.encode(&amp;quot;AT+GPS=1\r&amp;quot;))&lt;br /&gt;
        size = ser.inWaiting() &lt;br /&gt;
        if size != 0:&lt;br /&gt;
            ticks = time.time()&lt;br /&gt;
            response = ser.read(size)&lt;br /&gt;
            gps = str(response,encoding=&amp;quot;utf-8&amp;quot;)&lt;br /&gt;
            if(gps.find(&amp;quot;OK&amp;quot;) != -1):&lt;br /&gt;
                os.system(&amp;quot;sudo cgps -s&amp;quot;)  &lt;br /&gt;
                exit()&lt;br /&gt;
            else:&lt;br /&gt;
                i = i + 1&lt;br /&gt;
                print(&amp;quot;Waiting GPS Enable, If the time is too long, Please test outdoors:&amp;quot; + str(i))&lt;br /&gt;
                ser.flushInput() &lt;br /&gt;
                time.sleep(1)    &lt;br /&gt;
except KeyboardInterrupt:&lt;br /&gt;
    ser.flushInput()&lt;br /&gt;
    ser.close()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
F)Save it and execute it:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python3 GPS.py &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:Gps-fix.png|none|500px]]&lt;br /&gt;
&lt;br /&gt;
===How to use GPS Module with C(Raspberry Pi)===&lt;br /&gt;
A)Install gpsd tools.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libgps-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
B)Create source code and name it &amp;quot;gps.c&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;gps.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
   int rc;&lt;br /&gt;
   struct timeval tv;&lt;br /&gt;
   struct gps_data_t gps_data;&lt;br /&gt;
   if ((rc = gps_open(&amp;quot;localhost&amp;quot;, &amp;quot;2947&amp;quot;, &amp;amp;gps_data)) == -1)&lt;br /&gt;
   {&lt;br /&gt;
      printf(&amp;quot;code: %d, reason: %s\n&amp;quot;, rc, gps_errstr(rc));&lt;br /&gt;
      return EXIT_FAILURE;&lt;br /&gt;
   }&lt;br /&gt;
   &lt;br /&gt;
   gps_stream(&amp;amp;gps_data, WATCH_ENABLE | WATCH_JSON, NULL);&lt;br /&gt;
&lt;br /&gt;
   while (1)&lt;br /&gt;
   {&lt;br /&gt;
      /* wait for 2 seconds to receive data */&lt;br /&gt;
      if (gps_waiting(&amp;amp;gps_data, 2000000))&lt;br /&gt;
      {&lt;br /&gt;
         /* read data */&lt;br /&gt;
         if ((rc = gps_read(&amp;amp;gps_data)) == -1)&lt;br /&gt;
         {&lt;br /&gt;
            printf(&amp;quot;error occured reading gps data. code: %d, reason: %s\n&amp;quot;, rc, gps_errstr(rc));&lt;br /&gt;
         }&lt;br /&gt;
         else&lt;br /&gt;
         {&lt;br /&gt;
            /* Display data from the GPS receiver. */&lt;br /&gt;
            if ((gps_data.status == STATUS_FIX) &amp;amp;&amp;amp; (gps_data.fix.mode == MODE_2D || gps_data.fix.mode == MODE_3D) &amp;amp;&amp;amp; !isnan(gps_data.fix.latitude) &amp;amp;&amp;amp; !isnan(gps_data.fix.longitude))&lt;br /&gt;
            {&lt;br /&gt;
               /* gettimeofday(&amp;amp;tv, NULL); EDIT: tv.tv_sec isn&#039;t actually the timestamp! */&lt;br /&gt;
&lt;br /&gt;
               printf(&amp;quot;latitude: %f, longitude: %f, speed: %f, timestamp: %lf\n&amp;quot;, gps_data.fix.latitude, gps_data.fix.longitude, gps_data.fix.speed, gps_data.fix.time);&lt;br /&gt;
               //EDIT: Replaced tv.tv_sec with gps_data.fix.time&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
               printf(&amp;quot;no GPS data available\n&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
         }&lt;br /&gt;
      }&lt;br /&gt;
      sleep(3);&lt;br /&gt;
   }&lt;br /&gt;
   /* When you are done... */&lt;br /&gt;
   gps_stream(&amp;amp;gps_data, WATCH_DISABLE, NULL);&lt;br /&gt;
   gps_close(&amp;amp;gps_data);&lt;br /&gt;
   return EXIT_SUCCESS;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Compile!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gcc gps.c -lm -lgps -o gps&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exec It! &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;./gps&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:Gps-c.png|none|500px]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===How to use GPS Module with Python(Raspberry Pi)===&lt;br /&gt;
The following code is recommended to be executed using Python 3 and install the &#039;&#039;&#039;gpsd-py3&#039;&#039;&#039; library and &#039;&#039;&#039;GPS 2D/3D Fix&#039;&#039;&#039;:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import gpsd&lt;br /&gt;
&lt;br /&gt;
# Connect to the local gpsd&lt;br /&gt;
gpsd.connect()&lt;br /&gt;
&lt;br /&gt;
# Get gps position&lt;br /&gt;
packet = gpsd.get_current()&lt;br /&gt;
&lt;br /&gt;
# See the inline docs for GpsResponse for the available data&lt;br /&gt;
print(packet.position())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[File:Gps-py.png|none|300px]]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===How to use GSM Module with PPPd(Raspberry Pi)===&lt;br /&gt;
&lt;br /&gt;
A) First, replace the /boot/overlays/sc16is752-i2c.dtbo and make sure I2C is working properly.&lt;br /&gt;
# Replace sc16is752-i2c.dtbo  [[https://wiki.52pi.com/index.php/IoT_Node(A)_SKU:_EP-0105#Replace_.2Fboot.2Foverlays.2Fsc16is752-i2c.dtbo.28Raspberry_Pi.29]]&lt;br /&gt;
# Configuring I2C[[https://wiki.52pi.com/index.php/IoT_Node(A)_SKU:_EP-0105#Configuring_I2C.28Raspberry_Pi.29]]&lt;br /&gt;
&lt;br /&gt;
B)Enter command &#039;&#039;&#039;i2cset -y 1 0x16 0x23 0x40&#039;&#039;&#039; to reset the GPRS module.&lt;br /&gt;
# After running the command, you need to wait a little, about 10 seconds.&lt;br /&gt;
# You can also use the following method to reset.[[https://wiki.52pi.com/index.php/IoT_Node(A)_SKU:_EP-0105#How_to_diagnose_my_GSM_Module.28Raspberry_Pi.29]]&lt;br /&gt;
&lt;br /&gt;
C)Enter command &#039;&#039;&#039;sudo apt install ppp&#039;&#039;&#039; to install ppp tools.&lt;br /&gt;
&lt;br /&gt;
[[File:Pppd-tools-apt.png|none|480px]]&lt;br /&gt;
&lt;br /&gt;
D)Copy &#039;&#039;&#039;/etc/ppp/peers/provider&#039;&#039;&#039; to &#039;&#039;&#039;/etc/ppp/peers/gprs&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
E)Modify &#039;&#039;&#039;/etc/ppp/peers/gprs&#039;&#039;&#039;&lt;br /&gt;
#Line 10 : Please consult your service provider for the user (Example:cmnet).&lt;br /&gt;
#Line 15 : Please consult your service provider for the apn (Example:cmnet).&lt;br /&gt;
#Line 18 - Line 24:Recommended setting &lt;br /&gt;
&lt;br /&gt;
[[File:Gprs-set.png|none|480px]]&lt;br /&gt;
&lt;br /&gt;
F)Modify &#039;&#039;&#039;/etc/chatscripts/gprs&#039;&#039;&#039; (Change Line 34 to Line 35,Dialout Number May be &#039;&#039;&#039;NOT&#039;&#039;&#039; *99#)&lt;br /&gt;
&lt;br /&gt;
[[File:Gprs ppp.png|none|480px]]&lt;br /&gt;
&lt;br /&gt;
G)Enter command &#039;&#039;&#039;sudo pppd call gprs&#039;&#039;&#039; to dial up.&lt;br /&gt;
&lt;br /&gt;
[[File:Get-ip-ppp.png|none|480px]]&lt;br /&gt;
&lt;br /&gt;
H)Check your ppp config from your ISP.&lt;br /&gt;
&lt;br /&gt;
[[File:Ppp-test.png|none|480px]]&lt;br /&gt;
&lt;br /&gt;
I)Enter command &#039;&#039;&#039;ping -I ppp0 8.8.8.8&#039;&#039;&#039; test your network (If &#039;&#039;&#039;Internet&#039;&#039;&#039; available and &#039;&#039;&#039;route table&#039;&#039;&#039; is correct)&lt;br /&gt;
&lt;br /&gt;
[[File:Ping-google.png|none]]&lt;br /&gt;
&lt;br /&gt;
J)Please keep the GSM signal good, otherwise the following will occur.&lt;br /&gt;
&lt;br /&gt;
[[File:Ppp0-signal-bad.png|none]]&lt;br /&gt;
&lt;br /&gt;
===How to diagnose my GSM Module(Raspberry Pi)===&lt;br /&gt;
The following code is recommended to be executed using Python 3 and install the &#039;&#039;&#039;smbus&#039;&#039;&#039; library:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import serial&lt;br /&gt;
import time&lt;br /&gt;
import smbus&lt;br /&gt;
import operator&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Waiting for initializing...&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
bus = smbus.SMBus(1)    &lt;br /&gt;
bus.write_byte_data(0x16,0x23,0x40)&lt;br /&gt;
&lt;br /&gt;
ser = serial.Serial(&#039;/dev/ttySC0&#039;, 115200)&lt;br /&gt;
&lt;br /&gt;
if ser.isOpen == False:&lt;br /&gt;
    ser.open()&lt;br /&gt;
try:&lt;br /&gt;
    print(&#039;-&#039;*60)&lt;br /&gt;
    print(&amp;quot;Initializing A9G GPRS module.&amp;quot;)&lt;br /&gt;
    print(&amp;quot;GSM connecting...&amp;quot;)&lt;br /&gt;
    time.sleep(3)&lt;br /&gt;
    i = 0&lt;br /&gt;
    while True:&lt;br /&gt;
        ser.write(str.encode(&amp;quot;AT+CCID\r&amp;quot;))&lt;br /&gt;
        size = ser.inWaiting() &lt;br /&gt;
        if size != 0:&lt;br /&gt;
            ticks = time.time()&lt;br /&gt;
            response = ser.read(size)&lt;br /&gt;
            ccid = str(response,encoding=&amp;quot;utf-8&amp;quot;)&lt;br /&gt;
            print(ccid)&lt;br /&gt;
        else:&lt;br /&gt;
            i = i + 1&lt;br /&gt;
            ser.flushInput() &lt;br /&gt;
            time.sleep(1)    &lt;br /&gt;
except KeyboardInterrupt:&lt;br /&gt;
    ser.close()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exec the Test Script,based on the results of the implementation, we can diagnose the GSM module.&lt;br /&gt;
&lt;br /&gt;
For example, the following return, &#039;&#039;&#039;CME ERROR 53&#039;&#039;&#039; error tell us Power not good.&lt;br /&gt;
&lt;br /&gt;
CME Code = GSM Equipment Related errors&lt;br /&gt;
&lt;br /&gt;
[[File:Cme-53.png|500px|none]]&lt;br /&gt;
&lt;br /&gt;
Of course, the script also has a reset function. If you can display the &#039;&#039;&#039;CCID&#039;&#039;&#039; correctly, the reset is complete.&lt;br /&gt;
&lt;br /&gt;
[[File:A9g-test.png|500px|none]]&lt;br /&gt;
Press &#039;&#039;&#039;Ctrl-C&#039;&#039;&#039; to kill this script.&lt;br /&gt;
&lt;br /&gt;
===Dialout log reference(Raspberry Pi)===&lt;br /&gt;
&#039;&#039;&#039;For quick troubleshooting, please refer to other documents for more details.&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Script /usr/sbin/chat -s -v -f /etc/chatscripts/gprs -T cmnet finished (pid 1025), status = 0x0&lt;br /&gt;
Serial connection established.&lt;br /&gt;
using channel 1&lt;br /&gt;
Using interface ppp0&lt;br /&gt;
Connect: ppp0 &amp;lt;--&amp;gt; /dev/ttyUSB0&lt;br /&gt;
sent [LCP ConfReq id=0x1 &amp;lt;asyncmap 0x0&amp;gt; &amp;lt;magic 0x93623f70&amp;gt; &amp;lt;pcomp&amp;gt; &amp;lt;accomp&amp;gt;]&lt;br /&gt;
rcvd [LCP ConfReq id=0x1 &amp;lt;asyncmap 0x0&amp;gt; &amp;lt;auth pap&amp;gt; &amp;lt;magic 0xb90fa&amp;gt; &amp;lt;pcomp&amp;gt; &amp;lt;accomp&amp;gt;]&lt;br /&gt;
sent [LCP ConfAck id=0x1 &amp;lt;asyncmap 0x0&amp;gt; &amp;lt;auth pap&amp;gt; &amp;lt;magic 0xb90fa&amp;gt; &amp;lt;pcomp&amp;gt; &amp;lt;accomp&amp;gt;]&lt;br /&gt;
rcvd [LCP ConfAck id=0x1 &amp;lt;asyncmap 0x0&amp;gt; &amp;lt;magic 0x93623f70&amp;gt; &amp;lt;pcomp&amp;gt; &amp;lt;accomp&amp;gt;]&lt;br /&gt;
sent [LCP EchoReq id=0x0 magic=0x93623f70]&lt;br /&gt;
sent [PAP AuthReq id=0x1 user=&amp;quot;cmnet&amp;quot; password=&amp;lt;hidden&amp;gt;]&lt;br /&gt;
rcvd [LCP EchoRep id=0x0 magic=0xb90fa]&lt;br /&gt;
rcvd [PAP AuthAck id=0x1 &amp;quot;Login ok&amp;quot;]&lt;br /&gt;
Remote message: Login ok&lt;br /&gt;
PAP authentication succeeded&lt;br /&gt;
sent [CCP ConfReq id=0x1 &amp;lt;deflate 15&amp;gt; &amp;lt;deflate(old#) 15&amp;gt; &amp;lt;bsd v1 15&amp;gt;]&lt;br /&gt;
sent [IPCP ConfReq id=0x1 &amp;lt;compress VJ 0f 01&amp;gt; &amp;lt;addr 0.0.0.0&amp;gt; &amp;lt;ms-dns1 0.0.0.0&amp;gt; &amp;lt;ms-dns2 0.0.0.0&amp;gt;]&lt;br /&gt;
rcvd [IPCP ConfReq id=0x1 &amp;lt;compress VJ 0f 01&amp;gt; &amp;lt;addr 192.168.0.1&amp;gt;]&lt;br /&gt;
sent [IPCP ConfAck id=0x1 &amp;lt;compress VJ 0f 01&amp;gt; &amp;lt;addr 192.168.0.1&amp;gt;]&lt;br /&gt;
rcvd [LCP ProtRej id=0x2 80 fd 01 01 00 0f 1a 04 78 00 18 04 78 00 15 03 2f]&lt;br /&gt;
Protocol-Reject for &#039;Compression Control Protocol&#039; (0x80fd) received&lt;br /&gt;
rcvd [IPCP ConfNak id=0x1 &amp;lt;addr 10.188.229.78&amp;gt; &amp;lt;ms-dns1 211.136.17.107&amp;gt; &amp;lt;ms-dns2 211.136.20.203&amp;gt;]&lt;br /&gt;
sent [IPCP ConfReq id=0x2 &amp;lt;compress VJ 0f 01&amp;gt; &amp;lt;addr 10.188.229.78&amp;gt; &amp;lt;ms-dns1 211.136.17.107&amp;gt; &amp;lt;ms-dns2 211.136.20.203&amp;gt;]&lt;br /&gt;
rcvd [IPCP ConfAck id=0x2 &amp;lt;compress VJ 0f 01&amp;gt; &amp;lt;addr 10.188.229.78&amp;gt; &amp;lt;ms-dns1 211.136.17.107&amp;gt; &amp;lt;ms-dns2 211.136.20.203&amp;gt;]&lt;br /&gt;
not replacing default route to eth0 [10.0.1.1]&lt;br /&gt;
local  IP address 10.188.229.78&lt;br /&gt;
remote IP address 192.168.0.1&lt;br /&gt;
primary   DNS address 211.136.17.107&lt;br /&gt;
secondary DNS address 211.136.20.203&lt;br /&gt;
Script /etc/ppp/ip-up started (pid 1034)&lt;br /&gt;
Script /etc/ppp/ip-up finished (pid 1034), status = 0x0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===How to use Lora TX &amp;amp; RX with C(Raspberry Pi)===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;It must be transferred between the two IOT Node(A). The content sent by itself cannot be received by itself.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* How to Send:After filling the data into register 0x01 - 0x10, set the &#039;&#039;&#039;L_TX&#039;&#039;&#039; bit to start sending data.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;wiringPi.h&amp;gt;&lt;br /&gt;
#include &amp;lt;wiringPiI2C.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(){&lt;br /&gt;
  int fd;&lt;br /&gt;
&lt;br /&gt;
  fd = wiringPiI2CSetup(0x16);&lt;br /&gt;
&lt;br /&gt;
  wiringPiI2CWriteReg8(fd,1,0xAA);&lt;br /&gt;
  wiringPiI2CWriteReg8(fd,2,0x55);&lt;br /&gt;
  wiringPiI2CWriteReg8(fd,3,0xA5);&lt;br /&gt;
  wiringPiI2CWriteReg8(fd,4,0x5A);&lt;br /&gt;
&lt;br /&gt;
  wiringPiI2CWriteReg8(fd,0x23,0x01);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* How to Send Receive:Check &#039;&#039;&#039;L_RXNE&#039;&#039;&#039; bit,If set,new data arrived,this flag must be manually clear.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;wiringPi.h&amp;gt;&lt;br /&gt;
#include &amp;lt;wiringPiI2C.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(){&lt;br /&gt;
  int fd;&lt;br /&gt;
  int ret[4];&lt;br /&gt;
&lt;br /&gt;
  fd = wiringPiI2CSetup(0x16);&lt;br /&gt;
&lt;br /&gt;
  if (wiringPiI2CReadReg8(fd, 0x23) &amp;amp; 0x02 )&lt;br /&gt;
  {&lt;br /&gt;
    ret[0] = wiringPiI2CReadReg8(fd, 0x11);&lt;br /&gt;
    ret[1] = wiringPiI2CReadReg8(fd, 0x12);&lt;br /&gt;
    ret[2] = wiringPiI2CReadReg8(fd, 0x13);&lt;br /&gt;
    ret[3] = wiringPiI2CReadReg8(fd, 0x14);&lt;br /&gt;
&lt;br /&gt;
    printf(&amp;quot;Received data:0x%02X,0x%02X,0x%02X,0x%02X&amp;quot;,ret[0],ret[1],ret[2],ret[3])&lt;br /&gt;
  }else{&lt;br /&gt;
    printf(&amp;quot;No data Received yet~&amp;quot;)&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===How to use Lora TX &amp;amp; RX with Python(Raspberry Pi)===&lt;br /&gt;
The following code is recommended to be executed using Python 3 and install the &#039;&#039;&#039;smbus&#039;&#039;&#039; library.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;It must be transferred between the two IOT Node(A). The content sent by itself cannot be received by itself. Please save it as a py script for execution.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* How to Send:After filling the data into register 0x01 - 0x10, set the &#039;&#039;&#039;L_TX&#039;&#039;&#039; bit to start sending data.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import time&lt;br /&gt;
import smbus&lt;br /&gt;
import os&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
bus = smbus.SMBus(1)    &lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    data_list = [170,85,165,90] &lt;br /&gt;
   &lt;br /&gt;
    # write data to register and then the data will be send out. &lt;br /&gt;
    for index in range(1,len(data_list) + 1):&lt;br /&gt;
        bus.write_byte_data(0x16,index,data_list[index - 1])&lt;br /&gt;
        print(&amp;quot;LORA send data to %d register %d data&amp;quot; %(index, data_list[index - 1]))&lt;br /&gt;
        &lt;br /&gt;
    bus.write_byte_data(0x16,0x23,0x01) &lt;br /&gt;
except KeyboardInterrupt:&lt;br /&gt;
    sys.exit()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* How to Send Receive:Check &#039;&#039;&#039;L_RXNE&#039;&#039;&#039; bit,If set,new data arrived,this flag must be manually clear.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import time&lt;br /&gt;
import smbus&lt;br /&gt;
import os&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
bus = smbus.SMBus(1)    &lt;br /&gt;
recv_data = [] &lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    if bus.read_byte_data(0x16,0x23) &amp;amp; 0x02 :&lt;br /&gt;
        # manually clear L_RXNE&lt;br /&gt;
        bus.write_byte_data(0x16,0x23,0x00) &lt;br /&gt;
        register_list = [0x11,0x12,0x13,0x14]&lt;br /&gt;
        &lt;br /&gt;
        # read out data&lt;br /&gt;
        for index in range(0x11,len(register_list) + 0x11):&lt;br /&gt;
            recv_data.append(bus.read_byte_data(0x16, register_list[index - 0x11]))&lt;br /&gt;
&lt;br /&gt;
        print(&amp;quot;Received data:&amp;quot;)&lt;br /&gt;
        print(recv_data)  &lt;br /&gt;
    else :&lt;br /&gt;
        print(&amp;quot;No data Received yet~&amp;quot;)&lt;br /&gt;
except KeyboardInterrupt:&lt;br /&gt;
    sys.exit()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Special description of I2C bandwidth===&lt;br /&gt;
&lt;br /&gt;
*The limit of the I2C speed is 400kHz,due to the I2C protocol,so the single device effective bandwidth is lower than 320kbps,multi device effective bandwidth is lower than 160kbps.&lt;br /&gt;
*The limit of the I2C &amp;lt;=&amp;gt; UART Bridge speed is 115200bps.&lt;br /&gt;
*When GPS and GSM work at the same time, I2C bandwidth is insufficient,because 115.2kbps * 2 = 230.4kbps,so some data will be overflow.&lt;br /&gt;
*Reducing the baud rate of GPS and GSM communication can improve the communication bandwidth shortage.&lt;br /&gt;
*Stacking other DockerPi modules may take up extra I2C bandwidth.&lt;br /&gt;
*At usually, the network data speed is slow, so the GSM bandwidth is not full, so there is no overflow problem.&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
* Q: GPS Status always NO FIX?&lt;br /&gt;
  A: GPS must be used outdoors,It may take up to 15 minutes for the first use.&lt;br /&gt;
&lt;br /&gt;
* Q: Unable to open serial port?&lt;br /&gt;
  A: Check permissions, dialout groups, and whether other software is occupying the serial port.&lt;br /&gt;
&lt;br /&gt;
* Q: PPP No internet access,How can I do?&lt;br /&gt;
  A: Consult your ISP service provider.&lt;br /&gt;
&lt;br /&gt;
* Q: Dose CDMA Support?&lt;br /&gt;
  A: No.&lt;br /&gt;
&lt;br /&gt;
* Q: I can&#039;t use the BDS system.&lt;br /&gt;
  A: Available only in China and parts of Asia.&lt;br /&gt;
&lt;br /&gt;
* Q: The network speed is too slow.&lt;br /&gt;
  A: 2G network is unable to compare speed with 5G network.&lt;br /&gt;
&lt;br /&gt;
* Q: Can I use other GPS antennas?&lt;br /&gt;
  A: Yes, but please be careful not to use antennas that exceed the GPS power limit.&lt;br /&gt;
&lt;br /&gt;
* Q: My SIM card has no signal, but it works fine on the mobile phone. Why?&lt;br /&gt;
  A: Make sure your location 2G network is well covered &amp;amp; Make sure your carrier does not ban your 2G network.&lt;br /&gt;
&lt;br /&gt;
* Q: PPP have internet access,but can&#039;t ping any website?&lt;br /&gt;
  A: Try to run &#039;&#039;&#039;route add -net 0.0.0.0 ppp0&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Q: GSM Connect script failed,How to do?&lt;br /&gt;
  A: Try to run &#039;&#039;&#039;i2cset -y 1 0x16 0x23 0x40&#039;&#039;&#039; and wait 1 minutes.If Failed,Please check your SIM card.&lt;br /&gt;
&lt;br /&gt;
* Q: Why I get &amp;quot;timeout sending Config-Requests&amp;quot;?&lt;br /&gt;
  A: Please check the antenna and 2G signal conditions..&lt;br /&gt;
&lt;br /&gt;
* Q: Could not determine local IP address,How can I do?&lt;br /&gt;
  A: The program will try again until it fails. If it fails, please try again later, or contact the ISP to resolve it.&lt;br /&gt;
&lt;br /&gt;
* Q: Could not determine remote IP address,How can I do?&lt;br /&gt;
  A: Your ISP limits how your SIM is used.&lt;br /&gt;
&lt;br /&gt;
* Q: What is China Dialout Number?&lt;br /&gt;
  A: WCDMA(*99#) CDMA(#777) TD-SCDMA(981#) GPRS/EGDE(99**1#)&lt;br /&gt;
&lt;br /&gt;
* Q: What is Other Region Dialout Number?&lt;br /&gt;
  A: Ask your ISP provider.&lt;br /&gt;
&lt;br /&gt;
* Q: &#039;&#039;&#039;pppd call gprs&#039;&#039;&#039; can dial successfully but &#039;&#039;&#039;ping -I ppp0 8.8.8.8&#039;&#039;&#039; fail,How can I do?&lt;br /&gt;
  A: If there is no problem with the previous script, if you run &#039;&#039;&#039;pppd call gprs&#039;&#039;&#039; succes, and ifpconfig can view the ppp0 network card. However, if you have enabled Ethernet eth0 before dialing, you can use the ppp0 NIC to ping the specified ip or domain name &#039;&#039;&#039;ping -I ppp0 8.8.8.8&#039;&#039;&#039; and it will not succeed for two reasons. One is the default gateway in the routing table. It was generated by eth0 before, and one is the default dns server address.After the defaultroute is enabled in the pppd script, pppd will add a default gateway information to the routing table after dialing successfully. However, because there is already a default gateway, the addition fails. The default gateway is still set by the previous eth. Before &#039;&#039;&#039;pppd call gprs&#039;&#039;&#039; we should first &#039;&#039;&#039;route del default&#039;&#039;&#039; to delete the default route (preferably write a script to delete the default route - dialing and other operations).&lt;br /&gt;
&lt;br /&gt;
* Q: Dial stability is relatively poor, Why?&lt;br /&gt;
  A: Because 2G coverage is getting lower and lower, you can use a more powerful antenna or add the &#039;&#039;&#039;lcp-echo-interval&#039;&#039;&#039; parameter.&lt;br /&gt;
&lt;br /&gt;
* Q: Why I get &#039;&#039;&#039;UnicodeDecodeError: &#039;utf8&#039; codec can&#039;t decode byte 0xXX&#039;&#039;&#039; ?&lt;br /&gt;
  A: Please refer =&amp;gt; [[IoT_Node(A)_SKU:_EP-0105#Replace_.2Fboot.2Foverlays.2Fsc16is752-i2c.dtbo.28Raspberry_Pi.29]]&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
* IoT,Lora,GPS,GPRS,GSM,Node,radio devices,BDS&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=EP-0106&amp;diff=7797</id>
		<title>EP-0106</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=EP-0106&amp;diff=7797"/>
		<updated>2020-02-28T09:00:44Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: /* Register Map */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==DockerPi Sensor Hub Development Board==&lt;br /&gt;
[[File:Sensorhub2.jpg |right|300px]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
The DockerPi SensorHub for obtaining environmental parameters in the Internet of Things.&amp;lt;br&amp;gt;&lt;br /&gt;
It integrates various environmental sensors: temperature sensors, humidity sensors, air pressure sensors, lighting and thermal infrared sensors. &amp;lt;br&amp;gt;&lt;br /&gt;
You can use them in smart homes. &amp;lt;br&amp;gt;&lt;br /&gt;
To obtain various parameters in life, these parameters can be processed to control the home reasonably and intelligently. &amp;lt;br&amp;gt;&lt;br /&gt;
For example, the temperature of the temperature sensor can be used to control the heating device or the air conditioner. &amp;lt;br&amp;gt;&lt;br /&gt;
The thermal infrared sensor can detect if someone is in the living room. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* DockerPi Series&lt;br /&gt;
* Programmable&lt;br /&gt;
* Read directly(without programming)&lt;br /&gt;
* Extend the GPIO Pins &lt;br /&gt;
* Ext. Temperature Detection, Thermistor Detection Temperature Range -30℃~127℃&lt;br /&gt;
* OnBoard Temperature DHT11 -20℃~60℃&lt;br /&gt;
* P. Temperature Sensor -40℃~80℃. &lt;br /&gt;
* Humidity detection, sensor detection range 20% Rh ~ 95% Rh&lt;br /&gt;
* Light intensity detection, detection range: 0Lux~1800Lux&lt;br /&gt;
* Pressure detection, detection range: 300 Pa ~ 1100 hPa&lt;br /&gt;
* Biopsy test (biopsy test with corresponding indicator), maximum detection angle of 100 degrees, maximum distance of 12m&lt;br /&gt;
* Can Stack with other Stack board&lt;br /&gt;
* Independent of the mainboard hardware (require I2C support)&lt;br /&gt;
&lt;br /&gt;
==Official Compatibility Test==&lt;br /&gt;
Not only support the following development boards, other development boards can be compatible if they have I2C peripherals. (Note: some software changes may be required)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Platform !!DockerPi Sensor Hub !! Notes&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi All Platform|| √ ||Not Include CM Series &amp;amp; EOL Platform&lt;br /&gt;
|-&lt;br /&gt;
|Banana Pi M3 || √ ||Python 3 &amp;amp; Modify DEVICE_BUS to 2&lt;br /&gt;
|-&lt;br /&gt;
|Orange Pi Zero || √ ||Python 3 &amp;amp; Modify DEVICE_BUS to 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Package Includes==&lt;br /&gt;
* 1 x Sensor Hub development board &lt;br /&gt;
* 4 x M2.5x12 copper stick&lt;br /&gt;
* 8 x M2.5x6 screws and nuts &lt;br /&gt;
* 1 x NTC temperature sensor (waterproof)&lt;br /&gt;
* 1 x Introductions&lt;br /&gt;
[[File:Sensorhub9.jpg|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Sensorhub1.jpg |left|320px]]&lt;br /&gt;
|[[File:Sensorhub2.jpg |none|320px]]&lt;br /&gt;
|[[File:Sensorhub3.jpg |none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Sensorhub4.jpg |left|320px]]&lt;br /&gt;
|[[File:Sensorhub5.jpg |none|320px]]&lt;br /&gt;
|[[File:Sensorhub6.jpg |none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Sensorhub7.jpg |left|320px]]&lt;br /&gt;
|[[File:Sensorhub8.jpg |none|320px]]&lt;br /&gt;
|[[File:Sensorhub9.jpg |none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Mechanical Drawings==&lt;br /&gt;
[[File:Mechanical sensorhub0.png|left|600px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Register Map==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;All registers are Read Only&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Device Addr:0x17&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Register Address !! Function !! Value&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || TEMP_REG || Ext. Temperature [Unit:degC]&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || LIGHT_REG_L || Light Brightness Low 8 Bit [Unit:Lux]&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || LIGHT_REG_H || Light Brightness High 8 Bit [Unit:Lux]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || STATUS_REG || Status Function&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || ON_BOARD_TEMP_REG || OnBoard Temperature [Unit:degC]&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || ON_BOARD_HUMIDITY_REG || OnBoard Humidity [Uinit:%]&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || ON_BOARD_SENSOR_ERROR || 0(OK) - 1(Error)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || BMP280_TEMP_REG || P. Temperature [Unit:degC]&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || BMP280_PRESSURE_REG_L || P. Pressure Low 8 Bit [Unit:Pa]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || BMP280_PRESSURE_REG_M || P. Pressure Mid 8 Bit [Unit:Pa]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || BMP280_PRESSURE_REG_H || P. Pressure High 8 Bit [Unit:Pa]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || BMP280_STATUS || 0(OK) - 1(Error)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0D || HUMAN_DETECT || 0(No Active Body) - 1(Active Body)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;height: 200px&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;100&amp;quot; |STATUS_REG&lt;br /&gt;
! colspan=&amp;quot;8&amp;quot;| 0x04 &lt;br /&gt;
|-&lt;br /&gt;
|Default Value || 0 || 0 ||  0 || 0 ||  0 ||  0 ||  0 ||  0 &lt;br /&gt;
|-&lt;br /&gt;
| Description || Reserved || Reserved || Reserved || Reserved || L_FAIL || L_OVR || T_FAIL || T_OVR&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* T_OVR(Read Only)&lt;br /&gt;
# Read 1 means Ext. Temperature Overflow.&lt;br /&gt;
# Read 0 means Ext. Temperature works well.&lt;br /&gt;
* T_FAIL(Read Only)&lt;br /&gt;
# Read 1 means Ext. Temperature Not Found.&lt;br /&gt;
# Read 0 means Ext. Temperature works well.&lt;br /&gt;
* L_OVR(Read Only)&lt;br /&gt;
# Read 1 means Light Brightness Overflow.&lt;br /&gt;
# Read 0 means Light Brightness works well.&lt;br /&gt;
* T_FAIL(Read Only)&lt;br /&gt;
# Read 1 means Light Brightness Not Found.&lt;br /&gt;
# Read 0 means Light Brightness works well.&lt;br /&gt;
&lt;br /&gt;
==Configuring I2C(Raspberry Pi)==&lt;br /&gt;
Run sudo raspi-config and follow the prompts to install i2c support for the ARM core and linux kernel&amp;lt;br /&amp;gt;&lt;br /&gt;
Go to &#039;&#039;&#039;Interfacing Options&#039;&#039;&#039;&lt;br /&gt;
[[File:Raspi-config-1.png |none|320px]]&lt;br /&gt;
then &#039;&#039;&#039;I2C&#039;&#039;&#039;&lt;br /&gt;
[[File:Raspi-config-2.png |none|320px]]&lt;br /&gt;
Enable!&lt;br /&gt;
[[File:Raspi-config-3.png |none|320px]]&lt;br /&gt;
Done!&lt;br /&gt;
[[File:Raspi-config-4.png |none|320px]]&lt;br /&gt;
&lt;br /&gt;
==Program in Language C(Raspberry Pi)==&lt;br /&gt;
* Create source code and name it &amp;quot;sensor.c&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
#include &amp;lt;wiringPi.h&amp;gt;&lt;br /&gt;
#include &amp;lt;wiringPiI2C.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define TEMP_REG 0x01&lt;br /&gt;
#define LIGHT_REG_L 0x02&lt;br /&gt;
#define LIGHT_REG_H 0x03&lt;br /&gt;
#define STATUS_REG 0x04&lt;br /&gt;
#define ON_BOARD_TEMP_REG 0x05&lt;br /&gt;
#define ON_BOARD_HUMIDITY_REG 0x06&lt;br /&gt;
#define ON_BOARD_SENSOR_ERROR 0x07&lt;br /&gt;
#define BMP280_TEMP_REG 0x08&lt;br /&gt;
#define BMP280_PRESSURE_REG_L 0x09&lt;br /&gt;
#define BMP280_PRESSURE_REG_M 0x0A&lt;br /&gt;
#define BMP280_PRESSURE_REG_H 0x0B&lt;br /&gt;
#define BMP280_STATUS 0x0C&lt;br /&gt;
#define HUMAN_DETECT 0x0D&lt;br /&gt;
&lt;br /&gt;
uint8_t aReceiveBuf[0x0D + 1];&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    int fd;&lt;br /&gt;
    int i = 0;&lt;br /&gt;
    fd = wiringPiI2CSetup(0x17);&lt;br /&gt;
&lt;br /&gt;
    if (fd &amp;lt; 0)&lt;br /&gt;
        printf(&amp;quot;Extend board Can not be initialized, please enable I2C and try again!\n&amp;quot;, fd);&lt;br /&gt;
&lt;br /&gt;
    for (i = TEMP_REG; i &amp;lt;= HUMAN_DETECT; i++)&lt;br /&gt;
    {&lt;br /&gt;
        aReceiveBuf[i] = wiringPiI2CReadReg8(fd, i);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (aReceiveBuf[STATUS_REG] &amp;amp; 0x01)&lt;br /&gt;
    {&lt;br /&gt;
        printf(&amp;quot;Off-chip temperature sensor overrange!\n&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    else if (aReceiveBuf[STATUS_REG] &amp;amp; 0x02)&lt;br /&gt;
    {&lt;br /&gt;
        printf(&amp;quot;No external temperature sensor!\n&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        printf(&amp;quot;Current external Sensor Temperature = %d Celsius\n&amp;quot;, (int)aReceiveBuf[TEMP_REG]);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (aReceiveBuf[STATUS_REG] &amp;amp; 0x04)&lt;br /&gt;
    {&lt;br /&gt;
        printf(&amp;quot;Onboard brightness sensor overrange!\n&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    else if (aReceiveBuf[STATUS_REG] &amp;amp; 0x08)&lt;br /&gt;
    {&lt;br /&gt;
        printf(&amp;quot;Onboard brightness sensor failure!\n&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        printf(&amp;quot;Current onboard sensor brightness = %d Lux\n&amp;quot;, (int)(aReceiveBuf[LIGHT_REG_H] &amp;lt;&amp;lt; 8) | (aReceiveBuf[LIGHT_REG_L]));&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    printf(&amp;quot;Current onboard sensor temperature = %d Celsius\n&amp;quot;, (int)aReceiveBuf[ON_BOARD_TEMP_REG]);&lt;br /&gt;
    printf(&amp;quot;Current onboard sensor humidity = %d %%\n&amp;quot;, (int)aReceiveBuf[ON_BOARD_HUMIDITY_REG]);&lt;br /&gt;
    if (aReceiveBuf[ON_BOARD_SENSOR_ERROR] != 0)&lt;br /&gt;
    {&lt;br /&gt;
        printf(&amp;quot;Onboard temperature and humidity sensor data may not be up to date!\n&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (aReceiveBuf[BMP280_STATUS] == 0)&lt;br /&gt;
    {&lt;br /&gt;
&lt;br /&gt;
        printf(&amp;quot;Current barometer temperature = %d Celsius\n&amp;quot;, (int)aReceiveBuf[BMP280_TEMP_REG]);&lt;br /&gt;
        printf(&amp;quot;Current barometer pressure = %d Pascal&amp;quot;\n&amp;quot;, (int)aReceiveBuf[BMP280_PRESSURE_REG_L] | (int)aReceiveBuf[BMP280_PRESSURE_REG_M] &amp;lt;&amp;lt; 8 | (int)aReceiveBuf[BMP280_PRESSURE_REG_H] &amp;lt;&amp;lt; 16);&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        printf(&amp;quot;Onboard barometer works abnormally!\n&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (aReceiveBuf[HUMAN_DETECT] == 1)&lt;br /&gt;
    {&lt;br /&gt;
        printf(&amp;quot;Live body detected within 5 seconds!\n&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        printf(&amp;quot;No humans detecte!\n&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Compile!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gcc sensor.c -lwiringPi  -o sensor&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exec It! &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;./sensor&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==Program in Language Python(Raspberry Pi)==&lt;br /&gt;
The following code is recommended to be executed using Python 3 and install the &#039;&#039;&#039;smbus&#039;&#039;&#039; library:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import smbus&lt;br /&gt;
&lt;br /&gt;
DEVICE_BUS = 1&lt;br /&gt;
DEVICE_ADDR = 0x17&lt;br /&gt;
&lt;br /&gt;
TEMP_REG = 0x01&lt;br /&gt;
LIGHT_REG_L = 0x02&lt;br /&gt;
LIGHT_REG_H = 0x03&lt;br /&gt;
STATUS_REG = 0x04&lt;br /&gt;
ON_BOARD_TEMP_REG = 0x05&lt;br /&gt;
ON_BOARD_HUMIDITY_REG = 0x06&lt;br /&gt;
ON_BOARD_SENSOR_ERROR = 0x07&lt;br /&gt;
BMP280_TEMP_REG = 0x08&lt;br /&gt;
BMP280_PRESSURE_REG_L = 0x09&lt;br /&gt;
BMP280_PRESSURE_REG_M = 0x0A&lt;br /&gt;
BMP280_PRESSURE_REG_H = 0x0B&lt;br /&gt;
BMP280_STATUS = 0x0C&lt;br /&gt;
HUMAN_DETECT = 0x0D&lt;br /&gt;
&lt;br /&gt;
bus = smbus.SMBus(DEVICE_BUS)&lt;br /&gt;
&lt;br /&gt;
aReceiveBuf = []&lt;br /&gt;
&lt;br /&gt;
aReceiveBuf.append(0x00) # 占位符&lt;br /&gt;
&lt;br /&gt;
for i in range(TEMP_REG,HUMAN_DETECT + 1):&lt;br /&gt;
    aReceiveBuf.append(bus.read_byte_data(DEVICE_ADDR, i))&lt;br /&gt;
&lt;br /&gt;
if aReceiveBuf[STATUS_REG] &amp;amp; 0x01 :&lt;br /&gt;
    print(&amp;quot;Off-chip temperature sensor overrange!&amp;quot;)&lt;br /&gt;
elif aReceiveBuf[STATUS_REG] &amp;amp; 0x02 :&lt;br /&gt;
    print(&amp;quot;No external temperature sensor!&amp;quot;)&lt;br /&gt;
else :&lt;br /&gt;
    print(&amp;quot;Current off-chip sensor temperature = %d Celsius&amp;quot; % aReceiveBuf[TEMP_REG])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if aReceiveBuf[STATUS_REG] &amp;amp; 0x04 :&lt;br /&gt;
    print(&amp;quot;Onboard brightness sensor overrange!&amp;quot;)&lt;br /&gt;
elif aReceiveBuf[STATUS_REG] &amp;amp; 0x08 :&lt;br /&gt;
    print(&amp;quot;Onboard brightness sensor failure!&amp;quot;)&lt;br /&gt;
else :&lt;br /&gt;
    print(&amp;quot;Current onboard sensor brightness = %d Lux&amp;quot; % (aReceiveBuf[LIGHT_REG_H] &amp;lt;&amp;lt; 8 | aReceiveBuf[LIGHT_REG_L]))&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Current onboard sensor temperature = %d Celsius&amp;quot; % aReceiveBuf[ON_BOARD_TEMP_REG])&lt;br /&gt;
print(&amp;quot;Current onboard sensor humidity = %d %%&amp;quot; % aReceiveBuf[ON_BOARD_HUMIDITY_REG])&lt;br /&gt;
&lt;br /&gt;
if aReceiveBuf[ON_BOARD_SENSOR_ERROR] != 0 :&lt;br /&gt;
    print(&amp;quot;Onboard temperature and humidity sensor data may not be up to date!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if aReceiveBuf[BMP280_STATUS] == 0 :&lt;br /&gt;
    print(&amp;quot;Current barometer temperature = %d Celsius&amp;quot; % aReceiveBuf[BMP280_TEMP_REG])&lt;br /&gt;
    print(&amp;quot;Current barometer pressure = %d pascal&amp;quot; % (aReceiveBuf[BMP280_PRESSURE_REG_L] | aReceiveBuf[BMP280_PRESSURE_REG_M] &amp;lt;&amp;lt; 8 | aReceiveBuf[BMP280_PRESSURE_REG_H] &amp;lt;&amp;lt; 16))&lt;br /&gt;
else :&lt;br /&gt;
    print(&amp;quot;Onboard barometer works abnormally!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if aReceiveBuf[HUMAN_DETECT] == 1 :&lt;br /&gt;
    print(&amp;quot;Live body detected within 5 seconds!&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;No humans detected!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Program in Language Java(Raspberry Pi)==&lt;br /&gt;
Creat a new file named :SensorHub.java and paste following codes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.util.Arrays;&lt;br /&gt;
&lt;br /&gt;
import com.pi4j.io.i2c.I2CBus;&lt;br /&gt;
import com.pi4j.io.i2c.I2CDevice;&lt;br /&gt;
import com.pi4j.io.i2c.I2CFactory;&lt;br /&gt;
import com.pi4j.io.i2c.I2CFactory.UnsupportedBusNumberException;&lt;br /&gt;
import com.pi4j.platform.PlatformAlreadyAssignedException;&lt;br /&gt;
import com.pi4j.util.Console;&lt;br /&gt;
&lt;br /&gt;
public class SensorHub {&lt;br /&gt;
	&lt;br /&gt;
	//SensorHub Address&lt;br /&gt;
	public static final int DOCKERPI_SENSORHUB_BOARD = 0x17;&lt;br /&gt;
	&lt;br /&gt;
	//SensorHub&#039;s functions&lt;br /&gt;
	public static final byte TEMP_REG = (byte) 0x01;	&lt;br /&gt;
	public static final byte LIGHT_REG_L = (byte) 0x02;&lt;br /&gt;
	public static final byte LIGHT_REG_H = (byte) 0x03;&lt;br /&gt;
	public static final byte STATUS_REG = (byte) 0x04;&lt;br /&gt;
	public static final byte ON_BOARD_TEMP_REG = (byte) 0x05;&lt;br /&gt;
	public static final byte ON_BOARD_HUMIDITY_REG = (byte) 0x06;&lt;br /&gt;
	public static final byte ON_BOARD_SENSOR_ERROR = (byte) 0x07;&lt;br /&gt;
	public static final byte BMP280_TEMP_REG = (byte) 0x08;	&lt;br /&gt;
	public static final byte BMP280_PRESSURE_REG_L = (byte) 0x09;&lt;br /&gt;
	public static final byte BMP280_PRESSURE_REG_M = (byte) 0x0A;&lt;br /&gt;
	public static final byte BMP280_PRESSURE_REG_H = (byte) 0X0B;&lt;br /&gt;
	public static final byte BMP280_STATUS = (byte) 0x0C;&lt;br /&gt;
	public static final byte HUMAN_DETECT = (byte) 0x0D;&lt;br /&gt;
	&lt;br /&gt;
	public static void main(String[] args)&lt;br /&gt;
			throws InterruptedException, PlatformAlreadyAssignedException, IOException, UnsupportedBusNumberException {&lt;br /&gt;
				&lt;br /&gt;
				final Console console = new Console();&lt;br /&gt;
				&lt;br /&gt;
				I2CBus i2c = I2CFactory.getInstance(I2CBus.BUS_1);&lt;br /&gt;
				I2CDevice device = i2c.getDevice(DOCKERPI_SENSORHUB_BOARD);&lt;br /&gt;
				&lt;br /&gt;
				int i = 0;&lt;br /&gt;
				&lt;br /&gt;
				if(device.read(DOCKERPI_SENSORHUB_BOARD) &amp;lt; 0)&lt;br /&gt;
					console.println(&amp;quot;External board Can not be initialized, please enable I2C and try again!&amp;quot;,device.read(DOCKERPI_SENSORHUB_BOARD));&lt;br /&gt;
				else&lt;br /&gt;
					console.println(&amp;quot;External board has been initialized&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
				if((device.read(STATUS_REG) &amp;amp; 0x01) == 0x01)&lt;br /&gt;
					console.println(&amp;quot;off-chip temperature sensor overrange!&amp;quot;);&lt;br /&gt;
				else if((device.read(STATUS_REG) &amp;amp; 0x02) == 0x02)&lt;br /&gt;
					console.println(&amp;quot;No external temperature sensor!&amp;quot;);&lt;br /&gt;
					&lt;br /&gt;
				else {&lt;br /&gt;
					console.println(&amp;quot;the temp of air is :&amp;quot; + device.read(TEMP_REG) + &amp;quot;centigrade&amp;quot;);&lt;br /&gt;
				}				&lt;br /&gt;
				&lt;br /&gt;
				if((device.read(STATUS_REG) &amp;amp; 0x04) == 0x04) {&lt;br /&gt;
					console.println(&amp;quot;Onboard brightness sensor overrange!&amp;quot;);&lt;br /&gt;
				}&lt;br /&gt;
				else if((device.read(STATUS_REG) &amp;amp; 0x08) == 0x08) {&lt;br /&gt;
					console.println(&amp;quot;Onboard brightness sensor failure!&amp;quot;);&lt;br /&gt;
				}&lt;br /&gt;
				else {&lt;br /&gt;
					console.println(&amp;quot;Current onboard sensor brightness is :&amp;quot; + (device.read(LIGHT_REG_L) | device.read(LIGHT_REG_H) &amp;lt;&amp;lt; 8) + &amp;quot;lux&amp;quot;);&lt;br /&gt;
				}&lt;br /&gt;
				&lt;br /&gt;
				if(device.read(ON_BOARD_SENSOR_ERROR) == 1)&lt;br /&gt;
					console.println(&amp;quot;Onboard temperature and humidity sensor data may not be up to date!&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
				console.println(&amp;quot;the temp of sensor on board is :&amp;quot; + device.read(ON_BOARD_TEMP_REG) + &amp;quot;centigrade&amp;quot;);&lt;br /&gt;
				console.println(&amp;quot;the humidity of sensor is :&amp;quot; + device.read(ON_BOARD_HUMIDITY_REG) + &amp;quot;%&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
				if(device.read(BMP280_STATUS) == 0) {&lt;br /&gt;
					console.println(&amp;quot;the temp of air pressure sensor is :&amp;quot; + device.read(BMP280_TEMP_REG) + &amp;quot;centigrade&amp;quot;);	&lt;br /&gt;
					console.println(&amp;quot;the air pressure is :&amp;quot; + (device.read(BMP280_PRESSURE_REG_L) | device.read(BMP280_PRESSURE_REG_M) &amp;lt;&amp;lt; 8 | device.read(BMP280_PRESSURE_REG_H) &amp;lt;&amp;lt; 16) + &amp;quot;pa&amp;quot;);&lt;br /&gt;
				}&lt;br /&gt;
				else&lt;br /&gt;
					console.println(&amp;quot;Onboard barometer works abnormally!&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
				if(device.read(HUMAN_DETECT) == 1) {&lt;br /&gt;
					console.println(&amp;quot;Live body detected within 5 seconds!&amp;quot;);&lt;br /&gt;
				}&lt;br /&gt;
				else {&lt;br /&gt;
					console.println(&amp;quot;No humans detecte!&amp;quot;);&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Compile it and running :&lt;br /&gt;
&amp;lt;pre&amp;gt;javac SensorHub.java -classpath .:classes:/opt/pi4j/lib/&#039;*&#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo java -classpath .:classes:/opt/pi4j/lib/&#039;*&#039; SensorHub&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
SensorHub， Docker pi,  humidity, temperature, airpressure, NTC, pir sensor, DHT11, DHT12, light sensor.&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=EP-0106&amp;diff=7796</id>
		<title>EP-0106</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=EP-0106&amp;diff=7796"/>
		<updated>2020-02-28T08:59:49Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: /* Register Map */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==DockerPi Sensor Hub Development Board==&lt;br /&gt;
[[File:Sensorhub2.jpg |right|300px]]&lt;br /&gt;
&lt;br /&gt;
==Description==&lt;br /&gt;
The DockerPi SensorHub for obtaining environmental parameters in the Internet of Things.&amp;lt;br&amp;gt;&lt;br /&gt;
It integrates various environmental sensors: temperature sensors, humidity sensors, air pressure sensors, lighting and thermal infrared sensors. &amp;lt;br&amp;gt;&lt;br /&gt;
You can use them in smart homes. &amp;lt;br&amp;gt;&lt;br /&gt;
To obtain various parameters in life, these parameters can be processed to control the home reasonably and intelligently. &amp;lt;br&amp;gt;&lt;br /&gt;
For example, the temperature of the temperature sensor can be used to control the heating device or the air conditioner. &amp;lt;br&amp;gt;&lt;br /&gt;
The thermal infrared sensor can detect if someone is in the living room. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* DockerPi Series&lt;br /&gt;
* Programmable&lt;br /&gt;
* Read directly(without programming)&lt;br /&gt;
* Extend the GPIO Pins &lt;br /&gt;
* Ext. Temperature Detection, Thermistor Detection Temperature Range -30℃~127℃&lt;br /&gt;
* OnBoard Temperature DHT11 -20℃~60℃&lt;br /&gt;
* P. Temperature Sensor -40℃~80℃. &lt;br /&gt;
* Humidity detection, sensor detection range 20% Rh ~ 95% Rh&lt;br /&gt;
* Light intensity detection, detection range: 0Lux~1800Lux&lt;br /&gt;
* Pressure detection, detection range: 300 Pa ~ 1100 hPa&lt;br /&gt;
* Biopsy test (biopsy test with corresponding indicator), maximum detection angle of 100 degrees, maximum distance of 12m&lt;br /&gt;
* Can Stack with other Stack board&lt;br /&gt;
* Independent of the mainboard hardware (require I2C support)&lt;br /&gt;
&lt;br /&gt;
==Official Compatibility Test==&lt;br /&gt;
Not only support the following development boards, other development boards can be compatible if they have I2C peripherals. (Note: some software changes may be required)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Platform !!DockerPi Sensor Hub !! Notes&lt;br /&gt;
|-&lt;br /&gt;
|Raspberry Pi All Platform|| √ ||Not Include CM Series &amp;amp; EOL Platform&lt;br /&gt;
|-&lt;br /&gt;
|Banana Pi M3 || √ ||Python 3 &amp;amp; Modify DEVICE_BUS to 2&lt;br /&gt;
|-&lt;br /&gt;
|Orange Pi Zero || √ ||Python 3 &amp;amp; Modify DEVICE_BUS to 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Package Includes==&lt;br /&gt;
* 1 x Sensor Hub development board &lt;br /&gt;
* 4 x M2.5x12 copper stick&lt;br /&gt;
* 8 x M2.5x6 screws and nuts &lt;br /&gt;
* 1 x NTC temperature sensor (waterproof)&lt;br /&gt;
* 1 x Introductions&lt;br /&gt;
[[File:Sensorhub9.jpg|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Sensorhub1.jpg |left|320px]]&lt;br /&gt;
|[[File:Sensorhub2.jpg |none|320px]]&lt;br /&gt;
|[[File:Sensorhub3.jpg |none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Sensorhub4.jpg |left|320px]]&lt;br /&gt;
|[[File:Sensorhub5.jpg |none|320px]]&lt;br /&gt;
|[[File:Sensorhub6.jpg |none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Sensorhub7.jpg |left|320px]]&lt;br /&gt;
|[[File:Sensorhub8.jpg |none|320px]]&lt;br /&gt;
|[[File:Sensorhub9.jpg |none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Mechanical Drawings==&lt;br /&gt;
[[File:Mechanical sensorhub0.png|left|600px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Register Map==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;All registers are Read Only&#039;&#039;&#039;.&lt;br /&gt;
&#039;&#039;&#039;Device Addr:0x17&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Register Address !! Function !! Value&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || TEMP_REG || Ext. Temperature [Unit:degC]&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || LIGHT_REG_L || Light Brightness Low 8 Bit [Unit:Lux]&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || LIGHT_REG_H || Light Brightness High 8 Bit [Unit:Lux]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || STATUS_REG || Status Function&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || ON_BOARD_TEMP_REG || OnBoard Temperature [Unit:degC]&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || ON_BOARD_HUMIDITY_REG || OnBoard Humidity [Uinit:%]&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || ON_BOARD_SENSOR_ERROR || 0(OK) - 1(Error)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || BMP280_TEMP_REG || P. Temperature [Unit:degC]&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || BMP280_PRESSURE_REG_L || P. Pressure Low 8 Bit [Unit:Pa]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || BMP280_PRESSURE_REG_M || P. Pressure Mid 8 Bit [Unit:Pa]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || BMP280_PRESSURE_REG_H || P. Pressure High 8 Bit [Unit:Pa]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || BMP280_STATUS || 0(OK) - 1(Error)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0D || HUMAN_DETECT || 0(No Active Body) - 1(Active Body)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;height: 200px&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;100&amp;quot; |STATUS_REG&lt;br /&gt;
! colspan=&amp;quot;8&amp;quot;| 0x04 &lt;br /&gt;
|-&lt;br /&gt;
|Default Value || 0 || 0 ||  0 || 0 ||  0 ||  0 ||  0 ||  0 &lt;br /&gt;
|-&lt;br /&gt;
| Description || Reserved || Reserved || Reserved || Reserved || L_FAIL || L_OVR || T_FAIL || T_OVR&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* T_OVR(Read Only)&lt;br /&gt;
# Read 1 means Ext. Temperature Overflow.&lt;br /&gt;
# Read 0 means Ext. Temperature works well.&lt;br /&gt;
* T_FAIL(Read Only)&lt;br /&gt;
# Read 1 means Ext. Temperature Not Found.&lt;br /&gt;
# Read 0 means Ext. Temperature works well.&lt;br /&gt;
* L_OVR(Read Only)&lt;br /&gt;
# Read 1 means Light Brightness Overflow.&lt;br /&gt;
# Read 0 means Light Brightness works well.&lt;br /&gt;
* T_FAIL(Read Only)&lt;br /&gt;
# Read 1 means Light Brightness Not Found.&lt;br /&gt;
# Read 0 means Light Brightness works well.&lt;br /&gt;
&lt;br /&gt;
==Configuring I2C(Raspberry Pi)==&lt;br /&gt;
Run sudo raspi-config and follow the prompts to install i2c support for the ARM core and linux kernel&amp;lt;br /&amp;gt;&lt;br /&gt;
Go to &#039;&#039;&#039;Interfacing Options&#039;&#039;&#039;&lt;br /&gt;
[[File:Raspi-config-1.png |none|320px]]&lt;br /&gt;
then &#039;&#039;&#039;I2C&#039;&#039;&#039;&lt;br /&gt;
[[File:Raspi-config-2.png |none|320px]]&lt;br /&gt;
Enable!&lt;br /&gt;
[[File:Raspi-config-3.png |none|320px]]&lt;br /&gt;
Done!&lt;br /&gt;
[[File:Raspi-config-4.png |none|320px]]&lt;br /&gt;
&lt;br /&gt;
==Program in Language C(Raspberry Pi)==&lt;br /&gt;
* Create source code and name it &amp;quot;sensor.c&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
#include &amp;lt;wiringPi.h&amp;gt;&lt;br /&gt;
#include &amp;lt;wiringPiI2C.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define TEMP_REG 0x01&lt;br /&gt;
#define LIGHT_REG_L 0x02&lt;br /&gt;
#define LIGHT_REG_H 0x03&lt;br /&gt;
#define STATUS_REG 0x04&lt;br /&gt;
#define ON_BOARD_TEMP_REG 0x05&lt;br /&gt;
#define ON_BOARD_HUMIDITY_REG 0x06&lt;br /&gt;
#define ON_BOARD_SENSOR_ERROR 0x07&lt;br /&gt;
#define BMP280_TEMP_REG 0x08&lt;br /&gt;
#define BMP280_PRESSURE_REG_L 0x09&lt;br /&gt;
#define BMP280_PRESSURE_REG_M 0x0A&lt;br /&gt;
#define BMP280_PRESSURE_REG_H 0x0B&lt;br /&gt;
#define BMP280_STATUS 0x0C&lt;br /&gt;
#define HUMAN_DETECT 0x0D&lt;br /&gt;
&lt;br /&gt;
uint8_t aReceiveBuf[0x0D + 1];&lt;br /&gt;
&lt;br /&gt;
int main(void)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
    int fd;&lt;br /&gt;
    int i = 0;&lt;br /&gt;
    fd = wiringPiI2CSetup(0x17);&lt;br /&gt;
&lt;br /&gt;
    if (fd &amp;lt; 0)&lt;br /&gt;
        printf(&amp;quot;Extend board Can not be initialized, please enable I2C and try again!\n&amp;quot;, fd);&lt;br /&gt;
&lt;br /&gt;
    for (i = TEMP_REG; i &amp;lt;= HUMAN_DETECT; i++)&lt;br /&gt;
    {&lt;br /&gt;
        aReceiveBuf[i] = wiringPiI2CReadReg8(fd, i);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (aReceiveBuf[STATUS_REG] &amp;amp; 0x01)&lt;br /&gt;
    {&lt;br /&gt;
        printf(&amp;quot;Off-chip temperature sensor overrange!\n&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    else if (aReceiveBuf[STATUS_REG] &amp;amp; 0x02)&lt;br /&gt;
    {&lt;br /&gt;
        printf(&amp;quot;No external temperature sensor!\n&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        printf(&amp;quot;Current external Sensor Temperature = %d Celsius\n&amp;quot;, (int)aReceiveBuf[TEMP_REG]);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (aReceiveBuf[STATUS_REG] &amp;amp; 0x04)&lt;br /&gt;
    {&lt;br /&gt;
        printf(&amp;quot;Onboard brightness sensor overrange!\n&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    else if (aReceiveBuf[STATUS_REG] &amp;amp; 0x08)&lt;br /&gt;
    {&lt;br /&gt;
        printf(&amp;quot;Onboard brightness sensor failure!\n&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        printf(&amp;quot;Current onboard sensor brightness = %d Lux\n&amp;quot;, (int)(aReceiveBuf[LIGHT_REG_H] &amp;lt;&amp;lt; 8) | (aReceiveBuf[LIGHT_REG_L]));&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    printf(&amp;quot;Current onboard sensor temperature = %d Celsius\n&amp;quot;, (int)aReceiveBuf[ON_BOARD_TEMP_REG]);&lt;br /&gt;
    printf(&amp;quot;Current onboard sensor humidity = %d %%\n&amp;quot;, (int)aReceiveBuf[ON_BOARD_HUMIDITY_REG]);&lt;br /&gt;
    if (aReceiveBuf[ON_BOARD_SENSOR_ERROR] != 0)&lt;br /&gt;
    {&lt;br /&gt;
        printf(&amp;quot;Onboard temperature and humidity sensor data may not be up to date!\n&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (aReceiveBuf[BMP280_STATUS] == 0)&lt;br /&gt;
    {&lt;br /&gt;
&lt;br /&gt;
        printf(&amp;quot;Current barometer temperature = %d Celsius\n&amp;quot;, (int)aReceiveBuf[BMP280_TEMP_REG]);&lt;br /&gt;
        printf(&amp;quot;Current barometer pressure = %d Pascal&amp;quot;\n&amp;quot;, (int)aReceiveBuf[BMP280_PRESSURE_REG_L] | (int)aReceiveBuf[BMP280_PRESSURE_REG_M] &amp;lt;&amp;lt; 8 | (int)aReceiveBuf[BMP280_PRESSURE_REG_H] &amp;lt;&amp;lt; 16);&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        printf(&amp;quot;Onboard barometer works abnormally!\n&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (aReceiveBuf[HUMAN_DETECT] == 1)&lt;br /&gt;
    {&lt;br /&gt;
        printf(&amp;quot;Live body detected within 5 seconds!\n&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        printf(&amp;quot;No humans detecte!\n&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Compile!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;gcc sensor.c -lwiringPi  -o sensor&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exec It! &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;./sensor&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==Program in Language Python(Raspberry Pi)==&lt;br /&gt;
The following code is recommended to be executed using Python 3 and install the &#039;&#039;&#039;smbus&#039;&#039;&#039; library:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import smbus&lt;br /&gt;
&lt;br /&gt;
DEVICE_BUS = 1&lt;br /&gt;
DEVICE_ADDR = 0x17&lt;br /&gt;
&lt;br /&gt;
TEMP_REG = 0x01&lt;br /&gt;
LIGHT_REG_L = 0x02&lt;br /&gt;
LIGHT_REG_H = 0x03&lt;br /&gt;
STATUS_REG = 0x04&lt;br /&gt;
ON_BOARD_TEMP_REG = 0x05&lt;br /&gt;
ON_BOARD_HUMIDITY_REG = 0x06&lt;br /&gt;
ON_BOARD_SENSOR_ERROR = 0x07&lt;br /&gt;
BMP280_TEMP_REG = 0x08&lt;br /&gt;
BMP280_PRESSURE_REG_L = 0x09&lt;br /&gt;
BMP280_PRESSURE_REG_M = 0x0A&lt;br /&gt;
BMP280_PRESSURE_REG_H = 0x0B&lt;br /&gt;
BMP280_STATUS = 0x0C&lt;br /&gt;
HUMAN_DETECT = 0x0D&lt;br /&gt;
&lt;br /&gt;
bus = smbus.SMBus(DEVICE_BUS)&lt;br /&gt;
&lt;br /&gt;
aReceiveBuf = []&lt;br /&gt;
&lt;br /&gt;
aReceiveBuf.append(0x00) # 占位符&lt;br /&gt;
&lt;br /&gt;
for i in range(TEMP_REG,HUMAN_DETECT + 1):&lt;br /&gt;
    aReceiveBuf.append(bus.read_byte_data(DEVICE_ADDR, i))&lt;br /&gt;
&lt;br /&gt;
if aReceiveBuf[STATUS_REG] &amp;amp; 0x01 :&lt;br /&gt;
    print(&amp;quot;Off-chip temperature sensor overrange!&amp;quot;)&lt;br /&gt;
elif aReceiveBuf[STATUS_REG] &amp;amp; 0x02 :&lt;br /&gt;
    print(&amp;quot;No external temperature sensor!&amp;quot;)&lt;br /&gt;
else :&lt;br /&gt;
    print(&amp;quot;Current off-chip sensor temperature = %d Celsius&amp;quot; % aReceiveBuf[TEMP_REG])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if aReceiveBuf[STATUS_REG] &amp;amp; 0x04 :&lt;br /&gt;
    print(&amp;quot;Onboard brightness sensor overrange!&amp;quot;)&lt;br /&gt;
elif aReceiveBuf[STATUS_REG] &amp;amp; 0x08 :&lt;br /&gt;
    print(&amp;quot;Onboard brightness sensor failure!&amp;quot;)&lt;br /&gt;
else :&lt;br /&gt;
    print(&amp;quot;Current onboard sensor brightness = %d Lux&amp;quot; % (aReceiveBuf[LIGHT_REG_H] &amp;lt;&amp;lt; 8 | aReceiveBuf[LIGHT_REG_L]))&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Current onboard sensor temperature = %d Celsius&amp;quot; % aReceiveBuf[ON_BOARD_TEMP_REG])&lt;br /&gt;
print(&amp;quot;Current onboard sensor humidity = %d %%&amp;quot; % aReceiveBuf[ON_BOARD_HUMIDITY_REG])&lt;br /&gt;
&lt;br /&gt;
if aReceiveBuf[ON_BOARD_SENSOR_ERROR] != 0 :&lt;br /&gt;
    print(&amp;quot;Onboard temperature and humidity sensor data may not be up to date!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if aReceiveBuf[BMP280_STATUS] == 0 :&lt;br /&gt;
    print(&amp;quot;Current barometer temperature = %d Celsius&amp;quot; % aReceiveBuf[BMP280_TEMP_REG])&lt;br /&gt;
    print(&amp;quot;Current barometer pressure = %d pascal&amp;quot; % (aReceiveBuf[BMP280_PRESSURE_REG_L] | aReceiveBuf[BMP280_PRESSURE_REG_M] &amp;lt;&amp;lt; 8 | aReceiveBuf[BMP280_PRESSURE_REG_H] &amp;lt;&amp;lt; 16))&lt;br /&gt;
else :&lt;br /&gt;
    print(&amp;quot;Onboard barometer works abnormally!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if aReceiveBuf[HUMAN_DETECT] == 1 :&lt;br /&gt;
    print(&amp;quot;Live body detected within 5 seconds!&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;No humans detected!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
==Program in Language Java(Raspberry Pi)==&lt;br /&gt;
Creat a new file named :SensorHub.java and paste following codes:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.util.Arrays;&lt;br /&gt;
&lt;br /&gt;
import com.pi4j.io.i2c.I2CBus;&lt;br /&gt;
import com.pi4j.io.i2c.I2CDevice;&lt;br /&gt;
import com.pi4j.io.i2c.I2CFactory;&lt;br /&gt;
import com.pi4j.io.i2c.I2CFactory.UnsupportedBusNumberException;&lt;br /&gt;
import com.pi4j.platform.PlatformAlreadyAssignedException;&lt;br /&gt;
import com.pi4j.util.Console;&lt;br /&gt;
&lt;br /&gt;
public class SensorHub {&lt;br /&gt;
	&lt;br /&gt;
	//SensorHub Address&lt;br /&gt;
	public static final int DOCKERPI_SENSORHUB_BOARD = 0x17;&lt;br /&gt;
	&lt;br /&gt;
	//SensorHub&#039;s functions&lt;br /&gt;
	public static final byte TEMP_REG = (byte) 0x01;	&lt;br /&gt;
	public static final byte LIGHT_REG_L = (byte) 0x02;&lt;br /&gt;
	public static final byte LIGHT_REG_H = (byte) 0x03;&lt;br /&gt;
	public static final byte STATUS_REG = (byte) 0x04;&lt;br /&gt;
	public static final byte ON_BOARD_TEMP_REG = (byte) 0x05;&lt;br /&gt;
	public static final byte ON_BOARD_HUMIDITY_REG = (byte) 0x06;&lt;br /&gt;
	public static final byte ON_BOARD_SENSOR_ERROR = (byte) 0x07;&lt;br /&gt;
	public static final byte BMP280_TEMP_REG = (byte) 0x08;	&lt;br /&gt;
	public static final byte BMP280_PRESSURE_REG_L = (byte) 0x09;&lt;br /&gt;
	public static final byte BMP280_PRESSURE_REG_M = (byte) 0x0A;&lt;br /&gt;
	public static final byte BMP280_PRESSURE_REG_H = (byte) 0X0B;&lt;br /&gt;
	public static final byte BMP280_STATUS = (byte) 0x0C;&lt;br /&gt;
	public static final byte HUMAN_DETECT = (byte) 0x0D;&lt;br /&gt;
	&lt;br /&gt;
	public static void main(String[] args)&lt;br /&gt;
			throws InterruptedException, PlatformAlreadyAssignedException, IOException, UnsupportedBusNumberException {&lt;br /&gt;
				&lt;br /&gt;
				final Console console = new Console();&lt;br /&gt;
				&lt;br /&gt;
				I2CBus i2c = I2CFactory.getInstance(I2CBus.BUS_1);&lt;br /&gt;
				I2CDevice device = i2c.getDevice(DOCKERPI_SENSORHUB_BOARD);&lt;br /&gt;
				&lt;br /&gt;
				int i = 0;&lt;br /&gt;
				&lt;br /&gt;
				if(device.read(DOCKERPI_SENSORHUB_BOARD) &amp;lt; 0)&lt;br /&gt;
					console.println(&amp;quot;External board Can not be initialized, please enable I2C and try again!&amp;quot;,device.read(DOCKERPI_SENSORHUB_BOARD));&lt;br /&gt;
				else&lt;br /&gt;
					console.println(&amp;quot;External board has been initialized&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
				if((device.read(STATUS_REG) &amp;amp; 0x01) == 0x01)&lt;br /&gt;
					console.println(&amp;quot;off-chip temperature sensor overrange!&amp;quot;);&lt;br /&gt;
				else if((device.read(STATUS_REG) &amp;amp; 0x02) == 0x02)&lt;br /&gt;
					console.println(&amp;quot;No external temperature sensor!&amp;quot;);&lt;br /&gt;
					&lt;br /&gt;
				else {&lt;br /&gt;
					console.println(&amp;quot;the temp of air is :&amp;quot; + device.read(TEMP_REG) + &amp;quot;centigrade&amp;quot;);&lt;br /&gt;
				}				&lt;br /&gt;
				&lt;br /&gt;
				if((device.read(STATUS_REG) &amp;amp; 0x04) == 0x04) {&lt;br /&gt;
					console.println(&amp;quot;Onboard brightness sensor overrange!&amp;quot;);&lt;br /&gt;
				}&lt;br /&gt;
				else if((device.read(STATUS_REG) &amp;amp; 0x08) == 0x08) {&lt;br /&gt;
					console.println(&amp;quot;Onboard brightness sensor failure!&amp;quot;);&lt;br /&gt;
				}&lt;br /&gt;
				else {&lt;br /&gt;
					console.println(&amp;quot;Current onboard sensor brightness is :&amp;quot; + (device.read(LIGHT_REG_L) | device.read(LIGHT_REG_H) &amp;lt;&amp;lt; 8) + &amp;quot;lux&amp;quot;);&lt;br /&gt;
				}&lt;br /&gt;
				&lt;br /&gt;
				if(device.read(ON_BOARD_SENSOR_ERROR) == 1)&lt;br /&gt;
					console.println(&amp;quot;Onboard temperature and humidity sensor data may not be up to date!&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
				console.println(&amp;quot;the temp of sensor on board is :&amp;quot; + device.read(ON_BOARD_TEMP_REG) + &amp;quot;centigrade&amp;quot;);&lt;br /&gt;
				console.println(&amp;quot;the humidity of sensor is :&amp;quot; + device.read(ON_BOARD_HUMIDITY_REG) + &amp;quot;%&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
				if(device.read(BMP280_STATUS) == 0) {&lt;br /&gt;
					console.println(&amp;quot;the temp of air pressure sensor is :&amp;quot; + device.read(BMP280_TEMP_REG) + &amp;quot;centigrade&amp;quot;);	&lt;br /&gt;
					console.println(&amp;quot;the air pressure is :&amp;quot; + (device.read(BMP280_PRESSURE_REG_L) | device.read(BMP280_PRESSURE_REG_M) &amp;lt;&amp;lt; 8 | device.read(BMP280_PRESSURE_REG_H) &amp;lt;&amp;lt; 16) + &amp;quot;pa&amp;quot;);&lt;br /&gt;
				}&lt;br /&gt;
				else&lt;br /&gt;
					console.println(&amp;quot;Onboard barometer works abnormally!&amp;quot;);&lt;br /&gt;
				&lt;br /&gt;
				if(device.read(HUMAN_DETECT) == 1) {&lt;br /&gt;
					console.println(&amp;quot;Live body detected within 5 seconds!&amp;quot;);&lt;br /&gt;
				}&lt;br /&gt;
				else {&lt;br /&gt;
					console.println(&amp;quot;No humans detecte!&amp;quot;);&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*Compile it and running :&lt;br /&gt;
&amp;lt;pre&amp;gt;javac SensorHub.java -classpath .:classes:/opt/pi4j/lib/&#039;*&#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo java -classpath .:classes:/opt/pi4j/lib/&#039;*&#039; SensorHub&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
SensorHub， Docker pi,  humidity, temperature, airpressure, NTC, pir sensor, DHT11, DHT12, light sensor.&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=EP-0065&amp;diff=7652</id>
		<title>EP-0065</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=EP-0065&amp;diff=7652"/>
		<updated>2020-02-02T04:07:47Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: /* Features */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==TFT28 Display + Touch Panel + PCB==&lt;br /&gt;
==Description==&lt;br /&gt;
[[File:Tft28.jpg|left|300px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
KL-TFT028B-PCB is 240x320 dots 2.8&amp;quot; color tft lcd module display with ILI9341 controller and 4-wire resistive touch panel,superior display quality,super wide viewing angle and easily controlled by MCU such as 8051, PIC, AVR, ARDUINO, and ARM .&amp;lt;br&amp;gt;&lt;br /&gt;
It can be used in any embedded systems,industrial device,security and hand-held equipment which requires display in high quality and colorful image.It supports 8080 8-bit,9-bit,16-bit,18-bit parallel,3-wire,4-wire serial spi interface. FPC with zif connector is easily to assemble or remove.&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
*1.Brand New Screen with the production date on the back&lt;br /&gt;
*2.IL19341 driver chip is suitable for mutiple circuit design requirments&lt;br /&gt;
*3.320X240 resolution, 16-bit color (65,000 colors) &lt;br /&gt;
*4.Highly sensitive resistive touch screen&lt;br /&gt;
*5.LED backlight with low power consumption and high brightness&lt;br /&gt;
*6.Multiple modes are switched by resistance&lt;br /&gt;
*7.Screen development manual is available to help with circuit development&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Tft28b1.jpg|left|300px]]&lt;br /&gt;
|[[File:Tft28b2.jpg|none|300px]]&lt;br /&gt;
|[[File:Tft28b3.jpg|none|300px]]&lt;br /&gt;
|}&lt;br /&gt;
----&lt;br /&gt;
{|&lt;br /&gt;
|[[File:Tft28b4.jpg|left|300px]]&lt;br /&gt;
|[[File:Tft28b5.jpg|none|300px]]&lt;br /&gt;
|[[File:Tft28b6.jpg|none|300px]]&lt;br /&gt;
|}&lt;br /&gt;
----&lt;br /&gt;
==Attributions==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Parameters !! Values&lt;br /&gt;
|-&lt;br /&gt;
|Gross Weight (kg)	|| 0.0200kg&lt;br /&gt;
|-&lt;br /&gt;
|Manufacturer	 || Cool-Lite&lt;br /&gt;
|-&lt;br /&gt;
|Series Number|| KL-TFT028B&lt;br /&gt;
|-&lt;br /&gt;
|Part Number(Order Number)|| KL-TFT028B&lt;br /&gt;
|-&lt;br /&gt;
|Connection|| FPC-Connector&lt;br /&gt;
|-&lt;br /&gt;
|Display Format|| 240x320 Dots 262K&lt;br /&gt;
|-&lt;br /&gt;
|Sunlight Readable||	No&lt;br /&gt;
|-&lt;br /&gt;
|Touch Panel Optional||	Yes&lt;br /&gt;
|-&lt;br /&gt;
|Outline Dimension	|| 50.2(W)x69.3(H)x4.0(T)mm&lt;br /&gt;
|-&lt;br /&gt;
|Visual Area|| 44.80x59.20mm&lt;br /&gt;
|-&lt;br /&gt;
|Active Area|| 43.20(W)x57.60(H)mm&lt;br /&gt;
|-&lt;br /&gt;
|Character Size|| User Define&lt;br /&gt;
|-&lt;br /&gt;
|Diagonal Size	|| 2.8“&lt;br /&gt;
|-&lt;br /&gt;
|Dot (Pixel) Size|| 0.18x0.18mm&lt;br /&gt;
|-&lt;br /&gt;
|Dot Pitch|| No&lt;br /&gt;
|-&lt;br /&gt;
|IC Package|| COG&lt;br /&gt;
|-&lt;br /&gt;
|IC or Equivalent|| ILI9341V&lt;br /&gt;
|-&lt;br /&gt;
|Interface|| 8080 8-bit Parallel , 8080 9-bit Parallel , 8080 16-bit Parallel , 8080 18-bit Parallel , 3-Wire SPI , 4-Wire SPI , 16-Bit RGB ,18-Bit RGB&lt;br /&gt;
|-&lt;br /&gt;
|Display Type|| TFT-LCD Color&lt;br /&gt;
|-&lt;br /&gt;
|Response Time(Typ) ||	Less than 5ms with Parallel / Less than 200ms with SPI&lt;br /&gt;
|-&lt;br /&gt;
|Contrast Ratio(Typ)|| 500:1&lt;br /&gt;
|-&lt;br /&gt;
|Colors|| 65K/262K&lt;br /&gt;
|-&lt;br /&gt;
|Viewing Direction|| 12:00&lt;br /&gt;
|-&lt;br /&gt;
|Viewing Angle Range|| Left:70.0 , Right:70.0 , Up:70.0 , Down:60.0 degree&lt;br /&gt;
|-&lt;br /&gt;
|Appearance|| RGB on Black&lt;br /&gt;
|-&lt;br /&gt;
|Brightness(Typ)|| 240cd/m2&lt;br /&gt;
|-&lt;br /&gt;
|Backlight Color|| White Color&lt;br /&gt;
|-&lt;br /&gt;
|Backlight Current (Typ)|| No&lt;br /&gt;
|-&lt;br /&gt;
|Power Supply(Typ/Absolute)|| 2.8V/3.3V&lt;br /&gt;
|-&lt;br /&gt;
|Supply Current for LCM(Max)|| 24 mA&lt;br /&gt;
|-&lt;br /&gt;
|Operating Temperature|| -20℃~70℃&lt;br /&gt;
|-&lt;br /&gt;
|Storage Temperature|| -30℃~80℃&lt;br /&gt;
|}&lt;br /&gt;
----&lt;br /&gt;
==Documentation==&lt;br /&gt;
* ILI9341 Datasheet Download：[[File:ILI9341Datasheet.pdf]]&lt;br /&gt;
* Demo Code Refference: [ https://github.com/adafruit/Adafruit_ILI9341 ]&lt;br /&gt;
----&lt;br /&gt;
==Package Includes==&lt;br /&gt;
* 1 x TFT28 Display with Touch screen&lt;br /&gt;
* 1 x PCB Driver Board &lt;br /&gt;
* 3 x 17 Pin header&lt;br /&gt;
==Keywords==&lt;br /&gt;
* TFT2.8 inch touch screen, touch screen, TFT 2.8 inch, Raspberry Pi 4B, ILI9341,&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=EP-0116&amp;diff=7612</id>
		<title>EP-0116</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=EP-0116&amp;diff=7612"/>
		<updated>2020-01-09T09:54:21Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==DockerPi-H Board ==&lt;br /&gt;
[[File:DOCKERPI 3 2.jpg|right|300px]]&lt;br /&gt;
[[File:OPENSOURCE.jpg|thumb|right|300px]]&lt;br /&gt;
&lt;br /&gt;
==Open Source Description==&lt;br /&gt;
Anyone may use the content of the white paper for non-commercial or educational purposes without permission without the permission of the source and copyright notice, but it may not be used for profit or commercial purposes without permission.&lt;br /&gt;
&lt;br /&gt;
Custom product LOGO is &#039;&#039;&#039;NOT&#039;&#039;&#039; allowed without copyright notice,Open source does not mean arbitrary use of trademarks!&lt;br /&gt;
&lt;br /&gt;
Welcome to submit links to your project(or tips),after our review, we will link your project in GitHub Page.&lt;br /&gt;
&lt;br /&gt;
Android and IOS app source code provided by NordicSemiconductor.&lt;br /&gt;
&lt;br /&gt;
==Product Description==&lt;br /&gt;
DockerPi-H is one of the DockerPi series expansion boards, which can convert I2C communication of other products in the DockerPi series to UART (TTL) / HID / BLE.&amp;lt;br&amp;gt; &lt;br /&gt;
BLE is usually used for the Internet of Things, TTL is usually used for industrial control, HID can communicate without driver.&amp;lt;br&amp;gt;&lt;br /&gt;
This product design for low power consumption, and can be maintained by only a few mA.&amp;lt;br&amp;gt; &lt;br /&gt;
DockerPi-H allows you to operate DockerPi series expansion boards without Raspberry Pi (or similar SBC).&amp;lt;br&amp;gt;&lt;br /&gt;
It can connect your personal computer to DockerPi expansion boards and also allows you to wirelessly control DockerPi expansion boards.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* Open source project (not for commercial distribution)&lt;br /&gt;
* DockerPi series products&lt;br /&gt;
* Programmable, can work with mobile phones, personal computers, industrial computers, ITX.&lt;br /&gt;
* Support BLE, HID, UART-TTL to transmit data&lt;br /&gt;
* Support BLE, UART-TTL data in ASCII mode&lt;br /&gt;
* Support UART-TTL, HID data in HEX mode&lt;br /&gt;
* HID does not require driver support&lt;br /&gt;
* It is recommended to install at the bottom of all modules&lt;br /&gt;
* Low power design&lt;br /&gt;
* BLE module provides FCC / CE certification&lt;br /&gt;
&lt;br /&gt;
==Supported platforms==&lt;br /&gt;
* 1. Tested Mobile devices : IPhone 6s Plus, HUAWEI SCM-AL09&lt;br /&gt;
* 2. Tested Platform : sscom.exe(Windows Environment), minicom(Linux Environment), pyserial module(via USB-to-TTL cable)&lt;br /&gt;
* 3. Supoort Interface : Bluetooth LE Only / USB HID / TTL UART&lt;br /&gt;
&lt;br /&gt;
==Sources Repository==&lt;br /&gt;
* [https://github.com/geeekpi/station DockerPi-H Open Sources Page]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Windows.exe CP2112 Software package for Windows]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Linux.bin CP2112 Softare package for Linux]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Mac.zip CP2112 Software package for MAC]&lt;br /&gt;
* [https://github.com/NordicSemiconductor NordicSemiconductor Open Sources Page]&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product Function:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 9.jpg|left|320px]]&lt;br /&gt;
|}&lt;br /&gt;
* Product View:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 3.jpg|left|320px]]&lt;br /&gt;
|[[File:DOCKERPI 2.jpg|none|320px]]&lt;br /&gt;
|[[File:DOCKERPI 3 2.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
* Application View:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 4.jpg|left|320px]]&lt;br /&gt;
|[[File:DOCKERPI 5.jpg|none|320px]]&lt;br /&gt;
|[[File:DOCKERPI 7.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==How to Use==&lt;br /&gt;
===HID Interface===&lt;br /&gt;
The HID interface is implemented using CP2112, please refer to for more information.  [ &#039;&#039;&#039;[https://www.silabs.com/interface/usb-bridges/classic/device.cp2112 CP2112 Classic USB to HID Bridge]&#039;&#039;&#039; ]&lt;br /&gt;
====API Reference====&lt;br /&gt;
[[File:An496-hid-usb-to-smbus-api-specification.pdf]]&lt;br /&gt;
====Quick Reference====&lt;br /&gt;
&#039;&#039;HidSmbus_WriteRequest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function writes the specified number of bytes from the supplied buffer to the specified slave device and returns immediately after sending the request to the CP2112.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_AddressReadRequest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function intiates a read transfer to the specified slave device address and specifies the address to read from on the device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_ForceReadResponse&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function causes the device to send a read response to the host after a read transfer has been issued.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_GetReadResponse&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function returns the read response to a read request. Read and write timeouts as well as transfer retries can be set using HidSmbus_SetSmbusConfig() as described in HidSmbus_SetSmbusConfig.&lt;br /&gt;
&lt;br /&gt;
====Test Conditions====&lt;br /&gt;
DockerPi SensorHub and DockerPi Relay need to be installed on the top of DockerPi-H.&lt;br /&gt;
====Example Code(C#)====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.ComponentModel;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Drawing;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using SLAB_HID_TO_SMBUS;&lt;br /&gt;
&lt;br /&gt;
namespace WindowsFormsApp1&lt;br /&gt;
{&lt;br /&gt;
    public partial class Form1 : Form&lt;br /&gt;
    {&lt;br /&gt;
        const ushort vid = 4292;  //10C4&lt;br /&gt;
        const ushort pid = 60048; //EA90&lt;br /&gt;
        IntPtr connectedDevice;&lt;br /&gt;
&lt;br /&gt;
        const byte RelaySlaveAddress = 0x20;&lt;br /&gt;
        const byte SensorSlaveAddress = 0x2E;&lt;br /&gt;
&lt;br /&gt;
        ushort RelayStauts = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        public Form1()&lt;br /&gt;
        {&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
            uint numDevices = 0;&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_GetNumDevices(ref numDevices, vid, pid);&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_Open(ref connectedDevice, 0, vid, pid);&lt;br /&gt;
&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0x00 }, 2);&lt;br /&gt;
&lt;br /&gt;
            timer_get_temp.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void RelayButton_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            timer_get_temp.Enabled = false;&lt;br /&gt;
&lt;br /&gt;
            if (RelayStauts == 0)&lt;br /&gt;
            {&lt;br /&gt;
                RelayStauts = 1;&lt;br /&gt;
                SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0xFF }, 2);&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                RelayStauts = 0;&lt;br /&gt;
                SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0x00 }, 2);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            timer_get_temp.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void Timer_get_temp_Tick(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
            byte bytesRead = 0;&lt;br /&gt;
            byte status = 0;&lt;br /&gt;
            byte[] readbuff = new byte[61];&lt;br /&gt;
&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_AddressReadRequest(connectedDevice, SensorSlaveAddress, 1, 1, new byte[] { 0x01 });&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_ForceReadResponse(connectedDevice, 1);&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_GetReadResponse(connectedDevice, ref status, readbuff, 61, ref bytesRead);&lt;br /&gt;
&lt;br /&gt;
             if(bytesRead == 1)&lt;br /&gt;
            {&lt;br /&gt;
                progressBar.Value = readbuff[0];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===UART Interface===&lt;br /&gt;
Serial interface supports ASCII mode or HEX mode transmission,3V3 TTL as voltage reference.&lt;br /&gt;
&lt;br /&gt;
You can solder headers or use a jumper wire to connect to your device.&lt;br /&gt;
&lt;br /&gt;
Mode:&#039;&#039;&#039;115200 8N1&#039;&#039;&#039;&lt;br /&gt;
====Interface Protocol====&lt;br /&gt;
Read Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!END&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 00 =&amp;gt; i2c-get || I2C_ADDR_RANGE || DATA-ADDRESS || 0A/0D&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Write Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!DATA!!END&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || * || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 01 =&amp;gt; i2c-set	 || I2C_ADDR_RANGE || DATA-ADDRESS || DATA || 0A/0D&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====How to Communicate====&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Turn on it by sending 0xFF&lt;br /&gt;
The execution code is: AA011501FF The meaning of the code is: AA - starting code, DIR parameter 01 means write, 15 means I2C address 0x15, 01 means first LED register, FF eq 0xFF means Turn it on.&lt;br /&gt;
&lt;br /&gt;
HEX Mode:&lt;br /&gt;
&lt;br /&gt;
After sending each instruction, you need to send the &#039;&#039;&#039;0A&#039;&#039;&#039; or &#039;&#039;&#039;0D&#039;&#039;&#039; end this transaction.&lt;br /&gt;
&lt;br /&gt;
[[File:SendByHeX.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ASCII Mode:&lt;br /&gt;
&lt;br /&gt;
In ASCII mode, you must check &#039;&#039;&#039;AddCrLf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:SendByASCII.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Read back&lt;br /&gt;
The execution code is: AA001501 The meaning of the code is: AA - starting code, DIR parameter 00 means read, 15 means I2C address 0x15, 01 means first LED register.&lt;br /&gt;
&lt;br /&gt;
If you use HEX mode, you can return the result in HEX mode,If you use ASCII mode, you can return the result in ASCII mode,write operation returns nothing.&lt;br /&gt;
&lt;br /&gt;
[[File:SendReturn.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Bluetooth Interface===&lt;br /&gt;
Bluetooth interface only provides &#039;&#039;&#039;LE only&#039;&#039;&#039; protocol support&lt;br /&gt;
====LED Status====&lt;br /&gt;
LED1:Link(ON) / Broadcast(Blink) / Fault(OFF)&lt;br /&gt;
&lt;br /&gt;
LED2:Busy(ON)/ Transmission(Blink) / Idle(OFF)&lt;br /&gt;
&lt;br /&gt;
====Interface Protocol====&lt;br /&gt;
Read Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 00 =&amp;gt; i2c-get || I2C_ADDR_RANGE || DATA-ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Write Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!DATA&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || *&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 01 =&amp;gt; i2c-set	 || I2C_ADDR_RANGE || DATA-ADDRESS || DATA&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Download SDK====&lt;br /&gt;
* For IOS user&lt;br /&gt;
** nRF Toolbox Download Link: [ https://apps.apple.com/cn/app/nrf-toolbox/id820906058 ]&lt;br /&gt;
* For Android user&lt;br /&gt;
** nRF Toolbox Download Link: [ https://play.google.com/store/apps/details?id=no.nordicsemi.android.nrftoolbox ]&lt;br /&gt;
* For Sources code user&lt;br /&gt;
** Android: [ https://github.com/NordicSemiconductor/Android-nRF-Toolbox ]&lt;br /&gt;
** IOS: [ https://github.com/NordicSemiconductor/IOS-nRF-Toolbox ]&lt;br /&gt;
====Development Method====&lt;br /&gt;
* 1. Download SDK from the links mentioned before and install it to IOS device or Android device.&lt;br /&gt;
* 2. Open the nRF Toolbox app&lt;br /&gt;
[[File:TIM图片20200108112710.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 3. Select &amp;quot;UART&amp;quot; icon and press &amp;quot;Edit&amp;quot; &lt;br /&gt;
[[File:TIM图片20200108112702.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112706.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 4. Select one icon and input the execution code and press OK, and then press the icon will send the code to DockerPi Nightlight board.&lt;br /&gt;
** For example: Turn on NightLight board&#039;s first LED.&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Turn on it by sending 0xFF&amp;lt;br&amp;gt;&lt;br /&gt;
The execution code is:  AA011501FF &lt;br /&gt;
The meaning of the code is: AA - starting code, DIR parameter 01 means write, 15 means I2C address 0x15, 01 means first LED register, FF eq 0xFF means Turn it on.&lt;br /&gt;
[[File:TIM图片20200108112658.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112654.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 5. Press &amp;quot;Connect&amp;quot; to scan the DockerPi-H, and select it.&lt;br /&gt;
[[File:TIM图片20200108112645.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112637.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 6.If the connection is successful, the blue LED will stop blinking and stay on.and you can see log by pressing &amp;quot;show log&amp;quot; link.&lt;br /&gt;
[[File:TIM图片20200108112625.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Product Includes==&lt;br /&gt;
* 1 x DockerPi-H BlueTooth Board &lt;br /&gt;
* 1 x Acrylic Plate&lt;br /&gt;
* 1 x 3-Pin Pin Header&lt;br /&gt;
* 4 x M2.5 Nut&lt;br /&gt;
* 4 x M2.5 Screw&lt;br /&gt;
* 4 x M2.5x6 Copper Stick&lt;br /&gt;
[[File:DOCKERPI 8.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
* Q: Should I connect  DockerPi-H to my Raspberry Pi to make it work? &lt;br /&gt;
  A: No, the DockerPi-H is seperated from Raspberry Pi, all you need to do is connect other DockerPi product such as Nightlight board or 4 channel relay board to it and control it via bluetooth.&lt;br /&gt;
* Q: Can I just using DockerPi-H to build my own project without other DockerPi product? &lt;br /&gt;
  A: No, DockerPi-H is built for DockerPi series product so that you should have another DockerPi series product at least.&lt;br /&gt;
* Q: A write I2C operation has been performed but nothing return? &lt;br /&gt;
  A: Only read operations can return.&lt;br /&gt;
* Q: Whether the UART interface can be directly connected to the RS232 connection terminal?&lt;br /&gt;
  A: The voltages are not compatible and you need to level shift.&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
* GeeekPi, dockerPi, dockerPi-H, bluetooth, BLE&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=EP-0116&amp;diff=7611</id>
		<title>EP-0116</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=EP-0116&amp;diff=7611"/>
		<updated>2020-01-09T09:53:52Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==DockerPi-H Board ==&lt;br /&gt;
[[File:OPENSOURCE.jpg|thumb|left]]&lt;br /&gt;
[[File:DOCKERPI 3 2.jpg|right|300px]]&lt;br /&gt;
&lt;br /&gt;
==Open Source Description==&lt;br /&gt;
Anyone may use the content of the white paper for non-commercial or educational purposes without permission without the permission of the source and copyright notice, but it may not be used for profit or commercial purposes without permission.&lt;br /&gt;
&lt;br /&gt;
Custom product LOGO is &#039;&#039;&#039;NOT&#039;&#039;&#039; allowed without copyright notice,Open source does not mean arbitrary use of trademarks!&lt;br /&gt;
&lt;br /&gt;
Welcome to submit links to your project(or tips),after our review, we will link your project in GitHub Page.&lt;br /&gt;
&lt;br /&gt;
Android and IOS app source code provided by NordicSemiconductor.&lt;br /&gt;
&lt;br /&gt;
==Product Description==&lt;br /&gt;
DockerPi-H is one of the DockerPi series expansion boards, which can convert I2C communication of other products in the DockerPi series to UART (TTL) / HID / BLE.&amp;lt;br&amp;gt; &lt;br /&gt;
BLE is usually used for the Internet of Things, TTL is usually used for industrial control, HID can communicate without driver.&amp;lt;br&amp;gt;&lt;br /&gt;
This product design for low power consumption, and can be maintained by only a few mA.&amp;lt;br&amp;gt; &lt;br /&gt;
DockerPi-H allows you to operate DockerPi series expansion boards without Raspberry Pi (or similar SBC).&amp;lt;br&amp;gt;&lt;br /&gt;
It can connect your personal computer to DockerPi expansion boards and also allows you to wirelessly control DockerPi expansion boards.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* Open source project (not for commercial distribution)&lt;br /&gt;
* DockerPi series products&lt;br /&gt;
* Programmable, can work with mobile phones, personal computers, industrial computers, ITX.&lt;br /&gt;
* Support BLE, HID, UART-TTL to transmit data&lt;br /&gt;
* Support BLE, UART-TTL data in ASCII mode&lt;br /&gt;
* Support UART-TTL, HID data in HEX mode&lt;br /&gt;
* HID does not require driver support&lt;br /&gt;
* It is recommended to install at the bottom of all modules&lt;br /&gt;
* Low power design&lt;br /&gt;
* BLE module provides FCC / CE certification&lt;br /&gt;
&lt;br /&gt;
==Supported platforms==&lt;br /&gt;
* 1. Tested Mobile devices : IPhone 6s Plus, HUAWEI SCM-AL09&lt;br /&gt;
* 2. Tested Platform : sscom.exe(Windows Environment), minicom(Linux Environment), pyserial module(via USB-to-TTL cable)&lt;br /&gt;
* 3. Supoort Interface : Bluetooth LE Only / USB HID / TTL UART&lt;br /&gt;
&lt;br /&gt;
==Sources Repository==&lt;br /&gt;
* [https://github.com/geeekpi/station DockerPi-H Open Sources Page]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Windows.exe CP2112 Software package for Windows]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Linux.bin CP2112 Softare package for Linux]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Mac.zip CP2112 Software package for MAC]&lt;br /&gt;
* [https://github.com/NordicSemiconductor NordicSemiconductor Open Sources Page]&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product Function:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 9.jpg|left|320px]]&lt;br /&gt;
|}&lt;br /&gt;
* Product View:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 3.jpg|left|320px]]&lt;br /&gt;
|[[File:DOCKERPI 2.jpg|none|320px]]&lt;br /&gt;
|[[File:DOCKERPI 3 2.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
* Application View:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 4.jpg|left|320px]]&lt;br /&gt;
|[[File:DOCKERPI 5.jpg|none|320px]]&lt;br /&gt;
|[[File:DOCKERPI 7.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==How to Use==&lt;br /&gt;
===HID Interface===&lt;br /&gt;
The HID interface is implemented using CP2112, please refer to for more information.  [ &#039;&#039;&#039;[https://www.silabs.com/interface/usb-bridges/classic/device.cp2112 CP2112 Classic USB to HID Bridge]&#039;&#039;&#039; ]&lt;br /&gt;
====API Reference====&lt;br /&gt;
[[File:An496-hid-usb-to-smbus-api-specification.pdf]]&lt;br /&gt;
====Quick Reference====&lt;br /&gt;
&#039;&#039;HidSmbus_WriteRequest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function writes the specified number of bytes from the supplied buffer to the specified slave device and returns immediately after sending the request to the CP2112.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_AddressReadRequest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function intiates a read transfer to the specified slave device address and specifies the address to read from on the device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_ForceReadResponse&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function causes the device to send a read response to the host after a read transfer has been issued.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_GetReadResponse&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function returns the read response to a read request. Read and write timeouts as well as transfer retries can be set using HidSmbus_SetSmbusConfig() as described in HidSmbus_SetSmbusConfig.&lt;br /&gt;
&lt;br /&gt;
====Test Conditions====&lt;br /&gt;
DockerPi SensorHub and DockerPi Relay need to be installed on the top of DockerPi-H.&lt;br /&gt;
====Example Code(C#)====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.ComponentModel;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Drawing;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using SLAB_HID_TO_SMBUS;&lt;br /&gt;
&lt;br /&gt;
namespace WindowsFormsApp1&lt;br /&gt;
{&lt;br /&gt;
    public partial class Form1 : Form&lt;br /&gt;
    {&lt;br /&gt;
        const ushort vid = 4292;  //10C4&lt;br /&gt;
        const ushort pid = 60048; //EA90&lt;br /&gt;
        IntPtr connectedDevice;&lt;br /&gt;
&lt;br /&gt;
        const byte RelaySlaveAddress = 0x20;&lt;br /&gt;
        const byte SensorSlaveAddress = 0x2E;&lt;br /&gt;
&lt;br /&gt;
        ushort RelayStauts = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        public Form1()&lt;br /&gt;
        {&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
            uint numDevices = 0;&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_GetNumDevices(ref numDevices, vid, pid);&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_Open(ref connectedDevice, 0, vid, pid);&lt;br /&gt;
&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0x00 }, 2);&lt;br /&gt;
&lt;br /&gt;
            timer_get_temp.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void RelayButton_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            timer_get_temp.Enabled = false;&lt;br /&gt;
&lt;br /&gt;
            if (RelayStauts == 0)&lt;br /&gt;
            {&lt;br /&gt;
                RelayStauts = 1;&lt;br /&gt;
                SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0xFF }, 2);&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                RelayStauts = 0;&lt;br /&gt;
                SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0x00 }, 2);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            timer_get_temp.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void Timer_get_temp_Tick(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
            byte bytesRead = 0;&lt;br /&gt;
            byte status = 0;&lt;br /&gt;
            byte[] readbuff = new byte[61];&lt;br /&gt;
&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_AddressReadRequest(connectedDevice, SensorSlaveAddress, 1, 1, new byte[] { 0x01 });&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_ForceReadResponse(connectedDevice, 1);&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_GetReadResponse(connectedDevice, ref status, readbuff, 61, ref bytesRead);&lt;br /&gt;
&lt;br /&gt;
             if(bytesRead == 1)&lt;br /&gt;
            {&lt;br /&gt;
                progressBar.Value = readbuff[0];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===UART Interface===&lt;br /&gt;
Serial interface supports ASCII mode or HEX mode transmission,3V3 TTL as voltage reference.&lt;br /&gt;
&lt;br /&gt;
You can solder headers or use a jumper wire to connect to your device.&lt;br /&gt;
&lt;br /&gt;
Mode:&#039;&#039;&#039;115200 8N1&#039;&#039;&#039;&lt;br /&gt;
====Interface Protocol====&lt;br /&gt;
Read Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!END&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 00 =&amp;gt; i2c-get || I2C_ADDR_RANGE || DATA-ADDRESS || 0A/0D&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Write Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!DATA!!END&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || * || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 01 =&amp;gt; i2c-set	 || I2C_ADDR_RANGE || DATA-ADDRESS || DATA || 0A/0D&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====How to Communicate====&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Turn on it by sending 0xFF&lt;br /&gt;
The execution code is: AA011501FF The meaning of the code is: AA - starting code, DIR parameter 01 means write, 15 means I2C address 0x15, 01 means first LED register, FF eq 0xFF means Turn it on.&lt;br /&gt;
&lt;br /&gt;
HEX Mode:&lt;br /&gt;
&lt;br /&gt;
After sending each instruction, you need to send the &#039;&#039;&#039;0A&#039;&#039;&#039; or &#039;&#039;&#039;0D&#039;&#039;&#039; end this transaction.&lt;br /&gt;
&lt;br /&gt;
[[File:SendByHeX.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ASCII Mode:&lt;br /&gt;
&lt;br /&gt;
In ASCII mode, you must check &#039;&#039;&#039;AddCrLf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:SendByASCII.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Read back&lt;br /&gt;
The execution code is: AA001501 The meaning of the code is: AA - starting code, DIR parameter 00 means read, 15 means I2C address 0x15, 01 means first LED register.&lt;br /&gt;
&lt;br /&gt;
If you use HEX mode, you can return the result in HEX mode,If you use ASCII mode, you can return the result in ASCII mode,write operation returns nothing.&lt;br /&gt;
&lt;br /&gt;
[[File:SendReturn.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Bluetooth Interface===&lt;br /&gt;
Bluetooth interface only provides &#039;&#039;&#039;LE only&#039;&#039;&#039; protocol support&lt;br /&gt;
====LED Status====&lt;br /&gt;
LED1:Link(ON) / Broadcast(Blink) / Fault(OFF)&lt;br /&gt;
&lt;br /&gt;
LED2:Busy(ON)/ Transmission(Blink) / Idle(OFF)&lt;br /&gt;
&lt;br /&gt;
====Interface Protocol====&lt;br /&gt;
Read Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 00 =&amp;gt; i2c-get || I2C_ADDR_RANGE || DATA-ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Write Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!DATA&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || *&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 01 =&amp;gt; i2c-set	 || I2C_ADDR_RANGE || DATA-ADDRESS || DATA&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Download SDK====&lt;br /&gt;
* For IOS user&lt;br /&gt;
** nRF Toolbox Download Link: [ https://apps.apple.com/cn/app/nrf-toolbox/id820906058 ]&lt;br /&gt;
* For Android user&lt;br /&gt;
** nRF Toolbox Download Link: [ https://play.google.com/store/apps/details?id=no.nordicsemi.android.nrftoolbox ]&lt;br /&gt;
* For Sources code user&lt;br /&gt;
** Android: [ https://github.com/NordicSemiconductor/Android-nRF-Toolbox ]&lt;br /&gt;
** IOS: [ https://github.com/NordicSemiconductor/IOS-nRF-Toolbox ]&lt;br /&gt;
====Development Method====&lt;br /&gt;
* 1. Download SDK from the links mentioned before and install it to IOS device or Android device.&lt;br /&gt;
* 2. Open the nRF Toolbox app&lt;br /&gt;
[[File:TIM图片20200108112710.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 3. Select &amp;quot;UART&amp;quot; icon and press &amp;quot;Edit&amp;quot; &lt;br /&gt;
[[File:TIM图片20200108112702.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112706.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 4. Select one icon and input the execution code and press OK, and then press the icon will send the code to DockerPi Nightlight board.&lt;br /&gt;
** For example: Turn on NightLight board&#039;s first LED.&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Turn on it by sending 0xFF&amp;lt;br&amp;gt;&lt;br /&gt;
The execution code is:  AA011501FF &lt;br /&gt;
The meaning of the code is: AA - starting code, DIR parameter 01 means write, 15 means I2C address 0x15, 01 means first LED register, FF eq 0xFF means Turn it on.&lt;br /&gt;
[[File:TIM图片20200108112658.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112654.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 5. Press &amp;quot;Connect&amp;quot; to scan the DockerPi-H, and select it.&lt;br /&gt;
[[File:TIM图片20200108112645.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112637.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 6.If the connection is successful, the blue LED will stop blinking and stay on.and you can see log by pressing &amp;quot;show log&amp;quot; link.&lt;br /&gt;
[[File:TIM图片20200108112625.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Product Includes==&lt;br /&gt;
* 1 x DockerPi-H BlueTooth Board &lt;br /&gt;
* 1 x Acrylic Plate&lt;br /&gt;
* 1 x 3-Pin Pin Header&lt;br /&gt;
* 4 x M2.5 Nut&lt;br /&gt;
* 4 x M2.5 Screw&lt;br /&gt;
* 4 x M2.5x6 Copper Stick&lt;br /&gt;
[[File:DOCKERPI 8.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
* Q: Should I connect  DockerPi-H to my Raspberry Pi to make it work? &lt;br /&gt;
  A: No, the DockerPi-H is seperated from Raspberry Pi, all you need to do is connect other DockerPi product such as Nightlight board or 4 channel relay board to it and control it via bluetooth.&lt;br /&gt;
* Q: Can I just using DockerPi-H to build my own project without other DockerPi product? &lt;br /&gt;
  A: No, DockerPi-H is built for DockerPi series product so that you should have another DockerPi series product at least.&lt;br /&gt;
* Q: A write I2C operation has been performed but nothing return? &lt;br /&gt;
  A: Only read operations can return.&lt;br /&gt;
* Q: Whether the UART interface can be directly connected to the RS232 connection terminal?&lt;br /&gt;
  A: The voltages are not compatible and you need to level shift.&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
* GeeekPi, dockerPi, dockerPi-H, bluetooth, BLE&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=EP-0116&amp;diff=7610</id>
		<title>EP-0116</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=EP-0116&amp;diff=7610"/>
		<updated>2020-01-09T09:53:34Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: /* Open Source Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==DockerPi-H Board ==&lt;br /&gt;
[[File:DOCKERPI 3 2.jpg|right|300px]]&lt;br /&gt;
&lt;br /&gt;
==Open Source Description==&lt;br /&gt;
Anyone may use the content of the white paper for non-commercial or educational purposes without permission without the permission of the source and copyright notice, but it may not be used for profit or commercial purposes without permission.&lt;br /&gt;
&lt;br /&gt;
Custom product LOGO is &#039;&#039;&#039;NOT&#039;&#039;&#039; allowed without copyright notice,Open source does not mean arbitrary use of trademarks!&lt;br /&gt;
&lt;br /&gt;
Welcome to submit links to your project(or tips),after our review, we will link your project in GitHub Page.&lt;br /&gt;
&lt;br /&gt;
Android and IOS app source code provided by NordicSemiconductor.&lt;br /&gt;
&lt;br /&gt;
[[File:OPENSOURCE.jpg|left]]&lt;br /&gt;
&lt;br /&gt;
==Product Description==&lt;br /&gt;
DockerPi-H is one of the DockerPi series expansion boards, which can convert I2C communication of other products in the DockerPi series to UART (TTL) / HID / BLE.&amp;lt;br&amp;gt; &lt;br /&gt;
BLE is usually used for the Internet of Things, TTL is usually used for industrial control, HID can communicate without driver.&amp;lt;br&amp;gt;&lt;br /&gt;
This product design for low power consumption, and can be maintained by only a few mA.&amp;lt;br&amp;gt; &lt;br /&gt;
DockerPi-H allows you to operate DockerPi series expansion boards without Raspberry Pi (or similar SBC).&amp;lt;br&amp;gt;&lt;br /&gt;
It can connect your personal computer to DockerPi expansion boards and also allows you to wirelessly control DockerPi expansion boards.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* Open source project (not for commercial distribution)&lt;br /&gt;
* DockerPi series products&lt;br /&gt;
* Programmable, can work with mobile phones, personal computers, industrial computers, ITX.&lt;br /&gt;
* Support BLE, HID, UART-TTL to transmit data&lt;br /&gt;
* Support BLE, UART-TTL data in ASCII mode&lt;br /&gt;
* Support UART-TTL, HID data in HEX mode&lt;br /&gt;
* HID does not require driver support&lt;br /&gt;
* It is recommended to install at the bottom of all modules&lt;br /&gt;
* Low power design&lt;br /&gt;
* BLE module provides FCC / CE certification&lt;br /&gt;
&lt;br /&gt;
==Supported platforms==&lt;br /&gt;
* 1. Tested Mobile devices : IPhone 6s Plus, HUAWEI SCM-AL09&lt;br /&gt;
* 2. Tested Platform : sscom.exe(Windows Environment), minicom(Linux Environment), pyserial module(via USB-to-TTL cable)&lt;br /&gt;
* 3. Supoort Interface : Bluetooth LE Only / USB HID / TTL UART&lt;br /&gt;
&lt;br /&gt;
==Sources Repository==&lt;br /&gt;
* [https://github.com/geeekpi/station DockerPi-H Open Sources Page]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Windows.exe CP2112 Software package for Windows]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Linux.bin CP2112 Softare package for Linux]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Mac.zip CP2112 Software package for MAC]&lt;br /&gt;
* [https://github.com/NordicSemiconductor NordicSemiconductor Open Sources Page]&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product Function:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 9.jpg|left|320px]]&lt;br /&gt;
|}&lt;br /&gt;
* Product View:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 3.jpg|left|320px]]&lt;br /&gt;
|[[File:DOCKERPI 2.jpg|none|320px]]&lt;br /&gt;
|[[File:DOCKERPI 3 2.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
* Application View:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 4.jpg|left|320px]]&lt;br /&gt;
|[[File:DOCKERPI 5.jpg|none|320px]]&lt;br /&gt;
|[[File:DOCKERPI 7.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==How to Use==&lt;br /&gt;
===HID Interface===&lt;br /&gt;
The HID interface is implemented using CP2112, please refer to for more information.  [ &#039;&#039;&#039;[https://www.silabs.com/interface/usb-bridges/classic/device.cp2112 CP2112 Classic USB to HID Bridge]&#039;&#039;&#039; ]&lt;br /&gt;
====API Reference====&lt;br /&gt;
[[File:An496-hid-usb-to-smbus-api-specification.pdf]]&lt;br /&gt;
====Quick Reference====&lt;br /&gt;
&#039;&#039;HidSmbus_WriteRequest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function writes the specified number of bytes from the supplied buffer to the specified slave device and returns immediately after sending the request to the CP2112.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_AddressReadRequest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function intiates a read transfer to the specified slave device address and specifies the address to read from on the device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_ForceReadResponse&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function causes the device to send a read response to the host after a read transfer has been issued.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_GetReadResponse&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function returns the read response to a read request. Read and write timeouts as well as transfer retries can be set using HidSmbus_SetSmbusConfig() as described in HidSmbus_SetSmbusConfig.&lt;br /&gt;
&lt;br /&gt;
====Test Conditions====&lt;br /&gt;
DockerPi SensorHub and DockerPi Relay need to be installed on the top of DockerPi-H.&lt;br /&gt;
====Example Code(C#)====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.ComponentModel;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Drawing;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using SLAB_HID_TO_SMBUS;&lt;br /&gt;
&lt;br /&gt;
namespace WindowsFormsApp1&lt;br /&gt;
{&lt;br /&gt;
    public partial class Form1 : Form&lt;br /&gt;
    {&lt;br /&gt;
        const ushort vid = 4292;  //10C4&lt;br /&gt;
        const ushort pid = 60048; //EA90&lt;br /&gt;
        IntPtr connectedDevice;&lt;br /&gt;
&lt;br /&gt;
        const byte RelaySlaveAddress = 0x20;&lt;br /&gt;
        const byte SensorSlaveAddress = 0x2E;&lt;br /&gt;
&lt;br /&gt;
        ushort RelayStauts = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        public Form1()&lt;br /&gt;
        {&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
            uint numDevices = 0;&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_GetNumDevices(ref numDevices, vid, pid);&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_Open(ref connectedDevice, 0, vid, pid);&lt;br /&gt;
&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0x00 }, 2);&lt;br /&gt;
&lt;br /&gt;
            timer_get_temp.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void RelayButton_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            timer_get_temp.Enabled = false;&lt;br /&gt;
&lt;br /&gt;
            if (RelayStauts == 0)&lt;br /&gt;
            {&lt;br /&gt;
                RelayStauts = 1;&lt;br /&gt;
                SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0xFF }, 2);&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                RelayStauts = 0;&lt;br /&gt;
                SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0x00 }, 2);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            timer_get_temp.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void Timer_get_temp_Tick(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
            byte bytesRead = 0;&lt;br /&gt;
            byte status = 0;&lt;br /&gt;
            byte[] readbuff = new byte[61];&lt;br /&gt;
&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_AddressReadRequest(connectedDevice, SensorSlaveAddress, 1, 1, new byte[] { 0x01 });&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_ForceReadResponse(connectedDevice, 1);&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_GetReadResponse(connectedDevice, ref status, readbuff, 61, ref bytesRead);&lt;br /&gt;
&lt;br /&gt;
             if(bytesRead == 1)&lt;br /&gt;
            {&lt;br /&gt;
                progressBar.Value = readbuff[0];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===UART Interface===&lt;br /&gt;
Serial interface supports ASCII mode or HEX mode transmission,3V3 TTL as voltage reference.&lt;br /&gt;
&lt;br /&gt;
You can solder headers or use a jumper wire to connect to your device.&lt;br /&gt;
&lt;br /&gt;
Mode:&#039;&#039;&#039;115200 8N1&#039;&#039;&#039;&lt;br /&gt;
====Interface Protocol====&lt;br /&gt;
Read Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!END&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 00 =&amp;gt; i2c-get || I2C_ADDR_RANGE || DATA-ADDRESS || 0A/0D&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Write Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!DATA!!END&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || * || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 01 =&amp;gt; i2c-set	 || I2C_ADDR_RANGE || DATA-ADDRESS || DATA || 0A/0D&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====How to Communicate====&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Turn on it by sending 0xFF&lt;br /&gt;
The execution code is: AA011501FF The meaning of the code is: AA - starting code, DIR parameter 01 means write, 15 means I2C address 0x15, 01 means first LED register, FF eq 0xFF means Turn it on.&lt;br /&gt;
&lt;br /&gt;
HEX Mode:&lt;br /&gt;
&lt;br /&gt;
After sending each instruction, you need to send the &#039;&#039;&#039;0A&#039;&#039;&#039; or &#039;&#039;&#039;0D&#039;&#039;&#039; end this transaction.&lt;br /&gt;
&lt;br /&gt;
[[File:SendByHeX.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ASCII Mode:&lt;br /&gt;
&lt;br /&gt;
In ASCII mode, you must check &#039;&#039;&#039;AddCrLf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:SendByASCII.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Read back&lt;br /&gt;
The execution code is: AA001501 The meaning of the code is: AA - starting code, DIR parameter 00 means read, 15 means I2C address 0x15, 01 means first LED register.&lt;br /&gt;
&lt;br /&gt;
If you use HEX mode, you can return the result in HEX mode,If you use ASCII mode, you can return the result in ASCII mode,write operation returns nothing.&lt;br /&gt;
&lt;br /&gt;
[[File:SendReturn.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Bluetooth Interface===&lt;br /&gt;
Bluetooth interface only provides &#039;&#039;&#039;LE only&#039;&#039;&#039; protocol support&lt;br /&gt;
====LED Status====&lt;br /&gt;
LED1:Link(ON) / Broadcast(Blink) / Fault(OFF)&lt;br /&gt;
&lt;br /&gt;
LED2:Busy(ON)/ Transmission(Blink) / Idle(OFF)&lt;br /&gt;
&lt;br /&gt;
====Interface Protocol====&lt;br /&gt;
Read Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 00 =&amp;gt; i2c-get || I2C_ADDR_RANGE || DATA-ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Write Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!DATA&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || *&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 01 =&amp;gt; i2c-set	 || I2C_ADDR_RANGE || DATA-ADDRESS || DATA&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Download SDK====&lt;br /&gt;
* For IOS user&lt;br /&gt;
** nRF Toolbox Download Link: [ https://apps.apple.com/cn/app/nrf-toolbox/id820906058 ]&lt;br /&gt;
* For Android user&lt;br /&gt;
** nRF Toolbox Download Link: [ https://play.google.com/store/apps/details?id=no.nordicsemi.android.nrftoolbox ]&lt;br /&gt;
* For Sources code user&lt;br /&gt;
** Android: [ https://github.com/NordicSemiconductor/Android-nRF-Toolbox ]&lt;br /&gt;
** IOS: [ https://github.com/NordicSemiconductor/IOS-nRF-Toolbox ]&lt;br /&gt;
====Development Method====&lt;br /&gt;
* 1. Download SDK from the links mentioned before and install it to IOS device or Android device.&lt;br /&gt;
* 2. Open the nRF Toolbox app&lt;br /&gt;
[[File:TIM图片20200108112710.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 3. Select &amp;quot;UART&amp;quot; icon and press &amp;quot;Edit&amp;quot; &lt;br /&gt;
[[File:TIM图片20200108112702.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112706.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 4. Select one icon and input the execution code and press OK, and then press the icon will send the code to DockerPi Nightlight board.&lt;br /&gt;
** For example: Turn on NightLight board&#039;s first LED.&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Turn on it by sending 0xFF&amp;lt;br&amp;gt;&lt;br /&gt;
The execution code is:  AA011501FF &lt;br /&gt;
The meaning of the code is: AA - starting code, DIR parameter 01 means write, 15 means I2C address 0x15, 01 means first LED register, FF eq 0xFF means Turn it on.&lt;br /&gt;
[[File:TIM图片20200108112658.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112654.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 5. Press &amp;quot;Connect&amp;quot; to scan the DockerPi-H, and select it.&lt;br /&gt;
[[File:TIM图片20200108112645.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112637.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 6.If the connection is successful, the blue LED will stop blinking and stay on.and you can see log by pressing &amp;quot;show log&amp;quot; link.&lt;br /&gt;
[[File:TIM图片20200108112625.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Product Includes==&lt;br /&gt;
* 1 x DockerPi-H BlueTooth Board &lt;br /&gt;
* 1 x Acrylic Plate&lt;br /&gt;
* 1 x 3-Pin Pin Header&lt;br /&gt;
* 4 x M2.5 Nut&lt;br /&gt;
* 4 x M2.5 Screw&lt;br /&gt;
* 4 x M2.5x6 Copper Stick&lt;br /&gt;
[[File:DOCKERPI 8.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
* Q: Should I connect  DockerPi-H to my Raspberry Pi to make it work? &lt;br /&gt;
  A: No, the DockerPi-H is seperated from Raspberry Pi, all you need to do is connect other DockerPi product such as Nightlight board or 4 channel relay board to it and control it via bluetooth.&lt;br /&gt;
* Q: Can I just using DockerPi-H to build my own project without other DockerPi product? &lt;br /&gt;
  A: No, DockerPi-H is built for DockerPi series product so that you should have another DockerPi series product at least.&lt;br /&gt;
* Q: A write I2C operation has been performed but nothing return? &lt;br /&gt;
  A: Only read operations can return.&lt;br /&gt;
* Q: Whether the UART interface can be directly connected to the RS232 connection terminal?&lt;br /&gt;
  A: The voltages are not compatible and you need to level shift.&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
* GeeekPi, dockerPi, dockerPi-H, bluetooth, BLE&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=File:OPENSOURCE.jpg&amp;diff=7609</id>
		<title>File:OPENSOURCE.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=File:OPENSOURCE.jpg&amp;diff=7609"/>
		<updated>2020-01-09T09:53:18Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=EP-0116&amp;diff=7608</id>
		<title>EP-0116</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=EP-0116&amp;diff=7608"/>
		<updated>2020-01-09T09:52:03Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: /* Gallery */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==DockerPi-H Board ==&lt;br /&gt;
[[File:DOCKERPI 3 2.jpg|right|300px]]&lt;br /&gt;
&lt;br /&gt;
==Open Source Description==&lt;br /&gt;
Anyone may use the content of the white paper for non-commercial or educational purposes without permission without the permission of the source and copyright notice, but it may not be used for profit or commercial purposes without permission.&lt;br /&gt;
&lt;br /&gt;
Custom product LOGO is &#039;&#039;&#039;NOT&#039;&#039;&#039; allowed without copyright notice,Open source does not mean arbitrary use of trademarks!&lt;br /&gt;
&lt;br /&gt;
Welcome to submit links to your project(or tips),after our review, we will link your project in GitHub Page.&lt;br /&gt;
&lt;br /&gt;
Android and IOS app source code provided by NordicSemiconductor.&lt;br /&gt;
&lt;br /&gt;
==Product Description==&lt;br /&gt;
DockerPi-H is one of the DockerPi series expansion boards, which can convert I2C communication of other products in the DockerPi series to UART (TTL) / HID / BLE.&amp;lt;br&amp;gt; &lt;br /&gt;
BLE is usually used for the Internet of Things, TTL is usually used for industrial control, HID can communicate without driver.&amp;lt;br&amp;gt;&lt;br /&gt;
This product design for low power consumption, and can be maintained by only a few mA.&amp;lt;br&amp;gt; &lt;br /&gt;
DockerPi-H allows you to operate DockerPi series expansion boards without Raspberry Pi (or similar SBC).&amp;lt;br&amp;gt;&lt;br /&gt;
It can connect your personal computer to DockerPi expansion boards and also allows you to wirelessly control DockerPi expansion boards.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* Open source project (not for commercial distribution)&lt;br /&gt;
* DockerPi series products&lt;br /&gt;
* Programmable, can work with mobile phones, personal computers, industrial computers, ITX.&lt;br /&gt;
* Support BLE, HID, UART-TTL to transmit data&lt;br /&gt;
* Support BLE, UART-TTL data in ASCII mode&lt;br /&gt;
* Support UART-TTL, HID data in HEX mode&lt;br /&gt;
* HID does not require driver support&lt;br /&gt;
* It is recommended to install at the bottom of all modules&lt;br /&gt;
* Low power design&lt;br /&gt;
* BLE module provides FCC / CE certification&lt;br /&gt;
&lt;br /&gt;
==Supported platforms==&lt;br /&gt;
* 1. Tested Mobile devices : IPhone 6s Plus, HUAWEI SCM-AL09&lt;br /&gt;
* 2. Tested Platform : sscom.exe(Windows Environment), minicom(Linux Environment), pyserial module(via USB-to-TTL cable)&lt;br /&gt;
* 3. Supoort Interface : Bluetooth LE Only / USB HID / TTL UART&lt;br /&gt;
&lt;br /&gt;
==Sources Repository==&lt;br /&gt;
* [https://github.com/geeekpi/station DockerPi-H Open Sources Page]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Windows.exe CP2112 Software package for Windows]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Linux.bin CP2112 Softare package for Linux]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Mac.zip CP2112 Software package for MAC]&lt;br /&gt;
* [https://github.com/NordicSemiconductor NordicSemiconductor Open Sources Page]&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product Function:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 9.jpg|left|320px]]&lt;br /&gt;
|}&lt;br /&gt;
* Product View:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 3.jpg|left|320px]]&lt;br /&gt;
|[[File:DOCKERPI 2.jpg|none|320px]]&lt;br /&gt;
|[[File:DOCKERPI 3 2.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
* Application View:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 4.jpg|left|320px]]&lt;br /&gt;
|[[File:DOCKERPI 5.jpg|none|320px]]&lt;br /&gt;
|[[File:DOCKERPI 7.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==How to Use==&lt;br /&gt;
===HID Interface===&lt;br /&gt;
The HID interface is implemented using CP2112, please refer to for more information.  [ &#039;&#039;&#039;[https://www.silabs.com/interface/usb-bridges/classic/device.cp2112 CP2112 Classic USB to HID Bridge]&#039;&#039;&#039; ]&lt;br /&gt;
====API Reference====&lt;br /&gt;
[[File:An496-hid-usb-to-smbus-api-specification.pdf]]&lt;br /&gt;
====Quick Reference====&lt;br /&gt;
&#039;&#039;HidSmbus_WriteRequest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function writes the specified number of bytes from the supplied buffer to the specified slave device and returns immediately after sending the request to the CP2112.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_AddressReadRequest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function intiates a read transfer to the specified slave device address and specifies the address to read from on the device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_ForceReadResponse&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function causes the device to send a read response to the host after a read transfer has been issued.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_GetReadResponse&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function returns the read response to a read request. Read and write timeouts as well as transfer retries can be set using HidSmbus_SetSmbusConfig() as described in HidSmbus_SetSmbusConfig.&lt;br /&gt;
&lt;br /&gt;
====Test Conditions====&lt;br /&gt;
DockerPi SensorHub and DockerPi Relay need to be installed on the top of DockerPi-H.&lt;br /&gt;
====Example Code(C#)====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.ComponentModel;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Drawing;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using SLAB_HID_TO_SMBUS;&lt;br /&gt;
&lt;br /&gt;
namespace WindowsFormsApp1&lt;br /&gt;
{&lt;br /&gt;
    public partial class Form1 : Form&lt;br /&gt;
    {&lt;br /&gt;
        const ushort vid = 4292;  //10C4&lt;br /&gt;
        const ushort pid = 60048; //EA90&lt;br /&gt;
        IntPtr connectedDevice;&lt;br /&gt;
&lt;br /&gt;
        const byte RelaySlaveAddress = 0x20;&lt;br /&gt;
        const byte SensorSlaveAddress = 0x2E;&lt;br /&gt;
&lt;br /&gt;
        ushort RelayStauts = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        public Form1()&lt;br /&gt;
        {&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
            uint numDevices = 0;&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_GetNumDevices(ref numDevices, vid, pid);&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_Open(ref connectedDevice, 0, vid, pid);&lt;br /&gt;
&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0x00 }, 2);&lt;br /&gt;
&lt;br /&gt;
            timer_get_temp.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void RelayButton_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            timer_get_temp.Enabled = false;&lt;br /&gt;
&lt;br /&gt;
            if (RelayStauts == 0)&lt;br /&gt;
            {&lt;br /&gt;
                RelayStauts = 1;&lt;br /&gt;
                SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0xFF }, 2);&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                RelayStauts = 0;&lt;br /&gt;
                SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0x00 }, 2);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            timer_get_temp.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void Timer_get_temp_Tick(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
            byte bytesRead = 0;&lt;br /&gt;
            byte status = 0;&lt;br /&gt;
            byte[] readbuff = new byte[61];&lt;br /&gt;
&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_AddressReadRequest(connectedDevice, SensorSlaveAddress, 1, 1, new byte[] { 0x01 });&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_ForceReadResponse(connectedDevice, 1);&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_GetReadResponse(connectedDevice, ref status, readbuff, 61, ref bytesRead);&lt;br /&gt;
&lt;br /&gt;
             if(bytesRead == 1)&lt;br /&gt;
            {&lt;br /&gt;
                progressBar.Value = readbuff[0];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===UART Interface===&lt;br /&gt;
Serial interface supports ASCII mode or HEX mode transmission,3V3 TTL as voltage reference.&lt;br /&gt;
&lt;br /&gt;
You can solder headers or use a jumper wire to connect to your device.&lt;br /&gt;
&lt;br /&gt;
Mode:&#039;&#039;&#039;115200 8N1&#039;&#039;&#039;&lt;br /&gt;
====Interface Protocol====&lt;br /&gt;
Read Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!END&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 00 =&amp;gt; i2c-get || I2C_ADDR_RANGE || DATA-ADDRESS || 0A/0D&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Write Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!DATA!!END&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || * || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 01 =&amp;gt; i2c-set	 || I2C_ADDR_RANGE || DATA-ADDRESS || DATA || 0A/0D&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====How to Communicate====&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Turn on it by sending 0xFF&lt;br /&gt;
The execution code is: AA011501FF The meaning of the code is: AA - starting code, DIR parameter 01 means write, 15 means I2C address 0x15, 01 means first LED register, FF eq 0xFF means Turn it on.&lt;br /&gt;
&lt;br /&gt;
HEX Mode:&lt;br /&gt;
&lt;br /&gt;
After sending each instruction, you need to send the &#039;&#039;&#039;0A&#039;&#039;&#039; or &#039;&#039;&#039;0D&#039;&#039;&#039; end this transaction.&lt;br /&gt;
&lt;br /&gt;
[[File:SendByHeX.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ASCII Mode:&lt;br /&gt;
&lt;br /&gt;
In ASCII mode, you must check &#039;&#039;&#039;AddCrLf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:SendByASCII.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Read back&lt;br /&gt;
The execution code is: AA001501 The meaning of the code is: AA - starting code, DIR parameter 00 means read, 15 means I2C address 0x15, 01 means first LED register.&lt;br /&gt;
&lt;br /&gt;
If you use HEX mode, you can return the result in HEX mode,If you use ASCII mode, you can return the result in ASCII mode,write operation returns nothing.&lt;br /&gt;
&lt;br /&gt;
[[File:SendReturn.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Bluetooth Interface===&lt;br /&gt;
Bluetooth interface only provides &#039;&#039;&#039;LE only&#039;&#039;&#039; protocol support&lt;br /&gt;
====LED Status====&lt;br /&gt;
LED1:Link(ON) / Broadcast(Blink) / Fault(OFF)&lt;br /&gt;
&lt;br /&gt;
LED2:Busy(ON)/ Transmission(Blink) / Idle(OFF)&lt;br /&gt;
&lt;br /&gt;
====Interface Protocol====&lt;br /&gt;
Read Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 00 =&amp;gt; i2c-get || I2C_ADDR_RANGE || DATA-ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Write Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!DATA&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || *&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 01 =&amp;gt; i2c-set	 || I2C_ADDR_RANGE || DATA-ADDRESS || DATA&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Download SDK====&lt;br /&gt;
* For IOS user&lt;br /&gt;
** nRF Toolbox Download Link: [ https://apps.apple.com/cn/app/nrf-toolbox/id820906058 ]&lt;br /&gt;
* For Android user&lt;br /&gt;
** nRF Toolbox Download Link: [ https://play.google.com/store/apps/details?id=no.nordicsemi.android.nrftoolbox ]&lt;br /&gt;
* For Sources code user&lt;br /&gt;
** Android: [ https://github.com/NordicSemiconductor/Android-nRF-Toolbox ]&lt;br /&gt;
** IOS: [ https://github.com/NordicSemiconductor/IOS-nRF-Toolbox ]&lt;br /&gt;
====Development Method====&lt;br /&gt;
* 1. Download SDK from the links mentioned before and install it to IOS device or Android device.&lt;br /&gt;
* 2. Open the nRF Toolbox app&lt;br /&gt;
[[File:TIM图片20200108112710.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 3. Select &amp;quot;UART&amp;quot; icon and press &amp;quot;Edit&amp;quot; &lt;br /&gt;
[[File:TIM图片20200108112702.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112706.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 4. Select one icon and input the execution code and press OK, and then press the icon will send the code to DockerPi Nightlight board.&lt;br /&gt;
** For example: Turn on NightLight board&#039;s first LED.&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Turn on it by sending 0xFF&amp;lt;br&amp;gt;&lt;br /&gt;
The execution code is:  AA011501FF &lt;br /&gt;
The meaning of the code is: AA - starting code, DIR parameter 01 means write, 15 means I2C address 0x15, 01 means first LED register, FF eq 0xFF means Turn it on.&lt;br /&gt;
[[File:TIM图片20200108112658.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112654.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 5. Press &amp;quot;Connect&amp;quot; to scan the DockerPi-H, and select it.&lt;br /&gt;
[[File:TIM图片20200108112645.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112637.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 6.If the connection is successful, the blue LED will stop blinking and stay on.and you can see log by pressing &amp;quot;show log&amp;quot; link.&lt;br /&gt;
[[File:TIM图片20200108112625.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Product Includes==&lt;br /&gt;
* 1 x DockerPi-H BlueTooth Board &lt;br /&gt;
* 1 x Acrylic Plate&lt;br /&gt;
* 1 x 3-Pin Pin Header&lt;br /&gt;
* 4 x M2.5 Nut&lt;br /&gt;
* 4 x M2.5 Screw&lt;br /&gt;
* 4 x M2.5x6 Copper Stick&lt;br /&gt;
[[File:DOCKERPI 8.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
* Q: Should I connect  DockerPi-H to my Raspberry Pi to make it work? &lt;br /&gt;
  A: No, the DockerPi-H is seperated from Raspberry Pi, all you need to do is connect other DockerPi product such as Nightlight board or 4 channel relay board to it and control it via bluetooth.&lt;br /&gt;
* Q: Can I just using DockerPi-H to build my own project without other DockerPi product? &lt;br /&gt;
  A: No, DockerPi-H is built for DockerPi series product so that you should have another DockerPi series product at least.&lt;br /&gt;
* Q: A write I2C operation has been performed but nothing return? &lt;br /&gt;
  A: Only read operations can return.&lt;br /&gt;
* Q: Whether the UART interface can be directly connected to the RS232 connection terminal?&lt;br /&gt;
  A: The voltages are not compatible and you need to level shift.&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
* GeeekPi, dockerPi, dockerPi-H, bluetooth, BLE&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=EP-0116&amp;diff=7607</id>
		<title>EP-0116</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=EP-0116&amp;diff=7607"/>
		<updated>2020-01-09T09:50:41Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: /* Gallery */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==DockerPi-H Board ==&lt;br /&gt;
[[File:DOCKERPI 3 2.jpg|right|300px]]&lt;br /&gt;
&lt;br /&gt;
==Open Source Description==&lt;br /&gt;
Anyone may use the content of the white paper for non-commercial or educational purposes without permission without the permission of the source and copyright notice, but it may not be used for profit or commercial purposes without permission.&lt;br /&gt;
&lt;br /&gt;
Custom product LOGO is &#039;&#039;&#039;NOT&#039;&#039;&#039; allowed without copyright notice,Open source does not mean arbitrary use of trademarks!&lt;br /&gt;
&lt;br /&gt;
Welcome to submit links to your project(or tips),after our review, we will link your project in GitHub Page.&lt;br /&gt;
&lt;br /&gt;
Android and IOS app source code provided by NordicSemiconductor.&lt;br /&gt;
&lt;br /&gt;
==Product Description==&lt;br /&gt;
DockerPi-H is one of the DockerPi series expansion boards, which can convert I2C communication of other products in the DockerPi series to UART (TTL) / HID / BLE.&amp;lt;br&amp;gt; &lt;br /&gt;
BLE is usually used for the Internet of Things, TTL is usually used for industrial control, HID can communicate without driver.&amp;lt;br&amp;gt;&lt;br /&gt;
This product design for low power consumption, and can be maintained by only a few mA.&amp;lt;br&amp;gt; &lt;br /&gt;
DockerPi-H allows you to operate DockerPi series expansion boards without Raspberry Pi (or similar SBC).&amp;lt;br&amp;gt;&lt;br /&gt;
It can connect your personal computer to DockerPi expansion boards and also allows you to wirelessly control DockerPi expansion boards.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* Open source project (not for commercial distribution)&lt;br /&gt;
* DockerPi series products&lt;br /&gt;
* Programmable, can work with mobile phones, personal computers, industrial computers, ITX.&lt;br /&gt;
* Support BLE, HID, UART-TTL to transmit data&lt;br /&gt;
* Support BLE, UART-TTL data in ASCII mode&lt;br /&gt;
* Support UART-TTL, HID data in HEX mode&lt;br /&gt;
* HID does not require driver support&lt;br /&gt;
* It is recommended to install at the bottom of all modules&lt;br /&gt;
* Low power design&lt;br /&gt;
* BLE module provides FCC / CE certification&lt;br /&gt;
&lt;br /&gt;
==Supported platforms==&lt;br /&gt;
* 1. Tested Mobile devices : IPhone 6s Plus, HUAWEI SCM-AL09&lt;br /&gt;
* 2. Tested Platform : sscom.exe(Windows Environment), minicom(Linux Environment), pyserial module(via USB-to-TTL cable)&lt;br /&gt;
* 3. Supoort Interface : Bluetooth LE Only / USB HID / TTL UART&lt;br /&gt;
&lt;br /&gt;
==Sources Repository==&lt;br /&gt;
* [https://github.com/geeekpi/station DockerPi-H Open Sources Page]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Windows.exe CP2112 Software package for Windows]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Linux.bin CP2112 Softare package for Linux]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Mac.zip CP2112 Software package for MAC]&lt;br /&gt;
* [https://github.com/NordicSemiconductor NordicSemiconductor Open Sources Page]&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product Function&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 9.jpg|left|320px]]&lt;br /&gt;
|}&lt;br /&gt;
* Product View:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 3.jpg|left|320px]]&lt;br /&gt;
|[[File:DOCKERPI 2.jpg|none|320px]]&lt;br /&gt;
|[[File:DOCKERPI 3 2.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
* Application View:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 4.jpg|left|320px]]&lt;br /&gt;
|[[File:DOCKERPI 5.jpg|none|320px]]&lt;br /&gt;
|[[File:DOCKERPI 7.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==How to Use==&lt;br /&gt;
===HID Interface===&lt;br /&gt;
The HID interface is implemented using CP2112, please refer to for more information.  [ &#039;&#039;&#039;[https://www.silabs.com/interface/usb-bridges/classic/device.cp2112 CP2112 Classic USB to HID Bridge]&#039;&#039;&#039; ]&lt;br /&gt;
====API Reference====&lt;br /&gt;
[[File:An496-hid-usb-to-smbus-api-specification.pdf]]&lt;br /&gt;
====Quick Reference====&lt;br /&gt;
&#039;&#039;HidSmbus_WriteRequest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function writes the specified number of bytes from the supplied buffer to the specified slave device and returns immediately after sending the request to the CP2112.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_AddressReadRequest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function intiates a read transfer to the specified slave device address and specifies the address to read from on the device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_ForceReadResponse&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function causes the device to send a read response to the host after a read transfer has been issued.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_GetReadResponse&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function returns the read response to a read request. Read and write timeouts as well as transfer retries can be set using HidSmbus_SetSmbusConfig() as described in HidSmbus_SetSmbusConfig.&lt;br /&gt;
&lt;br /&gt;
====Test Conditions====&lt;br /&gt;
DockerPi SensorHub and DockerPi Relay need to be installed on the top of DockerPi-H.&lt;br /&gt;
====Example Code(C#)====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.ComponentModel;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Drawing;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using SLAB_HID_TO_SMBUS;&lt;br /&gt;
&lt;br /&gt;
namespace WindowsFormsApp1&lt;br /&gt;
{&lt;br /&gt;
    public partial class Form1 : Form&lt;br /&gt;
    {&lt;br /&gt;
        const ushort vid = 4292;  //10C4&lt;br /&gt;
        const ushort pid = 60048; //EA90&lt;br /&gt;
        IntPtr connectedDevice;&lt;br /&gt;
&lt;br /&gt;
        const byte RelaySlaveAddress = 0x20;&lt;br /&gt;
        const byte SensorSlaveAddress = 0x2E;&lt;br /&gt;
&lt;br /&gt;
        ushort RelayStauts = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        public Form1()&lt;br /&gt;
        {&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
            uint numDevices = 0;&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_GetNumDevices(ref numDevices, vid, pid);&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_Open(ref connectedDevice, 0, vid, pid);&lt;br /&gt;
&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0x00 }, 2);&lt;br /&gt;
&lt;br /&gt;
            timer_get_temp.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void RelayButton_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            timer_get_temp.Enabled = false;&lt;br /&gt;
&lt;br /&gt;
            if (RelayStauts == 0)&lt;br /&gt;
            {&lt;br /&gt;
                RelayStauts = 1;&lt;br /&gt;
                SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0xFF }, 2);&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                RelayStauts = 0;&lt;br /&gt;
                SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0x00 }, 2);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            timer_get_temp.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void Timer_get_temp_Tick(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
            byte bytesRead = 0;&lt;br /&gt;
            byte status = 0;&lt;br /&gt;
            byte[] readbuff = new byte[61];&lt;br /&gt;
&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_AddressReadRequest(connectedDevice, SensorSlaveAddress, 1, 1, new byte[] { 0x01 });&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_ForceReadResponse(connectedDevice, 1);&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_GetReadResponse(connectedDevice, ref status, readbuff, 61, ref bytesRead);&lt;br /&gt;
&lt;br /&gt;
             if(bytesRead == 1)&lt;br /&gt;
            {&lt;br /&gt;
                progressBar.Value = readbuff[0];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===UART Interface===&lt;br /&gt;
Serial interface supports ASCII mode or HEX mode transmission,3V3 TTL as voltage reference.&lt;br /&gt;
&lt;br /&gt;
You can solder headers or use a jumper wire to connect to your device.&lt;br /&gt;
&lt;br /&gt;
Mode:&#039;&#039;&#039;115200 8N1&#039;&#039;&#039;&lt;br /&gt;
====Interface Protocol====&lt;br /&gt;
Read Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!END&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 00 =&amp;gt; i2c-get || I2C_ADDR_RANGE || DATA-ADDRESS || 0A/0D&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Write Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!DATA!!END&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || * || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 01 =&amp;gt; i2c-set	 || I2C_ADDR_RANGE || DATA-ADDRESS || DATA || 0A/0D&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====How to Communicate====&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Turn on it by sending 0xFF&lt;br /&gt;
The execution code is: AA011501FF The meaning of the code is: AA - starting code, DIR parameter 01 means write, 15 means I2C address 0x15, 01 means first LED register, FF eq 0xFF means Turn it on.&lt;br /&gt;
&lt;br /&gt;
HEX Mode:&lt;br /&gt;
&lt;br /&gt;
After sending each instruction, you need to send the &#039;&#039;&#039;0A&#039;&#039;&#039; or &#039;&#039;&#039;0D&#039;&#039;&#039; end this transaction.&lt;br /&gt;
&lt;br /&gt;
[[File:SendByHeX.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ASCII Mode:&lt;br /&gt;
&lt;br /&gt;
In ASCII mode, you must check &#039;&#039;&#039;AddCrLf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:SendByASCII.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Read back&lt;br /&gt;
The execution code is: AA001501 The meaning of the code is: AA - starting code, DIR parameter 00 means read, 15 means I2C address 0x15, 01 means first LED register.&lt;br /&gt;
&lt;br /&gt;
If you use HEX mode, you can return the result in HEX mode,If you use ASCII mode, you can return the result in ASCII mode,write operation returns nothing.&lt;br /&gt;
&lt;br /&gt;
[[File:SendReturn.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Bluetooth Interface===&lt;br /&gt;
Bluetooth interface only provides &#039;&#039;&#039;LE only&#039;&#039;&#039; protocol support&lt;br /&gt;
====LED Status====&lt;br /&gt;
LED1:Link(ON) / Broadcast(Blink) / Fault(OFF)&lt;br /&gt;
&lt;br /&gt;
LED2:Busy(ON)/ Transmission(Blink) / Idle(OFF)&lt;br /&gt;
&lt;br /&gt;
====Interface Protocol====&lt;br /&gt;
Read Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 00 =&amp;gt; i2c-get || I2C_ADDR_RANGE || DATA-ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Write Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!DATA&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || *&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 01 =&amp;gt; i2c-set	 || I2C_ADDR_RANGE || DATA-ADDRESS || DATA&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Download SDK====&lt;br /&gt;
* For IOS user&lt;br /&gt;
** nRF Toolbox Download Link: [ https://apps.apple.com/cn/app/nrf-toolbox/id820906058 ]&lt;br /&gt;
* For Android user&lt;br /&gt;
** nRF Toolbox Download Link: [ https://play.google.com/store/apps/details?id=no.nordicsemi.android.nrftoolbox ]&lt;br /&gt;
* For Sources code user&lt;br /&gt;
** Android: [ https://github.com/NordicSemiconductor/Android-nRF-Toolbox ]&lt;br /&gt;
** IOS: [ https://github.com/NordicSemiconductor/IOS-nRF-Toolbox ]&lt;br /&gt;
====Development Method====&lt;br /&gt;
* 1. Download SDK from the links mentioned before and install it to IOS device or Android device.&lt;br /&gt;
* 2. Open the nRF Toolbox app&lt;br /&gt;
[[File:TIM图片20200108112710.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 3. Select &amp;quot;UART&amp;quot; icon and press &amp;quot;Edit&amp;quot; &lt;br /&gt;
[[File:TIM图片20200108112702.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112706.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 4. Select one icon and input the execution code and press OK, and then press the icon will send the code to DockerPi Nightlight board.&lt;br /&gt;
** For example: Turn on NightLight board&#039;s first LED.&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Turn on it by sending 0xFF&amp;lt;br&amp;gt;&lt;br /&gt;
The execution code is:  AA011501FF &lt;br /&gt;
The meaning of the code is: AA - starting code, DIR parameter 01 means write, 15 means I2C address 0x15, 01 means first LED register, FF eq 0xFF means Turn it on.&lt;br /&gt;
[[File:TIM图片20200108112658.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112654.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 5. Press &amp;quot;Connect&amp;quot; to scan the DockerPi-H, and select it.&lt;br /&gt;
[[File:TIM图片20200108112645.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112637.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 6.If the connection is successful, the blue LED will stop blinking and stay on.and you can see log by pressing &amp;quot;show log&amp;quot; link.&lt;br /&gt;
[[File:TIM图片20200108112625.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Product Includes==&lt;br /&gt;
* 1 x DockerPi-H BlueTooth Board &lt;br /&gt;
* 1 x Acrylic Plate&lt;br /&gt;
* 1 x 3-Pin Pin Header&lt;br /&gt;
* 4 x M2.5 Nut&lt;br /&gt;
* 4 x M2.5 Screw&lt;br /&gt;
* 4 x M2.5x6 Copper Stick&lt;br /&gt;
[[File:DOCKERPI 8.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
* Q: Should I connect  DockerPi-H to my Raspberry Pi to make it work? &lt;br /&gt;
  A: No, the DockerPi-H is seperated from Raspberry Pi, all you need to do is connect other DockerPi product such as Nightlight board or 4 channel relay board to it and control it via bluetooth.&lt;br /&gt;
* Q: Can I just using DockerPi-H to build my own project without other DockerPi product? &lt;br /&gt;
  A: No, DockerPi-H is built for DockerPi series product so that you should have another DockerPi series product at least.&lt;br /&gt;
* Q: A write I2C operation has been performed but nothing return? &lt;br /&gt;
  A: Only read operations can return.&lt;br /&gt;
* Q: Whether the UART interface can be directly connected to the RS232 connection terminal?&lt;br /&gt;
  A: The voltages are not compatible and you need to level shift.&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
* GeeekPi, dockerPi, dockerPi-H, bluetooth, BLE&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=EP-0116&amp;diff=7606</id>
		<title>EP-0116</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=EP-0116&amp;diff=7606"/>
		<updated>2020-01-09T09:49:20Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==DockerPi-H Board ==&lt;br /&gt;
[[File:DOCKERPI 3 2.jpg|right|300px]]&lt;br /&gt;
&lt;br /&gt;
==Open Source Description==&lt;br /&gt;
Anyone may use the content of the white paper for non-commercial or educational purposes without permission without the permission of the source and copyright notice, but it may not be used for profit or commercial purposes without permission.&lt;br /&gt;
&lt;br /&gt;
Custom product LOGO is &#039;&#039;&#039;NOT&#039;&#039;&#039; allowed without copyright notice,Open source does not mean arbitrary use of trademarks!&lt;br /&gt;
&lt;br /&gt;
Welcome to submit links to your project(or tips),after our review, we will link your project in GitHub Page.&lt;br /&gt;
&lt;br /&gt;
Android and IOS app source code provided by NordicSemiconductor.&lt;br /&gt;
&lt;br /&gt;
==Product Description==&lt;br /&gt;
DockerPi-H is one of the DockerPi series expansion boards, which can convert I2C communication of other products in the DockerPi series to UART (TTL) / HID / BLE.&amp;lt;br&amp;gt; &lt;br /&gt;
BLE is usually used for the Internet of Things, TTL is usually used for industrial control, HID can communicate without driver.&amp;lt;br&amp;gt;&lt;br /&gt;
This product design for low power consumption, and can be maintained by only a few mA.&amp;lt;br&amp;gt; &lt;br /&gt;
DockerPi-H allows you to operate DockerPi series expansion boards without Raspberry Pi (or similar SBC).&amp;lt;br&amp;gt;&lt;br /&gt;
It can connect your personal computer to DockerPi expansion boards and also allows you to wirelessly control DockerPi expansion boards.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* Open source project (not for commercial distribution)&lt;br /&gt;
* DockerPi series products&lt;br /&gt;
* Programmable, can work with mobile phones, personal computers, industrial computers, ITX.&lt;br /&gt;
* Support BLE, HID, UART-TTL to transmit data&lt;br /&gt;
* Support BLE, UART-TTL data in ASCII mode&lt;br /&gt;
* Support UART-TTL, HID data in HEX mode&lt;br /&gt;
* HID does not require driver support&lt;br /&gt;
* It is recommended to install at the bottom of all modules&lt;br /&gt;
* Low power design&lt;br /&gt;
* BLE module provides FCC / CE certification&lt;br /&gt;
&lt;br /&gt;
==Supported platforms==&lt;br /&gt;
* 1. Tested Mobile devices : IPhone 6s Plus, HUAWEI SCM-AL09&lt;br /&gt;
* 2. Tested Platform : sscom.exe(Windows Environment), minicom(Linux Environment), pyserial module(via USB-to-TTL cable)&lt;br /&gt;
* 3. Supoort Interface : Bluetooth LE Only / USB HID / TTL UART&lt;br /&gt;
&lt;br /&gt;
==Sources Repository==&lt;br /&gt;
* [https://github.com/geeekpi/station DockerPi-H Open Sources Page]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Windows.exe CP2112 Software package for Windows]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Linux.bin CP2112 Softare package for Linux]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Mac.zip CP2112 Software package for MAC]&lt;br /&gt;
* [https://github.com/NordicSemiconductor NordicSemiconductor Open Sources Page]&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product View:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 3.jpg|left|320px]]&lt;br /&gt;
|[[File:DOCKERPI 2.jpg|none|320px]]&lt;br /&gt;
|[[File:DOCKERPI 3 2.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
* Application View:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 4.jpg|left|320px]]&lt;br /&gt;
|[[File:DOCKERPI 5.jpg|none|320px]]&lt;br /&gt;
|[[File:DOCKERPI 7.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
* Product Function&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 9.jpg|left|320px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==How to Use==&lt;br /&gt;
===HID Interface===&lt;br /&gt;
The HID interface is implemented using CP2112, please refer to for more information.  [ &#039;&#039;&#039;[https://www.silabs.com/interface/usb-bridges/classic/device.cp2112 CP2112 Classic USB to HID Bridge]&#039;&#039;&#039; ]&lt;br /&gt;
====API Reference====&lt;br /&gt;
[[File:An496-hid-usb-to-smbus-api-specification.pdf]]&lt;br /&gt;
====Quick Reference====&lt;br /&gt;
&#039;&#039;HidSmbus_WriteRequest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function writes the specified number of bytes from the supplied buffer to the specified slave device and returns immediately after sending the request to the CP2112.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_AddressReadRequest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function intiates a read transfer to the specified slave device address and specifies the address to read from on the device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_ForceReadResponse&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function causes the device to send a read response to the host after a read transfer has been issued.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_GetReadResponse&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function returns the read response to a read request. Read and write timeouts as well as transfer retries can be set using HidSmbus_SetSmbusConfig() as described in HidSmbus_SetSmbusConfig.&lt;br /&gt;
&lt;br /&gt;
====Test Conditions====&lt;br /&gt;
DockerPi SensorHub and DockerPi Relay need to be installed on the top of DockerPi-H.&lt;br /&gt;
====Example Code(C#)====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.ComponentModel;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Drawing;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using SLAB_HID_TO_SMBUS;&lt;br /&gt;
&lt;br /&gt;
namespace WindowsFormsApp1&lt;br /&gt;
{&lt;br /&gt;
    public partial class Form1 : Form&lt;br /&gt;
    {&lt;br /&gt;
        const ushort vid = 4292;  //10C4&lt;br /&gt;
        const ushort pid = 60048; //EA90&lt;br /&gt;
        IntPtr connectedDevice;&lt;br /&gt;
&lt;br /&gt;
        const byte RelaySlaveAddress = 0x20;&lt;br /&gt;
        const byte SensorSlaveAddress = 0x2E;&lt;br /&gt;
&lt;br /&gt;
        ushort RelayStauts = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        public Form1()&lt;br /&gt;
        {&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
            uint numDevices = 0;&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_GetNumDevices(ref numDevices, vid, pid);&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_Open(ref connectedDevice, 0, vid, pid);&lt;br /&gt;
&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0x00 }, 2);&lt;br /&gt;
&lt;br /&gt;
            timer_get_temp.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void RelayButton_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            timer_get_temp.Enabled = false;&lt;br /&gt;
&lt;br /&gt;
            if (RelayStauts == 0)&lt;br /&gt;
            {&lt;br /&gt;
                RelayStauts = 1;&lt;br /&gt;
                SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0xFF }, 2);&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                RelayStauts = 0;&lt;br /&gt;
                SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0x00 }, 2);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            timer_get_temp.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void Timer_get_temp_Tick(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
            byte bytesRead = 0;&lt;br /&gt;
            byte status = 0;&lt;br /&gt;
            byte[] readbuff = new byte[61];&lt;br /&gt;
&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_AddressReadRequest(connectedDevice, SensorSlaveAddress, 1, 1, new byte[] { 0x01 });&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_ForceReadResponse(connectedDevice, 1);&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_GetReadResponse(connectedDevice, ref status, readbuff, 61, ref bytesRead);&lt;br /&gt;
&lt;br /&gt;
             if(bytesRead == 1)&lt;br /&gt;
            {&lt;br /&gt;
                progressBar.Value = readbuff[0];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===UART Interface===&lt;br /&gt;
Serial interface supports ASCII mode or HEX mode transmission,3V3 TTL as voltage reference.&lt;br /&gt;
&lt;br /&gt;
You can solder headers or use a jumper wire to connect to your device.&lt;br /&gt;
&lt;br /&gt;
Mode:&#039;&#039;&#039;115200 8N1&#039;&#039;&#039;&lt;br /&gt;
====Interface Protocol====&lt;br /&gt;
Read Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!END&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 00 =&amp;gt; i2c-get || I2C_ADDR_RANGE || DATA-ADDRESS || 0A/0D&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Write Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!DATA!!END&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || * || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 01 =&amp;gt; i2c-set	 || I2C_ADDR_RANGE || DATA-ADDRESS || DATA || 0A/0D&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====How to Communicate====&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Turn on it by sending 0xFF&lt;br /&gt;
The execution code is: AA011501FF The meaning of the code is: AA - starting code, DIR parameter 01 means write, 15 means I2C address 0x15, 01 means first LED register, FF eq 0xFF means Turn it on.&lt;br /&gt;
&lt;br /&gt;
HEX Mode:&lt;br /&gt;
&lt;br /&gt;
After sending each instruction, you need to send the &#039;&#039;&#039;0A&#039;&#039;&#039; or &#039;&#039;&#039;0D&#039;&#039;&#039; end this transaction.&lt;br /&gt;
&lt;br /&gt;
[[File:SendByHeX.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ASCII Mode:&lt;br /&gt;
&lt;br /&gt;
In ASCII mode, you must check &#039;&#039;&#039;AddCrLf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:SendByASCII.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Read back&lt;br /&gt;
The execution code is: AA001501 The meaning of the code is: AA - starting code, DIR parameter 00 means read, 15 means I2C address 0x15, 01 means first LED register.&lt;br /&gt;
&lt;br /&gt;
If you use HEX mode, you can return the result in HEX mode,If you use ASCII mode, you can return the result in ASCII mode,write operation returns nothing.&lt;br /&gt;
&lt;br /&gt;
[[File:SendReturn.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Bluetooth Interface===&lt;br /&gt;
Bluetooth interface only provides &#039;&#039;&#039;LE only&#039;&#039;&#039; protocol support&lt;br /&gt;
====LED Status====&lt;br /&gt;
LED1:Link(ON) / Broadcast(Blink) / Fault(OFF)&lt;br /&gt;
&lt;br /&gt;
LED2:Busy(ON)/ Transmission(Blink) / Idle(OFF)&lt;br /&gt;
&lt;br /&gt;
====Interface Protocol====&lt;br /&gt;
Read Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 00 =&amp;gt; i2c-get || I2C_ADDR_RANGE || DATA-ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Write Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!DATA&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || *&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 01 =&amp;gt; i2c-set	 || I2C_ADDR_RANGE || DATA-ADDRESS || DATA&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Download SDK====&lt;br /&gt;
* For IOS user&lt;br /&gt;
** nRF Toolbox Download Link: [ https://apps.apple.com/cn/app/nrf-toolbox/id820906058 ]&lt;br /&gt;
* For Android user&lt;br /&gt;
** nRF Toolbox Download Link: [ https://play.google.com/store/apps/details?id=no.nordicsemi.android.nrftoolbox ]&lt;br /&gt;
* For Sources code user&lt;br /&gt;
** Android: [ https://github.com/NordicSemiconductor/Android-nRF-Toolbox ]&lt;br /&gt;
** IOS: [ https://github.com/NordicSemiconductor/IOS-nRF-Toolbox ]&lt;br /&gt;
====Development Method====&lt;br /&gt;
* 1. Download SDK from the links mentioned before and install it to IOS device or Android device.&lt;br /&gt;
* 2. Open the nRF Toolbox app&lt;br /&gt;
[[File:TIM图片20200108112710.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 3. Select &amp;quot;UART&amp;quot; icon and press &amp;quot;Edit&amp;quot; &lt;br /&gt;
[[File:TIM图片20200108112702.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112706.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 4. Select one icon and input the execution code and press OK, and then press the icon will send the code to DockerPi Nightlight board.&lt;br /&gt;
** For example: Turn on NightLight board&#039;s first LED.&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Turn on it by sending 0xFF&amp;lt;br&amp;gt;&lt;br /&gt;
The execution code is:  AA011501FF &lt;br /&gt;
The meaning of the code is: AA - starting code, DIR parameter 01 means write, 15 means I2C address 0x15, 01 means first LED register, FF eq 0xFF means Turn it on.&lt;br /&gt;
[[File:TIM图片20200108112658.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112654.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 5. Press &amp;quot;Connect&amp;quot; to scan the DockerPi-H, and select it.&lt;br /&gt;
[[File:TIM图片20200108112645.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112637.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 6.If the connection is successful, the blue LED will stop blinking and stay on.and you can see log by pressing &amp;quot;show log&amp;quot; link.&lt;br /&gt;
[[File:TIM图片20200108112625.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Product Includes==&lt;br /&gt;
* 1 x DockerPi-H BlueTooth Board &lt;br /&gt;
* 1 x Acrylic Plate&lt;br /&gt;
* 1 x 3-Pin Pin Header&lt;br /&gt;
* 4 x M2.5 Nut&lt;br /&gt;
* 4 x M2.5 Screw&lt;br /&gt;
* 4 x M2.5x6 Copper Stick&lt;br /&gt;
[[File:DOCKERPI 8.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
* Q: Should I connect  DockerPi-H to my Raspberry Pi to make it work? &lt;br /&gt;
  A: No, the DockerPi-H is seperated from Raspberry Pi, all you need to do is connect other DockerPi product such as Nightlight board or 4 channel relay board to it and control it via bluetooth.&lt;br /&gt;
* Q: Can I just using DockerPi-H to build my own project without other DockerPi product? &lt;br /&gt;
  A: No, DockerPi-H is built for DockerPi series product so that you should have another DockerPi series product at least.&lt;br /&gt;
* Q: A write I2C operation has been performed but nothing return? &lt;br /&gt;
  A: Only read operations can return.&lt;br /&gt;
* Q: Whether the UART interface can be directly connected to the RS232 connection terminal?&lt;br /&gt;
  A: The voltages are not compatible and you need to level shift.&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
* GeeekPi, dockerPi, dockerPi-H, bluetooth, BLE&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=EP-0116&amp;diff=7605</id>
		<title>EP-0116</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=EP-0116&amp;diff=7605"/>
		<updated>2020-01-09T09:48:43Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: /* Gallery */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==DockerPi-H Board ==&lt;br /&gt;
[[File:DOCKERPI 3 2.jpg|right|300px]]&lt;br /&gt;
&lt;br /&gt;
==Open Source Description==&lt;br /&gt;
Anyone may use the content of the white paper for non-commercial or educational purposes without permission without the permission of the source and copyright notice, but it may not be used for profit or commercial purposes without permission.&lt;br /&gt;
&lt;br /&gt;
Custom product LOGO is &#039;&#039;&#039;NOT&#039;&#039;&#039; allowed without copyright notice,Open source does not mean arbitrary use of trademarks!&lt;br /&gt;
&lt;br /&gt;
Welcome to submit links to your project(or tips),after our review, we will link your project in GitHub Page.&lt;br /&gt;
&lt;br /&gt;
Android and IOS app source code provided by NordicSemiconductor.&lt;br /&gt;
&lt;br /&gt;
==Product Description==&lt;br /&gt;
DockerPi-H is one of the DockerPi series expansion boards, which can convert I2C communication of other products in the DockerPi series to UART (TTL) / HID / BLE.&amp;lt;br&amp;gt; &lt;br /&gt;
BLE is usually used for the Internet of Things, TTL is usually used for industrial control, HID can communicate without driver.&amp;lt;br&amp;gt;&lt;br /&gt;
This product design for low power consumption, and can be maintained by only a few mA.&amp;lt;br&amp;gt; &lt;br /&gt;
DockerPi-H allows you to operate DockerPi series expansion boards without Raspberry Pi (or similar SBC).&amp;lt;br&amp;gt;&lt;br /&gt;
It can connect your personal computer to DockerPi expansion boards and also allows you to wirelessly control DockerPi expansion boards.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* Open source project (not for commercial distribution)&lt;br /&gt;
* DockerPi series products&lt;br /&gt;
* Programmable, can work with mobile phones, personal computers, industrial computers, ITX.&lt;br /&gt;
* Support BLE, HID, UART-TTL to transmit data&lt;br /&gt;
* Support BLE, UART-TTL data in ASCII mode&lt;br /&gt;
* Support UART-TTL, HID data in HEX mode&lt;br /&gt;
* HID does not require driver support&lt;br /&gt;
* It is recommended to install at the bottom of all modules&lt;br /&gt;
* Low power design&lt;br /&gt;
* BLE module provides FCC / CE certification&lt;br /&gt;
&lt;br /&gt;
==Supported platforms==&lt;br /&gt;
* 1. Tested Mobile devices : IPhone 6s Plus, HUAWEI SCM-AL09&lt;br /&gt;
* 2. Tested Platform : sscom.exe(Windows Environment), minicom(Linux Environment), pyserial module(via USB-to-TTL cable)&lt;br /&gt;
* 3. Supoort Interface : Bluetooth LE Only / USB HID / TTL UART&lt;br /&gt;
&lt;br /&gt;
==Sources Repository==&lt;br /&gt;
* [https://github.com/geeekpi/station DockerPi-H Open Sources Page]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Windows.exe CP2112 Software package for Windows]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Linux.bin CP2112 Softare package for Linux]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Mac.zip CP2112 Software package for MAC]&lt;br /&gt;
* [https://github.com/NordicSemiconductor NordicSemiconductor Open Sources Page]&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product View:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 3.jpg|left|320px]]&lt;br /&gt;
|[[File:DOCKERPI 2.jpg|none|320px]]&lt;br /&gt;
|[[File:DOCKERPI 3 2.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
* Application View:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 4.jpg|left|320px]]&lt;br /&gt;
|[[File:DOCKERPI 5.jpg|none|320px]]&lt;br /&gt;
|[[File:DOCKERPI 7.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
* Product Function&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 9.jpg|left|320px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Package Includes==&lt;br /&gt;
* 1 x 3-Pin Header  &lt;br /&gt;
* 4 x M2.5 nut&lt;br /&gt;
* 8 x M2.5 Copper stick&lt;br /&gt;
* 1 x Acrylic panel&lt;br /&gt;
* 1 x USB Micro data cable&lt;br /&gt;
&lt;br /&gt;
==How to Use==&lt;br /&gt;
===HID Interface===&lt;br /&gt;
The HID interface is implemented using CP2112, please refer to for more information.  [ &#039;&#039;&#039;[https://www.silabs.com/interface/usb-bridges/classic/device.cp2112 CP2112 Classic USB to HID Bridge]&#039;&#039;&#039; ]&lt;br /&gt;
====API Reference====&lt;br /&gt;
[[File:An496-hid-usb-to-smbus-api-specification.pdf]]&lt;br /&gt;
====Quick Reference====&lt;br /&gt;
&#039;&#039;HidSmbus_WriteRequest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function writes the specified number of bytes from the supplied buffer to the specified slave device and returns immediately after sending the request to the CP2112.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_AddressReadRequest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function intiates a read transfer to the specified slave device address and specifies the address to read from on the device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_ForceReadResponse&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function causes the device to send a read response to the host after a read transfer has been issued.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_GetReadResponse&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function returns the read response to a read request. Read and write timeouts as well as transfer retries can be set using HidSmbus_SetSmbusConfig() as described in HidSmbus_SetSmbusConfig.&lt;br /&gt;
&lt;br /&gt;
====Test Conditions====&lt;br /&gt;
DockerPi SensorHub and DockerPi Relay need to be installed on the top of DockerPi-H.&lt;br /&gt;
====Example Code(C#)====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.ComponentModel;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Drawing;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using SLAB_HID_TO_SMBUS;&lt;br /&gt;
&lt;br /&gt;
namespace WindowsFormsApp1&lt;br /&gt;
{&lt;br /&gt;
    public partial class Form1 : Form&lt;br /&gt;
    {&lt;br /&gt;
        const ushort vid = 4292;  //10C4&lt;br /&gt;
        const ushort pid = 60048; //EA90&lt;br /&gt;
        IntPtr connectedDevice;&lt;br /&gt;
&lt;br /&gt;
        const byte RelaySlaveAddress = 0x20;&lt;br /&gt;
        const byte SensorSlaveAddress = 0x2E;&lt;br /&gt;
&lt;br /&gt;
        ushort RelayStauts = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        public Form1()&lt;br /&gt;
        {&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
            uint numDevices = 0;&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_GetNumDevices(ref numDevices, vid, pid);&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_Open(ref connectedDevice, 0, vid, pid);&lt;br /&gt;
&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0x00 }, 2);&lt;br /&gt;
&lt;br /&gt;
            timer_get_temp.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void RelayButton_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            timer_get_temp.Enabled = false;&lt;br /&gt;
&lt;br /&gt;
            if (RelayStauts == 0)&lt;br /&gt;
            {&lt;br /&gt;
                RelayStauts = 1;&lt;br /&gt;
                SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0xFF }, 2);&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                RelayStauts = 0;&lt;br /&gt;
                SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0x00 }, 2);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            timer_get_temp.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void Timer_get_temp_Tick(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
            byte bytesRead = 0;&lt;br /&gt;
            byte status = 0;&lt;br /&gt;
            byte[] readbuff = new byte[61];&lt;br /&gt;
&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_AddressReadRequest(connectedDevice, SensorSlaveAddress, 1, 1, new byte[] { 0x01 });&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_ForceReadResponse(connectedDevice, 1);&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_GetReadResponse(connectedDevice, ref status, readbuff, 61, ref bytesRead);&lt;br /&gt;
&lt;br /&gt;
             if(bytesRead == 1)&lt;br /&gt;
            {&lt;br /&gt;
                progressBar.Value = readbuff[0];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===UART Interface===&lt;br /&gt;
Serial interface supports ASCII mode or HEX mode transmission,3V3 TTL as voltage reference.&lt;br /&gt;
&lt;br /&gt;
You can solder headers or use a jumper wire to connect to your device.&lt;br /&gt;
&lt;br /&gt;
Mode:&#039;&#039;&#039;115200 8N1&#039;&#039;&#039;&lt;br /&gt;
====Interface Protocol====&lt;br /&gt;
Read Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!END&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 00 =&amp;gt; i2c-get || I2C_ADDR_RANGE || DATA-ADDRESS || 0A/0D&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Write Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!DATA!!END&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || * || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 01 =&amp;gt; i2c-set	 || I2C_ADDR_RANGE || DATA-ADDRESS || DATA || 0A/0D&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====How to Communicate====&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Turn on it by sending 0xFF&lt;br /&gt;
The execution code is: AA011501FF The meaning of the code is: AA - starting code, DIR parameter 01 means write, 15 means I2C address 0x15, 01 means first LED register, FF eq 0xFF means Turn it on.&lt;br /&gt;
&lt;br /&gt;
HEX Mode:&lt;br /&gt;
&lt;br /&gt;
After sending each instruction, you need to send the &#039;&#039;&#039;0A&#039;&#039;&#039; or &#039;&#039;&#039;0D&#039;&#039;&#039; end this transaction.&lt;br /&gt;
&lt;br /&gt;
[[File:SendByHeX.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ASCII Mode:&lt;br /&gt;
&lt;br /&gt;
In ASCII mode, you must check &#039;&#039;&#039;AddCrLf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:SendByASCII.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Read back&lt;br /&gt;
The execution code is: AA001501 The meaning of the code is: AA - starting code, DIR parameter 00 means read, 15 means I2C address 0x15, 01 means first LED register.&lt;br /&gt;
&lt;br /&gt;
If you use HEX mode, you can return the result in HEX mode,If you use ASCII mode, you can return the result in ASCII mode,write operation returns nothing.&lt;br /&gt;
&lt;br /&gt;
[[File:SendReturn.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Bluetooth Interface===&lt;br /&gt;
Bluetooth interface only provides &#039;&#039;&#039;LE only&#039;&#039;&#039; protocol support&lt;br /&gt;
====LED Status====&lt;br /&gt;
LED1:Link(ON) / Broadcast(Blink) / Fault(OFF)&lt;br /&gt;
&lt;br /&gt;
LED2:Busy(ON)/ Transmission(Blink) / Idle(OFF)&lt;br /&gt;
&lt;br /&gt;
====Interface Protocol====&lt;br /&gt;
Read Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 00 =&amp;gt; i2c-get || I2C_ADDR_RANGE || DATA-ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Write Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!DATA&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || *&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 01 =&amp;gt; i2c-set	 || I2C_ADDR_RANGE || DATA-ADDRESS || DATA&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Download SDK====&lt;br /&gt;
* For IOS user&lt;br /&gt;
** nRF Toolbox Download Link: [ https://apps.apple.com/cn/app/nrf-toolbox/id820906058 ]&lt;br /&gt;
* For Android user&lt;br /&gt;
** nRF Toolbox Download Link: [ https://play.google.com/store/apps/details?id=no.nordicsemi.android.nrftoolbox ]&lt;br /&gt;
* For Sources code user&lt;br /&gt;
** Android: [ https://github.com/NordicSemiconductor/Android-nRF-Toolbox ]&lt;br /&gt;
** IOS: [ https://github.com/NordicSemiconductor/IOS-nRF-Toolbox ]&lt;br /&gt;
====Development Method====&lt;br /&gt;
* 1. Download SDK from the links mentioned before and install it to IOS device or Android device.&lt;br /&gt;
* 2. Open the nRF Toolbox app&lt;br /&gt;
[[File:TIM图片20200108112710.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 3. Select &amp;quot;UART&amp;quot; icon and press &amp;quot;Edit&amp;quot; &lt;br /&gt;
[[File:TIM图片20200108112702.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112706.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 4. Select one icon and input the execution code and press OK, and then press the icon will send the code to DockerPi Nightlight board.&lt;br /&gt;
** For example: Turn on NightLight board&#039;s first LED.&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Turn on it by sending 0xFF&amp;lt;br&amp;gt;&lt;br /&gt;
The execution code is:  AA011501FF &lt;br /&gt;
The meaning of the code is: AA - starting code, DIR parameter 01 means write, 15 means I2C address 0x15, 01 means first LED register, FF eq 0xFF means Turn it on.&lt;br /&gt;
[[File:TIM图片20200108112658.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112654.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 5. Press &amp;quot;Connect&amp;quot; to scan the DockerPi-H, and select it.&lt;br /&gt;
[[File:TIM图片20200108112645.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112637.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 6.If the connection is successful, the blue LED will stop blinking and stay on.and you can see log by pressing &amp;quot;show log&amp;quot; link.&lt;br /&gt;
[[File:TIM图片20200108112625.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Product Includes==&lt;br /&gt;
* 1 x DockerPi-H BlueTooth Board &lt;br /&gt;
* 1 x Acrylic Plate&lt;br /&gt;
* 1 x 3-Pin Pin Header&lt;br /&gt;
* 4 x M2.5 Nut&lt;br /&gt;
* 4 x M2.5 Screw&lt;br /&gt;
* 4 x M2.5x6 Copper Stick&lt;br /&gt;
[[File:DOCKERPI 8.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
* Q: Should I connect  DockerPi-H to my Raspberry Pi to make it work? &lt;br /&gt;
  A: No, the DockerPi-H is seperated from Raspberry Pi, all you need to do is connect other DockerPi product such as Nightlight board or 4 channel relay board to it and control it via bluetooth.&lt;br /&gt;
* Q: Can I just using DockerPi-H to build my own project without other DockerPi product? &lt;br /&gt;
  A: No, DockerPi-H is built for DockerPi series product so that you should have another DockerPi series product at least.&lt;br /&gt;
* Q: A write I2C operation has been performed but nothing return? &lt;br /&gt;
  A: Only read operations can return.&lt;br /&gt;
* Q: Whether the UART interface can be directly connected to the RS232 connection terminal?&lt;br /&gt;
  A: The voltages are not compatible and you need to level shift.&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
* GeeekPi, dockerPi, dockerPi-H, bluetooth, BLE&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=File:DOCKERPI_9.jpg&amp;diff=7604</id>
		<title>File:DOCKERPI 9.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=File:DOCKERPI_9.jpg&amp;diff=7604"/>
		<updated>2020-01-09T09:48:30Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=EP-0116&amp;diff=7603</id>
		<title>EP-0116</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=EP-0116&amp;diff=7603"/>
		<updated>2020-01-09T09:44:23Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: /* DockerPi-H Board */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==DockerPi-H Board ==&lt;br /&gt;
[[File:DOCKERPI 3 2.jpg|right|300px]]&lt;br /&gt;
&lt;br /&gt;
==Open Source Description==&lt;br /&gt;
Anyone may use the content of the white paper for non-commercial or educational purposes without permission without the permission of the source and copyright notice, but it may not be used for profit or commercial purposes without permission.&lt;br /&gt;
&lt;br /&gt;
Custom product LOGO is &#039;&#039;&#039;NOT&#039;&#039;&#039; allowed without copyright notice,Open source does not mean arbitrary use of trademarks!&lt;br /&gt;
&lt;br /&gt;
Welcome to submit links to your project(or tips),after our review, we will link your project in GitHub Page.&lt;br /&gt;
&lt;br /&gt;
Android and IOS app source code provided by NordicSemiconductor.&lt;br /&gt;
&lt;br /&gt;
==Product Description==&lt;br /&gt;
DockerPi-H is one of the DockerPi series expansion boards, which can convert I2C communication of other products in the DockerPi series to UART (TTL) / HID / BLE.&amp;lt;br&amp;gt; &lt;br /&gt;
BLE is usually used for the Internet of Things, TTL is usually used for industrial control, HID can communicate without driver.&amp;lt;br&amp;gt;&lt;br /&gt;
This product design for low power consumption, and can be maintained by only a few mA.&amp;lt;br&amp;gt; &lt;br /&gt;
DockerPi-H allows you to operate DockerPi series expansion boards without Raspberry Pi (or similar SBC).&amp;lt;br&amp;gt;&lt;br /&gt;
It can connect your personal computer to DockerPi expansion boards and also allows you to wirelessly control DockerPi expansion boards.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* Open source project (not for commercial distribution)&lt;br /&gt;
* DockerPi series products&lt;br /&gt;
* Programmable, can work with mobile phones, personal computers, industrial computers, ITX.&lt;br /&gt;
* Support BLE, HID, UART-TTL to transmit data&lt;br /&gt;
* Support BLE, UART-TTL data in ASCII mode&lt;br /&gt;
* Support UART-TTL, HID data in HEX mode&lt;br /&gt;
* HID does not require driver support&lt;br /&gt;
* It is recommended to install at the bottom of all modules&lt;br /&gt;
* Low power design&lt;br /&gt;
* BLE module provides FCC / CE certification&lt;br /&gt;
&lt;br /&gt;
==Supported platforms==&lt;br /&gt;
* 1. Tested Mobile devices : IPhone 6s Plus, HUAWEI SCM-AL09&lt;br /&gt;
* 2. Tested Platform : sscom.exe(Windows Environment), minicom(Linux Environment), pyserial module(via USB-to-TTL cable)&lt;br /&gt;
* 3. Supoort Interface : Bluetooth LE Only / USB HID / TTL UART&lt;br /&gt;
&lt;br /&gt;
==Sources Repository==&lt;br /&gt;
* [https://github.com/geeekpi/station DockerPi-H Open Sources Page]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Windows.exe CP2112 Software package for Windows]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Linux.bin CP2112 Softare package for Linux]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Mac.zip CP2112 Software package for MAC]&lt;br /&gt;
* [https://github.com/NordicSemiconductor NordicSemiconductor Open Sources Page]&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product View:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 3.jpg|left|320px]]&lt;br /&gt;
|[[File:DOCKERPI 2.jpg|none|320px]]&lt;br /&gt;
|[[File:DOCKERPI 3 2.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
* Application View:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 4.jpg|left|320px]]&lt;br /&gt;
|[[File:DOCKERPI 5.jpg|none|320px]]&lt;br /&gt;
|[[File:DOCKERPI 7.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Package Includes==&lt;br /&gt;
* 1 x 3-Pin Header  &lt;br /&gt;
* 4 x M2.5 nut&lt;br /&gt;
* 8 x M2.5 Copper stick&lt;br /&gt;
* 1 x Acrylic panel&lt;br /&gt;
* 1 x USB Micro data cable&lt;br /&gt;
&lt;br /&gt;
==How to Use==&lt;br /&gt;
===HID Interface===&lt;br /&gt;
The HID interface is implemented using CP2112, please refer to for more information.  [ &#039;&#039;&#039;[https://www.silabs.com/interface/usb-bridges/classic/device.cp2112 CP2112 Classic USB to HID Bridge]&#039;&#039;&#039; ]&lt;br /&gt;
====API Reference====&lt;br /&gt;
[[File:An496-hid-usb-to-smbus-api-specification.pdf]]&lt;br /&gt;
====Quick Reference====&lt;br /&gt;
&#039;&#039;HidSmbus_WriteRequest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function writes the specified number of bytes from the supplied buffer to the specified slave device and returns immediately after sending the request to the CP2112.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_AddressReadRequest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function intiates a read transfer to the specified slave device address and specifies the address to read from on the device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_ForceReadResponse&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function causes the device to send a read response to the host after a read transfer has been issued.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_GetReadResponse&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function returns the read response to a read request. Read and write timeouts as well as transfer retries can be set using HidSmbus_SetSmbusConfig() as described in HidSmbus_SetSmbusConfig.&lt;br /&gt;
&lt;br /&gt;
====Test Conditions====&lt;br /&gt;
DockerPi SensorHub and DockerPi Relay need to be installed on the top of DockerPi-H.&lt;br /&gt;
====Example Code(C#)====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.ComponentModel;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Drawing;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using SLAB_HID_TO_SMBUS;&lt;br /&gt;
&lt;br /&gt;
namespace WindowsFormsApp1&lt;br /&gt;
{&lt;br /&gt;
    public partial class Form1 : Form&lt;br /&gt;
    {&lt;br /&gt;
        const ushort vid = 4292;  //10C4&lt;br /&gt;
        const ushort pid = 60048; //EA90&lt;br /&gt;
        IntPtr connectedDevice;&lt;br /&gt;
&lt;br /&gt;
        const byte RelaySlaveAddress = 0x20;&lt;br /&gt;
        const byte SensorSlaveAddress = 0x2E;&lt;br /&gt;
&lt;br /&gt;
        ushort RelayStauts = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        public Form1()&lt;br /&gt;
        {&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
            uint numDevices = 0;&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_GetNumDevices(ref numDevices, vid, pid);&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_Open(ref connectedDevice, 0, vid, pid);&lt;br /&gt;
&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0x00 }, 2);&lt;br /&gt;
&lt;br /&gt;
            timer_get_temp.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void RelayButton_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            timer_get_temp.Enabled = false;&lt;br /&gt;
&lt;br /&gt;
            if (RelayStauts == 0)&lt;br /&gt;
            {&lt;br /&gt;
                RelayStauts = 1;&lt;br /&gt;
                SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0xFF }, 2);&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                RelayStauts = 0;&lt;br /&gt;
                SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0x00 }, 2);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            timer_get_temp.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void Timer_get_temp_Tick(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
            byte bytesRead = 0;&lt;br /&gt;
            byte status = 0;&lt;br /&gt;
            byte[] readbuff = new byte[61];&lt;br /&gt;
&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_AddressReadRequest(connectedDevice, SensorSlaveAddress, 1, 1, new byte[] { 0x01 });&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_ForceReadResponse(connectedDevice, 1);&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_GetReadResponse(connectedDevice, ref status, readbuff, 61, ref bytesRead);&lt;br /&gt;
&lt;br /&gt;
             if(bytesRead == 1)&lt;br /&gt;
            {&lt;br /&gt;
                progressBar.Value = readbuff[0];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===UART Interface===&lt;br /&gt;
Serial interface supports ASCII mode or HEX mode transmission,3V3 TTL as voltage reference.&lt;br /&gt;
&lt;br /&gt;
You can solder headers or use a jumper wire to connect to your device.&lt;br /&gt;
&lt;br /&gt;
Mode:&#039;&#039;&#039;115200 8N1&#039;&#039;&#039;&lt;br /&gt;
====Interface Protocol====&lt;br /&gt;
Read Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!END&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 00 =&amp;gt; i2c-get || I2C_ADDR_RANGE || DATA-ADDRESS || 0A/0D&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Write Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!DATA!!END&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || * || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 01 =&amp;gt; i2c-set	 || I2C_ADDR_RANGE || DATA-ADDRESS || DATA || 0A/0D&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====How to Communicate====&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Turn on it by sending 0xFF&lt;br /&gt;
The execution code is: AA011501FF The meaning of the code is: AA - starting code, DIR parameter 01 means write, 15 means I2C address 0x15, 01 means first LED register, FF eq 0xFF means Turn it on.&lt;br /&gt;
&lt;br /&gt;
HEX Mode:&lt;br /&gt;
&lt;br /&gt;
After sending each instruction, you need to send the &#039;&#039;&#039;0A&#039;&#039;&#039; or &#039;&#039;&#039;0D&#039;&#039;&#039; end this transaction.&lt;br /&gt;
&lt;br /&gt;
[[File:SendByHeX.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ASCII Mode:&lt;br /&gt;
&lt;br /&gt;
In ASCII mode, you must check &#039;&#039;&#039;AddCrLf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:SendByASCII.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Read back&lt;br /&gt;
The execution code is: AA001501 The meaning of the code is: AA - starting code, DIR parameter 00 means read, 15 means I2C address 0x15, 01 means first LED register.&lt;br /&gt;
&lt;br /&gt;
If you use HEX mode, you can return the result in HEX mode,If you use ASCII mode, you can return the result in ASCII mode,write operation returns nothing.&lt;br /&gt;
&lt;br /&gt;
[[File:SendReturn.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Bluetooth Interface===&lt;br /&gt;
Bluetooth interface only provides &#039;&#039;&#039;LE only&#039;&#039;&#039; protocol support&lt;br /&gt;
====LED Status====&lt;br /&gt;
LED1:Link(ON) / Broadcast(Blink) / Fault(OFF)&lt;br /&gt;
&lt;br /&gt;
LED2:Busy(ON)/ Transmission(Blink) / Idle(OFF)&lt;br /&gt;
&lt;br /&gt;
====Interface Protocol====&lt;br /&gt;
Read Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 00 =&amp;gt; i2c-get || I2C_ADDR_RANGE || DATA-ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Write Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!DATA&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || *&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 01 =&amp;gt; i2c-set	 || I2C_ADDR_RANGE || DATA-ADDRESS || DATA&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Download SDK====&lt;br /&gt;
* For IOS user&lt;br /&gt;
** nRF Toolbox Download Link: [ https://apps.apple.com/cn/app/nrf-toolbox/id820906058 ]&lt;br /&gt;
* For Android user&lt;br /&gt;
** nRF Toolbox Download Link: [ https://play.google.com/store/apps/details?id=no.nordicsemi.android.nrftoolbox ]&lt;br /&gt;
* For Sources code user&lt;br /&gt;
** Android: [ https://github.com/NordicSemiconductor/Android-nRF-Toolbox ]&lt;br /&gt;
** IOS: [ https://github.com/NordicSemiconductor/IOS-nRF-Toolbox ]&lt;br /&gt;
====Development Method====&lt;br /&gt;
* 1. Download SDK from the links mentioned before and install it to IOS device or Android device.&lt;br /&gt;
* 2. Open the nRF Toolbox app&lt;br /&gt;
[[File:TIM图片20200108112710.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 3. Select &amp;quot;UART&amp;quot; icon and press &amp;quot;Edit&amp;quot; &lt;br /&gt;
[[File:TIM图片20200108112702.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112706.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 4. Select one icon and input the execution code and press OK, and then press the icon will send the code to DockerPi Nightlight board.&lt;br /&gt;
** For example: Turn on NightLight board&#039;s first LED.&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Turn on it by sending 0xFF&amp;lt;br&amp;gt;&lt;br /&gt;
The execution code is:  AA011501FF &lt;br /&gt;
The meaning of the code is: AA - starting code, DIR parameter 01 means write, 15 means I2C address 0x15, 01 means first LED register, FF eq 0xFF means Turn it on.&lt;br /&gt;
[[File:TIM图片20200108112658.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112654.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 5. Press &amp;quot;Connect&amp;quot; to scan the DockerPi-H, and select it.&lt;br /&gt;
[[File:TIM图片20200108112645.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112637.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 6.If the connection is successful, the blue LED will stop blinking and stay on.and you can see log by pressing &amp;quot;show log&amp;quot; link.&lt;br /&gt;
[[File:TIM图片20200108112625.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Product Includes==&lt;br /&gt;
* 1 x DockerPi-H BlueTooth Board &lt;br /&gt;
* 1 x Acrylic Plate&lt;br /&gt;
* 1 x 3-Pin Pin Header&lt;br /&gt;
* 4 x M2.5 Nut&lt;br /&gt;
* 4 x M2.5 Screw&lt;br /&gt;
* 4 x M2.5x6 Copper Stick&lt;br /&gt;
[[File:DOCKERPI 8.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
* Q: Should I connect  DockerPi-H to my Raspberry Pi to make it work? &lt;br /&gt;
  A: No, the DockerPi-H is seperated from Raspberry Pi, all you need to do is connect other DockerPi product such as Nightlight board or 4 channel relay board to it and control it via bluetooth.&lt;br /&gt;
* Q: Can I just using DockerPi-H to build my own project without other DockerPi product? &lt;br /&gt;
  A: No, DockerPi-H is built for DockerPi series product so that you should have another DockerPi series product at least.&lt;br /&gt;
* Q: A write I2C operation has been performed but nothing return? &lt;br /&gt;
  A: Only read operations can return.&lt;br /&gt;
* Q: Whether the UART interface can be directly connected to the RS232 connection terminal?&lt;br /&gt;
  A: The voltages are not compatible and you need to level shift.&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
* GeeekPi, dockerPi, dockerPi-H, bluetooth, BLE&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=File:DOCKERPI_3_2.jpg&amp;diff=7602</id>
		<title>File:DOCKERPI 3 2.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=File:DOCKERPI_3_2.jpg&amp;diff=7602"/>
		<updated>2020-01-09T09:43:07Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: TaterLi uploaded a new version of File:DOCKERPI 3 2.jpg&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=EP-0116&amp;diff=7601</id>
		<title>EP-0116</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=EP-0116&amp;diff=7601"/>
		<updated>2020-01-09T07:24:37Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: /* LED Status */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==DockerPi-H Board ==&lt;br /&gt;
[[File:DOCKERPI 1.jpg|right|300px]]&lt;br /&gt;
&lt;br /&gt;
==Open Source Description==&lt;br /&gt;
Anyone may use the content of the white paper for non-commercial or educational purposes without permission without the permission of the source and copyright notice, but it may not be used for profit or commercial purposes without permission.&lt;br /&gt;
&lt;br /&gt;
Custom product LOGO is &#039;&#039;&#039;NOT&#039;&#039;&#039; allowed without copyright notice,Open source does not mean arbitrary use of trademarks!&lt;br /&gt;
&lt;br /&gt;
Welcome to submit links to your project(or tips),after our review, we will link your project in GitHub Page.&lt;br /&gt;
&lt;br /&gt;
Android and IOS app source code provided by NordicSemiconductor.&lt;br /&gt;
&lt;br /&gt;
==Product Description==&lt;br /&gt;
DockerPi-H is one of the DockerPi series expansion boards, which can convert I2C communication of other products in the DockerPi series to UART (TTL) / HID / BLE.&amp;lt;br&amp;gt; &lt;br /&gt;
BLE is usually used for the Internet of Things, TTL is usually used for industrial control, HID can communicate without driver.&amp;lt;br&amp;gt;&lt;br /&gt;
This product design for low power consumption, and can be maintained by only a few mA.&amp;lt;br&amp;gt; &lt;br /&gt;
DockerPi-H allows you to operate DockerPi series expansion boards without Raspberry Pi (or similar SBC).&amp;lt;br&amp;gt;&lt;br /&gt;
It can connect your personal computer to DockerPi expansion boards and also allows you to wirelessly control DockerPi expansion boards.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* Open source project (not for commercial distribution)&lt;br /&gt;
* DockerPi series products&lt;br /&gt;
* Programmable, can work with mobile phones, personal computers, industrial computers, ITX.&lt;br /&gt;
* Support BLE, HID, UART-TTL to transmit data&lt;br /&gt;
* Support BLE, UART-TTL data in ASCII mode&lt;br /&gt;
* Support UART-TTL, HID data in HEX mode&lt;br /&gt;
* HID does not require driver support&lt;br /&gt;
* It is recommended to install at the bottom of all modules&lt;br /&gt;
* Low power design&lt;br /&gt;
* BLE module provides FCC / CE certification&lt;br /&gt;
&lt;br /&gt;
==Supported platforms==&lt;br /&gt;
* 1. Tested Mobile devices : IPhone 6s Plus, HUAWEI SCM-AL09&lt;br /&gt;
* 2. Tested Platform : sscom.exe(Windows Environment), minicom(Linux Environment), pyserial module(via USB-to-TTL cable)&lt;br /&gt;
* 3. Supoort Interface : Bluetooth LE Only / USB HID / TTL UART&lt;br /&gt;
&lt;br /&gt;
==Sources Repository==&lt;br /&gt;
* [https://github.com/geeekpi/station DockerPi-H Open Sources Page]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Windows.exe CP2112 Software package for Windows]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Linux.bin CP2112 Softare package for Linux]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Mac.zip CP2112 Software package for MAC]&lt;br /&gt;
* [https://github.com/NordicSemiconductor NordicSemiconductor Open Sources Page]&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product View:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 3.jpg|left|320px]]&lt;br /&gt;
|[[File:DOCKERPI 2.jpg|none|320px]]&lt;br /&gt;
|[[File:DOCKERPI 3 2.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
* Application View:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 4.jpg|left|320px]]&lt;br /&gt;
|[[File:DOCKERPI 5.jpg|none|320px]]&lt;br /&gt;
|[[File:DOCKERPI 7.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Package Includes==&lt;br /&gt;
* 1 x 3-Pin Header  &lt;br /&gt;
* 4 x M2.5 nut&lt;br /&gt;
* 8 x M2.5 Copper stick&lt;br /&gt;
* 1 x Acrylic panel&lt;br /&gt;
* 1 x USB Micro data cable&lt;br /&gt;
&lt;br /&gt;
==How to Use==&lt;br /&gt;
===HID Interface===&lt;br /&gt;
The HID interface is implemented using CP2112, please refer to for more information.  [ &#039;&#039;&#039;[https://www.silabs.com/interface/usb-bridges/classic/device.cp2112 CP2112 Classic USB to HID Bridge]&#039;&#039;&#039; ]&lt;br /&gt;
====API Reference====&lt;br /&gt;
[[File:An496-hid-usb-to-smbus-api-specification.pdf]]&lt;br /&gt;
====Quick Reference====&lt;br /&gt;
&#039;&#039;HidSmbus_WriteRequest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function writes the specified number of bytes from the supplied buffer to the specified slave device and returns immediately after sending the request to the CP2112.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_AddressReadRequest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function intiates a read transfer to the specified slave device address and specifies the address to read from on the device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_ForceReadResponse&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function causes the device to send a read response to the host after a read transfer has been issued.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_GetReadResponse&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function returns the read response to a read request. Read and write timeouts as well as transfer retries can be set using HidSmbus_SetSmbusConfig() as described in HidSmbus_SetSmbusConfig.&lt;br /&gt;
&lt;br /&gt;
====Test Conditions====&lt;br /&gt;
DockerPi SensorHub and DockerPi Relay need to be installed on the top of DockerPi-H.&lt;br /&gt;
====Example Code(C#)====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.ComponentModel;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Drawing;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using SLAB_HID_TO_SMBUS;&lt;br /&gt;
&lt;br /&gt;
namespace WindowsFormsApp1&lt;br /&gt;
{&lt;br /&gt;
    public partial class Form1 : Form&lt;br /&gt;
    {&lt;br /&gt;
        const ushort vid = 4292;  //10C4&lt;br /&gt;
        const ushort pid = 60048; //EA90&lt;br /&gt;
        IntPtr connectedDevice;&lt;br /&gt;
&lt;br /&gt;
        const byte RelaySlaveAddress = 0x20;&lt;br /&gt;
        const byte SensorSlaveAddress = 0x2E;&lt;br /&gt;
&lt;br /&gt;
        ushort RelayStauts = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        public Form1()&lt;br /&gt;
        {&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
            uint numDevices = 0;&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_GetNumDevices(ref numDevices, vid, pid);&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_Open(ref connectedDevice, 0, vid, pid);&lt;br /&gt;
&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0x00 }, 2);&lt;br /&gt;
&lt;br /&gt;
            timer_get_temp.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void RelayButton_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            timer_get_temp.Enabled = false;&lt;br /&gt;
&lt;br /&gt;
            if (RelayStauts == 0)&lt;br /&gt;
            {&lt;br /&gt;
                RelayStauts = 1;&lt;br /&gt;
                SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0xFF }, 2);&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                RelayStauts = 0;&lt;br /&gt;
                SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0x00 }, 2);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            timer_get_temp.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void Timer_get_temp_Tick(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
            byte bytesRead = 0;&lt;br /&gt;
            byte status = 0;&lt;br /&gt;
            byte[] readbuff = new byte[61];&lt;br /&gt;
&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_AddressReadRequest(connectedDevice, SensorSlaveAddress, 1, 1, new byte[] { 0x01 });&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_ForceReadResponse(connectedDevice, 1);&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_GetReadResponse(connectedDevice, ref status, readbuff, 61, ref bytesRead);&lt;br /&gt;
&lt;br /&gt;
             if(bytesRead == 1)&lt;br /&gt;
            {&lt;br /&gt;
                progressBar.Value = readbuff[0];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===UART Interface===&lt;br /&gt;
Serial interface supports ASCII mode or HEX mode transmission,3V3 TTL as voltage reference.&lt;br /&gt;
&lt;br /&gt;
You can solder headers or use a jumper wire to connect to your device.&lt;br /&gt;
&lt;br /&gt;
Mode:&#039;&#039;&#039;115200 8N1&#039;&#039;&#039;&lt;br /&gt;
====Interface Protocol====&lt;br /&gt;
Read Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!END&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 00 =&amp;gt; i2c-get || I2C_ADDR_RANGE || DATA-ADDRESS || 0A/0D&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Write Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!DATA!!END&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || * || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 01 =&amp;gt; i2c-set	 || I2C_ADDR_RANGE || DATA-ADDRESS || DATA || 0A/0D&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====How to Communicate====&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Turn on it by sending 0xFF&lt;br /&gt;
The execution code is: AA011501FF The meaning of the code is: AA - starting code, DIR parameter 01 means write, 15 means I2C address 0x15, 01 means first LED register, FF eq 0xFF means Turn it on.&lt;br /&gt;
&lt;br /&gt;
HEX Mode:&lt;br /&gt;
&lt;br /&gt;
After sending each instruction, you need to send the &#039;&#039;&#039;0A&#039;&#039;&#039; or &#039;&#039;&#039;0D&#039;&#039;&#039; end this transaction.&lt;br /&gt;
&lt;br /&gt;
[[File:SendByHeX.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ASCII Mode:&lt;br /&gt;
&lt;br /&gt;
In ASCII mode, you must check &#039;&#039;&#039;AddCrLf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:SendByASCII.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Read back&lt;br /&gt;
The execution code is: AA001501 The meaning of the code is: AA - starting code, DIR parameter 00 means read, 15 means I2C address 0x15, 01 means first LED register.&lt;br /&gt;
&lt;br /&gt;
If you use HEX mode, you can return the result in HEX mode,If you use ASCII mode, you can return the result in ASCII mode,write operation returns nothing.&lt;br /&gt;
&lt;br /&gt;
[[File:SendReturn.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Bluetooth Interface===&lt;br /&gt;
Bluetooth interface only provides &#039;&#039;&#039;LE only&#039;&#039;&#039; protocol support&lt;br /&gt;
====LED Status====&lt;br /&gt;
LED1:Link(ON) / Broadcast(Blink) / Fault(OFF)&lt;br /&gt;
&lt;br /&gt;
LED2:Busy(ON)/ Transmission(Blink) / Idle(OFF)&lt;br /&gt;
&lt;br /&gt;
====Interface Protocol====&lt;br /&gt;
Read Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 00 =&amp;gt; i2c-get || I2C_ADDR_RANGE || DATA-ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Write Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!DATA&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || *&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 01 =&amp;gt; i2c-set	 || I2C_ADDR_RANGE || DATA-ADDRESS || DATA&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Download SDK====&lt;br /&gt;
* For IOS user&lt;br /&gt;
** nRF Toolbox Download Link: [ https://apps.apple.com/cn/app/nrf-toolbox/id820906058 ]&lt;br /&gt;
* For Android user&lt;br /&gt;
** nRF Toolbox Download Link: [ https://play.google.com/store/apps/details?id=no.nordicsemi.android.nrftoolbox ]&lt;br /&gt;
* For Sources code user&lt;br /&gt;
** Android: [ https://github.com/NordicSemiconductor/Android-nRF-Toolbox ]&lt;br /&gt;
** IOS: [ https://github.com/NordicSemiconductor/IOS-nRF-Toolbox ]&lt;br /&gt;
====Development Method====&lt;br /&gt;
* 1. Download SDK from the links mentioned before and install it to IOS device or Android device.&lt;br /&gt;
* 2. Open the nRF Toolbox app&lt;br /&gt;
[[File:TIM图片20200108112710.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 3. Select &amp;quot;UART&amp;quot; icon and press &amp;quot;Edit&amp;quot; &lt;br /&gt;
[[File:TIM图片20200108112702.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112706.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 4. Select one icon and input the execution code and press OK, and then press the icon will send the code to DockerPi Nightlight board.&lt;br /&gt;
** For example: Turn on NightLight board&#039;s first LED.&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Turn on it by sending 0xFF&amp;lt;br&amp;gt;&lt;br /&gt;
The execution code is:  AA011501FF &lt;br /&gt;
The meaning of the code is: AA - starting code, DIR parameter 01 means write, 15 means I2C address 0x15, 01 means first LED register, FF eq 0xFF means Turn it on.&lt;br /&gt;
[[File:TIM图片20200108112658.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112654.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 5. Press &amp;quot;Connect&amp;quot; to scan the DockerPi-H, and select it.&lt;br /&gt;
[[File:TIM图片20200108112645.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112637.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 6.If the connection is successful, the blue LED will stop blinking and stay on.and you can see log by pressing &amp;quot;show log&amp;quot; link.&lt;br /&gt;
[[File:TIM图片20200108112625.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Product Includes==&lt;br /&gt;
* 1 x DockerPi-H BlueTooth Board &lt;br /&gt;
* 1 x Acrylic Plate&lt;br /&gt;
* 1 x 3-Pin Pin Header&lt;br /&gt;
* 4 x M2.5 Nut&lt;br /&gt;
* 4 x M2.5 Screw&lt;br /&gt;
* 4 x M2.5x6 Copper Stick&lt;br /&gt;
[[File:DOCKERPI 8.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
* Q: Should I connect  DockerPi-H to my Raspberry Pi to make it work? &lt;br /&gt;
  A: No, the DockerPi-H is seperated from Raspberry Pi, all you need to do is connect other DockerPi product such as Nightlight board or 4 channel relay board to it and control it via bluetooth.&lt;br /&gt;
* Q: Can I just using DockerPi-H to build my own project without other DockerPi product? &lt;br /&gt;
  A: No, DockerPi-H is built for DockerPi series product so that you should have another DockerPi series product at least.&lt;br /&gt;
* Q: A write I2C operation has been performed but nothing return? &lt;br /&gt;
  A: Only read operations can return.&lt;br /&gt;
* Q: Whether the UART interface can be directly connected to the RS232 connection terminal?&lt;br /&gt;
  A: The voltages are not compatible and you need to level shift.&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
* GeeekPi, dockerPi, dockerPi-H, bluetooth, BLE&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=EP-0116&amp;diff=7600</id>
		<title>EP-0116</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=EP-0116&amp;diff=7600"/>
		<updated>2020-01-09T07:24:18Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: /* LED Status */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==DockerPi-H Board ==&lt;br /&gt;
[[File:DOCKERPI 1.jpg|right|300px]]&lt;br /&gt;
&lt;br /&gt;
==Open Source Description==&lt;br /&gt;
Anyone may use the content of the white paper for non-commercial or educational purposes without permission without the permission of the source and copyright notice, but it may not be used for profit or commercial purposes without permission.&lt;br /&gt;
&lt;br /&gt;
Custom product LOGO is &#039;&#039;&#039;NOT&#039;&#039;&#039; allowed without copyright notice,Open source does not mean arbitrary use of trademarks!&lt;br /&gt;
&lt;br /&gt;
Welcome to submit links to your project(or tips),after our review, we will link your project in GitHub Page.&lt;br /&gt;
&lt;br /&gt;
Android and IOS app source code provided by NordicSemiconductor.&lt;br /&gt;
&lt;br /&gt;
==Product Description==&lt;br /&gt;
DockerPi-H is one of the DockerPi series expansion boards, which can convert I2C communication of other products in the DockerPi series to UART (TTL) / HID / BLE.&amp;lt;br&amp;gt; &lt;br /&gt;
BLE is usually used for the Internet of Things, TTL is usually used for industrial control, HID can communicate without driver.&amp;lt;br&amp;gt;&lt;br /&gt;
This product design for low power consumption, and can be maintained by only a few mA.&amp;lt;br&amp;gt; &lt;br /&gt;
DockerPi-H allows you to operate DockerPi series expansion boards without Raspberry Pi (or similar SBC).&amp;lt;br&amp;gt;&lt;br /&gt;
It can connect your personal computer to DockerPi expansion boards and also allows you to wirelessly control DockerPi expansion boards.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* Open source project (not for commercial distribution)&lt;br /&gt;
* DockerPi series products&lt;br /&gt;
* Programmable, can work with mobile phones, personal computers, industrial computers, ITX.&lt;br /&gt;
* Support BLE, HID, UART-TTL to transmit data&lt;br /&gt;
* Support BLE, UART-TTL data in ASCII mode&lt;br /&gt;
* Support UART-TTL, HID data in HEX mode&lt;br /&gt;
* HID does not require driver support&lt;br /&gt;
* It is recommended to install at the bottom of all modules&lt;br /&gt;
* Low power design&lt;br /&gt;
* BLE module provides FCC / CE certification&lt;br /&gt;
&lt;br /&gt;
==Supported platforms==&lt;br /&gt;
* 1. Tested Mobile devices : IPhone 6s Plus, HUAWEI SCM-AL09&lt;br /&gt;
* 2. Tested Platform : sscom.exe(Windows Environment), minicom(Linux Environment), pyserial module(via USB-to-TTL cable)&lt;br /&gt;
* 3. Supoort Interface : Bluetooth LE Only / USB HID / TTL UART&lt;br /&gt;
&lt;br /&gt;
==Sources Repository==&lt;br /&gt;
* [https://github.com/geeekpi/station DockerPi-H Open Sources Page]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Windows.exe CP2112 Software package for Windows]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Linux.bin CP2112 Softare package for Linux]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Mac.zip CP2112 Software package for MAC]&lt;br /&gt;
* [https://github.com/NordicSemiconductor NordicSemiconductor Open Sources Page]&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product View:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 3.jpg|left|320px]]&lt;br /&gt;
|[[File:DOCKERPI 2.jpg|none|320px]]&lt;br /&gt;
|[[File:DOCKERPI 3 2.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
* Application View:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 4.jpg|left|320px]]&lt;br /&gt;
|[[File:DOCKERPI 5.jpg|none|320px]]&lt;br /&gt;
|[[File:DOCKERPI 7.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Package Includes==&lt;br /&gt;
* 1 x 3-Pin Header  &lt;br /&gt;
* 4 x M2.5 nut&lt;br /&gt;
* 8 x M2.5 Copper stick&lt;br /&gt;
* 1 x Acrylic panel&lt;br /&gt;
* 1 x USB Micro data cable&lt;br /&gt;
&lt;br /&gt;
==How to Use==&lt;br /&gt;
===HID Interface===&lt;br /&gt;
The HID interface is implemented using CP2112, please refer to for more information.  [ &#039;&#039;&#039;[https://www.silabs.com/interface/usb-bridges/classic/device.cp2112 CP2112 Classic USB to HID Bridge]&#039;&#039;&#039; ]&lt;br /&gt;
====API Reference====&lt;br /&gt;
[[File:An496-hid-usb-to-smbus-api-specification.pdf]]&lt;br /&gt;
====Quick Reference====&lt;br /&gt;
&#039;&#039;HidSmbus_WriteRequest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function writes the specified number of bytes from the supplied buffer to the specified slave device and returns immediately after sending the request to the CP2112.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_AddressReadRequest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function intiates a read transfer to the specified slave device address and specifies the address to read from on the device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_ForceReadResponse&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function causes the device to send a read response to the host after a read transfer has been issued.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_GetReadResponse&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function returns the read response to a read request. Read and write timeouts as well as transfer retries can be set using HidSmbus_SetSmbusConfig() as described in HidSmbus_SetSmbusConfig.&lt;br /&gt;
&lt;br /&gt;
====Test Conditions====&lt;br /&gt;
DockerPi SensorHub and DockerPi Relay need to be installed on the top of DockerPi-H.&lt;br /&gt;
====Example Code(C#)====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.ComponentModel;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Drawing;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using SLAB_HID_TO_SMBUS;&lt;br /&gt;
&lt;br /&gt;
namespace WindowsFormsApp1&lt;br /&gt;
{&lt;br /&gt;
    public partial class Form1 : Form&lt;br /&gt;
    {&lt;br /&gt;
        const ushort vid = 4292;  //10C4&lt;br /&gt;
        const ushort pid = 60048; //EA90&lt;br /&gt;
        IntPtr connectedDevice;&lt;br /&gt;
&lt;br /&gt;
        const byte RelaySlaveAddress = 0x20;&lt;br /&gt;
        const byte SensorSlaveAddress = 0x2E;&lt;br /&gt;
&lt;br /&gt;
        ushort RelayStauts = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        public Form1()&lt;br /&gt;
        {&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
            uint numDevices = 0;&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_GetNumDevices(ref numDevices, vid, pid);&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_Open(ref connectedDevice, 0, vid, pid);&lt;br /&gt;
&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0x00 }, 2);&lt;br /&gt;
&lt;br /&gt;
            timer_get_temp.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void RelayButton_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            timer_get_temp.Enabled = false;&lt;br /&gt;
&lt;br /&gt;
            if (RelayStauts == 0)&lt;br /&gt;
            {&lt;br /&gt;
                RelayStauts = 1;&lt;br /&gt;
                SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0xFF }, 2);&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                RelayStauts = 0;&lt;br /&gt;
                SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0x00 }, 2);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            timer_get_temp.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void Timer_get_temp_Tick(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
            byte bytesRead = 0;&lt;br /&gt;
            byte status = 0;&lt;br /&gt;
            byte[] readbuff = new byte[61];&lt;br /&gt;
&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_AddressReadRequest(connectedDevice, SensorSlaveAddress, 1, 1, new byte[] { 0x01 });&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_ForceReadResponse(connectedDevice, 1);&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_GetReadResponse(connectedDevice, ref status, readbuff, 61, ref bytesRead);&lt;br /&gt;
&lt;br /&gt;
             if(bytesRead == 1)&lt;br /&gt;
            {&lt;br /&gt;
                progressBar.Value = readbuff[0];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===UART Interface===&lt;br /&gt;
Serial interface supports ASCII mode or HEX mode transmission,3V3 TTL as voltage reference.&lt;br /&gt;
&lt;br /&gt;
You can solder headers or use a jumper wire to connect to your device.&lt;br /&gt;
&lt;br /&gt;
Mode:&#039;&#039;&#039;115200 8N1&#039;&#039;&#039;&lt;br /&gt;
====Interface Protocol====&lt;br /&gt;
Read Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!END&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 00 =&amp;gt; i2c-get || I2C_ADDR_RANGE || DATA-ADDRESS || 0A/0D&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Write Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!DATA!!END&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || * || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 01 =&amp;gt; i2c-set	 || I2C_ADDR_RANGE || DATA-ADDRESS || DATA || 0A/0D&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====How to Communicate====&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Turn on it by sending 0xFF&lt;br /&gt;
The execution code is: AA011501FF The meaning of the code is: AA - starting code, DIR parameter 01 means write, 15 means I2C address 0x15, 01 means first LED register, FF eq 0xFF means Turn it on.&lt;br /&gt;
&lt;br /&gt;
HEX Mode:&lt;br /&gt;
&lt;br /&gt;
After sending each instruction, you need to send the &#039;&#039;&#039;0A&#039;&#039;&#039; or &#039;&#039;&#039;0D&#039;&#039;&#039; end this transaction.&lt;br /&gt;
&lt;br /&gt;
[[File:SendByHeX.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ASCII Mode:&lt;br /&gt;
&lt;br /&gt;
In ASCII mode, you must check &#039;&#039;&#039;AddCrLf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:SendByASCII.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Read back&lt;br /&gt;
The execution code is: AA001501 The meaning of the code is: AA - starting code, DIR parameter 00 means read, 15 means I2C address 0x15, 01 means first LED register.&lt;br /&gt;
&lt;br /&gt;
If you use HEX mode, you can return the result in HEX mode,If you use ASCII mode, you can return the result in ASCII mode,write operation returns nothing.&lt;br /&gt;
&lt;br /&gt;
[[File:SendReturn.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Bluetooth Interface===&lt;br /&gt;
Bluetooth interface only provides &#039;&#039;&#039;LE only&#039;&#039;&#039; protocol support&lt;br /&gt;
====LED Status====&lt;br /&gt;
LED1:Link(ON) / Broadcast(Blink) / Fault(OFF)&lt;br /&gt;
&lt;br /&gt;
LED2:Transmission(Blink) IDLE(OFF)&lt;br /&gt;
&lt;br /&gt;
====Interface Protocol====&lt;br /&gt;
Read Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 00 =&amp;gt; i2c-get || I2C_ADDR_RANGE || DATA-ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Write Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!DATA&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || *&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 01 =&amp;gt; i2c-set	 || I2C_ADDR_RANGE || DATA-ADDRESS || DATA&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Download SDK====&lt;br /&gt;
* For IOS user&lt;br /&gt;
** nRF Toolbox Download Link: [ https://apps.apple.com/cn/app/nrf-toolbox/id820906058 ]&lt;br /&gt;
* For Android user&lt;br /&gt;
** nRF Toolbox Download Link: [ https://play.google.com/store/apps/details?id=no.nordicsemi.android.nrftoolbox ]&lt;br /&gt;
* For Sources code user&lt;br /&gt;
** Android: [ https://github.com/NordicSemiconductor/Android-nRF-Toolbox ]&lt;br /&gt;
** IOS: [ https://github.com/NordicSemiconductor/IOS-nRF-Toolbox ]&lt;br /&gt;
====Development Method====&lt;br /&gt;
* 1. Download SDK from the links mentioned before and install it to IOS device or Android device.&lt;br /&gt;
* 2. Open the nRF Toolbox app&lt;br /&gt;
[[File:TIM图片20200108112710.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 3. Select &amp;quot;UART&amp;quot; icon and press &amp;quot;Edit&amp;quot; &lt;br /&gt;
[[File:TIM图片20200108112702.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112706.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 4. Select one icon and input the execution code and press OK, and then press the icon will send the code to DockerPi Nightlight board.&lt;br /&gt;
** For example: Turn on NightLight board&#039;s first LED.&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Turn on it by sending 0xFF&amp;lt;br&amp;gt;&lt;br /&gt;
The execution code is:  AA011501FF &lt;br /&gt;
The meaning of the code is: AA - starting code, DIR parameter 01 means write, 15 means I2C address 0x15, 01 means first LED register, FF eq 0xFF means Turn it on.&lt;br /&gt;
[[File:TIM图片20200108112658.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112654.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 5. Press &amp;quot;Connect&amp;quot; to scan the DockerPi-H, and select it.&lt;br /&gt;
[[File:TIM图片20200108112645.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112637.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 6.If the connection is successful, the blue LED will stop blinking and stay on.and you can see log by pressing &amp;quot;show log&amp;quot; link.&lt;br /&gt;
[[File:TIM图片20200108112625.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Product Includes==&lt;br /&gt;
* 1 x DockerPi-H BlueTooth Board &lt;br /&gt;
* 1 x Acrylic Plate&lt;br /&gt;
* 1 x 3-Pin Pin Header&lt;br /&gt;
* 4 x M2.5 Nut&lt;br /&gt;
* 4 x M2.5 Screw&lt;br /&gt;
* 4 x M2.5x6 Copper Stick&lt;br /&gt;
[[File:DOCKERPI 8.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
* Q: Should I connect  DockerPi-H to my Raspberry Pi to make it work? &lt;br /&gt;
  A: No, the DockerPi-H is seperated from Raspberry Pi, all you need to do is connect other DockerPi product such as Nightlight board or 4 channel relay board to it and control it via bluetooth.&lt;br /&gt;
* Q: Can I just using DockerPi-H to build my own project without other DockerPi product? &lt;br /&gt;
  A: No, DockerPi-H is built for DockerPi series product so that you should have another DockerPi series product at least.&lt;br /&gt;
* Q: A write I2C operation has been performed but nothing return? &lt;br /&gt;
  A: Only read operations can return.&lt;br /&gt;
* Q: Whether the UART interface can be directly connected to the RS232 connection terminal?&lt;br /&gt;
  A: The voltages are not compatible and you need to level shift.&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
* GeeekPi, dockerPi, dockerPi-H, bluetooth, BLE&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=EP-0116&amp;diff=7599</id>
		<title>EP-0116</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=EP-0116&amp;diff=7599"/>
		<updated>2020-01-09T07:23:06Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: /* LED Status */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==DockerPi-H Board ==&lt;br /&gt;
[[File:DOCKERPI 1.jpg|right|300px]]&lt;br /&gt;
&lt;br /&gt;
==Open Source Description==&lt;br /&gt;
Anyone may use the content of the white paper for non-commercial or educational purposes without permission without the permission of the source and copyright notice, but it may not be used for profit or commercial purposes without permission.&lt;br /&gt;
&lt;br /&gt;
Custom product LOGO is &#039;&#039;&#039;NOT&#039;&#039;&#039; allowed without copyright notice,Open source does not mean arbitrary use of trademarks!&lt;br /&gt;
&lt;br /&gt;
Welcome to submit links to your project(or tips),after our review, we will link your project in GitHub Page.&lt;br /&gt;
&lt;br /&gt;
Android and IOS app source code provided by NordicSemiconductor.&lt;br /&gt;
&lt;br /&gt;
==Product Description==&lt;br /&gt;
DockerPi-H is one of the DockerPi series expansion boards, which can convert I2C communication of other products in the DockerPi series to UART (TTL) / HID / BLE.&amp;lt;br&amp;gt; &lt;br /&gt;
BLE is usually used for the Internet of Things, TTL is usually used for industrial control, HID can communicate without driver.&amp;lt;br&amp;gt;&lt;br /&gt;
This product design for low power consumption, and can be maintained by only a few mA.&amp;lt;br&amp;gt; &lt;br /&gt;
DockerPi-H allows you to operate DockerPi series expansion boards without Raspberry Pi (or similar SBC).&amp;lt;br&amp;gt;&lt;br /&gt;
It can connect your personal computer to DockerPi expansion boards and also allows you to wirelessly control DockerPi expansion boards.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* Open source project (not for commercial distribution)&lt;br /&gt;
* DockerPi series products&lt;br /&gt;
* Programmable, can work with mobile phones, personal computers, industrial computers, ITX.&lt;br /&gt;
* Support BLE, HID, UART-TTL to transmit data&lt;br /&gt;
* Support BLE, UART-TTL data in ASCII mode&lt;br /&gt;
* Support UART-TTL, HID data in HEX mode&lt;br /&gt;
* HID does not require driver support&lt;br /&gt;
* It is recommended to install at the bottom of all modules&lt;br /&gt;
* Low power design&lt;br /&gt;
* BLE module provides FCC / CE certification&lt;br /&gt;
&lt;br /&gt;
==Supported platforms==&lt;br /&gt;
* 1. Tested Mobile devices : IPhone 6s Plus, HUAWEI SCM-AL09&lt;br /&gt;
* 2. Tested Platform : sscom.exe(Windows Environment), minicom(Linux Environment), pyserial module(via USB-to-TTL cable)&lt;br /&gt;
* 3. Supoort Interface : Bluetooth LE Only / USB HID / TTL UART&lt;br /&gt;
&lt;br /&gt;
==Sources Repository==&lt;br /&gt;
* [https://github.com/geeekpi/station DockerPi-H Open Sources Page]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Windows.exe CP2112 Software package for Windows]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Linux.bin CP2112 Softare package for Linux]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Mac.zip CP2112 Software package for MAC]&lt;br /&gt;
* [https://github.com/NordicSemiconductor NordicSemiconductor Open Sources Page]&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product View:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 3.jpg|left|320px]]&lt;br /&gt;
|[[File:DOCKERPI 2.jpg|none|320px]]&lt;br /&gt;
|[[File:DOCKERPI 3 2.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
* Application View:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 4.jpg|left|320px]]&lt;br /&gt;
|[[File:DOCKERPI 5.jpg|none|320px]]&lt;br /&gt;
|[[File:DOCKERPI 7.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Package Includes==&lt;br /&gt;
* 1 x 3-Pin Header  &lt;br /&gt;
* 4 x M2.5 nut&lt;br /&gt;
* 8 x M2.5 Copper stick&lt;br /&gt;
* 1 x Acrylic panel&lt;br /&gt;
* 1 x USB Micro data cable&lt;br /&gt;
&lt;br /&gt;
==How to Use==&lt;br /&gt;
===HID Interface===&lt;br /&gt;
The HID interface is implemented using CP2112, please refer to for more information.  [ &#039;&#039;&#039;[https://www.silabs.com/interface/usb-bridges/classic/device.cp2112 CP2112 Classic USB to HID Bridge]&#039;&#039;&#039; ]&lt;br /&gt;
====API Reference====&lt;br /&gt;
[[File:An496-hid-usb-to-smbus-api-specification.pdf]]&lt;br /&gt;
====Quick Reference====&lt;br /&gt;
&#039;&#039;HidSmbus_WriteRequest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function writes the specified number of bytes from the supplied buffer to the specified slave device and returns immediately after sending the request to the CP2112.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_AddressReadRequest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function intiates a read transfer to the specified slave device address and specifies the address to read from on the device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_ForceReadResponse&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function causes the device to send a read response to the host after a read transfer has been issued.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_GetReadResponse&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function returns the read response to a read request. Read and write timeouts as well as transfer retries can be set using HidSmbus_SetSmbusConfig() as described in HidSmbus_SetSmbusConfig.&lt;br /&gt;
&lt;br /&gt;
====Test Conditions====&lt;br /&gt;
DockerPi SensorHub and DockerPi Relay need to be installed on the top of DockerPi-H.&lt;br /&gt;
====Example Code(C#)====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.ComponentModel;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Drawing;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using SLAB_HID_TO_SMBUS;&lt;br /&gt;
&lt;br /&gt;
namespace WindowsFormsApp1&lt;br /&gt;
{&lt;br /&gt;
    public partial class Form1 : Form&lt;br /&gt;
    {&lt;br /&gt;
        const ushort vid = 4292;  //10C4&lt;br /&gt;
        const ushort pid = 60048; //EA90&lt;br /&gt;
        IntPtr connectedDevice;&lt;br /&gt;
&lt;br /&gt;
        const byte RelaySlaveAddress = 0x20;&lt;br /&gt;
        const byte SensorSlaveAddress = 0x2E;&lt;br /&gt;
&lt;br /&gt;
        ushort RelayStauts = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        public Form1()&lt;br /&gt;
        {&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
            uint numDevices = 0;&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_GetNumDevices(ref numDevices, vid, pid);&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_Open(ref connectedDevice, 0, vid, pid);&lt;br /&gt;
&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0x00 }, 2);&lt;br /&gt;
&lt;br /&gt;
            timer_get_temp.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void RelayButton_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            timer_get_temp.Enabled = false;&lt;br /&gt;
&lt;br /&gt;
            if (RelayStauts == 0)&lt;br /&gt;
            {&lt;br /&gt;
                RelayStauts = 1;&lt;br /&gt;
                SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0xFF }, 2);&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                RelayStauts = 0;&lt;br /&gt;
                SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0x00 }, 2);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            timer_get_temp.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void Timer_get_temp_Tick(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
            byte bytesRead = 0;&lt;br /&gt;
            byte status = 0;&lt;br /&gt;
            byte[] readbuff = new byte[61];&lt;br /&gt;
&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_AddressReadRequest(connectedDevice, SensorSlaveAddress, 1, 1, new byte[] { 0x01 });&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_ForceReadResponse(connectedDevice, 1);&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_GetReadResponse(connectedDevice, ref status, readbuff, 61, ref bytesRead);&lt;br /&gt;
&lt;br /&gt;
             if(bytesRead == 1)&lt;br /&gt;
            {&lt;br /&gt;
                progressBar.Value = readbuff[0];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===UART Interface===&lt;br /&gt;
Serial interface supports ASCII mode or HEX mode transmission,3V3 TTL as voltage reference.&lt;br /&gt;
&lt;br /&gt;
You can solder headers or use a jumper wire to connect to your device.&lt;br /&gt;
&lt;br /&gt;
Mode:&#039;&#039;&#039;115200 8N1&#039;&#039;&#039;&lt;br /&gt;
====Interface Protocol====&lt;br /&gt;
Read Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!END&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 00 =&amp;gt; i2c-get || I2C_ADDR_RANGE || DATA-ADDRESS || 0A/0D&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Write Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!DATA!!END&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || * || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 01 =&amp;gt; i2c-set	 || I2C_ADDR_RANGE || DATA-ADDRESS || DATA || 0A/0D&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====How to Communicate====&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Turn on it by sending 0xFF&lt;br /&gt;
The execution code is: AA011501FF The meaning of the code is: AA - starting code, DIR parameter 01 means write, 15 means I2C address 0x15, 01 means first LED register, FF eq 0xFF means Turn it on.&lt;br /&gt;
&lt;br /&gt;
HEX Mode:&lt;br /&gt;
&lt;br /&gt;
After sending each instruction, you need to send the &#039;&#039;&#039;0A&#039;&#039;&#039; or &#039;&#039;&#039;0D&#039;&#039;&#039; end this transaction.&lt;br /&gt;
&lt;br /&gt;
[[File:SendByHeX.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ASCII Mode:&lt;br /&gt;
&lt;br /&gt;
In ASCII mode, you must check &#039;&#039;&#039;AddCrLf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:SendByASCII.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Read back&lt;br /&gt;
The execution code is: AA001501 The meaning of the code is: AA - starting code, DIR parameter 00 means read, 15 means I2C address 0x15, 01 means first LED register.&lt;br /&gt;
&lt;br /&gt;
If you use HEX mode, you can return the result in HEX mode,If you use ASCII mode, you can return the result in ASCII mode,write operation returns nothing.&lt;br /&gt;
&lt;br /&gt;
[[File:SendReturn.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Bluetooth Interface===&lt;br /&gt;
Bluetooth interface only provides &#039;&#039;&#039;LE only&#039;&#039;&#039; protocol support&lt;br /&gt;
====LED Status====&lt;br /&gt;
LED1:Link(ON) / Broadcast(Blink) / Fault(OFF)&lt;br /&gt;
&lt;br /&gt;
LED2:DATA,Lights up when data is being transmitted.&lt;br /&gt;
&lt;br /&gt;
====Interface Protocol====&lt;br /&gt;
Read Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 00 =&amp;gt; i2c-get || I2C_ADDR_RANGE || DATA-ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Write Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!DATA&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || *&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 01 =&amp;gt; i2c-set	 || I2C_ADDR_RANGE || DATA-ADDRESS || DATA&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Download SDK====&lt;br /&gt;
* For IOS user&lt;br /&gt;
** nRF Toolbox Download Link: [ https://apps.apple.com/cn/app/nrf-toolbox/id820906058 ]&lt;br /&gt;
* For Android user&lt;br /&gt;
** nRF Toolbox Download Link: [ https://play.google.com/store/apps/details?id=no.nordicsemi.android.nrftoolbox ]&lt;br /&gt;
* For Sources code user&lt;br /&gt;
** Android: [ https://github.com/NordicSemiconductor/Android-nRF-Toolbox ]&lt;br /&gt;
** IOS: [ https://github.com/NordicSemiconductor/IOS-nRF-Toolbox ]&lt;br /&gt;
====Development Method====&lt;br /&gt;
* 1. Download SDK from the links mentioned before and install it to IOS device or Android device.&lt;br /&gt;
* 2. Open the nRF Toolbox app&lt;br /&gt;
[[File:TIM图片20200108112710.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 3. Select &amp;quot;UART&amp;quot; icon and press &amp;quot;Edit&amp;quot; &lt;br /&gt;
[[File:TIM图片20200108112702.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112706.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 4. Select one icon and input the execution code and press OK, and then press the icon will send the code to DockerPi Nightlight board.&lt;br /&gt;
** For example: Turn on NightLight board&#039;s first LED.&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Turn on it by sending 0xFF&amp;lt;br&amp;gt;&lt;br /&gt;
The execution code is:  AA011501FF &lt;br /&gt;
The meaning of the code is: AA - starting code, DIR parameter 01 means write, 15 means I2C address 0x15, 01 means first LED register, FF eq 0xFF means Turn it on.&lt;br /&gt;
[[File:TIM图片20200108112658.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112654.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 5. Press &amp;quot;Connect&amp;quot; to scan the DockerPi-H, and select it.&lt;br /&gt;
[[File:TIM图片20200108112645.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112637.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 6.If the connection is successful, the blue LED will stop blinking and stay on.and you can see log by pressing &amp;quot;show log&amp;quot; link.&lt;br /&gt;
[[File:TIM图片20200108112625.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Product Includes==&lt;br /&gt;
* 1 x DockerPi-H BlueTooth Board &lt;br /&gt;
* 1 x Acrylic Plate&lt;br /&gt;
* 1 x 3-Pin Pin Header&lt;br /&gt;
* 4 x M2.5 Nut&lt;br /&gt;
* 4 x M2.5 Screw&lt;br /&gt;
* 4 x M2.5x6 Copper Stick&lt;br /&gt;
[[File:DOCKERPI 8.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
* Q: Should I connect  DockerPi-H to my Raspberry Pi to make it work? &lt;br /&gt;
  A: No, the DockerPi-H is seperated from Raspberry Pi, all you need to do is connect other DockerPi product such as Nightlight board or 4 channel relay board to it and control it via bluetooth.&lt;br /&gt;
* Q: Can I just using DockerPi-H to build my own project without other DockerPi product? &lt;br /&gt;
  A: No, DockerPi-H is built for DockerPi series product so that you should have another DockerPi series product at least.&lt;br /&gt;
* Q: A write I2C operation has been performed but nothing return? &lt;br /&gt;
  A: Only read operations can return.&lt;br /&gt;
* Q: Whether the UART interface can be directly connected to the RS232 connection terminal?&lt;br /&gt;
  A: The voltages are not compatible and you need to level shift.&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
* GeeekPi, dockerPi, dockerPi-H, bluetooth, BLE&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=EP-0116&amp;diff=7598</id>
		<title>EP-0116</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=EP-0116&amp;diff=7598"/>
		<updated>2020-01-09T07:22:59Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: /* LED Status */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==DockerPi-H Board ==&lt;br /&gt;
[[File:DOCKERPI 1.jpg|right|300px]]&lt;br /&gt;
&lt;br /&gt;
==Open Source Description==&lt;br /&gt;
Anyone may use the content of the white paper for non-commercial or educational purposes without permission without the permission of the source and copyright notice, but it may not be used for profit or commercial purposes without permission.&lt;br /&gt;
&lt;br /&gt;
Custom product LOGO is &#039;&#039;&#039;NOT&#039;&#039;&#039; allowed without copyright notice,Open source does not mean arbitrary use of trademarks!&lt;br /&gt;
&lt;br /&gt;
Welcome to submit links to your project(or tips),after our review, we will link your project in GitHub Page.&lt;br /&gt;
&lt;br /&gt;
Android and IOS app source code provided by NordicSemiconductor.&lt;br /&gt;
&lt;br /&gt;
==Product Description==&lt;br /&gt;
DockerPi-H is one of the DockerPi series expansion boards, which can convert I2C communication of other products in the DockerPi series to UART (TTL) / HID / BLE.&amp;lt;br&amp;gt; &lt;br /&gt;
BLE is usually used for the Internet of Things, TTL is usually used for industrial control, HID can communicate without driver.&amp;lt;br&amp;gt;&lt;br /&gt;
This product design for low power consumption, and can be maintained by only a few mA.&amp;lt;br&amp;gt; &lt;br /&gt;
DockerPi-H allows you to operate DockerPi series expansion boards without Raspberry Pi (or similar SBC).&amp;lt;br&amp;gt;&lt;br /&gt;
It can connect your personal computer to DockerPi expansion boards and also allows you to wirelessly control DockerPi expansion boards.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* Open source project (not for commercial distribution)&lt;br /&gt;
* DockerPi series products&lt;br /&gt;
* Programmable, can work with mobile phones, personal computers, industrial computers, ITX.&lt;br /&gt;
* Support BLE, HID, UART-TTL to transmit data&lt;br /&gt;
* Support BLE, UART-TTL data in ASCII mode&lt;br /&gt;
* Support UART-TTL, HID data in HEX mode&lt;br /&gt;
* HID does not require driver support&lt;br /&gt;
* It is recommended to install at the bottom of all modules&lt;br /&gt;
* Low power design&lt;br /&gt;
* BLE module provides FCC / CE certification&lt;br /&gt;
&lt;br /&gt;
==Supported platforms==&lt;br /&gt;
* 1. Tested Mobile devices : IPhone 6s Plus, HUAWEI SCM-AL09&lt;br /&gt;
* 2. Tested Platform : sscom.exe(Windows Environment), minicom(Linux Environment), pyserial module(via USB-to-TTL cable)&lt;br /&gt;
* 3. Supoort Interface : Bluetooth LE Only / USB HID / TTL UART&lt;br /&gt;
&lt;br /&gt;
==Sources Repository==&lt;br /&gt;
* [https://github.com/geeekpi/station DockerPi-H Open Sources Page]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Windows.exe CP2112 Software package for Windows]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Linux.bin CP2112 Softare package for Linux]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Mac.zip CP2112 Software package for MAC]&lt;br /&gt;
* [https://github.com/NordicSemiconductor NordicSemiconductor Open Sources Page]&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product View:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 3.jpg|left|320px]]&lt;br /&gt;
|[[File:DOCKERPI 2.jpg|none|320px]]&lt;br /&gt;
|[[File:DOCKERPI 3 2.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
* Application View:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 4.jpg|left|320px]]&lt;br /&gt;
|[[File:DOCKERPI 5.jpg|none|320px]]&lt;br /&gt;
|[[File:DOCKERPI 7.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Package Includes==&lt;br /&gt;
* 1 x 3-Pin Header  &lt;br /&gt;
* 4 x M2.5 nut&lt;br /&gt;
* 8 x M2.5 Copper stick&lt;br /&gt;
* 1 x Acrylic panel&lt;br /&gt;
* 1 x USB Micro data cable&lt;br /&gt;
&lt;br /&gt;
==How to Use==&lt;br /&gt;
===HID Interface===&lt;br /&gt;
The HID interface is implemented using CP2112, please refer to for more information.  [ &#039;&#039;&#039;[https://www.silabs.com/interface/usb-bridges/classic/device.cp2112 CP2112 Classic USB to HID Bridge]&#039;&#039;&#039; ]&lt;br /&gt;
====API Reference====&lt;br /&gt;
[[File:An496-hid-usb-to-smbus-api-specification.pdf]]&lt;br /&gt;
====Quick Reference====&lt;br /&gt;
&#039;&#039;HidSmbus_WriteRequest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function writes the specified number of bytes from the supplied buffer to the specified slave device and returns immediately after sending the request to the CP2112.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_AddressReadRequest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function intiates a read transfer to the specified slave device address and specifies the address to read from on the device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_ForceReadResponse&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function causes the device to send a read response to the host after a read transfer has been issued.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_GetReadResponse&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function returns the read response to a read request. Read and write timeouts as well as transfer retries can be set using HidSmbus_SetSmbusConfig() as described in HidSmbus_SetSmbusConfig.&lt;br /&gt;
&lt;br /&gt;
====Test Conditions====&lt;br /&gt;
DockerPi SensorHub and DockerPi Relay need to be installed on the top of DockerPi-H.&lt;br /&gt;
====Example Code(C#)====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.ComponentModel;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Drawing;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using SLAB_HID_TO_SMBUS;&lt;br /&gt;
&lt;br /&gt;
namespace WindowsFormsApp1&lt;br /&gt;
{&lt;br /&gt;
    public partial class Form1 : Form&lt;br /&gt;
    {&lt;br /&gt;
        const ushort vid = 4292;  //10C4&lt;br /&gt;
        const ushort pid = 60048; //EA90&lt;br /&gt;
        IntPtr connectedDevice;&lt;br /&gt;
&lt;br /&gt;
        const byte RelaySlaveAddress = 0x20;&lt;br /&gt;
        const byte SensorSlaveAddress = 0x2E;&lt;br /&gt;
&lt;br /&gt;
        ushort RelayStauts = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        public Form1()&lt;br /&gt;
        {&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
            uint numDevices = 0;&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_GetNumDevices(ref numDevices, vid, pid);&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_Open(ref connectedDevice, 0, vid, pid);&lt;br /&gt;
&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0x00 }, 2);&lt;br /&gt;
&lt;br /&gt;
            timer_get_temp.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void RelayButton_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            timer_get_temp.Enabled = false;&lt;br /&gt;
&lt;br /&gt;
            if (RelayStauts == 0)&lt;br /&gt;
            {&lt;br /&gt;
                RelayStauts = 1;&lt;br /&gt;
                SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0xFF }, 2);&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                RelayStauts = 0;&lt;br /&gt;
                SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0x00 }, 2);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            timer_get_temp.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void Timer_get_temp_Tick(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
            byte bytesRead = 0;&lt;br /&gt;
            byte status = 0;&lt;br /&gt;
            byte[] readbuff = new byte[61];&lt;br /&gt;
&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_AddressReadRequest(connectedDevice, SensorSlaveAddress, 1, 1, new byte[] { 0x01 });&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_ForceReadResponse(connectedDevice, 1);&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_GetReadResponse(connectedDevice, ref status, readbuff, 61, ref bytesRead);&lt;br /&gt;
&lt;br /&gt;
             if(bytesRead == 1)&lt;br /&gt;
            {&lt;br /&gt;
                progressBar.Value = readbuff[0];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===UART Interface===&lt;br /&gt;
Serial interface supports ASCII mode or HEX mode transmission,3V3 TTL as voltage reference.&lt;br /&gt;
&lt;br /&gt;
You can solder headers or use a jumper wire to connect to your device.&lt;br /&gt;
&lt;br /&gt;
Mode:&#039;&#039;&#039;115200 8N1&#039;&#039;&#039;&lt;br /&gt;
====Interface Protocol====&lt;br /&gt;
Read Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!END&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 00 =&amp;gt; i2c-get || I2C_ADDR_RANGE || DATA-ADDRESS || 0A/0D&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Write Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!DATA!!END&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || * || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 01 =&amp;gt; i2c-set	 || I2C_ADDR_RANGE || DATA-ADDRESS || DATA || 0A/0D&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====How to Communicate====&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Turn on it by sending 0xFF&lt;br /&gt;
The execution code is: AA011501FF The meaning of the code is: AA - starting code, DIR parameter 01 means write, 15 means I2C address 0x15, 01 means first LED register, FF eq 0xFF means Turn it on.&lt;br /&gt;
&lt;br /&gt;
HEX Mode:&lt;br /&gt;
&lt;br /&gt;
After sending each instruction, you need to send the &#039;&#039;&#039;0A&#039;&#039;&#039; or &#039;&#039;&#039;0D&#039;&#039;&#039; end this transaction.&lt;br /&gt;
&lt;br /&gt;
[[File:SendByHeX.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ASCII Mode:&lt;br /&gt;
&lt;br /&gt;
In ASCII mode, you must check &#039;&#039;&#039;AddCrLf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:SendByASCII.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Read back&lt;br /&gt;
The execution code is: AA001501 The meaning of the code is: AA - starting code, DIR parameter 00 means read, 15 means I2C address 0x15, 01 means first LED register.&lt;br /&gt;
&lt;br /&gt;
If you use HEX mode, you can return the result in HEX mode,If you use ASCII mode, you can return the result in ASCII mode,write operation returns nothing.&lt;br /&gt;
&lt;br /&gt;
[[File:SendReturn.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Bluetooth Interface===&lt;br /&gt;
Bluetooth interface only provides &#039;&#039;&#039;LE only&#039;&#039;&#039; protocol support&lt;br /&gt;
====LED Status====&lt;br /&gt;
LED1:Link(ON) / Broadcast(Blink) / Fault(OFF)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LED2:DATA,Lights up when data is being transmitted.&lt;br /&gt;
&lt;br /&gt;
====Interface Protocol====&lt;br /&gt;
Read Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 00 =&amp;gt; i2c-get || I2C_ADDR_RANGE || DATA-ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Write Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!DATA&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || *&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 01 =&amp;gt; i2c-set	 || I2C_ADDR_RANGE || DATA-ADDRESS || DATA&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Download SDK====&lt;br /&gt;
* For IOS user&lt;br /&gt;
** nRF Toolbox Download Link: [ https://apps.apple.com/cn/app/nrf-toolbox/id820906058 ]&lt;br /&gt;
* For Android user&lt;br /&gt;
** nRF Toolbox Download Link: [ https://play.google.com/store/apps/details?id=no.nordicsemi.android.nrftoolbox ]&lt;br /&gt;
* For Sources code user&lt;br /&gt;
** Android: [ https://github.com/NordicSemiconductor/Android-nRF-Toolbox ]&lt;br /&gt;
** IOS: [ https://github.com/NordicSemiconductor/IOS-nRF-Toolbox ]&lt;br /&gt;
====Development Method====&lt;br /&gt;
* 1. Download SDK from the links mentioned before and install it to IOS device or Android device.&lt;br /&gt;
* 2. Open the nRF Toolbox app&lt;br /&gt;
[[File:TIM图片20200108112710.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 3. Select &amp;quot;UART&amp;quot; icon and press &amp;quot;Edit&amp;quot; &lt;br /&gt;
[[File:TIM图片20200108112702.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112706.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 4. Select one icon and input the execution code and press OK, and then press the icon will send the code to DockerPi Nightlight board.&lt;br /&gt;
** For example: Turn on NightLight board&#039;s first LED.&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Turn on it by sending 0xFF&amp;lt;br&amp;gt;&lt;br /&gt;
The execution code is:  AA011501FF &lt;br /&gt;
The meaning of the code is: AA - starting code, DIR parameter 01 means write, 15 means I2C address 0x15, 01 means first LED register, FF eq 0xFF means Turn it on.&lt;br /&gt;
[[File:TIM图片20200108112658.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112654.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 5. Press &amp;quot;Connect&amp;quot; to scan the DockerPi-H, and select it.&lt;br /&gt;
[[File:TIM图片20200108112645.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112637.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 6.If the connection is successful, the blue LED will stop blinking and stay on.and you can see log by pressing &amp;quot;show log&amp;quot; link.&lt;br /&gt;
[[File:TIM图片20200108112625.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Product Includes==&lt;br /&gt;
* 1 x DockerPi-H BlueTooth Board &lt;br /&gt;
* 1 x Acrylic Plate&lt;br /&gt;
* 1 x 3-Pin Pin Header&lt;br /&gt;
* 4 x M2.5 Nut&lt;br /&gt;
* 4 x M2.5 Screw&lt;br /&gt;
* 4 x M2.5x6 Copper Stick&lt;br /&gt;
[[File:DOCKERPI 8.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
* Q: Should I connect  DockerPi-H to my Raspberry Pi to make it work? &lt;br /&gt;
  A: No, the DockerPi-H is seperated from Raspberry Pi, all you need to do is connect other DockerPi product such as Nightlight board or 4 channel relay board to it and control it via bluetooth.&lt;br /&gt;
* Q: Can I just using DockerPi-H to build my own project without other DockerPi product? &lt;br /&gt;
  A: No, DockerPi-H is built for DockerPi series product so that you should have another DockerPi series product at least.&lt;br /&gt;
* Q: A write I2C operation has been performed but nothing return? &lt;br /&gt;
  A: Only read operations can return.&lt;br /&gt;
* Q: Whether the UART interface can be directly connected to the RS232 connection terminal?&lt;br /&gt;
  A: The voltages are not compatible and you need to level shift.&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
* GeeekPi, dockerPi, dockerPi-H, bluetooth, BLE&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=EP-0116&amp;diff=7597</id>
		<title>EP-0116</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=EP-0116&amp;diff=7597"/>
		<updated>2020-01-09T07:22:48Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: /* Bluetooth Interface */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==DockerPi-H Board ==&lt;br /&gt;
[[File:DOCKERPI 1.jpg|right|300px]]&lt;br /&gt;
&lt;br /&gt;
==Open Source Description==&lt;br /&gt;
Anyone may use the content of the white paper for non-commercial or educational purposes without permission without the permission of the source and copyright notice, but it may not be used for profit or commercial purposes without permission.&lt;br /&gt;
&lt;br /&gt;
Custom product LOGO is &#039;&#039;&#039;NOT&#039;&#039;&#039; allowed without copyright notice,Open source does not mean arbitrary use of trademarks!&lt;br /&gt;
&lt;br /&gt;
Welcome to submit links to your project(or tips),after our review, we will link your project in GitHub Page.&lt;br /&gt;
&lt;br /&gt;
Android and IOS app source code provided by NordicSemiconductor.&lt;br /&gt;
&lt;br /&gt;
==Product Description==&lt;br /&gt;
DockerPi-H is one of the DockerPi series expansion boards, which can convert I2C communication of other products in the DockerPi series to UART (TTL) / HID / BLE.&amp;lt;br&amp;gt; &lt;br /&gt;
BLE is usually used for the Internet of Things, TTL is usually used for industrial control, HID can communicate without driver.&amp;lt;br&amp;gt;&lt;br /&gt;
This product design for low power consumption, and can be maintained by only a few mA.&amp;lt;br&amp;gt; &lt;br /&gt;
DockerPi-H allows you to operate DockerPi series expansion boards without Raspberry Pi (or similar SBC).&amp;lt;br&amp;gt;&lt;br /&gt;
It can connect your personal computer to DockerPi expansion boards and also allows you to wirelessly control DockerPi expansion boards.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* Open source project (not for commercial distribution)&lt;br /&gt;
* DockerPi series products&lt;br /&gt;
* Programmable, can work with mobile phones, personal computers, industrial computers, ITX.&lt;br /&gt;
* Support BLE, HID, UART-TTL to transmit data&lt;br /&gt;
* Support BLE, UART-TTL data in ASCII mode&lt;br /&gt;
* Support UART-TTL, HID data in HEX mode&lt;br /&gt;
* HID does not require driver support&lt;br /&gt;
* It is recommended to install at the bottom of all modules&lt;br /&gt;
* Low power design&lt;br /&gt;
* BLE module provides FCC / CE certification&lt;br /&gt;
&lt;br /&gt;
==Supported platforms==&lt;br /&gt;
* 1. Tested Mobile devices : IPhone 6s Plus, HUAWEI SCM-AL09&lt;br /&gt;
* 2. Tested Platform : sscom.exe(Windows Environment), minicom(Linux Environment), pyserial module(via USB-to-TTL cable)&lt;br /&gt;
* 3. Supoort Interface : Bluetooth LE Only / USB HID / TTL UART&lt;br /&gt;
&lt;br /&gt;
==Sources Repository==&lt;br /&gt;
* [https://github.com/geeekpi/station DockerPi-H Open Sources Page]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Windows.exe CP2112 Software package for Windows]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Linux.bin CP2112 Softare package for Linux]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Mac.zip CP2112 Software package for MAC]&lt;br /&gt;
* [https://github.com/NordicSemiconductor NordicSemiconductor Open Sources Page]&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product View:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 3.jpg|left|320px]]&lt;br /&gt;
|[[File:DOCKERPI 2.jpg|none|320px]]&lt;br /&gt;
|[[File:DOCKERPI 3 2.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
* Application View:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 4.jpg|left|320px]]&lt;br /&gt;
|[[File:DOCKERPI 5.jpg|none|320px]]&lt;br /&gt;
|[[File:DOCKERPI 7.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Package Includes==&lt;br /&gt;
* 1 x 3-Pin Header  &lt;br /&gt;
* 4 x M2.5 nut&lt;br /&gt;
* 8 x M2.5 Copper stick&lt;br /&gt;
* 1 x Acrylic panel&lt;br /&gt;
* 1 x USB Micro data cable&lt;br /&gt;
&lt;br /&gt;
==How to Use==&lt;br /&gt;
===HID Interface===&lt;br /&gt;
The HID interface is implemented using CP2112, please refer to for more information.  [ &#039;&#039;&#039;[https://www.silabs.com/interface/usb-bridges/classic/device.cp2112 CP2112 Classic USB to HID Bridge]&#039;&#039;&#039; ]&lt;br /&gt;
====API Reference====&lt;br /&gt;
[[File:An496-hid-usb-to-smbus-api-specification.pdf]]&lt;br /&gt;
====Quick Reference====&lt;br /&gt;
&#039;&#039;HidSmbus_WriteRequest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function writes the specified number of bytes from the supplied buffer to the specified slave device and returns immediately after sending the request to the CP2112.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_AddressReadRequest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function intiates a read transfer to the specified slave device address and specifies the address to read from on the device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_ForceReadResponse&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function causes the device to send a read response to the host after a read transfer has been issued.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_GetReadResponse&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function returns the read response to a read request. Read and write timeouts as well as transfer retries can be set using HidSmbus_SetSmbusConfig() as described in HidSmbus_SetSmbusConfig.&lt;br /&gt;
&lt;br /&gt;
====Test Conditions====&lt;br /&gt;
DockerPi SensorHub and DockerPi Relay need to be installed on the top of DockerPi-H.&lt;br /&gt;
====Example Code(C#)====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.ComponentModel;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Drawing;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using SLAB_HID_TO_SMBUS;&lt;br /&gt;
&lt;br /&gt;
namespace WindowsFormsApp1&lt;br /&gt;
{&lt;br /&gt;
    public partial class Form1 : Form&lt;br /&gt;
    {&lt;br /&gt;
        const ushort vid = 4292;  //10C4&lt;br /&gt;
        const ushort pid = 60048; //EA90&lt;br /&gt;
        IntPtr connectedDevice;&lt;br /&gt;
&lt;br /&gt;
        const byte RelaySlaveAddress = 0x20;&lt;br /&gt;
        const byte SensorSlaveAddress = 0x2E;&lt;br /&gt;
&lt;br /&gt;
        ushort RelayStauts = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        public Form1()&lt;br /&gt;
        {&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
            uint numDevices = 0;&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_GetNumDevices(ref numDevices, vid, pid);&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_Open(ref connectedDevice, 0, vid, pid);&lt;br /&gt;
&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0x00 }, 2);&lt;br /&gt;
&lt;br /&gt;
            timer_get_temp.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void RelayButton_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            timer_get_temp.Enabled = false;&lt;br /&gt;
&lt;br /&gt;
            if (RelayStauts == 0)&lt;br /&gt;
            {&lt;br /&gt;
                RelayStauts = 1;&lt;br /&gt;
                SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0xFF }, 2);&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                RelayStauts = 0;&lt;br /&gt;
                SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0x00 }, 2);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            timer_get_temp.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void Timer_get_temp_Tick(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
            byte bytesRead = 0;&lt;br /&gt;
            byte status = 0;&lt;br /&gt;
            byte[] readbuff = new byte[61];&lt;br /&gt;
&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_AddressReadRequest(connectedDevice, SensorSlaveAddress, 1, 1, new byte[] { 0x01 });&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_ForceReadResponse(connectedDevice, 1);&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_GetReadResponse(connectedDevice, ref status, readbuff, 61, ref bytesRead);&lt;br /&gt;
&lt;br /&gt;
             if(bytesRead == 1)&lt;br /&gt;
            {&lt;br /&gt;
                progressBar.Value = readbuff[0];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===UART Interface===&lt;br /&gt;
Serial interface supports ASCII mode or HEX mode transmission,3V3 TTL as voltage reference.&lt;br /&gt;
&lt;br /&gt;
You can solder headers or use a jumper wire to connect to your device.&lt;br /&gt;
&lt;br /&gt;
Mode:&#039;&#039;&#039;115200 8N1&#039;&#039;&#039;&lt;br /&gt;
====Interface Protocol====&lt;br /&gt;
Read Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!END&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 00 =&amp;gt; i2c-get || I2C_ADDR_RANGE || DATA-ADDRESS || 0A/0D&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Write Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!DATA!!END&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || * || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 01 =&amp;gt; i2c-set	 || I2C_ADDR_RANGE || DATA-ADDRESS || DATA || 0A/0D&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====How to Communicate====&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Turn on it by sending 0xFF&lt;br /&gt;
The execution code is: AA011501FF The meaning of the code is: AA - starting code, DIR parameter 01 means write, 15 means I2C address 0x15, 01 means first LED register, FF eq 0xFF means Turn it on.&lt;br /&gt;
&lt;br /&gt;
HEX Mode:&lt;br /&gt;
&lt;br /&gt;
After sending each instruction, you need to send the &#039;&#039;&#039;0A&#039;&#039;&#039; or &#039;&#039;&#039;0D&#039;&#039;&#039; end this transaction.&lt;br /&gt;
&lt;br /&gt;
[[File:SendByHeX.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ASCII Mode:&lt;br /&gt;
&lt;br /&gt;
In ASCII mode, you must check &#039;&#039;&#039;AddCrLf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:SendByASCII.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Read back&lt;br /&gt;
The execution code is: AA001501 The meaning of the code is: AA - starting code, DIR parameter 00 means read, 15 means I2C address 0x15, 01 means first LED register.&lt;br /&gt;
&lt;br /&gt;
If you use HEX mode, you can return the result in HEX mode,If you use ASCII mode, you can return the result in ASCII mode,write operation returns nothing.&lt;br /&gt;
&lt;br /&gt;
[[File:SendReturn.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Bluetooth Interface===&lt;br /&gt;
Bluetooth interface only provides &#039;&#039;&#039;LE only&#039;&#039;&#039; protocol support&lt;br /&gt;
====LED Status====&lt;br /&gt;
LED1:Link(ON) / Broadcast(Blink) / Fault(OFF)&lt;br /&gt;
LED2:DATA,Lights up when data is being transmitted.&lt;br /&gt;
====Interface Protocol====&lt;br /&gt;
Read Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 00 =&amp;gt; i2c-get || I2C_ADDR_RANGE || DATA-ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Write Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!DATA&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || *&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 01 =&amp;gt; i2c-set	 || I2C_ADDR_RANGE || DATA-ADDRESS || DATA&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Download SDK====&lt;br /&gt;
* For IOS user&lt;br /&gt;
** nRF Toolbox Download Link: [ https://apps.apple.com/cn/app/nrf-toolbox/id820906058 ]&lt;br /&gt;
* For Android user&lt;br /&gt;
** nRF Toolbox Download Link: [ https://play.google.com/store/apps/details?id=no.nordicsemi.android.nrftoolbox ]&lt;br /&gt;
* For Sources code user&lt;br /&gt;
** Android: [ https://github.com/NordicSemiconductor/Android-nRF-Toolbox ]&lt;br /&gt;
** IOS: [ https://github.com/NordicSemiconductor/IOS-nRF-Toolbox ]&lt;br /&gt;
====Development Method====&lt;br /&gt;
* 1. Download SDK from the links mentioned before and install it to IOS device or Android device.&lt;br /&gt;
* 2. Open the nRF Toolbox app&lt;br /&gt;
[[File:TIM图片20200108112710.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 3. Select &amp;quot;UART&amp;quot; icon and press &amp;quot;Edit&amp;quot; &lt;br /&gt;
[[File:TIM图片20200108112702.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112706.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 4. Select one icon and input the execution code and press OK, and then press the icon will send the code to DockerPi Nightlight board.&lt;br /&gt;
** For example: Turn on NightLight board&#039;s first LED.&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Turn on it by sending 0xFF&amp;lt;br&amp;gt;&lt;br /&gt;
The execution code is:  AA011501FF &lt;br /&gt;
The meaning of the code is: AA - starting code, DIR parameter 01 means write, 15 means I2C address 0x15, 01 means first LED register, FF eq 0xFF means Turn it on.&lt;br /&gt;
[[File:TIM图片20200108112658.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112654.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 5. Press &amp;quot;Connect&amp;quot; to scan the DockerPi-H, and select it.&lt;br /&gt;
[[File:TIM图片20200108112645.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112637.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 6.If the connection is successful, the blue LED will stop blinking and stay on.and you can see log by pressing &amp;quot;show log&amp;quot; link.&lt;br /&gt;
[[File:TIM图片20200108112625.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Product Includes==&lt;br /&gt;
* 1 x DockerPi-H BlueTooth Board &lt;br /&gt;
* 1 x Acrylic Plate&lt;br /&gt;
* 1 x 3-Pin Pin Header&lt;br /&gt;
* 4 x M2.5 Nut&lt;br /&gt;
* 4 x M2.5 Screw&lt;br /&gt;
* 4 x M2.5x6 Copper Stick&lt;br /&gt;
[[File:DOCKERPI 8.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
* Q: Should I connect  DockerPi-H to my Raspberry Pi to make it work? &lt;br /&gt;
  A: No, the DockerPi-H is seperated from Raspberry Pi, all you need to do is connect other DockerPi product such as Nightlight board or 4 channel relay board to it and control it via bluetooth.&lt;br /&gt;
* Q: Can I just using DockerPi-H to build my own project without other DockerPi product? &lt;br /&gt;
  A: No, DockerPi-H is built for DockerPi series product so that you should have another DockerPi series product at least.&lt;br /&gt;
* Q: A write I2C operation has been performed but nothing return? &lt;br /&gt;
  A: Only read operations can return.&lt;br /&gt;
* Q: Whether the UART interface can be directly connected to the RS232 connection terminal?&lt;br /&gt;
  A: The voltages are not compatible and you need to level shift.&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
* GeeekPi, dockerPi, dockerPi-H, bluetooth, BLE&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=EP-0116&amp;diff=7596</id>
		<title>EP-0116</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=EP-0116&amp;diff=7596"/>
		<updated>2020-01-08T08:36:04Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: /* Supported platforms */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==DockerPi-H Board ==&lt;br /&gt;
[[File:DOCKERPI 1.jpg|right|300px]]&lt;br /&gt;
&lt;br /&gt;
==Open Source Description==&lt;br /&gt;
Anyone may use the content of the white paper for non-commercial or educational purposes without permission without the permission of the source and copyright notice, but it may not be used for profit or commercial purposes without permission.&lt;br /&gt;
&lt;br /&gt;
Custom product LOGO is &#039;&#039;&#039;NOT&#039;&#039;&#039; allowed without copyright notice,Open source does not mean arbitrary use of trademarks!&lt;br /&gt;
&lt;br /&gt;
Welcome to submit links to your project(or tips),after our review, we will link your project in GitHub Page.&lt;br /&gt;
&lt;br /&gt;
Android and IOS app source code provided by NordicSemiconductor.&lt;br /&gt;
&lt;br /&gt;
==Product Description==&lt;br /&gt;
DockerPi-H is one of the DockerPi series expansion boards, which can convert I2C communication of other products in the DockerPi series to UART (TTL) / HID / BLE.&amp;lt;br&amp;gt; &lt;br /&gt;
BLE is usually used for the Internet of Things, TTL is usually used for industrial control, HID can communicate without driver.&amp;lt;br&amp;gt;&lt;br /&gt;
This product design for low power consumption, and can be maintained by only a few mA.&amp;lt;br&amp;gt; &lt;br /&gt;
DockerPi-H allows you to operate DockerPi series expansion boards without Raspberry Pi (or similar SBC).&amp;lt;br&amp;gt;&lt;br /&gt;
It can connect your personal computer to DockerPi expansion boards and also allows you to wirelessly control DockerPi expansion boards.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* Open source project (not for commercial distribution)&lt;br /&gt;
* DockerPi series products&lt;br /&gt;
* Programmable, can work with mobile phones, personal computers, industrial computers, ITX.&lt;br /&gt;
* Support BLE, HID, UART-TTL to transmit data&lt;br /&gt;
* Support BLE, UART-TTL data in ASCII mode&lt;br /&gt;
* Support UART-TTL, HID data in HEX mode&lt;br /&gt;
* HID does not require driver support&lt;br /&gt;
* It is recommended to install at the bottom of all modules&lt;br /&gt;
* Low power design&lt;br /&gt;
* BLE module provides FCC / CE certification&lt;br /&gt;
&lt;br /&gt;
==Supported platforms==&lt;br /&gt;
* 1. Tested Mobile devices : IPhone 6s Plus, HUAWEI SCM-AL09&lt;br /&gt;
* 2. Tested Platform : sscom.exe(Windows Environment), minicom(Linux Environment), pyserial module(via USB-to-TTL cable)&lt;br /&gt;
* 3. Supoort Interface : Bluetooth LE Only / USB HID / TTL UART&lt;br /&gt;
&lt;br /&gt;
==Sources Repository==&lt;br /&gt;
* [https://github.com/geeekpi/station DockerPi-H Open Sources Page]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Windows.exe CP2112 Software package for Windows]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Linux.bin CP2112 Softare package for Linux]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Mac.zip CP2112 Software package for MAC]&lt;br /&gt;
* [https://github.com/NordicSemiconductor NordicSemiconductor Open Sources Page]&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product View:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 3.jpg|left|320px]]&lt;br /&gt;
|[[File:DOCKERPI 2.jpg|none|320px]]&lt;br /&gt;
|[[File:DOCKERPI 3 2.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
* Application View:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 4.jpg|left|320px]]&lt;br /&gt;
|[[File:DOCKERPI 5.jpg|none|320px]]&lt;br /&gt;
|[[File:DOCKERPI 7.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Package Includes==&lt;br /&gt;
* 1 x 3-Pin Header  &lt;br /&gt;
* 4 x M2.5 nut&lt;br /&gt;
* 8 x M2.5 Copper stick&lt;br /&gt;
* 1 x Acrylic panel&lt;br /&gt;
* 1 x USB Micro data cable&lt;br /&gt;
&lt;br /&gt;
==How to Use==&lt;br /&gt;
===HID Interface===&lt;br /&gt;
The HID interface is implemented using CP2112, please refer to for more information.  [ &#039;&#039;&#039;[https://www.silabs.com/interface/usb-bridges/classic/device.cp2112 CP2112 Classic USB to HID Bridge]&#039;&#039;&#039; ]&lt;br /&gt;
====API Reference====&lt;br /&gt;
[[File:An496-hid-usb-to-smbus-api-specification.pdf]]&lt;br /&gt;
====Quick Reference====&lt;br /&gt;
&#039;&#039;HidSmbus_WriteRequest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function writes the specified number of bytes from the supplied buffer to the specified slave device and returns immediately after sending the request to the CP2112.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_AddressReadRequest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function intiates a read transfer to the specified slave device address and specifies the address to read from on the device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_ForceReadResponse&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function causes the device to send a read response to the host after a read transfer has been issued.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_GetReadResponse&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function returns the read response to a read request. Read and write timeouts as well as transfer retries can be set using HidSmbus_SetSmbusConfig() as described in HidSmbus_SetSmbusConfig.&lt;br /&gt;
&lt;br /&gt;
====Test Conditions====&lt;br /&gt;
DockerPi SensorHub and DockerPi Relay need to be installed on the top of DockerPi-H.&lt;br /&gt;
====Example Code(C#)====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.ComponentModel;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Drawing;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using SLAB_HID_TO_SMBUS;&lt;br /&gt;
&lt;br /&gt;
namespace WindowsFormsApp1&lt;br /&gt;
{&lt;br /&gt;
    public partial class Form1 : Form&lt;br /&gt;
    {&lt;br /&gt;
        const ushort vid = 4292;  //10C4&lt;br /&gt;
        const ushort pid = 60048; //EA90&lt;br /&gt;
        IntPtr connectedDevice;&lt;br /&gt;
&lt;br /&gt;
        const byte RelaySlaveAddress = 0x20;&lt;br /&gt;
        const byte SensorSlaveAddress = 0x2E;&lt;br /&gt;
&lt;br /&gt;
        ushort RelayStauts = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        public Form1()&lt;br /&gt;
        {&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
            uint numDevices = 0;&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_GetNumDevices(ref numDevices, vid, pid);&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_Open(ref connectedDevice, 0, vid, pid);&lt;br /&gt;
&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0x00 }, 2);&lt;br /&gt;
&lt;br /&gt;
            timer_get_temp.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void RelayButton_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            timer_get_temp.Enabled = false;&lt;br /&gt;
&lt;br /&gt;
            if (RelayStauts == 0)&lt;br /&gt;
            {&lt;br /&gt;
                RelayStauts = 1;&lt;br /&gt;
                SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0xFF }, 2);&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                RelayStauts = 0;&lt;br /&gt;
                SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0x00 }, 2);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            timer_get_temp.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void Timer_get_temp_Tick(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
            byte bytesRead = 0;&lt;br /&gt;
            byte status = 0;&lt;br /&gt;
            byte[] readbuff = new byte[61];&lt;br /&gt;
&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_AddressReadRequest(connectedDevice, SensorSlaveAddress, 1, 1, new byte[] { 0x01 });&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_ForceReadResponse(connectedDevice, 1);&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_GetReadResponse(connectedDevice, ref status, readbuff, 61, ref bytesRead);&lt;br /&gt;
&lt;br /&gt;
             if(bytesRead == 1)&lt;br /&gt;
            {&lt;br /&gt;
                progressBar.Value = readbuff[0];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===UART Interface===&lt;br /&gt;
Serial interface supports ASCII mode or HEX mode transmission,3V3 TTL as voltage reference.&lt;br /&gt;
&lt;br /&gt;
You can solder headers or use a jumper wire to connect to your device.&lt;br /&gt;
&lt;br /&gt;
Mode:&#039;&#039;&#039;115200 8N1&#039;&#039;&#039;&lt;br /&gt;
====Interface Protocol====&lt;br /&gt;
Read Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!END&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 00 =&amp;gt; i2c-get || I2C_ADDR_RANGE || DATA-ADDRESS || 0A/0D&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Write Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!DATA!!END&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || * || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 01 =&amp;gt; i2c-set	 || I2C_ADDR_RANGE || DATA-ADDRESS || DATA || 0A/0D&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====How to Communicate====&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Turn on it by sending 0xFF&lt;br /&gt;
The execution code is: AA011501FF The meaning of the code is: AA - starting code, DIR parameter 01 means write, 15 means I2C address 0x15, 01 means first LED register, FF eq 0xFF means Turn it on.&lt;br /&gt;
&lt;br /&gt;
HEX Mode:&lt;br /&gt;
&lt;br /&gt;
After sending each instruction, you need to send the &#039;&#039;&#039;0A&#039;&#039;&#039; or &#039;&#039;&#039;0D&#039;&#039;&#039; end this transaction.&lt;br /&gt;
&lt;br /&gt;
[[File:SendByHeX.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ASCII Mode:&lt;br /&gt;
&lt;br /&gt;
In ASCII mode, you must check &#039;&#039;&#039;AddCrLf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:SendByASCII.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Read back&lt;br /&gt;
The execution code is: AA001501 The meaning of the code is: AA - starting code, DIR parameter 00 means read, 15 means I2C address 0x15, 01 means first LED register.&lt;br /&gt;
&lt;br /&gt;
If you use HEX mode, you can return the result in HEX mode,If you use ASCII mode, you can return the result in ASCII mode,write operation returns nothing.&lt;br /&gt;
&lt;br /&gt;
[[File:SendReturn.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Bluetooth Interface===&lt;br /&gt;
Bluetooth interface only provides &#039;&#039;&#039;LE only&#039;&#039;&#039; protocol support&lt;br /&gt;
====Interface Protocol====&lt;br /&gt;
Read Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 00 =&amp;gt; i2c-get || I2C_ADDR_RANGE || DATA-ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Write Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!DATA&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || *&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 01 =&amp;gt; i2c-set	 || I2C_ADDR_RANGE || DATA-ADDRESS || DATA&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Download SDK====&lt;br /&gt;
* For IOS user&lt;br /&gt;
** nRF Toolbox Download Link: [ https://apps.apple.com/cn/app/nrf-toolbox/id820906058 ]&lt;br /&gt;
* For Android user&lt;br /&gt;
** nRF Toolbox Download Link: [ https://play.google.com/store/apps/details?id=no.nordicsemi.android.nrftoolbox ]&lt;br /&gt;
* For Sources code user&lt;br /&gt;
** Android: [ https://github.com/NordicSemiconductor/Android-nRF-Toolbox ]&lt;br /&gt;
** IOS: [ https://github.com/NordicSemiconductor/IOS-nRF-Toolbox ]&lt;br /&gt;
====Development Method====&lt;br /&gt;
* 1. Download SDK from the links mentioned before and install it to IOS device or Android device.&lt;br /&gt;
* 2. Open the nRF Toolbox app&lt;br /&gt;
[[File:TIM图片20200108112710.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 3. Select &amp;quot;UART&amp;quot; icon and press &amp;quot;Edit&amp;quot; &lt;br /&gt;
[[File:TIM图片20200108112702.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112706.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 4. Select one icon and input the execution code and press OK, and then press the icon will send the code to DockerPi Nightlight board.&lt;br /&gt;
** For example: Turn on NightLight board&#039;s first LED.&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Turn on it by sending 0xFF&amp;lt;br&amp;gt;&lt;br /&gt;
The execution code is:  AA011501FF &lt;br /&gt;
The meaning of the code is: AA - starting code, DIR parameter 01 means write, 15 means I2C address 0x15, 01 means first LED register, FF eq 0xFF means Turn it on.&lt;br /&gt;
[[File:TIM图片20200108112658.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112654.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 5. Press &amp;quot;Connect&amp;quot; to scan the DockerPi-H, and select it.&lt;br /&gt;
[[File:TIM图片20200108112645.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112637.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 6.If the connection is successful, the blue LED will stop blinking and stay on.and you can see log by pressing &amp;quot;show log&amp;quot; link.&lt;br /&gt;
[[File:TIM图片20200108112625.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Product Includes==&lt;br /&gt;
* 1 x DockerPi-H BlueTooth Board &lt;br /&gt;
* 1 x Acrylic Plate&lt;br /&gt;
* 1 x 3-Pin Pin Header&lt;br /&gt;
* 4 x M2.5 Nut&lt;br /&gt;
* 4 x M2.5 Screw&lt;br /&gt;
* 4 x M2.5x6 Copper Stick&lt;br /&gt;
[[File:DOCKERPI 8.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
* Q: Should I connect  DockerPi-H to my Raspberry Pi to make it work? &lt;br /&gt;
  A: No, the DockerPi-H is seperated from Raspberry Pi, all you need to do is connect other DockerPi product such as Nightlight board or 4 channel relay board to it and control it via bluetooth.&lt;br /&gt;
* Q: Can I just using DockerPi-H to build my own project without other DockerPi product? &lt;br /&gt;
  A: No, DockerPi-H is built for DockerPi series product so that you should have another DockerPi series product at least.&lt;br /&gt;
* Q: A write I2C operation has been performed but nothing return? &lt;br /&gt;
  A: Only read operations can return.&lt;br /&gt;
* Q: Whether the UART interface can be directly connected to the RS232 connection terminal?&lt;br /&gt;
  A: The voltages are not compatible and you need to level shift.&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
* GeeekPi, dockerPi, dockerPi-H, bluetooth, BLE&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=EP-0116&amp;diff=7595</id>
		<title>EP-0116</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=EP-0116&amp;diff=7595"/>
		<updated>2020-01-08T08:35:04Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: /* Open Source Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==DockerPi-H Board ==&lt;br /&gt;
[[File:DOCKERPI 1.jpg|right|300px]]&lt;br /&gt;
&lt;br /&gt;
==Open Source Description==&lt;br /&gt;
Anyone may use the content of the white paper for non-commercial or educational purposes without permission without the permission of the source and copyright notice, but it may not be used for profit or commercial purposes without permission.&lt;br /&gt;
&lt;br /&gt;
Custom product LOGO is &#039;&#039;&#039;NOT&#039;&#039;&#039; allowed without copyright notice,Open source does not mean arbitrary use of trademarks!&lt;br /&gt;
&lt;br /&gt;
Welcome to submit links to your project(or tips),after our review, we will link your project in GitHub Page.&lt;br /&gt;
&lt;br /&gt;
Android and IOS app source code provided by NordicSemiconductor.&lt;br /&gt;
&lt;br /&gt;
==Product Description==&lt;br /&gt;
DockerPi-H is one of the DockerPi series expansion boards, which can convert I2C communication of other products in the DockerPi series to UART (TTL) / HID / BLE.&amp;lt;br&amp;gt; &lt;br /&gt;
BLE is usually used for the Internet of Things, TTL is usually used for industrial control, HID can communicate without driver.&amp;lt;br&amp;gt;&lt;br /&gt;
This product design for low power consumption, and can be maintained by only a few mA.&amp;lt;br&amp;gt; &lt;br /&gt;
DockerPi-H allows you to operate DockerPi series expansion boards without Raspberry Pi (or similar SBC).&amp;lt;br&amp;gt;&lt;br /&gt;
It can connect your personal computer to DockerPi expansion boards and also allows you to wirelessly control DockerPi expansion boards.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* Open source project (not for commercial distribution)&lt;br /&gt;
* DockerPi series products&lt;br /&gt;
* Programmable, can work with mobile phones, personal computers, industrial computers, ITX.&lt;br /&gt;
* Support BLE, HID, UART-TTL to transmit data&lt;br /&gt;
* Support BLE, UART-TTL data in ASCII mode&lt;br /&gt;
* Support UART-TTL, HID data in HEX mode&lt;br /&gt;
* HID does not require driver support&lt;br /&gt;
* It is recommended to install at the bottom of all modules&lt;br /&gt;
* Low power design&lt;br /&gt;
* BLE module provides FCC / CE certification&lt;br /&gt;
&lt;br /&gt;
==Supported platforms==&lt;br /&gt;
* 1. Tested Mobile devices : IPhone 6s Plus, HUAWEI SCM-AL09&lt;br /&gt;
* 2. Tested Platform : putty.exe(Windows Environment), minicom(Linux Environment), pyserial module(via USB-to-TTL cable)&lt;br /&gt;
* 3. Supoort Interface : Bluetooth LE Only / USB HID / TTL UART&lt;br /&gt;
&lt;br /&gt;
==Sources Repository==&lt;br /&gt;
* [https://github.com/geeekpi/station DockerPi-H Open Sources Page]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Windows.exe CP2112 Software package for Windows]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Linux.bin CP2112 Softare package for Linux]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Mac.zip CP2112 Software package for MAC]&lt;br /&gt;
* [https://github.com/NordicSemiconductor NordicSemiconductor Open Sources Page]&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product View:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 3.jpg|left|320px]]&lt;br /&gt;
|[[File:DOCKERPI 2.jpg|none|320px]]&lt;br /&gt;
|[[File:DOCKERPI 3 2.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
* Application View:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 4.jpg|left|320px]]&lt;br /&gt;
|[[File:DOCKERPI 5.jpg|none|320px]]&lt;br /&gt;
|[[File:DOCKERPI 7.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Package Includes==&lt;br /&gt;
* 1 x 3-Pin Header  &lt;br /&gt;
* 4 x M2.5 nut&lt;br /&gt;
* 8 x M2.5 Copper stick&lt;br /&gt;
* 1 x Acrylic panel&lt;br /&gt;
* 1 x USB Micro data cable&lt;br /&gt;
&lt;br /&gt;
==How to Use==&lt;br /&gt;
===HID Interface===&lt;br /&gt;
The HID interface is implemented using CP2112, please refer to for more information.  [ &#039;&#039;&#039;[https://www.silabs.com/interface/usb-bridges/classic/device.cp2112 CP2112 Classic USB to HID Bridge]&#039;&#039;&#039; ]&lt;br /&gt;
====API Reference====&lt;br /&gt;
[[File:An496-hid-usb-to-smbus-api-specification.pdf]]&lt;br /&gt;
====Quick Reference====&lt;br /&gt;
&#039;&#039;HidSmbus_WriteRequest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function writes the specified number of bytes from the supplied buffer to the specified slave device and returns immediately after sending the request to the CP2112.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_AddressReadRequest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function intiates a read transfer to the specified slave device address and specifies the address to read from on the device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_ForceReadResponse&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function causes the device to send a read response to the host after a read transfer has been issued.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_GetReadResponse&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function returns the read response to a read request. Read and write timeouts as well as transfer retries can be set using HidSmbus_SetSmbusConfig() as described in HidSmbus_SetSmbusConfig.&lt;br /&gt;
&lt;br /&gt;
====Test Conditions====&lt;br /&gt;
DockerPi SensorHub and DockerPi Relay need to be installed on the top of DockerPi-H.&lt;br /&gt;
====Example Code(C#)====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.ComponentModel;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Drawing;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using SLAB_HID_TO_SMBUS;&lt;br /&gt;
&lt;br /&gt;
namespace WindowsFormsApp1&lt;br /&gt;
{&lt;br /&gt;
    public partial class Form1 : Form&lt;br /&gt;
    {&lt;br /&gt;
        const ushort vid = 4292;  //10C4&lt;br /&gt;
        const ushort pid = 60048; //EA90&lt;br /&gt;
        IntPtr connectedDevice;&lt;br /&gt;
&lt;br /&gt;
        const byte RelaySlaveAddress = 0x20;&lt;br /&gt;
        const byte SensorSlaveAddress = 0x2E;&lt;br /&gt;
&lt;br /&gt;
        ushort RelayStauts = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        public Form1()&lt;br /&gt;
        {&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
            uint numDevices = 0;&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_GetNumDevices(ref numDevices, vid, pid);&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_Open(ref connectedDevice, 0, vid, pid);&lt;br /&gt;
&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0x00 }, 2);&lt;br /&gt;
&lt;br /&gt;
            timer_get_temp.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void RelayButton_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            timer_get_temp.Enabled = false;&lt;br /&gt;
&lt;br /&gt;
            if (RelayStauts == 0)&lt;br /&gt;
            {&lt;br /&gt;
                RelayStauts = 1;&lt;br /&gt;
                SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0xFF }, 2);&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                RelayStauts = 0;&lt;br /&gt;
                SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0x00 }, 2);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            timer_get_temp.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void Timer_get_temp_Tick(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
            byte bytesRead = 0;&lt;br /&gt;
            byte status = 0;&lt;br /&gt;
            byte[] readbuff = new byte[61];&lt;br /&gt;
&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_AddressReadRequest(connectedDevice, SensorSlaveAddress, 1, 1, new byte[] { 0x01 });&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_ForceReadResponse(connectedDevice, 1);&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_GetReadResponse(connectedDevice, ref status, readbuff, 61, ref bytesRead);&lt;br /&gt;
&lt;br /&gt;
             if(bytesRead == 1)&lt;br /&gt;
            {&lt;br /&gt;
                progressBar.Value = readbuff[0];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===UART Interface===&lt;br /&gt;
Serial interface supports ASCII mode or HEX mode transmission,3V3 TTL as voltage reference.&lt;br /&gt;
&lt;br /&gt;
You can solder headers or use a jumper wire to connect to your device.&lt;br /&gt;
&lt;br /&gt;
Mode:&#039;&#039;&#039;115200 8N1&#039;&#039;&#039;&lt;br /&gt;
====Interface Protocol====&lt;br /&gt;
Read Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!END&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 00 =&amp;gt; i2c-get || I2C_ADDR_RANGE || DATA-ADDRESS || 0A/0D&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Write Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!DATA!!END&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || * || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 01 =&amp;gt; i2c-set	 || I2C_ADDR_RANGE || DATA-ADDRESS || DATA || 0A/0D&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====How to Communicate====&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Turn on it by sending 0xFF&lt;br /&gt;
The execution code is: AA011501FF The meaning of the code is: AA - starting code, DIR parameter 01 means write, 15 means I2C address 0x15, 01 means first LED register, FF eq 0xFF means Turn it on.&lt;br /&gt;
&lt;br /&gt;
HEX Mode:&lt;br /&gt;
&lt;br /&gt;
After sending each instruction, you need to send the &#039;&#039;&#039;0A&#039;&#039;&#039; or &#039;&#039;&#039;0D&#039;&#039;&#039; end this transaction.&lt;br /&gt;
&lt;br /&gt;
[[File:SendByHeX.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ASCII Mode:&lt;br /&gt;
&lt;br /&gt;
In ASCII mode, you must check &#039;&#039;&#039;AddCrLf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:SendByASCII.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Read back&lt;br /&gt;
The execution code is: AA001501 The meaning of the code is: AA - starting code, DIR parameter 00 means read, 15 means I2C address 0x15, 01 means first LED register.&lt;br /&gt;
&lt;br /&gt;
If you use HEX mode, you can return the result in HEX mode,If you use ASCII mode, you can return the result in ASCII mode,write operation returns nothing.&lt;br /&gt;
&lt;br /&gt;
[[File:SendReturn.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Bluetooth Interface===&lt;br /&gt;
Bluetooth interface only provides &#039;&#039;&#039;LE only&#039;&#039;&#039; protocol support&lt;br /&gt;
====Interface Protocol====&lt;br /&gt;
Read Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 00 =&amp;gt; i2c-get || I2C_ADDR_RANGE || DATA-ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Write Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!DATA&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || *&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 01 =&amp;gt; i2c-set	 || I2C_ADDR_RANGE || DATA-ADDRESS || DATA&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Download SDK====&lt;br /&gt;
* For IOS user&lt;br /&gt;
** nRF Toolbox Download Link: [ https://apps.apple.com/cn/app/nrf-toolbox/id820906058 ]&lt;br /&gt;
* For Android user&lt;br /&gt;
** nRF Toolbox Download Link: [ https://play.google.com/store/apps/details?id=no.nordicsemi.android.nrftoolbox ]&lt;br /&gt;
* For Sources code user&lt;br /&gt;
** Android: [ https://github.com/NordicSemiconductor/Android-nRF-Toolbox ]&lt;br /&gt;
** IOS: [ https://github.com/NordicSemiconductor/IOS-nRF-Toolbox ]&lt;br /&gt;
====Development Method====&lt;br /&gt;
* 1. Download SDK from the links mentioned before and install it to IOS device or Android device.&lt;br /&gt;
* 2. Open the nRF Toolbox app&lt;br /&gt;
[[File:TIM图片20200108112710.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 3. Select &amp;quot;UART&amp;quot; icon and press &amp;quot;Edit&amp;quot; &lt;br /&gt;
[[File:TIM图片20200108112702.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112706.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 4. Select one icon and input the execution code and press OK, and then press the icon will send the code to DockerPi Nightlight board.&lt;br /&gt;
** For example: Turn on NightLight board&#039;s first LED.&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Turn on it by sending 0xFF&amp;lt;br&amp;gt;&lt;br /&gt;
The execution code is:  AA011501FF &lt;br /&gt;
The meaning of the code is: AA - starting code, DIR parameter 01 means write, 15 means I2C address 0x15, 01 means first LED register, FF eq 0xFF means Turn it on.&lt;br /&gt;
[[File:TIM图片20200108112658.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112654.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 5. Press &amp;quot;Connect&amp;quot; to scan the DockerPi-H, and select it.&lt;br /&gt;
[[File:TIM图片20200108112645.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112637.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 6.If the connection is successful, the blue LED will stop blinking and stay on.and you can see log by pressing &amp;quot;show log&amp;quot; link.&lt;br /&gt;
[[File:TIM图片20200108112625.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Product Includes==&lt;br /&gt;
* 1 x DockerPi-H BlueTooth Board &lt;br /&gt;
* 1 x Acrylic Plate&lt;br /&gt;
* 1 x 3-Pin Pin Header&lt;br /&gt;
* 4 x M2.5 Nut&lt;br /&gt;
* 4 x M2.5 Screw&lt;br /&gt;
* 4 x M2.5x6 Copper Stick&lt;br /&gt;
[[File:DOCKERPI 8.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
* Q: Should I connect  DockerPi-H to my Raspberry Pi to make it work? &lt;br /&gt;
  A: No, the DockerPi-H is seperated from Raspberry Pi, all you need to do is connect other DockerPi product such as Nightlight board or 4 channel relay board to it and control it via bluetooth.&lt;br /&gt;
* Q: Can I just using DockerPi-H to build my own project without other DockerPi product? &lt;br /&gt;
  A: No, DockerPi-H is built for DockerPi series product so that you should have another DockerPi series product at least.&lt;br /&gt;
* Q: A write I2C operation has been performed but nothing return? &lt;br /&gt;
  A: Only read operations can return.&lt;br /&gt;
* Q: Whether the UART interface can be directly connected to the RS232 connection terminal?&lt;br /&gt;
  A: The voltages are not compatible and you need to level shift.&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
* GeeekPi, dockerPi, dockerPi-H, bluetooth, BLE&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=EP-0116&amp;diff=7594</id>
		<title>EP-0116</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=EP-0116&amp;diff=7594"/>
		<updated>2020-01-08T08:33:28Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: /* UART Interface */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==DockerPi-H Board ==&lt;br /&gt;
[[File:DOCKERPI 1.jpg|right|300px]]&lt;br /&gt;
&lt;br /&gt;
==Open Source Description==&lt;br /&gt;
Anyone may use the content of the white paper for non-commercial or educational purposes without permission without the permission of the source and copyright notice, but it may not be used for profit or commercial purposes without permission.&lt;br /&gt;
&lt;br /&gt;
Custom product LOGO is &#039;&#039;&#039;NOT&#039;&#039;&#039; allowed without copyright notice,Open source does not mean arbitrary use of trademarks!&lt;br /&gt;
&lt;br /&gt;
Welcome to submit links to your project(or tips),after our review, we will link your project in GitHub Page.&lt;br /&gt;
&lt;br /&gt;
==Product Description==&lt;br /&gt;
DockerPi-H is one of the DockerPi series expansion boards, which can convert I2C communication of other products in the DockerPi series to UART (TTL) / HID / BLE.&amp;lt;br&amp;gt; &lt;br /&gt;
BLE is usually used for the Internet of Things, TTL is usually used for industrial control, HID can communicate without driver.&amp;lt;br&amp;gt;&lt;br /&gt;
This product design for low power consumption, and can be maintained by only a few mA.&amp;lt;br&amp;gt; &lt;br /&gt;
DockerPi-H allows you to operate DockerPi series expansion boards without Raspberry Pi (or similar SBC).&amp;lt;br&amp;gt;&lt;br /&gt;
It can connect your personal computer to DockerPi expansion boards and also allows you to wirelessly control DockerPi expansion boards.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* Open source project (not for commercial distribution)&lt;br /&gt;
* DockerPi series products&lt;br /&gt;
* Programmable, can work with mobile phones, personal computers, industrial computers, ITX.&lt;br /&gt;
* Support BLE, HID, UART-TTL to transmit data&lt;br /&gt;
* Support BLE, UART-TTL data in ASCII mode&lt;br /&gt;
* Support UART-TTL, HID data in HEX mode&lt;br /&gt;
* HID does not require driver support&lt;br /&gt;
* It is recommended to install at the bottom of all modules&lt;br /&gt;
* Low power design&lt;br /&gt;
* BLE module provides FCC / CE certification&lt;br /&gt;
&lt;br /&gt;
==Supported platforms==&lt;br /&gt;
* 1. Tested Mobile devices : IPhone 6s Plus, HUAWEI SCM-AL09&lt;br /&gt;
* 2. Tested Platform : putty.exe(Windows Environment), minicom(Linux Environment), pyserial module(via USB-to-TTL cable)&lt;br /&gt;
* 3. Supoort Interface : Bluetooth LE Only / USB HID / TTL UART&lt;br /&gt;
&lt;br /&gt;
==Sources Repository==&lt;br /&gt;
* [https://github.com/geeekpi/station DockerPi-H Open Sources Page]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Windows.exe CP2112 Software package for Windows]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Linux.bin CP2112 Softare package for Linux]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Mac.zip CP2112 Software package for MAC]&lt;br /&gt;
* [https://github.com/NordicSemiconductor NordicSemiconductor Open Sources Page]&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product View:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 3.jpg|left|320px]]&lt;br /&gt;
|[[File:DOCKERPI 2.jpg|none|320px]]&lt;br /&gt;
|[[File:DOCKERPI 3 2.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
* Application View:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 4.jpg|left|320px]]&lt;br /&gt;
|[[File:DOCKERPI 5.jpg|none|320px]]&lt;br /&gt;
|[[File:DOCKERPI 7.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Package Includes==&lt;br /&gt;
* 1 x 3-Pin Header  &lt;br /&gt;
* 4 x M2.5 nut&lt;br /&gt;
* 8 x M2.5 Copper stick&lt;br /&gt;
* 1 x Acrylic panel&lt;br /&gt;
* 1 x USB Micro data cable&lt;br /&gt;
&lt;br /&gt;
==How to Use==&lt;br /&gt;
===HID Interface===&lt;br /&gt;
The HID interface is implemented using CP2112, please refer to for more information.  [ &#039;&#039;&#039;[https://www.silabs.com/interface/usb-bridges/classic/device.cp2112 CP2112 Classic USB to HID Bridge]&#039;&#039;&#039; ]&lt;br /&gt;
====API Reference====&lt;br /&gt;
[[File:An496-hid-usb-to-smbus-api-specification.pdf]]&lt;br /&gt;
====Quick Reference====&lt;br /&gt;
&#039;&#039;HidSmbus_WriteRequest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function writes the specified number of bytes from the supplied buffer to the specified slave device and returns immediately after sending the request to the CP2112.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_AddressReadRequest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function intiates a read transfer to the specified slave device address and specifies the address to read from on the device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_ForceReadResponse&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function causes the device to send a read response to the host after a read transfer has been issued.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_GetReadResponse&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function returns the read response to a read request. Read and write timeouts as well as transfer retries can be set using HidSmbus_SetSmbusConfig() as described in HidSmbus_SetSmbusConfig.&lt;br /&gt;
&lt;br /&gt;
====Test Conditions====&lt;br /&gt;
DockerPi SensorHub and DockerPi Relay need to be installed on the top of DockerPi-H.&lt;br /&gt;
====Example Code(C#)====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.ComponentModel;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Drawing;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using SLAB_HID_TO_SMBUS;&lt;br /&gt;
&lt;br /&gt;
namespace WindowsFormsApp1&lt;br /&gt;
{&lt;br /&gt;
    public partial class Form1 : Form&lt;br /&gt;
    {&lt;br /&gt;
        const ushort vid = 4292;  //10C4&lt;br /&gt;
        const ushort pid = 60048; //EA90&lt;br /&gt;
        IntPtr connectedDevice;&lt;br /&gt;
&lt;br /&gt;
        const byte RelaySlaveAddress = 0x20;&lt;br /&gt;
        const byte SensorSlaveAddress = 0x2E;&lt;br /&gt;
&lt;br /&gt;
        ushort RelayStauts = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        public Form1()&lt;br /&gt;
        {&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
            uint numDevices = 0;&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_GetNumDevices(ref numDevices, vid, pid);&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_Open(ref connectedDevice, 0, vid, pid);&lt;br /&gt;
&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0x00 }, 2);&lt;br /&gt;
&lt;br /&gt;
            timer_get_temp.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void RelayButton_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            timer_get_temp.Enabled = false;&lt;br /&gt;
&lt;br /&gt;
            if (RelayStauts == 0)&lt;br /&gt;
            {&lt;br /&gt;
                RelayStauts = 1;&lt;br /&gt;
                SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0xFF }, 2);&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                RelayStauts = 0;&lt;br /&gt;
                SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0x00 }, 2);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            timer_get_temp.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void Timer_get_temp_Tick(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
            byte bytesRead = 0;&lt;br /&gt;
            byte status = 0;&lt;br /&gt;
            byte[] readbuff = new byte[61];&lt;br /&gt;
&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_AddressReadRequest(connectedDevice, SensorSlaveAddress, 1, 1, new byte[] { 0x01 });&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_ForceReadResponse(connectedDevice, 1);&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_GetReadResponse(connectedDevice, ref status, readbuff, 61, ref bytesRead);&lt;br /&gt;
&lt;br /&gt;
             if(bytesRead == 1)&lt;br /&gt;
            {&lt;br /&gt;
                progressBar.Value = readbuff[0];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===UART Interface===&lt;br /&gt;
Serial interface supports ASCII mode or HEX mode transmission,3V3 TTL as voltage reference.&lt;br /&gt;
&lt;br /&gt;
You can solder headers or use a jumper wire to connect to your device.&lt;br /&gt;
&lt;br /&gt;
Mode:&#039;&#039;&#039;115200 8N1&#039;&#039;&#039;&lt;br /&gt;
====Interface Protocol====&lt;br /&gt;
Read Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!END&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 00 =&amp;gt; i2c-get || I2C_ADDR_RANGE || DATA-ADDRESS || 0A/0D&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Write Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!DATA!!END&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || * || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 01 =&amp;gt; i2c-set	 || I2C_ADDR_RANGE || DATA-ADDRESS || DATA || 0A/0D&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====How to Communicate====&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Turn on it by sending 0xFF&lt;br /&gt;
The execution code is: AA011501FF The meaning of the code is: AA - starting code, DIR parameter 01 means write, 15 means I2C address 0x15, 01 means first LED register, FF eq 0xFF means Turn it on.&lt;br /&gt;
&lt;br /&gt;
HEX Mode:&lt;br /&gt;
&lt;br /&gt;
After sending each instruction, you need to send the &#039;&#039;&#039;0A&#039;&#039;&#039; or &#039;&#039;&#039;0D&#039;&#039;&#039; end this transaction.&lt;br /&gt;
&lt;br /&gt;
[[File:SendByHeX.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ASCII Mode:&lt;br /&gt;
&lt;br /&gt;
In ASCII mode, you must check &#039;&#039;&#039;AddCrLf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:SendByASCII.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Read back&lt;br /&gt;
The execution code is: AA001501 The meaning of the code is: AA - starting code, DIR parameter 00 means read, 15 means I2C address 0x15, 01 means first LED register.&lt;br /&gt;
&lt;br /&gt;
If you use HEX mode, you can return the result in HEX mode,If you use ASCII mode, you can return the result in ASCII mode,write operation returns nothing.&lt;br /&gt;
&lt;br /&gt;
[[File:SendReturn.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Bluetooth Interface===&lt;br /&gt;
Bluetooth interface only provides &#039;&#039;&#039;LE only&#039;&#039;&#039; protocol support&lt;br /&gt;
====Interface Protocol====&lt;br /&gt;
Read Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 00 =&amp;gt; i2c-get || I2C_ADDR_RANGE || DATA-ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Write Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!DATA&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || *&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 01 =&amp;gt; i2c-set	 || I2C_ADDR_RANGE || DATA-ADDRESS || DATA&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Download SDK====&lt;br /&gt;
* For IOS user&lt;br /&gt;
** nRF Toolbox Download Link: [ https://apps.apple.com/cn/app/nrf-toolbox/id820906058 ]&lt;br /&gt;
* For Android user&lt;br /&gt;
** nRF Toolbox Download Link: [ https://play.google.com/store/apps/details?id=no.nordicsemi.android.nrftoolbox ]&lt;br /&gt;
* For Sources code user&lt;br /&gt;
** Android: [ https://github.com/NordicSemiconductor/Android-nRF-Toolbox ]&lt;br /&gt;
** IOS: [ https://github.com/NordicSemiconductor/IOS-nRF-Toolbox ]&lt;br /&gt;
====Development Method====&lt;br /&gt;
* 1. Download SDK from the links mentioned before and install it to IOS device or Android device.&lt;br /&gt;
* 2. Open the nRF Toolbox app&lt;br /&gt;
[[File:TIM图片20200108112710.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 3. Select &amp;quot;UART&amp;quot; icon and press &amp;quot;Edit&amp;quot; &lt;br /&gt;
[[File:TIM图片20200108112702.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112706.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 4. Select one icon and input the execution code and press OK, and then press the icon will send the code to DockerPi Nightlight board.&lt;br /&gt;
** For example: Turn on NightLight board&#039;s first LED.&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Turn on it by sending 0xFF&amp;lt;br&amp;gt;&lt;br /&gt;
The execution code is:  AA011501FF &lt;br /&gt;
The meaning of the code is: AA - starting code, DIR parameter 01 means write, 15 means I2C address 0x15, 01 means first LED register, FF eq 0xFF means Turn it on.&lt;br /&gt;
[[File:TIM图片20200108112658.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112654.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 5. Press &amp;quot;Connect&amp;quot; to scan the DockerPi-H, and select it.&lt;br /&gt;
[[File:TIM图片20200108112645.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112637.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 6.If the connection is successful, the blue LED will stop blinking and stay on.and you can see log by pressing &amp;quot;show log&amp;quot; link.&lt;br /&gt;
[[File:TIM图片20200108112625.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Product Includes==&lt;br /&gt;
* 1 x DockerPi-H BlueTooth Board &lt;br /&gt;
* 1 x Acrylic Plate&lt;br /&gt;
* 1 x 3-Pin Pin Header&lt;br /&gt;
* 4 x M2.5 Nut&lt;br /&gt;
* 4 x M2.5 Screw&lt;br /&gt;
* 4 x M2.5x6 Copper Stick&lt;br /&gt;
[[File:DOCKERPI 8.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
* Q: Should I connect  DockerPi-H to my Raspberry Pi to make it work? &lt;br /&gt;
  A: No, the DockerPi-H is seperated from Raspberry Pi, all you need to do is connect other DockerPi product such as Nightlight board or 4 channel relay board to it and control it via bluetooth.&lt;br /&gt;
* Q: Can I just using DockerPi-H to build my own project without other DockerPi product? &lt;br /&gt;
  A: No, DockerPi-H is built for DockerPi series product so that you should have another DockerPi series product at least.&lt;br /&gt;
* Q: A write I2C operation has been performed but nothing return? &lt;br /&gt;
  A: Only read operations can return.&lt;br /&gt;
* Q: Whether the UART interface can be directly connected to the RS232 connection terminal?&lt;br /&gt;
  A: The voltages are not compatible and you need to level shift.&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
* GeeekPi, dockerPi, dockerPi-H, bluetooth, BLE&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=EP-0116&amp;diff=7593</id>
		<title>EP-0116</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=EP-0116&amp;diff=7593"/>
		<updated>2020-01-08T08:33:21Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: /* UART Interface */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==DockerPi-H Board ==&lt;br /&gt;
[[File:DOCKERPI 1.jpg|right|300px]]&lt;br /&gt;
&lt;br /&gt;
==Open Source Description==&lt;br /&gt;
Anyone may use the content of the white paper for non-commercial or educational purposes without permission without the permission of the source and copyright notice, but it may not be used for profit or commercial purposes without permission.&lt;br /&gt;
&lt;br /&gt;
Custom product LOGO is &#039;&#039;&#039;NOT&#039;&#039;&#039; allowed without copyright notice,Open source does not mean arbitrary use of trademarks!&lt;br /&gt;
&lt;br /&gt;
Welcome to submit links to your project(or tips),after our review, we will link your project in GitHub Page.&lt;br /&gt;
&lt;br /&gt;
==Product Description==&lt;br /&gt;
DockerPi-H is one of the DockerPi series expansion boards, which can convert I2C communication of other products in the DockerPi series to UART (TTL) / HID / BLE.&amp;lt;br&amp;gt; &lt;br /&gt;
BLE is usually used for the Internet of Things, TTL is usually used for industrial control, HID can communicate without driver.&amp;lt;br&amp;gt;&lt;br /&gt;
This product design for low power consumption, and can be maintained by only a few mA.&amp;lt;br&amp;gt; &lt;br /&gt;
DockerPi-H allows you to operate DockerPi series expansion boards without Raspberry Pi (or similar SBC).&amp;lt;br&amp;gt;&lt;br /&gt;
It can connect your personal computer to DockerPi expansion boards and also allows you to wirelessly control DockerPi expansion boards.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* Open source project (not for commercial distribution)&lt;br /&gt;
* DockerPi series products&lt;br /&gt;
* Programmable, can work with mobile phones, personal computers, industrial computers, ITX.&lt;br /&gt;
* Support BLE, HID, UART-TTL to transmit data&lt;br /&gt;
* Support BLE, UART-TTL data in ASCII mode&lt;br /&gt;
* Support UART-TTL, HID data in HEX mode&lt;br /&gt;
* HID does not require driver support&lt;br /&gt;
* It is recommended to install at the bottom of all modules&lt;br /&gt;
* Low power design&lt;br /&gt;
* BLE module provides FCC / CE certification&lt;br /&gt;
&lt;br /&gt;
==Supported platforms==&lt;br /&gt;
* 1. Tested Mobile devices : IPhone 6s Plus, HUAWEI SCM-AL09&lt;br /&gt;
* 2. Tested Platform : putty.exe(Windows Environment), minicom(Linux Environment), pyserial module(via USB-to-TTL cable)&lt;br /&gt;
* 3. Supoort Interface : Bluetooth LE Only / USB HID / TTL UART&lt;br /&gt;
&lt;br /&gt;
==Sources Repository==&lt;br /&gt;
* [https://github.com/geeekpi/station DockerPi-H Open Sources Page]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Windows.exe CP2112 Software package for Windows]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Linux.bin CP2112 Softare package for Linux]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Mac.zip CP2112 Software package for MAC]&lt;br /&gt;
* [https://github.com/NordicSemiconductor NordicSemiconductor Open Sources Page]&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product View:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 3.jpg|left|320px]]&lt;br /&gt;
|[[File:DOCKERPI 2.jpg|none|320px]]&lt;br /&gt;
|[[File:DOCKERPI 3 2.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
* Application View:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 4.jpg|left|320px]]&lt;br /&gt;
|[[File:DOCKERPI 5.jpg|none|320px]]&lt;br /&gt;
|[[File:DOCKERPI 7.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Package Includes==&lt;br /&gt;
* 1 x 3-Pin Header  &lt;br /&gt;
* 4 x M2.5 nut&lt;br /&gt;
* 8 x M2.5 Copper stick&lt;br /&gt;
* 1 x Acrylic panel&lt;br /&gt;
* 1 x USB Micro data cable&lt;br /&gt;
&lt;br /&gt;
==How to Use==&lt;br /&gt;
===HID Interface===&lt;br /&gt;
The HID interface is implemented using CP2112, please refer to for more information.  [ &#039;&#039;&#039;[https://www.silabs.com/interface/usb-bridges/classic/device.cp2112 CP2112 Classic USB to HID Bridge]&#039;&#039;&#039; ]&lt;br /&gt;
====API Reference====&lt;br /&gt;
[[File:An496-hid-usb-to-smbus-api-specification.pdf]]&lt;br /&gt;
====Quick Reference====&lt;br /&gt;
&#039;&#039;HidSmbus_WriteRequest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function writes the specified number of bytes from the supplied buffer to the specified slave device and returns immediately after sending the request to the CP2112.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_AddressReadRequest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function intiates a read transfer to the specified slave device address and specifies the address to read from on the device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_ForceReadResponse&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function causes the device to send a read response to the host after a read transfer has been issued.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_GetReadResponse&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function returns the read response to a read request. Read and write timeouts as well as transfer retries can be set using HidSmbus_SetSmbusConfig() as described in HidSmbus_SetSmbusConfig.&lt;br /&gt;
&lt;br /&gt;
====Test Conditions====&lt;br /&gt;
DockerPi SensorHub and DockerPi Relay need to be installed on the top of DockerPi-H.&lt;br /&gt;
====Example Code(C#)====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.ComponentModel;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Drawing;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using SLAB_HID_TO_SMBUS;&lt;br /&gt;
&lt;br /&gt;
namespace WindowsFormsApp1&lt;br /&gt;
{&lt;br /&gt;
    public partial class Form1 : Form&lt;br /&gt;
    {&lt;br /&gt;
        const ushort vid = 4292;  //10C4&lt;br /&gt;
        const ushort pid = 60048; //EA90&lt;br /&gt;
        IntPtr connectedDevice;&lt;br /&gt;
&lt;br /&gt;
        const byte RelaySlaveAddress = 0x20;&lt;br /&gt;
        const byte SensorSlaveAddress = 0x2E;&lt;br /&gt;
&lt;br /&gt;
        ushort RelayStauts = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        public Form1()&lt;br /&gt;
        {&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
            uint numDevices = 0;&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_GetNumDevices(ref numDevices, vid, pid);&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_Open(ref connectedDevice, 0, vid, pid);&lt;br /&gt;
&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0x00 }, 2);&lt;br /&gt;
&lt;br /&gt;
            timer_get_temp.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void RelayButton_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            timer_get_temp.Enabled = false;&lt;br /&gt;
&lt;br /&gt;
            if (RelayStauts == 0)&lt;br /&gt;
            {&lt;br /&gt;
                RelayStauts = 1;&lt;br /&gt;
                SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0xFF }, 2);&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                RelayStauts = 0;&lt;br /&gt;
                SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0x00 }, 2);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            timer_get_temp.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void Timer_get_temp_Tick(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
            byte bytesRead = 0;&lt;br /&gt;
            byte status = 0;&lt;br /&gt;
            byte[] readbuff = new byte[61];&lt;br /&gt;
&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_AddressReadRequest(connectedDevice, SensorSlaveAddress, 1, 1, new byte[] { 0x01 });&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_ForceReadResponse(connectedDevice, 1);&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_GetReadResponse(connectedDevice, ref status, readbuff, 61, ref bytesRead);&lt;br /&gt;
&lt;br /&gt;
             if(bytesRead == 1)&lt;br /&gt;
            {&lt;br /&gt;
                progressBar.Value = readbuff[0];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===UART Interface===&lt;br /&gt;
Serial interface supports ASCII mode or HEX mode transmission,3V3 TTL as voltage reference.&lt;br /&gt;
&lt;br /&gt;
You can solder headers or use a jumper wire to connect to your device.&lt;br /&gt;
&lt;br /&gt;
Mode:115200 8N1&lt;br /&gt;
====Interface Protocol====&lt;br /&gt;
Read Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!END&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 00 =&amp;gt; i2c-get || I2C_ADDR_RANGE || DATA-ADDRESS || 0A/0D&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Write Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!DATA!!END&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || * || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 01 =&amp;gt; i2c-set	 || I2C_ADDR_RANGE || DATA-ADDRESS || DATA || 0A/0D&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====How to Communicate====&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Turn on it by sending 0xFF&lt;br /&gt;
The execution code is: AA011501FF The meaning of the code is: AA - starting code, DIR parameter 01 means write, 15 means I2C address 0x15, 01 means first LED register, FF eq 0xFF means Turn it on.&lt;br /&gt;
&lt;br /&gt;
HEX Mode:&lt;br /&gt;
&lt;br /&gt;
After sending each instruction, you need to send the &#039;&#039;&#039;0A&#039;&#039;&#039; or &#039;&#039;&#039;0D&#039;&#039;&#039; end this transaction.&lt;br /&gt;
&lt;br /&gt;
[[File:SendByHeX.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ASCII Mode:&lt;br /&gt;
&lt;br /&gt;
In ASCII mode, you must check &#039;&#039;&#039;AddCrLf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:SendByASCII.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Read back&lt;br /&gt;
The execution code is: AA001501 The meaning of the code is: AA - starting code, DIR parameter 00 means read, 15 means I2C address 0x15, 01 means first LED register.&lt;br /&gt;
&lt;br /&gt;
If you use HEX mode, you can return the result in HEX mode,If you use ASCII mode, you can return the result in ASCII mode,write operation returns nothing.&lt;br /&gt;
&lt;br /&gt;
[[File:SendReturn.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Bluetooth Interface===&lt;br /&gt;
Bluetooth interface only provides &#039;&#039;&#039;LE only&#039;&#039;&#039; protocol support&lt;br /&gt;
====Interface Protocol====&lt;br /&gt;
Read Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 00 =&amp;gt; i2c-get || I2C_ADDR_RANGE || DATA-ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Write Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!DATA&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || *&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 01 =&amp;gt; i2c-set	 || I2C_ADDR_RANGE || DATA-ADDRESS || DATA&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Download SDK====&lt;br /&gt;
* For IOS user&lt;br /&gt;
** nRF Toolbox Download Link: [ https://apps.apple.com/cn/app/nrf-toolbox/id820906058 ]&lt;br /&gt;
* For Android user&lt;br /&gt;
** nRF Toolbox Download Link: [ https://play.google.com/store/apps/details?id=no.nordicsemi.android.nrftoolbox ]&lt;br /&gt;
* For Sources code user&lt;br /&gt;
** Android: [ https://github.com/NordicSemiconductor/Android-nRF-Toolbox ]&lt;br /&gt;
** IOS: [ https://github.com/NordicSemiconductor/IOS-nRF-Toolbox ]&lt;br /&gt;
====Development Method====&lt;br /&gt;
* 1. Download SDK from the links mentioned before and install it to IOS device or Android device.&lt;br /&gt;
* 2. Open the nRF Toolbox app&lt;br /&gt;
[[File:TIM图片20200108112710.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 3. Select &amp;quot;UART&amp;quot; icon and press &amp;quot;Edit&amp;quot; &lt;br /&gt;
[[File:TIM图片20200108112702.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112706.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 4. Select one icon and input the execution code and press OK, and then press the icon will send the code to DockerPi Nightlight board.&lt;br /&gt;
** For example: Turn on NightLight board&#039;s first LED.&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Turn on it by sending 0xFF&amp;lt;br&amp;gt;&lt;br /&gt;
The execution code is:  AA011501FF &lt;br /&gt;
The meaning of the code is: AA - starting code, DIR parameter 01 means write, 15 means I2C address 0x15, 01 means first LED register, FF eq 0xFF means Turn it on.&lt;br /&gt;
[[File:TIM图片20200108112658.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112654.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 5. Press &amp;quot;Connect&amp;quot; to scan the DockerPi-H, and select it.&lt;br /&gt;
[[File:TIM图片20200108112645.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112637.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 6.If the connection is successful, the blue LED will stop blinking and stay on.and you can see log by pressing &amp;quot;show log&amp;quot; link.&lt;br /&gt;
[[File:TIM图片20200108112625.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Product Includes==&lt;br /&gt;
* 1 x DockerPi-H BlueTooth Board &lt;br /&gt;
* 1 x Acrylic Plate&lt;br /&gt;
* 1 x 3-Pin Pin Header&lt;br /&gt;
* 4 x M2.5 Nut&lt;br /&gt;
* 4 x M2.5 Screw&lt;br /&gt;
* 4 x M2.5x6 Copper Stick&lt;br /&gt;
[[File:DOCKERPI 8.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
* Q: Should I connect  DockerPi-H to my Raspberry Pi to make it work? &lt;br /&gt;
  A: No, the DockerPi-H is seperated from Raspberry Pi, all you need to do is connect other DockerPi product such as Nightlight board or 4 channel relay board to it and control it via bluetooth.&lt;br /&gt;
* Q: Can I just using DockerPi-H to build my own project without other DockerPi product? &lt;br /&gt;
  A: No, DockerPi-H is built for DockerPi series product so that you should have another DockerPi series product at least.&lt;br /&gt;
* Q: A write I2C operation has been performed but nothing return? &lt;br /&gt;
  A: Only read operations can return.&lt;br /&gt;
* Q: Whether the UART interface can be directly connected to the RS232 connection terminal?&lt;br /&gt;
  A: The voltages are not compatible and you need to level shift.&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
* GeeekPi, dockerPi, dockerPi-H, bluetooth, BLE&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=EP-0116&amp;diff=7592</id>
		<title>EP-0116</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=EP-0116&amp;diff=7592"/>
		<updated>2020-01-08T08:32:04Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: /* UART Interface */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==DockerPi-H Board ==&lt;br /&gt;
[[File:DOCKERPI 1.jpg|right|300px]]&lt;br /&gt;
&lt;br /&gt;
==Open Source Description==&lt;br /&gt;
Anyone may use the content of the white paper for non-commercial or educational purposes without permission without the permission of the source and copyright notice, but it may not be used for profit or commercial purposes without permission.&lt;br /&gt;
&lt;br /&gt;
Custom product LOGO is &#039;&#039;&#039;NOT&#039;&#039;&#039; allowed without copyright notice,Open source does not mean arbitrary use of trademarks!&lt;br /&gt;
&lt;br /&gt;
Welcome to submit links to your project(or tips),after our review, we will link your project in GitHub Page.&lt;br /&gt;
&lt;br /&gt;
==Product Description==&lt;br /&gt;
DockerPi-H is one of the DockerPi series expansion boards, which can convert I2C communication of other products in the DockerPi series to UART (TTL) / HID / BLE.&amp;lt;br&amp;gt; &lt;br /&gt;
BLE is usually used for the Internet of Things, TTL is usually used for industrial control, HID can communicate without driver.&amp;lt;br&amp;gt;&lt;br /&gt;
This product design for low power consumption, and can be maintained by only a few mA.&amp;lt;br&amp;gt; &lt;br /&gt;
DockerPi-H allows you to operate DockerPi series expansion boards without Raspberry Pi (or similar SBC).&amp;lt;br&amp;gt;&lt;br /&gt;
It can connect your personal computer to DockerPi expansion boards and also allows you to wirelessly control DockerPi expansion boards.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* Open source project (not for commercial distribution)&lt;br /&gt;
* DockerPi series products&lt;br /&gt;
* Programmable, can work with mobile phones, personal computers, industrial computers, ITX.&lt;br /&gt;
* Support BLE, HID, UART-TTL to transmit data&lt;br /&gt;
* Support BLE, UART-TTL data in ASCII mode&lt;br /&gt;
* Support UART-TTL, HID data in HEX mode&lt;br /&gt;
* HID does not require driver support&lt;br /&gt;
* It is recommended to install at the bottom of all modules&lt;br /&gt;
* Low power design&lt;br /&gt;
* BLE module provides FCC / CE certification&lt;br /&gt;
&lt;br /&gt;
==Supported platforms==&lt;br /&gt;
* 1. Tested Mobile devices : IPhone 6s Plus, HUAWEI SCM-AL09&lt;br /&gt;
* 2. Tested Platform : putty.exe(Windows Environment), minicom(Linux Environment), pyserial module(via USB-to-TTL cable)&lt;br /&gt;
* 3. Supoort Interface : Bluetooth LE Only / USB HID / TTL UART&lt;br /&gt;
&lt;br /&gt;
==Sources Repository==&lt;br /&gt;
* [https://github.com/geeekpi/station DockerPi-H Open Sources Page]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Windows.exe CP2112 Software package for Windows]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Linux.bin CP2112 Softare package for Linux]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Mac.zip CP2112 Software package for MAC]&lt;br /&gt;
* [https://github.com/NordicSemiconductor NordicSemiconductor Open Sources Page]&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product View:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 3.jpg|left|320px]]&lt;br /&gt;
|[[File:DOCKERPI 2.jpg|none|320px]]&lt;br /&gt;
|[[File:DOCKERPI 3 2.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
* Application View:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 4.jpg|left|320px]]&lt;br /&gt;
|[[File:DOCKERPI 5.jpg|none|320px]]&lt;br /&gt;
|[[File:DOCKERPI 7.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Package Includes==&lt;br /&gt;
* 1 x 3-Pin Header  &lt;br /&gt;
* 4 x M2.5 nut&lt;br /&gt;
* 8 x M2.5 Copper stick&lt;br /&gt;
* 1 x Acrylic panel&lt;br /&gt;
* 1 x USB Micro data cable&lt;br /&gt;
&lt;br /&gt;
==How to Use==&lt;br /&gt;
===HID Interface===&lt;br /&gt;
The HID interface is implemented using CP2112, please refer to for more information.  [ &#039;&#039;&#039;[https://www.silabs.com/interface/usb-bridges/classic/device.cp2112 CP2112 Classic USB to HID Bridge]&#039;&#039;&#039; ]&lt;br /&gt;
====API Reference====&lt;br /&gt;
[[File:An496-hid-usb-to-smbus-api-specification.pdf]]&lt;br /&gt;
====Quick Reference====&lt;br /&gt;
&#039;&#039;HidSmbus_WriteRequest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function writes the specified number of bytes from the supplied buffer to the specified slave device and returns immediately after sending the request to the CP2112.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_AddressReadRequest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function intiates a read transfer to the specified slave device address and specifies the address to read from on the device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_ForceReadResponse&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function causes the device to send a read response to the host after a read transfer has been issued.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_GetReadResponse&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function returns the read response to a read request. Read and write timeouts as well as transfer retries can be set using HidSmbus_SetSmbusConfig() as described in HidSmbus_SetSmbusConfig.&lt;br /&gt;
&lt;br /&gt;
====Test Conditions====&lt;br /&gt;
DockerPi SensorHub and DockerPi Relay need to be installed on the top of DockerPi-H.&lt;br /&gt;
====Example Code(C#)====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.ComponentModel;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Drawing;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using SLAB_HID_TO_SMBUS;&lt;br /&gt;
&lt;br /&gt;
namespace WindowsFormsApp1&lt;br /&gt;
{&lt;br /&gt;
    public partial class Form1 : Form&lt;br /&gt;
    {&lt;br /&gt;
        const ushort vid = 4292;  //10C4&lt;br /&gt;
        const ushort pid = 60048; //EA90&lt;br /&gt;
        IntPtr connectedDevice;&lt;br /&gt;
&lt;br /&gt;
        const byte RelaySlaveAddress = 0x20;&lt;br /&gt;
        const byte SensorSlaveAddress = 0x2E;&lt;br /&gt;
&lt;br /&gt;
        ushort RelayStauts = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        public Form1()&lt;br /&gt;
        {&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
            uint numDevices = 0;&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_GetNumDevices(ref numDevices, vid, pid);&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_Open(ref connectedDevice, 0, vid, pid);&lt;br /&gt;
&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0x00 }, 2);&lt;br /&gt;
&lt;br /&gt;
            timer_get_temp.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void RelayButton_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            timer_get_temp.Enabled = false;&lt;br /&gt;
&lt;br /&gt;
            if (RelayStauts == 0)&lt;br /&gt;
            {&lt;br /&gt;
                RelayStauts = 1;&lt;br /&gt;
                SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0xFF }, 2);&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                RelayStauts = 0;&lt;br /&gt;
                SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0x00 }, 2);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            timer_get_temp.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void Timer_get_temp_Tick(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
            byte bytesRead = 0;&lt;br /&gt;
            byte status = 0;&lt;br /&gt;
            byte[] readbuff = new byte[61];&lt;br /&gt;
&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_AddressReadRequest(connectedDevice, SensorSlaveAddress, 1, 1, new byte[] { 0x01 });&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_ForceReadResponse(connectedDevice, 1);&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_GetReadResponse(connectedDevice, ref status, readbuff, 61, ref bytesRead);&lt;br /&gt;
&lt;br /&gt;
             if(bytesRead == 1)&lt;br /&gt;
            {&lt;br /&gt;
                progressBar.Value = readbuff[0];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===UART Interface===&lt;br /&gt;
Serial interface supports ASCII mode or HEX mode transmission,3V3 TTL as voltage reference.&lt;br /&gt;
&lt;br /&gt;
You can solder headers or use a jumper wire to connect to your device.&lt;br /&gt;
====Interface Protocol====&lt;br /&gt;
Read Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!END&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 00 =&amp;gt; i2c-get || I2C_ADDR_RANGE || DATA-ADDRESS || 0A/0D&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Write Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!DATA!!END&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || * || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 01 =&amp;gt; i2c-set	 || I2C_ADDR_RANGE || DATA-ADDRESS || DATA || 0A/0D&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====How to Communicate====&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Turn on it by sending 0xFF&lt;br /&gt;
The execution code is: AA011501FF The meaning of the code is: AA - starting code, DIR parameter 01 means write, 15 means I2C address 0x15, 01 means first LED register, FF eq 0xFF means Turn it on.&lt;br /&gt;
&lt;br /&gt;
HEX Mode:&lt;br /&gt;
&lt;br /&gt;
After sending each instruction, you need to send the &#039;&#039;&#039;0A&#039;&#039;&#039; or &#039;&#039;&#039;0D&#039;&#039;&#039; end this transaction.&lt;br /&gt;
&lt;br /&gt;
[[File:SendByHeX.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ASCII Mode:&lt;br /&gt;
&lt;br /&gt;
In ASCII mode, you must check &#039;&#039;&#039;AddCrLf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:SendByASCII.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Read back&lt;br /&gt;
The execution code is: AA001501 The meaning of the code is: AA - starting code, DIR parameter 00 means read, 15 means I2C address 0x15, 01 means first LED register.&lt;br /&gt;
&lt;br /&gt;
If you use HEX mode, you can return the result in HEX mode,If you use ASCII mode, you can return the result in ASCII mode,write operation returns nothing.&lt;br /&gt;
&lt;br /&gt;
[[File:SendReturn.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Bluetooth Interface===&lt;br /&gt;
Bluetooth interface only provides &#039;&#039;&#039;LE only&#039;&#039;&#039; protocol support&lt;br /&gt;
====Interface Protocol====&lt;br /&gt;
Read Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 00 =&amp;gt; i2c-get || I2C_ADDR_RANGE || DATA-ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Write Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!DATA&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || *&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 01 =&amp;gt; i2c-set	 || I2C_ADDR_RANGE || DATA-ADDRESS || DATA&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Download SDK====&lt;br /&gt;
* For IOS user&lt;br /&gt;
** nRF Toolbox Download Link: [ https://apps.apple.com/cn/app/nrf-toolbox/id820906058 ]&lt;br /&gt;
* For Android user&lt;br /&gt;
** nRF Toolbox Download Link: [ https://play.google.com/store/apps/details?id=no.nordicsemi.android.nrftoolbox ]&lt;br /&gt;
* For Sources code user&lt;br /&gt;
** Android: [ https://github.com/NordicSemiconductor/Android-nRF-Toolbox ]&lt;br /&gt;
** IOS: [ https://github.com/NordicSemiconductor/IOS-nRF-Toolbox ]&lt;br /&gt;
====Development Method====&lt;br /&gt;
* 1. Download SDK from the links mentioned before and install it to IOS device or Android device.&lt;br /&gt;
* 2. Open the nRF Toolbox app&lt;br /&gt;
[[File:TIM图片20200108112710.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 3. Select &amp;quot;UART&amp;quot; icon and press &amp;quot;Edit&amp;quot; &lt;br /&gt;
[[File:TIM图片20200108112702.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112706.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 4. Select one icon and input the execution code and press OK, and then press the icon will send the code to DockerPi Nightlight board.&lt;br /&gt;
** For example: Turn on NightLight board&#039;s first LED.&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Turn on it by sending 0xFF&amp;lt;br&amp;gt;&lt;br /&gt;
The execution code is:  AA011501FF &lt;br /&gt;
The meaning of the code is: AA - starting code, DIR parameter 01 means write, 15 means I2C address 0x15, 01 means first LED register, FF eq 0xFF means Turn it on.&lt;br /&gt;
[[File:TIM图片20200108112658.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112654.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 5. Press &amp;quot;Connect&amp;quot; to scan the DockerPi-H, and select it.&lt;br /&gt;
[[File:TIM图片20200108112645.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112637.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 6.If the connection is successful, the blue LED will stop blinking and stay on.and you can see log by pressing &amp;quot;show log&amp;quot; link.&lt;br /&gt;
[[File:TIM图片20200108112625.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Product Includes==&lt;br /&gt;
* 1 x DockerPi-H BlueTooth Board &lt;br /&gt;
* 1 x Acrylic Plate&lt;br /&gt;
* 1 x 3-Pin Pin Header&lt;br /&gt;
* 4 x M2.5 Nut&lt;br /&gt;
* 4 x M2.5 Screw&lt;br /&gt;
* 4 x M2.5x6 Copper Stick&lt;br /&gt;
[[File:DOCKERPI 8.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
* Q: Should I connect  DockerPi-H to my Raspberry Pi to make it work? &lt;br /&gt;
  A: No, the DockerPi-H is seperated from Raspberry Pi, all you need to do is connect other DockerPi product such as Nightlight board or 4 channel relay board to it and control it via bluetooth.&lt;br /&gt;
* Q: Can I just using DockerPi-H to build my own project without other DockerPi product? &lt;br /&gt;
  A: No, DockerPi-H is built for DockerPi series product so that you should have another DockerPi series product at least.&lt;br /&gt;
* Q: A write I2C operation has been performed but nothing return? &lt;br /&gt;
  A: Only read operations can return.&lt;br /&gt;
* Q: Whether the UART interface can be directly connected to the RS232 connection terminal?&lt;br /&gt;
  A: The voltages are not compatible and you need to level shift.&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
* GeeekPi, dockerPi, dockerPi-H, bluetooth, BLE&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
	<entry>
		<id>https://wiki.52pi.com/index.php?title=EP-0116&amp;diff=7591</id>
		<title>EP-0116</title>
		<link rel="alternate" type="text/html" href="https://wiki.52pi.com/index.php?title=EP-0116&amp;diff=7591"/>
		<updated>2020-01-08T08:31:34Z</updated>

		<summary type="html">&lt;p&gt;TaterLi: /* Bluetooth Interface */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==DockerPi-H Board ==&lt;br /&gt;
[[File:DOCKERPI 1.jpg|right|300px]]&lt;br /&gt;
&lt;br /&gt;
==Open Source Description==&lt;br /&gt;
Anyone may use the content of the white paper for non-commercial or educational purposes without permission without the permission of the source and copyright notice, but it may not be used for profit or commercial purposes without permission.&lt;br /&gt;
&lt;br /&gt;
Custom product LOGO is &#039;&#039;&#039;NOT&#039;&#039;&#039; allowed without copyright notice,Open source does not mean arbitrary use of trademarks!&lt;br /&gt;
&lt;br /&gt;
Welcome to submit links to your project(or tips),after our review, we will link your project in GitHub Page.&lt;br /&gt;
&lt;br /&gt;
==Product Description==&lt;br /&gt;
DockerPi-H is one of the DockerPi series expansion boards, which can convert I2C communication of other products in the DockerPi series to UART (TTL) / HID / BLE.&amp;lt;br&amp;gt; &lt;br /&gt;
BLE is usually used for the Internet of Things, TTL is usually used for industrial control, HID can communicate without driver.&amp;lt;br&amp;gt;&lt;br /&gt;
This product design for low power consumption, and can be maintained by only a few mA.&amp;lt;br&amp;gt; &lt;br /&gt;
DockerPi-H allows you to operate DockerPi series expansion boards without Raspberry Pi (or similar SBC).&amp;lt;br&amp;gt;&lt;br /&gt;
It can connect your personal computer to DockerPi expansion boards and also allows you to wirelessly control DockerPi expansion boards.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
* Open source project (not for commercial distribution)&lt;br /&gt;
* DockerPi series products&lt;br /&gt;
* Programmable, can work with mobile phones, personal computers, industrial computers, ITX.&lt;br /&gt;
* Support BLE, HID, UART-TTL to transmit data&lt;br /&gt;
* Support BLE, UART-TTL data in ASCII mode&lt;br /&gt;
* Support UART-TTL, HID data in HEX mode&lt;br /&gt;
* HID does not require driver support&lt;br /&gt;
* It is recommended to install at the bottom of all modules&lt;br /&gt;
* Low power design&lt;br /&gt;
* BLE module provides FCC / CE certification&lt;br /&gt;
&lt;br /&gt;
==Supported platforms==&lt;br /&gt;
* 1. Tested Mobile devices : IPhone 6s Plus, HUAWEI SCM-AL09&lt;br /&gt;
* 2. Tested Platform : putty.exe(Windows Environment), minicom(Linux Environment), pyserial module(via USB-to-TTL cable)&lt;br /&gt;
* 3. Supoort Interface : Bluetooth LE Only / USB HID / TTL UART&lt;br /&gt;
&lt;br /&gt;
==Sources Repository==&lt;br /&gt;
* [https://github.com/geeekpi/station DockerPi-H Open Sources Page]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Windows.exe CP2112 Software package for Windows]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Linux.bin CP2112 Softare package for Linux]&lt;br /&gt;
* [https://www.silabs.com/documents/public/software/CP2112_Mac.zip CP2112 Software package for MAC]&lt;br /&gt;
* [https://github.com/NordicSemiconductor NordicSemiconductor Open Sources Page]&lt;br /&gt;
&lt;br /&gt;
==Gallery==&lt;br /&gt;
* Product View:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 3.jpg|left|320px]]&lt;br /&gt;
|[[File:DOCKERPI 2.jpg|none|320px]]&lt;br /&gt;
|[[File:DOCKERPI 3 2.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
* Application View:&lt;br /&gt;
{|&lt;br /&gt;
|[[File:DOCKERPI 4.jpg|left|320px]]&lt;br /&gt;
|[[File:DOCKERPI 5.jpg|none|320px]]&lt;br /&gt;
|[[File:DOCKERPI 7.jpg|none|320px]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Package Includes==&lt;br /&gt;
* 1 x 3-Pin Header  &lt;br /&gt;
* 4 x M2.5 nut&lt;br /&gt;
* 8 x M2.5 Copper stick&lt;br /&gt;
* 1 x Acrylic panel&lt;br /&gt;
* 1 x USB Micro data cable&lt;br /&gt;
&lt;br /&gt;
==How to Use==&lt;br /&gt;
===HID Interface===&lt;br /&gt;
The HID interface is implemented using CP2112, please refer to for more information.  [ &#039;&#039;&#039;[https://www.silabs.com/interface/usb-bridges/classic/device.cp2112 CP2112 Classic USB to HID Bridge]&#039;&#039;&#039; ]&lt;br /&gt;
====API Reference====&lt;br /&gt;
[[File:An496-hid-usb-to-smbus-api-specification.pdf]]&lt;br /&gt;
====Quick Reference====&lt;br /&gt;
&#039;&#039;HidSmbus_WriteRequest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function writes the specified number of bytes from the supplied buffer to the specified slave device and returns immediately after sending the request to the CP2112.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_AddressReadRequest&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function intiates a read transfer to the specified slave device address and specifies the address to read from on the device.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_ForceReadResponse&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function causes the device to send a read response to the host after a read transfer has been issued.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;HidSmbus_GetReadResponse&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This function returns the read response to a read request. Read and write timeouts as well as transfer retries can be set using HidSmbus_SetSmbusConfig() as described in HidSmbus_SetSmbusConfig.&lt;br /&gt;
&lt;br /&gt;
====Test Conditions====&lt;br /&gt;
DockerPi SensorHub and DockerPi Relay need to be installed on the top of DockerPi-H.&lt;br /&gt;
====Example Code(C#)====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using System.ComponentModel;&lt;br /&gt;
using System.Data;&lt;br /&gt;
using System.Drawing;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Text;&lt;br /&gt;
using System.Threading;&lt;br /&gt;
using System.Threading.Tasks;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using SLAB_HID_TO_SMBUS;&lt;br /&gt;
&lt;br /&gt;
namespace WindowsFormsApp1&lt;br /&gt;
{&lt;br /&gt;
    public partial class Form1 : Form&lt;br /&gt;
    {&lt;br /&gt;
        const ushort vid = 4292;  //10C4&lt;br /&gt;
        const ushort pid = 60048; //EA90&lt;br /&gt;
        IntPtr connectedDevice;&lt;br /&gt;
&lt;br /&gt;
        const byte RelaySlaveAddress = 0x20;&lt;br /&gt;
        const byte SensorSlaveAddress = 0x2E;&lt;br /&gt;
&lt;br /&gt;
        ushort RelayStauts = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        public Form1()&lt;br /&gt;
        {&lt;br /&gt;
            InitializeComponent();&lt;br /&gt;
            uint numDevices = 0;&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_GetNumDevices(ref numDevices, vid, pid);&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_Open(ref connectedDevice, 0, vid, pid);&lt;br /&gt;
&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0x00 }, 2);&lt;br /&gt;
&lt;br /&gt;
            timer_get_temp.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void RelayButton_Click(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
            timer_get_temp.Enabled = false;&lt;br /&gt;
&lt;br /&gt;
            if (RelayStauts == 0)&lt;br /&gt;
            {&lt;br /&gt;
                RelayStauts = 1;&lt;br /&gt;
                SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0xFF }, 2);&lt;br /&gt;
&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                RelayStauts = 0;&lt;br /&gt;
                SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_WriteRequest(connectedDevice, RelaySlaveAddress, new byte[] { 0x01, 0x00 }, 2);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            timer_get_temp.Enabled = true;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        private void Timer_get_temp_Tick(object sender, EventArgs e)&lt;br /&gt;
        {&lt;br /&gt;
&lt;br /&gt;
            byte bytesRead = 0;&lt;br /&gt;
            byte status = 0;&lt;br /&gt;
            byte[] readbuff = new byte[61];&lt;br /&gt;
&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_AddressReadRequest(connectedDevice, SensorSlaveAddress, 1, 1, new byte[] { 0x01 });&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_ForceReadResponse(connectedDevice, 1);&lt;br /&gt;
            SLAB_HID_TO_SMBUS.CP2112_DLL.HidSmbus_GetReadResponse(connectedDevice, ref status, readbuff, 61, ref bytesRead);&lt;br /&gt;
&lt;br /&gt;
             if(bytesRead == 1)&lt;br /&gt;
            {&lt;br /&gt;
                progressBar.Value = readbuff[0];&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===UART Interface===&lt;br /&gt;
Serial interface supports ASCII mode or HEX mode transmission,3V3 TTL as voltage reference.&lt;br /&gt;
&lt;br /&gt;
You can solder headers or use a jumper wire to connect to your device.&lt;br /&gt;
====Interface Protocol====&lt;br /&gt;
Read Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!END&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 00 =&amp;gt; i2c-get || I2C_ADDR_RANGE || DATA-ADDRESS || 0A/0D&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Write Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!DATA!!END&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || * || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 01 =&amp;gt; i2c-set	 || I2C_ADDR_RANGE || DATA-ADDRESS || DATA || 0A/0D&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====How to Communicate====&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Turn on it by sending 0xFF&lt;br /&gt;
The execution code is: AA011501FF The meaning of the code is: AA - starting code, DIR parameter 01 means write, 15 means I2C address 0x15, 01 means first LED register, FF eq 0xFF means Turn it on.&lt;br /&gt;
&lt;br /&gt;
HEX Mode:&lt;br /&gt;
&lt;br /&gt;
After sending each instruction, you need to send the &#039;&#039;&#039;0A&#039;&#039;&#039; or &#039;&#039;&#039;0D&#039;&#039;&#039; end this transaction.&lt;br /&gt;
&lt;br /&gt;
[[File:SendByHeX.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ASCII Mode:&lt;br /&gt;
&lt;br /&gt;
In ASCII mode, you must check &#039;&#039;&#039;AddCrLf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[[File:SendByASCII.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Read back&lt;br /&gt;
The execution code is: AA001501 The meaning of the code is: AA - starting code, DIR parameter 01 means read, 15 means I2C address 0x15, 01 means first LED register.&lt;br /&gt;
&lt;br /&gt;
If you use HEX mode, you can return the result in HEX mode,If you use ASCII mode, you can return the result in ASCII mode,write operation returns nothing.&lt;br /&gt;
&lt;br /&gt;
[[File:SendReturn.png|left]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Bluetooth Interface===&lt;br /&gt;
Bluetooth interface only provides &#039;&#039;&#039;LE only&#039;&#039;&#039; protocol support&lt;br /&gt;
====Interface Protocol====&lt;br /&gt;
Read Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 00 =&amp;gt; i2c-get || I2C_ADDR_RANGE || DATA-ADDRESS&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Write Function:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
!Function!!Preamble!!Direction!!CHIP-ADDRESS!!DATA-ADDRESS!!DATA&lt;br /&gt;
|-&lt;br /&gt;
|Length|| 1 || 1 || 1 || 1 || *&lt;br /&gt;
|-&lt;br /&gt;
|Comment|| AA || 01 =&amp;gt; i2c-set	 || I2C_ADDR_RANGE || DATA-ADDRESS || DATA&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====Download SDK====&lt;br /&gt;
* For IOS user&lt;br /&gt;
** nRF Toolbox Download Link: [ https://apps.apple.com/cn/app/nrf-toolbox/id820906058 ]&lt;br /&gt;
* For Android user&lt;br /&gt;
** nRF Toolbox Download Link: [ https://play.google.com/store/apps/details?id=no.nordicsemi.android.nrftoolbox ]&lt;br /&gt;
* For Sources code user&lt;br /&gt;
** Android: [ https://github.com/NordicSemiconductor/Android-nRF-Toolbox ]&lt;br /&gt;
** IOS: [ https://github.com/NordicSemiconductor/IOS-nRF-Toolbox ]&lt;br /&gt;
====Development Method====&lt;br /&gt;
* 1. Download SDK from the links mentioned before and install it to IOS device or Android device.&lt;br /&gt;
* 2. Open the nRF Toolbox app&lt;br /&gt;
[[File:TIM图片20200108112710.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 3. Select &amp;quot;UART&amp;quot; icon and press &amp;quot;Edit&amp;quot; &lt;br /&gt;
[[File:TIM图片20200108112702.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112706.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 4. Select one icon and input the execution code and press OK, and then press the icon will send the code to DockerPi Nightlight board.&lt;br /&gt;
** For example: Turn on NightLight board&#039;s first LED.&lt;br /&gt;
NightLight board&#039;s control bus is 1, I2C address is 0x15, and first LED register is 0x01, Turn on it by sending 0xFF&amp;lt;br&amp;gt;&lt;br /&gt;
The execution code is:  AA011501FF &lt;br /&gt;
The meaning of the code is: AA - starting code, DIR parameter 01 means write, 15 means I2C address 0x15, 01 means first LED register, FF eq 0xFF means Turn it on.&lt;br /&gt;
[[File:TIM图片20200108112658.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112654.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 5. Press &amp;quot;Connect&amp;quot; to scan the DockerPi-H, and select it.&lt;br /&gt;
[[File:TIM图片20200108112645.png|left|320px]]&lt;br /&gt;
[[File:TIM图片20200108112637.png|none|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
* 6.If the connection is successful, the blue LED will stop blinking and stay on.and you can see log by pressing &amp;quot;show log&amp;quot; link.&lt;br /&gt;
[[File:TIM图片20200108112625.png|left|320px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Product Includes==&lt;br /&gt;
* 1 x DockerPi-H BlueTooth Board &lt;br /&gt;
* 1 x Acrylic Plate&lt;br /&gt;
* 1 x 3-Pin Pin Header&lt;br /&gt;
* 4 x M2.5 Nut&lt;br /&gt;
* 4 x M2.5 Screw&lt;br /&gt;
* 4 x M2.5x6 Copper Stick&lt;br /&gt;
[[File:DOCKERPI 8.jpg|left|500px]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear:both;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==FAQ==&lt;br /&gt;
* Q: Should I connect  DockerPi-H to my Raspberry Pi to make it work? &lt;br /&gt;
  A: No, the DockerPi-H is seperated from Raspberry Pi, all you need to do is connect other DockerPi product such as Nightlight board or 4 channel relay board to it and control it via bluetooth.&lt;br /&gt;
* Q: Can I just using DockerPi-H to build my own project without other DockerPi product? &lt;br /&gt;
  A: No, DockerPi-H is built for DockerPi series product so that you should have another DockerPi series product at least.&lt;br /&gt;
* Q: A write I2C operation has been performed but nothing return? &lt;br /&gt;
  A: Only read operations can return.&lt;br /&gt;
* Q: Whether the UART interface can be directly connected to the RS232 connection terminal?&lt;br /&gt;
  A: The voltages are not compatible and you need to level shift.&lt;br /&gt;
&lt;br /&gt;
==Keywords==&lt;br /&gt;
* GeeekPi, dockerPi, dockerPi-H, bluetooth, BLE&lt;/div&gt;</summary>
		<author><name>TaterLi</name></author>
	</entry>
</feed>