Repository files navigation

This is a very sketchy description of the "espd" version of Pd, which runs on
Espressif ESP32 bords, either generic ones (where you have to add your own
audio hardware) or LyraT or LyraT-mini boards (with built-in audio). To use
these you will almost certainly have to compile your own version, at least
either to include your own patch or to specify the WIFI settings in the file
main/espd.h .
The generic version can be used with INMP441 microphone and/or MAX98357A
DSc/amplifier. The SPH0645 mic is known NOT TO WORK with ESP32s.
The instructions here work for me on linux; they _should_ work on macintoshes
and PCs with appropriate changes (in the shell commands for instance).
By default espd runs a built-in patch which is included as a C string defined
in the file "main/test-patch.c". You can defeat this behavior by turing off
PD_INCLUDEPATCH in main/espd.h .
You can conditionally compile wifi or bluetooth support, which enables you to
send and receive messages and/or to send patches from a host computer. If you are using wifi, set up a host patch that listens on port 4498 (by
default). When the board is booted it will connect to that port. When you get
the connection, you can load a test patch on the esp, by sending the message "pd
begin-new poodle .", then the contents of the patch, then "pd end-new" . Whether you do this or rely on a pre-compiled patch, you can send messages to
any named object (such as a "receive") on the ESP32 board
To send a patch over wifi, you must compile and load espd on the board, boot the
board, and then run a patch on the host computer that waits for the board to
make a TCP connection to it. Once connected, the host patch then sends Pd
messages to load a different patch on the esp. The two patches then can
communicate over the same RCP connection. There is a simple example in the
subdirectory "test-patch".
If the connection is ever broken the board reboots itself and (if WIFI is
compiled in) tries to establish a new WIFI connection. Each time the host patch
gets a new connection it then has to reload the ESP patch.
As it stands all the vanilla Pd objects are compiled into espd except for the
FFT objects and (oddly) netsend/netreceive. You can rebuild it with a different
choice of objects compiled in, including your own objects.
Steps to get this running: first install the espd compile chain and (for LyraT)
the "ADF" audio development platform. The ESP documentation is excellent. Start here:
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/linux-macos-setup.html
another (third-party) URL that might be useful:
https://gitdemo.readthedocs.io/en/latest/build-system.html
The compilation chain depends on an "sdkconfig" file. Samples for the two LyraT
boards are included as "sdkconfig.lyrat" and "sdkconfig.lyratmini", and a sample
for a bare WROOM module is included as "sdkconfig.wroom". You can rename one
of these as "sdkconfig" before invoking the compiler.
In addition to the sources youre looking at you'll need Pd, preferably the
latest version, although I'm testing this with Pd commit
177350fc4999b74ea28a12ba2981baa6ae04c6f0 (0.55-1 with a couple of tweaks added).
This is included as a git submodule ("git clone --recursive [...]") . Or
you can just copy the pd source into a subdirectory "pd" of this directory.
Then you must apply three small patches to the Pd source, found in the
subdirectory "patches".
To compile, set up your environment variables and issue commands to compile,
flash, and run the monitor program to see debugging output (see bottom of this
page to see what I type on my system). This should be done from a shell window
that is in this (espd) directory.
CAUTION: compiling for LyraT boards works differently from raw WROOM boards.
Commands I issue to shell to compile (customize to your own installation):
********* For generic ESP32 modules: *********
FIRST copy sdkconfig.wroom to sdkconfig. Then:
export IDF_TOOLS_PATH=~/bis/var/esp/tools
export IDF_PATH=~/bis/var/esp/esp-idf
. $IDF_PATH/export.sh
********* for LyraT boards: *********
FIRST edit Cmakelists.txt to enable esp_adf and copy one of sdkconfig.lyrat*
to sdkconfig. Then:
export IDF_TOOLS_PATH=~/bis/var/esp/tools
export ADF_PATH=~/bis/var/esp/esp-adf
. $ADF_PATH/esp-idf/export.sh
then (for either type of board):
(optional:) idf.py menuconfig
idf.py build
idf.py flash
idf.py monitor
... if idf.py doesn't find your TTY port you can try, for instance:
idf.py -p /dev/ttyUSB0 flash

About

No description, website, or topics provided.

Resources

