Skip to content

Commit cde3315

Browse files
committed
Initial release
0 parents  commit cde3315

File tree

8 files changed

+2126
-0
lines changed

8 files changed

+2126
-0
lines changed

3RD_PARTY_LICENSES.txt

Lines changed: 195 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,195 @@
1+
************************************
2+
** Hideaki Tai ESP32DMASPI **
3+
************************************
4+
5+
MIT License
6+
7+
Copyright (c) 2019 Hideaki Tai
8+
9+
Permission is hereby granted, free of charge, to any person obtaining a copy
10+
of this software and associated documentation files (the "Software"), to deal
11+
in the Software without restriction, including without limitation the rights
12+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13+
copies of the Software, and to permit persons to whom the Software is
14+
furnished to do so, subject to the following conditions:
15+
16+
The above copyright notice and this permission notice shall be included in all
17+
copies or substantial portions of the Software.
18+
19+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25+
SOFTWARE.
26+
27+
************************************
28+
** Makuna NeoPixelBus **
29+
************************************
30+
31+
GNU LESSER GENERAL PUBLIC LICENSE
32+
Version 3, 29 June 2007
33+
34+
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
35+
Everyone is permitted to copy and distribute verbatim copies
36+
of this license document, but changing it is not allowed.
37+
38+
39+
This version of the GNU Lesser General Public License incorporates
40+
the terms and conditions of version 3 of the GNU General Public
41+
License, supplemented by the additional permissions listed below.
42+
43+
0. Additional Definitions.
44+
45+
As used herein, "this License" refers to version 3 of the GNU Lesser
46+
General Public License, and the "GNU GPL" refers to version 3 of the GNU
47+
General Public License.
48+
49+
"The Library" refers to a covered work governed by this License,
50+
other than an Application or a Combined Work as defined below.
51+
52+
An "Application" is any work that makes use of an interface provided
53+
by the Library, but which is not otherwise based on the Library.
54+
Defining a subclass of a class defined by the Library is deemed a mode
55+
of using an interface provided by the Library.
56+
57+
A "Combined Work" is a work produced by combining or linking an
58+
Application with the Library. The particular version of the Library
59+
with which the Combined Work was made is also called the "Linked
60+
Version".
61+
62+
The "Minimal Corresponding Source" for a Combined Work means the
63+
Corresponding Source for the Combined Work, excluding any source code
64+
for portions of the Combined Work that, considered in isolation, are
65+
based on the Application, and not on the Linked Version.
66+
67+
The "Corresponding Application Code" for a Combined Work means the
68+
object code and/or source code for the Application, including any data
69+
and utility programs needed for reproducing the Combined Work from the
70+
Application, but excluding the System Libraries of the Combined Work.
71+
72+
1. Exception to Section 3 of the GNU GPL.
73+
74+
You may convey a covered work under sections 3 and 4 of this License
75+
without being bound by section 3 of the GNU GPL.
76+
77+
2. Conveying Modified Versions.
78+
79+
If you modify a copy of the Library, and, in your modifications, a
80+
facility refers to a function or data to be supplied by an Application
81+
that uses the facility (other than as an argument passed when the
82+
facility is invoked), then you may convey a copy of the modified
83+
version:
84+
85+
a) under this License, provided that you make a good faith effort to
86+
ensure that, in the event an Application does not supply the
87+
function or data, the facility still operates, and performs
88+
whatever part of its purpose remains meaningful, or
89+
90+
b) under the GNU GPL, with none of the additional permissions of
91+
this License applicable to that copy.
92+
93+
3. Object Code Incorporating Material from Library Header Files.
94+
95+
The object code form of an Application may incorporate material from
96+
a header file that is part of the Library. You may convey such object
97+
code under terms of your choice, provided that, if the incorporated
98+
material is not limited to numerical parameters, data structure
99+
layouts and accessors, or small macros, inline functions and templates
100+
(ten or fewer lines in length), you do both of the following:
101+
102+
a) Give prominent notice with each copy of the object code that the
103+
Library is used in it and that the Library and its use are
104+
covered by this License.
105+
106+
b) Accompany the object code with a copy of the GNU GPL and this license
107+
document.
108+
109+
4. Combined Works.
110+
111+
You may convey a Combined Work under terms of your choice that,
112+
taken together, effectively do not restrict modification of the
113+
portions of the Library contained in the Combined Work and reverse
114+
engineering for debugging such modifications, if you also do each of
115+
the following:
116+
117+
a) Give prominent notice with each copy of the Combined Work that
118+
the Library is used in it and that the Library and its use are
119+
covered by this License.
120+
121+
b) Accompany the Combined Work with a copy of the GNU GPL and this license
122+
document.
123+
124+
c) For a Combined Work that displays copyright notices during
125+
execution, include the copyright notice for the Library among
126+
these notices, as well as a reference directing the user to the
127+
copies of the GNU GPL and this license document.
128+
129+
d) Do one of the following:
130+
131+
0) Convey the Minimal Corresponding Source under the terms of this
132+
License, and the Corresponding Application Code in a form
133+
suitable for, and under terms that permit, the user to
134+
recombine or relink the Application with a modified version of
135+
the Linked Version to produce a modified Combined Work, in the
136+
manner specified by section 6 of the GNU GPL for conveying
137+
Corresponding Source.
138+
139+
1) Use a suitable shared library mechanism for linking with the
140+
Library. A suitable mechanism is one that (a) uses at run time
141+
a copy of the Library already present on the user's computer
142+
system, and (b) will operate properly with a modified version
143+
of the Library that is interface-compatible with the Linked
144+
Version.
145+
146+
e) Provide Installation Information, but only if you would otherwise
147+
be required to provide such information under section 6 of the
148+
GNU GPL, and only to the extent that such information is
149+
necessary to install and execute a modified version of the
150+
Combined Work produced by recombining or relinking the
151+
Application with a modified version of the Linked Version. (If
152+
you use option 4d0, the Installation Information must accompany
153+
the Minimal Corresponding Source and Corresponding Application
154+
Code. If you use option 4d1, you must provide the Installation
155+
Information in the manner specified by section 6 of the GNU GPL
156+
for conveying Corresponding Source.)
157+
158+
5. Combined Libraries.
159+
160+
You may place library facilities that are a work based on the
161+
Library side by side in a single library together with other library
162+
facilities that are not Applications and are not covered by this
163+
License, and convey such a combined library under terms of your
164+
choice, if you do both of the following:
165+
166+
a) Accompany the combined library with a copy of the same work based
167+
on the Library, uncombined with any other library facilities,
168+
conveyed under the terms of this License.
169+
170+
b) Give prominent notice with the combined library that part of it
171+
is a work based on the Library, and explaining where to find the
172+
accompanying uncombined form of the same work.
173+
174+
6. Revised Versions of the GNU Lesser General Public License.
175+
176+
The Free Software Foundation may publish revised and/or new versions
177+
of the GNU Lesser General Public License from time to time. Such new
178+
versions will be similar in spirit to the present version, but may
179+
differ in detail to address new problems or concerns.
180+
181+
Each version is given a distinguishing version number. If the
182+
Library as you received it specifies that a certain numbered version
183+
of the GNU Lesser General Public License "or any later version"
184+
applies to it, you have the option of following the terms and
185+
conditions either of that published version or of any later version
186+
published by the Free Software Foundation. If the Library as you
187+
received it does not specify a version number of the GNU Lesser
188+
General Public License, you may choose any version of the GNU Lesser
189+
General Public License ever published by the Free Software Foundation.
190+
191+
If the Library as you received it specifies that a proxy can decide
192+
whether future versions of the GNU Lesser General Public License shall
193+
apply, that proxy's public statement of acceptance of any version is
194+
permanent authorization for you to choose that version for the
195+
Library.

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2021 awawa-dev
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

