{"id":2344,"date":"2025-10-22T03:08:34","date_gmt":"2025-10-22T03:08:34","guid":{"rendered":"https:\/\/raymundopizano.com\/blog\/?p=2344"},"modified":"2025-11-23T21:17:22","modified_gmt":"2025-11-23T21:17:22","slug":"como-usar-esptool","status":"publish","type":"post","link":"https:\/\/raymundopizano.com\/blog\/tutorial\/como-usar-esptool\/","title":{"rendered":"Como usar Esptool"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>Esptool <\/strong>es un conjunto de herramientas creadas en Python para programar las placas de desarrollo ESP8266, ESP8585, ESP32, ESP32-C2, ESP32-C3, ESP32-C6, ESP32-H2, ESP32-S2 y ESP32-S3.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1.- <a href=\"https:\/\/raymundopizano.com\/blog\/python\/python-101-instalacion-y-primeros-pasos\/\" target=\"_blank\" rel=\"noreferrer noopener\">Instala la ultima versi\u00f3n de Python<\/a> (ocupas 3.10 o superior., sigue la gu\u00eda)<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"656\" height=\"404\" src=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2024\/02\/install_python.gif\" alt=\"\" class=\"wp-image-914\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">2.- <a href=\"https:\/\/raymundopizano.com\/blog\/tutorial\/python-101-instalar-entorno-de-trabajo-ide-visual-studio-code\/\" target=\"_blank\" rel=\"noreferrer noopener\">Instala Visual Studio Code<\/a> (Sigue el tutorial)<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"594\" height=\"460\" src=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/08\/InstallVSC.gif\" alt=\"\" class=\"wp-image-2240\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">3.- Crea una carpeta por ejemplo <strong>esptool<\/strong> y abren la carpeta con Visual Studio Code VSC<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"942\" height=\"764\" src=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/Open_Folder_esptool.gif\" alt=\"\" class=\"wp-image-2435\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Marcamos estas opciones<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"942\" height=\"764\" src=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/trust_vsc.gif\" alt=\"\" class=\"wp-image-2437\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">4.- Creamos un entorno virtual para Python<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">As\u00ed gestionamos dependencias y paquetes de manera independiente. En VSC abrimos terminal y escribimos:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">En Windows<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#F8F8F2;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#272822\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>python -m venv esptoolenv<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki monokai\" style=\"background-color: #272822\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #A6E22E\">python<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">-m<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">venv<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">esptoolenv<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"942\" height=\"760\" src=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/Python_venv.gif\" alt=\"\" class=\"wp-image-2438\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Para MacOS \/ Linux<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#F8F8F2;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#272822\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>python3 -m venv esptoolenv<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki monokai\" style=\"background-color: #272822\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #A6E22E\">python3<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">-m<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">venv<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">esptoolenv<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">5.- Activamos el entorno virtual<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">En Windows<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Para evitar este error:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"267\" src=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/error_virtual_py-1024x267.png\" alt=\"\" class=\"wp-image-2358\" srcset=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/error_virtual_py-1024x267.png 1024w, https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/error_virtual_py-300x78.png 300w, https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/error_virtual_py-768x200.png 768w, https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/error_virtual_py-1536x400.png 1536w, https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/error_virtual_py.png 1636w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"942\" height=\"762\" src=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/Python_venv_error_script.gif\" alt=\"\" class=\"wp-image-2440\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Deshabilitar las pol\u00edticas de seguridad y poder abrir el script., ejecuta PowerShell como administrador<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"774\" height=\"724\" src=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/powershell_admin.gif\" alt=\"\" class=\"wp-image-2393\"\/><\/figure>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#F8F8F2;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#272822\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process\nSet-ExecutionPolicy RemoteSigned -Scope CurrentUser<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki monokai\" style=\"background-color: #272822\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #A6E22E\">Set-ExecutionPolicy<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">-ExecutionPolicy<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">Bypass<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">-Scope<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">Process<\/span><\/span>\n<span class=\"line\"><span style=\"color: #A6E22E\">Set-ExecutionPolicy<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">RemoteSigned<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">-Scope<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">CurrentUser<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Escribimos S y Enter, en cada uno<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"980\" height=\"510\" src=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/Disable_windows_policity.gif\" alt=\"\" class=\"wp-image-2442\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Ahora si lo habilitamos<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#F8F8F2;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#272822\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>esptoolenv\\Scripts\\activate<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki monokai\" style=\"background-color: #272822\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #A6E22E\">esptoolenv\\Scripts\\activate<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"940\" height=\"764\" src=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/Activate_env.gif\" alt=\"\" class=\"wp-image-2444\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">En MacOS \/ Linux<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#F8F8F2;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#272822\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>source esptoolenv\/bin\/activate<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki monokai\" style=\"background-color: #272822\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #66D9EF\">source<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">esptoolenv\/bin\/activate<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Nos crear una carpeta <strong>esptoolenv <\/strong>en donde se instalaran los paquetes, scripts y todas las configuraciones del entorno<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">6.- Instalamos esptool<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">En Windows<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#F8F8F2;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#272822\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>pip install esptool<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki monokai\" style=\"background-color: #272822\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #A6E22E\">pip<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">install<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">esptool<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"938\" height=\"764\" src=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/pip_install_esptool_ok.gif\" alt=\"\" class=\"wp-image-2445\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">En MacOS \/ Linux<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#F8F8F2;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#272822\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>pip3 install esptool<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki monokai\" style=\"background-color: #272822\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #A6E22E\">pip3<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">install<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">esptool<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">7.- <a href=\"https:\/\/raymundopizano.com\/blog\/esp32\/drivers-para-placa-de-desarrollo-esp32\/\" target=\"_blank\" rel=\"noreferrer noopener\">Instala los controladores para tu placa ESP<\/a> <\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">necesarios para que tu equipo se comunique con el ESP<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">8.- Conecta tu ESP v\u00eda USB y anota el puerto<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/ESP32_USB.jpg\" alt=\"\" class=\"wp-image-2453\" srcset=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/ESP32_USB.jpg 1024w, https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/ESP32_USB-300x225.jpg 300w, https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/ESP32_USB-768x576.jpg 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">En Windows<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><kbd>Abrir <strong>Administrador de dispositivos &gt; desplegamos Puertos (COM y LPT)<\/strong><\/kbd><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para este caso es el COM3<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"776\" height=\"568\" src=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/Puerto_com.gif\" alt=\"\" class=\"wp-image-2446\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">En MacOS \/ Linux<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#F8F8F2;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#272822\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>sudo dmesg | grep tty<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki monokai\" style=\"background-color: #272822\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #A6E22E\">sudo<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">dmesg<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #F92672\">|<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #A6E22E\">grep<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">tty<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Usualmente est\u00e1n enumerados \/dev\/ttyUSB0,1, 2, 3, 4, 5<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">9.- Programar o Flashear un ESP<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para este ejemplo voy a usar una placa ESP32 y el firmware de <a href=\"https:\/\/github.com\/darthcloud\/BlueRetro\" target=\"_blank\" rel=\"noreferrer noopener\">BlueRetro<\/a> el cual nos permite programar como receptor inal\u00e1mbrico de controles de video juegos recientes (Xbox One S\/X, PlayStation 5, PlayStation 4, PlayStation 3, Switch, Wii, Wii U, etc.) en consolas cl\u00e1sicas (N64, PS1, PS2, PSX, GameCube, Wii, NES, SNES, Dreamcast, etc.)., lo puedes descargar de esta pagina <a href=\"https:\/\/darthcloud.itch.io\/blueretro\">https:\/\/darthcloud.itch.io\/blueretro<\/a> Bot\u00f3n <kbd>Download Now &gt; apoya el proyecto o No thanks, just take me to the downloads &gt; y descarga v25.04_hw1.zip<\/kbd>, descompr\u00edmelo en el carpeta de trabajo <strong>esptool<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"705\" height=\"968\" src=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/v25.04_hw1.png\" alt=\"\" class=\"wp-image-2407\" srcset=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/v25.04_hw1.png 705w, https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/v25.04_hw1-218x300.png 218w\" sizes=\"auto, (max-width: 705px) 100vw, 705px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">En las carpetas <strong>bootloader, ota y partition_table<\/strong> se encuentran los binarios base que sumado al binario especifico para cada consola (ejemplo N64 <strong>BlueRetro_hw1_n64.bin<\/strong>) conformaran el firmware<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">En Windows<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#F8F8F2;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#272822\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>esptool -c esp32 -p COM3 -b 460800 --before default-reset --after hard-reset write-flash --flash-mode dio --flash-size 4MB --flash-freq 40m 0x1000 .\/bootloader\/bootloader.bin 0x8000 .\/partition_table\/partition-table.bin 0xd000 .\/ota\/ota_data_initial.bin 0x10000 BlueRetro_hw1_n64.bin<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki monokai\" style=\"background-color: #272822\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #A6E22E\">esptool<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">-c<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">esp32<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">-p<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">COM3<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">-b<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">460800<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">--before<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">default-reset<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">--after<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">hard-reset<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">write-flash<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">--flash-mode<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">dio<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">--flash-size<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">4<\/span><span style=\"color: #E6DB74\">MB<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">--flash-freq<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">40<\/span><span style=\"color: #E6DB74\">m<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">0x1000<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">.\/bootloader\/bootloader.bin<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">0x8000<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">.\/partition_table\/partition-table.bin<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">0xd000<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">.\/ota\/ota_data_initial.bin<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">0x10000<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">BlueRetro_hw1_n64.bin<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Remplaza <strong>COM3<\/strong> por el puerto asignado <em>COM1, 2, 3, 4, 5<\/em> etc.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"940\" height=\"762\" src=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/Flashig_firmware_blueretro_n64_ok.gif\" alt=\"\" class=\"wp-image-2447\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">En cuanto aparezca <strong>Connecting&#8230;&#8230;&#8230;<\/strong> presiona el bot\u00f3n <strong>BOOT <\/strong>del <em>ESP32<\/em> y suelta<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"320\" height=\"213\" src=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/Esp32-Boot-Button.gif\" alt=\"\" class=\"wp-image-2450\" style=\"aspect-ratio:1.50237992211164;width:680px;height:auto\"\/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">En MacOS \/ Linux<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#F8F8F2;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#272822\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>sudo esptool.py --chip esp32 --port \/dev\/ttyUSB0 --baud 460800 --before default-reset --after hard-reset write-flash --flash-mode dio --flash-size 4MB --flash-freq 40m 0x1000 .\/bootloader\/bootloader.bin 0x8000 .\/partition_table\/partition-table.bin 0xd000 .\/ota\/ota_data_initial.bin 0x10000 BlueRetro_hw1_n64.bin<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki monokai\" style=\"background-color: #272822\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #A6E22E\">sudo<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">esptool.py<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">--chip<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">esp32<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">--port<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">\/dev\/ttyUSB0<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">--baud<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">460800<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">--before<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">default-reset<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">--after<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">hard-reset<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">write-flash<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">--flash-mode<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">dio<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">--flash-size<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">4<\/span><span style=\"color: #E6DB74\">MB<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">--flash-freq<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">40<\/span><span style=\"color: #E6DB74\">m<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">0x1000<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">.\/bootloader\/bootloader.bin<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">0x8000<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">.\/partition_table\/partition-table.bin<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">0xd000<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">.\/ota\/ota_data_initial.bin<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">0x10000<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">BlueRetro_hw1_n64.bin<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Remplaza <strong>\/dev\/ttyUSB0<\/strong> el puerto de tu ESP <em>\/dev\/ttyUSB0,1, 2, 3, 4, 5<\/em> etc.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Sobre las opciones de <strong>esptool<\/strong><br> <br><kbd><strong>-c \/ --chip<\/strong><\/kbd>: especificamos que tipo de chip ESP8266, ESP32, ESP32-C2, ESP32-C3, ESP32-C6, ESP32-H2, ESP32-S2 y ESP32-S3 <strong>Se puede omitir en versiones 5 y superiores lo detecta en autom\u00e1tico<\/strong> (para verificar ejecuta <kbd><strong>esptool version<\/strong><\/kbd>)<br><br><kbd><strong>-p \/ --port<\/strong><\/kbd>: especificamos el puerto de comunicaci\u00f3n que se le ha asignado al conectarlo v\u00eda USB para Windows COM0,1,2,3,&#8230; en MacOs \/ Linux \/dev\/ttyUSB0,1,2,3,&#8230; <strong>Este par\u00e1metro se puede omitir ya que din\u00e1micamente este buscara entre los puertos disponibles<\/strong><br><br><kbd><strong>-b \/ --baud<\/strong><\/kbd>: La velocidad de transferencia en baudios los mas comunes -b 230400 -b 460800 -b 921600 -b 1500000., por defecto es 115200&nbsp;<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Modos de reseteo<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Por defecto <strong>esptool <\/strong>intenta restablecer por completo el chip al modo de gestor de arranque antes Inicia y reinicia el chip para ejecutar el programa normal una vez que se completa<br><kbd><strong>--before default-reset<\/strong><\/kbd>: es el valor predeterminado, que intentar restablecer el chip al modo de gestor de arranque.<br><kbd><strong>--before no-reset<\/strong><\/kbd>: omitir\u00e1 las asignaciones y simplemente comenzar\u00e1 a enviar un comando de sincronizaci\u00f3n en serie al chip<br><kbd><strong>--before no-reset-no-sync<\/strong><\/kbd>: omitir\u00e1 las asignaciones y omitir\u00e1 tambi\u00e9n el comando de sincronizaci\u00f3n en serie<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">write-flash<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Escribe los datos binarios en la Flash y tiene los siguientes argumentos:<br><kbd><strong>--flash-mode \/ -fm<\/strong><\/kbd>: modo de estrada y salida del flasheo los valores que puede tener son <kbd><strong>keep, qio, qout, dio, dout<\/strong><\/kbd>., por defecto es <kbd><strong>keep<\/strong><\/kbd>, la mayor\u00eda de los m\u00f3dulos ESP32 utilizan <kbd><strong>qio<\/strong><\/kbd>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><kbd><strong>--flash-size \/ -fs<\/strong><\/kbd>: Tama\u00f1o en megabytes del flash. Los valores v\u00e1lidos son <kbd><strong>keep, detect, 1MB, 2MB, 4MB, 8MB, 16MB<\/strong><\/kbd> podemos usar <kbd><strong>-fs detect<\/strong><\/kbd> para detectarlo de manera autom\u00e1tica si falla el valor por defecto ser\u00e1 de <kbd><strong>4MB<\/strong><\/kbd>.<br><kbd><strong>--flash-freq \/ -ff<\/strong><\/kbd>: frecuencia del flasheo es la velocidad en MHz de interacci\u00f3n con el dispositivo ESP. Los valores v\u00e1lidos son <kbd><strong>keep, 40m, 26m, 20m, 80m<\/strong><\/kbd> por defecto es <kbd><strong>keep<\/strong><\/kbd>. La mayor\u00eda de los chips funciona con velocidades de reloj de 40 MHz.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A partir de la versi\u00f3n 2.0 estos par\u00e1metros no son necesarios <kbd><strong>--flash-mode<\/strong><\/kbd>, <kbd><strong>--flash-size<\/strong><\/kbd> y <kbd><strong>--flash-freq<\/strong><\/kbd>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Despu\u00e9s del par\u00e1metro <strong>write-flash<\/strong> viene la direcciones que ocupara en memoria dentro del ESP y la ruta \/ archivo binario que se escribir\u00e1 en este., las direcciones se especifican en formato <strong>hexadecimal 0x1000<\/strong> o su valor equivalente en <strong>decimal 4096<\/strong>., si quieres convertirlo usa la consola de Python REPL <a href=\"https:\/\/repl.raymundopizano.com\/\">https:\/\/repl.raymundopizano.com\/<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"788\" height=\"578\" src=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/hex_to_dec.gif\" alt=\"\" class=\"wp-image-2500\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><em>Como vimos algunos de los par\u00e1metros no son necesarios ya que estamos usando una versi\u00f3n superiora la 5 de esptool (v5.1.0) y los detecta o completa de manera din\u00e1mica por lo que podemos resumir de la siguiente manera:<\/em><\/strong><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#F8F8F2;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#272822\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>esptool write-flash 0x1000 .\/bootloader\/bootloader.bin 0x8000 .\/partition_table\/partition-table.bin 0xd000 .\/ota\/ota_data_initial.bin 0x10000 BlueRetro_hw1_n64.bin<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki monokai\" style=\"background-color: #272822\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #A6E22E\">esptool<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">write-flash<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">0x1000<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">.\/bootloader\/bootloader.bin<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">0x8000<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">.\/partition_table\/partition-table.bin<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">0xd000<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">.\/ota\/ota_data_initial.bin<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">0x10000<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">BlueRetro_hw1_n64.bin<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"940\" height=\"764\" src=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/esptool_min_commands.gif\" alt=\"\" class=\"wp-image-2545\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">En MacOS \/ Linux<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#F8F8F2;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#272822\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>sudo esptool.py write-flash 0x1000 .\/bootloader\/bootloader.bin 0x8000 .\/partition_table\/partition-table.bin 0xd000 .\/ota\/ota_data_initial.bin 0x10000 BlueRetro_hw1_n64.bin<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki monokai\" style=\"background-color: #272822\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #A6E22E\">sudo<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">esptool.py<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">write-flash<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">0x1000<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">.\/bootloader\/bootloader.bin<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">0x8000<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">.\/partition_table\/partition-table.bin<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">0xd000<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">.\/ota\/ota_data_initial.bin<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">0x10000<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">BlueRetro_hw1_n64.bin<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Probamos nuestro ESP32 con Blueretro<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos a la pagina <a href=\"https:\/\/blueretro.io\/\">https:\/\/blueretro.io\/<\/a> (solo es compatible con <strong>Google Chrome y Microsoft Edge<\/strong>)<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"920\" height=\"790\" src=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/Testing_Bluerretro.gif\" alt=\"\" class=\"wp-image-2448\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">10. Merge fusionar los binarios y escribirlo<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Fusionamos m\u00faltiples archivos binarios .bin para crear uno solo, esto lo hacemos con el comando <kbd>merge-bin -o nombre-merged-flash.bin<\/kbd> la opci\u00f3n <kbd><strong>-o<\/strong><\/kbd> es output \/ salida<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En Windows<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#F8F8F2;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#272822\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>esptool -c esp32 merge-bin -o n64_blueretro_hw1v25.04_merged.bin --flash-mode dio --flash-size 4MB 0x1000 .\/bootloader\/bootloader.bin 0x8000 .\/partition_table\/partition-table.bin 0xd000 .\/ota\/ota_data_initial.bin 0x10000 BlueRetro_hw1_n64.bin<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki monokai\" style=\"background-color: #272822\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #A6E22E\">esptool<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">-c<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">esp32<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">merge-bin<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">-o<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">n64_blueretro_hw1v25.04_merged.bin<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">--flash-mode<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">dio<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">--flash-size<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">4<\/span><span style=\"color: #E6DB74\">MB<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">0x1000<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">.\/bootloader\/bootloader.bin<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">0x8000<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">.\/partition_table\/partition-table.bin<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">0xd000<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">.\/ota\/ota_data_initial.bin<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">0x10000<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">BlueRetro_hw1_n64.bin<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"942\" height=\"764\" src=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/create_a_merged_bin.gif\" alt=\"\" class=\"wp-image-2552\"\/><\/figure>\n\n\n\n<p class=\"has-f-8-f-8-f-2-color has-text-color wp-block-paragraph\">En MacOS \/ Linux<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#F8F8F2;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#272822\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>sudo esptool.py -c esp32 merge-bin -o n64_blueretro_hw1v25.04_merged.bin --flash-mode dio --flash-size 4MB 0x1000 .\/bootloader\/bootloader.bin 0x8000 .\/partition_table\/partition-table.bin 0xd000 .\/ota\/ota_data_initial.bin 0x10000 BlueRetro_hw1_n64.bin<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki monokai\" style=\"background-color: #272822\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #A6E22E\">sudo<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">esptool.py<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">-c<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">esp32<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">merge-bin<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">-o<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">n64_blueretro_hw1v25.04_merged.bin<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">--flash-mode<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">dio<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">--flash-size<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">4<\/span><span style=\"color: #E6DB74\">MB<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">0x1000<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">.\/bootloader\/bootloader.bin<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">0x8000<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">.\/partition_table\/partition-table.bin<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">0xd000<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">.\/ota\/ota_data_initial.bin<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">0x10000<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">BlueRetro_hw1_n64.bin<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Escribir el archivo merged \/ fusionado<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Como este ya contiene todas las partes y direcciones en la flash, solo indicamos la direcci\u00f3n <strong>hexadecimal 0x0 \/ decimal 0<\/strong> donde comenzara a escribir<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#F8F8F2;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#272822\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>esptool write-flash 0x0 n64_blueretro_hw1v25.04_merged.bin<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki monokai\" style=\"background-color: #272822\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #A6E22E\">esptool<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">write-flash<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">0x0<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">n64_blueretro_hw1v25.04_merged.bin<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"942\" height=\"764\" src=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/write_merged_bin.gif\" alt=\"\" class=\"wp-image-2553\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">11. Actualizar esptool<\/h2>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#F8F8F2;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#272822\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>pip3 install --upgrade esptool<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki monokai\" style=\"background-color: #272822\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #A6E22E\">pip3<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">install<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">--upgrade<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">esptool<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">12. Desactivar ENV<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Una vez terminado de usar la <strong>esptool<\/strong> podemos deshabilitar el entorno virtual<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#F8F8F2;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#272822\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>deactivate<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki monokai\" style=\"background-color: #272822\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #A6E22E\">deactivate<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"942\" height=\"762\" src=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/deactivate_env.gif\" alt=\"\" class=\"wp-image-2554\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Y si ya no lo ocupamos borramos la carpeta <strong>esptoolenv<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Otra alternativa solo para Windows es <a href=\"https:\/\/www.espressif.com\/en\/support\/download\/other-tools\">Flash Download Tools<\/a>.<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Mas f\u00e1cil de usar que <strong><a href=\"https:\/\/docs.espressif.com\/projects\/esptool\/en\/latest\/esp32\/\">esptool<\/a><\/strong>. Compatible con Windows 7, 10 y 11 (64bits).<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><a href=\"https:\/\/dl.espressif.com\/public\/flash_download_tool.zip\">Descarga y descomprime Flash&nbsp;Download&nbsp;Tool<\/a><\/h4>\n\n\n\n<h4 class=\"wp-block-heading\">Escribir los binarios<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Ejecuta flash_download_tool_3.9.9_R2.exe en la carpeta donde lo descomprimiste<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"515\" src=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/flash_download_tool_3.9.9_R2.png\" alt=\"\" class=\"wp-image-2566\" srcset=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/flash_download_tool_3.9.9_R2.png 700w, https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/flash_download_tool_3.9.9_R2-300x221.png 300w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Selecciona <strong><kbd>ESP32 <\/kbd><\/strong>(o tu placa a programar) y bot\u00f3n <strong><kbd>OK<\/kbd><\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"221\" height=\"213\" src=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/flash_tool_esp32.png\" alt=\"\" class=\"wp-image-2567\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Ubica los binarios de <a href=\"https:\/\/github.com\/darthcloud\/BlueRetro\">Blueretro<\/a> en sus carpetas con el bot\u00f3n [&#8230;], escribe su direcci\u00f3n @ y marca todas las casillas.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>BIN<\/strong><\/td><td><strong>Direcci\u00f3n<\/strong><\/td><\/tr><tr><td>bootloader.bin<\/td><td>0x1000<\/td><\/tr><tr><td>partition-table.bin<\/td><td>0x8000<\/td><\/tr><tr><td>ota_data_initial.bin<\/td><td>0xD000<\/td><\/tr><tr><td>BlueRetro_hw1_n64.bin (la versi\u00f3n para tu consola)<\/td><td>0x10000<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"588\" height=\"702\" src=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/flash_tool_selectec_bins.gif\" alt=\"\" class=\"wp-image-2636\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"585\" height=\"711\" src=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/flash_tool_bins_adress.png\" alt=\"\" class=\"wp-image-2640\" srcset=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/flash_tool_bins_adress.png 585w, https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/flash_tool_bins_adress-247x300.png 247w\" sizes=\"auto, (max-width: 585px) 100vw, 585px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Verifica que <strong><kbd>SPI SPEED<\/kbd><\/strong> este en <strong><kbd>40MHz<\/kbd><\/strong>, <strong><kbd>SPI MODE<\/kbd><\/strong> en <kbd><strong>DIO<\/strong><\/kbd>., estos valores est\u00e1n por defecto<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Conecta tu ESP v\u00eda USB y anota el puerto<\/h4>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/ESP32_USB.jpg\" alt=\"\" class=\"wp-image-2453\" srcset=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/ESP32_USB.jpg 1024w, https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/ESP32_USB-300x225.jpg 300w, https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/ESP32_USB-768x576.jpg 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Abrir <kbd><strong>Administrador de dispositivos &gt; desplegamos Puertos (COM y LPT)<\/strong><\/kbd><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Para este caso es el <kbd><strong>COM3<\/strong><\/kbd> y selecci\u00f3nalo en el Flash Download Tool en la opci\u00f3n <strong><kbd>COM:<\/kbd><\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"776\" height=\"568\" src=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/Puerto_com.gif\" alt=\"\" class=\"wp-image-2446\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Presiona el bot\u00f3n <kbd><strong>START <\/strong><\/kbd>en cuanto aparezca <kbd><strong>SYNC<\/strong><\/kbd> presiona el bot\u00f3n <kbd><strong>BOOT<\/strong><\/kbd> del ESP32 y suelta en cuanto cambie a <kbd><strong>Download<\/strong><\/kbd>., al terminar aparecer\u00e1 <kbd><strong>FINISH<\/strong><\/kbd>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"422\" height=\"690\" src=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/flash_tool.gif\" alt=\"\" class=\"wp-image-2573\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"320\" height=\"213\" src=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/Esp32-Boot-Button.gif\" alt=\"\" class=\"wp-image-2450\" style=\"aspect-ratio:1.50237992211164;width:423px;height:auto\"\/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Merge fusionar los binarios<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Fusionamos m\u00faltiples archivos binarios .bin para crear uno solo firmware. Mant\u00e9n todos los par\u00e1metros anteriores y presiona [ ConbineBin ], abrir\u00e1 una carpeta con el target.bin<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"420\" height=\"690\" src=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/flash_tool_merged.gif\" alt=\"\" class=\"wp-image-2577\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"701\" height=\"557\" src=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/merged_target_bin.png\" alt=\"\" class=\"wp-image-2578\" srcset=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/merged_target_bin.png 701w, https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/merged_target_bin-300x238.png 300w\" sizes=\"auto, (max-width: 701px) 100vw, 701px\" \/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Escribir el bin fusionado \/ merged<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">El target.bin contiene todas las partes del firmware por lo que se escribe en la direcci\u00f3n inicial de memoria <strong>hexadecimal 0x0<\/strong> o <strong>decimal 0<\/strong>, ubica el archivo en el bot\u00f3n [&#8230;] solo marca el targe.bin y escribe en la direcci\u00f3n @ 0x0, conserva los para metros de la imagen y realiza el mismo procedimiento de escritura del .bin<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"616\" height=\"760\" src=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/flash_tool_write_target.gif\" alt=\"\" class=\"wp-image-2637\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Crear todos los archivos merged de BlueRetro<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Con todo lo aprendido he creado un script en Python para fusionar todos los binarios de BlueRetro (bootloader.bin, partition-table.bin, ota_data_initial.bin y BlueRetro_hw1_Consola-Retro) y crear un firmware para cada consola<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#F8F8F2;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#272822\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>import os\n\n# Para los archivos en el directorio actual\nfor filename in os.listdir('.'):\n    # Si el archivo termina con .bin\n    if filename.endswith('.bin'):\n        # Crear el nuevo nombre del archivo eliminando del nombre el texto 'BlueRetro_hw1_' solo quedara consola.bin\n        new_name = filename.replace('BlueRetro_hw1_', '')\n        # Agrego prefijo 'blueretro_v25.04_hw1_merged_' + consola.bin\n        new_name = 'blueretro_v25.04_hw1_merged_' + new_name\n        # Este es el comando para fusionar los archivos BlueRetro usando esptool\n        # esptool -c esp32 merge-bin -o n64_blueretro_hw1v25.04_merged.bin --flash-mode dio --flash-size 4MB 0x1000 .\/bootloader\/bootloader.bin 0x8000 .\/partition_table\/partition-table.bin 0xd000 .\/ota\/ota_data_initial.bin 0x10000 BlueRetro_hw1_n64.bin\n        execute_command = f'esptool -c esp32 merge-bin -o {new_name} --flash-mode dio --flash-size 4MB 0x1000 .\/bootloader\/bootloader.bin 0x8000 .\/partition_table\/partition-table.bin 0xd000 .\/ota\/ota_data_initial.bin 0x10000 {filename}'\n        # Ejecuto el comando\n        os.system(execute_command)<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki monokai\" style=\"background-color: #272822\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F92672\">import<\/span><span style=\"color: #F8F8F2\"> os<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #88846F\"># Para los archivos en el directorio actual<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F92672\">for<\/span><span style=\"color: #F8F8F2\"> filename <\/span><span style=\"color: #F92672\">in<\/span><span style=\"color: #F8F8F2\"> os.listdir(<\/span><span style=\"color: #E6DB74\">&#39;.&#39;<\/span><span style=\"color: #F8F8F2\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #88846F\"># Si el archivo termina con .bin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #F92672\">if<\/span><span style=\"color: #F8F8F2\"> filename.endswith(<\/span><span style=\"color: #E6DB74\">&#39;.bin&#39;<\/span><span style=\"color: #F8F8F2\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #88846F\"># Crear el nuevo nombre del archivo eliminando del nombre el texto &#39;BlueRetro_hw1_&#39; solo quedara consola.bin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        new_name <\/span><span style=\"color: #F92672\">=<\/span><span style=\"color: #F8F8F2\"> filename.replace(<\/span><span style=\"color: #E6DB74\">&#39;BlueRetro_hw1_&#39;<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #E6DB74\">&#39;&#39;<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #88846F\"># Agrego prefijo &#39;blueretro_v25.04_hw1_merged_&#39; + consola.bin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        new_name <\/span><span style=\"color: #F92672\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">&#39;blueretro_v25.04_hw1_merged_&#39;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #F92672\">+<\/span><span style=\"color: #F8F8F2\"> new_name<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #88846F\"># Este es el comando para fusionar los archivos BlueRetro usando esptool<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #88846F\"># esptool -c esp32 merge-bin -o n64_blueretro_hw1v25.04_merged.bin --flash-mode dio --flash-size 4MB 0x1000 .\/bootloader\/bootloader.bin 0x8000 .\/partition_table\/partition-table.bin 0xd000 .\/ota\/ota_data_initial.bin 0x10000 BlueRetro_hw1_n64.bin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        execute_command <\/span><span style=\"color: #F92672\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #66D9EF; font-style: italic\">f<\/span><span style=\"color: #E6DB74\">&#39;esptool -c esp32 merge-bin -o <\/span><span style=\"color: #AE81FF\">{<\/span><span style=\"color: #F8F8F2\">new_name<\/span><span style=\"color: #AE81FF\">}<\/span><span style=\"color: #E6DB74\"> --flash-mode dio --flash-size 4MB 0x1000 .\/bootloader\/bootloader.bin 0x8000 .\/partition_table\/partition-table.bin 0xd000 .\/ota\/ota_data_initial.bin 0x10000 <\/span><span style=\"color: #AE81FF\">{<\/span><span style=\"color: #F8F8F2\">filename<\/span><span style=\"color: #AE81FF\">}<\/span><span style=\"color: #E6DB74\">&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #88846F\"># Ejecuto el comando<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        os.system(execute_command)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"760\" height=\"528\" src=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/merged_all_blueretro_py.gif\" alt=\"\" class=\"wp-image-2687\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"885\" src=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/merged_all_blueretro-1024x885.png\" alt=\"\" class=\"wp-image-2685\" srcset=\"https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/merged_all_blueretro-1024x885.png 1024w, https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/merged_all_blueretro-300x259.png 300w, https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/merged_all_blueretro-768x664.png 768w, https:\/\/raymundopizano.com\/blog\/wp-content\/uploads\/2025\/10\/merged_all_blueretro.png 1475w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Usando esptool como libreria<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#F8F8F2;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#272822\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>import os\nimport esptool\n\n# Para los archivos en el directorio actual\nfor filename in os.listdir('.'):\n    # Si el archivo termina con .bin\n    if filename.endswith('.bin'):\n        # Crear el nuevo nombre del archivo eliminando del nombre el texto 'BlueRetro_hw1_' solo quedara consola.bin\n        new_name = filename.replace('BlueRetro_hw1_', '')\n        # Agrego prefijo 'blueretro_v25.04_hw1_merged_' + consola.bin\n        new_name = 'blueretro_v25.04_hw1_merged_' + new_name\n        # Este es el comando para fusionar los archivos BlueRetro usando esptool\n        # esptool -c esp32 merge-bin -o n64_blueretro_hw1v25.04_merged.bin --flash-mode dio --flash-size 4MB 0x1000 .\/bootloader\/bootloader.bin 0x8000 .\/partition_table\/partition-table.bin 0xd000 .\/ota\/ota_data_initial.bin 0x10000 BlueRetro_hw1_n64.bin\n        execute_command = &#91;\n            '-c', 'esp32',\n            'merge-bin', f'-o {new_name}',\n            '--flash-mode', 'dio',\n            '--flash-size', '4MB',\n            '0x1000', '.\/bootloader\/bootloader.bin',\n            '0x8000', '.\/partition_table\/partition-table.bin',\n            '0xd000', '.\/ota\/ota_data_initial.bin',\n            '0x10000', f'{filename}'\n        &#93;\n        # Ejecuto el comando\n        esptool.main(execute_command)<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki monokai\" style=\"background-color: #272822\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F92672\">import<\/span><span style=\"color: #F8F8F2\"> os<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F92672\">import<\/span><span style=\"color: #F8F8F2\"> esptool<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #88846F\"># Para los archivos en el directorio actual<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F92672\">for<\/span><span style=\"color: #F8F8F2\"> filename <\/span><span style=\"color: #F92672\">in<\/span><span style=\"color: #F8F8F2\"> os.listdir(<\/span><span style=\"color: #E6DB74\">&#39;.&#39;<\/span><span style=\"color: #F8F8F2\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #88846F\"># Si el archivo termina con .bin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">    <\/span><span style=\"color: #F92672\">if<\/span><span style=\"color: #F8F8F2\"> filename.endswith(<\/span><span style=\"color: #E6DB74\">&#39;.bin&#39;<\/span><span style=\"color: #F8F8F2\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #88846F\"># Crear el nuevo nombre del archivo eliminando del nombre el texto &#39;BlueRetro_hw1_&#39; solo quedara consola.bin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        new_name <\/span><span style=\"color: #F92672\">=<\/span><span style=\"color: #F8F8F2\"> filename.replace(<\/span><span style=\"color: #E6DB74\">&#39;BlueRetro_hw1_&#39;<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #E6DB74\">&#39;&#39;<\/span><span style=\"color: #F8F8F2\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #88846F\"># Agrego prefijo &#39;blueretro_v25.04_hw1_merged_&#39; + consola.bin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        new_name <\/span><span style=\"color: #F92672\">=<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #E6DB74\">&#39;blueretro_v25.04_hw1_merged_&#39;<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #F92672\">+<\/span><span style=\"color: #F8F8F2\"> new_name<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #88846F\"># Este es el comando para fusionar los archivos BlueRetro usando esptool<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #88846F\"># esptool -c esp32 merge-bin -o n64_blueretro_hw1v25.04_merged.bin --flash-mode dio --flash-size 4MB 0x1000 .\/bootloader\/bootloader.bin 0x8000 .\/partition_table\/partition-table.bin 0xd000 .\/ota\/ota_data_initial.bin 0x10000 BlueRetro_hw1_n64.bin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        execute_command <\/span><span style=\"color: #F92672\">=<\/span><span style=\"color: #F8F8F2\"> &#91;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #E6DB74\">&#39;-c&#39;<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #E6DB74\">&#39;esp32&#39;<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #E6DB74\">&#39;merge-bin&#39;<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #66D9EF; font-style: italic\">f<\/span><span style=\"color: #E6DB74\">&#39;-o <\/span><span style=\"color: #AE81FF\">{<\/span><span style=\"color: #F8F8F2\">new_name<\/span><span style=\"color: #AE81FF\">}<\/span><span style=\"color: #E6DB74\">&#39;<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #E6DB74\">&#39;--flash-mode&#39;<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #E6DB74\">&#39;dio&#39;<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #E6DB74\">&#39;--flash-size&#39;<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #E6DB74\">&#39;4MB&#39;<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #E6DB74\">&#39;0x1000&#39;<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #E6DB74\">&#39;.\/bootloader\/bootloader.bin&#39;<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #E6DB74\">&#39;0x8000&#39;<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #E6DB74\">&#39;.\/partition_table\/partition-table.bin&#39;<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #E6DB74\">&#39;0xd000&#39;<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #E6DB74\">&#39;.\/ota\/ota_data_initial.bin&#39;<\/span><span style=\"color: #F8F8F2\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">            <\/span><span style=\"color: #E6DB74\">&#39;0x10000&#39;<\/span><span style=\"color: #F8F8F2\">, <\/span><span style=\"color: #66D9EF; font-style: italic\">f<\/span><span style=\"color: #E6DB74\">&#39;<\/span><span style=\"color: #AE81FF\">{<\/span><span style=\"color: #F8F8F2\">filename<\/span><span style=\"color: #AE81FF\">}<\/span><span style=\"color: #E6DB74\">&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        &#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        <\/span><span style=\"color: #88846F\"># Ejecuto el comando<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F8F8F2\">        esptool.main(execute_command)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#F8F8F2;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#272822\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"54\" height=\"14\" viewBox=\"0 0 54 14\"><g fill=\"none\" fill-rule=\"evenodd\" transform=\"translate(1 1)\"><circle cx=\"6\" cy=\"6\" r=\"6\" fill=\"#FF5F56\" stroke=\"#E0443E\" stroke-width=\".5\"><\/circle><circle cx=\"26\" cy=\"6\" r=\"6\" fill=\"#FFBD2E\" stroke=\"#DEA123\" stroke-width=\".5\"><\/circle><circle cx=\"46\" cy=\"6\" r=\"6\" fill=\"#27C93F\" stroke=\"#1AAB29\" stroke-width=\".5\"><\/circle><\/g><\/svg><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#F8F8F2;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>esptool -c esp32 merge-bin -o OGX-Mini-v1.0.0a3-ESP32_merged.bin --flash-mode dio --flash-size 4MB 0x1000 bootloader.bin 0x8000 partition-table.bin 0x10000 OGX-Mini-v1.0.0a3-ESP32.bin<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki monokai\" style=\"background-color: #272822\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F8F8F2\">esptool <\/span><span style=\"color: #F92672\">-<\/span><span style=\"color: #F8F8F2\">c esp32 merge<\/span><span style=\"color: #F92672\">-<\/span><span style=\"color: #66D9EF\">bin<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #F92672\">-<\/span><span style=\"color: #F8F8F2\">o <\/span><span style=\"color: #AE81FF\">OGX<\/span><span style=\"color: #F92672\">-<\/span><span style=\"color: #F8F8F2\">Mini<\/span><span style=\"color: #F92672\">-<\/span><span style=\"color: #F8F8F2\">v1.0.0a3<\/span><span style=\"color: #F92672\">-<\/span><span style=\"color: #AE81FF\">ESP32_merged<\/span><span style=\"color: #F8F8F2\">.bin <\/span><span style=\"color: #F44747\">--<\/span><span style=\"color: #F8F8F2\">flash<\/span><span style=\"color: #F92672\">-<\/span><span style=\"color: #F8F8F2\">mode dio <\/span><span style=\"color: #F44747\">--<\/span><span style=\"color: #F8F8F2\">flash<\/span><span style=\"color: #F92672\">-<\/span><span style=\"color: #F8F8F2\">size <\/span><span style=\"color: #F44747\">4MB<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #66D9EF; font-style: italic\">0x<\/span><span style=\"color: #AE81FF\">1000<\/span><span style=\"color: #F8F8F2\"> bootloader.bin <\/span><span style=\"color: #66D9EF; font-style: italic\">0x<\/span><span style=\"color: #AE81FF\">8000<\/span><span style=\"color: #F8F8F2\"> partition<\/span><span style=\"color: #F92672\">-<\/span><span style=\"color: #F8F8F2\">table.bin <\/span><span style=\"color: #66D9EF; font-style: italic\">0x<\/span><span style=\"color: #AE81FF\">10000<\/span><span style=\"color: #F8F8F2\"> <\/span><span style=\"color: #AE81FF\">OGX<\/span><span style=\"color: #F92672\">-<\/span><span style=\"color: #F8F8F2\">Mini<\/span><span style=\"color: #F92672\">-<\/span><span style=\"color: #F8F8F2\">v1.0.0a3<\/span><span style=\"color: #F92672\">-<\/span><span style=\"color: #AE81FF\">ESP32<\/span><span style=\"color: #F8F8F2\">.bin<\/span><\/span><\/code><\/pre><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Esptool es un conjunto de herramientas creadas en Python para programar las placas de desarrollo ESP8266, ESP8585, ESP32, ESP32-C2, ESP32-C3, ESP32-C6, ESP32-H2, ESP32-S2 y ESP32-S3. 1.- Instala la ultima versi\u00f3n de Python (ocupas 3.10 o superior., sigue la gu\u00eda) 2.- Instala Visual Studio Code (Sigue el tutorial) 3.- Crea una carpeta por ejemplo esptool y [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2672,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[15,3,1],"tags":[],"class_list":["post-2344","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-esp32","category-python","category-tutorial"],"_links":{"self":[{"href":"https:\/\/raymundopizano.com\/blog\/wp-json\/wp\/v2\/posts\/2344","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/raymundopizano.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/raymundopizano.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/raymundopizano.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/raymundopizano.com\/blog\/wp-json\/wp\/v2\/comments?post=2344"}],"version-history":[{"count":267,"href":"https:\/\/raymundopizano.com\/blog\/wp-json\/wp\/v2\/posts\/2344\/revisions"}],"predecessor-version":[{"id":2700,"href":"https:\/\/raymundopizano.com\/blog\/wp-json\/wp\/v2\/posts\/2344\/revisions\/2700"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/raymundopizano.com\/blog\/wp-json\/wp\/v2\/media\/2672"}],"wp:attachment":[{"href":"https:\/\/raymundopizano.com\/blog\/wp-json\/wp\/v2\/media?parent=2344"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/raymundopizano.com\/blog\/wp-json\/wp\/v2\/categories?post=2344"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/raymundopizano.com\/blog\/wp-json\/wp\/v2\/tags?post=2344"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}