Stars

7 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

This is a very sketchy description of the "espd" version of Pd, which runs on
Espressif ESP32 bords, either generic ones (where you have to add your own
audio hardware) or LyraT or LyraT-mini boards (with built-in audio). To use
these you will almost certainly have to compile your own version, at least
either to include your own patch or to specify the WIFI settings in the file
main/espd.h .
The generic version can be used with INMP441 microphone and/or MAX98357A
DSc/amplifier. The SPH0645 mic is known NOT TO WORK with ESP32s.
The instructions here work for me on linux; they _should_ work on macintoshes
and PCs with appropriate changes (in the shell commands for instance).
By default espd runs a built-in patch which is included as a C string defined
in the file "main/test-patch.c". You can defeat this behavior by turing off
PD_INCLUDEPATCH in main/espd.h .
You can conditionally compile wifi or bluetooth support, which enables you to
send and receive messages and/or to send patches from a host computer. If you are using wifi, set up a host patch that listens on port 4498 (by
default). When the board is booted it will connect to that port. When you get
the connection, you can load a test patch on the esp, by sending the message "pd
begin-new poodle .", then the contents of the patch, then "pd end-new" . Whether you do this or rely on a pre-compiled patch, you can send messages to
any named object (such as a "receive") on the ESP32 board
To send a patch over wifi, you must compile and load espd on the board, boot the
board, and then run a patch on the host computer that waits for the board to
make a TCP connection to it. Once connected, the host patch then sends Pd
messages to load a different patch on the esp. The two patches then can
communicate over the same RCP connection. There is a simple example in the
subdirectory "test-patch".
If the connection is ever broken the board reboots itself and (if WIFI is
compiled in) tries to establish a new WIFI connection. Each time the host patch
gets a new connection it then has to reload the ESP patch.
As it stands all the vanilla Pd objects are compiled into espd except for the
FFT objects and (oddly) netsend/netreceive. You can rebuild it with a different
choice of objects compiled in, including your own objects.
Steps to get this running: first install the espd compile chain and (for LyraT)
the "ADF" audio development platform. The ESP documentation is excellent. Start here:
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/linux-macos-setup.html
another (third-party) URL that might be useful:
https://gitdemo.readthedocs.io/en/latest/build-system.html
The compilation chain depends on an "sdkconfig" file. Samples for the two LyraT
boards are included as "sdkconfig.lyrat" and "sdkconfig.lyratmini", and a sample
for a bare WROOM module is included as "sdkconfig.wroom". You can rename one
of these as "sdkconfig" before invoking the compiler.
In addition to the sources youre looking at you'll need Pd, preferably the
latest version, although I'm testing this with Pd commit
177350fc4999b74ea28a12ba2981baa6ae04c6f0 (0.55-1 with a couple of tweaks added).
This is included as a git submodule ("git clone --recursive [...]") . Or
you can just copy the pd source into a subdirectory "pd" of this directory.
Then you must apply three small patches to the Pd source, found in the
subdirectory "patches".
To compile, set up your environment variables and issue commands to compile,
flash, and run the monitor program to see debugging output (see bottom of this
page to see what I type on my system). This should be done from a shell window
that is in this (espd) directory.
CAUTION: compiling for LyraT boards works differently from raw WROOM boards.
Commands I issue to shell to compile (customize to your own installation):
********* For generic ESP32 modules: *********
FIRST copy sdkconfig.wroom to sdkconfig. Then:
export IDF_TOOLS_PATH=~/bis/var/esp/tools
export IDF_PATH=~/bis/var/esp/esp-idf
. $IDF_PATH/export.sh
********* for LyraT boards: *********
FIRST edit Cmakelists.txt to enable esp_adf and copy one of sdkconfig.lyrat*
to sdkconfig. Then:
export IDF_TOOLS_PATH=~/bis/var/esp/tools
export ADF_PATH=~/bis/var/esp/esp-adf
. $ADF_PATH/esp-idf/export.sh
then (for either type of board):
(optional:) idf.py menuconfig
idf.py build
idf.py flash
idf.py monitor
... if idf.py doesn't find your TTY port you can try, for instance:
idf.py -p /dev/ttyUSB0 flash

About

No description, website, or topics provided.

Resources

Stars

