<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Arduino &#8211; El Cornijal de Linux</title>
	<atom:link href="https://linuxete.duckdns.org/category/arduino/feed/" rel="self" type="application/rss+xml" />
	<link>https://linuxete.duckdns.org</link>
	<description>Un blog sobre Linux</description>
	<lastBuildDate>Fri, 20 Dec 2024 18:27:27 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
	<item>
		<title>Como activar puerto ttyACM0 en Arduino</title>
		<link>https://linuxete.duckdns.org/como-activar-puerto-ttyacm0-en-arduino/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=como-activar-puerto-ttyacm0-en-arduino</link>
					<comments>https://linuxete.duckdns.org/como-activar-puerto-ttyacm0-en-arduino/#comments</comments>
		
		<dc:creator><![CDATA[raspberry]]></dc:creator>
		<pubDate>Fri, 20 Dec 2024 16:04:07 +0000</pubDate>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[/dev/ttyACM0]]></category>
		<category><![CDATA[error avrdude]]></category>
		<guid isPermaLink="false">https://linuxete.duckdns.org/?p=2132</guid>

					<description><![CDATA[¿Has recibido el error "Permission denied on /dev/ttyACM0" al intentar volcar tu programa en Arduino? ¡No entres en pánico! Tan solo se trata de la falta de permisos sobre dispositivos. Si te ha dado el error, entiendo que ya tienes configurado el modelo de placa y el puerto asignado, pero vamos a darle un repaso [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>¿Has recibido el error <kbd>"Permission denied on /dev/ttyACM0"</kbd> al intentar volcar tu programa en Arduino? ¡No entres en pánico! Tan solo se trata de la falta de permisos sobre dispositivos.</p>



<p>Si te ha dado el error, entiendo que ya tienes configurado el modelo de placa y el puerto asignado, pero vamos a darle un repaso por si algo se te ha escapado.</p>



<h3 class="wp-block-heading">Modelo de placa.</h3>



<p>Abre el IDE de Arduino, ve a <strong>Tools</strong>, <strong>Board</strong>, <strong>Arduino AVR Boards</strong> y elije el modelo de tu placa, la mia es <strong>Arduino Uno</strong>.</p>



<figure class="wp-block-image aligncenter size-large"><img fetchpriority="high" decoding="async" width="1024" height="555" src="https://linuxete.duckdns.org/wp-content/uploads/2024/12/uno-1-1024x555.png" alt="" class="wp-image-2215" srcset="https://linuxete.duckdns.org/wp-content/uploads/2024/12/uno-1-1024x555.png 1024w, https://linuxete.duckdns.org/wp-content/uploads/2024/12/uno-1-300x163.png 300w, https://linuxete.duckdns.org/wp-content/uploads/2024/12/uno-1-768x417.png 768w, https://linuxete.duckdns.org/wp-content/uploads/2024/12/uno-1.png 1366w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">Puerto.</h3>



<p>Una vez seleccionada tu placa, vamos a ver que puerto va a usar para comunicarse con nuestro PC, así que ve a <strong>Tools</strong>, <strong>Port</strong> y selecciona el que te aparezca, en mi caso <strong>ttyACM0</strong></p>



<figure class="wp-block-image aligncenter size-full"><img decoding="async" width="921" height="627" src="https://linuxete.duckdns.org/wp-content/uploads/2024/12/portprovider.png" alt="" class="wp-image-2216" srcset="https://linuxete.duckdns.org/wp-content/uploads/2024/12/portprovider.png 921w, https://linuxete.duckdns.org/wp-content/uploads/2024/12/portprovider-300x204.png 300w, https://linuxete.duckdns.org/wp-content/uploads/2024/12/portprovider-768x523.png 768w" sizes="(max-width: 921px) 100vw, 921px" /></figure>



<p>Es ahora cuando al intentar volcar el programa a la placa Arduino, recibes el error «<strong>/dev/ttyACM0</strong>«</p>



<figure class="wp-block-image aligncenter size-full"><img decoding="async" width="921" height="627" src="https://linuxete.duckdns.org/wp-content/uploads/2024/12/Captura-de-pantalla_2024-12-18_23-44-05.png" alt="" class="wp-image-2213" srcset="https://linuxete.duckdns.org/wp-content/uploads/2024/12/Captura-de-pantalla_2024-12-18_23-44-05.png 921w, https://linuxete.duckdns.org/wp-content/uploads/2024/12/Captura-de-pantalla_2024-12-18_23-44-05-300x204.png 300w, https://linuxete.duckdns.org/wp-content/uploads/2024/12/Captura-de-pantalla_2024-12-18_23-44-05-768x523.png 768w" sizes="(max-width: 921px) 100vw, 921px" /></figure>



<p></p>



<pre class="wp-block-code"><code>avrdude: ser_open(): can't open device "/dev/ttyACM0": Permission denied
Failed uploading: uploading error: exit status 1</code></pre>



<p>Lo que nos dice el error, es que no tenemos permisos para usar el puerto «ttyACM0»</p>



<p>Esto tiene 2 soluciones:</p>



<ul class="wp-block-list">
<li>Agregar nuestro usuario al grupo <code>dialout</code></li>



<li>Dar permisos de escritura y ejecución al puerto antes mencionado.</li>
</ul>



<p>Elige la que creas mas conveniente.</p>



<h3 class="wp-block-heading">Agrega tu usuario al grupo «dialout»</h3>



<p>Pertenecer al grupo <code>dialout</code>, nos posibilita a tener acceso a los puertos de salida de nuestro equipo, tales como SERIAL, GPIO etc etc. Los miembros de este grupo pueden programar placas Arduino, salir a través del puerto GPIO de una Raspberry o usar perifericos del año de la Polka como, módems, fax, etc.</p>



<p>En una terminal, con la placa conectada, introduce.</p>



<pre class="wp-block-code"><code><strong>ls -l /dev/ttyACM*</strong></code></pre>



<p>Esto nos muestra que root es el propietario y <code>dialout</code> es el grupo con acceso.</p>



<pre class="wp-block-code"><code>crw-rw---- 1 <mark style="background-color:var(--ast-global-color-7)" class="has-inline-color">root dialout</mark> 166, 0 dic 9 14:10 /dev/ttyACM0</code></pre>



<p>Introduciendo el comando, <code>groups</code>, en un terminal mostrará los grupos a los que perteneces.</p>



<pre class="wp-block-code"><code>me@samsung:~$ <strong>groups</strong>
me cdrom floppy sudo audio dip video plugdev users netdev bluetooth lpadmin scanner
me@samsung:~$ </code></pre>



<p>La salida del comando <code>groups</code>, se ve que no pertenecemos al grupo <code>dialout</code></p>



<p>Para agregar tu usuario al grupo <code>dialout</code>, escriben en una terminal lo siguiente:</p>



<pre class="wp-block-code"><code><strong>sudo usermod -aG dialout tu_usuario</strong></code></pre>



<p>Reinicia tu equipo y vuelve a mirar a qué grupos perteneces.</p>



<pre class="wp-block-code"><code>me@samsung:~$ <strong>groups</strong>
me cdrom floppy <mark style="background-color:var(--ast-global-color-7)" class="has-inline-color">dialout</mark> sudo audio dip video plugdev users netdev bluetooth lpadmin scanner
me@samsung:~$ </code></pre>



<p>Ahora si deberás pertenecer al grupo <code>dialout</code> y no tendrás problemas para volcar tus programas a la placa Arduino.</p>



<h3 class="wp-block-heading">Permisos al puerto ttyACM0</h3>



<p>Esta opción es más rápida ya que no tienes que reiniciar la máquina, pero a lo mejor, es menos segura al dar permisos a <kbd>otros</kbd> usuarios para usar el puerto de Arduino.</p>



<p>Como ya he mencionado, el problema está relacionado con la falta de permisos para leer/escribir en el puerto serie. </p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Asegúrate que tienes tu Arduino conectado al tu puerto usb</p>
</blockquote>



<p>Como vimos mas arriba, ya sabemos cual es puerto por el que se comunica Arduino. Abre una terminal para ver que tipo de permisos tiene el puerto de salida.</p>



<p>Usa el comando <strong>ls -l</strong> y la ruta del puerto en cuestión.</p>



<pre class="wp-block-code"><code><strong>ls -l /dev/ttyACM0</strong>
crw-rw---- 1 root dialout 166, 0 dic 18 23:30 /dev/ttyACM0</code></pre>



<p>Como resultado del comando anterior, los permisos de lectura/escritura del puerto, son para el usuario root y el grupo <code>dialou</code>t.</p>



<p>Para establecer permisos de lectura/escritura, escribe a continuación:</p>



<pre class="wp-block-code"><code><strong>sudo chmod a+rw /dev/ttyACM0</strong></code></pre>



<p>Ahora el <kbd><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-ast-global-color-0-color">usuario</mark></strong></kbd>, el <kbd><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-ast-global-color-0-color">grupo</mark></strong></kbd> y <kbd><strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-ast-global-color-0-color">otros</mark></strong></kbd> tendrán acceso a ttyACM0</p>



<p>Y eso sería todo lo necesario para comunicarnos por el puerto ttyACM0 en nuestra placa Arduino.</p>



<p>Para quitar este permiso a <kbd><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-ast-global-color-0-color"><strong>otros</strong></mark></kbd>, tan solo escribe:</p>



<pre class="wp-block-code"><code><strong>sudo chmod o-rw /dev/ttyACM0</strong></code></pre>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://linuxete.duckdns.org/como-activar-puerto-ttyacm0-en-arduino/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
	</channel>
</rss>