README.md

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
# HyperSPI
2+
SPI bridge for AWA protocol to control a LED strip from HyperHDR (version v17 and above).
3+
Diagnostic data available at the serial port output (@115200 speed).
4+
Rpi acts as a master, ESP8266/ESP32 is in slave mode.
5+
6+
| LED strip / Device | ESP8266 | ESP32 |
7+
|--------------------------------|:-------:|:-----------:|
8+
| SK6812 cold white | yes | yes |
9+
| SK6812 neutral white | yes | yes |
10+
| WS281x | yes | yes |
11+
| SPI (APA102, SK9812, HD107...) | no | yes (beta) |
12+
13+
14+
# Why this project was created?
15+
16+
- SPI is much faster. HyperSPI works best at speed over 20Mb.
17+
- SPI doesn't have any data integration check. But AWA protocol does have one.
18+
- you don't need to have 2Mb capable serial port on your ESP board.
19+
- I needed it and I was able to implemented it ;)
20+
- There is a hardware limitation for the Rpi current design...even if you connect your grabber to the USB3.0 in the USB2.0 mode the adalight running driver causes quite a big USB transfer drop. So we can replace Adalight with a pure SPI data transfer as an alternative.
21+
22+
See what's happening for USB2.0 bus... my problematic Ezcap 320 @ 50 fps fell back to USB2.0 mode and did not like the CH340G serial port driver at all (real USB3.0 should not be affected, but not tested it):
23+
![slow](https://user-images.githubusercontent.com/69086569/129419155-f6366c27-ea2e-42a9-aa85-ffade3747700.jpg)
24+
25+
That's how the grabbers works when other device is disconnected from the USB port.
26+
![fast](https://user-images.githubusercontent.com/69086569/129419160-c546a0ea-4990-4215-a0a9-8fb1288e0ac9.jpg)
27+
28+
# Software configuration (HyperHDR v17 and above)
29+
Select esp8266 protocol for ESP proprietary SPI protocol, esp32 for ESP32 boards or 'standard' for other devices.
30+
31+
![config](https://user-images.githubusercontent.com/69086569/129935143-6d694142-fe07-4c45-a1e1-bca34728dd50.jpg)
32+
33+
# Hardware connection
34+
35+
## ESP8266 (only 3 SPI cables are needed: MOSI, MISO, SCLK + common ground)
36+
37+
**ESP8266 SPI input:** GPIO 14 for Clock (SCK), GPIO 12 for Data (MISO), GPIO 13 for Data (MOSI)
38+
**LED output:** GPIO 2
39+
40+
![cables](https://user-images.githubusercontent.com/69086569/129419654-84087cc5-b74f-4d8d-84c3-54ef3d845627.jpg)
41+
![rpi](https://user-images.githubusercontent.com/69086569/129419668-17621117-0e3a-4cfc-a5b3-02932824889e.jpg)
42+
![esp](https://user-images.githubusercontent.com/69086569/129419687-dbd0d5b0-1b45-4ce5-8666-6469b0970952.jpg)
43+
44+
## ESP32 (need all 4 SPI cables + common ground)
45+
46+
**Warning**: HyperSPI set SPI_MODE0 on default due to a bug with a SPI bit shift [link](https://github.com/espressif/esp-idf/search?q=dma+spi+bit+shift&type=issues), you may need to change it to SPI_MODE3 for slower speeds
47+
48+
**ESP32 SPI input:** VSPI interface, GPIO 5 for SPI Chip Select, GPIO 18 for Clock (SCK), GPIO 19 for Data (MISO), GPIO 23 for Data (MOSI)
49+
**LED output (non-SPI):** GPIO 2
50+
**LED output (SPI):** GPIO 0 for Clock, GPIO 2 for Data
51+
52+
![esp2](https://user-images.githubusercontent.com/69086569/130372512-d3dd4dde-5069-4ad9-8649-7ea8e874ee07.jpg)
53+
![esp](https://user-images.githubusercontent.com/69086569/130372517-dfc61fd4-e700-49f1-b3a1-b56c8468837f.jpg)
54+
55+
# Compiling
56+
57+
Compile the sketch using Arduino IDE. You need:
58+
- https://github.com/espressif/arduino-esp32 (boards for ESP32)
59+
- https://github.com/esp8266/Arduino/ (boards for ESP8266)
60+
- Makuna/NeoPixelBus (install from Arduino IDE: manage libraries)
61+
- ESP32DMASPI (install from Arduino IDE: manage libraries)
62+
63+
**Options (first lines of the sketch):**
64+
65+
For RGB strip like WS8212b comment it with a '//', leave it for RGBW SK6812:
66+
*#define THIS_IS_RGBW*
67+
68+
Skip first led in the strip, that is used as level shifter:
69+
*bool skipFirstLed = true;*
70+
71+
Don't change LED's count as it is dynamic.
72+
73+
74+
75+
76+
77+
78+

0 commit comments

Comments
 (0)