7 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

This is a very sketchy description of the "espd" version of Pd, which runs on
Espressif ESP32 bords, either generic ones (where you have to add your own
audio hardware) or LyraT or LyraT-mini boards (with built-in audio). To use
these you will almost certainly have to compile your own version, at least
either to include your own patch or to specify the WIFI settings in the file
main/espd.h .
The generic version can be used with INMP441 microphone and/or MAX98357A
DSc/amplifier. The SPH0645 mic is known NOT TO WORK with ESP32s.
The instructions here work for me on linux; they _should_ work on macintoshes
and PCs with appropriate changes (in the shell commands for instance).
By default espd runs a built-in patch which is included as a C string defined
in the file "main/test-patch.c". You can defeat this behavior by turing off
PD_INCLUDEPATCH in main/espd.h .
You can conditionally compile wifi or bluetooth support, which enables you to
send and receive messages and/or to send patches from a host computer. If you are using wifi, set up a host patch that listens on port 4498 (by
default). When the board is booted it will connect to that port. When you get
the connection, you can load a test patch on the esp, by sending the message "pd
begin-new poodle .", then the contents of the patch, then "pd end-new" . Whether you do this or rely on a pre-compiled patch, you can send messages to
any named object (such as a "receive") on the ESP32 board
To send a patch over wifi, you must compile and load espd on the board, boot the
board, and then run a patch on the host computer that waits for the board to
make a TCP connection to it. Once connected, the host patch then sends Pd
messages to load a different patch on the esp. The two patches then can
communicate over the same RCP connection. There is a simple example in the
subdirectory "test-patch".
If the connection is ever broken the board reboots itself and (if WIFI is
compiled in) tries to establish a new WIFI connection. Each time the host patch
gets a new connection it then has to reload the ESP patch.
As it stands all the vanilla Pd objects are compiled into espd except for the
FFT objects and (oddly) netsend/netreceive. You can rebuild it with a different
choice of objects compiled in, including your own objects.
Steps to get this running: first install the espd compile chain and (for LyraT)
the "ADF" audio development platform. The ESP documentation is excellent. Start here:
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/linux-macos-setup.html
another (third-party) URL that might be useful:
https://gitdemo.readthedocs.io/en/latest/build-system.html
The compilation chain depends on an "sdkconfig" file. Samples for the two LyraT
boards are included as "sdkconfig.lyrat" and "sdkconfig.lyratmini", and a sample
for a bare WROOM module is included as "sdkconfig.wroom". You can rename one
of these as "sdkconfig" before invoking the compiler.
In addition to the sources youre looking at you'll need Pd, preferably the
latest version, although I'm testing this with Pd commit
177350fc4999b74ea28a12ba2981baa6ae04c6f0 (0.55-1 with a couple of tweaks added).
This is included as a git submodule ("git clone --recursive [...]") . Or
you can just copy the pd source into a subdirectory "pd" of this directory.
Then you must apply three small patches to the Pd source, found in the
subdirectory "patches".
To compile, set up your environment variables and issue commands to compile,
flash, and run the monitor program to see debugging output (see bottom of this
page to see what I type on my system). This should be done from a shell window
that is in this (espd) directory.
CAUTION: compiling for LyraT boards works differently from raw WROOM boards.
Commands I issue to shell to compile (customize to your own installation):
********* For generic ESP32 modules: *********
FIRST copy sdkconfig.wroom to sdkconfig. Then:
export IDF_TOOLS_PATH=~/bis/var/esp/tools
export IDF_PATH=~/bis/var/esp/esp-idf
. $IDF_PATH/export.sh
********* for LyraT boards: *********
FIRST edit Cmakelists.txt to enable esp_adf and copy one of sdkconfig.lyrat*
to sdkconfig. Then:
export IDF_TOOLS_PATH=~/bis/var/esp/tools
export ADF_PATH=~/bis/var/esp/esp-adf
. $ADF_PATH/esp-idf/export.sh
then (for either type of board):
(optional:) idf.py menuconfig
idf.py build
idf.py flash
idf.py monitor
... if idf.py doesn't find your TTY port you can try, for instance:
idf.py -p /dev/ttyUSB0 flash

About

No description, website, or topics provided.

Resources

Stars

7 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

This is a very sketchy description of the "espd" version of Pd, which runs on
Espressif ESP32 bords, either generic ones (where you have to add your own
audio hardware) or LyraT or LyraT-mini boards (with built-in audio). To use
these you will almost certainly have to compile your own version, at least
either to include your own patch or to specify the WIFI settings in the file
main/espd.h .
The generic version can be used with INMP441 microphone and/or MAX98357A
DSc/amplifier. The SPH0645 mic is known NOT TO WORK with ESP32s.
The instructions here work for me on linux; they _should_ work on macintoshes
and PCs with appropriate changes (in the shell commands for instance).
By default espd runs a built-in patch which is included as a C string defined
in the file "main/test-patch.c". You can defeat this behavior by turing off
PD_INCLUDEPATCH in main/espd.h .
You can conditionally compile wifi or bluetooth support, which enables you to
send and receive messages and/or to send patches from a host computer. If you are using wifi, set up a host patch that listens on port 4498 (by
default). When the board is booted it will connect to that port. When you get
the connection, you can load a test patch on the esp, by sending the message "pd
begin-new poodle .", then the contents of the patch, then "pd end-new" . Whether you do this or rely on a pre-compiled patch, you can send messages to
any named object (such as a "receive") on the ESP32 board
To send a patch over wifi, you must compile and load espd on the board, boot the
board, and then run a patch on the host computer that waits for the board to
make a TCP connection to it. Once connected, the host patch then sends Pd
messages to load a different patch on the esp. The two patches then can
communicate over the same RCP connection. There is a simple example in the
subdirectory "test-patch".
If the connection is ever broken the board reboots itself and (if WIFI is
compiled in) tries to establish a new WIFI connection. Each time the host patch
gets a new connection it then has to reload the ESP patch.
As it stands all the vanilla Pd objects are compiled into espd except for the
FFT objects and (oddly) netsend/netreceive. You can rebuild it with a different
choice of objects compiled in, including your own objects.
Steps to get this running: first install the espd compile chain and (for LyraT)
the "ADF" audio development platform. The ESP documentation is excellent. Start here:
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/linux-macos-setup.html
another (third-party) URL that might be useful:
https://gitdemo.readthedocs.io/en/latest/build-system.html
The compilation chain depends on an "sdkconfig" file. Samples for the two LyraT
boards are included as "sdkconfig.lyrat" and "sdkconfig.lyratmini", and a sample
for a bare WROOM module is included as "sdkconfig.wroom". You can rename one
of these as "sdkconfig" before invoking the compiler.
In addition to the sources youre looking at you'll need Pd, preferably the
latest version, although I'm testing this with Pd commit
177350fc4999b74ea28a12ba2981baa6ae04c6f0 (0.55-1 with a couple of tweaks added).
This is included as a git submodule ("git clone --recursive [...]") . Or
you can just copy the pd source into a subdirectory "pd" of this directory.
Then you must apply three small patches to the Pd source, found in the
subdirectory "patches".
To compile, set up your environment variables and issue commands to compile,
flash, and run the monitor program to see debugging output (see bottom of this
page to see what I type on my system). This should be done from a shell window
that is in this (espd) directory.
CAUTION: compiling for LyraT boards works differently from raw WROOM boards.
Commands I issue to shell to compile (customize to your own installation):
********* For generic ESP32 modules: *********
FIRST copy sdkconfig.wroom to sdkconfig. Then:
export IDF_TOOLS_PATH=~/bis/var/esp/tools
export IDF_PATH=~/bis/var/esp/esp-idf
. $IDF_PATH/export.sh
********* for LyraT boards: *********
FIRST edit Cmakelists.txt to enable esp_adf and copy one of sdkconfig.lyrat*
to sdkconfig. Then:
export IDF_TOOLS_PATH=~/bis/var/esp/tools
export ADF_PATH=~/bis/var/esp/esp-adf
. $ADF_PATH/esp-idf/export.sh
then (for either type of board):
(optional:) idf.py menuconfig
idf.py build
idf.py flash
idf.py monitor
... if idf.py doesn't find your TTY port you can try, for instance:
idf.py -p /dev/ttyUSB0 flash

About

No description, website, or topics provided.

Resources

Stars

7 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

This is a very sketchy description of the "espd" version of Pd, which runs on
Espressif ESP32 bords, either generic ones (where you have to add your own
audio hardware) or LyraT or LyraT-mini boards (with built-in audio). To use
these you will almost certainly have to compile your own version, at least
either to include your own patch or to specify the WIFI settings in the file
main/espd.h .
The generic version can be used with INMP441 microphone and/or MAX98357A
DSc/amplifier. The SPH0645 mic is known NOT TO WORK with ESP32s.
The instructions here work for me on linux; they _should_ work on macintoshes
and PCs with appropriate changes (in the shell commands for instance).
By default espd runs a built-in patch which is included as a C string defined
in the file "main/test-patch.c". You can defeat this behavior by turing off
PD_INCLUDEPATCH in main/espd.h .
You can conditionally compile wifi or bluetooth support, which enables you to
send and receive messages and/or to send patches from a host computer. If you are using wifi, set up a host patch that listens on port 4498 (by
default). When the board is booted it will connect to that port. When you get
the connection, you can load a test patch on the esp, by sending the message "pd
begin-new poodle .", then the contents of the patch, then "pd end-new" . Whether you do this or rely on a pre-compiled patch, you can send messages to
any named object (such as a "receive") on the ESP32 board
To send a patch over wifi, you must compile and load espd on the board, boot the
board, and then run a patch on the host computer that waits for the board to
make a TCP connection to it. Once connected, the host patch then sends Pd
messages to load a different patch on the esp. The two patches then can
communicate over the same RCP connection. There is a simple example in the
subdirectory "test-patch".
If the connection is ever broken the board reboots itself and (if WIFI is
compiled in) tries to establish a new WIFI connection. Each time the host patch
gets a new connection it then has to reload the ESP patch.
As it stands all the vanilla Pd objects are compiled into espd except for the
FFT objects and (oddly) netsend/netreceive. You can rebuild it with a different
choice of objects compiled in, including your own objects.
Steps to get this running: first install the espd compile chain and (for LyraT)
the "ADF" audio development platform. The ESP documentation is excellent. Start here:
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/linux-macos-setup.html
another (third-party) URL that might be useful:
https://gitdemo.readthedocs.io/en/latest/build-system.html
The compilation chain depends on an "sdkconfig" file. Samples for the two LyraT
boards are included as "sdkconfig.lyrat" and "sdkconfig.lyratmini", and a sample
for a bare WROOM module is included as "sdkconfig.wroom". You can rename one
of these as "sdkconfig" before invoking the compiler.
In addition to the sources youre looking at you'll need Pd, preferably the
latest version, although I'm testing this with Pd commit
177350fc4999b74ea28a12ba2981baa6ae04c6f0 (0.55-1 with a couple of tweaks added).
This is included as a git submodule ("git clone --recursive [...]") . Or
you can just copy the pd source into a subdirectory "pd" of this directory.
Then you must apply three small patches to the Pd source, found in the
subdirectory "patches".
To compile, set up your environment variables and issue commands to compile,
flash, and run the monitor program to see debugging output (see bottom of this
page to see what I type on my system). This should be done from a shell window
that is in this (espd) directory.
CAUTION: compiling for LyraT boards works differently from raw WROOM boards.
Commands I issue to shell to compile (customize to your own installation):
********* For generic ESP32 modules: *********
FIRST copy sdkconfig.wroom to sdkconfig. Then:
export IDF_TOOLS_PATH=~/bis/var/esp/tools
export IDF_PATH=~/bis/var/esp/esp-idf
. $IDF_PATH/export.sh
********* for LyraT boards: *********
FIRST edit Cmakelists.txt to enable esp_adf and copy one of sdkconfig.lyrat*
to sdkconfig. Then:
export IDF_TOOLS_PATH=~/bis/var/esp/tools
export ADF_PATH=~/bis/var/esp/esp-adf
. $ADF_PATH/esp-idf/export.sh
then (for either type of board):
(optional:) idf.py menuconfig
idf.py build
idf.py flash
idf.py monitor
... if idf.py doesn't find your TTY port you can try, for instance:
idf.py -p /dev/ttyUSB0 flash

About

No description, website, or topics provided.

Resources

Stars

7 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

This is a very sketchy description of the "espd" version of Pd, which runs on
Espressif ESP32 bords, either generic ones (where you have to add your own
audio hardware) or LyraT or LyraT-mini boards (with built-in audio). To use
these you will almost certainly have to compile your own version, at least
either to include your own patch or to specify the WIFI settings in the file
main/espd.h .
The generic version can be used with INMP441 microphone and/or MAX98357A
DSc/amplifier. The SPH0645 mic is known NOT TO WORK with ESP32s.
The instructions here work for me on linux; they _should_ work on macintoshes
and PCs with appropriate changes (in the shell commands for instance).
By default espd runs a built-in patch which is included as a C string defined
in the file "main/test-patch.c". You can defeat this behavior by turing off
PD_INCLUDEPATCH in main/espd.h .
You can conditionally compile wifi or bluetooth support, which enables you to
send and receive messages and/or to send patches from a host computer. If you are using wifi, set up a host patch that listens on port 4498 (by
default). When the board is booted it will connect to that port. When you get
the connection, you can load a test patch on the esp, by sending the message "pd
begin-new poodle .", then the contents of the patch, then "pd end-new" . Whether you do this or rely on a pre-compiled patch, you can send messages to
any named object (such as a "receive") on the ESP32 board
To send a patch over wifi, you must compile and load espd on the board, boot the
board, and then run a patch on the host computer that waits for the board to
make a TCP connection to it. Once connected, the host patch then sends Pd
messages to load a different patch on the esp. The two patches then can
communicate over the same RCP connection. There is a simple example in the
subdirectory "test-patch".
If the connection is ever broken the board reboots itself and (if WIFI is
compiled in) tries to establish a new WIFI connection. Each time the host patch
gets a new connection it then has to reload the ESP patch.
As it stands all the vanilla Pd objects are compiled into espd except for the
FFT objects and (oddly) netsend/netreceive. You can rebuild it with a different
choice of objects compiled in, including your own objects.
Steps to get this running: first install the espd compile chain and (for LyraT)
the "ADF" audio development platform. The ESP documentation is excellent. Start here:
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/linux-macos-setup.html
another (third-party) URL that might be useful:
https://gitdemo.readthedocs.io/en/latest/build-system.html
The compilation chain depends on an "sdkconfig" file. Samples for the two LyraT
boards are included as "sdkconfig.lyrat" and "sdkconfig.lyratmini", and a sample
for a bare WROOM module is included as "sdkconfig.wroom". You can rename one
of these as "sdkconfig" before invoking the compiler.
In addition to the sources youre looking at you'll need Pd, preferably the
latest version, although I'm testing this with Pd commit
177350fc4999b74ea28a12ba2981baa6ae04c6f0 (0.55-1 with a couple of tweaks added).
This is included as a git submodule ("git clone --recursive [...]") . Or
you can just copy the pd source into a subdirectory "pd" of this directory.
Then you must apply three small patches to the Pd source, found in the
subdirectory "patches".
To compile, set up your environment variables and issue commands to compile,
flash, and run the monitor program to see debugging output (see bottom of this
page to see what I type on my system). This should be done from a shell window
that is in this (espd) directory.
CAUTION: compiling for LyraT boards works differently from raw WROOM boards.
Commands I issue to shell to compile (customize to your own installation):
********* For generic ESP32 modules: *********
FIRST copy sdkconfig.wroom to sdkconfig. Then:
export IDF_TOOLS_PATH=~/bis/var/esp/tools
export IDF_PATH=~/bis/var/esp/esp-idf
. $IDF_PATH/export.sh
********* for LyraT boards: *********
FIRST edit Cmakelists.txt to enable esp_adf and copy one of sdkconfig.lyrat*
to sdkconfig. Then:
export IDF_TOOLS_PATH=~/bis/var/esp/tools
export ADF_PATH=~/bis/var/esp/esp-adf
. $ADF_PATH/esp-idf/export.sh
then (for either type of board):
(optional:) idf.py menuconfig
idf.py build
idf.py flash
idf.py monitor
... if idf.py doesn't find your TTY port you can try, for instance:
idf.py -p /dev/ttyUSB0 flash

About

No description, website, or topics provided.

Resources

Stars

7 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

This is a very sketchy description of the "espd" version of Pd, which runs on
Espressif ESP32 bords, either generic ones (where you have to add your own
audio hardware) or LyraT or LyraT-mini boards (with built-in audio). To use
these you will almost certainly have to compile your own version, at least
either to include your own patch or to specify the WIFI settings in the file
main/espd.h .
The generic version can be used with INMP441 microphone and/or MAX98357A
DSc/amplifier. The SPH0645 mic is known NOT TO WORK with ESP32s.
The instructions here work for me on linux; they _should_ work on macintoshes
and PCs with appropriate changes (in the shell commands for instance).
By default espd runs a built-in patch which is included as a C string defined
in the file "main/test-patch.c". You can defeat this behavior by turing off
PD_INCLUDEPATCH in main/espd.h .
You can conditionally compile wifi or bluetooth support, which enables you to
send and receive messages and/or to send patches from a host computer. If you are using wifi, set up a host patch that listens on port 4498 (by
default). When the board is booted it will connect to that port. When you get
the connection, you can load a test patch on the esp, by sending the message "pd
begin-new poodle .", then the contents of the patch, then "pd end-new" . Whether you do this or rely on a pre-compiled patch, you can send messages to
any named object (such as a "receive") on the ESP32 board
To send a patch over wifi, you must compile and load espd on the board, boot the
board, and then run a patch on the host computer that waits for the board to
make a TCP connection to it. Once connected, the host patch then sends Pd
messages to load a different patch on the esp. The two patches then can
communicate over the same RCP connection. There is a simple example in the
subdirectory "test-patch".
If the connection is ever broken the board reboots itself and (if WIFI is
compiled in) tries to establish a new WIFI connection. Each time the host patch
gets a new connection it then has to reload the ESP patch.
As it stands all the vanilla Pd objects are compiled into espd except for the
FFT objects and (oddly) netsend/netreceive. You can rebuild it with a different
choice of objects compiled in, including your own objects.
Steps to get this running: first install the espd compile chain and (for LyraT)
the "ADF" audio development platform. The ESP documentation is excellent. Start here:
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/linux-macos-setup.html
another (third-party) URL that might be useful:
https://gitdemo.readthedocs.io/en/latest/build-system.html
The compilation chain depends on an "sdkconfig" file. Samples for the two LyraT
boards are included as "sdkconfig.lyrat" and "sdkconfig.lyratmini", and a sample
for a bare WROOM module is included as "sdkconfig.wroom". You can rename one
of these as "sdkconfig" before invoking the compiler.
In addition to the sources youre looking at you'll need Pd, preferably the
latest version, although I'm testing this with Pd commit
177350fc4999b74ea28a12ba2981baa6ae04c6f0 (0.55-1 with a couple of tweaks added).
This is included as a git submodule ("git clone --recursive [...]") . Or
you can just copy the pd source into a subdirectory "pd" of this directory.
Then you must apply three small patches to the Pd source, found in the
subdirectory "patches".
To compile, set up your environment variables and issue commands to compile,
flash, and run the monitor program to see debugging output (see bottom of this
page to see what I type on my system). This should be done from a shell window
that is in this (espd) directory.
CAUTION: compiling for LyraT boards works differently from raw WROOM boards.
Commands I issue to shell to compile (customize to your own installation):
********* For generic ESP32 modules: *********
FIRST copy sdkconfig.wroom to sdkconfig. Then:
export IDF_TOOLS_PATH=~/bis/var/esp/tools
export IDF_PATH=~/bis/var/esp/esp-idf
. $IDF_PATH/export.sh
********* for LyraT boards: *********
FIRST edit Cmakelists.txt to enable esp_adf and copy one of sdkconfig.lyrat*
to sdkconfig. Then:
export IDF_TOOLS_PATH=~/bis/var/esp/tools
export ADF_PATH=~/bis/var/esp/esp-adf
. $ADF_PATH/esp-idf/export.sh
then (for either type of board):
(optional:) idf.py menuconfig
idf.py build
idf.py flash
idf.py monitor
... if idf.py doesn't find your TTY port you can try, for instance:
idf.py -p /dev/ttyUSB0 flash

About

No description, website, or topics provided.

Resources

Stars

7 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

This is a very sketchy description of the "espd" version of Pd, which runs on
Espressif ESP32 bords, either generic ones (where you have to add your own
audio hardware) or LyraT or LyraT-mini boards (with built-in audio). To use
these you will almost certainly have to compile your own version, at least
either to include your own patch or to specify the WIFI settings in the file
main/espd.h .
The generic version can be used with INMP441 microphone and/or MAX98357A
DSc/amplifier. The SPH0645 mic is known NOT TO WORK with ESP32s.
The instructions here work for me on linux; they _should_ work on macintoshes
and PCs with appropriate changes (in the shell commands for instance).
By default espd runs a built-in patch which is included as a C string defined
in the file "main/test-patch.c". You can defeat this behavior by turing off
PD_INCLUDEPATCH in main/espd.h .
You can conditionally compile wifi or bluetooth support, which enables you to
send and receive messages and/or to send patches from a host computer. If you are using wifi, set up a host patch that listens on port 4498 (by
default). When the board is booted it will connect to that port. When you get
the connection, you can load a test patch on the esp, by sending the message "pd
begin-new poodle .", then the contents of the patch, then "pd end-new" . Whether you do this or rely on a pre-compiled patch, you can send messages to
any named object (such as a "receive") on the ESP32 board
To send a patch over wifi, you must compile and load espd on the board, boot the
board, and then run a patch on the host computer that waits for the board to
make a TCP connection to it. Once connected, the host patch then sends Pd
messages to load a different patch on the esp. The two patches then can
communicate over the same RCP connection. There is a simple example in the
subdirectory "test-patch".
If the connection is ever broken the board reboots itself and (if WIFI is
compiled in) tries to establish a new WIFI connection. Each time the host patch
gets a new connection it then has to reload the ESP patch.
As it stands all the vanilla Pd objects are compiled into espd except for the
FFT objects and (oddly) netsend/netreceive. You can rebuild it with a different
choice of objects compiled in, including your own objects.
Steps to get this running: first install the espd compile chain and (for LyraT)
the "ADF" audio development platform. The ESP documentation is excellent. Start here:
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/linux-macos-setup.html
another (third-party) URL that might be useful:
https://gitdemo.readthedocs.io/en/latest/build-system.html
The compilation chain depends on an "sdkconfig" file. Samples for the two LyraT
boards are included as "sdkconfig.lyrat" and "sdkconfig.lyratmini", and a sample
for a bare WROOM module is included as "sdkconfig.wroom". You can rename one
of these as "sdkconfig" before invoking the compiler.
In addition to the sources youre looking at you'll need Pd, preferably the
latest version, although I'm testing this with Pd commit
177350fc4999b74ea28a12ba2981baa6ae04c6f0 (0.55-1 with a couple of tweaks added).
This is included as a git submodule ("git clone --recursive [...]") . Or
you can just copy the pd source into a subdirectory "pd" of this directory.
Then you must apply three small patches to the Pd source, found in the
subdirectory "patches".
To compile, set up your environment variables and issue commands to compile,
flash, and run the monitor program to see debugging output (see bottom of this
page to see what I type on my system). This should be done from a shell window
that is in this (espd) directory.
CAUTION: compiling for LyraT boards works differently from raw WROOM boards.
Commands I issue to shell to compile (customize to your own installation):
********* For generic ESP32 modules: *********
FIRST copy sdkconfig.wroom to sdkconfig. Then:
export IDF_TOOLS_PATH=~/bis/var/esp/tools
export IDF_PATH=~/bis/var/esp/esp-idf
. $IDF_PATH/export.sh
********* for LyraT boards: *********
FIRST edit Cmakelists.txt to enable esp_adf and copy one of sdkconfig.lyrat*
to sdkconfig. Then:
export IDF_TOOLS_PATH=~/bis/var/esp/tools
export ADF_PATH=~/bis/var/esp/esp-adf
. $ADF_PATH/esp-idf/export.sh
then (for either type of board):
(optional:) idf.py menuconfig
idf.py build
idf.py flash
idf.py monitor
... if idf.py doesn't find your TTY port you can try, for instance:
idf.py -p /dev/ttyUSB0 flash

About

No description, website, or topics provided.

Resources

Stars

7 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages