<?xml version="1.0" encoding="UTF-8" standalone="no"?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0"><channel><title>nanolec</title><description>Tecnologías de las cosas pequeñas</description><managingEditor>noreply@blogger.com (Isidoro Aguilar Baeza)</managingEditor><pubDate>Wed, 7 Feb 2024 03:57:33 +0100</pubDate><generator>Blogger http://www.blogger.com</generator><openSearch:totalResults xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/">24</openSearch:totalResults><openSearch:startIndex xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/">1</openSearch:startIndex><openSearch:itemsPerPage xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/">25</openSearch:itemsPerPage><link>http://nanolec.blogspot.com/</link><language>en-us</language><itunes:explicit>no</itunes:explicit><itunes:subtitle>Tecnologías de las cosas pequeñas</itunes:subtitle><itunes:category text="Technology"><itunes:category text="Gadgets"/></itunes:category><itunes:owner><itunes:email>noreply@blogger.com</itunes:email></itunes:owner><item><title>Google Assistant en Orange Pi Zero</title><link>http://nanolec.blogspot.com/2018/11/google-assistant-en-orange-pi-zero.html</link><category>asistente</category><category>google</category><category>orange pi</category><category>python</category><author>noreply@blogger.com (Isidoro Aguilar Baeza)</author><pubDate>Sun, 25 Nov 2018 21:48:00 +0100</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-155451023305910224.post-1438480302459655497</guid><description>&lt;div style="background-color: rgb(255 , 255 , 255); background: rgb(255 , 255 , 255); color: rgb(142 , 128 , 113); font-family: &amp;quot;hiragino sans gb&amp;quot; , &amp;quot;microsoft yahei&amp;quot; , &amp;quot;stheiti&amp;quot; , &amp;quot;simsun&amp;quot; , &amp;quot;lucida grande&amp;quot; , &amp;quot;lucida sans unicode&amp;quot; , &amp;quot;lucida sans&amp;quot; , &amp;quot;segoe ui&amp;quot; , , &amp;quot;malgun gothic&amp;quot; , &amp;quot;verdana&amp;quot; , &amp;quot;tahoma&amp;quot; , sans-serif; font-family: &amp;quot;lucida grande&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;apple sd gothic neo&amp;quot; , &amp;quot;malgun gothic&amp;quot; , &amp;quot;lucida sans unicode&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;arial&amp;quot; , sans-serif; font-size: 0.9em; font-size: 15px; margin: 0px; overflow-x: hidden; overflow-y: auto; padding: 20px; padding: 20px; padding: 5px 20px 26px;"&gt;
&lt;h1 id="google-assistant-en-orange-pi-zero-(i)" style="clear: both; color: rgb(92 , 81 , 70); font-size: 2.2em; font-weight: 400; font-weight: bold; letter-spacing: -1px; margin-top: 0px; margin: 1.5em 0px 1em;"&gt;
&lt;a href="https://draft.blogger.com/blogger.g?blogID=155451023305910224#google-assistant-en-orange-pi-zero-(i)" name="google-assistant-en-orange-pi-zero-(i)" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;/a&gt;Google Assistant en Orange Pi Zero (I)&lt;/h1&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
En el artículo de hoy vamos a ver cómo utilizar nuestra Orange Pi Zero [casi] como un dispositivo &lt;b&gt;Google Home&lt;/b&gt; por muy poco dinero.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Con la guerra abierta que hay a fecha de hoy con los llamados &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;asistentes virtuales&lt;/code&gt;, las empresas competidoras como Amazon, Google, Apple y otras hacen lo posible por imponer su producto como un nuevo estándar en este campo.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
En un intento de expandir al máximo su asistente (Google Assistant), Google ha puesto a disposición de la comunidad desarrolladora una serie de APIs y librerías que nos permiten poner en funcionamiento su asistente en cualquier plataforma que cumpla con estos requisitos básicos:&lt;/div&gt;
&lt;ul&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Un intérprete de Python.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Una conexión a internet.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Un altavoz.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Un micrófono.&lt;/li&gt;
&lt;/ul&gt;
&lt;center&gt;
&lt;img alt="" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioz4wyjAzHBjNt1NJcGj6czlvKkkBytkepV7flGwDB2g37PCkaBUSeg6oqXwskoujmeuTLqX_6MkqdA4NIeprBfd7BPkSjtCZks6vz25WM-riI1SBTudSh-qWBScf3B53c8niNCaJckDk/s640/orangepi_ga.jpg" style="max-width: 100%;" /&gt;&lt;/center&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Como experimento me planteo montar el asistente en una Orange Pi Zero, que gracias a su bajo precio y pequeño tamaño nos permitirá disponer de un dispositivo eficiente, pequeño y de bajo consumo.&lt;/div&gt;
&lt;blockquote style="border-left-color: rgb(230 , 230 , 230); border-left-style: solid; border-left-width: 4px; color: rgb(232 , 103 , 65); font-style: italic; margin: 1em 20px; padding: 0px 15px;"&gt;
&lt;div style="line-height: 19px; margin-bottom: 0px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
Sin embargo, dados los requerimientos, este artículo se puede aplicar en principio a cualquier otra placa o dispositivo que cumpla con los requisitos especificados: un PC x86, una Raspberry, una Banana Pi, etc.&lt;/div&gt;
&lt;/blockquote&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Básicamente, hay dos enfoques que podemos tomar para montar nuestro asistente, de menor a mayor funcionalidad. Es lo que veremos en los puntos 1 y 2.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Antes, veamos qué necesitamos comprar o tener de antemano:&lt;/div&gt;
&lt;h2 id="requisitos" style="border-bottom-color: rgb(230 , 230 , 230); border-bottom-style: solid; border-bottom-width: 1px; clear: both; color: rgb(92 , 81 , 70); font-size: 1.8em; font-weight: 400; font-weight: bold; letter-spacing: -1px; line-height: 1.7em; margin: 1.275em 0px 0.85em;"&gt;
&lt;a href="https://draft.blogger.com/blogger.g?blogID=155451023305910224#requisitos" name="requisitos" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;/a&gt;Requisitos&lt;/h2&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
Para este proyecto necesitaremos los siguientes requisitos:&lt;/div&gt;
&lt;ul&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
&lt;b&gt;Orange Pi Zero&lt;/b&gt;.&lt;br style="clear: both;" /&gt;Obviamente, necesitaremos una placa de desarrollo. Yo he elegido la Orange Pi Zero por su buena relación potencia/precio y porque ya he usado otras para otros proyectos y me gusta. Hay dos versiones de esta placa: la de 256MB de RAM y la de 512MB. Es muy importante comprar la de &lt;b&gt;512MB&lt;/b&gt; porque la otra es insuficiente. &lt;i&gt;Aún así, para el apartado Opción 2 como veremos en el siguiente artículo, tendremos problemas al tener sólo 512MB de memoria&lt;/i&gt;.&lt;br style="clear: both;" /&gt;La placa nos podría valer tal cual, ya que dispone de una fila de terminales GPIO donde podríamos conectarle una salida y entrada de audio. No obstante yo recomiendo comprar, además de la placa, una &lt;b&gt;tarjeta de expansión&lt;/b&gt; que lleva ya la salida de audio, un micrófono integrado, un receptor de infrarrojos y dos puertos USB adicionales entre otras cosas.&lt;/div&gt;
&lt;center&gt;
&lt;img alt="Opi zero" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiC0aLbQ8DDk9taw5XRSgLwYm1IVsRSe2fhhbwXn6KLCoN3sN-imLJ5MpP3KKiy-TukHHuaxYzw_NpUMy807FmK7uo6JR_M2pjdOZmF-cb8YPLCRKoIpi2S44I9z9uBZF4BryJk8U9ht8c/s320/opizero.jpg" style="max-width: 100%;" /&gt;&lt;/center&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
En China podemos encontrar la Orange Pi Zero principalmente en &lt;i&gt;Banggood&lt;/i&gt; y en &lt;i&gt;Aliexpress&lt;/i&gt;. A continuación pongo un par de enlaces con el paquete completo (placa principal de 512MB + tarjeta de expansión + caja), con los precios a 17/11/2018. Puntualmente se encuentran ofertas mejores, pudiendo salir el paquete completo por unos 14€:&lt;/div&gt;
&lt;ul&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;a href="https://www.banggood.com/3-in-1-Orange-Pi-Zero-512MB-Development-Board-Expansion-Board-Black-Case-Kit-p-1135881.html?rmmds=search&amp;amp;cur_warehouse=CN" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;Banggood&lt;/a&gt; (20,53 €).&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;a href="https://www.aliexpress.com/item/New-Orange-Pi-Zero-Set-6-Orange-Pi-Zero-512MB-Expansion-Board-Black-Case-development-board/32782429852.html?spm=2114.search0104.3.17.40e27b82cMNnUV&amp;amp;ws_ab_test=searchweb0_0,searchweb201602_5_10065_10068_10547_319_10891_317_10548_10696_10924_10084_453_454_10083_10927_10618_10920_10921_10307_10922_10820_10301_10821_10303_537_536_10059_10884_10887_100031_321_322_10103-10891,searchweb201603_51,ppcSwitch_0&amp;amp;algo_expid=8b863224-3e2e-4d94-abee-ca066438c2e2-2&amp;amp;algo_pvid=8b863224-3e2e-4d94-abee-ca066438c2e2" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;Aliexpress&lt;/a&gt; (19,73 €).&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
En teoría, se pueden encontrar también por Amazon, pero el precio sube considerablemente.&lt;/div&gt;
&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
&lt;b&gt;Disipadores&lt;/b&gt;.&lt;br style="clear: both;" /&gt;La Orange Pi Zero incorpora un procesador &lt;i&gt;Allwinner H2+&lt;/i&gt;, y se calienta bastante (en condiciones normales se puede poner en 70ºC perfectamente). Es muy recomendable ponerle un disipador al menos al procesador (hay quien también se lo pone a la memoria).&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
&lt;/div&gt;
&lt;center&gt;
&lt;img alt="Disipadores" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWZE7abbN2UzEXDKJm99s9HRUNUz8NYX1tK3H_bZjua1c3qk1AOOT414hxwNEGwN4eo6ZtcuXHuoU1FId6oPNpg7RhjnPvd2yXDW82Gv6VXfCFGqin9ahZtnz5z5XUNjqAirXKQQLwHhc/s320/heatsinks.jpg" style="max-width: 100%;" /&gt;&lt;/center&gt;
&lt;br style="clear: both;" /&gt;Aconsejo comprar uno estos kits que traen 3 disipadores y son muy baratos. Hay que tener en cuenta que no es lo mismo tener la placa al aire que metida dentro de una caja tan pequeña. Los disipadores llevan un adhesivo de doble cara y simplemente se pegan sobre el procesador o la memoria, según su tamaño.&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;a href="https://www.banggood.com/3pcs-Adhesive-Aluminum-Heat-Sink-Cooling-Kit-For-Orange-Pi-PC-Lite-One-p-1152517.html?rmmds=search&amp;amp;cur_warehouse=CN" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;Banggood&lt;/a&gt; (1,09€).&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;a href="https://www.banggood.com/3pcs-Adhesive-Aluminum-Heat-Sink-Cooler-Kit-For-Cooling-Raspberry-Pi-p-915837.html?rmmds=myorder&amp;amp;cur_warehouse=CN" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;Banggood&lt;/a&gt; (0,87€). Estos son para Raspberry, pero nos valen perfectamente.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;a href="https://www.aliexpress.com/item/Ceramic-Heat-Sink-15-15-5mm-CPU-Cooling-Heatsink-for-Orange-Pi-Raspberry-Pi/32902198398.html?spm=2114.search0104.8.33.3dd869c8vJ1oj8" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;Aliexpress&lt;/a&gt; (1,54€). Es una sola unidad, en cerámica (supuestamente mayor disipación).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
&lt;b&gt;Micrófono USB&lt;/b&gt;.&lt;br style="clear: both;" /&gt;Es verdad que, como he dicho antes, la placa de expansión lleva un micrófono integrado, pero al parecer es de muy poca calidad. Yo recomiendo comprar un pequeño micrófono USB que, si bien no es una maravilla, tiene bastante sensibilidad y funciona perfectamente. Además es muy barato:&lt;/div&gt;
&lt;ul&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;a href="https://www.aliexpress.com/item/Overfly-Super-Mini-USB-2-0-Microphone-Portable-Studio-Speech-Mic-Audio-Adapter-Driver-Free-for/32835259347.html?spm=a2g0s.9042311.0.0.63654c4dNyvjIN" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;Aliexpress&lt;/a&gt; (1,75€)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
&lt;b&gt;Alimentación&lt;/b&gt;.&lt;br style="clear: both;" /&gt;Finalmente, nos hará falta alimentar la placa. La toma de alimentación es microUSB, de manera que podremos hacerlo con cualquier alimentador de móvil o tablet más o menos potente. Lo recomendable es un alimentador de &lt;b&gt;2A&lt;/b&gt; o superior. De todos modos, yo tengo una Orange alimentada en un puerto USB de un router desde hace 2 años sin problemas…&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="preparación-del-altavoz" style="border-bottom-color: rgb(230 , 230 , 230); border-bottom-style: solid; border-bottom-width: 1px; clear: both; color: rgb(92 , 81 , 70); font-size: 1.8em; font-weight: 400; font-weight: bold; letter-spacing: -1px; line-height: 1.7em; margin: 1.275em 0px 0.85em;"&gt;
&lt;a href="https://draft.blogger.com/blogger.g?blogID=155451023305910224#preparaci%C3%B3n-del-altavoz" name="preparación-del-altavoz" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;/a&gt;Preparación del altavoz&lt;/h2&gt;
&lt;h3 id="instalación-del-sistema-operativo." style="clear: both; color: rgb(92 , 81 , 70); font-size: 1.6em; font-weight: 400; font-weight: bold; letter-spacing: -1px; margin: 1.125em 0px 0.75em;"&gt;
&lt;a href="https://draft.blogger.com/blogger.g?blogID=155451023305910224#instalaci%C3%B3n-del-sistema-operativo." name="instalación-del-sistema-operativo." style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;/a&gt;Instalación del Sistema Operativo.&lt;/h3&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
Lo primero que haremos es instalar un sistema operativo para la Orange Pi. Recomiendo encarecidamente que instaléis &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;armbian&lt;/code&gt;. Se trata de una distribución Linux basada en debian para dispositivos &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;ARM&lt;/code&gt; de todo tipo, con procesadores Allwinner, Rockchip, FreeScale, etc.&lt;/div&gt;
&lt;center&gt;
&lt;img alt="Armbian Logo" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1EsJqAdXXT_gEuqTX-QaFvjNIZODV1LnTSNLjuurG9jHJI_lbv38U3TA_bcqBGQ-x6eWEgsRNITxcLcDX6ESizQhsdkmvAqsIJYWxEd2MVsaXRe6SV2eUDH3EM2FIaxgg4IExaCkCfH4/s320/armbianlogo.jpg" style="max-width: 100%;" /&gt;&lt;/center&gt;
&lt;h5 id="descarga-de-armbian" style="clear: both; color: rgb(92 , 81 , 70); font-size: 1.2em; font-weight: 400; font-weight: bold; letter-spacing: -1px; margin: 0.855em 0px 0.57em;"&gt;
&lt;a href="https://draft.blogger.com/blogger.g?blogID=155451023305910224#descarga-de-armbian" name="descarga-de-armbian" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;/a&gt;Descarga de armbian&lt;/h5&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
La página de descarga, donde podéis buscar una distribución para vuestro dispositivo específico, es la siguiente:&lt;/div&gt;
&lt;blockquote style="border-left-color: rgb(230 , 230 , 230); border-left-style: solid; border-left-width: 4px; color: rgb(232 , 103 , 65); font-style: italic; margin: 1em 20px; padding: 0px 15px;"&gt;
&lt;div style="line-height: 19px; margin-bottom: 0px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
&lt;a href="https://www.armbian.com/" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;/a&gt;&lt;a href="https://www.armbian.com/" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;https://www.armbian.com&lt;/a&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;h5 id="grabación-en-sd" style="clear: both; color: rgb(92 , 81 , 70); font-size: 1.2em; font-weight: 400; font-weight: bold; letter-spacing: -1px; margin: 0.855em 0px 0.57em;"&gt;
&lt;a href="https://draft.blogger.com/blogger.g?blogID=155451023305910224#grabaci%C3%B3n-en-sd" name="grabación-en-sd" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;/a&gt;Grabación en SD&lt;/h5&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
Una vez descargada la imagen, la grabamos en una tarjeta microSD por medio del programa &lt;a href="https://www.balena.io/etcher/" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;Etcher&lt;/code&gt;&lt;/a&gt; (si trabajamos desde WIndows). En caso de trabajar desde Linux podemos hacer lo mismo con las herramientas del sistema o por medio del comando &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;dd&lt;/code&gt;.&lt;/div&gt;
&lt;h5 id="instalación-del-sistema" style="clear: both; color: rgb(92 , 81 , 70); font-size: 1.2em; font-weight: 400; font-weight: bold; letter-spacing: -1px; margin: 0.855em 0px 0.57em;"&gt;
&lt;a href="https://draft.blogger.com/blogger.g?blogID=155451023305910224#instalaci%C3%B3n-del-sistema" name="instalación-del-sistema" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;/a&gt;Instalación del sistema&lt;/h5&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
Con nuestra microSD grabada, la introducimos en la Orange y arrancamos. Ya que la Orange Pi Zero no tiene salida de vídeo &lt;b&gt;HDMI&lt;/b&gt;, no podremos conectarle un teclado y empezar a teclear comandos. Yo lo que hago en estos casos es lo siguiente:&lt;/div&gt;
&lt;ul&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Le conecto un &lt;i&gt;cable de red&lt;/i&gt; a la toma ethernet RJ45 para conectarla a la red.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;En el móvil, utilizo la app &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;Fing&lt;/code&gt; para comprobar qué &lt;i&gt;dirección IP&lt;/i&gt; le ha asignado el router.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Una vez que tengo la &lt;i&gt;IP&lt;/i&gt;, desde cualquier ordenador accedo mediante protocolo &lt;i&gt;ssh&lt;/i&gt; con algún programa como &lt;a href="https://www.putty.org/" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;putty&lt;/a&gt; o &lt;a href="https://www.netsarang.com/download/free_license.html" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;Xshell&lt;/a&gt; (gratuíto para usuarios domésticos y escolares).&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;El usuario a utilizar es &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;root&lt;/code&gt;, y la contraseña &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;1234&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
La primera vez que arranca, armbian nos pedirá que cambiemos la contraseña de root y nos pedirá los datos de un usuario normal (no root) que creará con privilegios de &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;sudo&lt;/code&gt;.&lt;/div&gt;
&lt;h5 id="configuración-básica" style="clear: both; color: rgb(92 , 81 , 70); font-size: 1.2em; font-weight: 400; font-weight: bold; letter-spacing: -1px; margin: 0.855em 0px 0.57em;"&gt;
&lt;a href="https://draft.blogger.com/blogger.g?blogID=155451023305910224#configuraci%C3%B3n-b%C3%A1sica" name="configuración-básica" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;/a&gt;Configuración básica&lt;/h5&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
Una vez iniciado por primera vez el sistema, recomiendo configurar lo siguiente:&lt;/div&gt;
&lt;ul&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
&lt;u&gt;Conexión WIFI&lt;/u&gt;&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Podemos tener un altavoz inteligente conectado a una toma de red, pero la mayoría de la gente normalmente querrá tenerlo conectado de forma inalámbrica a la WIFI. Por tanto, lo más fácil será ejecutar el comando:&lt;/div&gt;
&lt;pre class="bash hljs" style="background: rgb(35 , 36 , 31); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(248 , 248 , 242); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="bash" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;bash&amp;quot;&amp;gt;nmtui
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;nmtui
&lt;/code&gt;&lt;/pre&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Elegiremos la opción “Activate a connection”&lt;/div&gt;
&lt;center&gt;
&lt;img alt="nmtui_activate" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpBa2cMZ53bIDEpHRuNBXqvvKyzjwN7e_WKBDdcYJ5Uoy6MV83h4oIDMTdTQlcKZ00cq44x2dLSreGJ_XBVvPUrLqE-_Sk-9z6GrnxgayQsDPij4aul3yetfmgjZyFOpUcngEsy2KYfFs/s400/nmtui_activate.jpg" style="max-width: 100%;" /&gt;&lt;/center&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
y después elegiremos la red a la que nos queremos conectar. Una vez seleccionada, nos pedirá la contraseña .&lt;/div&gt;
&lt;center&gt;
&lt;img alt="nmtui_wifi" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgg1KNJHAF8M_PDYG-4-esfaTmHM3AfhzRNtL-WEXXGawTR01JRPhkfBmFJ-YnhqomuimcqJJY4J-HSq8rLMHiCcU225Yf1JPyU4D0JKYvxEr3q8uRqeQFwOfeRQE5nNHZOUGspQC3nqC0/s640/nmtui_wifi.jpg" style="max-width: 100%;" /&gt;&lt;/center&gt;
&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
&lt;u&gt;Personalización&lt;/u&gt;.&lt;br style="clear: both;" /&gt;Finalmente, ejecutamos:&lt;/div&gt;
&lt;pre class="bash hljs" style="background: rgb(35 , 36 , 31); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(248 , 248 , 242); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="bash" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;bash&amp;quot;&amp;gt;sudo armbian-config
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;sudo armbian-config
&lt;/code&gt;&lt;/pre&gt;
&lt;center&gt;
&lt;img alt="armbian-config" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrzzSgh5QFf80_vCVFsiRdRTm7hUAwO2vr9_9WMLAgmgGT5ZBPuoHlklGoMC4nZ6m7da-EmTpq2U4VGcLilei6KA1LQbkaBdNwZE9TaX7iRAGLjAzmY8cazlLegOEyE7HDKB7uVairHw8/s640/armbian-config.jpg" style="max-width: 100%;" /&gt;&lt;/center&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
entramos en la opción “Personal” y configuramos cosas básicas como:&lt;/div&gt;
&lt;ul&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;La zona horaria. Normalmente elegiríamos &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;Europe/Madrid&lt;/code&gt;.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Los locales. Normalmente añadiríamos aquí &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;es_ES.utf8&lt;/code&gt;, fijándolo por defecto para que nos salgan los mensajes y otras cosas en español.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;La disposición del teclado. Elegimos uno con caracteres españoles.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;El hostname. Por defecto es orangepizero, podríamos cambiarlo por el que queramos.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Y ya está todo configurado.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="creación-del-proyecto-de-google." style="clear: both; color: rgb(92 , 81 , 70); font-size: 1.6em; font-weight: 400; font-weight: bold; letter-spacing: -1px; margin: 1.125em 0px 0.75em;"&gt;
&lt;a href="https://draft.blogger.com/blogger.g?blogID=155451023305910224#creaci%C3%B3n-del-proyecto-de-google." name="creación-del-proyecto-de-google." style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;/a&gt;Creación del proyecto de Google.&lt;/h3&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
Una vez que tenemos la placa ya configurada, vamos a entrar en materia. Este tutorial está parcialmente basado en las guías que Google publica en su página para desarrolladores:&lt;/div&gt;
&lt;blockquote style="border-left-color: rgb(230 , 230 , 230); border-left-style: solid; border-left-width: 4px; color: rgb(232 , 103 , 65); font-style: italic; margin: 1em 20px; padding: 0px 15px;"&gt;
&lt;div style="line-height: 19px; margin-bottom: 0px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
&lt;a href="https://developers.google.com/assistant/sdk/" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;https://developers.google.com/assistant/sdk/&lt;/a&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Lo primero que necesitaremos es crear un proyecto en la nube de &lt;b&gt;Google Actions&lt;/b&gt;. Para ello, en nuestro navegador vamos a la siguiente dirección:&lt;/div&gt;
&lt;blockquote style="border-left-color: rgb(230 , 230 , 230); border-left-style: solid; border-left-width: 4px; color: rgb(232 , 103 , 65); font-style: italic; margin: 1em 20px; padding: 0px 15px;"&gt;
&lt;div style="line-height: 19px; margin-bottom: 0px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
&lt;a href="https://console.actions.google.com/" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;https://console.actions.google.com/&lt;/a&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
En esta página pulsamos “&lt;b&gt;Add/import project&lt;/b&gt;“ y rellenamos el nombre del proyecto, el idioma (Spanish) y el país (Spain).&lt;/div&gt;
&lt;center&gt;
&lt;img alt="Google Actions" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvU4zRSE0Zeqii6S-bmz75gttzcIvP0vK79m-M9OYb1OVoAUyFZctgR7qdN0mOIVDEKddIgn-0hOdRrZWRDg9jjnzxz9RvZUCRQwUkwTASMnLaD7cVEQm-3o6U82hgOgm2lxG23i8JQmM/s400/google_actions1.jpg" style="max-width: 100%;" /&gt;&lt;/center&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Una vez creado el proyecto, nos vamos a la parte inferior de la página y pulsamos el botón “&lt;b&gt;Device Registration&lt;/b&gt;“.&lt;/div&gt;
&lt;center&gt;
&lt;img alt="Device Registration" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijU-DP5wqZpuB1E4vwMUdrqo8xCNd-BlPPl8SjEGQqlTHJP-9iw1N_DJMkcSXHY-IqaVU9xsLojC67I7_suAlFmRjrLwQNcqAHbKLpdwIOJPSnGn19ntib7HBpPTZ8pUFvlShTPXBfcnM/s320/google_actions2.jpg" style="max-width: 100%;" /&gt;&lt;/center&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Dejamos la página actual tal cual sin cerrar porque después tendremos que volver a ella.&lt;/div&gt;
&lt;h3 id="credenciales-de-acceso" style="clear: both; color: rgb(92 , 81 , 70); font-size: 1.6em; font-weight: 400; font-weight: bold; letter-spacing: -1px; margin: 1.125em 0px 0.75em;"&gt;
&lt;a href="https://draft.blogger.com/blogger.g?blogID=155451023305910224#credenciales-de-acceso" name="credenciales-de-acceso" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;/a&gt;Credenciales de acceso&lt;/h3&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
Ahora abrimos &lt;u&gt;otra pestaña&lt;/u&gt; en el navegador y nos vamos a la &lt;b&gt;consola para desarrolladores&lt;/b&gt; de Google:&lt;/div&gt;
&lt;blockquote style="border-left-color: rgb(230 , 230 , 230); border-left-style: solid; border-left-width: 4px; color: rgb(232 , 103 , 65); font-style: italic; margin: 1em 20px; padding: 0px 15px;"&gt;
&lt;div style="line-height: 19px; margin-bottom: 0px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
&lt;a href="https://console.developers.google.com/" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;https://console.developers.google.com&lt;/a&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
En esta página, antes que nada, nos aseguraremos de que tenemos seleccionado el proyecto que hemos creado en Google Actions. Una vez seleccionado el proyecto, nos vamos a la opción &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;Biblioteca&lt;/code&gt; (en la parte izquierda) y localizamos “Google Assistant API”. Nos aparecerá una página tal como esta:&lt;/div&gt;
&lt;center&gt;
&lt;img alt="GA API" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfoqV9vUxmunpN5VlGA18FjjQFAuDZ_9MBnufbolhZ2MWuL73UQjIoMrdH4T8V6HUkMsxbDygt7kfGDWOFzkOwPpaYhvRtjFXqPeBFZyOVcoCeA3a6j_2pOFTjCJeMRIvtKPBbbj6HnIM/s400/ga_api.jpg" style="max-width: 100%;" /&gt;&lt;/center&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
En dicha página pulsaremos el botón &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;Habilitar&lt;/code&gt;.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Una vez habilitada, hay que crear unas credenciales de acceso. Para ello, en la parte izquierda pulsamos en &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;Credenciales&lt;/code&gt; y después en la pestaña “&lt;i&gt;Pantalla de consentimiento de OAuth&lt;/i&gt;“.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
En esta pantalla básicamente rellenaremos el nombre de la aplicación o proyecto y el email de contacto. Una vez rellenos estos datos guardamos la credencial pulsando el botón &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;Guardar&lt;/code&gt; que está al final de la página.&lt;/div&gt;
&lt;h3 id="acceso-a-tu-actividad" style="clear: both; color: rgb(92 , 81 , 70); font-size: 1.6em; font-weight: 400; font-weight: bold; letter-spacing: -1px; margin: 1.125em 0px 0.75em;"&gt;
&lt;a href="https://draft.blogger.com/blogger.g?blogID=155451023305910224#acceso-a-tu-actividad" name="acceso-a-tu-actividad" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;/a&gt;Acceso a tu actividad&lt;/h3&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
Para poder utilizar el asistente, es necesario que activemos la compartición de la actividad asociada a nuestra cuenta de Google. Para ello, nos vamos a la siguiente dirección:&lt;/div&gt;
&lt;blockquote style="border-left-color: rgb(230 , 230 , 230); border-left-style: solid; border-left-width: 4px; color: rgb(232 , 103 , 65); font-style: italic; margin: 1em 20px; padding: 0px 15px;"&gt;
&lt;div style="line-height: 19px; margin-bottom: 0px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
&lt;a href="https://myaccount.google.com/activitycontrols" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;https://myaccount.google.com/activitycontrols&lt;/a&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
e iniciamos sesión con nuestra cuenta de Google. En esta página nos aseguraremos de tener marcadas las siguientes opciones:&lt;/div&gt;
&lt;ul&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Actividad en la Web y en Aplicaciones.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Incluye el historial de Chrome y la actividad que se realiza en sitios web, aplicaciones y dispositivos que utilizan los servicios de Google.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Información del dispositivo.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Actividad de Voz y Audio.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="registro-del-dispositivo" style="clear: both; color: rgb(92 , 81 , 70); font-size: 1.6em; font-weight: 400; font-weight: bold; letter-spacing: -1px; margin: 1.125em 0px 0.75em;"&gt;
&lt;a href="https://draft.blogger.com/blogger.g?blogID=155451023305910224#registro-del-dispositivo" name="registro-del-dispositivo" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;/a&gt;Registro del dispositivo&lt;/h3&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
Volvemos a la pestaña que dejamos abierta antes (la de Google Actions) y vamos a asociar un dispositivo al proyecto. Para ello pulsamos el botón &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;Register Model&lt;/code&gt;.&lt;/div&gt;
&lt;center&gt;
&lt;img alt="Registrar dispositivo" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglBYXosaKUvUS4QkECcjyvovZ-yEyLkh9qYzKxAokCjCb2MiyVdC1-qXh-j2D9PJZE5YlqkxVIgMiG5Yi5mxMgKp66e0hsvBnjymBkbG6xmUoN6DEB7xzg1A6OaGhqJvnqdKpOzqwHAeY/s400/google_actions3.jpg" style="max-width: 100%;" /&gt;&lt;/center&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
En esta ventana, rellenaremos un nombre para el dispositivo, el fabricante (cualquiera vale) y el tipo de dispositivo. En mi caso, siempre elijo &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;Speaker&lt;/code&gt; puesto que se trata de un altavoz.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Pulsamos de nuevo el botón &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;Register Model&lt;/code&gt; y avanzamos a la siguiente ventana, donde deberemos pulsar el botón &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;Download OAuth 2.0 credentials&lt;/code&gt;. Al pulsar dicho botón descargaremos un fichero en formato json con las credenciales del dispositivo que acabamos de registrar. Lo guardaremos a buen recaudo porque más tarde lo necesitaremos.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Finalmente, avanzamos y en la siguiente ventana pulsamos el botón &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;Save Traits&lt;/code&gt;.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Con esto queda toda la preparación terminada.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
En el siguiente artículo veremos cómo poner en marcha el asistente, con dos opciones en función de nuestras necesidades.&lt;/div&gt;
&lt;/div&gt;
</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioz4wyjAzHBjNt1NJcGj6czlvKkkBytkepV7flGwDB2g37PCkaBUSeg6oqXwskoujmeuTLqX_6MkqdA4NIeprBfd7BPkSjtCZks6vz25WM-riI1SBTudSh-qWBScf3B53c8niNCaJckDk/s72-c/orangepi_ga.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Acceso mediante SSH sin contraseña</title><link>http://nanolec.blogspot.com/2018/05/acceso-mediante-ssh-sin-contrasena.html</link><category>bash</category><category>linux</category><category>ssh</category><author>noreply@blogger.com (Isidoro Aguilar Baeza)</author><pubDate>Thu, 31 May 2018 22:45:00 +0200</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-155451023305910224.post-7562904200490922394</guid><description>&lt;div style="background-color: rgb(255 , 255 , 255); background: rgb(255 , 255 , 255); color: rgb(142 , 128 , 113); font-family: &amp;quot;hiragino sans gb&amp;quot; , &amp;quot;microsoft yahei&amp;quot; , &amp;quot;stheiti&amp;quot; , &amp;quot;simsun&amp;quot; , &amp;quot;lucida grande&amp;quot; , &amp;quot;lucida sans unicode&amp;quot; , &amp;quot;lucida sans&amp;quot; , &amp;quot;segoe ui&amp;quot; , , &amp;quot;malgun gothic&amp;quot; , &amp;quot;verdana&amp;quot; , &amp;quot;tahoma&amp;quot; , sans-serif; font-family: &amp;quot;lucida grande&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;apple sd gothic neo&amp;quot; , &amp;quot;malgun gothic&amp;quot; , &amp;quot;lucida sans unicode&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;arial&amp;quot; , sans-serif; font-size: 0.9em; font-size: 15px; margin: 0px; overflow-x: hidden; overflow-y: auto; padding: 20px; padding: 20px; padding: 5px 20px 26px;"&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Una de las cosas que más veces he tenido que hacer, dado que soy un forofo de la automatización, es poder entrar desde una máquina a otra de forma automática.&lt;/div&gt;
&lt;center&gt;
&lt;img alt="SSH" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjTJDMZk1fyz9pDCMqNSUWpdiYwywA3dzX3jbNMuDsWn2ljLzGpWuK2ZHHQ_XXTbUP5IYHb3Bij6atcrOnHBRk2gVFXjdxSG7qQ8h27zjLXVjrIE-D9aKV9QKWSmXXO3Tmb4ZxtBgtTsg/s1600/terminal.png" style="max-width: 100%;" /&gt;&lt;/center&gt;
&lt;h2 id="ssh" style="border-bottom-color: rgb(230 , 230 , 230); border-bottom-style: solid; border-bottom-width: 1px; clear: both; color: rgb(92 , 81 , 70); font-size: 1.8em; font-weight: 400; font-weight: bold; letter-spacing: -1px; line-height: 1.7em; margin: 1.275em 0px 0.85em;"&gt;
&lt;a href="https://www.blogger.com/blogger.g?blogID=155451023305910224#ssh" name="ssh" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;/a&gt;SSH&lt;/h2&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
El protocolo &lt;a href="https://es.wikipedia.org/wiki/Secure_Shell" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;SSH&lt;/a&gt; (Secure SHell) nos permite entrar en una máquina remota de forma segura (a diferencia de su hermano mayor, &lt;a href="https://es.wikipedia.org/wiki/Telnet" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;telnet&lt;/a&gt;) mediante una línea de comandos sobre una red no necesariamente segura.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Los datos que se envían y se reciben por medio de este protocolo se encriptan mediante un par de claves pública y privada, de manera que aunque alguien &lt;i&gt;“esnife”&lt;/i&gt; nuestra red, no podrá interpretar qué comandos estamos lanzando ni qué resultados nos devuelve la máquina remota.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Para conectar desde una máquina &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;A&lt;/code&gt; a otra máquina &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;B&lt;/code&gt;, necesitamos en &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;A&lt;/code&gt; un cliente de SSH y en &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;B&lt;/code&gt; un servicio de servidor de SSH. Si nuestros sistemas no traen de serie estas utilidades, deberíamos poder instralarlas mediante el correspondiente sistema de paquetes (&lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;openssh-client&lt;/code&gt; y &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;openssh-server&lt;/code&gt; respectivamente).&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Normalmente, accederemos a la máquina remota &lt;i&gt;de forma interactiva&lt;/i&gt;, tecleando un usuario y una contraseña, de la misma manera que lo haríamos si utilizásemos una consola local en dicha máquina. Para ello, lógicamente, deberemos utilizar las credenciales de un usuario existente.&lt;/div&gt;
&lt;h2 id="automatización" style="border-bottom-color: rgb(230 , 230 , 230); border-bottom-style: solid; border-bottom-width: 1px; clear: both; color: rgb(92 , 81 , 70); font-size: 1.8em; font-weight: 400; font-weight: bold; letter-spacing: -1px; line-height: 1.7em; margin: 1.275em 0px 0.85em;"&gt;
&lt;a href="https://www.blogger.com/blogger.g?blogID=155451023305910224#automatizaci%C3%B3n" name="automatización" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;/a&gt;Automatización&lt;/h2&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
Pero ¿qué pasa si lo que queremos es entrar de forma &lt;i&gt;“no interactiva”&lt;/i&gt; en la máquina remota?. SSH nos obliga siempre a teclear &lt;i&gt;al menos una contraseña&lt;/i&gt;, aunque podemos evitar teclear el &lt;i&gt;usuario&lt;/i&gt; de la siguiente forma:&lt;/div&gt;
&lt;pre style="background: rgb(0 , 43 , 54); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(131 , 148 , 150); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="bash" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;bash&amp;quot;&amp;gt;$ ssh usuario@maquinaremota
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;$ ssh usuario@maquinaremota
&lt;/code&gt;&lt;/pre&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
La única solución viable que tenemos es utilizar claves criptográficas en lugar de usuarios para acceder. El principio es el siguiente:&lt;/div&gt;
&lt;ol style="list-style-type: decimal;"&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;En la máquina A nos creamos una pequeña infraestructura PKI con un par de claves: privada y pública.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Compartimos con la máquina B nuestra clave pública.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Accedemos de A a B encriptando ciertos datos por medio de nuestra clave privada.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;La máquina B intenta desencriptar mediante la clave pública que le proporcionamos inicialmente los datos que acabamos de encriptar por medio de nuestra clave privada.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Si la desencriptación tiene éxito, se nos concede el acceso.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="secuencia" style="clear: both; color: rgb(92 , 81 , 70); font-size: 1.6em; font-weight: 400; font-weight: bold; letter-spacing: -1px; margin: 1.125em 0px 0.75em;"&gt;
&lt;a href="https://www.blogger.com/blogger.g?blogID=155451023305910224#secuencia" name="secuencia" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;/a&gt;Secuencia&lt;/h3&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
Esta forma de acceder mediante ssh está ampliamente documentada literalmente en miles de páginas de internet, pero de lo que se trata es de tener un pequeño “chuletario” rápido para tenerlo aquí para cuando nos haga falta.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
La secuencia de comandos a utilizar, suponiendo que estamos en una máquina &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;A&lt;/code&gt; y queremos acceder a otra máquina remota &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;B&lt;/code&gt;, es la siguiente:&lt;/div&gt;
&lt;ol style="list-style-type: decimal;"&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
&lt;b&gt;Generar una pareja de claves criptográficas&lt;/b&gt;.&lt;br style="clear: both;" /&gt;En la máquina &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;A&lt;/code&gt; generamos un par de claves con el siguiente comando:&lt;/div&gt;
&lt;pre class="bash hljs" style="background: rgb(0 , 43 , 54); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(131 , 148 , 150); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="bash" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;bash&amp;quot;&amp;gt;$ ssh-keygen -t rsa
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;$ ssh-keygen -t rsa
&lt;/code&gt;&lt;/pre&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
El comando tardará un rato en generar el par de claves y nos pedirá dos veces que especifiquemos una contraseña, que dejaremos en blanco (pulsando enter) ambas veces.&lt;br style="clear: both;" /&gt;El parámetro -t especifica el tipo de encriptación que utilizaremos. Pueden ser otros como dsa, ecdsa, etc, pero lo más normal es utilizar &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;rsa&lt;/code&gt;.&lt;br style="clear: both;" /&gt;Este comando nos va a crear en el directorio home del usuario actual (&lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;/home/usuario&lt;/code&gt; en caso de un usuario normal o &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;/root&lt;/code&gt; en caso del usuario superadministrador) un directorio oculto de nombre &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;.ssh&lt;/code&gt; con el siguiente contenido:&lt;/div&gt;
&lt;pre class="bash hljs" style="background: rgb(0 , 43 , 54); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(131 , 148 , 150); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="bash" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;bash&amp;quot;&amp;gt;id_rsa
id_rsa.pub
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;id_rsa
id_rsa.pub
&lt;/code&gt;&lt;/pre&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
El primero es nuestra nueva clave privada, y el segundo la clave pública. Ambas claves criptográficas nos permiten cifrar con una y descifrar con la otra.&lt;/div&gt;
&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
&lt;b&gt;Copiar la clave pública&lt;/b&gt;.&lt;br style="clear: both;" /&gt;Nuestra clave privada permanecerá siempre guardada en nuestra máquina A, pero la pública tenemos que trasladarla a la máquina de destino a la que querremos conectar.&lt;br style="clear: both;" /&gt;Para ello, primero haremos lo siguiente:&lt;/div&gt;
&lt;pre class="bash hljs" style="background: rgb(0 , 43 , 54); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(131 , 148 , 150); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="bash" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;bash&amp;quot;&amp;gt;$ ssh usuarioB@maquinaB
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;$ ssh usuarioB@maquinaB
&lt;/code&gt;&lt;/pre&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Con esto estamos accediendo a la máquina &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;B&lt;/code&gt; con el usuario &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;usuarioB&lt;/code&gt; de forma interactiva. Se nos pedirá la contraseña del &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;usuarioB&lt;/code&gt; y a continuación nos aseguraremos de que tenemos un directorio &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;.ssh&lt;/code&gt; en su home:&lt;/div&gt;
&lt;pre class="bash hljs" style="background: rgb(0 , 43 , 54); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(131 , 148 , 150); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="bash" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;bash&amp;quot;&amp;gt;$ mkdir .ssh
$ chmod 700 .ssh
$ exit
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;$ mkdir .ssh
$ chmod &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;700&lt;/span&gt; .ssh
$ &lt;span class="hljs-built_in" style="color: rgb(38 , 139 , 210);"&gt;exit&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Una vez creado el directorio (hemos vuelto a &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;A&lt;/code&gt; con el &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;exit&lt;/code&gt;), copiamos nuestra clave pública concatenándola con lo que haya en el fichero &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;authorized_keys&lt;/code&gt; de dicho directorio de &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;B&lt;/code&gt;:&lt;/div&gt;
&lt;pre class="bash hljs" style="background: rgb(0 , 43 , 54); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(131 , 148 , 150); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="bash" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;bash&amp;quot;&amp;gt;$ cat id_rsa.pub | ssh usuarioB@maquinaB 'cat &amp;amp;gt;&amp;amp;gt; .ssh/authorized_keys'
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;$ cat id_rsa.pub | ssh usuarioB@maquinaB &lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;'cat &amp;gt;&amp;gt; .ssh/authorized_keys'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Este fichero contendrá todas las claves públicas autorizadas a entrar en esta máquina y este usuario sin contraseña.&lt;/div&gt;
&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
&lt;b&gt;Entrar sin contraseña&lt;/b&gt;.&lt;br style="clear: both;" /&gt;Una vez que hemos hecho lo anterior, ya podemos entrar desde A a B utilizando de nuevo el sigiuiente comando:&lt;/div&gt;
&lt;pre class="bash hljs" style="background: rgb(0 , 43 , 54); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(131 , 148 , 150); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="bash" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;bash&amp;quot;&amp;gt;$ ssh usuarioB@maquinaB
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;$ ssh usuarioB@maquinaB
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
A partir de ahora ya no nos pedirá contraseña.&lt;/div&gt;
&lt;/div&gt;
</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjTJDMZk1fyz9pDCMqNSUWpdiYwywA3dzX3jbNMuDsWn2ljLzGpWuK2ZHHQ_XXTbUP5IYHb3Bij6atcrOnHBRk2gVFXjdxSG7qQ8h27zjLXVjrIE-D9aKV9QKWSmXXO3Tmb4ZxtBgtTsg/s72-c/terminal.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Instalación de HomeAssistant mediante PyEnv</title><link>http://nanolec.blogspot.com/2018/05/instalacion-de-homeassistant-mediante.html</link><category>domótica</category><category>home-assistant</category><category>linux</category><category>orangepi</category><category>python</category><author>noreply@blogger.com (Isidoro Aguilar Baeza)</author><pubDate>Sun, 27 May 2018 21:53:00 +0200</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-155451023305910224.post-7484675598407064672</guid><description>&lt;div style="background-color: rgb(255 , 255 , 255); background: rgb(255 , 255 , 255); color: rgb(142 , 128 , 113); font-family: &amp;quot;hiragino sans gb&amp;quot; , &amp;quot;microsoft yahei&amp;quot; , &amp;quot;stheiti&amp;quot; , &amp;quot;simsun&amp;quot; , &amp;quot;lucida grande&amp;quot; , &amp;quot;lucida sans unicode&amp;quot; , &amp;quot;lucida sans&amp;quot; , &amp;quot;segoe ui&amp;quot; , , &amp;quot;malgun gothic&amp;quot; , &amp;quot;verdana&amp;quot; , &amp;quot;tahoma&amp;quot; , sans-serif; font-family: &amp;quot;lucida grande&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;apple sd gothic neo&amp;quot; , &amp;quot;malgun gothic&amp;quot; , &amp;quot;lucida sans unicode&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;arial&amp;quot; , sans-serif; font-size: 0.9em; font-size: 15px; margin: 0px; overflow-x: hidden; overflow-y: auto; padding: 20px; padding: 20px; padding: 5px 20px 26px;"&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Cuando uno empieza a entrar en el mundo de la domótica “casera” (nunca mejor dicho), no a base de utilizar productos comerciales sino haciéndolo todo uno mismo, lo primero que piensa es en la &lt;a href="http://www.instructables.com/howto/raspberry+pi+home/" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;b&gt;Raspberry Pi&lt;/b&gt;&lt;/a&gt;.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Yo, sin embargo, en mi afán de &lt;i&gt;gastar lo mínimo posible&lt;/i&gt; comprando productos en China, decidí en un principio utilizar la &lt;b&gt;Orange Pi Zero&lt;/b&gt; como mi controlador principal para &lt;b&gt;HomeAssistant&lt;/b&gt;, como vimos en &lt;a href="http://nanolec.blogspot.com.es/2017/07/instalar-homeassistant-en-orange-pi-zero.html" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;un artículo anterior&lt;/a&gt;.&lt;/div&gt;
&lt;h2 id="problemática" style="border-bottom-color: rgb(230 , 230 , 230); border-bottom-style: solid; border-bottom-width: 1px; clear: both; color: rgb(92 , 81 , 70); font-size: 1.8em; font-weight: 400; font-weight: bold; letter-spacing: -1px; line-height: 1.7em; margin: 1.275em 0px 0.85em;"&gt;
&lt;a href="https://www.blogger.com/blogger.g?blogID=155451023305910224#problem%C3%A1tica" name="problemática" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;/a&gt;Problemática&lt;/h2&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
En realidad, uno puede instalar HomeAssistant en cualquier ordenador o controlador: un equipo Mac, Windows, Linux, un core I7 de última generación o un ARM con 256 MB de RAM, siempre y cuando sea posible instalarle Python.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Sin embargo, apartarse del estándar utilizado por la mayoría tiene su penalización.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Si tienes una Raspberry PI, basta con acudir a la &lt;a href="https://www.home-assistant.io/getting-started/" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;página de HomeAssistant&lt;/a&gt; y bajarte una distribución de Linux especial personalizada (hass.io o hassbian) y grabarla en tu tarjeta SD para salir andando. Ambas distribuciones están pensadas para que el usuario trabaje lo mínimo, sea fácil actualizar, esté todo optimizado, etc.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Pero ¿qué pasa cuando tu distribución, que no es la estándar, se queda anticuada y los requerimientos de versiones de HomeAssistant van subiendo y no tienes posibilidad de actualizar?. De todos es sabido que las distribuciones de Linux tienen una gran ventaja que son los repositorios de software (debian, ubuntu, rpm, etc) desde los que el usuario siempre puede instalarse el software sin tener que buscar en ningún sitio más. Esta gran ventaja sin embargo se convierte en un gran inconveniente cuando los paquetes del repositorio se quedan antiguos y no se pueden actualizar más.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Tal es el caso de la Orange Pi Zero, para la cual disponemos de varias versiones (&lt;a href="http://www.orangepi.org/downloadresources/" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;aquí&lt;/a&gt; y &lt;a href="https://www.armbian.com/orange-pi-zero/" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;aquí&lt;/a&gt;) de Linux pero todas ellas basadas en un repositorio de Debian que no es el más nuevo.&lt;/div&gt;
&lt;center&gt;
&lt;img alt="Python" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxklxovwTFOhhf0J9UwXvToQYJGixHgww361DB0y8aN39mqvLJzOqzuv2viAJNN21YrqKoHpbGIpPeoYGfO80_ljarUc2PU2rCkaXtytsgLQQaYnYMe_60xv3cPvB3g7M5J_C8qwpENio/s1600/python.jpg" style="max-width: 100%;" /&gt;&lt;/center&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Esto es un problema cuando los requerimientos de HomeAssistant subieron por ejemplo &lt;a href="https://www.home-assistant.io/blog/2017/10/06/deprecating-python-3.4-support/" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;de Python 3.4 a Python 3.5.3&lt;/a&gt;. Este cambio que en principio puede parecer mínimo hace que por ejemplo en la versión de Ubuntu 16.04.04 LTS que es la que yo uso no pueda instalar versiones recientes de HomeAssistant puesto que la versión máxima de Python que hay en los repositorios es la 3.5.2. Lo mismo nos pasaría si tuviésemos un Debian Jessie que no podamos actualizar.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Por tanto, no podemos utilizar versiones “oficiales” de Python. ¿Qué soluciones nos quedan?&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
A bote pronto, se me ocurren tres:&lt;/div&gt;
&lt;ul&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Utilizar un repositorio &lt;b&gt;PPA&lt;/b&gt;.&lt;br style="clear: both;" /&gt;He consultado varios y o bien no contienen software para procesadores ARM o bien no funcionan con mi distribución.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Compilar Python 3.5.&lt;i&gt; desde &lt;i&gt;*código fuente&lt;/i&gt;&lt;/i&gt;.&lt;br style="clear: both;" /&gt;Es una posibilidad, pero bastante engorrosa.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Utilizar &lt;b&gt;PyEnv&lt;/b&gt;.&lt;br style="clear: both;" /&gt;Este entorno nos permite tener múltiples instalaciones de Python en paralelo sin interferir con los paquetes “oficiales” del sistema.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Por tanto, elegiremos la tercera opción por ser la menos “invasiva” para no liarla con el sistema.&lt;/div&gt;
&lt;h2 id="guía-de-instalación" style="border-bottom-color: rgb(230 , 230 , 230); border-bottom-style: solid; border-bottom-width: 1px; clear: both; color: rgb(92 , 81 , 70); font-size: 1.8em; font-weight: 400; font-weight: bold; letter-spacing: -1px; line-height: 1.7em; margin: 1.275em 0px 0.85em;"&gt;
&lt;a href="https://www.blogger.com/blogger.g?blogID=155451023305910224#gu%C3%ADa-de-instalaci%C3%B3n" name="guía-de-instalación" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;/a&gt;Guía de instalación&lt;/h2&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
Esta guía está pensada para instalar la última versión de HomeAssistant desde cero, en un sistema (Debian &lt;i&gt;Jessie&lt;/i&gt;, Ubuntu &lt;i&gt;16.04&lt;/i&gt;, etc) que no soporte de forma nativa la última versión de Python. En caso de tener ya un sistema con HomeAssistant instalado, habría que saltarse algunos pasos.&lt;/div&gt;
&lt;h3 id="crear-el-usuario-homeassistant" style="clear: both; color: rgb(92 , 81 , 70); font-size: 1.6em; font-weight: 400; font-weight: bold; letter-spacing: -1px; margin: 1.125em 0px 0.75em;"&gt;
&lt;a href="https://www.blogger.com/blogger.g?blogID=155451023305910224#crear-el-usuario-homeassistant" name="crear-el-usuario-homeassistant" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;/a&gt;Crear el usuario homeassistant&lt;/h3&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
Lo primero que necesitaremos (si no lo tenemos ya) es crear un usuario específico para ejecutar HomeAssistant. En los ejemplos de este artículo lo denominamos &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;homeassistant&lt;/code&gt;, pero el nombre es lo de menos.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Para ello, seguiremos los siguientes pasos:&lt;/div&gt;
&lt;ol style="list-style-type: decimal;"&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Entramos como &lt;b&gt;root&lt;/b&gt; en el sistema y creamos un nuevo usuario:&lt;/div&gt;
&lt;pre class="bash hljs" style="background: rgb(35 , 36 , 31); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(248 , 248 , 242); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="bash" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;bash&amp;quot;&amp;gt;# adduser homeassistant
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;&lt;span class="hljs-comment" style="color: rgb(117 , 113 , 94);"&gt;# adduser homeassistant&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Lo añadimos al grupo sudo:&lt;/div&gt;
&lt;pre class="bash hljs" style="background: rgb(35 , 36 , 31); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(248 , 248 , 242); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="bash" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;bash&amp;quot;&amp;gt;# apt-get install sudo
# usermod -aG sudo homeassistant
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;&lt;span class="hljs-comment" style="color: rgb(117 , 113 , 94);"&gt;# apt-get install sudo&lt;/span&gt;
&lt;span class="hljs-comment" style="color: rgb(117 , 113 , 94);"&gt;# usermod -aG sudo homeassistant&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="instalar-pyenv" style="clear: both; color: rgb(92 , 81 , 70); font-size: 1.6em; font-weight: 400; font-weight: bold; letter-spacing: -1px; margin: 1.125em 0px 0.75em;"&gt;
&lt;a href="https://www.blogger.com/blogger.g?blogID=155451023305910224#instalar-pyenv" name="instalar-pyenv" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;/a&gt;Instalar PyEnv&lt;/h3&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
PyEnv nos permite instalar (compilándola) cualquier versión de python de forma no intrusiva en el sistema,&lt;br /&gt;
y nos permite especificar con qué versión queremos trabajar de forma global para todo el sistema o para&lt;br /&gt;
una aplicación concreta.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Para instalarlo seguiremos los siguientes pasos:&lt;/div&gt;
&lt;ol style="list-style-type: decimal;"&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Iniciamos sesión con el nuevo usuario &lt;b&gt;homeassistant&lt;/b&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Descargamos &lt;b&gt;pyenv&lt;/b&gt; desde su proyecto en &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;GitHub&lt;/code&gt;, creando un directorio &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;.pyenv&lt;/code&gt; en el home del usuario:&lt;/div&gt;
&lt;pre class="bash hljs" style="background: rgb(35 , 36 , 31); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(248 , 248 , 242); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="bash" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;bash&amp;quot;&amp;gt;$ git clone https://github.com/pyenv/pyenv.git .pyenv
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;$ git &lt;span class="hljs-built_in" style="color: rgb(230 , 219 , 116);"&gt;clone&lt;/span&gt; https://github.com/pyenv/pyenv.git .pyenv
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Lo hacemos accesible desde el login, añadiendo al fichero &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;.bashrc&lt;/code&gt; las siguientes líneas:&lt;/div&gt;
&lt;pre class="bash hljs" style="background: rgb(35 , 36 , 31); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(248 , 248 , 242); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="bash" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;bash&amp;quot;&amp;gt;export PYENV_ROOT=&amp;quot;$HOME/.pyenv&amp;quot;
export PATH=&amp;quot;$PYENV_ROOT/bin:$PATH&amp;quot;
if command -v pyenv 1&amp;amp;gt;/dev/null 2&amp;amp;gt;&amp;amp;amp;1; then
 eval &amp;quot;$(pyenv init -)&amp;quot;
fi
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;&lt;span class="hljs-built_in" style="color: rgb(230 , 219 , 116);"&gt;export&lt;/span&gt; PYENV_ROOT=&lt;span class="hljs-string" style="color: rgb(230 , 219 , 116);"&gt;"&lt;span class="hljs-variable" style="color: rgb(248 , 248 , 242);"&gt;$HOME&lt;/span&gt;/.pyenv"&lt;/span&gt;
&lt;span class="hljs-built_in" style="color: rgb(230 , 219 , 116);"&gt;export&lt;/span&gt; PATH=&lt;span class="hljs-string" style="color: rgb(230 , 219 , 116);"&gt;"&lt;span class="hljs-variable" style="color: rgb(248 , 248 , 242);"&gt;$PYENV_ROOT&lt;/span&gt;/bin:&lt;span class="hljs-variable" style="color: rgb(248 , 248 , 242);"&gt;$PATH&lt;/span&gt;"&lt;/span&gt;
&lt;span class="hljs-keyword" style="color: rgb(249 , 38 , 114);"&gt;if&lt;/span&gt; &lt;span class="hljs-built_in" style="color: rgb(230 , 219 , 116);"&gt;command&lt;/span&gt; -v pyenv &lt;span class="hljs-number" style="color: rgb(174 , 129 , 255);"&gt;1&lt;/span&gt;&amp;gt;/dev/null &lt;span class="hljs-number" style="color: rgb(174 , 129 , 255);"&gt;2&lt;/span&gt;&amp;gt;&amp;amp;&lt;span class="hljs-number" style="color: rgb(174 , 129 , 255);"&gt;1&lt;/span&gt;; &lt;span class="hljs-keyword" style="color: rgb(249 , 38 , 114);"&gt;then&lt;/span&gt;
 &lt;span class="hljs-built_in" style="color: rgb(230 , 219 , 116);"&gt;eval&lt;/span&gt; &lt;span class="hljs-string" style="color: rgb(230 , 219 , 116);"&gt;"&lt;span class="hljs-variable" style="color: rgb(248 , 248 , 242);"&gt;$(pyenv init -)&lt;/span&gt;"&lt;/span&gt;
&lt;span class="hljs-keyword" style="color: rgb(249 , 38 , 114);"&gt;fi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Salimos del shell (&lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;logout&lt;/code&gt; o &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;exit&lt;/code&gt;) e iniciamos sesión de nuevo con el usuario &lt;b&gt;homeassistant&lt;/b&gt; para que se ejecuten los cambios.&lt;/div&gt;
&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Instalamos una serie &lt;i&gt;dependencias&lt;/i&gt; necesarias. HomeAssistant requiere en principio compilar python con soporte para &lt;b&gt;SQLite3&lt;/b&gt;:&lt;/div&gt;
&lt;pre class="bash hljs" style="background: rgb(35 , 36 , 31); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(248 , 248 , 242); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="bash" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;bash&amp;quot;&amp;gt;$ sudo apt-get install libsqlite3-dev
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;$ sudo apt-get install libsqlite3-dev
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Instalamos la versión requerida de Python. Lo que hace PyEnv es descargarse los fuentes de la versión requerida de Python y compilarla de forma transparente para el usuario. En este ejemplo instalaremos la versión &lt;b&gt;3.5.5&lt;/b&gt;:&lt;/div&gt;
&lt;pre class="bash hljs" style="background: rgb(35 , 36 , 31); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(248 , 248 , 242); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="bash" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;bash&amp;quot;&amp;gt;$ pyenv install 3.5.5
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;$ pyenv install &lt;span class="hljs-number" style="color: rgb(174 , 129 , 255);"&gt;3.5&lt;/span&gt;.&lt;span class="hljs-number" style="color: rgb(174 , 129 , 255);"&gt;5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Establecemos la versión global de python del sistema&lt;br /&gt;
Para ver qué versión de python utiliza el sistema, utilizaremos este comando:&lt;/div&gt;
&lt;pre class="bash hljs" style="background: rgb(35 , 36 , 31); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(248 , 248 , 242); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="bash" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;bash&amp;quot;&amp;gt;$ pyenv global
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;$ pyenv global
&lt;/code&gt;&lt;/pre&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Para ver qué versiones hay instaladas, utilizaremos este otro:&lt;/div&gt;
&lt;pre class="bash hljs" style="background: rgb(35 , 36 , 31); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(248 , 248 , 242); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="bash" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;bash&amp;quot;&amp;gt;$ pyenv versions
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;$ pyenv versions
&lt;/code&gt;&lt;/pre&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Para establecer la versión 3.5.5 como global, utilizaremos este:&lt;/div&gt;
&lt;pre class="bash hljs" style="background: rgb(35 , 36 , 31); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(248 , 248 , 242); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="bash" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;bash&amp;quot;&amp;gt;$pyenv global 3.5.5
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;&lt;span class="hljs-variable" style="color: rgb(248 , 248 , 242);"&gt;$pyenv&lt;/span&gt; global &lt;span class="hljs-number" style="color: rgb(174 , 129 , 255);"&gt;3.5&lt;/span&gt;.&lt;span class="hljs-number" style="color: rgb(174 , 129 , 255);"&gt;5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="configurar-entorno-virtual" style="clear: both; color: rgb(92 , 81 , 70); font-size: 1.6em; font-weight: 400; font-weight: bold; letter-spacing: -1px; margin: 1.125em 0px 0.75em;"&gt;
&lt;a href="https://www.blogger.com/blogger.g?blogID=155451023305910224#configurar-entorno-virtual" name="configurar-entorno-virtual" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;/a&gt;Configurar entorno virtual&lt;/h3&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
Una vez que tenemos &lt;i&gt;nuevo python en la oficina&lt;/i&gt;, lo más apropiado sería crearnos un entorno virtual para la instalación y ejecución de HomeAssistant.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
El entorno virtual nos permite independizar las librerías y ejecutables asociadas a un programa del resto del entorno de python del sistema. Una especie de “caja negra” en la que entraremos cada vez que queramos ejecutar la aplicación.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Para este cometido, existe un plugin para PyEnv que se denomina &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;virtualenv&lt;/code&gt;:&lt;/div&gt;
&lt;ol style="list-style-type: decimal;"&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Instalamos el plugin virtualenv:&lt;/div&gt;
&lt;pre class="bash hljs" style="background: rgb(35 , 36 , 31); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(248 , 248 , 242); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="bash" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;bash&amp;quot;&amp;gt;$ git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;$ git &lt;span class="hljs-built_in" style="color: rgb(230 , 219 , 116);"&gt;clone&lt;/span&gt; https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Creamos un entorno virtual de python para HomeAssistant:&lt;/div&gt;
&lt;pre class="bash hljs" style="background: rgb(35 , 36 , 31); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(248 , 248 , 242); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="bash" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;bash&amp;quot;&amp;gt;$ pyenv virtualenv 3.5.5 home-assistant
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;$ pyenv virtualenv &lt;span class="hljs-number" style="color: rgb(174 , 129 , 255);"&gt;3.5&lt;/span&gt;.&lt;span class="hljs-number" style="color: rgb(174 , 129 , 255);"&gt;5&lt;/span&gt; home-assistant
&lt;/code&gt;&lt;/pre&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
El entorno virtual residirá en el directorio &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;/home/homeassistant/.pyenv/versions/home-assistant&lt;/code&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Activamos el entorno recién creado:&lt;/div&gt;
&lt;pre class="bash hljs" style="background: rgb(35 , 36 , 31); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(248 , 248 , 242); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="bash" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;bash&amp;quot;&amp;gt;$ pyenv activate home-assistant
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;$ pyenv activate home-assistant
&lt;/code&gt;&lt;/pre&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Tras hacer esto, en el prompt se nos indica el entorno en el que estamos trabajando:&lt;/div&gt;
&lt;pre class="bash hljs" style="background: rgb(35 , 36 , 31); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(248 , 248 , 242); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="bash" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;bash&amp;quot;&amp;gt;(home-assistant) homeassistant@mi-servidor:~$
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;(home-assistant) homeassistant@mi-servidor:~$
&lt;/code&gt;&lt;/pre&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Todos los comandos relativos a python que se ejecuten a partir de ahora sólo afectarán al entorno activo.&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="instalar-homeassistant" style="clear: both; color: rgb(92 , 81 , 70); font-size: 1.6em; font-weight: 400; font-weight: bold; letter-spacing: -1px; margin: 1.125em 0px 0.75em;"&gt;
&lt;a href="https://www.blogger.com/blogger.g?blogID=155451023305910224#instalar-homeassistant" name="instalar-homeassistant" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;/a&gt;Instalar HomeAssistant&lt;/h3&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
Para instalar HomeAssistant en el entorno virtual de Python activo hacemos lo siguiente:&lt;/div&gt;
&lt;ol style="list-style-type: decimal;"&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Instalar paquetes adicionales:&lt;/div&gt;
Serán necesarios los siguientes paquetes antes de nada:&lt;br /&gt;&lt;br /&gt;&lt;pre class="bash hljs" style="background: rgb(35 , 36 , 31); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(248 , 248 , 242); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="bash" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;bash&amp;quot;&amp;gt;$ pip3 install mysqlclient
$ pip3 install pyserial
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;$ sudo apt-get install libssl-dev openssl libmariadb-dev
$ sudo apt-get install libncursesw5-dev libgdbm-devlibc6-dev
$ sudo apt-get install libffi-dev zlib1g-dev bzip2 libbz2-dev libreadline-de&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Instalar librerías necesarias de forma manual. Estas dos librerías nos harán falta para ejecutar HomeAssistant:&lt;/div&gt;
&lt;pre class="bash hljs" style="background: rgb(35 , 36 , 31); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(248 , 248 , 242); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="bash" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;bash&amp;quot;&amp;gt;$ pip3 install mysqlclient
$ pip3 install pyserial
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;$ pip3 install mysqlclient
$ pip3 install pyserial
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Instalar el paquete:&lt;/div&gt;
&lt;pre class="bash hljs" style="background: rgb(35 , 36 , 31); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(248 , 248 , 242); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="bash" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;bash&amp;quot;&amp;gt;$ pip3 install homeassistant
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;$ pip3 install homeassistant
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Instalar dependencias automáticas:&lt;br /&gt;
Una vez instalado el paquete, lanzaremos el ejecutable por primera vez para que se autoinstalen las dependencias de python adicionales necesarias. Este proceso puede tardar un rato y nos presenta el log por la salida estandar:&lt;/div&gt;
&lt;pre class="bash hljs" style="background: rgb(35 , 36 , 31); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(248 , 248 , 242); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="bash" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;bash&amp;quot;&amp;gt;$ hass
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;$ hass
&lt;/code&gt;&lt;/pre&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Una vez que el proceso ha acabado, podemos probar que todo ha ido bien accediendo mediante un navegador a la siguiente URL:&lt;/div&gt;
&lt;center&gt;
&lt;a href="http://[DIR_SERVIDOR]:8123" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;http://[DIR_SERVIDOR]:8123&lt;/a&gt;&lt;/center&gt;
&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Instalar el servicio. Para facilitarnos la vida, vamos a crearnos un servicio para poder iniciar y detener a nuestra voluntad el HomeAssistant. Para ello:&lt;/div&gt;
&lt;ol style="list-style-type: decimal;"&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Copiamos el siguiente texto en el fichero &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;/etc/init.d/hass&lt;/code&gt;:&lt;/div&gt;
&lt;pre style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); overflow: auto; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="sh" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;sh&amp;quot;&amp;gt;#!/bin/sh
### BEGIN INIT INFO
# Provides:          hass
# Required-Start:    $local_fs $network $named $time $syslog
# Required-Stop:     $local_fs $network $named $time $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Description:       Home\ Assistant
### END INIT INFO

# /etc/init.d Service Script for Home Assistant

RUN_AS=&amp;quot;homeassistant&amp;quot;
export PYENV_ROOT=&amp;quot;/home/$RUN_AS/.pyenv&amp;quot;
HASS_ROOT=&amp;quot;$PYENV_ROOT/versions/home-assistant&amp;quot;
PRE_EXEC=&amp;quot;$HASS_ROOT/bin/python3&amp;quot;
HASS_BIN=&amp;quot;$HASS_ROOT/bin/hass&amp;quot;
PID_DIR=&amp;quot;/tmp&amp;quot;
PID_FILE=&amp;quot;$PID_DIR/hass.pid&amp;quot;
CONFIG_DIR=&amp;quot;/var/lib/home-assistant&amp;quot;
LOG_DIR=&amp;quot;/var/log&amp;quot;
LOG_FILE=&amp;quot;$LOG_DIR/hass.log&amp;quot;
FLAGS=&amp;quot;-v --config $CONFIG_DIR --pid-file $PID_FILE --log-file $LOG_FILE --daemon&amp;quot;

start() {
if [ -f $PID_FILE ] &amp;amp;amp;&amp;amp;amp; kill -0 $(cat $PID_FILE) 2&amp;amp;gt; /dev/null; then
  echo 'Service already running' &amp;amp;gt;&amp;amp;amp;2
  return 1
fi
echo -n 'Starting service' &amp;amp;gt;&amp;amp;amp;2
local CMD=&amp;quot;$PRE_EXEC $HASS_BIN $FLAGS;&amp;quot;
su -s /bin/bash --preserve-environment -c &amp;quot;$CMD&amp;quot; $RUN_AS
if [ $? -ne 0 ]; then
  echo &amp;quot;Failed&amp;quot; &amp;amp;gt;&amp;amp;amp;2
else
  echo &amp;quot;Done&amp;quot; &amp;amp;gt;&amp;amp;amp;2
fi
}

stop() {
if [ ! -f &amp;quot;$PID_FILE&amp;quot; ] || ! kill -0 $(cat &amp;quot;$PID_FILE&amp;quot;) 2&amp;amp;gt; /dev/null; then
  echo 'Service not running' &amp;amp;gt;&amp;amp;amp;2
  return 1
fi
echo -n 'Stopping service' &amp;amp;gt;&amp;amp;amp;2
kill $(cat &amp;quot;$PID_FILE&amp;quot;)
while ps -p $(cat &amp;quot;$PID_FILE&amp;quot;) &amp;amp;gt; /dev/null 2&amp;amp;gt;&amp;amp;amp;1; do sleep 1;done;
rm -f $PID_FILE
echo 'Done' &amp;amp;gt;&amp;amp;amp;2
}

install() {
echo &amp;quot;Installing Home Assistant Daemon (hass)&amp;quot;
update-rc.d hass defaults
mkdir -p $CONFIG_DIR
chown $RUN_AS $CONFIG_DIR
mkdir -p $LOG_DIR
chown $RUN_AS $LOG_DIR
}

uninstall() {
echo &amp;quot;Are you really sure you want to uninstall this service? The INIT script will&amp;quot;
echo -n &amp;quot;also be deleted! That cannot be undone. [yes|No] &amp;quot;
local SURE
read SURE
if [ &amp;quot;$SURE&amp;quot; = &amp;quot;yes&amp;quot; ]; then
  stop
  echo &amp;quot;Notice: The config directory has not been removed&amp;quot;
  echo $CONFIG_DIR
  echo &amp;quot;Notice: The log directory has not been removed&amp;quot;
  echo $LOG_DIR
  update-rc.d -f hass remove
  rm -fv &amp;quot;$0&amp;quot;
  echo &amp;quot;Home Assistant Daemon has been removed. Home Assistant is still installed.&amp;quot;
fi
}

case &amp;quot;$1&amp;quot; in
start)
  start
  ;;
stop)
  stop
  ;;
install)
  install
  ;;
uninstall)
  uninstall
  ;;
restart)
  stop
  start
  ;;
*)
  echo &amp;quot;Usage: $0 {start|stop|restart|install|uninstall}&amp;quot;
esac
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;#!/bin/sh
### BEGIN INIT INFO
# Provides:          hass
# Required-Start:    $local_fs $network $named $time $syslog
# Required-Stop:     $local_fs $network $named $time $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Description:       Home\ Assistant
### END INIT INFO

# /etc/init.d Service Script for Home Assistant

RUN_AS="homeassistant"
export PYENV_ROOT="/home/$RUN_AS/.pyenv"
HASS_ROOT="$PYENV_ROOT/versions/home-assistant"
PRE_EXEC="$HASS_ROOT/bin/python3"
HASS_BIN="$HASS_ROOT/bin/hass"
PID_DIR="/tmp"
PID_FILE="$PID_DIR/hass.pid"
CONFIG_DIR="/var/lib/home-assistant"
LOG_DIR="/var/log"
LOG_FILE="$LOG_DIR/hass.log"
FLAGS="-v --config $CONFIG_DIR --pid-file $PID_FILE --log-file $LOG_FILE --daemon"

start() {
if [ -f $PID_FILE ] &amp;amp;&amp;amp; kill -0 $(cat $PID_FILE) 2&amp;gt; /dev/null; then
  echo 'Service already running' &amp;gt;&amp;amp;2
  return 1
fi
echo -n 'Starting service' &amp;gt;&amp;amp;2
local CMD="$PRE_EXEC $HASS_BIN $FLAGS;"
su -s /bin/bash --preserve-environment -c "$CMD" $RUN_AS
if [ $? -ne 0 ]; then
  echo "Failed" &amp;gt;&amp;amp;2
else
  echo "Done" &amp;gt;&amp;amp;2
fi
}

stop() {
if [ ! -f "$PID_FILE" ] || ! kill -0 $(cat "$PID_FILE") 2&amp;gt; /dev/null; then
  echo 'Service not running' &amp;gt;&amp;amp;2
  return 1
fi
echo -n 'Stopping service' &amp;gt;&amp;amp;2
kill $(cat "$PID_FILE")
while ps -p $(cat "$PID_FILE") &amp;gt; /dev/null 2&amp;gt;&amp;amp;1; do sleep 1;done;
rm -f $PID_FILE
echo 'Done' &amp;gt;&amp;amp;2
}

install() {
echo "Installing Home Assistant Daemon (hass)"
update-rc.d hass defaults
mkdir -p $CONFIG_DIR
chown $RUN_AS $CONFIG_DIR
mkdir -p $LOG_DIR
chown $RUN_AS $LOG_DIR
}

uninstall() {
echo "Are you really sure you want to uninstall this service? The INIT script will"
echo -n "also be deleted! That cannot be undone. [yes|No] "
local SURE
read SURE
if [ "$SURE" = "yes" ]; then
  stop
  echo "Notice: The config directory has not been removed"
  echo $CONFIG_DIR
  echo "Notice: The log directory has not been removed"
  echo $LOG_DIR
  update-rc.d -f hass remove
  rm -fv "$0"
  echo "Home Assistant Daemon has been removed. Home Assistant is still installed."
fi
}

case "$1" in
start)
  start
  ;;
stop)
  stop
  ;;
install)
  install
  ;;
uninstall)
  uninstall
  ;;
restart)
  stop
  start
  ;;
*)
  echo "Usage: $0 {start|stop|restart|install|uninstall}"
esac
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Le damos permisos de ejecución:&lt;/div&gt;
&lt;pre class="bash hljs" style="background: rgb(35 , 36 , 31); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(248 , 248 , 242); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="bash" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;bash&amp;quot;&amp;gt;$ sudo chmod +x /etc/init.d/hass
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;$ sudo chmod +x /etc/init.d/hass
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Iniciamos el servicio, inicializando previamente el fichero de log:&lt;/div&gt;
&lt;pre class="bash hljs" style="background: rgb(35 , 36 , 31); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(248 , 248 , 242); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="bash" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;bash&amp;quot;&amp;gt;$ sudo touch /var/log/hass.log
$ sudo chown homeassistant:homeassistant /var/log/hass.log
$ sudo service hass start
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;$ sudo touch /var/&lt;span class="hljs-built_in" style="color: rgb(230 , 219 , 116);"&gt;log&lt;/span&gt;/hass.log
$ sudo chown homeassistant:homeassistant /var/&lt;span class="hljs-built_in" style="color: rgb(230 , 219 , 116);"&gt;log&lt;/span&gt;/hass.log
$ sudo service hass start
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Una vez probado que funciona correctamente (ver el log en &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;/var/log/hass.log&lt;/code&gt;), activamos el arranque automático del servicio, bien mediante la herramienta &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;rcconf&lt;/code&gt; o bien mediante el propio servicio:&lt;pre class="bash hljs" style="background: rgb(35 , 36 , 31); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(248 , 248 , 242); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="bash" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;bash&amp;quot;&amp;gt;$ sudo service hass install
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;$ sudo service hass install
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="configuración" style="clear: both; color: rgb(92 , 81 , 70); font-size: 1.6em; font-weight: 400; font-weight: bold; letter-spacing: -1px; margin: 1.125em 0px 0.75em;"&gt;
&lt;a href="https://www.blogger.com/blogger.g?blogID=155451023305910224#configuraci%C3%B3n" name="configuración" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;/a&gt;Configuración&lt;/h3&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
La configuración y el directorio de trabajo configurados por defecto están en la ruta:&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
&lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;/home/homeassistant/.homeassistant&lt;/code&gt;&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
El fichero de configuración principal se denomina &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;configuration.yaml&lt;/code&gt;.&lt;/div&gt;
&lt;h3 id="actualizaciones" style="clear: both; color: rgb(92 , 81 , 70); font-size: 1.6em; font-weight: 400; font-weight: bold; letter-spacing: -1px; margin: 1.125em 0px 0.75em;"&gt;
&lt;a href="https://www.blogger.com/blogger.g?blogID=155451023305910224#actualizaciones" name="actualizaciones" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;/a&gt;Actualizaciones&lt;/h3&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
Con este pequeño tutorial hemos instalado la última versión de HomeAssistant en nuestro sistema. En caso de que aparezcan nuevas versiones, siempre y cuando no aumente la versión requerida de Python, podremos actualizar nuestra instalación siempre de esta manera:&lt;/div&gt;
&lt;ol style="list-style-type: decimal;"&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Iniciamos sesión con el usuario &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;homeassistant&lt;/code&gt;.&lt;/div&gt;
&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Activamos el entorno virtual de python:&lt;/div&gt;
&lt;pre class="bash hljs" style="background: rgb(35 , 36 , 31); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(248 , 248 , 242); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="bash" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;bash&amp;quot;&amp;gt;$ pyenv activate home-assistant
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;$ pyenv activate home-assistant
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Actualizamos a la última versión, deteniendo previamente el servicio e iniciándolo después:&lt;/div&gt;
&lt;pre class="bash hljs" style="background: rgb(35 , 36 , 31); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(248 , 248 , 242); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="bash" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;bash&amp;quot;&amp;gt;$ sudo service hass stop
$ pip3 install --upgrade homeassistant
$ sudo service hass start
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;$ sudo service hass stop
$ pip3 install --upgrade homeassistant
$ sudo service hass start
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxklxovwTFOhhf0J9UwXvToQYJGixHgww361DB0y8aN39mqvLJzOqzuv2viAJNN21YrqKoHpbGIpPeoYGfO80_ljarUc2PU2rCkaXtytsgLQQaYnYMe_60xv3cPvB3g7M5J_C8qwpENio/s72-c/python.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Dispositivos SonOff en HomeAssistant</title><link>http://nanolec.blogspot.com/2017/08/dispositivos-sonoff-en-homeassistant.html</link><category>componentes</category><category>corriente</category><category>domótica</category><category>electricidad</category><category>esp8266</category><category>home-assistant</category><category>temperatura</category><author>noreply@blogger.com (Isidoro Aguilar Baeza)</author><pubDate>Tue, 29 Aug 2017 18:29:00 +0200</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-155451023305910224.post-882605794240708465</guid><description>&lt;div style="background-color: rgb(255 , 255 , 255); background: rgb(255 , 255 , 255); color: rgb(142 , 128 , 113); font-family: &amp;quot;hiragino sans gb&amp;quot; , &amp;quot;microsoft yahei&amp;quot; , &amp;quot;stheiti&amp;quot; , &amp;quot;simsun&amp;quot; , &amp;quot;lucida grande&amp;quot; , &amp;quot;lucida sans unicode&amp;quot; , &amp;quot;lucida sans&amp;quot; , &amp;quot;segoe ui&amp;quot; , , &amp;quot;malgun gothic&amp;quot; , &amp;quot;verdana&amp;quot; , &amp;quot;tahoma&amp;quot; , sans-serif; font-family: &amp;quot;lucida grande&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;apple sd gothic neo&amp;quot; , &amp;quot;malgun gothic&amp;quot; , &amp;quot;lucida sans unicode&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;arial&amp;quot; , sans-serif; font-size: 0.9em; font-size: 15px; margin: 0px; overflow-x: hidden; overflow-y: auto; padding: 20px; padding: 20px; padding: 5px 20px 26px;"&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
En este artículo veremos cómo podemos integrar algunos dispositivos SonOff en nuestro HomeAssistant.&lt;/div&gt;
&lt;h2 id="dispositivos-sonoff" style="border-bottom-color: rgb(230 , 230 , 230); border-bottom-style: solid; border-bottom-width: 1px; clear: both; color: rgb(92 , 81 , 70); font-size: 1.8em; font-weight: 400; font-weight: bold; letter-spacing: -1px; line-height: 1.7em; margin: 1.275em 0px 0.85em;"&gt;
&lt;a href="https://www.blogger.com/blogger.g?blogID=155451023305910224#dispositivos-sonoff" name="dispositivos-sonoff" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;/a&gt;Dispositivos SonOff&lt;/h2&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
SonOff es una serie de &lt;i&gt;dispositivos inteligentes&lt;/i&gt; fabricados por el fabricante chino &lt;a href="https://www.itead.cc/" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;Itead&lt;/a&gt; que nos permiten de una manera fácil y económica montar un sistema de domótica en nuestra casa.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Casi todos los componentes de esta serie están basados en el chip &lt;a href="http://nanolec.blogspot.com.es/2016/10/componentes-dispositivo-wifi-esp8266.html" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;ESP8266&lt;/a&gt;(EX) y algunos de ellos en el más evolucionado ESP8265, y aunque Itead proporciona una aplicación móvil y una &lt;i&gt;nube&lt;/i&gt; propia para la gestión de sus dispositivos, se da la circunstancia de que son dispositivos fácilmente modificables para adaptarlos a nuestras necesidades particulares.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
&lt;b&gt;¡ATENCIÓN! El simple hecho de cortar el sello de papel que traen los dispositivos para abrir su carcasa hace que invalidemos su garantía. Lógicamente, si cambiamos su firmware ya no podremos obtener ningún soporte del fabricante ni del vendedor.&lt;/b&gt;&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Los componentes más conocidos y más baratos son los siguientes:&lt;/div&gt;
&lt;h3 id="sonoff-basic" style="clear: both; color: rgb(92 , 81 , 70); font-size: 1.6em; font-weight: 400; font-weight: bold; letter-spacing: -1px; margin: 1.125em 0px 0.75em;"&gt;
&lt;a href="https://www.blogger.com/blogger.g?blogID=155451023305910224#sonoff-basic" name="sonoff-basic" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;/a&gt;SonOff Basic&lt;/h3&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
&lt;a href="https://www.itead.cc/smart-home/sonoff-wifi-wireless-switch.html" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;Este dispositivo&lt;/a&gt; es el más básico y barato de la serie. Se trata de un interruptor Wifi, que en principio sólo nos permite eso: encender y apagar un aparato conectado a él.&lt;/div&gt;
&lt;center&gt;
&lt;img alt="SonOff Basic" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5FirhhtWVSN7qJTS2-mSX4BtAzwLiYV1OhcKdsqrPqLqbH4AM74VRKnVBX3Pl_EUFHi8PPaSYoUZqkzfq_Lp3l7O4_qKdyIRibuXCkojBbnqhhxjLP8vQyf8JuGdCtGUh9PZBz63QQBI/s400/sonoff_01.jpg" style="max-width: 100%;" /&gt;&lt;/center&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Está basado en el SoC ESP8266EX, es de reducido tamaño y dispone de un par de terminales de entrada (vivo y neutro) y otro par de salida, con un &lt;i&gt;relé&lt;/i&gt; intermedio que se activa y desactiva por medio del ESP8266 mediante su conexión Wifi. Además tiene un pequeño &lt;i&gt;pulsador&lt;/i&gt; que permite activar y desactivar manualmente la conexión del relé y un led que se activa cuando el relé está cerrado.&lt;/div&gt;
&lt;center&gt;
&lt;img alt="Tamaño SonOff Basic" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7-Se3NW64p-UtoZvxzenZC-Kmc4RRHgrM9ZPwbfgZifcvHv4Xblw2tm8GdmlSVJOvruWAQGWRzPmneRJYE8Dbovz6F1Dc2VoKAUWaoqb_lHP48u1dYP1LSIqH-sAIkeDm0gYZDAngxIU/s400/IMG_20170804_115706.jpg" style="max-width: 100%;" /&gt;&lt;/center&gt;
&lt;center&gt;
&lt;img alt="Detalle ESP8266EX" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigFkPJgoB0aVBAz8AtSt6cA8YSEkWr_VFYQ4oqrqDMV4r1z5NkbNAWGfr8_nyBbSzF3SWUcQPgoXym6mFbOuraBlcA4PWzNTulmaruEp8cW63216UP2NyZ3MlxCOowgkn4B-BJc6-4EsY/s400/IMG_20170804_120638.jpg" style="max-width: 100%;" /&gt;&lt;/center&gt;
&lt;center&gt;
&lt;img alt="Vista general SonOff Basic" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyNYUqvXE5nu278-4d8yEa0XVhwRn_akYDEv89hbWA3cUM8zSlQ64sm93RD0bJTHa_NdpdYqq8k49FRZEAKUInjIgtHOM-dQocfckMLNtdybo_ctegPTYZIGQFkRwn_NOgKYHN2-cZBi0/s400/IMG_20170804_120430.jpg" style="max-width: 100%;" /&gt;&lt;/center&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Pero sin duda, lo más interesante de este dispositivo es que dispone de unos pequeños agujeritos donde, soldando una regleta de 5 pines, podemos acceder a ciertas patillas del SoC pudiendo reprogramarlo a nuestro gusto y conectarle algunos periféricos extra. En la siguiente imagen vemos la disposición de estas conexiones:&lt;/div&gt;
&lt;center&gt;
&lt;img alt="GPIOS SonOff Basic" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPZk70n6TPTa7BAk2ZuMAnlLq8loxrwuzH4iK7U0xnv3NZcMwDGg0YBy5NqQzbeuwRfpCz1ANFu2XdMvmAuQsmDNxmqvBBl8Vxw0yXMj1hZIXW6HJx8a6AZmrmwy3EUdoGcb0G47cBOgw/s640/sonoff_gpios.jpg" style="max-width: 100%;" /&gt;&lt;/center&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Podemos observar las conexiones que tenemos disponibles:&lt;/div&gt;
&lt;ul&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;4 conexiones (GND - TX - RX - VCC) que constituyen un puerto serie mediante el cual podemos programar el dispositivo.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;1 puerto en la misma línea (GPIO14) en el que podríamos conectar cualquier dispositivo controlable por medio de un solo pin: sensores de temperatura, 1wire, etc.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;El pulsador está conectado entre tierra y otro puerto (GPIO0). Si soldamos unos pequeños cables a estos terminales también podríamos hacer uso de este puerto&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="sonoff-pow" style="clear: both; color: rgb(92 , 81 , 70); font-size: 1.6em; font-weight: 400; font-weight: bold; letter-spacing: -1px; margin: 1.125em 0px 0.75em;"&gt;
&lt;a href="https://www.blogger.com/blogger.g?blogID=155451023305910224#sonoff-pow" name="sonoff-pow" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;/a&gt;SonOff POW&lt;/h3&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
&lt;a href="https://www.itead.cc/smart-home/sonoff-pow.html" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;Este otro dispositivo&lt;/a&gt; es algo más avanzado, permitiéndonos además de encender y apagar, controlar la potencia y el voltaje de la corriente que circula en todo momento por el dispositivo.&lt;/div&gt;
&lt;center&gt;
&lt;img alt="SonOff POW" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeR_K0ZFZaQIFKD4hb7C433PX-LWpuEEfam3XutP45iD-0sERNtqXYj8_wUFi2OCqoLejUdWdXbsnPmVlWCxtpfHCJvPWainRSQqPDriAc9WvqYXV3V9MQ5rtHbiP7-JFAL_fo0gFMmFw/s640/IMG_20170818_173456.jpg" style="max-width: 100%;" /&gt;&lt;/center&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
El empaquetado es bastante más robusto y es algo más grande. Existen además dos versiones: una de &lt;b&gt;10 Amperios&lt;/b&gt; que nos permite encender y apagar y controlar el consumo de aparatos de hasta 2200W (lámparas, estufas, etc) y otra de &lt;b&gt;16 Amperios&lt;/b&gt; que nos permite hacer lo mismo con aparatos de hasta 3500W (aires acondicionados, lavavajillas, lavadoras, etc).&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Al igual que su hermano menor, dispone de una línea con agujeritos para soldar en este caso 4 pines que nos permitirán programar el dispositivo. En este modelo es muy peligroso conectar otros periféricos a las líneas de control porque la señal GND va conectada a uno de los terminales de la red (que puede ser el neutro pero también el vivo), con lo cual podríamos freir el sensor que le conectemos. Por tanto en principio no trae ningún GPIO fácilmente accesible.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Las conexiones serían las que se muestran en las siguientes imágenes:&lt;/div&gt;
&lt;center&gt;
&lt;img alt="GPIOs SonOff POW" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-wK00OPY3exsRepAA641WmoK139w-Fe_fvUVQI8AWRs7kbJfrpGty-av4vbPcMKvZ4LhNP9ieWiaE_5mtTZo5_iM35aFnnzFjXClu1NZaITUVdvzVIWXlg15Cd79MXw9m3492VoCqmoE/s640/sonoff-pow_gpios.jpg" style="max-width: 100%;" /&gt;&lt;/center&gt;
&lt;center&gt;
&lt;img alt="CA SonOff POW" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCukCr3Id940o3Gv21MF2OQYwewwFkJFvaldtLtzfiSg0DjnHE49Q60Ch2IuUeF3GgniTJtCDYhWnVy8CcezZsGSLmoizQJaytoh0Ml8kcq0ADNr0zK6wx8g06LI8vAbqp88-EjVTCdzs/s400/sonoff-pow_ca.jpg" style="max-width: 100%;" /&gt;&lt;/center&gt;
&lt;h2 id="programación" style="border-bottom-color: rgb(230 , 230 , 230); border-bottom-style: solid; border-bottom-width: 1px; clear: both; color: rgb(92 , 81 , 70); font-size: 1.8em; font-weight: 400; font-weight: bold; letter-spacing: -1px; line-height: 1.7em; margin: 1.275em 0px 0.85em;"&gt;
&lt;a href="https://www.blogger.com/blogger.g?blogID=155451023305910224#programaci%C3%B3n" name="programación" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;/a&gt;Programación&lt;/h2&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
Para &lt;i&gt;reprogramar&lt;/i&gt; un dispositivo SonOff según nuestras necesidades necesitamos los siguientes elementos:&lt;/div&gt;
&lt;ul&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Un &lt;b&gt;&lt;a href="http://nanolec.blogspot.com.es/2015/10/componentes-4-programador-para-arduino.html" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;programador&lt;/a&gt;&lt;/b&gt; de Arduinos y otros controladores, como el FTDI FT232 o similar. Siempre nos tenemos que asegurar de que el programador funcione a &lt;b&gt;3.3V&lt;/b&gt; y no a 5V, si no queremos freír el controlador del SonOff.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Un &lt;b&gt;entorno de programación&lt;/b&gt; preparado para &lt;b&gt;ESP8266&lt;/b&gt;. A continuación veremos cómo preparar el entorno utilizando el IDE de Arduino, aunque se puede utilizar cualquier otra herramienta.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Un &lt;b&gt;software&lt;/b&gt; (o firmware) para meterle al SonOff, que nos proporcione las funcionalidades que necesitamos.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
A continuación veremos los pasos que necesitamos para configurar cada uno de los elementos:&lt;/div&gt;
&lt;h3 id="paso-1:-conectar-el-programador" style="clear: both; color: rgb(92 , 81 , 70); font-size: 1.6em; font-weight: 400; font-weight: bold; letter-spacing: -1px; margin: 1.125em 0px 0.75em;"&gt;
&lt;a href="https://www.blogger.com/blogger.g?blogID=155451023305910224#paso-1:-conectar-el-programador" name="paso-1:-conectar-el-programador" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;/a&gt;Paso 1: Conectar el programador&lt;/h3&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
Para conectar el programador, nos aseguraremos de que realizamos las siguientes conexiones entre el mismo y el SonOff:&lt;/div&gt;
&lt;center&gt;
&lt;img alt="Conexion programador" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYXmhHsMtQI2E9BECwZGc60IwZq_bizZVv1NAoIbtffx79LQLwPCaSPTu6vI8HTW-baNnImIaARAZpH0OBfoHHqN0YEYYqCjGaOPZn9KGCVNNH76tMM_Ybe5CxH9grpxPcE5sf65mU77g/s400/conexionado_sonoff.png" style="max-width: 100%;" /&gt;&lt;/center&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Básicamente se trata de establecer un &lt;i&gt;“null modem”&lt;/i&gt; entre ambos dispositivos, cruzando las líneas de recepción y transmisión y manteniendo las de alimentación y tierra. El resto de pines del programador se quedarán sin conectar.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
De este modo, si conectamos el programador a nuestro ordenador, nos aparecerá un nuevo puerto serie (COMx) al que nos podemos conectar tanto para obtener la información que saque el dispositivo como para programarlo. Para esto último hay que entrar en modo programación como veremos más adelante.&lt;/div&gt;
&lt;h3 id="paso-2:-preparar-el-entorno" style="clear: both; color: rgb(92 , 81 , 70); font-size: 1.6em; font-weight: 400; font-weight: bold; letter-spacing: -1px; margin: 1.125em 0px 0.75em;"&gt;
&lt;a href="https://www.blogger.com/blogger.g?blogID=155451023305910224#paso-2:-preparar-el-entorno" name="paso-2:-preparar-el-entorno" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;/a&gt;Paso 2: Preparar el entorno&lt;/h3&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
Para programar un dispositivo ESP8266 existe la posibilidad de utilizar el mismo lenguaje de Arduino (y su IDE), como vimos &lt;a href="http://nanolec.blogspot.com.es/2017/08/sensor-consumo-electrico-homeassistant-3.html" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;en este artículo&lt;/a&gt;, aunque existen otras posibilidades como LUA o MicroPython.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Nosotros vamos a utilizar Arduino como lenguaje de programación, para lo cual lo normal es utilizar &lt;b&gt;su propio IDE&lt;/b&gt; (yo particularmente utilizo Eclipse que es mucho más potente, pero eso ya es otro cantar). Para ello tendremos que hacer lo siguiente:&lt;/div&gt;
&lt;ul&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Debemos disponer de una versión reciente del IDE (a partir de la 1.6.4). Se descarga &lt;a href="https://www.arduino.cc/en/main/software" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;en esta dirección&lt;/a&gt;. El IDE tal cual lo instalamos conoce muchas placas de hardware, como todos los modelos habidos y por haber de Arduino y otras muchas, pero en principio no conoce ningún dispositivo ESP8266.&lt;/div&gt;
&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Para ello, tendremos que instalar el soporte de ESP8266. Para ello, haremos lo siguiente:&lt;/div&gt;
&lt;ul&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Arrancamos el IDE.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Vamos a la opción preferencias dentro del menú Archivo.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;En la opción &lt;i&gt;“Gestor de URLs Adicionales de Tarjetas”&lt;/i&gt;, especificamos la siguiente dirección:  &lt;a href="http://arduino.esp8266.com/stable/package_esp8266com_index.json" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;http://arduino.esp8266.com/stable/package_esp8266com_index.json&lt;/a&gt; y pulsamos &lt;i&gt;Ok&lt;/i&gt;.&lt;br style="clear: both;" /&gt;&lt;img alt="Url ESP8266" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgo1WU8TEgOdkTAGZX7vxoSvmG0YPdfAi6V2RbrH6dvsVPVHitw66Hqmhm2spbCdb8iK2E1MljvL7G_iRKnHf_kUmEKxsrXYTMSPMOlBp7VCZieA7gx5yhBbT8WegXm6cxOnegKApsPGmg/s640/url_esp8266_arduino.png" style="max-width: 100%;" /&gt;&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Vamos al menú Herramientas -&amp;gt; Placa -&amp;gt; Gestor de Tarjetas.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Seleccionamos ESP8266 Community y la instalamos.&lt;br style="clear: both;" /&gt;&lt;img alt="Gestor de tarjetas" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmOIz5RteLO5zc6wvumH48SusiR5Ptj_Xlu1LkYqjIbguLDbcbFVjIWhM9R2PcRl_1CV9TBp8-d7qfEibzLZXPHXJ2gyUSlwRAbu-Yl-pSWtGJ7Os0IKNrswSMdyEHUjTvtou3AtHTtQw/s640/gestor_tarjetas_esp8266.png" style="max-width: 100%;" /&gt;&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;A partir de ese momento, ya tenemos disponible toda la familia de productos basados en ESP8266 en el menú Herramientas -&amp;gt; Placa.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Para poder programar correctamente nuestro dispositivo, en el menú Herramientas debemos seleccionar exactamente las siguientes opciones. En caso contrario no nos va a funcionar:&lt;/div&gt;
&lt;ul&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Placa: Generic ESP8266 module.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Flash Mode: DOUT.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Flash Frequency: 40Mhz.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;CPU Frequency: 80Mhz.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Flash Size: 1M (64K SPIFFS).&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Debug Port: Disabled.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Debug Level: Ninguno.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Reset Method: CK.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Upload Speed: 115200.&lt;/li&gt;
&lt;/ul&gt;
&lt;center&gt;
&lt;img alt="Opciones Esp8266" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiwS-SnjjMiidmhWYwdpXXcalSdIQkUbiiSMvt2_rj_1tnwu9ftfMkXc9FEoQlzWiuMc1VguxpU2U3jph00QNUAeAzblid4pwmQsTFouJiLL0nvF0MLAigaVgGfuQSC4iLz-Tl1Fv1aFE/s320/opciones_esp8266_arduino.png" style="max-width: 100%;" /&gt;&lt;/center&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
En cuanto al puerto, lo podremos seleccionar cuando tengamos conectado el programador.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="paso-3:-elegir-el-software" style="clear: both; color: rgb(92 , 81 , 70); font-size: 1.6em; font-weight: 400; font-weight: bold; letter-spacing: -1px; margin: 1.125em 0px 0.75em;"&gt;
&lt;a href="https://www.blogger.com/blogger.g?blogID=155451023305910224#paso-3:-elegir-el-software" name="paso-3:-elegir-el-software" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;/a&gt;Paso 3: Elegir el software&lt;/h3&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
A la hora de cambiar el funcionamiento de nuestros dispositivos SonOff, podemos elegir entre una gran cantidad de softwares, o firmwares, o como se les quiera llamar.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Unos tienen más características que otros, otros tienen un servidor web integrado, otros son más fácilmente configurables, etc. Yo voy a poner una lista de los más conocidos y el que yo he elegido concretamente. Todos ellos están programados en el lenguaje de Arduino y se pueden subir desde nuestro IDE ya preparado.&lt;/div&gt;
&lt;ul&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;a href="https://github.com/arendst/Sonoff-Tasmota/wiki" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;Tasmota&lt;/a&gt;.&lt;br style="clear: both;" /&gt;Este software soporta todos los dispositivos SonOff, incluye un servidor web y permite configurarlo de forma interactiva, se conecta a servidores MQTT y permite conectarles una gran cantidad de sensores, es actualizable por OTA, etc.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;a href="https://bitbucket.org/xoseperez/espurna/wiki/Home" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;Espurna&lt;/a&gt;.&lt;br style="clear: both;" /&gt;Este software es español y tiene prácticamente las mismas características.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;a href="http://marvinroger.github.io/homie-esp8266/1.5.0/" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;Homie&lt;/a&gt;.&lt;br style="clear: both;" /&gt;Homie es una librería que podemos incluir en nuestro Sketch de Arduino y que nos provee de una funcionalidad básica: conexión a Wifi, a MQTT, etc.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;a href="https://github.com/KmanOz/Sonoff-HomeAssistant" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;SonOff-HomeAssistant&lt;/a&gt;.&lt;br style="clear: both;" /&gt;Este software es muy básico: sólo nos permite encender y apagar los dispositivos y conectarles opcionalmente un sensor de temperatura y humedad. También es configurable mediante OTA, pero no tiene ninguna característica avanzada como configuración online, ni servidor web ni nada de eso.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
En mi caso, me he quedado con esta última opción, ya que no necesito que un interruptor haga otra cosa: yo tengo de momento 3 SonOffs Basic funcionando: uno como interruptor simple, otro con un DHT22 que me mide la temperatura y la humedad (soportado directamente por el software) y un tercero con un sensor de temperatura DS18B20 mediante una modificación que he realizado en el código. Para mí es suficiente y es lo que voy a explicar.&lt;/div&gt;
&lt;h4 id="configuración" style="clear: both; color: rgb(92 , 81 , 70); font-size: 1.4em; font-weight: 400; font-weight: bold; letter-spacing: -1px; margin: 0.99em 0px 0.66em;"&gt;
&lt;a href="https://www.blogger.com/blogger.g?blogID=155451023305910224#configuraci%C3%B3n" name="configuración" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;/a&gt;Configuración&lt;/h4&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
Para utilizar el software &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;SonOff-HomeAssistant&lt;/code&gt;, nos iremos al &lt;a href="https://github.com/KmanOz/Sonoff-HomeAssistant" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;repositorio&lt;/a&gt; y entraremos en el directorio &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;arduino&lt;/code&gt;. Dentro de este directorio utilizaremos los siguientes programas:&lt;/div&gt;
&lt;ul&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;b&gt;ESPsonoff-v1.01pOTA&lt;/b&gt;, si vamos a utilizar un SonOff Basic sin ningún sensor conectado.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;b&gt;ESPsonoff-v1.01tOTA&lt;/b&gt;, si vamos a utilizar un SonOff Basic con un sensor de temperatura y humedad conectado (DHT11 ó DHT22).&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;b&gt;ESPsonoff_POW-v1.0&lt;/b&gt;, si vamos a utilizar un SonOff POW.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Una vez descargado el software y abierto con el IDE de Arduino, deberemos ajustar los siguientes parámetros del código:&lt;/div&gt;
&lt;pre style="background: rgb(0 , 43 , 54); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(131 , 148 , 150); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="cpp" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;#define DHTTYPE         DHT22
// Aquí indicaremos DHT11 ó DHT22, según el modelo que tengamos

#define MQTT_CLIENT     &amp;quot;Sonoff_Living_Room_v1.01tOTA&amp;quot;
// Este parámetro indica el identificador que tiene este dispositivo de cara al MQTT.
// El identificador debe ser único para cada dispositivo

#define MQTT_SERVER     &amp;quot;192.168.0.100&amp;quot;                      
// Aquí indicamos la dirección IP del broker MQTT

#define MQTT_PORT       1883
// Puerto TCP del broker

#define MQTT_TOPIC      &amp;quot;home/sonoff/living_room/1&amp;quot;
// Tópico que utilizaremos para controlar este dispositivo, y en el que se 
// publicarán el estado del mismo y los valores de los sensores

#define MQTT_USER       &amp;quot;user&amp;quot;
// Usuario del broker MQTT

#define MQTT_PASS       &amp;quot;pass&amp;quot;
// Contraseña del mismo

#define WIFI_SSID       &amp;quot;homewifi&amp;quot;
// Nombre de la WIFI

#define WIFI_PASS &amp;quot;homepass&amp;quot;
// Contraseña de la WIFI

int kRetries = 10;
// Número de intentos a realizar para conectar a la Wifi.
// En mi caso tuve que aumentarlo a 50 porque tardaba en conectar.
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;define&lt;/span&gt; DHTTYPE         DHT22&lt;/span&gt;
&lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Aquí indicaremos DHT11 ó DHT22, según el modelo que tengamos&lt;/span&gt;

&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;define&lt;/span&gt; MQTT_CLIENT     "Sonoff_Living_Room_v1.01tOTA"&lt;/span&gt;
&lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Este parámetro indica el identificador que tiene este dispositivo de cara al MQTT.&lt;/span&gt;
&lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// El identificador debe ser único para cada dispositivo&lt;/span&gt;

&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;define&lt;/span&gt; MQTT_SERVER     "192.168.0.100"                      &lt;/span&gt;
&lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Aquí indicamos la dirección IP del broker MQTT&lt;/span&gt;

&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;define&lt;/span&gt; MQTT_PORT       1883&lt;/span&gt;
&lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Puerto TCP del broker&lt;/span&gt;

&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;define&lt;/span&gt; MQTT_TOPIC      "home/sonoff/living_room/1"&lt;/span&gt;
&lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Tópico que utilizaremos para controlar este dispositivo, y en el que se &lt;/span&gt;
&lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// publicarán el estado del mismo y los valores de los sensores&lt;/span&gt;

&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;define&lt;/span&gt; MQTT_USER       "user"&lt;/span&gt;
&lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Usuario del broker MQTT&lt;/span&gt;

&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;define&lt;/span&gt; MQTT_PASS       "pass"&lt;/span&gt;
&lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Contraseña del mismo&lt;/span&gt;

&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;define&lt;/span&gt; WIFI_SSID       "homewifi"&lt;/span&gt;
&lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Nombre de la WIFI&lt;/span&gt;

&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;define&lt;/span&gt; WIFI_PASS "homepass"&lt;/span&gt;
&lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Contraseña de la WIFI&lt;/span&gt;

&lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;int&lt;/span&gt; kRetries = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;10&lt;/span&gt;;
&lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Número de intentos a realizar para conectar a la Wifi.&lt;/span&gt;
&lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// En mi caso tuve que aumentarlo a 50 porque tardaba en conectar.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="paso-4:-grabar-el-software" style="clear: both; color: rgb(92 , 81 , 70); font-size: 1.6em; font-weight: 400; font-weight: bold; letter-spacing: -1px; margin: 1.125em 0px 0.75em;"&gt;
&lt;a href="https://www.blogger.com/blogger.g?blogID=155451023305910224#paso-4:-grabar-el-software" name="paso-4:-grabar-el-software" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;/a&gt;Paso 4: Grabar el software&lt;/h3&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
Una vez que tenemos el software descargado y configurado a nuestro gusto, tendremos que grabarlo en el dispositivo. Para ello tendremos que entrar en modo programación:&lt;/div&gt;
&lt;ol style="list-style-type: decimal;"&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Con el programador &lt;b&gt;desconectado&lt;/b&gt; del puerto USB, &lt;b&gt;dejar pulsado&lt;/b&gt; el pulsador del SonOff.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Sin soltar el pulsador, &lt;b&gt;conectar&lt;/b&gt; el programador a un puerto USB del ordenador.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;b&gt;Dejar pulsado&lt;/b&gt; el pulsador unos 3 ó 4 segundos.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;b&gt;Soltar&lt;/b&gt; el pulsador.&lt;/li&gt;
&lt;/ol&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Desde este momento el controlador del SonOff, en lugar de ejecutar el software que tiene cargado, se queda a la espera de que le mandemos un nuevo software. Subiremos el software mediante la opción Programa -&amp;gt; Subir.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
En caso de que nos dé un error de sincronización, podemos volver a intentarlo. En caso de que siga fallando, podríamos bajar la velocidad de flasheo de 115200 a 57600 o inferior. Si seguimos teniendo problemas, es posible que no hayamos entrado bien en el modo de programación: nos aseguraremos de que todos los parámetros están puestos tal y como se dice en el punto 2, desconectaremos y volveremos a entrar en modo programación.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Una vez que subamos el software, podemos desconectar el programador del ordenador y volver a conectarlo sin pulsar nada. Le daremos unos segundos y podemos comprobar si se conecta a la WIFI y que podamos encender y apagar el LED mediante el pulsador.&lt;/div&gt;
&lt;h3 id="paso-5:-modificaciones" style="clear: both; color: rgb(92 , 81 , 70); font-size: 1.6em; font-weight: 400; font-weight: bold; letter-spacing: -1px; margin: 1.125em 0px 0.75em;"&gt;
&lt;a href="https://www.blogger.com/blogger.g?blogID=155451023305910224#paso-5:-modificaciones" name="paso-5:-modificaciones" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;/a&gt;Paso 5: Modificaciones&lt;/h3&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
En el caso del SonOff Basic, como ya se ha dicho, podemos conectarle cualquier sensor utilizando el GPIO 14 que tenemos disponible. Por ejemplo, siguiendo este esquema podríamos añadirle un sensor DHT11 o DHT22:&lt;/div&gt;
&lt;center&gt;
&lt;img alt="Esquema DHT" src="https://raw.githubusercontent.com/KmanOz/Sonoff-HomeAssistant/master/images/sensor_wiring.jpg" style="max-width: 100%;" /&gt;&lt;/center&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Si lo que tenemos es un sensor de temperatura Dallas DS18B20, utilizaríamos un esquema parecido, intercalando una resistencia de 4K7Ω entre la línea de datos y la de alimentación.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
En lugar de utilizar la librería DHT.h, utilizaríamos:&lt;/div&gt;
&lt;ul&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;OneWire.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;DallasTemperature&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Las modificaciones en el código serían muy simples:&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Antes del método &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;setup&lt;/code&gt;, añadiríamos:&lt;/div&gt;
&lt;pre style="background: rgb(0 , 43 , 54); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(131 , 148 , 150); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="cpp" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;OneWire one(PINDS18B20);
DallasTemperature sensorDallas(&amp;amp;amp;one);
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;&lt;span class="hljs-function"&gt;OneWire &lt;span class="hljs-title" style="color: rgb(38 , 139 , 210);"&gt;one&lt;/span&gt;&lt;span class="hljs-params"&gt;(PINDS18B20)&lt;/span&gt;&lt;/span&gt;;
&lt;span class="hljs-function"&gt;DallasTemperature &lt;span class="hljs-title" style="color: rgb(38 , 139 , 210);"&gt;sensorDallas&lt;/span&gt;&lt;span class="hljs-params"&gt;(&amp;amp;one)&lt;/span&gt;&lt;/span&gt;;
&lt;/code&gt;&lt;/pre&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Dentro del método &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;setup&lt;/code&gt;:&lt;/div&gt;
&lt;pre style="background: rgb(0 , 43 , 54); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(131 , 148 , 150); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="cpp" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;sensorDallas.begin();
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;sensorDallas.begin();
&lt;/code&gt;&lt;/pre&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Y finalmente, el método &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;getTemp&lt;/code&gt; se quedaría así:&lt;/div&gt;
&lt;pre style="background: rgb(0 , 43 , 54); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(131 , 148 , 150); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="cpp" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;void getTemp() {
    Serial.print(&amp;quot;DS18B20 read . . . . . . . . . . . . . . . . . &amp;quot;);
    char message_buff[60];

    // Lanzamos una petición para leer temperaturas...
    sensorDallas.requestTemperatures();

    // ... y obtenemos las del primero (y único, en principio)
    float temp = sensorDallas.getTempCByIndex(0);

    if (digitalRead(LED) == LOW) {
        blinkLED(LED, 100, 1);
    } else {
        blinkLED(LED, 100, 1);
        digitalWrite(LED, HIGH);
    }
    if (isnan(temp)) {
        mqttClient.publish(
                MQTT::Publish(MQTT_TOPIC&amp;quot;/debug&amp;quot;, &amp;quot;\&amp;quot;DS18B20 Read Error\&amp;quot;&amp;quot;).set_retain().set_qos(
                        1));
        Serial.println(&amp;quot;ERROR&amp;quot;);
        tempReport = false;
        return;
    }
    String pubString = &amp;quot;{\&amp;quot;Temp\&amp;quot;: &amp;quot; + String(temp) + &amp;quot;}&amp;quot;;
    pubString.toCharArray(message_buff, pubString.length() + 1);
    mqttClient.publish(
            MQTT::Publish(MQTT_TOPIC&amp;quot;/temp&amp;quot;, message_buff).set_retain().set_qos(
                    1));
    Serial.println(&amp;quot;OK&amp;quot;);
    tempReport = false;
}
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;&lt;span class="hljs-function"&gt;&lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;void&lt;/span&gt; &lt;span class="hljs-title" style="color: rgb(38 , 139 , 210);"&gt;getTemp&lt;/span&gt;&lt;span class="hljs-params"&gt;()&lt;/span&gt; &lt;/span&gt;{
    Serial.print(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;"DS18B20 read . . . . . . . . . . . . . . . . . "&lt;/span&gt;);
    &lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;char&lt;/span&gt; message_buff[&lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;60&lt;/span&gt;];

    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Lanzamos una petición para leer temperaturas...&lt;/span&gt;
    sensorDallas.requestTemperatures();

    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// ... y obtenemos las del primero (y único, en principio)&lt;/span&gt;
    &lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;float&lt;/span&gt; temp = sensorDallas.getTempCByIndex(&lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;0&lt;/span&gt;);

    &lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;if&lt;/span&gt; (digitalRead(LED) == LOW) {
        blinkLED(LED, &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;100&lt;/span&gt;, &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;1&lt;/span&gt;);
    } &lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;else&lt;/span&gt; {
        blinkLED(LED, &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;100&lt;/span&gt;, &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;1&lt;/span&gt;);
        digitalWrite(LED, HIGH);
    }
    &lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;if&lt;/span&gt; (isnan(temp)) {
        mqttClient.publish(
                MQTT::Publish(MQTT_TOPIC&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;"/debug"&lt;/span&gt;, &lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;"\"DS18B20 Read Error\""&lt;/span&gt;).set_retain().set_qos(
                        &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;1&lt;/span&gt;));
        Serial.println(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;"ERROR"&lt;/span&gt;);
        tempReport = &lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;false&lt;/span&gt;;
        &lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;return&lt;/span&gt;;
    }
    String pubString = &lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;"{\"Temp\": "&lt;/span&gt; + String(temp) + &lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;"}"&lt;/span&gt;;
    pubString.toCharArray(message_buff, pubString.length() + &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;1&lt;/span&gt;);
    mqttClient.publish(
            MQTT::Publish(MQTT_TOPIC&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;"/temp"&lt;/span&gt;, message_buff).set_retain().set_qos(
                    &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;1&lt;/span&gt;));
    Serial.println(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;"OK"&lt;/span&gt;);
    tempReport = &lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;false&lt;/span&gt;;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="integración-en-homeassistant" style="border-bottom-color: rgb(230 , 230 , 230); border-bottom-style: solid; border-bottom-width: 1px; clear: both; color: rgb(92 , 81 , 70); font-size: 1.8em; font-weight: 400; font-weight: bold; letter-spacing: -1px; line-height: 1.7em; margin: 1.275em 0px 0.85em;"&gt;
&lt;a href="https://www.blogger.com/blogger.g?blogID=155451023305910224#integraci%C3%B3n-en-homeassistant" name="integración-en-homeassistant" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;/a&gt;Integración en HomeAssistant&lt;/h2&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
Finalmente, una vez que tenemos el software funcionando en nuestro dispositvo, tendremos que definirlo en nuestro HomeAssistant como interruptor o como luz. Para ello añadiremos a nuestro fichero &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;configuration.yaml&lt;/code&gt; las siguientes líneas:&lt;/div&gt;
&lt;pre style="background: rgb(0 , 43 , 54); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(131 , 148 , 150); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="ini" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;ini&amp;quot;&amp;gt;# Podríamos utilizarlo como interruptor (switch) o como luz (light)
switch:
  - platform: mqtt
    name: Interruptor 1
    state_topic: &amp;quot;micasa/sonoff/cocina/1/stat&amp;quot;
    command_topic: &amp;quot;micasa/sonoff/cocina/1&amp;quot;
    qos: 0
    payload_on: &amp;quot;on&amp;quot;
    payload_off: &amp;quot;off&amp;quot;
    retain: true
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;# Podríamos utilizarlo como interruptor (switch) o como luz (light)
switch:
  - platform: mqtt
    name: Interruptor 1
    state_topic: "micasa/sonoff/cocina/1/stat"
    command_topic: "micasa/sonoff/cocina/1"
    qos: 0
    payload_on: "on"
    payload_off: "off"
    retain: true
&lt;/code&gt;&lt;/pre&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Además, en el caso de que le hayamos conectado un sensor de temperatura, habría que definir los sensores:&lt;/div&gt;
&lt;pre style="background: rgb(0 , 43 , 54); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(131 , 148 , 150); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="ini" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;ini&amp;quot;&amp;gt;sensor:
- platform: mqtt
  name: &amp;quot;Temperatura cocina&amp;quot;
  state_topic: &amp;quot;micasa/sonoff/cocina/1/temp&amp;quot;
  unit_of_measurement: &amp;quot;°C&amp;quot;
  value_template: '{{ value_json.Temp | default(0) }}'

- platform: mqtt
  name: &amp;quot;Humedad cocina&amp;quot;
  state_topic: &amp;quot;micasa/sonoff/cocina/1/temp&amp;quot;
  unit_of_measurement: &amp;quot;%&amp;quot;
  value_template: '{{ value_json.Humidity | default(0) }}'
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;sensor:
- platform: mqtt
  name: "Temperatura cocina"
  state_topic: "micasa/sonoff/cocina/1/temp"
  unit_of_measurement: "°C"
  value_template: '{{ value_json.Temp | default(0) }}'

- platform: mqtt
  name: "Humedad cocina"
  state_topic: "micasa/sonoff/cocina/1/temp"
  unit_of_measurement: "%"
  value_template: '{{ value_json.Humidity | default(0) }}'
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="montaje-físico" style="border-bottom-color: rgb(230 , 230 , 230); border-bottom-style: solid; border-bottom-width: 1px; clear: both; color: rgb(92 , 81 , 70); font-size: 1.8em; font-weight: 400; font-weight: bold; letter-spacing: -1px; line-height: 1.7em; margin: 1.275em 0px 0.85em;"&gt;
&lt;a href="https://www.blogger.com/blogger.g?blogID=155451023305910224#montaje-f%C3%ADsico" name="montaje-físico" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;/a&gt;Montaje físico&lt;/h2&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
Como ejemplo, en la siguiente imagen se muestra cómo integrar un SonOff Basic modificado con un sensor de temperatura dentro de un ventilador:&lt;/div&gt;
&lt;center&gt;
&lt;img alt="Montaje ventilador" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUuET4UgCdHTOmqVe0MKu3o7FFFwfIlDoQpKwTuN4c8GwQ_G43vZEORQMgaxvtf1jZhntr_sSsh_vKczsqVCewUNLCTGilCBRJqzPC5DhKPTjLFeLQInn5GeljOzDzBtmfq7jhBtHWiAk/s640/IMG_20170813_142628_HDR.jpg" style="max-width: 100%;" /&gt;&lt;/center&gt;
&lt;/div&gt;
</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5FirhhtWVSN7qJTS2-mSX4BtAzwLiYV1OhcKdsqrPqLqbH4AM74VRKnVBX3Pl_EUFHi8PPaSYoUZqkzfq_Lp3l7O4_qKdyIRibuXCkojBbnqhhxjLP8vQyf8JuGdCtGUh9PZBz63QQBI/s72-c/sonoff_01.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><enclosure length="16180" type="application/json; charset=utf-8" url="http://arduino.esp8266.com/stable/package_esp8266com_index.json"/><itunes:explicit>no</itunes:explicit><itunes:subtitle>En este artículo veremos cómo podemos integrar algunos dispositivos SonOff en nuestro HomeAssistant. Dispositivos SonOff SonOff es una serie de dispositivos inteligentes fabricados por el fabricante chino Itead que nos permiten de una manera fácil y económica montar un sistema de domótica en nuestra casa. Casi todos los componentes de esta serie están basados en el chip ESP8266(EX) y algunos de ellos en el más evolucionado ESP8265, y aunque Itead proporciona una aplicación móvil y una nube propia para la gestión de sus dispositivos, se da la circunstancia de que son dispositivos fácilmente modificables para adaptarlos a nuestras necesidades particulares. ¡ATENCIÓN! El simple hecho de cortar el sello de papel que traen los dispositivos para abrir su carcasa hace que invalidemos su garantía. Lógicamente, si cambiamos su firmware ya no podremos obtener ningún soporte del fabricante ni del vendedor. Los componentes más conocidos y más baratos son los siguientes: SonOff Basic Este dispositivo es el más básico y barato de la serie. Se trata de un interruptor Wifi, que en principio sólo nos permite eso: encender y apagar un aparato conectado a él. Está basado en el SoC ESP8266EX, es de reducido tamaño y dispone de un par de terminales de entrada (vivo y neutro) y otro par de salida, con un relé intermedio que se activa y desactiva por medio del ESP8266 mediante su conexión Wifi. Además tiene un pequeño pulsador que permite activar y desactivar manualmente la conexión del relé y un led que se activa cuando el relé está cerrado. Pero sin duda, lo más interesante de este dispositivo es que dispone de unos pequeños agujeritos donde, soldando una regleta de 5 pines, podemos acceder a ciertas patillas del SoC pudiendo reprogramarlo a nuestro gusto y conectarle algunos periféricos extra. En la siguiente imagen vemos la disposición de estas conexiones: Podemos observar las conexiones que tenemos disponibles: 4 conexiones (GND - TX - RX - VCC) que constituyen un puerto serie mediante el cual podemos programar el dispositivo. 1 puerto en la misma línea (GPIO14) en el que podríamos conectar cualquier dispositivo controlable por medio de un solo pin: sensores de temperatura, 1wire, etc. El pulsador está conectado entre tierra y otro puerto (GPIO0). Si soldamos unos pequeños cables a estos terminales también podríamos hacer uso de este puerto SonOff POW Este otro dispositivo es algo más avanzado, permitiéndonos además de encender y apagar, controlar la potencia y el voltaje de la corriente que circula en todo momento por el dispositivo. El empaquetado es bastante más robusto y es algo más grande. Existen además dos versiones: una de 10 Amperios que nos permite encender y apagar y controlar el consumo de aparatos de hasta 2200W (lámparas, estufas, etc) y otra de 16 Amperios que nos permite hacer lo mismo con aparatos de hasta 3500W (aires acondicionados, lavavajillas, lavadoras, etc). Al igual que su hermano menor, dispone de una línea con agujeritos para soldar en este caso 4 pines que nos permitirán programar el dispositivo. En este modelo es muy peligroso conectar otros periféricos a las líneas de control porque la señal GND va conectada a uno de los terminales de la red (que puede ser el neutro pero también el vivo), con lo cual podríamos freir el sensor que le conectemos. Por tanto en principio no trae ningún GPIO fácilmente accesible. Las conexiones serían las que se muestran en las siguientes imágenes: Programación Para reprogramar un dispositivo SonOff según nuestras necesidades necesitamos los siguientes elementos: Un programador de Arduinos y otros controladores, como el FTDI FT232 o similar. Siempre nos tenemos que asegurar de que el programador funcione a 3.3V y no a 5V, si no queremos freír el controlador del SonOff. Un entorno de programación preparado para ESP8266. A continuación veremos cómo preparar el entorno utilizando el IDE de Arduino, aunque se puede utilizar cualquier otra herramienta. Un software (o firmware) para meterle al SonOff, que nos proporcione las funcionalidades que necesitamos. A continuación veremos los pasos que necesitamos para configurar cada uno de los elementos: Paso 1: Conectar el programador Para conectar el programador, nos aseguraremos de que realizamos las siguientes conexiones entre el mismo y el SonOff: Básicamente se trata de establecer un “null modem” entre ambos dispositivos, cruzando las líneas de recepción y transmisión y manteniendo las de alimentación y tierra. El resto de pines del programador se quedarán sin conectar. De este modo, si conectamos el programador a nuestro ordenador, nos aparecerá un nuevo puerto serie (COMx) al que nos podemos conectar tanto para obtener la información que saque el dispositivo como para programarlo. Para esto último hay que entrar en modo programación como veremos más adelante. Paso 2: Preparar el entorno Para programar un dispositivo ESP8266 existe la posibilidad de utilizar el mismo lenguaje de Arduino (y su IDE), como vimos en este artículo, aunque existen otras posibilidades como LUA o MicroPython. Nosotros vamos a utilizar Arduino como lenguaje de programación, para lo cual lo normal es utilizar su propio IDE (yo particularmente utilizo Eclipse que es mucho más potente, pero eso ya es otro cantar). Para ello tendremos que hacer lo siguiente: Debemos disponer de una versión reciente del IDE (a partir de la 1.6.4). Se descarga en esta dirección. El IDE tal cual lo instalamos conoce muchas placas de hardware, como todos los modelos habidos y por haber de Arduino y otras muchas, pero en principio no conoce ningún dispositivo ESP8266. Para ello, tendremos que instalar el soporte de ESP8266. Para ello, haremos lo siguiente: Arrancamos el IDE. Vamos a la opción preferencias dentro del menú Archivo. En la opción “Gestor de URLs Adicionales de Tarjetas”, especificamos la siguiente dirección: http://arduino.esp8266.com/stable/package_esp8266com_index.json y pulsamos Ok. Vamos al menú Herramientas -&amp;gt; Placa -&amp;gt; Gestor de Tarjetas. Seleccionamos ESP8266 Community y la instalamos. A partir de ese momento, ya tenemos disponible toda la familia de productos basados en ESP8266 en el menú Herramientas -&amp;gt; Placa. Para poder programar correctamente nuestro dispositivo, en el menú Herramientas debemos seleccionar exactamente las siguientes opciones. En caso contrario no nos va a funcionar: Placa: Generic ESP8266 module. Flash Mode: DOUT. Flash Frequency: 40Mhz. CPU Frequency: 80Mhz. Flash Size: 1M (64K SPIFFS). Debug Port: Disabled. Debug Level: Ninguno. Reset Method: CK. Upload Speed: 115200. En cuanto al puerto, lo podremos seleccionar cuando tengamos conectado el programador. Paso 3: Elegir el software A la hora de cambiar el funcionamiento de nuestros dispositivos SonOff, podemos elegir entre una gran cantidad de softwares, o firmwares, o como se les quiera llamar. Unos tienen más características que otros, otros tienen un servidor web integrado, otros son más fácilmente configurables, etc. Yo voy a poner una lista de los más conocidos y el que yo he elegido concretamente. Todos ellos están programados en el lenguaje de Arduino y se pueden subir desde nuestro IDE ya preparado. Tasmota.Este software soporta todos los dispositivos SonOff, incluye un servidor web y permite configurarlo de forma interactiva, se conecta a servidores MQTT y permite conectarles una gran cantidad de sensores, es actualizable por OTA, etc. Espurna.Este software es español y tiene prácticamente las mismas características. Homie.Homie es una librería que podemos incluir en nuestro Sketch de Arduino y que nos provee de una funcionalidad básica: conexión a Wifi, a MQTT, etc. SonOff-HomeAssistant.Este software es muy básico: sólo nos permite encender y apagar los dispositivos y conectarles opcionalmente un sensor de temperatura y humedad. También es configurable mediante OTA, pero no tiene ninguna característica avanzada como configuración online, ni servidor web ni nada de eso. En mi caso, me he quedado con esta última opción, ya que no necesito que un interruptor haga otra cosa: yo tengo de momento 3 SonOffs Basic funcionando: uno como interruptor simple, otro con un DHT22 que me mide la temperatura y la humedad (soportado directamente por el software) y un tercero con un sensor de temperatura DS18B20 mediante una modificación que he realizado en el código. Para mí es suficiente y es lo que voy a explicar. Configuración Para utilizar el software SonOff-HomeAssistant, nos iremos al repositorio y entraremos en el directorio arduino. Dentro de este directorio utilizaremos los siguientes programas: ESPsonoff-v1.01pOTA, si vamos a utilizar un SonOff Basic sin ningún sensor conectado. ESPsonoff-v1.01tOTA, si vamos a utilizar un SonOff Basic con un sensor de temperatura y humedad conectado (DHT11 ó DHT22). ESPsonoff_POW-v1.0, si vamos a utilizar un SonOff POW. Una vez descargado el software y abierto con el IDE de Arduino, deberemos ajustar los siguientes parámetros del código: #define DHTTYPE DHT22 // Aquí indicaremos DHT11 ó DHT22, según el modelo que tengamos #define MQTT_CLIENT "Sonoff_Living_Room_v1.01tOTA" // Este parámetro indica el identificador que tiene este dispositivo de cara al MQTT. // El identificador debe ser único para cada dispositivo #define MQTT_SERVER "192.168.0.100" // Aquí indicamos la dirección IP del broker MQTT #define MQTT_PORT 1883 // Puerto TCP del broker #define MQTT_TOPIC "home/sonoff/living_room/1" // Tópico que utilizaremos para controlar este dispositivo, y en el que se // publicarán el estado del mismo y los valores de los sensores #define MQTT_USER "user" // Usuario del broker MQTT #define MQTT_PASS "pass" // Contraseña del mismo #define WIFI_SSID "homewifi" // Nombre de la WIFI #define WIFI_PASS "homepass" // Contraseña de la WIFI int kRetries = 10; // Número de intentos a realizar para conectar a la Wifi. // En mi caso tuve que aumentarlo a 50 porque tardaba en conectar. Paso 4: Grabar el software Una vez que tenemos el software descargado y configurado a nuestro gusto, tendremos que grabarlo en el dispositivo. Para ello tendremos que entrar en modo programación: Con el programador desconectado del puerto USB, dejar pulsado el pulsador del SonOff. Sin soltar el pulsador, conectar el programador a un puerto USB del ordenador. Dejar pulsado el pulsador unos 3 ó 4 segundos. Soltar el pulsador. Desde este momento el controlador del SonOff, en lugar de ejecutar el software que tiene cargado, se queda a la espera de que le mandemos un nuevo software. Subiremos el software mediante la opción Programa -&amp;gt; Subir. En caso de que nos dé un error de sincronización, podemos volver a intentarlo. En caso de que siga fallando, podríamos bajar la velocidad de flasheo de 115200 a 57600 o inferior. Si seguimos teniendo problemas, es posible que no hayamos entrado bien en el modo de programación: nos aseguraremos de que todos los parámetros están puestos tal y como se dice en el punto 2, desconectaremos y volveremos a entrar en modo programación. Una vez que subamos el software, podemos desconectar el programador del ordenador y volver a conectarlo sin pulsar nada. Le daremos unos segundos y podemos comprobar si se conecta a la WIFI y que podamos encender y apagar el LED mediante el pulsador. Paso 5: Modificaciones En el caso del SonOff Basic, como ya se ha dicho, podemos conectarle cualquier sensor utilizando el GPIO 14 que tenemos disponible. Por ejemplo, siguiendo este esquema podríamos añadirle un sensor DHT11 o DHT22: Si lo que tenemos es un sensor de temperatura Dallas DS18B20, utilizaríamos un esquema parecido, intercalando una resistencia de 4K7Ω entre la línea de datos y la de alimentación. En lugar de utilizar la librería DHT.h, utilizaríamos: OneWire. DallasTemperature Las modificaciones en el código serían muy simples: Antes del método setup, añadiríamos: OneWire one(PINDS18B20); DallasTemperature sensorDallas(&amp;amp;one); Dentro del método setup: sensorDallas.begin(); Y finalmente, el método getTemp se quedaría así: void getTemp() { Serial.print("DS18B20 read . . . . . . . . . . . . . . . . . "); char message_buff[60]; // Lanzamos una petición para leer temperaturas... sensorDallas.requestTemperatures(); // ... y obtenemos las del primero (y único, en principio) float temp = sensorDallas.getTempCByIndex(0); if (digitalRead(LED) == LOW) { blinkLED(LED, 100, 1); } else { blinkLED(LED, 100, 1); digitalWrite(LED, HIGH); } if (isnan(temp)) { mqttClient.publish( MQTT::Publish(MQTT_TOPIC"/debug", "\"DS18B20 Read Error\"").set_retain().set_qos( 1)); Serial.println("ERROR"); tempReport = false; return; } String pubString = "{\"Temp\": " + String(temp) + "}"; pubString.toCharArray(message_buff, pubString.length() + 1); mqttClient.publish( MQTT::Publish(MQTT_TOPIC"/temp", message_buff).set_retain().set_qos( 1)); Serial.println("OK"); tempReport = false; } Integración en HomeAssistant Finalmente, una vez que tenemos el software funcionando en nuestro dispositvo, tendremos que definirlo en nuestro HomeAssistant como interruptor o como luz. Para ello añadiremos a nuestro fichero configuration.yaml las siguientes líneas: # Podríamos utilizarlo como interruptor (switch) o como luz (light) switch: - platform: mqtt name: Interruptor 1 state_topic: "micasa/sonoff/cocina/1/stat" command_topic: "micasa/sonoff/cocina/1" qos: 0 payload_on: "on" payload_off: "off" retain: true Además, en el caso de que le hayamos conectado un sensor de temperatura, habría que definir los sensores: sensor: - platform: mqtt name: "Temperatura cocina" state_topic: "micasa/sonoff/cocina/1/temp" unit_of_measurement: "°C" value_template: '{{ value_json.Temp | default(0) }}' - platform: mqtt name: "Humedad cocina" state_topic: "micasa/sonoff/cocina/1/temp" unit_of_measurement: "%" value_template: '{{ value_json.Humidity | default(0) }}' Montaje físico Como ejemplo, en la siguiente imagen se muestra cómo integrar un SonOff Basic modificado con un sensor de temperatura dentro de un ventilador:</itunes:subtitle><itunes:author>noreply@blogger.com (Isidoro Aguilar Baeza)</itunes:author><itunes:summary>En este artículo veremos cómo podemos integrar algunos dispositivos SonOff en nuestro HomeAssistant. Dispositivos SonOff SonOff es una serie de dispositivos inteligentes fabricados por el fabricante chino Itead que nos permiten de una manera fácil y económica montar un sistema de domótica en nuestra casa. Casi todos los componentes de esta serie están basados en el chip ESP8266(EX) y algunos de ellos en el más evolucionado ESP8265, y aunque Itead proporciona una aplicación móvil y una nube propia para la gestión de sus dispositivos, se da la circunstancia de que son dispositivos fácilmente modificables para adaptarlos a nuestras necesidades particulares. ¡ATENCIÓN! El simple hecho de cortar el sello de papel que traen los dispositivos para abrir su carcasa hace que invalidemos su garantía. Lógicamente, si cambiamos su firmware ya no podremos obtener ningún soporte del fabricante ni del vendedor. Los componentes más conocidos y más baratos son los siguientes: SonOff Basic Este dispositivo es el más básico y barato de la serie. Se trata de un interruptor Wifi, que en principio sólo nos permite eso: encender y apagar un aparato conectado a él. Está basado en el SoC ESP8266EX, es de reducido tamaño y dispone de un par de terminales de entrada (vivo y neutro) y otro par de salida, con un relé intermedio que se activa y desactiva por medio del ESP8266 mediante su conexión Wifi. Además tiene un pequeño pulsador que permite activar y desactivar manualmente la conexión del relé y un led que se activa cuando el relé está cerrado. Pero sin duda, lo más interesante de este dispositivo es que dispone de unos pequeños agujeritos donde, soldando una regleta de 5 pines, podemos acceder a ciertas patillas del SoC pudiendo reprogramarlo a nuestro gusto y conectarle algunos periféricos extra. En la siguiente imagen vemos la disposición de estas conexiones: Podemos observar las conexiones que tenemos disponibles: 4 conexiones (GND - TX - RX - VCC) que constituyen un puerto serie mediante el cual podemos programar el dispositivo. 1 puerto en la misma línea (GPIO14) en el que podríamos conectar cualquier dispositivo controlable por medio de un solo pin: sensores de temperatura, 1wire, etc. El pulsador está conectado entre tierra y otro puerto (GPIO0). Si soldamos unos pequeños cables a estos terminales también podríamos hacer uso de este puerto SonOff POW Este otro dispositivo es algo más avanzado, permitiéndonos además de encender y apagar, controlar la potencia y el voltaje de la corriente que circula en todo momento por el dispositivo. El empaquetado es bastante más robusto y es algo más grande. Existen además dos versiones: una de 10 Amperios que nos permite encender y apagar y controlar el consumo de aparatos de hasta 2200W (lámparas, estufas, etc) y otra de 16 Amperios que nos permite hacer lo mismo con aparatos de hasta 3500W (aires acondicionados, lavavajillas, lavadoras, etc). Al igual que su hermano menor, dispone de una línea con agujeritos para soldar en este caso 4 pines que nos permitirán programar el dispositivo. En este modelo es muy peligroso conectar otros periféricos a las líneas de control porque la señal GND va conectada a uno de los terminales de la red (que puede ser el neutro pero también el vivo), con lo cual podríamos freir el sensor que le conectemos. Por tanto en principio no trae ningún GPIO fácilmente accesible. Las conexiones serían las que se muestran en las siguientes imágenes: Programación Para reprogramar un dispositivo SonOff según nuestras necesidades necesitamos los siguientes elementos: Un programador de Arduinos y otros controladores, como el FTDI FT232 o similar. Siempre nos tenemos que asegurar de que el programador funcione a 3.3V y no a 5V, si no queremos freír el controlador del SonOff. Un entorno de programación preparado para ESP8266. A continuación veremos cómo preparar el entorno utilizando el IDE de Arduino, aunque se puede utilizar cualquier otra herramienta. Un software (o firmware) para meterle al SonOff, que nos proporcione las funcionalidades que necesitamos. A continuación veremos los pasos que necesitamos para configurar cada uno de los elementos: Paso 1: Conectar el programador Para conectar el programador, nos aseguraremos de que realizamos las siguientes conexiones entre el mismo y el SonOff: Básicamente se trata de establecer un “null modem” entre ambos dispositivos, cruzando las líneas de recepción y transmisión y manteniendo las de alimentación y tierra. El resto de pines del programador se quedarán sin conectar. De este modo, si conectamos el programador a nuestro ordenador, nos aparecerá un nuevo puerto serie (COMx) al que nos podemos conectar tanto para obtener la información que saque el dispositivo como para programarlo. Para esto último hay que entrar en modo programación como veremos más adelante. Paso 2: Preparar el entorno Para programar un dispositivo ESP8266 existe la posibilidad de utilizar el mismo lenguaje de Arduino (y su IDE), como vimos en este artículo, aunque existen otras posibilidades como LUA o MicroPython. Nosotros vamos a utilizar Arduino como lenguaje de programación, para lo cual lo normal es utilizar su propio IDE (yo particularmente utilizo Eclipse que es mucho más potente, pero eso ya es otro cantar). Para ello tendremos que hacer lo siguiente: Debemos disponer de una versión reciente del IDE (a partir de la 1.6.4). Se descarga en esta dirección. El IDE tal cual lo instalamos conoce muchas placas de hardware, como todos los modelos habidos y por haber de Arduino y otras muchas, pero en principio no conoce ningún dispositivo ESP8266. Para ello, tendremos que instalar el soporte de ESP8266. Para ello, haremos lo siguiente: Arrancamos el IDE. Vamos a la opción preferencias dentro del menú Archivo. En la opción “Gestor de URLs Adicionales de Tarjetas”, especificamos la siguiente dirección: http://arduino.esp8266.com/stable/package_esp8266com_index.json y pulsamos Ok. Vamos al menú Herramientas -&amp;gt; Placa -&amp;gt; Gestor de Tarjetas. Seleccionamos ESP8266 Community y la instalamos. A partir de ese momento, ya tenemos disponible toda la familia de productos basados en ESP8266 en el menú Herramientas -&amp;gt; Placa. Para poder programar correctamente nuestro dispositivo, en el menú Herramientas debemos seleccionar exactamente las siguientes opciones. En caso contrario no nos va a funcionar: Placa: Generic ESP8266 module. Flash Mode: DOUT. Flash Frequency: 40Mhz. CPU Frequency: 80Mhz. Flash Size: 1M (64K SPIFFS). Debug Port: Disabled. Debug Level: Ninguno. Reset Method: CK. Upload Speed: 115200. En cuanto al puerto, lo podremos seleccionar cuando tengamos conectado el programador. Paso 3: Elegir el software A la hora de cambiar el funcionamiento de nuestros dispositivos SonOff, podemos elegir entre una gran cantidad de softwares, o firmwares, o como se les quiera llamar. Unos tienen más características que otros, otros tienen un servidor web integrado, otros son más fácilmente configurables, etc. Yo voy a poner una lista de los más conocidos y el que yo he elegido concretamente. Todos ellos están programados en el lenguaje de Arduino y se pueden subir desde nuestro IDE ya preparado. Tasmota.Este software soporta todos los dispositivos SonOff, incluye un servidor web y permite configurarlo de forma interactiva, se conecta a servidores MQTT y permite conectarles una gran cantidad de sensores, es actualizable por OTA, etc. Espurna.Este software es español y tiene prácticamente las mismas características. Homie.Homie es una librería que podemos incluir en nuestro Sketch de Arduino y que nos provee de una funcionalidad básica: conexión a Wifi, a MQTT, etc. SonOff-HomeAssistant.Este software es muy básico: sólo nos permite encender y apagar los dispositivos y conectarles opcionalmente un sensor de temperatura y humedad. También es configurable mediante OTA, pero no tiene ninguna característica avanzada como configuración online, ni servidor web ni nada de eso. En mi caso, me he quedado con esta última opción, ya que no necesito que un interruptor haga otra cosa: yo tengo de momento 3 SonOffs Basic funcionando: uno como interruptor simple, otro con un DHT22 que me mide la temperatura y la humedad (soportado directamente por el software) y un tercero con un sensor de temperatura DS18B20 mediante una modificación que he realizado en el código. Para mí es suficiente y es lo que voy a explicar. Configuración Para utilizar el software SonOff-HomeAssistant, nos iremos al repositorio y entraremos en el directorio arduino. Dentro de este directorio utilizaremos los siguientes programas: ESPsonoff-v1.01pOTA, si vamos a utilizar un SonOff Basic sin ningún sensor conectado. ESPsonoff-v1.01tOTA, si vamos a utilizar un SonOff Basic con un sensor de temperatura y humedad conectado (DHT11 ó DHT22). ESPsonoff_POW-v1.0, si vamos a utilizar un SonOff POW. Una vez descargado el software y abierto con el IDE de Arduino, deberemos ajustar los siguientes parámetros del código: #define DHTTYPE DHT22 // Aquí indicaremos DHT11 ó DHT22, según el modelo que tengamos #define MQTT_CLIENT "Sonoff_Living_Room_v1.01tOTA" // Este parámetro indica el identificador que tiene este dispositivo de cara al MQTT. // El identificador debe ser único para cada dispositivo #define MQTT_SERVER "192.168.0.100" // Aquí indicamos la dirección IP del broker MQTT #define MQTT_PORT 1883 // Puerto TCP del broker #define MQTT_TOPIC "home/sonoff/living_room/1" // Tópico que utilizaremos para controlar este dispositivo, y en el que se // publicarán el estado del mismo y los valores de los sensores #define MQTT_USER "user" // Usuario del broker MQTT #define MQTT_PASS "pass" // Contraseña del mismo #define WIFI_SSID "homewifi" // Nombre de la WIFI #define WIFI_PASS "homepass" // Contraseña de la WIFI int kRetries = 10; // Número de intentos a realizar para conectar a la Wifi. // En mi caso tuve que aumentarlo a 50 porque tardaba en conectar. Paso 4: Grabar el software Una vez que tenemos el software descargado y configurado a nuestro gusto, tendremos que grabarlo en el dispositivo. Para ello tendremos que entrar en modo programación: Con el programador desconectado del puerto USB, dejar pulsado el pulsador del SonOff. Sin soltar el pulsador, conectar el programador a un puerto USB del ordenador. Dejar pulsado el pulsador unos 3 ó 4 segundos. Soltar el pulsador. Desde este momento el controlador del SonOff, en lugar de ejecutar el software que tiene cargado, se queda a la espera de que le mandemos un nuevo software. Subiremos el software mediante la opción Programa -&amp;gt; Subir. En caso de que nos dé un error de sincronización, podemos volver a intentarlo. En caso de que siga fallando, podríamos bajar la velocidad de flasheo de 115200 a 57600 o inferior. Si seguimos teniendo problemas, es posible que no hayamos entrado bien en el modo de programación: nos aseguraremos de que todos los parámetros están puestos tal y como se dice en el punto 2, desconectaremos y volveremos a entrar en modo programación. Una vez que subamos el software, podemos desconectar el programador del ordenador y volver a conectarlo sin pulsar nada. Le daremos unos segundos y podemos comprobar si se conecta a la WIFI y que podamos encender y apagar el LED mediante el pulsador. Paso 5: Modificaciones En el caso del SonOff Basic, como ya se ha dicho, podemos conectarle cualquier sensor utilizando el GPIO 14 que tenemos disponible. Por ejemplo, siguiendo este esquema podríamos añadirle un sensor DHT11 o DHT22: Si lo que tenemos es un sensor de temperatura Dallas DS18B20, utilizaríamos un esquema parecido, intercalando una resistencia de 4K7Ω entre la línea de datos y la de alimentación. En lugar de utilizar la librería DHT.h, utilizaríamos: OneWire. DallasTemperature Las modificaciones en el código serían muy simples: Antes del método setup, añadiríamos: OneWire one(PINDS18B20); DallasTemperature sensorDallas(&amp;amp;one); Dentro del método setup: sensorDallas.begin(); Y finalmente, el método getTemp se quedaría así: void getTemp() { Serial.print("DS18B20 read . . . . . . . . . . . . . . . . . "); char message_buff[60]; // Lanzamos una petición para leer temperaturas... sensorDallas.requestTemperatures(); // ... y obtenemos las del primero (y único, en principio) float temp = sensorDallas.getTempCByIndex(0); if (digitalRead(LED) == LOW) { blinkLED(LED, 100, 1); } else { blinkLED(LED, 100, 1); digitalWrite(LED, HIGH); } if (isnan(temp)) { mqttClient.publish( MQTT::Publish(MQTT_TOPIC"/debug", "\"DS18B20 Read Error\"").set_retain().set_qos( 1)); Serial.println("ERROR"); tempReport = false; return; } String pubString = "{\"Temp\": " + String(temp) + "}"; pubString.toCharArray(message_buff, pubString.length() + 1); mqttClient.publish( MQTT::Publish(MQTT_TOPIC"/temp", message_buff).set_retain().set_qos( 1)); Serial.println("OK"); tempReport = false; } Integración en HomeAssistant Finalmente, una vez que tenemos el software funcionando en nuestro dispositvo, tendremos que definirlo en nuestro HomeAssistant como interruptor o como luz. Para ello añadiremos a nuestro fichero configuration.yaml las siguientes líneas: # Podríamos utilizarlo como interruptor (switch) o como luz (light) switch: - platform: mqtt name: Interruptor 1 state_topic: "micasa/sonoff/cocina/1/stat" command_topic: "micasa/sonoff/cocina/1" qos: 0 payload_on: "on" payload_off: "off" retain: true Además, en el caso de que le hayamos conectado un sensor de temperatura, habría que definir los sensores: sensor: - platform: mqtt name: "Temperatura cocina" state_topic: "micasa/sonoff/cocina/1/temp" unit_of_measurement: "°C" value_template: '{{ value_json.Temp | default(0) }}' - platform: mqtt name: "Humedad cocina" state_topic: "micasa/sonoff/cocina/1/temp" unit_of_measurement: "%" value_template: '{{ value_json.Humidity | default(0) }}' Montaje físico Como ejemplo, en la siguiente imagen se muestra cómo integrar un SonOff Basic modificado con un sensor de temperatura dentro de un ventilador:</itunes:summary><itunes:keywords>componentes, corriente, domótica, electricidad, esp8266, home-assistant, temperatura</itunes:keywords></item><item><title>Sensor de consumo eléctrico para HomeAssistant (y 3)</title><link>http://nanolec.blogspot.com/2017/08/sensor-consumo-electrico-homeassistant-3.html</link><category>arduino</category><category>componentes</category><category>corriente</category><category>electricidad</category><category>electrónica</category><category>esp8266</category><category>orangepi</category><author>noreply@blogger.com (Isidoro Aguilar Baeza)</author><pubDate>Sun, 6 Aug 2017 17:30:00 +0200</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-155451023305910224.post-3304924496521974675</guid><description>&lt;div style="background-color: rgb(255 , 255 , 255); background: rgb(255 , 255 , 255); color: rgb(142 , 128 , 113); font-family: &amp;quot;hiragino sans gb&amp;quot; , &amp;quot;microsoft yahei&amp;quot; , &amp;quot;stheiti&amp;quot; , &amp;quot;simsun&amp;quot; , &amp;quot;lucida grande&amp;quot; , &amp;quot;lucida sans unicode&amp;quot; , &amp;quot;lucida sans&amp;quot; , &amp;quot;segoe ui&amp;quot; , , &amp;quot;malgun gothic&amp;quot; , &amp;quot;verdana&amp;quot; , &amp;quot;tahoma&amp;quot; , sans-serif; font-family: &amp;quot;lucida grande&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;apple sd gothic neo&amp;quot; , &amp;quot;malgun gothic&amp;quot; , &amp;quot;lucida sans unicode&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;arial&amp;quot; , sans-serif; font-size: 0.9em; font-size: 15px; margin: 0px; overflow-x: hidden; overflow-y: auto; padding: 20px; padding: 20px; padding: 5px 20px 26px;"&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
En este artículo pretendo dar por zanjado el tema del sensor de consumo eléctrico doméstico. Venimos de &lt;a href="http://nanolec.blogspot.com.es/2017/08/sensor-consumo-electrico-homeassistant-2.html" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;esta entrada&lt;/a&gt;.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
En la entrada anterior planteamos el circuito a utilizar para nuestro sensor e hicimos una serie de pruebas en nuestro protoboard.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Esta vez vamos a ver el montaje definitivo y cómo mandar los datos a HomeAssistant.&lt;/div&gt;
&lt;h2 id="montaje-definitivo" style="border-bottom-color: rgb(230 , 230 , 230); border-bottom-style: solid; border-bottom-width: 1px; clear: both; color: rgb(92 , 81 , 70); font-size: 1.8em; font-weight: 400; font-weight: bold; letter-spacing: -1px; line-height: 1.7em; margin: 1.275em 0px 0.85em;"&gt;
Montaje definitivo&lt;/h2&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
En la imagen podemos ver el montaje definitivo que he hecho en una placa:&lt;/div&gt;
&lt;center&gt;
&lt;img alt="Montaje definitivo" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDfBD_5DjG6myOgsOSJH8Sjq5mMY8iwf-74CzR22fgTm-SaaPeJfbPZSnpzlw3p1jIJgXFvYAEu1mM0k10fCGYhsb4LUGONLpzx5Ce-jpLwQv1JC-LIWTnPB3lop_dnn_dRLZX9RQWESQ/s400/IMG_20170805_182249_HDR.jpg" style="max-width: 100%;" /&gt;&lt;/center&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
No sé si se ven bien los detalles, pero básicamente he montado el &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;D1 mini&lt;/code&gt; en un zócalo para poder extraerlo fácilmente para reprogramarlo y le he conectado a la entrada de 5V una batería recargable de litio &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;18650&lt;/code&gt; de 3.7V, con lo cual el regulador interno nos da los 3.3V estabilizados para el divisor de tensión.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
He de decir que este es el segundo D1 mini que uso: el primero me lo cargué midiendo el consumo del dispositivo. Se ve que no le sentaron nada bien los microcortes de tensión que le metí cuando estaba probando a poner y quitar el amperímetro. Ahora le he puesto al circuito unos pines que me hacen de interruptor al estar conectados mediante un puente. No quiero cargarme más componentes con un pico al conectar y desconectar la batería (que no es nada fácil).&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Aparte de esto, nada más que decir en cuanto al montaje físico.&lt;/div&gt;
&lt;h2 id="software" style="border-bottom-color: rgb(230 , 230 , 230); border-bottom-style: solid; border-bottom-width: 1px; clear: both; color: rgb(92 , 81 , 70); font-size: 1.8em; font-weight: 400; font-weight: bold; letter-spacing: -1px; line-height: 1.7em; margin: 1.275em 0px 0.85em;"&gt;
Software&lt;/h2&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
En cuanto al programa en sí para el lector de consumo, aparte de utilizar la librería &lt;a href="https://github.com/openenergymonitor/EmonLib" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;EmonLib&lt;/a&gt; para lo que son las lecturas de corriente, necesitamos algo más para enviar los datos una vez que los tenemos.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Lo más lógico dado que vamos a utilizar HomeAssistant como centralizador es utilizar un cliente de &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;MQTT&lt;/code&gt;.&lt;/div&gt;
&lt;h3 id="mqtt" style="clear: both; color: rgb(92 , 81 , 70); font-size: 1.6em; font-weight: 400; font-weight: bold; letter-spacing: -1px; margin: 1.125em 0px 0.75em;"&gt;
MQTT&lt;/h3&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
&lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;MQTT&lt;/code&gt; son las siglas de &lt;i&gt;Message Queue Telemetry Transport&lt;/i&gt;, un protocolo ligero utilizado en dispositivos del Internet de las cosas que permite a múltples intermediarios intercambiar mensajes de la misma manera que funcionaría un chat: cada intermediario accede a lo que se denomina un &lt;i&gt;tópico&lt;/i&gt;, que es el tema de la conversación, y cada uno puede &lt;i&gt;publicar&lt;/i&gt; mensajes sobre ese &lt;i&gt;tópico&lt;/i&gt;. Otros clientes pueden &lt;i&gt;suscribirse&lt;/i&gt; a ese tópico y recibir una notificación cuando haya un mensaje nuevo.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Nos conectaremos a un servidor (o broker) de MQTT y publicaremos periódicamente en un tópico concreto los valores leídos de corriente y potencia efectivas. Para ello utilizaremos la librería &lt;a href="https://github.com/knolleary/pubsubclient" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;PubSubClient&lt;/a&gt;.&lt;/div&gt;
&lt;h3 id="el-programa" style="clear: both; color: rgb(92 , 81 , 70); font-size: 1.6em; font-weight: 400; font-weight: bold; letter-spacing: -1px; margin: 1.125em 0px 0.75em;"&gt;
El programa&lt;/h3&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
A continuación, el código fuente del programa utilizado para el sensor de consumo:&lt;/div&gt;
&lt;pre style="background: rgb(0 , 43 , 54); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(131 , 148 , 150); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="cpp" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;/**
 * Lector de consumo energético con conexión Wifi a servidor MQTT
 * Isidoro Aguilar Baeza - Julio/Agosto 2017
 * Este script se ejecuta en dispositivos NodeMCU, no en Arduino
 *
 * Librerías utilizadas:
 *   - PubSubClient(MQTT): https://github.com/knolleary/pubsubclient
 *   - EmonLib: https://github.com/openenergymonitor/EmonLib
 */

#include &amp;quot;Arduino.h&amp;quot;
#include &amp;amp;lt;ESP8266WiFi.h&amp;amp;gt;
#include &amp;quot;lib/PubSubClient.h&amp;quot;
#include &amp;quot;lib/EmonLib.h&amp;quot;

// Configuración de pines
#define PIN_LED            2

// Configuración de WIFI
#define WIFI_SSID    &amp;quot;XXXXXX&amp;quot;               // Nombre del AP Wifi
#define WIFI_PWD    &amp;quot;XXXXXX&amp;quot;            // Contraseña para conectar
#define WIFI_BPS    9600                // Velocidad del interfaz WIFI

// Configuración de MQTT
#define MQTT_SERVIDOR    &amp;quot;X.X.X.X&amp;quot;        // Dirección IP del broker
#define MQTT_PUERTO        1883
#define MQTT_USUARIO    &amp;quot;XXXXXXXXXXXXX&amp;quot;    // Usuario de acceso
#define MQTT_PWD        &amp;quot;XXXXXXXXXXXXX&amp;quot;    // Contraseña
#define MQTT_CLIENTE    &amp;quot;sensorConsumo&amp;quot;    // Identificador de este cliente
#define MQTT_TOPICO        &amp;quot;micasa/potencia&amp;quot;    // Tópico en el que publicaremos

// Configuración eléctrica
#define RatioTC            2000    // Ratio del transformador
#define ResCarga        91        // Resistencia de carga
#define correccion        1.145    // Factor de corrección adicional. Calculado empíricamente
#define VoltajeLinea    220        // Voltaje típico de la línea
#define T_PAUSA            10        // Intervalo entre medidas, en segundos

// Inicializamos el cliente Wifi y el MQTT
WiFiClient clienteESP;
PubSubClient clienteMQTT(clienteESP);

// Declaramos un lector de consumo de la librería EmonLib
EnergyMonitor emon1;

// Declaramos la cadena que se enviará al servidor MQTT
char payloadMQTT[30];

/**
 * Conecta con el servidor de MQTT (Mosquitto)
 */
void conectarMQTT() {
    if (!clienteMQTT.connected()) {
        Serial.print(&amp;quot;Conectando con el servidor MQTT en &amp;quot;);
        Serial.print(MQTT_SERVIDOR);

        boolean conectado = false;
        while (!conectado) {
            Serial.print(&amp;quot;.&amp;quot;);
            if (clienteMQTT.connect(MQTT_SERVIDOR, MQTT_USUARIO, MQTT_PWD)) {
                conectado = true;
                Serial.println();
                Serial.println(&amp;quot;Conectado&amp;quot;);
                //clienteMQTT.subscribe(MQTT_TOPICO);
            } else {
                delay(1000);
            }
        }
    }
}

/**
 * Configuración.
 * Se ejecuta sólo una vez, al iniciar el Arduino
 */
void setup() {
    // 1.- Inicializamos el puerto serie USB
    Serial.begin(9600);
    delay(100);
    Serial.println(&amp;quot;&amp;quot;);
    Serial.println(&amp;quot;&amp;quot;);
    Serial.println(&amp;quot;Lector de consumo eléctrico&amp;quot;);
    Serial.println();
    Serial.print(&amp;quot;Conectando con &amp;quot;);
    Serial.print(WIFI_SSID);

    // 2.- Inicializamos el módulo WIFI y nos conectamos al AP
    WiFi.persistent(false);
    WiFi.mode(WIFI_STA);
    WiFi.begin(WIFI_SSID, WIFI_PWD);

    // Establecemos un bucle de espera hasta que esté conectado...
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(&amp;quot;.&amp;quot;);
    }

    Serial.println();
    Serial.println(&amp;quot;Conectado.&amp;quot;);
    Serial.print(&amp;quot;IP: &amp;quot;);
    Serial.println(WiFi.localIP());

    // 3.- Nos conectamos al servidor MQTT
    clienteMQTT.setServer(MQTT_SERVIDOR, MQTT_PUERTO);

    // 4.- Inicializamos el LED
    pinMode(PIN_LED, OUTPUT);
    digitalWrite(PIN_LED, LOW);

    // 5.- Indicamos dónde está conectado el sensor de corriente (pin analógico A0) y el factor de calibración.
    emon1.current(A0, RatioTC / ResCarga * correccion);

    Serial.print(&amp;quot;Voltaje de alimentación: &amp;quot;);
    Serial.print((double) (emon1.readVcc() / 1000));
    Serial.println(&amp;quot;V&amp;quot;);

    // Hacemos una primera lectura que desechamos. La primera nunca es fiable
    emon1.calcIrms(14800);
}

/**
 * Bucle de ejecución
 * Se ejecuta una y otra vez hasta que se apague el NodeMCU
 */
void loop() {
    // 1.- Encendemos el LED antes de leer (extrañamente parece que los valores HIGH y LOW están invertidos en el esp8266)...
    digitalWrite(PIN_LED, LOW);

    if (!clienteMQTT.connected())
        conectarMQTT();

    clienteMQTT.loop();

    // 2.- Leemos la corriente efectiva y calculamos la potencia.
    double corriente = emon1.calcIrms(14800);
    double potencia = corriente * VoltajeLinea;

    Serial.print(&amp;quot;Corriente: &amp;quot;);
    Serial.print(corriente);
    Serial.println(&amp;quot; A&amp;quot;);

    Serial.print(&amp;quot;Potencia: &amp;quot;);
    Serial.print(potencia);
    Serial.println(&amp;quot; W&amp;quot;);

    // 3.- Lo mandamos al servidor de MQTT
    sprintf(payloadMQTT, &amp;quot;{\&amp;quot;corriente\&amp;quot; : %d.%03d,\&amp;quot;potencia\&amp;quot; : %d.%03d}&amp;quot;,
            (int) corriente, (int) (corriente * 1000) % 1000, (int) potencia,
            (int) (potencia * 1000) % 1000);
    Serial.print(&amp;quot;Payload: &amp;quot;);
    Serial.println(payloadMQTT);
    clienteMQTT.publish(MQTT_TOPICO, payloadMQTT);
    clienteMQTT.disconnect();

    // 4.- Volvemos a apagar el led hasta la próxima
    digitalWrite(PIN_LED, HIGH);

    // 5.- Esperamos un ratito
    delay(T_PAUSA * 1000);
}
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;&lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;/**
 * Lector de consumo energético con conexión Wifi a servidor MQTT
 * Isidoro Aguilar Baeza - Julio/Agosto 2017
 * Este script se ejecuta en dispositivos NodeMCU, no en Arduino
 *
 * Librerías utilizadas:
 *   - PubSubClient(MQTT): https://github.com/knolleary/pubsubclient
 *   - EmonLib: https://github.com/openenergymonitor/EmonLib
 */&lt;/span&gt;

&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;include&lt;/span&gt; "Arduino.h"&lt;/span&gt;
&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;include&lt;/span&gt; &amp;lt;ESP8266WiFi.h&amp;gt;&lt;/span&gt;
&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;include&lt;/span&gt; "lib/PubSubClient.h"&lt;/span&gt;
&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;include&lt;/span&gt; "lib/EmonLib.h"&lt;/span&gt;

&lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Configuración de pines&lt;/span&gt;
&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;define&lt;/span&gt; PIN_LED            2&lt;/span&gt;

&lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Configuración de WIFI&lt;/span&gt;
&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;define&lt;/span&gt; WIFI_SSID    "XXXXXX"               &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Nombre del AP Wifi&lt;/span&gt;&lt;/span&gt;
&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;define&lt;/span&gt; WIFI_PWD    "XXXXXX"            &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Contraseña para conectar&lt;/span&gt;&lt;/span&gt;
&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;define&lt;/span&gt; WIFI_BPS    9600                &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Velocidad del interfaz WIFI&lt;/span&gt;&lt;/span&gt;

&lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Configuración de MQTT&lt;/span&gt;
&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;define&lt;/span&gt; MQTT_SERVIDOR    "X.X.X.X"        &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Dirección IP del broker&lt;/span&gt;&lt;/span&gt;
&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;define&lt;/span&gt; MQTT_PUERTO        1883&lt;/span&gt;
&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;define&lt;/span&gt; MQTT_USUARIO    "XXXXXXXXXXXXX"    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Usuario de acceso&lt;/span&gt;&lt;/span&gt;
&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;define&lt;/span&gt; MQTT_PWD        "XXXXXXXXXXXXX"    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Contraseña&lt;/span&gt;&lt;/span&gt;
&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;define&lt;/span&gt; MQTT_CLIENTE    "sensorConsumo"    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Identificador de este cliente&lt;/span&gt;&lt;/span&gt;
&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;define&lt;/span&gt; MQTT_TOPICO        "micasa/potencia"    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Tópico en el que publicaremos&lt;/span&gt;&lt;/span&gt;

&lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Configuración eléctrica&lt;/span&gt;
&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;define&lt;/span&gt; RatioTC            2000    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Ratio del transformador&lt;/span&gt;&lt;/span&gt;
&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;define&lt;/span&gt; ResCarga        91        &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Resistencia de carga&lt;/span&gt;&lt;/span&gt;
&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;define&lt;/span&gt; correccion        1.145    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Factor de corrección adicional. Calculado empíricamente&lt;/span&gt;&lt;/span&gt;
&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;define&lt;/span&gt; VoltajeLinea    220        &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Voltaje típico de la línea&lt;/span&gt;&lt;/span&gt;
&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;define&lt;/span&gt; T_PAUSA            10        &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Intervalo entre medidas, en segundos&lt;/span&gt;&lt;/span&gt;

&lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Inicializamos el cliente Wifi y el MQTT&lt;/span&gt;
WiFiClient clienteESP;
&lt;span class="hljs-function"&gt;PubSubClient &lt;span class="hljs-title" style="color: rgb(38 , 139 , 210);"&gt;clienteMQTT&lt;/span&gt;&lt;span class="hljs-params"&gt;(clienteESP)&lt;/span&gt;&lt;/span&gt;;

&lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Declaramos un lector de consumo de la librería EmonLib&lt;/span&gt;
EnergyMonitor emon1;

&lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Declaramos la cadena que se enviará al servidor MQTT&lt;/span&gt;
&lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;char&lt;/span&gt; payloadMQTT[&lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;30&lt;/span&gt;];

&lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;/**
 * Conecta con el servidor de MQTT (Mosquitto)
 */&lt;/span&gt;
&lt;span class="hljs-function"&gt;&lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;void&lt;/span&gt; &lt;span class="hljs-title" style="color: rgb(38 , 139 , 210);"&gt;conectarMQTT&lt;/span&gt;&lt;span class="hljs-params"&gt;()&lt;/span&gt; &lt;/span&gt;{
    &lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;if&lt;/span&gt; (!clienteMQTT.connected()) {
        Serial.print(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;"Conectando con el servidor MQTT en "&lt;/span&gt;);
        Serial.print(MQTT_SERVIDOR);

        boolean conectado = &lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;false&lt;/span&gt;;
        &lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;while&lt;/span&gt; (!conectado) {
            Serial.print(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;"."&lt;/span&gt;);
            &lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;if&lt;/span&gt; (clienteMQTT.connect(MQTT_SERVIDOR, MQTT_USUARIO, MQTT_PWD)) {
                conectado = &lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;true&lt;/span&gt;;
                Serial.println();
                Serial.println(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;"Conectado"&lt;/span&gt;);
                &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;//clienteMQTT.subscribe(MQTT_TOPICO);&lt;/span&gt;
            } &lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;else&lt;/span&gt; {
                delay(&lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;1000&lt;/span&gt;);
            }
        }
    }
}

&lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;/**
 * Configuración.
 * Se ejecuta sólo una vez, al iniciar el Arduino
 */&lt;/span&gt;
&lt;span class="hljs-function"&gt;&lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;void&lt;/span&gt; &lt;span class="hljs-title" style="color: rgb(38 , 139 , 210);"&gt;setup&lt;/span&gt;&lt;span class="hljs-params"&gt;()&lt;/span&gt; &lt;/span&gt;{
    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// 1.- Inicializamos el puerto serie USB&lt;/span&gt;
    Serial.begin(&lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;9600&lt;/span&gt;);
    delay(&lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;100&lt;/span&gt;);
    Serial.println(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;""&lt;/span&gt;);
    Serial.println(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;""&lt;/span&gt;);
    Serial.println(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;"Lector de consumo eléctrico"&lt;/span&gt;);
    Serial.println();
    Serial.print(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;"Conectando con "&lt;/span&gt;);
    Serial.print(WIFI_SSID);

    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// 2.- Inicializamos el módulo WIFI y nos conectamos al AP&lt;/span&gt;
    WiFi.persistent(&lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;false&lt;/span&gt;);
    WiFi.mode(WIFI_STA);
    WiFi.begin(WIFI_SSID, WIFI_PWD);

    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Establecemos un bucle de espera hasta que esté conectado...&lt;/span&gt;
    &lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;while&lt;/span&gt; (WiFi.status() != WL_CONNECTED) {
        delay(&lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;500&lt;/span&gt;);
        Serial.print(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;"."&lt;/span&gt;);
    }

    Serial.println();
    Serial.println(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;"Conectado."&lt;/span&gt;);
    Serial.print(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;"IP: "&lt;/span&gt;);
    Serial.println(WiFi.localIP());

    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// 3.- Nos conectamos al servidor MQTT&lt;/span&gt;
    clienteMQTT.setServer(MQTT_SERVIDOR, MQTT_PUERTO);

    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// 4.- Inicializamos el LED&lt;/span&gt;
    pinMode(PIN_LED, OUTPUT);
    digitalWrite(PIN_LED, LOW);

    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// 5.- Indicamos dónde está conectado el sensor de corriente (pin analógico A0) y el factor de calibración.&lt;/span&gt;
    emon1.current(A0, RatioTC / ResCarga * correccion);

    Serial.print(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;"Voltaje de alimentación: "&lt;/span&gt;);
    Serial.print((&lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;double&lt;/span&gt;) (emon1.readVcc() / &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;1000&lt;/span&gt;));
    Serial.println(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;"V"&lt;/span&gt;);

    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Hacemos una primera lectura que desechamos. La primera nunca es fiable&lt;/span&gt;
    emon1.calcIrms(&lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;14800&lt;/span&gt;);
}

&lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;/**
 * Bucle de ejecución
 * Se ejecuta una y otra vez hasta que se apague el NodeMCU
 */&lt;/span&gt;
&lt;span class="hljs-function"&gt;&lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;void&lt;/span&gt; &lt;span class="hljs-title" style="color: rgb(38 , 139 , 210);"&gt;loop&lt;/span&gt;&lt;span class="hljs-params"&gt;()&lt;/span&gt; &lt;/span&gt;{
    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// 1.- Encendemos el LED antes de leer (extrañamente parece que los valores HIGH y LOW están invertidos en el esp8266)...&lt;/span&gt;
    digitalWrite(PIN_LED, LOW);

    &lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;if&lt;/span&gt; (!clienteMQTT.connected())
        conectarMQTT();

    clienteMQTT.loop();

    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// 2.- Leemos la corriente efectiva y calculamos la potencia.&lt;/span&gt;
    &lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;double&lt;/span&gt; corriente = emon1.calcIrms(&lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;14800&lt;/span&gt;);
    &lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;double&lt;/span&gt; potencia = corriente * VoltajeLinea;

    Serial.print(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;"Corriente: "&lt;/span&gt;);
    Serial.print(corriente);
    Serial.println(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;" A"&lt;/span&gt;);

    Serial.print(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;"Potencia: "&lt;/span&gt;);
    Serial.print(potencia);
    Serial.println(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;" W"&lt;/span&gt;);

    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// 3.- Lo mandamos al servidor de MQTT&lt;/span&gt;
    &lt;span class="hljs-built_in" style="color: rgb(38 , 139 , 210);"&gt;sprintf&lt;/span&gt;(payloadMQTT, &lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;"{\"corriente\" : %d.%03d,\"potencia\" : %d.%03d}"&lt;/span&gt;,
            (&lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;int&lt;/span&gt;) corriente, (&lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;int&lt;/span&gt;) (corriente * &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;1000&lt;/span&gt;) % &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;1000&lt;/span&gt;, (&lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;int&lt;/span&gt;) potencia,
            (&lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;int&lt;/span&gt;) (potencia * &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;1000&lt;/span&gt;) % &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;1000&lt;/span&gt;);
    Serial.print(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;"Payload: "&lt;/span&gt;);
    Serial.println(payloadMQTT);
    clienteMQTT.publish(MQTT_TOPICO, payloadMQTT);
    clienteMQTT.disconnect();

    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// 4.- Volvemos a apagar el led hasta la próxima&lt;/span&gt;
    digitalWrite(PIN_LED, HIGH);

    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// 5.- Esperamos un ratito&lt;/span&gt;
    delay(T_PAUSA * &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;1000&lt;/span&gt;);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Varias cosas que destacar en este código:&lt;/div&gt;
&lt;ol style="list-style-type: decimal;"&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Los ejemplos de EmonLib para Arduino siempre utilizan un muestreo de &lt;b&gt;1480&lt;/b&gt;. Como yo estoy utilizando un ESP8266 que va a 80 Mhz (en lugar de los 8Mhz del Arduino Pro Mini), he multiplicado por 10 el tamaño de la muestra. Tarda más en obtener la corriente pero es bastante más estable que en el ejemplo que vimos en &lt;a href="http://nanolec.blogspot.com.es/2017/08/sensor-consumo-electrico-homeassistant-2.html" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;la entrada anterior&lt;/a&gt;.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Además, en mis experimentos he observado que cuando se comienzan a hacer lecturas mediante llamadas al método &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;calcIrms&lt;/code&gt;, la primera vez da un valor extrañamente alto, aún sin carga. Por tanto, he hecho una primera llamada en la función &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;setup&lt;/code&gt; que simplemente descarto.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Para el parámetro de calibración, además del ratio del transformador y el valor de la resistencia de carga, he utilizado un &lt;b&gt;factor de corrección&lt;/b&gt; basándome en la comparación de las lecturas obtenidas al medir el consumo de una lámpara de 300W. Lo he corregido para que las lecturas se acerquen en lo posible a dicho valor, aunque quizá no sea buena idea. Lo ideal es medir con una pinza amperimétrica profesional y comparar con nuestras lecturas, aplicando entonces la corrección necesaria.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Otro parámetro a tener en cuenta es el voltaje de la línea. Debemos utilizar un valor medio, aún cuando sabemos que el voltaje no es algo estable en una instalación. En mi casa oscila entre los 208V y los 234V, con lo cual he elegido &lt;b&gt;220V&lt;/b&gt; como el valor medio. Lo ideal sería leer el voltaje instantáneo, pero para eso necesitaríamos otro tipo de sensor.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;La conexión con la Wifi y con el servidor de MQTT entrarán en un bucle infinito en caso de no poder conectarse, con lo cual quizá hubiera que optimizar algo aquí.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="optimizaciones" style="clear: both; color: rgb(92 , 81 , 70); font-size: 1.6em; font-weight: 400; font-weight: bold; letter-spacing: -1px; margin: 1.125em 0px 0.75em;"&gt;
Optimizaciones&lt;/h3&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
Este es el código estándar que se utilizaría en un Arduino: una función setup que se encarga de las inicializaciones, y otra función loop que se repite de forma infinita hasta que el dispositivo se apaga. Las lecturas en este caso se hacen en dicha función y se espacian unos 10 segundos (más el tiempo de lectura). En esta configuración, el código funciona bastante bien, pero el consumo es algo alto si vamos a funcionar con una batería.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Siendo optimista, una batería &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;18650&lt;/code&gt; de las que he comprado (en Amazon) podría tener unos &lt;b&gt;2700 mAh&lt;/b&gt; de capacidad, aunque estén marcados como de 3000. &lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
He medido el consumo del circuito (aquí es donde me cargué el primer &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;D1 mini&lt;/code&gt;) y, mientras está muestreando, el consumo es de unos 70-74 mA. Cuando el programa pasa a la espera, el consumo baja a unos 18-20 mA. Si hacemos la media, nos sale un consumo medio de unos &lt;b&gt;38 mA&lt;/b&gt;. Esto quiere decir que una batería nos duraría:&lt;/div&gt;
&lt;pre style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); overflow: auto; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code data-origin="&amp;lt;pre&amp;gt;&amp;lt;code&amp;gt;2700 mAh / 38 mA = 71 h = 2,9 días
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;2700 mAh / 38 mA = 71 h = 2,9 días
&lt;/code&gt;&lt;/pre&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Esto está muy bien para una prueba, pero no me veo cambiando la batería del lector cada 3 días. Así que habrá que hacer algo: algo que se llama &lt;b&gt;deep sleep&lt;/b&gt; (sueño profundo).&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
El &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;ESP8266&lt;/code&gt; tiene este modo de funcionamiento que es prácticamente “&lt;i&gt;catatónico&lt;/i&gt;“: toda la electrónica se apaga excepto un pequeño temporizador establecido por el programa. El truco consiste en que, al iniciar el temporizador, se le indica al &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;ESP&lt;/code&gt; que active un puerto concreto, normalmente el &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;D0&lt;/code&gt;. Si el &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;D0&lt;/code&gt; lo conectamos al pin de &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;RESET&lt;/code&gt;, el resultado es que al terminar el temporizador, el &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;ESP&lt;/code&gt; se reinicia y ejecuta de nuevo la función &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;setup&lt;/code&gt;.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Por tanto, habría que modificar el programa para que toda la lógica transcurra en el &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;setup&lt;/code&gt; y no en el &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;loop&lt;/code&gt;. Una vez que tengamos una lectura válida y la hayamos enviado al servidor MQTT, nos echaremos a dormir un ratito en modo deep sleep.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
En este modo el consumo baja drásticamente. En teoría, en un dispositivo puro sin electrónica añadida debería bajar al orden de microAmperios en vez de miliAmperios. Lógicamente, la unidad que estamos usando (D1 mini) tiene electrónica para el puerto USB, para el regulador de tensión, etc. Aún así, modifiquemos el código y veamos qué tal el consumo:&lt;/div&gt;
&lt;pre style="background: rgb(0 , 43 , 54); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(131 , 148 , 150); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="cpp" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;cpp&amp;quot;&amp;gt;/**
 * Lector de consumo energético con conexión Wifi a servidor MQTT
 * Isidoro Aguilar Baeza - Julio/Agosto 2017
 * Este script se ejecuta en dispositivos NodeMCU, no en Arduino
 *
 * Librerías utilizadas:
 *   - PubSubClient(MQTT): https://github.com/knolleary/pubsubclient
 *   - EmonLib: https://github.com/openenergymonitor/EmonLib
 */

#include &amp;quot;Arduino.h&amp;quot;
#include &amp;amp;lt;ESP8266WiFi.h&amp;amp;gt;
#include &amp;quot;lib/PubSubClient.h&amp;quot;
#include &amp;quot;lib/EmonLib.h&amp;quot;

// Configuración de pines
#define PIN_LED            2

// Configuración de WIFI
#define WIFI_SSID    &amp;quot;XXXXXX&amp;quot;               // Nombre del AP Wifi
#define WIFI_PWD    &amp;quot;XXXXXX&amp;quot;            // Contraseña para conectar
#define WIFI_BPS    9600                // Velocidad del interfaz WIFI

// Configuración de MQTT
#define MQTT_SERVIDOR    &amp;quot;X.X.X.X&amp;quot;        // Dirección IP del broker
#define MQTT_PUERTO        1883
#define MQTT_USUARIO    &amp;quot;XXXXXXXXXXXXX&amp;quot;    // Usuario de acceso
#define MQTT_PWD        &amp;quot;XXXXXXXXXXXXX&amp;quot;    // Contraseña
#define MQTT_CLIENTE    &amp;quot;sensorConsumo&amp;quot;    // Identificador de este cliente
#define MQTT_TOPICO        &amp;quot;micasa/potencia&amp;quot;    // Tópico en el que publicaremos

// Configuración eléctrica
#define RatioTC            2000    // Ratio del transformador
#define ResCarga        91        // Resistencia de carga
#define correccion        1.145    // Factor de corrección adicional. Calculado empíricamente
#define VoltajeLinea    220        // Voltaje típico de la línea
#define T_PAUSA            55        // Intervalo entre medidas, en segundos

// Inicializamos el cliente Wifi y el MQTT
WiFiClient clienteESP;
PubSubClient clienteMQTT(clienteESP);

// Declaramos un lector de consumo de la librería EmonLib
EnergyMonitor emon1;

// Declaramos la cadena que se enviará al servidor MQTT
char payloadMQTT[30];

/**
 * Conecta con el servidor de MQTT (Mosquitto)
 */
void conectarMQTT() {
    if (!clienteMQTT.connected()) {
        Serial.print(&amp;quot;Conectando con el servidor MQTT en &amp;quot;);
        Serial.print(MQTT_SERVIDOR);

        boolean conectado = false;
        while (!conectado) {
            Serial.print(&amp;quot;.&amp;quot;);
            if (clienteMQTT.connect(MQTT_SERVIDOR, MQTT_USUARIO, MQTT_PWD)) {
                conectado = true;
                Serial.println();
                Serial.println(&amp;quot;Conectado&amp;quot;);
                //clienteMQTT.subscribe(MQTT_TOPICO);
            } else {
                delay(1000);
            }
        }
    }
}

/**
 * Configuración.
 * Se ejecuta sólo una vez, al iniciar el Arduino
 */
void setup() {
    // 1.- Inicializamos el puerto serie USB
    Serial.begin(9600);
    delay(100);
    Serial.println(&amp;quot;&amp;quot;);
    Serial.println(&amp;quot;&amp;quot;);
    Serial.println(&amp;quot;Lector de consumo eléctrico&amp;quot;);
    Serial.println();
    Serial.print(&amp;quot;Conectando con &amp;quot;);
    Serial.print(WIFI_SSID);

    // 2.- Inicializamos el módulo WIFI y nos conectamos al AP
    WiFi.persistent(false);
    WiFi.mode(WIFI_STA);
    WiFi.begin(WIFI_SSID, WIFI_PWD);

    // Establecemos un bucle de espera hasta que esté conectado...
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(&amp;quot;.&amp;quot;);
    }

    Serial.println();
    Serial.println(&amp;quot;Conectado.&amp;quot;);
    Serial.print(&amp;quot;IP: &amp;quot;);
    Serial.println(WiFi.localIP());

    // 3.- Nos conectamos al servidor MQTT
    clienteMQTT.setServer(MQTT_SERVIDOR, MQTT_PUERTO);

    // 4.- Inicializamos el LED
    pinMode(PIN_LED, OUTPUT);
    digitalWrite(PIN_LED, LOW);

    // 5.- Indicamos dónde está conectado el sensor de corriente (pin analógico A0) y el factor de calibración.
    emon1.current(A0, RatioTC / ResCarga * correccion);

    Serial.print(&amp;quot;Voltaje de alimentación: &amp;quot;);
    Serial.print((double) (emon1.readVcc() / 1000));
    Serial.println(&amp;quot;V&amp;quot;);

    // Hacemos una primera lectura que desechamos. La primera nunca es fiable
    emon1.calcIrms(14800);

    // 6.- Encendemos el LED antes de leer (extrañamente parece que los valores HIGH y LOW están invertidos en el esp8266)...
    digitalWrite(PIN_LED, LOW);

    if (!clienteMQTT.connected())
        conectarMQTT();

    clienteMQTT.loop();

    // 7.- Leemos la corriente efectiva y calculamos la potencia.
    double corriente = emon1.calcIrms(14800);
    double potencia = corriente * VoltajeLinea;

    Serial.print(&amp;quot;Corriente: &amp;quot;);
    Serial.print(corriente);
    Serial.println(&amp;quot; A&amp;quot;);

    Serial.print(&amp;quot;Potencia: &amp;quot;);
    Serial.print(potencia);
    Serial.println(&amp;quot; W&amp;quot;);

    // 8.- Lo mandamos al servidor de MQTT
    sprintf(payloadMQTT, &amp;quot;{\&amp;quot;corriente\&amp;quot; : %d.%03d,\&amp;quot;potencia\&amp;quot; : %d.%03d}&amp;quot;,
            (int) corriente, (int) (corriente * 1000) % 1000, (int) potencia,
            (int) (potencia * 1000) % 1000);
    Serial.print(&amp;quot;Payload: &amp;quot;);
    Serial.println(payloadMQTT);
    clienteMQTT.publish(MQTT_TOPICO, payloadMQTT);
    clienteMQTT.disconnect();

    // 9.- Volvemos a apagar el led hasta la próxima
    digitalWrite(PIN_LED, HIGH);

    // 10.- Finalmente, nos vamos a dormir
    pinMode(D0, WAKEUP_PULLUP);        // D0 conectada a RST
    ESP.deepSleep(T_PAUSA * 1000000);    // Establecemos el temporizador
    delay(100);        // Normalmente no se ejecutará, pero a veces es necesario.
}

/**
 * Bucle de ejecución
 * Se ejecuta una y otra vez hasta que se apague el NodeMCU
 */
void loop() {
}
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;&lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;/**
 * Lector de consumo energético con conexión Wifi a servidor MQTT
 * Isidoro Aguilar Baeza - Julio/Agosto 2017
 * Este script se ejecuta en dispositivos NodeMCU, no en Arduino
 *
 * Librerías utilizadas:
 *   - PubSubClient(MQTT): https://github.com/knolleary/pubsubclient
 *   - EmonLib: https://github.com/openenergymonitor/EmonLib
 */&lt;/span&gt;

&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;include&lt;/span&gt; "Arduino.h"&lt;/span&gt;
&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;include&lt;/span&gt; &amp;lt;ESP8266WiFi.h&amp;gt;&lt;/span&gt;
&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;include&lt;/span&gt; "lib/PubSubClient.h"&lt;/span&gt;
&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;include&lt;/span&gt; "lib/EmonLib.h"&lt;/span&gt;

&lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Configuración de pines&lt;/span&gt;
&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;define&lt;/span&gt; PIN_LED            2&lt;/span&gt;

&lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Configuración de WIFI&lt;/span&gt;
&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;define&lt;/span&gt; WIFI_SSID    "XXXXXX"               &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Nombre del AP Wifi&lt;/span&gt;&lt;/span&gt;
&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;define&lt;/span&gt; WIFI_PWD    "XXXXXX"            &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Contraseña para conectar&lt;/span&gt;&lt;/span&gt;
&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;define&lt;/span&gt; WIFI_BPS    9600                &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Velocidad del interfaz WIFI&lt;/span&gt;&lt;/span&gt;

&lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Configuración de MQTT&lt;/span&gt;
&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;define&lt;/span&gt; MQTT_SERVIDOR    "X.X.X.X"        &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Dirección IP del broker&lt;/span&gt;&lt;/span&gt;
&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;define&lt;/span&gt; MQTT_PUERTO        1883&lt;/span&gt;
&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;define&lt;/span&gt; MQTT_USUARIO    "XXXXXXXXXXXXX"    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Usuario de acceso&lt;/span&gt;&lt;/span&gt;
&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;define&lt;/span&gt; MQTT_PWD        "XXXXXXXXXXXXX"    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Contraseña&lt;/span&gt;&lt;/span&gt;
&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;define&lt;/span&gt; MQTT_CLIENTE    "sensorConsumo"    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Identificador de este cliente&lt;/span&gt;&lt;/span&gt;
&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;define&lt;/span&gt; MQTT_TOPICO        "micasa/potencia"    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Tópico en el que publicaremos&lt;/span&gt;&lt;/span&gt;

&lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Configuración eléctrica&lt;/span&gt;
&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;define&lt;/span&gt; RatioTC            2000    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Ratio del transformador&lt;/span&gt;&lt;/span&gt;
&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;define&lt;/span&gt; ResCarga        91        &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Resistencia de carga&lt;/span&gt;&lt;/span&gt;
&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;define&lt;/span&gt; correccion        1.145    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Factor de corrección adicional. Calculado empíricamente&lt;/span&gt;&lt;/span&gt;
&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;define&lt;/span&gt; VoltajeLinea    220        &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Voltaje típico de la línea&lt;/span&gt;&lt;/span&gt;
&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#&lt;span class="hljs-keyword" style="color: rgb(203 , 75 , 22);"&gt;define&lt;/span&gt; T_PAUSA            55        &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Intervalo entre medidas, en segundos&lt;/span&gt;&lt;/span&gt;

&lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Inicializamos el cliente Wifi y el MQTT&lt;/span&gt;
WiFiClient clienteESP;
&lt;span class="hljs-function"&gt;PubSubClient &lt;span class="hljs-title" style="color: rgb(38 , 139 , 210);"&gt;clienteMQTT&lt;/span&gt;&lt;span class="hljs-params"&gt;(clienteESP)&lt;/span&gt;&lt;/span&gt;;

&lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Declaramos un lector de consumo de la librería EmonLib&lt;/span&gt;
EnergyMonitor emon1;

&lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Declaramos la cadena que se enviará al servidor MQTT&lt;/span&gt;
&lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;char&lt;/span&gt; payloadMQTT[&lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;30&lt;/span&gt;];

&lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;/**
 * Conecta con el servidor de MQTT (Mosquitto)
 */&lt;/span&gt;
&lt;span class="hljs-function"&gt;&lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;void&lt;/span&gt; &lt;span class="hljs-title" style="color: rgb(38 , 139 , 210);"&gt;conectarMQTT&lt;/span&gt;&lt;span class="hljs-params"&gt;()&lt;/span&gt; &lt;/span&gt;{
    &lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;if&lt;/span&gt; (!clienteMQTT.connected()) {
        Serial.print(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;"Conectando con el servidor MQTT en "&lt;/span&gt;);
        Serial.print(MQTT_SERVIDOR);

        boolean conectado = &lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;false&lt;/span&gt;;
        &lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;while&lt;/span&gt; (!conectado) {
            Serial.print(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;"."&lt;/span&gt;);
            &lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;if&lt;/span&gt; (clienteMQTT.connect(MQTT_SERVIDOR, MQTT_USUARIO, MQTT_PWD)) {
                conectado = &lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;true&lt;/span&gt;;
                Serial.println();
                Serial.println(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;"Conectado"&lt;/span&gt;);
                &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;//clienteMQTT.subscribe(MQTT_TOPICO);&lt;/span&gt;
            } &lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;else&lt;/span&gt; {
                delay(&lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;1000&lt;/span&gt;);
            }
        }
    }
}

&lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;/**
 * Configuración.
 * Se ejecuta sólo una vez, al iniciar el Arduino
 */&lt;/span&gt;
&lt;span class="hljs-function"&gt;&lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;void&lt;/span&gt; &lt;span class="hljs-title" style="color: rgb(38 , 139 , 210);"&gt;setup&lt;/span&gt;&lt;span class="hljs-params"&gt;()&lt;/span&gt; &lt;/span&gt;{
    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// 1.- Inicializamos el puerto serie USB&lt;/span&gt;
    Serial.begin(&lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;9600&lt;/span&gt;);
    delay(&lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;100&lt;/span&gt;);
    Serial.println(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;""&lt;/span&gt;);
    Serial.println(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;""&lt;/span&gt;);
    Serial.println(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;"Lector de consumo eléctrico"&lt;/span&gt;);
    Serial.println();
    Serial.print(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;"Conectando con "&lt;/span&gt;);
    Serial.print(WIFI_SSID);

    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// 2.- Inicializamos el módulo WIFI y nos conectamos al AP&lt;/span&gt;
    WiFi.persistent(&lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;false&lt;/span&gt;);
    WiFi.mode(WIFI_STA);
    WiFi.begin(WIFI_SSID, WIFI_PWD);

    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Establecemos un bucle de espera hasta que esté conectado...&lt;/span&gt;
    &lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;while&lt;/span&gt; (WiFi.status() != WL_CONNECTED) {
        delay(&lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;500&lt;/span&gt;);
        Serial.print(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;"."&lt;/span&gt;);
    }

    Serial.println();
    Serial.println(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;"Conectado."&lt;/span&gt;);
    Serial.print(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;"IP: "&lt;/span&gt;);
    Serial.println(WiFi.localIP());

    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// 3.- Nos conectamos al servidor MQTT&lt;/span&gt;
    clienteMQTT.setServer(MQTT_SERVIDOR, MQTT_PUERTO);

    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// 4.- Inicializamos el LED&lt;/span&gt;
    pinMode(PIN_LED, OUTPUT);
    digitalWrite(PIN_LED, LOW);

    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// 5.- Indicamos dónde está conectado el sensor de corriente (pin analógico A0) y el factor de calibración.&lt;/span&gt;
    emon1.current(A0, RatioTC / ResCarga * correccion);

    Serial.print(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;"Voltaje de alimentación: "&lt;/span&gt;);
    Serial.print((&lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;double&lt;/span&gt;) (emon1.readVcc() / &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;1000&lt;/span&gt;));
    Serial.println(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;"V"&lt;/span&gt;);

    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Hacemos una primera lectura que desechamos. La primera nunca es fiable&lt;/span&gt;
    emon1.calcIrms(&lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;14800&lt;/span&gt;);

    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// 6.- Encendemos el LED antes de leer (extrañamente parece que los valores HIGH y LOW están invertidos en el esp8266)...&lt;/span&gt;
    digitalWrite(PIN_LED, LOW);

    &lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;if&lt;/span&gt; (!clienteMQTT.connected())
        conectarMQTT();

    clienteMQTT.loop();

    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// 7.- Leemos la corriente efectiva y calculamos la potencia.&lt;/span&gt;
    &lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;double&lt;/span&gt; corriente = emon1.calcIrms(&lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;14800&lt;/span&gt;);
    &lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;double&lt;/span&gt; potencia = corriente * VoltajeLinea;

    Serial.print(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;"Corriente: "&lt;/span&gt;);
    Serial.print(corriente);
    Serial.println(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;" A"&lt;/span&gt;);

    Serial.print(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;"Potencia: "&lt;/span&gt;);
    Serial.print(potencia);
    Serial.println(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;" W"&lt;/span&gt;);

    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// 8.- Lo mandamos al servidor de MQTT&lt;/span&gt;
    &lt;span class="hljs-built_in" style="color: rgb(38 , 139 , 210);"&gt;sprintf&lt;/span&gt;(payloadMQTT, &lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;"{\"corriente\" : %d.%03d,\"potencia\" : %d.%03d}"&lt;/span&gt;,
            (&lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;int&lt;/span&gt;) corriente, (&lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;int&lt;/span&gt;) (corriente * &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;1000&lt;/span&gt;) % &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;1000&lt;/span&gt;, (&lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;int&lt;/span&gt;) potencia,
            (&lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;int&lt;/span&gt;) (potencia * &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;1000&lt;/span&gt;) % &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;1000&lt;/span&gt;);
    Serial.print(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;"Payload: "&lt;/span&gt;);
    Serial.println(payloadMQTT);
    clienteMQTT.publish(MQTT_TOPICO, payloadMQTT);
    clienteMQTT.disconnect();

    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// 9.- Volvemos a apagar el led hasta la próxima&lt;/span&gt;
    digitalWrite(PIN_LED, HIGH);

    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// 10.- Finalmente, nos vamos a dormir&lt;/span&gt;
    pinMode(D0, WAKEUP_PULLUP);        &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// D0 conectada a RST&lt;/span&gt;
    ESP.deepSleep(T_PAUSA * &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;1000000&lt;/span&gt;);    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Establecemos el temporizador&lt;/span&gt;
    delay(&lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;100&lt;/span&gt;);        &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Normalmente no se ejecutará, pero a veces es necesario.&lt;/span&gt;
}

&lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;/**
 * Bucle de ejecución
 * Se ejecuta una y otra vez hasta que se apague el NodeMCU
 */&lt;/span&gt;
&lt;span class="hljs-function"&gt;&lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;void&lt;/span&gt; &lt;span class="hljs-title" style="color: rgb(38 , 139 , 210);"&gt;loop&lt;/span&gt;&lt;span class="hljs-params"&gt;()&lt;/span&gt; &lt;/span&gt;{
}
&lt;/code&gt;&lt;/pre&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Una vez modificado el código, las lecturas de consumo son las siguientes:&lt;/div&gt;
&lt;ul&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Unos &lt;b&gt;75 mA&lt;/b&gt; durante la lectura (5s).&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;b&gt;0.46 mA&lt;/b&gt; en deep Sleep (55s).&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Haciendo la media:&lt;/div&gt;
&lt;pre style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); overflow: auto; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code data-origin="&amp;lt;pre&amp;gt;&amp;lt;code&amp;gt;((5 x 75 mA) + (55 x 0,46 mA)) / 60 = 6,67 mA
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;((5 x 75 mA) + (55 x 0,46 mA)) / 60 = 6,67 mA
&lt;/code&gt;&lt;/pre&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Luego, la duración de la batería ahora sería de:&lt;/div&gt;
&lt;pre style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); overflow: auto; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code data-origin="&amp;lt;pre&amp;gt;&amp;lt;code&amp;gt;2700 mAh / 6,67 mA = 404,80 h = 16.86 días
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;2700 mAh / 6,67 mA = 404,80 h = 16.86 días
&lt;/code&gt;&lt;/pre&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
No está nada mal, la verdad. Pero a lo mejor no necesitamos tener lecturas cada minuto. Veamos qué pasa si las hacemos cada 3 minutos:&lt;/div&gt;
&lt;pre style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); overflow: auto; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code data-origin="&amp;lt;pre&amp;gt;&amp;lt;code&amp;gt;((5 x 75 mA) + (175 x 0,46 mA)) / 180 = 2,53 mA
2700 mAh / 2,53 mA = 1067,19 h = 44,46 días
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;((5 x 75 mA) + (175 x 0,46 mA)) / 180 = 2,53 mA
2700 mAh / 2,53 mA = 1067,19 h = 44,46 días
&lt;/code&gt;&lt;/pre&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Pues decidido: vamos a hacer las lecturas con un intervalo de unos &lt;b&gt;3 minutos&lt;/b&gt;, con lo cual la batería nos debería durar sobre mes y medio. No pasa nada porque es recargable, así nos entretenemos.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Por tanto, sólo habría que cambiar el parámetro &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;T_PAUSA&lt;/code&gt; por el valor 175 y volver a subir el programa al dispositivo, conectarlo todo y probar.&lt;/div&gt;
&lt;h2 id="montaje-f-sico" style="border-bottom-color: rgb(230 , 230 , 230); border-bottom-style: solid; border-bottom-width: 1px; clear: both; color: rgb(92 , 81 , 70); font-size: 1.8em; font-weight: 400; font-weight: bold; letter-spacing: -1px; line-height: 1.7em; margin: 1.275em 0px 0.85em;"&gt;
Montaje físico&lt;/h2&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
El montaje físico habría que realizarlo lo más cerca posible de la toma general de la casa, colocando el sensor CT013 alrededor de un sólo cable: o el vivo o el neutro (nunca la tierra). Un buen lugar para coloclarlo sería en la caja para el ICP, aunque ello nos obligaría a abrirla cada vez que queramos cambiar la batería.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
En mi caso, lo he colocado de esta manera en una caja de conexiones que tenía cerca del cuadro general:&lt;/div&gt;
&lt;center&gt;
&lt;img alt="Montaje en pared" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoHnqrkgtI32wRGyxLbZV3XyToeejOcrZDZRk08_3_GYLjpkv-DtR8Fi5uU1hZcJ0pgWDcUBNDmCohRAPH1TpVg6ch7CGQBK1CAr_upOAQXUiEr7TczdM22HvUc9L55hQr2Pewscip81A/s400/IMG_20170806_163539.jpg" style="max-width: 100%;" /&gt;&lt;/center&gt;
&lt;h2 id="conexi-n-con-homeassistant" style="border-bottom-color: rgb(230 , 230 , 230); border-bottom-style: solid; border-bottom-width: 1px; clear: both; color: rgb(92 , 81 , 70); font-size: 1.8em; font-weight: 400; font-weight: bold; letter-spacing: -1px; line-height: 1.7em; margin: 1.275em 0px 0.85em;"&gt;
Conexión con HomeAssistant&lt;/h2&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
Bueno, pues ya tenemos nuestro dispositivo leyendo la corriente y la potencia de nuestra casa y enviando los datos cada 3 minutos al servidor MQTT.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Ahora lo que nos queda es configurar un sensor en HomeAssistant para poder leer y mostrar los valores.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
La configuración es muy fácil. En nuestro fichero &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;configuration.yaml&lt;/code&gt; deberíamos activar el protocolo mqtt y deberíamos definir (en el mismo &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;configuration.yaml&lt;/code&gt; o en &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;sensors.yaml&lt;/code&gt;) un sensor para el tópico en el que estamos publicando los datos.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
La configuración debería quedar parecida a esta:&lt;/div&gt;
&lt;pre style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); overflow: auto; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="yaml" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;yaml&amp;quot;&amp;gt;mqtt:
  discovery: true
  broker: X.X.X.X
  port: 1883

sensor:
  - platform: mqtt
    name: Consumo Global
    state_topic: &amp;quot;micasa/potencia&amp;quot;
    unit_of_measurement: &amp;quot;kW&amp;quot;
    value_template: '{{ &amp;quot;%0.2f&amp;quot; | format((value_json.potencia | float) / 1000 ) }}'
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;mqtt:
  discovery: true
  broker: X.X.X.X
  port: 1883

sensor:
  - platform: mqtt
    name: Consumo Global
    state_topic: "micasa/potencia"
    unit_of_measurement: "kW"
    value_template: '{{ "%0.2f" | format((value_json.potencia | float) / 1000 ) }}'
&lt;/code&gt;&lt;/pre&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Yo lo he configurado para que muestre la potencia en &lt;b&gt;kilovatios&lt;/b&gt;, redondeándolo a 2 decimales. Si alguien quiere mostrar el valor en &lt;b&gt;vatios&lt;/b&gt;, tal como viene del lector, tan sólo bastaría con cambiar la última línea por:&lt;/div&gt;
&lt;pre style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); overflow: auto; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="yaml" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;yaml&amp;quot;&amp;gt;    value_template: '{{ value_json.potencia  }}'
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;    value_template: '{{ value_json.potencia  }}'
&lt;/code&gt;&lt;/pre&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Finalmente, el aspecto que tiene el sensor cuando lo vemos en HomeAssistant es el siguiente:&lt;/div&gt;
&lt;center&gt;
&lt;img alt="HA Consumo" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiR69T5vFvSb7i5e2cYl0eS8A7Y2XkHWQWTYkVfQUyBaWuHaBgrmonFualvM7tLC1QO5J6ciIiT0dG-PPuKWF-tJbBMK5tK1OXlWn755WyOujKZVHqxVW7V-oqXgDCQjaMW6k1-2rWhhuk/s400/ha_consumo.jpg" style="max-width: 100%;" /&gt;&lt;/center&gt;
&lt;h2 id="conclusi-n" style="border-bottom-color: rgb(230 , 230 , 230); border-bottom-style: solid; border-bottom-width: 1px; clear: both; color: rgb(92 , 81 , 70); font-size: 1.8em; font-weight: 400; font-weight: bold; letter-spacing: -1px; line-height: 1.7em; margin: 1.275em 0px 0.85em;"&gt;
Conclusión&lt;/h2&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
A lo largo de estas tres entradas hemos construido un sensor de &lt;i&gt;potencia efectiva&lt;/i&gt; que nos permite consultar en HomeAssistant la potencia aproximada que se está consumiendo actualmente en toda la casa. Además del circuito eléctrico, hemos creado un pequeño programa que se ejecuta en un dispositivo inalámbrico basado en &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;ESP8266&lt;/code&gt; cada tres minutos y el resto del tiempo permanece dormido. Hemos conectado los datos del dispositivo con un servidor de mensajería &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;MQTT&lt;/code&gt; y hemos conseguido visualizar los datos en HomeAssistant.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Para el montaje, hemos utilizado los siguientes &lt;b&gt;componentes&lt;/b&gt;:&lt;/div&gt;
&lt;ul&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;1 transformador de corriente SCT013-000. Comprado &lt;a href="https://www.aliexpress.com/item/SCT-013-000-Non-invasive-AC-Current-Sensor-Split-Core-Transformer-100A-for-Arduino/32702687361.html" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;en Aliexpress&lt;/a&gt; por unos 5€.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;1 dispositivo inalámbrico D1 mini. Comprado &lt;a href="https://www.aliexpress.com/item/ESP8266-ESP-12-USB-WeMos-D1-Mini-WIFI-Development-Board-D1-Mini-NodeMCU-Lua-IOT-Board/32673300492.html?spm=a2g0s.9042311.0.0.Cl2y6h" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;en Aliexpress&lt;/a&gt; por unos 2,50€.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;1 condensador de 10 uF y 25V. Comprado en la tienda de electróncia de la esquina.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;2 resistencias de 1/4W y 4,7KΩ.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;2 resistencias de 1/4W y 22Ω.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;1 resistencia de 1/4W y 47Ω.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Placa de montaje y zócalos.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Entre el condensador y las resistencias no llegan al euro. Lo que sí es importante es comprar resistencias buenas, con una precisión alta. Para el primer montaje que hice utilicé unas resistencias que compré en Aliexpress baratísimas pero que resultaron ser desastrosas. Los voltajes del divisor de tensión no cuadraban y los valores del lector no tenían sentido.&lt;/div&gt;
&lt;/div&gt;
</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDfBD_5DjG6myOgsOSJH8Sjq5mMY8iwf-74CzR22fgTm-SaaPeJfbPZSnpzlw3p1jIJgXFvYAEu1mM0k10fCGYhsb4LUGONLpzx5Ce-jpLwQv1JC-LIWTnPB3lop_dnn_dRLZX9RQWESQ/s72-c/IMG_20170805_182249_HDR.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Sensor de consumo eléctrico para HomeAssistant (2)</title><link>http://nanolec.blogspot.com/2017/08/sensor-consumo-electrico-homeassistant-2.html</link><category>arduino</category><category>componentes</category><category>corriente</category><category>electricidad</category><category>electrónica</category><category>esp8266</category><category>orangepi</category><author>noreply@blogger.com (Isidoro Aguilar Baeza)</author><pubDate>Sat, 5 Aug 2017 18:20:00 +0200</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-155451023305910224.post-6939590334855100086</guid><description>&lt;div style="background-color: rgb(255 , 255 , 255); background: rgb(255 , 255 , 255); color: rgb(142 , 128 , 113); font-family: &amp;quot;hiragino sans gb&amp;quot; , &amp;quot;microsoft yahei&amp;quot; , &amp;quot;stheiti&amp;quot; , &amp;quot;simsun&amp;quot; , &amp;quot;lucida grande&amp;quot; , &amp;quot;lucida sans unicode&amp;quot; , &amp;quot;lucida sans&amp;quot; , &amp;quot;segoe ui&amp;quot; , , &amp;quot;malgun gothic&amp;quot; , &amp;quot;verdana&amp;quot; , &amp;quot;tahoma&amp;quot; , sans-serif; font-family: &amp;quot;lucida grande&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;apple sd gothic neo&amp;quot; , &amp;quot;malgun gothic&amp;quot; , &amp;quot;lucida sans unicode&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;arial&amp;quot; , sans-serif; font-size: 0.9em; font-size: 15px; margin: 0px; overflow-x: hidden; overflow-y: auto; padding: 20px; padding: 20px; padding: 5px 20px 26px;"&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Continuamos en este artículo con el montaje del sensor de consumo para la casa. Venimos de &lt;a href="http://nanolec.blogspot.com.es/2017/08/sensor-consumo-electrico-homeassistant-1.html" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;esta entrada&lt;/a&gt;.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
En la entrada anterior vimos un poco la teoría tanto del sensor de corriente no invasivo CT013 como del esquema eléctrico básico que necesitaremos para leer los datos del mismo.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
En esta entrada vamos a ver la implementación real del circuito.&lt;/div&gt;
&lt;h2 id="selecci-n-del-controlador" style="border-bottom-color: rgb(230 , 230 , 230); border-bottom-style: solid; border-bottom-width: 1px; clear: both; color: rgb(92 , 81 , 70); font-size: 1.8em; font-weight: 400; font-weight: bold; letter-spacing: -1px; line-height: 1.7em; margin: 1.275em 0px 0.85em;"&gt;
Selección del controlador&lt;/h2&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
Una de las decisiones más importante que tenemos que hacer es &lt;b&gt;qué tipo de controlador vamos a utilizar&lt;/b&gt;.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Lo lógico, y lo primero que se nos viene a la cabeza es un Arduino, pero ¿es la solución &lt;i&gt;más eficiente&lt;/i&gt;? ¿y &lt;i&gt;qué tipo&lt;/i&gt; de Arduino utilizamos?&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Normalmente, al iniciar un proyecto sabemos qué sensores vamos a necesitar, que son los componentes que más nos van a determinar el tipo de controlador: en base al voltaje requerido, el consumo, la alimentación disponible, etc.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
En este caso utilizamos un &lt;b&gt;sensor pasivo&lt;/b&gt;, esto es: &lt;i&gt;no requiere alimentación&lt;/i&gt; y por tanto no nos va a condicionar. Pero por otro lado tenemos dos requisitos que tenemos que tener en cuenta:&lt;/div&gt;
&lt;ol style="list-style-type: decimal;"&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;El dispositivo debe enviar sus lecturas &lt;i&gt;de forma inalámbrica&lt;/i&gt;.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;El dispositivo debe funcionar, en la medida de lo posible, de forma &lt;i&gt;autónoma&lt;/i&gt;. Lo ideal es que funcione con baterías.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="conexi-n-inal-mbrica" style="clear: both; color: rgb(92 , 81 , 70); font-size: 1.6em; font-weight: 400; font-weight: bold; letter-spacing: -1px; margin: 1.125em 0px 0.75em;"&gt;
Conexión inalámbrica&lt;/h3&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
El primer requisito nos condiciona porque tenemos que utilizar algún componente que nos permita conectarnos con nuestro concentrador de forma inalámbrica:&lt;/div&gt;
&lt;ul&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Podríamos utilizar un transceptor &lt;a href="http://nanolec.blogspot.com.es/2015/08/componentes-transceptor-inalambrico.html" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;nRF24L01+&lt;/a&gt;, que tiene un consumo muy bajo, pero como incoveniente necesitaríamos dos: uno en el emisor y otro en el receptor (OrangePi Zero).&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;También podríamos utilizar un dispositivo WiFi como el &lt;a href="http://nanolec.blogspot.com.es/2016/10/componentes-dispositivo-wifi-esp8266.html" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;ESP8266&lt;/a&gt;, que nos permite conectarnos directamente con nuestra red doméstica sin más requisitos.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
En el caso de elegir este segundo, tenemos una ventaja adicional: en &lt;a href="http://nanolec.blogspot.com.es/2016/10/componentes-dispositivo-wifi-esp8266.html" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;la entrada&lt;/a&gt; en la que vimos su funcionamiento lo analizamos como componente puro que podíamos utilizar mediante su conexión a un Arduino. Este es el llamado encapsulado &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;ESP8266-01&lt;/code&gt;, que tan sólo nos expone 8 pines (entre los cuales están los de alimentación) y que funciona como un modem enviándole comandos &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;AT&lt;/code&gt; por el puerto serie.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Sin embargo, existen otros encapsulados del mismo chip que nos permiten explotar toda su pontencialidad, que no es otra que tratarse de un SoC completo con sus pines GPIO digitales, otro pin GPIO analógico, su memoria para ejecutar código y para almacenar datos, soporte para varios protocolos, etc.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Estos encapsulados como el &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;ESP8266-12&lt;/code&gt;, &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;ESP8266-07&lt;/code&gt;, etc, nos permiten utilizar este dispositivo a modo de controlador con el añadido de que tiene conectividad WiFi.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Este hecho, y teniendo en cuenta lo barato que es, ha propiciado que cada vez exista un mayor uso de este dispositivo en proyectos autónomos en detrimento del tándem Arduino + Wifi.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Tanto es así que ahora mismo en Aliexpress o cualquier otra tienda disponemos de distintos “empaquetados” de este chip como controladores autónomos que incluyen su &lt;i&gt;interfaz USB&lt;/i&gt; para conectarlo al ordenador y programarlo, &lt;i&gt;regulador de voltaje&lt;/i&gt;, etc. Principalmente encontraremos estos dos modelos:&lt;/div&gt;
&lt;center&gt;
&lt;img alt="NodeMCU" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFiBPITopK8w-F3zm-V92PNJCYbafvk4wI9DRlKyS2AqnUW6hkouQskPhJZfBchAFG5WiOihWPjHIEwdRo1bQqZYsVVCMm4VBBp6spadBwtbYYYxenkzxq0dqYOf_2fsHRJF6nxp_S-K8/s320/nodemcu.jpg" style="max-width: 100%;" /&gt;&lt;br style="clear: both;" /&gt;&lt;br style="clear: both;" /&gt;NodeMCU&lt;/center&gt;
&lt;center&gt;
&lt;img alt="D1Mini" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDoGxcxDwUGBMaBJOXEdLBjyj7i9wgN6HAQT3GKt80QUi1QYlkVjHSr-LrFr2HX4-vzxPKeS9dKLzZ7ut0b9Aza8gAS5fHcDo54a117gu-ZDsNl8MLEfJYlIQ0U1X_eoDelV2gGNEY3f8/s320/d1mini.jpg" style="max-width: 100%;" /&gt;&lt;br style="clear: both;" /&gt;&lt;br style="clear: both;" /&gt;Wemos D1 Mini&lt;/center&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Además, el dispositivo se puede programar en lenguaje LUA (un lenguaje interpretado) o bien directamente mediante el IDE de Arduino con el mismo lenguaje (y mismas librerías) que utilizamos con el Arduino.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Por tanto, es muy fácil migrar un programa hecho para Arduino al &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;NodeMCU&lt;/code&gt; o &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;D1 Mini&lt;/code&gt; con muy pocos cambios.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
El único impedimento que tendremos es que este dispositivo tiene menos pines GPIO que el Arduino. De hecho sólo tiene 1 pin analógico.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
El dispositivo funciona a &lt;b&gt;3.3V&lt;/b&gt; y consume bastante, sobre todo al iniciarse (al igual que el &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;ESP8266-01&lt;/code&gt;), pero afortunadamente dispone de un modo &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;deep sleep&lt;/code&gt; (sueño profundo) en el que lo único que está alimentado es un pequeño oscilador de cristal que nos marca el tiempo en el que se tiene que “despertar” de nuevo para seguir funcionando. El consumo en el modo &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;deep sleep&lt;/code&gt; es bajísimo, lo cual nos permite pensar en su uso por medio de baterías.&lt;/div&gt;
&lt;h3 id="funcionamiento-aut-nomo" style="clear: both; color: rgb(92 , 81 , 70); font-size: 1.6em; font-weight: 400; font-weight: bold; letter-spacing: -1px; margin: 1.125em 0px 0.75em;"&gt;
Funcionamiento autónomo&lt;/h3&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
El segundo requisito nos lleva a depender de la alimentación por medio de baterías.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Dado que hemos visto que el ESP8266 funciona a 3.3V, lo lógico sería establecer este voltaje como el adecuado para el montaje. Por tanto, o bien utilizamos un Arduino y otro controlador que funcionen a 3.3V, o bien tendremos que tener un regulador que nos dé este voltaje para dicho componente.&lt;/div&gt;
&lt;center&gt;
&lt;img alt="LM1117" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtcv7ecxChrodUx-XECHqV2Ldxz6WTpzWb4ZRZDfjfM662lfWfd3ONM3MSVf5t_ReT3poFmxYsBIlvrXFMP05S_0W6CtcvOKTWyTlx6onslINwa1vkKpcY_BKoflokwxx69jCUW2p_3Ns/s1600/LM1117.jpg" style="max-width: 100%;" /&gt;&lt;/center&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Podríamos tener como fuente de alimentación un pack de 3 baterías &lt;b&gt;AA&lt;/b&gt; o &lt;b&gt;AAA&lt;/b&gt; en serie que nos darían &lt;b&gt;4.5V&lt;/b&gt;. Esto en el caso de funcionar a 3.3V. Después o bien utilizaríamos el regulador interno del controlador o necesitaríamos un regulador del tipo LM1117 (en la imagen).&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Otra opción es utilizar una batería recargable de iones de litio de tipo &lt;b&gt;18650&lt;/b&gt;, que nos da un voltaje inicial de &lt;b&gt;4.2V&lt;/b&gt; y va bajando hasta aproximadamente los 2.5V. El voltaje nominal es de 3.7V, el mismo que se usa en los teléfonos de hoy día, y no conviene descargarlas por debajo de los 3V porque pueden pasar cosas &lt;b&gt;muy malas&lt;/b&gt;… desde que ya no podamos cargarla más hasta que explote al cargarla la próxima vez.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Yo voy a elegir esta segunda opción: utilizar una única batería recargable 18650, la cual me acabo de dar cuenta de que trae integrado el circuito de protección que evita sobre corrientes y descargas por debajo del mínimo aconsejable.&lt;/div&gt;
&lt;center&gt;
&lt;img alt="Baterías" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIuDIdtxyC2YhhkCdQqvrcDBrJGlQvFbesrx1eOdpfYGsyE2SQGtClJ5lrAtNnHCcK9tyDtn-oRsoXYvlbsRUq7nW_p8IfpJ2PO4aVBunv4QTcfZF4c57boLY-VlFJnxIhqXLMvEvdHMM/s400/IMG_20170805_020119_HDR.jpg" style="max-width: 100%;" /&gt;&lt;/center&gt;
&lt;h3 id="decisi-n" style="clear: both; color: rgb(92 , 81 , 70); font-size: 1.6em; font-weight: 400; font-weight: bold; letter-spacing: -1px; margin: 1.125em 0px 0.75em;"&gt;
Decisión&lt;/h3&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
Finalmente, mi decisión va a ser utilizar un módulo &lt;b&gt;D1 Mini&lt;/b&gt; como controlador y una batería 18650 como alimentación, utilizando el regulador interno del dispositivo que nos proporciona 3.3V regulados. Intentaré por todos los modos utilizar el modo deep sleep aunque ya sé que tengo otros consumos que no puedo de momento bajar, como son el del propio regulador (que lo tendré que usar de todos modos) y el del interfaz USB (CHG340).&lt;/div&gt;
&lt;h2 id="montaje" style="border-bottom-color: rgb(230 , 230 , 230); border-bottom-style: solid; border-bottom-width: 1px; clear: both; color: rgb(92 , 81 , 70); font-size: 1.8em; font-weight: 400; font-weight: bold; letter-spacing: -1px; line-height: 1.7em; margin: 1.275em 0px 0.85em;"&gt;
Montaje&lt;/h2&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
Vamos ahora a montar el circuito completo, utilizando el controlador elegido, la fuente de alimentación y el circuito original del sensor de corriente.&lt;/div&gt;
&lt;h3 id="dise-o-del-circuito" style="clear: both; color: rgb(92 , 81 , 70); font-size: 1.6em; font-weight: 400; font-weight: bold; letter-spacing: -1px; margin: 1.125em 0px 0.75em;"&gt;
Diseño del circuito&lt;/h3&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
El diagrama del circuito básico que usaremos es el siguiente:&lt;/div&gt;
&lt;center&gt;
&lt;img alt="Esquema" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEie93BptX2UnRZ9XMQBEQHj3rqcjdrpCsxqgTUejKtUFuRLoOqPPUk6C2EZ2nPmTgxuqdQG2_c4rHSaX-fSADq9KPKZn9-Ha5DUjO-56Cs63pcfT4GRAU6Yc9fhyiNGS_IpYxE8ABzt_RM/s400/Sensor+Corriente_esquem%25C3%25A1tico.png" style="max-width: 100%;" /&gt;&lt;/center&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Como se puede ver, para el divisor de tensión he elegido dos resistencias de 4K7 Ω, y para la resistencia de carga mantengo los cálculos de &lt;a href="http://nanolec.blogspot.com.es/2017/08/sensor-consumo-electrico-homeassistant-1.html" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;la entrada anterior&lt;/a&gt;, 3 resistencias en serie con un valor total de 91 Ω.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
El montaje en el breadboard quedaría de la siguiente manera:&lt;/div&gt;
&lt;center&gt;
&lt;img alt="Montaje en breadboard" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDNuCmL0h2_iEQ2_u85wtuH6SC7uRBt3FIWIviRO13SZqBYfQG8mHHVSinxWfMujsmhm8dvb1SneP2-E6sNUuwWDjHuFGpnI3vzUxacoSc4kcdRG2YH-pJ6vl9jx6yyJ1bLn7tHJcfcm4/s400/Sensor+Corriente_bb.png" style="max-width: 100%;" /&gt;&lt;/center&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Y esta es una foto real de cómo quedaría montado físicamente:&lt;/div&gt;
&lt;center&gt;
&lt;img alt="Montaje" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVrqxvqAUk8QihkFbyogUP1PIW2KdGXBQ87O8RCylfzDVs07UQpSYrfpgT5_oCOk9OF_QpAoM5TWx8t23SJdP-AdhkPRbL5h4NhlirYhK6oaG8Odfg52dRR0HK5gJ8-GxiiEt7P_KgHV8/s400/IMG_20170805_025508_HDR.jpg" style="max-width: 100%;" /&gt;&lt;/center&gt;
&lt;h3 id="librer-a-emonlib" style="clear: both; color: rgb(92 , 81 , 70); font-size: 1.6em; font-weight: 400; font-weight: bold; letter-spacing: -1px; margin: 1.125em 0px 0.75em;"&gt;
Librería emonlib&lt;/h3&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
Para hacer las mediciones del sensor, utilizaremos la librería &lt;a href="https://github.com/openenergymonitor/EmonLib" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;EmonLib&lt;/a&gt;, de &lt;a href="https://openenergymonitor.org/" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;OpenEnergyMonitor&lt;/a&gt;.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Esta librería funciona muestreando las lecturas del puerto analógico utilizado para conectar el circuito del sensor, y nos calcula todos los parámetros que necesitamos para tratar la Corriente Alterna.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Es importante tener en cuenta que, como la librería puede ser utilizada en una gran variedad de circuitos, cada uno con sus distintos valores relativos al sensor y a la resistencia de carga, es necesario indicar un &lt;b&gt;parámetro de calibración&lt;/b&gt;, que se calcula según la &lt;a href="https://learn.openenergymonitor.org/electricity-monitoring/ctac/calibration" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;documentación de la librería&lt;/a&gt; de la siguiente manera:&lt;br /&gt;
&lt;div style="-webkit-margin-after: 1rem; -webkit-margin-before: 1rem; -webkit-margin-end: 0px; -webkit-margin-start: 0px; -webkit-text-stroke-width: 0px; box-sizing: border-box; color: #333333; font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; margin: 0.8em 0px; orphans: 2; position: relative; text-align: start; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; width: inherit; word-spacing: 0px;"&gt;
&lt;span class="md-line md-end-block md-focus" style="box-sizing: border-box; display: block;"&gt;&lt;span class="md-expand" style="box-sizing: border-box;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="mathjax-block" contenteditable="false" id="math-jaxn1499" style="-webkit-margin-after: 0rem; -webkit-margin-before: 0rem; -webkit-text-stroke-width: 0px; box-sizing: border-box; color: #333333; font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; margin-bottom: 0px; margin-top: -1.143rem; orphans: 2; overflow-x: auto; overflow-y: hidden; position: relative; text-align: start; text-indent: 0px; text-transform: none; white-space: pre; widows: 2; width: inherit; word-spacing: 0px;"&gt;
&lt;span class="MathJax_Preview" style="box-sizing: border-box; color: #888888;"&gt;&lt;/span&gt;&lt;span class="MathJax_SVG_Display" style="box-sizing: border-box; display: block !important; margin: 1em 0em; max-height: none; max-width: none; min-height: 0px; min-width: 100%; position: relative; text-align: center; text-indent: 0px; width: auto;"&gt;&lt;span class="MathJax_SVG" id="MathJax-Element-1100-Frame" style="border: 0px; box-sizing: border-box; direction: ltr; display: inline-block; float: none; font-size: 16px; font-style: normal; font-weight: normal; letter-spacing: normal; line-height: normal; margin: 0px; max-height: none; max-width: none; min-height: 0px; min-width: 0px; padding: 0px; text-align: left; text-indent: 0px; text-transform: none; white-space: nowrap; word-spacing: normal; word-wrap: normal; zoom: 0.9;" tabindex="-1"&gt;&lt;svg class="in-text-selection" height="5.262ex" style="vertical-align: -1.872ex;" viewbox="0 -1459.5 7229.1 2265.7" width="16.79ex" xmlns:xlink="http://www.w3.org/1999/xlink"&gt;&lt;defs&gt;&lt;path d="M50 252Q50 367 117 473T286 641T490 704Q580 704 633 653Q642 643 648 636T656 626L657 623Q660 623 684 649Q691 655 699 663T715 679T725 690L740 705H746Q760 705 760 698Q760 694 728 561Q692 422 692 421Q690 416 687 415T669 413H653Q647 419 647 422Q647 423 648 429T650 449T651 481Q651 552 619 605T510 659Q484 659 454 652T382 628T299 572T226 479Q194 422 175 346T156 222Q156 108 232 58Q280 24 350 24Q441 24 512 92T606 240Q610 253 612 255T628 257Q648 257 648 248Q648 243 647 239Q618 132 523 55T319 -22Q206 -22 128 53T50 252Z" id="E1187-MJMATHI-43" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M33 157Q33 258 109 349T280 441Q331 441 370 392Q386 422 416 422Q429 422 439 414T449 394Q449 381 412 234T374 68Q374 43 381 35T402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487Q506 153 506 144Q506 138 501 117T481 63T449 13Q436 0 417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157ZM351 328Q351 334 346 350T323 385T277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q217 26 254 59T298 110Q300 114 325 217T351 328Z" id="E1187-MJMATHI-61" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M117 59Q117 26 142 26Q179 26 205 131Q211 151 215 152Q217 153 225 153H229Q238 153 241 153T246 151T248 144Q247 138 245 128T234 90T214 43T183 6T137 -11Q101 -11 70 11T38 85Q38 97 39 102L104 360Q167 615 167 623Q167 626 166 628T162 632T157 634T149 635T141 636T132 637T122 637Q112 637 109 637T101 638T95 641T94 647Q94 649 96 661Q101 680 107 682T179 688Q194 689 213 690T243 693T254 694Q266 694 266 686Q266 675 193 386T118 83Q118 81 118 75T117 65V59Z" id="E1187-MJMATHI-6C" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" id="E1187-MJMAIN-3D" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M230 637Q203 637 198 638T193 649Q193 676 204 682Q206 683 378 683Q550 682 564 680Q620 672 658 652T712 606T733 563T739 529Q739 484 710 445T643 385T576 351T538 338L545 333Q612 295 612 223Q612 212 607 162T602 80V71Q602 53 603 43T614 25T640 16Q668 16 686 38T712 85Q717 99 720 102T735 105Q755 105 755 93Q755 75 731 36Q693 -21 641 -21H632Q571 -21 531 4T487 82Q487 109 502 166T517 239Q517 290 474 313Q459 320 449 321T378 323H309L277 193Q244 61 244 59Q244 55 245 54T252 50T269 48T302 46H333Q339 38 339 37T336 19Q332 6 326 0H311Q275 2 180 2Q146 2 117 2T71 2T50 1Q33 1 33 10Q33 12 36 24Q41 43 46 45Q50 46 61 46H67Q94 46 127 49Q141 52 146 61Q149 65 218 339T287 628Q287 635 230 637ZM630 554Q630 586 609 608T523 636Q521 636 500 636T462 637H440Q393 637 386 627Q385 624 352 494T319 361Q319 360 388 360Q466 361 492 367Q556 377 592 426Q608 449 619 486T630 554Z" id="E1187-MJMATHI-52" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z" id="E1187-MJMATHI-74" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M184 600Q184 624 203 642T247 661Q265 661 277 649T290 619Q290 596 270 577T226 557Q211 557 198 567T184 600ZM21 287Q21 295 30 318T54 369T98 420T158 442Q197 442 223 419T250 357Q250 340 236 301T196 196T154 83Q149 61 149 51Q149 26 166 26Q175 26 185 29T208 43T235 78T260 137Q263 149 265 151T282 153Q302 153 302 143Q302 135 293 112T268 61T223 11T161 -11Q129 -11 102 10T74 74Q74 91 79 106T122 220Q160 321 166 341T173 380Q173 404 156 404H154Q124 404 99 371T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Z" id="E1187-MJMATHI-69" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M201 -11Q126 -11 80 38T34 156Q34 221 64 279T146 380Q222 441 301 441Q333 441 341 440Q354 437 367 433T402 417T438 387T464 338T476 268Q476 161 390 75T201 -11ZM121 120Q121 70 147 48T206 26Q250 26 289 58T351 142Q360 163 374 216T388 308Q388 352 370 375Q346 405 306 405Q243 405 195 347Q158 303 140 230T121 120Z" id="E1187-MJMATHI-6F" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M40 437Q21 437 21 445Q21 450 37 501T71 602L88 651Q93 669 101 677H569H659Q691 677 697 676T704 667Q704 661 687 553T668 444Q668 437 649 437Q640 437 637 437T631 442L629 445Q629 451 635 490T641 551Q641 586 628 604T573 629Q568 630 515 631Q469 631 457 630T439 622Q438 621 368 343T298 60Q298 48 386 46Q418 46 427 45T436 36Q436 31 433 22Q429 4 424 1L422 0Q419 0 415 0Q410 0 363 1T228 2Q99 2 64 0H49Q43 6 43 9T45 27Q49 40 55 46H83H94Q174 46 189 55Q190 56 191 56Q196 59 201 76T241 233Q258 301 269 344Q339 619 339 625Q339 630 310 630H279Q212 630 191 624Q146 614 121 583T67 467Q60 445 57 441T43 437H40Z" id="E1187-MJMATHI-54" stroke-width="1"&gt;&lt;/path&gt;&lt;/defs&gt;&lt;g fill="currentColor" stroke-width="0" stroke="currentColor" transform="matrix(1 0 0 -1 0 0)"&gt;&lt;use x="0" xlink:href="#E1187-MJMATHI-43" y="0"&gt;&lt;/use&gt;&lt;use x="760" xlink:href="#E1187-MJMATHI-61" y="0"&gt;&lt;/use&gt;&lt;use x="1290" xlink:href="#E1187-MJMATHI-6C" y="0"&gt;&lt;/use&gt;&lt;use x="1866" xlink:href="#E1187-MJMAIN-3D" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(2644,0)"&gt;&lt;g transform="translate(397,0)"&gt;&lt;rect height="60" stroke="none" width="4066" x="0" y="220"&gt;&lt;/rect&gt;&lt;g transform="translate(60,676)"&gt;&lt;use x="0" xlink:href="#E1187-MJMATHI-52" y="0"&gt;&lt;/use&gt;&lt;use x="759" xlink:href="#E1187-MJMATHI-61" y="0"&gt;&lt;/use&gt;&lt;use x="1289" xlink:href="#E1187-MJMATHI-74" y="0"&gt;&lt;/use&gt;&lt;use x="1650" xlink:href="#E1187-MJMATHI-69" y="0"&gt;&lt;/use&gt;&lt;use x="1996" xlink:href="#E1187-MJMATHI-6F" y="0"&gt;&lt;/use&gt;&lt;use x="2481" xlink:href="#E1187-MJMATHI-54" y="0"&gt;&lt;/use&gt;&lt;use x="3186" xlink:href="#E1187-MJMATHI-43" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;use x="1653" xlink:href="#E1187-MJMATHI-52" y="-686"&gt;&lt;/use&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span class="MathJax" id="MathJax-Element-30-Frame" style="border: 0px; direction: ltr; display: inline; float: none; font-size: 100%; font-style: normal; font-weight: normal; letter-spacing: normal; line-height: normal; margin: 0px; max-height: none; max-width: none; min-height: 0px; min-width: 0px; padding: 0px; text-align: left; text-indent: 0px; text-transform: none; white-space: nowrap; word-spacing: normal; word-wrap: normal;"&gt;&lt;nobr style="-webkit-transition: none; border: 0px; line-height: normal; margin: 0px; max-height: 5000em; max-width: 5000em; min-height: 0px; min-width: 0px; padding: 0px; text-decoration: none; transition: none; vertical-align: 0px; white-space: nowrap;"&gt;&lt;/nobr&gt;&lt;/span&gt;&lt;/div&gt;
&lt;script id="MathJax-Element-30" type="math/tex; mode=display"&gt;
Cal = \frac{RatioTC}{R}&lt;/script&gt;&lt;br /&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Siendo &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;RatioTC&lt;/code&gt; el ratio del transformador de corriente (relación entre primario y secundario) y &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;R&lt;/code&gt; la resistencia de carga calculada.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Por tanto, en nuestro caso el parámetro de calibración sería el siguiente:&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
&lt;span class="MathJax_Preview" style="color: rgb(136 , 136 , 136);"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div aria-readonly="true" role="textbox" style="display: block; margin: 1em 0em; max-height: none; max-width: none; min-height: 0px; min-width: 0px; position: relative; text-align: center; text-align: center; text-indent: 0px; width: 100%;"&gt;
&lt;span class="MathJax" id="MathJax-Element-31-Frame" style="border: 0px; direction: ltr; display: inline; float: none; font-size: 100%; font-style: normal; font-weight: normal; letter-spacing: normal; line-height: normal; margin: 0px; max-height: none; max-width: none; min-height: 0px; min-width: 0px; padding: 0px; text-align: left; text-indent: 0px; text-transform: none; white-space: nowrap; word-spacing: normal; word-wrap: normal;"&gt;&lt;nobr style="-webkit-transition: none; border: 0px; line-height: normal; margin: 0px; max-height: 5000em; max-width: 5000em; min-height: 0px; min-width: 0px; padding: 0px; text-decoration: none; transition: none; vertical-align: 0px; white-space: nowrap;"&gt;&lt;/nobr&gt;&lt;/span&gt;&lt;nobr style="-webkit-transition: none; border: 0px; line-height: normal; margin: 0px; max-height: 5000em; max-width: 5000em; min-height: 0px; min-width: 0px; padding: 0px; text-decoration: none; transition: none; vertical-align: 0px; white-space: nowrap;"&gt;&lt;/nobr&gt;&lt;br /&gt;
&lt;div style="-webkit-margin-after: 1rem; -webkit-margin-before: 1rem; -webkit-margin-end: 0px; -webkit-margin-start: 0px; -webkit-text-stroke-width: 0px; box-sizing: border-box; color: #333333; font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; margin: 0.8em 0px; orphans: 2; position: relative; text-align: start; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; width: inherit; word-spacing: 0px;"&gt;
&lt;span class="md-line md-end-block md-focus" style="box-sizing: border-box; display: block;"&gt;&lt;span class="md-expand" style="box-sizing: border-box;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="mathjax-block" contenteditable="false" id="math-jaxn1518" style="-webkit-margin-after: 0rem; -webkit-margin-before: 0rem; -webkit-text-stroke-width: 0px; box-sizing: border-box; color: #333333; font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; margin-bottom: 0px; margin-top: -1.143rem; orphans: 2; overflow-x: auto; overflow-y: hidden; position: relative; text-align: start; text-indent: 0px; text-transform: none; white-space: pre; widows: 2; width: inherit; word-spacing: 0px;"&gt;
&lt;span class="MathJax_Preview" style="box-sizing: border-box; color: #888888;"&gt;&lt;/span&gt;&lt;span class="MathJax_SVG_Display" style="box-sizing: border-box; display: block !important; margin: 1em 0em; max-height: none; max-width: none; min-height: 0px; min-width: 100%; position: relative; text-align: center; text-indent: 0px; width: auto;"&gt;&lt;span class="MathJax_SVG" id="MathJax-Element-1131-Frame" style="border: 0px; box-sizing: border-box; direction: ltr; display: inline-block; float: none; font-size: 16px; font-style: normal; font-weight: normal; letter-spacing: normal; line-height: normal; margin: 0px; max-height: none; max-width: none; min-height: 0px; min-width: 0px; padding: 0px; text-align: left; text-indent: 0px; text-transform: none; white-space: nowrap; word-spacing: normal; word-wrap: normal; zoom: 0.9;" tabindex="-1"&gt;&lt;svg class="in-text-selection" height="5.145ex" style="vertical-align: -1.872ex;" viewbox="0 -1409.3 9399.6 2215.4" width="21.831ex" xmlns:xlink="http://www.w3.org/1999/xlink"&gt;&lt;defs&gt;&lt;path d="M50 252Q50 367 117 473T286 641T490 704Q580 704 633 653Q642 643 648 636T656 626L657 623Q660 623 684 649Q691 655 699 663T715 679T725 690L740 705H746Q760 705 760 698Q760 694 728 561Q692 422 692 421Q690 416 687 415T669 413H653Q647 419 647 422Q647 423 648 429T650 449T651 481Q651 552 619 605T510 659Q484 659 454 652T382 628T299 572T226 479Q194 422 175 346T156 222Q156 108 232 58Q280 24 350 24Q441 24 512 92T606 240Q610 253 612 255T628 257Q648 257 648 248Q648 243 647 239Q618 132 523 55T319 -22Q206 -22 128 53T50 252Z" id="E1219-MJMATHI-43" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M33 157Q33 258 109 349T280 441Q331 441 370 392Q386 422 416 422Q429 422 439 414T449 394Q449 381 412 234T374 68Q374 43 381 35T402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487Q506 153 506 144Q506 138 501 117T481 63T449 13Q436 0 417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157ZM351 328Q351 334 346 350T323 385T277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q217 26 254 59T298 110Q300 114 325 217T351 328Z" id="E1219-MJMATHI-61" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M117 59Q117 26 142 26Q179 26 205 131Q211 151 215 152Q217 153 225 153H229Q238 153 241 153T246 151T248 144Q247 138 245 128T234 90T214 43T183 6T137 -11Q101 -11 70 11T38 85Q38 97 39 102L104 360Q167 615 167 623Q167 626 166 628T162 632T157 634T149 635T141 636T132 637T122 637Q112 637 109 637T101 638T95 641T94 647Q94 649 96 661Q101 680 107 682T179 688Q194 689 213 690T243 693T254 694Q266 694 266 686Q266 675 193 386T118 83Q118 81 118 75T117 65V59Z" id="E1219-MJMATHI-6C" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" id="E1219-MJMAIN-3D" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" id="E1219-MJMAIN-32" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" id="E1219-MJMAIN-30" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M352 287Q304 211 232 211Q154 211 104 270T44 396Q42 412 42 436V444Q42 537 111 606Q171 666 243 666Q245 666 249 666T257 665H261Q273 665 286 663T323 651T370 619T413 560Q456 472 456 334Q456 194 396 97Q361 41 312 10T208 -22Q147 -22 108 7T68 93T121 149Q143 149 158 135T173 96Q173 78 164 65T148 49T135 44L131 43Q131 41 138 37T164 27T206 22H212Q272 22 313 86Q352 142 352 280V287ZM244 248Q292 248 321 297T351 430Q351 508 343 542Q341 552 337 562T323 588T293 615T246 625Q208 625 181 598Q160 576 154 546T147 441Q147 358 152 329T172 282Q197 248 244 248Z" id="E1219-MJMAIN-39" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" id="E1219-MJMAIN-31" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M78 60Q78 84 95 102T138 120Q162 120 180 104T199 61Q199 36 182 18T139 0T96 17T78 60Z" id="E1219-MJMAIN-2E" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M55 458Q56 460 72 567L88 674Q88 676 108 676H128V672Q128 662 143 655T195 646T364 644H485V605L417 512Q408 500 387 472T360 435T339 403T319 367T305 330T292 284T284 230T278 162T275 80Q275 66 275 52T274 28V19Q270 2 255 -10T221 -22Q210 -22 200 -19T179 0T168 40Q168 198 265 368Q285 400 349 489L395 552H302Q128 552 119 546Q113 543 108 522T98 479L95 458V455H55V458Z" id="E1219-MJMAIN-37" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M70 417T70 494T124 618T248 666Q319 666 374 624T429 515Q429 485 418 459T392 417T361 389T335 371T324 363L338 354Q352 344 366 334T382 323Q457 264 457 174Q457 95 399 37T249 -22Q159 -22 101 29T43 155Q43 263 172 335L154 348Q133 361 127 368Q70 417 70 494ZM286 386L292 390Q298 394 301 396T311 403T323 413T334 425T345 438T355 454T364 471T369 491T371 513Q371 556 342 586T275 624Q268 625 242 625Q201 625 165 599T128 534Q128 511 141 492T167 463T217 431Q224 426 228 424L286 386ZM250 21Q308 21 350 55T392 137Q392 154 387 169T375 194T353 216T330 234T301 253T274 270Q260 279 244 289T218 306L210 311Q204 311 181 294T133 239T107 157Q107 98 150 60T250 21Z" id="E1219-MJMAIN-38" stroke-width="1"&gt;&lt;/path&gt;&lt;/defs&gt;&lt;g fill="currentColor" stroke-width="0" stroke="currentColor" transform="matrix(1 0 0 -1 0 0)"&gt;&lt;use x="0" xlink:href="#E1219-MJMATHI-43" y="0"&gt;&lt;/use&gt;&lt;use x="760" xlink:href="#E1219-MJMATHI-61" y="0"&gt;&lt;/use&gt;&lt;use x="1290" xlink:href="#E1219-MJMATHI-6C" y="0"&gt;&lt;/use&gt;&lt;use x="1866" xlink:href="#E1219-MJMAIN-3D" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(2644,0)"&gt;&lt;g transform="translate(397,0)"&gt;&lt;rect height="60" stroke="none" width="2122" x="0" y="220"&gt;&lt;/rect&gt;&lt;g transform="translate(60,676)"&gt;&lt;use xlink:href="#E1219-MJMAIN-32"&gt;&lt;/use&gt;&lt;use x="500" xlink:href="#E1219-MJMAIN-30" y="0"&gt;&lt;/use&gt;&lt;use x="1001" xlink:href="#E1219-MJMAIN-30" y="0"&gt;&lt;/use&gt;&lt;use x="1501" xlink:href="#E1219-MJMAIN-30" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;g transform="translate(560,-686)"&gt;&lt;use xlink:href="#E1219-MJMAIN-39"&gt;&lt;/use&gt;&lt;use x="500" xlink:href="#E1219-MJMAIN-31" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;use x="5562" xlink:href="#E1219-MJMAIN-3D" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(6618,0)"&gt;&lt;use xlink:href="#E1219-MJMAIN-32"&gt;&lt;/use&gt;&lt;use x="500" xlink:href="#E1219-MJMAIN-31" y="0"&gt;&lt;/use&gt;&lt;use x="1001" xlink:href="#E1219-MJMAIN-2E" y="0"&gt;&lt;/use&gt;&lt;use x="1279" xlink:href="#E1219-MJMAIN-39" y="0"&gt;&lt;/use&gt;&lt;use x="1780" xlink:href="#E1219-MJMAIN-37" y="0"&gt;&lt;/use&gt;&lt;use x="2280" xlink:href="#E1219-MJMAIN-38" y="0"&gt;&lt;br /&gt;&lt;/use&gt;&lt;/g&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span class="MathJax" id="MathJax-Element-31-Frame" style="border: 0px; direction: ltr; display: inline; float: none; font-size: 100%; font-style: normal; font-weight: normal; letter-spacing: normal; line-height: normal; margin: 0px; max-height: none; max-width: none; min-height: 0px; min-width: 0px; padding: 0px; text-align: left; text-indent: 0px; text-transform: none; white-space: nowrap; word-spacing: normal; word-wrap: normal;"&gt;&lt;nobr style="-webkit-transition: none; border: 0px; line-height: normal; margin: 0px; max-height: 5000em; max-width: 5000em; min-height: 0px; min-width: 0px; padding: 0px; text-decoration: none; transition: none; vertical-align: 0px; white-space: nowrap;"&gt;&lt;/nobr&gt;&lt;/span&gt;&lt;/div&gt;
&lt;script id="MathJax-Element-31" type="math/tex; mode=display"&gt;
Cal=\frac{2000}{91}=21.978&lt;/script&gt;&lt;br /&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
&lt;/div&gt;
&lt;h3 id="programa-de-prueba" style="clear: both; color: rgb(92 , 81 , 70); font-size: 1.6em; font-weight: 400; font-weight: bold; letter-spacing: -1px; margin: 1.125em 0px 0.75em;"&gt;
Programa de prueba&lt;/h3&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
El &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;sketch&lt;/code&gt; o programa que utilizaremos para probar el circuito será el siguiente:&lt;/div&gt;
&lt;pre style="background: rgb(0 , 43 , 54); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(131 , 148 , 150); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="objectivec" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;objectivec&amp;quot;&amp;gt;#include &amp;quot;EmonLib.h&amp;quot;

#define RatioTC 2000
#define ResCarga 91
#define VoltajeLinea 230

EnergyMonitor emon1;

/**
 * Configuración. Sólo se ejecuta la primera vez que se inicia el dispositivo
 */
void setup() {
    Serial.begin(9600);
    delay(10);
    Serial.println(&amp;quot;&amp;quot;);
    Serial.println(&amp;quot;&amp;quot;);
    Serial.println(&amp;quot;Lector de consumo eléctrico&amp;quot;);

    // Indicamos dónde está conectado el sensor de corriente (pin analógico A0) y el factor de calibración.
    emon1.current(A0, RatioTC / ResCarga);
}

/**
 * Bucle infinito que se ejecuta constantemente
 */
void loop() {
    // Calculamos la corriente efectiva indicando el número de muestras a tomar de la entrada analógica.
    double Irms = emon1.calcIrms(1480);

    Serial.print(&amp;quot;I = &amp;quot;);
    Serial.print(Irms);
    Serial.print(&amp;quot; A, P = &amp;quot;);

    // Potencia efectiva = corriente efectiva * voltaje de línea
    Serial.print(Irms * VoltajeLinea);
    Serial.println(&amp;quot; W&amp;quot;);

    delay(5000);
}
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#include &lt;span class="hljs-title" style="color: rgb(38 , 139 , 210);"&gt;"EmonLib.h"&lt;/span&gt;&lt;/span&gt;

&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#define RatioTC 2000&lt;/span&gt;
&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#define ResCarga 91&lt;/span&gt;
&lt;span class="hljs-preprocessor" style="color: rgb(203 , 75 , 22);"&gt;#define VoltajeLinea 230&lt;/span&gt;

EnergyMonitor emon1;

&lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;/**
 * Configuración. Sólo se ejecuta la primera vez que se inicia el dispositivo
 */&lt;/span&gt;
&lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;void&lt;/span&gt; setup() {
    Serial&lt;span class="hljs-variable" style="color: rgb(181 , 137 , 0);"&gt;.begin&lt;/span&gt;(&lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;9600&lt;/span&gt;);
    delay(&lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;10&lt;/span&gt;);
    Serial&lt;span class="hljs-variable" style="color: rgb(181 , 137 , 0);"&gt;.println&lt;/span&gt;(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;""&lt;/span&gt;);
    Serial&lt;span class="hljs-variable" style="color: rgb(181 , 137 , 0);"&gt;.println&lt;/span&gt;(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;""&lt;/span&gt;);
    Serial&lt;span class="hljs-variable" style="color: rgb(181 , 137 , 0);"&gt;.println&lt;/span&gt;(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;"Lector de consumo eléctrico"&lt;/span&gt;);

    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Indicamos dónde está conectado el sensor de corriente (pin analógico A0) y el factor de calibración.&lt;/span&gt;
    emon1&lt;span class="hljs-variable" style="color: rgb(181 , 137 , 0);"&gt;.current&lt;/span&gt;(A0, RatioTC / ResCarga);
}

&lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;/**
 * Bucle infinito que se ejecuta constantemente
 */&lt;/span&gt;
&lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;void&lt;/span&gt; loop() {
    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Calculamos la corriente efectiva indicando el número de muestras a tomar de la entrada analógica.&lt;/span&gt;
    &lt;span class="hljs-keyword" style="color: rgb(133 , 153 , 0);"&gt;double&lt;/span&gt; Irms = emon1&lt;span class="hljs-variable" style="color: rgb(181 , 137 , 0);"&gt;.calcIrms&lt;/span&gt;(&lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;1480&lt;/span&gt;);

    Serial&lt;span class="hljs-variable" style="color: rgb(181 , 137 , 0);"&gt;.print&lt;/span&gt;(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;"I = "&lt;/span&gt;);
    Serial&lt;span class="hljs-variable" style="color: rgb(181 , 137 , 0);"&gt;.print&lt;/span&gt;(Irms);
    Serial&lt;span class="hljs-variable" style="color: rgb(181 , 137 , 0);"&gt;.print&lt;/span&gt;(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;" A, P = "&lt;/span&gt;);

    &lt;span class="hljs-comment" style="color: rgb(88 , 110 , 117);"&gt;// Potencia efectiva = corriente efectiva * voltaje de línea&lt;/span&gt;
    Serial&lt;span class="hljs-variable" style="color: rgb(181 , 137 , 0);"&gt;.print&lt;/span&gt;(Irms * VoltajeLinea);
    Serial&lt;span class="hljs-variable" style="color: rgb(181 , 137 , 0);"&gt;.println&lt;/span&gt;(&lt;span class="hljs-string" style="color: rgb(42 , 161 , 152);"&gt;" W"&lt;/span&gt;);

    delay(&lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;5000&lt;/span&gt;);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Una vez compilado, lo ejecutamos y ésta es la salida que obtenemos por el puerto serie:&lt;/div&gt;
&lt;pre style="background: rgb(0 , 43 , 54); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(131 , 148 , 150); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="bash" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;bash&amp;quot;&amp;gt;Lector de consumo eléctrico 
I = 0.67 A, P = 153.95 W
I = 0.16 A, P = 36.60 W
I = 0.05 A, P = 12.24 W
I = 0.04 A, P = 9.64 W
I = 1.14 A, P = 262.96 W
I = 1.15 A, P = 264.73 W
I = 1.16 A, P = 265.78 W
I = 1.18 A, P = 271.47 W
I = 1.13 A, P = 260.15 W
I = 1.48 A, P = 341.17 W
I = 1.35 A, P = 309.65 W
I = 1.17 A, P = 269.78 W
I = 1.19 A, P = 273.09 W
I = 1.18 A, P = 271.46 W
I = 1.25 A, P = 287.18 W
I = 0.95 A, P = 218.53 W
I = 0.92 A, P = 211.87 W
I = 1.03 A, P = 236.09 W
I = 0.75 A, P = 171.41 W
I = 0.02 A, P = 4.92 W
I = 0.16 A, P = 35.81 W
I = 0.16 A, P = 36.02 W
I = 0.15 A, P = 35.48 W
I = 0.06 A, P = 14.40 W
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;Lector de consumo eléctrico 
I = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;0.67&lt;/span&gt; A, P = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;153.95&lt;/span&gt; W
I = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;0.16&lt;/span&gt; A, P = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;36.60&lt;/span&gt; W
I = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;0.05&lt;/span&gt; A, P = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;12.24&lt;/span&gt; W
I = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;0.04&lt;/span&gt; A, P = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;9.64&lt;/span&gt; W
I = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;1.14&lt;/span&gt; A, P = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;262.96&lt;/span&gt; W
I = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;1.15&lt;/span&gt; A, P = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;264.73&lt;/span&gt; W
I = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;1.16&lt;/span&gt; A, P = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;265.78&lt;/span&gt; W
I = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;1.18&lt;/span&gt; A, P = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;271.47&lt;/span&gt; W
I = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;1.13&lt;/span&gt; A, P = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;260.15&lt;/span&gt; W
I = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;1.48&lt;/span&gt; A, P = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;341.17&lt;/span&gt; W
I = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;1.35&lt;/span&gt; A, P = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;309.65&lt;/span&gt; W
I = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;1.17&lt;/span&gt; A, P = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;269.78&lt;/span&gt; W
I = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;1.19&lt;/span&gt; A, P = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;273.09&lt;/span&gt; W
I = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;1.18&lt;/span&gt; A, P = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;271.46&lt;/span&gt; W
I = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;1.25&lt;/span&gt; A, P = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;287.18&lt;/span&gt; W
I = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;0.95&lt;/span&gt; A, P = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;218.53&lt;/span&gt; W
I = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;0.92&lt;/span&gt; A, P = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;211.87&lt;/span&gt; W
I = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;1.03&lt;/span&gt; A, P = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;236.09&lt;/span&gt; W
I = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;0.75&lt;/span&gt; A, P = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;171.41&lt;/span&gt; W
I = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;0.02&lt;/span&gt; A, P = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;4.92&lt;/span&gt; W
I = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;0.16&lt;/span&gt; A, P = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;35.81&lt;/span&gt; W
I = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;0.16&lt;/span&gt; A, P = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;36.02&lt;/span&gt; W
I = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;0.15&lt;/span&gt; A, P = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;35.48&lt;/span&gt; W
I = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;0.06&lt;/span&gt; A, P = &lt;span class="hljs-number" style="color: rgb(42 , 161 , 152);"&gt;14.40&lt;/span&gt; W
&lt;/code&gt;&lt;/pre&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Las lecturas no son demasiado estables (hice una prueba con un Arduino Pro Mini que tengo y las lecturas son algo más estables) porque el puerto analógico no es ninguna maravilla y mete algo de ruido, pero se puede ver perfectamente que a partir de la quinta le he metido una carga de unos 280-300W mientras que después he ido bajándola un poco hasta los 220W, dejándola luego de nuevo a 0.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Puede verse también que cuando teóricamente no hay carga, el sensor todavía detecta algunas décimas de amperio, debido también al ruido. De todos modos, estamos construyendo este componente para medir la potencia de una casa completa, y no pasa nada si tenemos un pequeño ruido de algunas décimas.&lt;/div&gt;
&lt;/div&gt;
</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFiBPITopK8w-F3zm-V92PNJCYbafvk4wI9DRlKyS2AqnUW6hkouQskPhJZfBchAFG5WiOihWPjHIEwdRo1bQqZYsVVCMm4VBBp6spadBwtbYYYxenkzxq0dqYOf_2fsHRJF6nxp_S-K8/s72-c/nodemcu.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Sensor de consumo eléctrico para HomeAssistant (1)</title><link>http://nanolec.blogspot.com/2017/08/sensor-consumo-electrico-homeassistant-1.html</link><category>arduino</category><category>componentes</category><category>corriente</category><category>electricidad</category><category>electrónica</category><category>esp8266</category><author>noreply@blogger.com (Isidoro Aguilar Baeza)</author><pubDate>Fri, 4 Aug 2017 14:59:00 +0200</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-155451023305910224.post-1327913994156385580</guid><description>&lt;div style="background-color: rgb(255 , 255 , 255); background: rgb(255 , 255 , 255); color: rgb(142 , 128 , 113); font-family: &amp;quot;hiragino sans gb&amp;quot; , &amp;quot;microsoft yahei&amp;quot; , &amp;quot;stheiti&amp;quot; , &amp;quot;simsun&amp;quot; , &amp;quot;lucida grande&amp;quot; , &amp;quot;lucida sans unicode&amp;quot; , &amp;quot;lucida sans&amp;quot; , &amp;quot;segoe ui&amp;quot; , , &amp;quot;malgun gothic&amp;quot; , &amp;quot;verdana&amp;quot; , &amp;quot;tahoma&amp;quot; , sans-serif; font-family: &amp;quot;lucida grande&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;apple sd gothic neo&amp;quot; , &amp;quot;malgun gothic&amp;quot; , &amp;quot;lucida sans unicode&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;arial&amp;quot; , sans-serif; font-size: 0.9em; font-size: 15px; margin: 0px; overflow-x: hidden; overflow-y: auto; padding: 20px; padding: 20px; padding: 5px 20px 26px;"&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Hoy vamos a ver un proyecto que tengo en mente hace tiempo: poder medir el consumo eléctrico de toda la casa en tiempo real.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Para ello, voy a utilizar Home Assistant como centralizador, y mi intención es tener un sensor inalámbrico independiente como medidor.&lt;/div&gt;
&lt;h2 id="requisitos" style="border-bottom-color: rgb(230 , 230 , 230); border-bottom-style: solid; border-bottom-width: 1px; clear: both; color: rgb(92 , 81 , 70); font-size: 1.8em; font-weight: 400; font-weight: bold; letter-spacing: -1px; line-height: 1.7em; margin: 1.275em 0px 0.85em;"&gt;
Requisitos&lt;/h2&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
Para montar el sensor, mis requisitos son los siguientes:&lt;/div&gt;
&lt;ul&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;El sensor debe enviar los datos &lt;b&gt;de forma inalámbrica&lt;/b&gt;.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;El sensor debe ser &lt;b&gt;no invasivo&lt;/b&gt;: esto es, no quiero tener que pasar la corriente de toda mi casa por un componente electrónico para medirla. Simplemente no me fío.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Si es posible, me gustaría que el sensor quedase lo más oculto posible y que estuviera alimentado a baterías. No quiero ver cables por medio.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="componentes" style="border-bottom-color: rgb(230 , 230 , 230); border-bottom-style: solid; border-bottom-width: 1px; clear: both; color: rgb(92 , 81 , 70); font-size: 1.8em; font-weight: 400; font-weight: bold; letter-spacing: -1px; line-height: 1.7em; margin: 1.275em 0px 0.85em;"&gt;
Componentes&lt;/h2&gt;
&lt;h3 id="selecci-n-del-sensor" style="clear: both; color: rgb(92 , 81 , 70); font-size: 1.6em; font-weight: 400; font-weight: bold; letter-spacing: -1px; margin: 1.125em 0px 0.75em;"&gt;
Selección del sensor&lt;/h3&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
Para montar un sensor de corriente no invasivo, lo primero que se me vino a la mente fue un transformador de corriente SCT013 que vimos &lt;a href="https://nanolec.blogspot.com.es/2015/08/componentes-sensor-de-corriente-sct013.html" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;en esta entrada&lt;/a&gt; del blog.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Este sensor nos permite leer la corriente alterna del primario del transformador como una corriente alterna en el secundario de mucho menor valor, con un ratio de &lt;b&gt;2000:1&lt;/b&gt;. Esto es: para una corriente de &lt;b&gt;100A&lt;/b&gt; en el primario, nos daría en el secundario:&lt;/div&gt;
&lt;div class="mathjax-block" contenteditable="false" id="math-jaxn209" style="-webkit-margin-after: 0rem; -webkit-margin-before: 0rem; -webkit-text-stroke-width: 0px; box-sizing: border-box; color: #333333; font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; margin-bottom: 0px; margin-top: -1.143rem; orphans: 2; overflow-x: auto; overflow-y: hidden; position: relative; text-align: start; text-indent: 0px; text-transform: none; white-space: pre; widows: 2; width: inherit; word-spacing: 0px;"&gt;
&lt;span class="MathJax_Preview" style="box-sizing: border-box; color: #888888;"&gt;&lt;/span&gt;&lt;span class="MathJax_SVG_Display" style="box-sizing: border-box; display: block !important; margin: 1em 0em; max-height: none; max-width: none; min-height: 0px; min-width: 100%; position: relative; text-align: center; text-indent: 0px; width: auto;"&gt;&lt;span class="MathJax_SVG" id="MathJax-Element-1066-Frame" style="border: 0px; box-sizing: border-box; direction: ltr; display: inline-block; float: none; font-size: 16px; font-style: normal; font-weight: normal; letter-spacing: normal; line-height: normal; margin: 0px; max-height: none; max-width: none; min-height: 0px; min-width: 0px; padding: 0px; text-align: left; text-indent: 0px; text-transform: none; white-space: nowrap; word-spacing: normal; word-wrap: normal; zoom: 0.9;" tabindex="-1"&gt;&lt;svg class="in-text-selection" height="5.262ex" style="vertical-align: -1.872ex;" viewbox="0 -1459.5 10607.3 2265.7" width="24.636ex" xmlns:xlink="http://www.w3.org/1999/xlink"&gt;&lt;defs&gt;&lt;path d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" id="E1151-MJMAIN-31" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" id="E1151-MJMAIN-30" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M208 74Q208 50 254 46Q272 46 272 35Q272 34 270 22Q267 8 264 4T251 0Q249 0 239 0T205 1T141 2Q70 2 50 0H42Q35 7 35 11Q37 38 48 46H62Q132 49 164 96Q170 102 345 401T523 704Q530 716 547 716H555H572Q578 707 578 706L606 383Q634 60 636 57Q641 46 701 46Q726 46 726 36Q726 34 723 22Q720 7 718 4T704 0Q701 0 690 0T651 1T578 2Q484 2 455 0H443Q437 6 437 9T439 27Q443 40 445 43L449 46H469Q523 49 533 63L521 213H283L249 155Q208 86 208 74ZM516 260Q516 271 504 416T490 562L463 519Q447 492 400 412L310 260L413 259Q516 259 516 260Z" id="E1151-MJMATHI-41" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" id="E1151-MJMAIN-32" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" id="E1151-MJMAIN-3D" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z" id="E1151-MJMAIN-2C" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M164 157Q164 133 148 117T109 101H102Q148 22 224 22Q294 22 326 82Q345 115 345 210Q345 313 318 349Q292 382 260 382H254Q176 382 136 314Q132 307 129 306T114 304Q97 304 95 310Q93 314 93 485V614Q93 664 98 664Q100 666 102 666Q103 666 123 658T178 642T253 634Q324 634 389 662Q397 666 402 666Q410 666 410 648V635Q328 538 205 538Q174 538 149 544L139 546V374Q158 388 169 396T205 412T256 420Q337 420 393 355T449 201Q449 109 385 44T229 -22Q148 -22 99 32T50 154Q50 178 61 192T84 210T107 214Q132 214 148 197T164 157Z" id="E1151-MJMAIN-35" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M21 287Q22 293 24 303T36 341T56 388T88 425T132 442T175 435T205 417T221 395T229 376L231 369Q231 367 232 367L243 378Q303 442 384 442Q401 442 415 440T441 433T460 423T475 411T485 398T493 385T497 373T500 364T502 357L510 367Q573 442 659 442Q713 442 746 415T780 336Q780 285 742 178T704 50Q705 36 709 31T724 26Q752 26 776 56T815 138Q818 149 821 151T837 153Q857 153 857 145Q857 144 853 130Q845 101 831 73T785 17T716 -10Q669 -10 648 17T627 73Q627 92 663 193T700 345Q700 404 656 404H651Q565 404 506 303L499 291L466 157Q433 26 428 16Q415 -11 385 -11Q372 -11 364 -4T353 8T350 18Q350 29 384 161L420 307Q423 322 423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 181Q151 335 151 342Q154 357 154 369Q154 405 129 405Q107 405 92 377T69 316T57 280Q55 278 41 278H27Q21 284 21 287Z" id="E1151-MJMATHI-6D" stroke-width="1"&gt;&lt;/path&gt;&lt;/defs&gt;&lt;g fill="currentColor" stroke-width="0" stroke="currentColor" transform="matrix(1 0 0 -1 0 0)"&gt;&lt;g transform="translate(120,0)"&gt;&lt;rect height="60" stroke="none" width="2372" x="0" y="220"&gt;&lt;/rect&gt;&lt;g transform="translate(60,676)"&gt;&lt;use xlink:href="#E1151-MJMAIN-31"&gt;&lt;/use&gt;&lt;use x="500" xlink:href="#E1151-MJMAIN-30" y="0"&gt;&lt;/use&gt;&lt;use x="1001" xlink:href="#E1151-MJMAIN-30" y="0"&gt;&lt;/use&gt;&lt;use x="1501" xlink:href="#E1151-MJMATHI-41" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;g transform="translate(185,-686)"&gt;&lt;use xlink:href="#E1151-MJMAIN-32"&gt;&lt;/use&gt;&lt;use x="500" xlink:href="#E1151-MJMAIN-30" y="0"&gt;&lt;/use&gt;&lt;use x="1001" xlink:href="#E1151-MJMAIN-30" y="0"&gt;&lt;/use&gt;&lt;use x="1501" xlink:href="#E1151-MJMAIN-30" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;/g&gt;&lt;use x="2889" xlink:href="#E1151-MJMAIN-3D" y="0"&gt;&lt;/use&gt;&lt;use x="3946" xlink:href="#E1151-MJMAIN-30" y="0"&gt;&lt;/use&gt;&lt;use x="4446" xlink:href="#E1151-MJMAIN-2C" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(4891,0)"&gt;&lt;use xlink:href="#E1151-MJMAIN-30"&gt;&lt;/use&gt;&lt;use x="500" xlink:href="#E1151-MJMAIN-35" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;use x="5892" xlink:href="#E1151-MJMATHI-41" y="0"&gt;&lt;/use&gt;&lt;use x="6921" xlink:href="#E1151-MJMAIN-3D" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(7977,0)"&gt;&lt;use xlink:href="#E1151-MJMAIN-35"&gt;&lt;/use&gt;&lt;use x="500" xlink:href="#E1151-MJMAIN-30" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;use x="8978" xlink:href="#E1151-MJMATHI-6D" y="0"&gt;&lt;br /&gt;&lt;/use&gt;&lt;use x="9856" xlink:href="#E1151-MJMATHI-41" y="0"&gt;&lt;br /&gt;&lt;/use&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
&lt;span class="MathJax_Preview" style="color: rgb(136 , 136 , 136);"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div aria-readonly="true" role="textbox" style="display: block; margin: 1em 0em; max-height: none; max-width: none; min-height: 0px; min-width: 0px; position: relative; text-align: center; text-align: center; text-indent: 0px; width: 100%;"&gt;
&lt;span class="MathJax" id="MathJax-Element-6-Frame" style="border: 0px; direction: ltr; display: inline; float: none; font-size: 100%; font-style: normal; font-weight: normal; letter-spacing: normal; line-height: normal; margin: 0px; max-height: none; max-width: none; min-height: 0px; min-width: 0px; padding: 0px; text-align: left; text-indent: 0px; text-transform: none; white-space: nowrap; word-spacing: normal; word-wrap: normal;"&gt;&lt;nobr style="-webkit-transition: none; border: 0px; line-height: normal; margin: 0px; max-height: 5000em; max-width: 5000em; min-height: 0px; min-width: 0px; padding: 0px; text-decoration: none; transition: none; vertical-align: 0px; white-space: nowrap;"&gt;&lt;/nobr&gt;&lt;/span&gt;&lt;/div&gt;
&lt;script id="MathJax-Element-6" type="math/tex; mode=display"&gt;
\frac{100A}{2000} = 0,05A = 50mA&lt;/script&gt;&lt;br /&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
&lt;/div&gt;
&lt;h3 id="c-lculo-de-componentes-del-circuito" style="clear: both; color: rgb(92 , 81 , 70); font-size: 1.6em; font-weight: 400; font-weight: bold; letter-spacing: -1px; margin: 1.125em 0px 0.75em;"&gt;
Cálculo de componentes del circuito&lt;/h3&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
Ahora es cuando viene el momento matemático. Las fórmulas que utilizaremos a continuación son muy simples, y están extraídas de &lt;a href="https://learn.openenergymonitor.org/electricity-monitoring/ct-sensors/interface-with-arduino" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;openenergymonitor&lt;/a&gt;.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Lo de que el transformador nos dé una corriente alterna pequeña como salida está muy bien, pero si lo que queremos es medir el consumo mediante un microcontrolador como el Arduino o el ESP8266, tendremos que traducirlo a &lt;b&gt;voltaje&lt;/b&gt;.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Esto es muy fácil si recordamos la ley de Ohm:&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
&lt;span class="MathJax_Preview" style="color: rgb(136 , 136 , 136);"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div aria-readonly="true" role="textbox" style="display: block; margin: 1em 0em; max-height: none; max-width: none; min-height: 0px; min-width: 0px; position: relative; text-align: center; text-align: center; text-indent: 0px; width: 100%;"&gt;
&lt;span class="MathJax" id="MathJax-Element-22-Frame" style="border: 0px; direction: ltr; display: inline; float: none; font-size: 100%; font-style: normal; font-weight: normal; letter-spacing: normal; line-height: normal; margin: 0px; max-height: none; max-width: none; min-height: 0px; min-width: 0px; padding: 0px; text-align: left; text-indent: 0px; text-transform: none; white-space: nowrap; word-spacing: normal; word-wrap: normal;"&gt;&lt;nobr style="-webkit-transition: none; border: 0px; line-height: normal; margin: 0px; max-height: 5000em; max-width: 5000em; min-height: 0px; min-width: 0px; padding: 0px; text-decoration: none; transition: none; vertical-align: 0px; white-space: nowrap;"&gt;&lt;span class="math" id="MathJax-Span-715" style="-webkit-transition: none; border: 0px; display: inline-block; display: inline; line-height: normal; margin: 0px; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px; width: 20.017em;"&gt;&lt;span style="-webkit-transition: none; border: 0px; display: inline-block; display: inline; font-size: 125%; height: 0px; line-height: normal; margin: 0px; padding: 0px; position: relative; position: static; text-decoration: none; transition: none; vertical-align: 0px; width: 16em;"&gt;&lt;span style="-webkit-transition: none; border: 0px; clip: rect(1.866em 1000em 3.084em -0.428em); display: inline; left: 0em; line-height: normal; margin: 0px; padding: 0px; position: absolute; position: static; text-decoration: none; top: -2.72em; transition: none; vertical-align: 0px;"&gt;&lt;span class="mrow" id="MathJax-Span-716" style="-webkit-transition: none; border: 0px; display: inline; line-height: normal; margin: 0px; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;&lt;span class="mi" id="MathJax-Span-717" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_math&amp;quot;; font-style: italic; line-height: normal; margin: 0px; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;V&lt;span style="-webkit-transition: none; border: 0px; display: inline-block; display: inline; height: 1px; line-height: normal; margin: 0px; overflow: hidden; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px; width: 0.186em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mi" id="MathJax-Span-718" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_math&amp;quot;; font-style: italic; line-height: normal; margin: 0px; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;o&lt;/span&gt;&lt;span class="mi" id="MathJax-Span-719" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_math&amp;quot;; font-style: italic; line-height: normal; margin: 0px; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;l&lt;/span&gt;&lt;span class="mi" id="MathJax-Span-720" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_math&amp;quot;; font-style: italic; line-height: normal; margin: 0px; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;t&lt;/span&gt;&lt;span class="mi" id="MathJax-Span-721" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_math&amp;quot;; font-style: italic; line-height: normal; margin: 0px; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;a&lt;/span&gt;&lt;span class="mi" id="MathJax-Span-722" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_math&amp;quot;; font-style: italic; line-height: normal; margin: 0px; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;j&lt;/span&gt;&lt;span class="mi" id="MathJax-Span-723" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_math&amp;quot;; font-style: italic; line-height: normal; margin: 0px; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;e&lt;/span&gt;&lt;span class="mo" id="MathJax-Span-724" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_main&amp;quot;; line-height: normal; margin: 0px; padding-left: 0.278em; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;=&lt;/span&gt;&lt;span class="mi" id="MathJax-Span-725" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_math&amp;quot;; font-style: italic; line-height: normal; margin: 0px; padding-left: 0.278em; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;I&lt;span style="-webkit-transition: none; border: 0px; display: inline-block; display: inline; height: 1px; line-height: normal; margin: 0px; overflow: hidden; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px; width: 0.064em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mi" id="MathJax-Span-726" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_math&amp;quot;; font-style: italic; line-height: normal; margin: 0px; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;n&lt;/span&gt;&lt;span class="mi" id="MathJax-Span-727" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_math&amp;quot;; font-style: italic; line-height: normal; margin: 0px; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;t&lt;/span&gt;&lt;span class="mi" id="MathJax-Span-728" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_math&amp;quot;; font-style: italic; line-height: normal; margin: 0px; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;e&lt;/span&gt;&lt;span class="mi" id="MathJax-Span-729" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_math&amp;quot;; font-style: italic; line-height: normal; margin: 0px; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;n&lt;/span&gt;&lt;span class="mi" id="MathJax-Span-730" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_math&amp;quot;; font-style: italic; line-height: normal; margin: 0px; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;s&lt;/span&gt;&lt;span class="mi" id="MathJax-Span-731" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_math&amp;quot;; font-style: italic; line-height: normal; margin: 0px; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;i&lt;/span&gt;&lt;span class="mi" id="MathJax-Span-732" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_math&amp;quot;; font-style: italic; line-height: normal; margin: 0px; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;d&lt;span style="-webkit-transition: none; border: 0px; display: inline-block; display: inline; height: 1px; line-height: normal; margin: 0px; overflow: hidden; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px; width: 0.003em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mi" id="MathJax-Span-733" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_math&amp;quot;; font-style: italic; line-height: normal; margin: 0px; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;a&lt;/span&gt;&lt;span class="mi" id="MathJax-Span-734" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_math&amp;quot;; font-style: italic; line-height: normal; margin: 0px; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;d&lt;span style="-webkit-transition: none; border: 0px; display: inline-block; display: inline; height: 1px; line-height: normal; margin: 0px; overflow: hidden; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px; width: 0.003em;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="mo" id="MathJax-Span-735" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_main&amp;quot;; line-height: normal; margin: 0px; padding-left: 0.222em; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;×&lt;/span&gt;&lt;span class="mi" id="MathJax-Span-736" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_math&amp;quot;; font-style: italic; line-height: normal; margin: 0px; padding-left: 0.222em; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;R&lt;/span&gt;&lt;span class="mi" id="MathJax-Span-737" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_math&amp;quot;; font-style: italic; line-height: normal; margin: 0px; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;e&lt;/span&gt;&lt;span class="mi" id="MathJax-Span-738" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_math&amp;quot;; font-style: italic; line-height: normal; margin: 0px; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;s&lt;/span&gt;&lt;span class="mi" id="MathJax-Span-739" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_math&amp;quot;; font-style: italic; line-height: normal; margin: 0px; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;i&lt;/span&gt;&lt;span class="mi" id="MathJax-Span-740" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_math&amp;quot;; font-style: italic; line-height: normal; margin: 0px; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;s&lt;/span&gt;&lt;span class="mi" id="MathJax-Span-741" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_math&amp;quot;; font-style: italic; line-height: normal; margin: 0px; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;t&lt;/span&gt;&lt;span class="mi" id="MathJax-Span-742" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_math&amp;quot;; font-style: italic; line-height: normal; margin: 0px; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;e&lt;/span&gt;&lt;span class="mi" id="MathJax-Span-743" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_math&amp;quot;; font-style: italic; line-height: normal; margin: 0px; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;n&lt;/span&gt;&lt;span class="mi" id="MathJax-Span-744" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_math&amp;quot;; font-style: italic; line-height: normal; margin: 0px; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;c&lt;/span&gt;&lt;span class="mi" id="MathJax-Span-745" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_math&amp;quot;; font-style: italic; line-height: normal; margin: 0px; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;i&lt;/span&gt;&lt;span class="mi" id="MathJax-Span-746" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_math&amp;quot;; font-style: italic; line-height: normal; margin: 0px; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;a&lt;/span&gt;&lt;/span&gt;&lt;span style="-webkit-transition: none; border: 0px; display: inline-block; display: inline; height: 2.72em; line-height: normal; margin: 0px; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px; width: 0px;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="-webkit-transition: none; border-left-style: solid; border-left-width: 0em; border: 0px; display: inline-block; display: inline; height: 1.256em; line-height: normal; margin: 0px; overflow: hidden; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: -0.322em; vertical-align: 0px; width: 0px;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/nobr&gt;&lt;/span&gt;&lt;/div&gt;
&lt;script id="MathJax-Element-22" type="math/tex; mode=display"&gt;
Voltaje = Intensidad \times Resistencia&lt;/script&gt;&lt;br /&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Por tanto, para tener un voltaje tan sólo tendremos que tener una resistencia en el circuito secundario del transformador. A esta resistencia se le llama de carga (&lt;i&gt;burden&lt;/i&gt; en inglés), y tendremos que calcular su valor en base al voltaje que queramos controlar como máximo.&lt;/div&gt;
&lt;ul&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Lo primero que tenemos que saber es qué amperaje máximo vamos a tener realmente.&lt;br /&gt;
Si vamos a medir el consumo en una casa, lo normal es que tengamos un interruptor de control de potencia (&lt;b&gt;ICP&lt;/b&gt;) que nos corte el suministro al llegar al máximo contratado. En la siguiente tabla podemos ver las potencias más normales que podemos contratar:&lt;/div&gt;
&lt;table style="background-color: rgb(250 , 250 , 250); border-collapse: collapse; border-spacing: 0px; margin-bottom: 16px; padding: 0px;"&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="border: 1px solid rgb(204 , 204 , 204); border: 1px solid rgb(230 , 230 , 230); font-weight: bold; margin: 0px; padding: 6px 13px;"&gt;Intensidad&lt;/th&gt;
&lt;th style="border: 1px solid rgb(204 , 204 , 204); border: 1px solid rgb(230 , 230 , 230); font-weight: bold; margin: 0px; padding: 6px 13px;"&gt;Potencia&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="border: 1px solid rgb(204 , 204 , 204); border: 1px solid rgb(230 , 230 , 230); margin: 0px; padding: 6px 13px;"&gt;10 A&lt;/td&gt;
&lt;td style="border: 1px solid rgb(204 , 204 , 204); border: 1px solid rgb(230 , 230 , 230); margin: 0px; padding: 6px 13px;"&gt;2,3 kW&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color: #f2f2f2;"&gt;
&lt;td style="border: 1px solid rgb(204 , 204 , 204); border: 1px solid rgb(230 , 230 , 230); margin: 0px; padding: 6px 13px;"&gt;15 A&lt;/td&gt;
&lt;td style="border: 1px solid rgb(204 , 204 , 204); border: 1px solid rgb(230 , 230 , 230); margin: 0px; padding: 6px 13px;"&gt;3,45 kW&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="border: 1px solid rgb(204 , 204 , 204); border: 1px solid rgb(230 , 230 , 230); margin: 0px; padding: 6px 13px;"&gt;20 A&lt;/td&gt;
&lt;td style="border: 1px solid rgb(204 , 204 , 204); border: 1px solid rgb(230 , 230 , 230); margin: 0px; padding: 6px 13px;"&gt;4,6 kW&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color: #f2f2f2;"&gt;
&lt;td style="border: 1px solid rgb(204 , 204 , 204); border: 1px solid rgb(230 , 230 , 230); margin: 0px; padding: 6px 13px;"&gt;25 A&lt;/td&gt;
&lt;td style="border: 1px solid rgb(204 , 204 , 204); border: 1px solid rgb(230 , 230 , 230); margin: 0px; padding: 6px 13px;"&gt;5,75 kW&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Vamos a suponer que en casa tenemos una potencia contratada de 5,75kW con un ICP de &lt;b&gt;25A&lt;/b&gt; (o que tenemos contratado menos pero querernos curarnos en salud por si nos entra algún pico). Consideramos por tanto esta la corriente máxima que vamos a tener en el primario.&lt;br /&gt;
Esta corriente es &lt;i&gt;alterna&lt;/i&gt; y se denomina corriente &lt;b&gt;RMS&lt;/b&gt; (o corriente &lt;i&gt;eficaz&lt;/i&gt;, aquella que provoca el mismo efecto calorífico que una corriente continua de la misma intensidad), por lo que antes que nada, tenemos que averiguar cuál es la corriente &lt;i&gt;máxima&lt;/i&gt; o &lt;b&gt;pico&lt;/b&gt;.&lt;/div&gt;
&lt;center&gt;
&lt;img alt="Corriente alterna" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcEp1ogyFd9nZ7Hz86ZINbCvSoYzOETA6xoeVDc9aGgGB3OSzc2bJDISZwxbe2BuuCM4Na5AD-yqWeFAXzatyz_4az3Nlrlao0kIoDCA3wyzLrmcff9UiTH4OZWf6VMfDCxR56779IUcY/s400/corriente_alterna.jpg" style="max-width: 100%;" /&gt;&lt;/center&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
La fórmula que relaciona ambos valores es la siguiente:&lt;/div&gt;
&lt;div class="mathjax-block md-end-block" contenteditable="false" id="mathjax-n264" style="-webkit-margin-after: 0rem; -webkit-margin-before: 0rem; box-sizing: border-box; margin: -1.143rem 0px 0.5rem; overflow-x: auto; overflow-y: hidden; padding-top: 0px; position: relative; white-space: pre; width: inherit;"&gt;
&lt;span class="MathJax_Preview" style="box-sizing: border-box; color: #888888;"&gt;&lt;/span&gt;&lt;span class="MathJax_SVG_Display" style="box-sizing: border-box; display: block !important; margin: 1em 0em; max-height: none; max-width: none; min-height: 0px; min-width: 100%; position: relative; text-align: center; text-indent: 0px; width: auto;"&gt;&lt;span class="MathJax_SVG" id="MathJax-Element-1057-Frame" style="border: 0px; box-sizing: border-box; direction: ltr; display: inline-block; float: none; font-size: 16px; font-style: normal; font-weight: normal; letter-spacing: normal; line-height: normal; margin: 0px; max-height: none; max-width: none; min-height: 0px; min-width: 0px; padding: 0px; text-align: left; text-indent: 0px; text-transform: none; white-space: nowrap; word-spacing: normal; word-wrap: normal; zoom: 0.9;" tabindex="-1"&gt;&lt;svg class="in-text-selection" height="3.044ex" style="vertical-align: -0.822ex;" viewbox="0 -956.9 19231.8 1310.7" width="44.668ex" xmlns:xlink="http://www.w3.org/1999/xlink"&gt;&lt;defs&gt;&lt;path d="M397 0Q370 3 218 3Q65 3 38 0H25V62H139V624H25V686H38Q65 683 218 683Q370 683 397 686H410V624H296V62H410V0H397Z" id="E1140-MJMAINB-49" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M23 287Q24 290 25 295T30 317T40 348T55 381T75 411T101 433T134 442Q209 442 230 378L240 387Q302 442 358 442Q423 442 460 395T497 281Q497 173 421 82T249 -10Q227 -10 210 -4Q199 1 187 11T168 28L161 36Q160 35 139 -51T118 -138Q118 -144 126 -145T163 -148H188Q194 -155 194 -157T191 -175Q188 -187 185 -190T172 -194Q170 -194 161 -194T127 -193T65 -192Q-5 -192 -24 -194H-32Q-39 -187 -39 -183Q-37 -156 -26 -148H-6Q28 -147 33 -136Q36 -130 94 103T155 350Q156 355 156 364Q156 405 131 405Q109 405 94 377T71 316T59 280Q57 278 43 278H29Q23 284 23 287ZM178 102Q200 26 252 26Q282 26 310 49T356 107Q374 141 392 215T411 325V331Q411 405 350 405Q339 405 328 402T306 393T286 380T269 365T254 350T243 336T235 326L232 322Q232 321 229 308T218 264T204 212Q178 106 178 102Z" id="E1140-MJMATHI-70" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M21 287Q22 290 23 295T28 317T38 348T53 381T73 411T99 433T132 442Q161 442 183 430T214 408T225 388Q227 382 228 382T236 389Q284 441 347 441H350Q398 441 422 400Q430 381 430 363Q430 333 417 315T391 292T366 288Q346 288 334 299T322 328Q322 376 378 392Q356 405 342 405Q286 405 239 331Q229 315 224 298T190 165Q156 25 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 114 189T154 366Q154 405 128 405Q107 405 92 377T68 316T57 280Q55 278 41 278H27Q21 284 21 287Z" id="E1140-MJMATHI-72" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M184 600Q184 624 203 642T247 661Q265 661 277 649T290 619Q290 596 270 577T226 557Q211 557 198 567T184 600ZM21 287Q21 295 30 318T54 369T98 420T158 442Q197 442 223 419T250 357Q250 340 236 301T196 196T154 83Q149 61 149 51Q149 26 166 26Q175 26 185 29T208 43T235 78T260 137Q263 149 265 151T282 153Q302 153 302 143Q302 135 293 112T268 61T223 11T161 -11Q129 -11 102 10T74 74Q74 91 79 106T122 220Q160 321 166 341T173 380Q173 404 156 404H154Q124 404 99 371T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Z" id="E1140-MJMATHI-69" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M21 287Q22 293 24 303T36 341T56 388T88 425T132 442T175 435T205 417T221 395T229 376L231 369Q231 367 232 367L243 378Q303 442 384 442Q401 442 415 440T441 433T460 423T475 411T485 398T493 385T497 373T500 364T502 357L510 367Q573 442 659 442Q713 442 746 415T780 336Q780 285 742 178T704 50Q705 36 709 31T724 26Q752 26 776 56T815 138Q818 149 821 151T837 153Q857 153 857 145Q857 144 853 130Q845 101 831 73T785 17T716 -10Q669 -10 648 17T627 73Q627 92 663 193T700 345Q700 404 656 404H651Q565 404 506 303L499 291L466 157Q433 26 428 16Q415 -11 385 -11Q372 -11 364 -4T353 8T350 18Q350 29 384 161L420 307Q423 322 423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 181Q151 335 151 342Q154 357 154 369Q154 405 129 405Q107 405 92 377T69 316T57 280Q55 278 41 278H27Q21 284 21 287Z" id="E1140-MJMATHI-6D" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" id="E1140-MJMAIN-3D" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M131 289Q131 321 147 354T203 415T300 442Q362 442 390 415T419 355Q419 323 402 308T364 292Q351 292 340 300T328 326Q328 342 337 354T354 372T367 378Q368 378 368 379Q368 382 361 388T336 399T297 405Q249 405 227 379T204 326Q204 301 223 291T278 274T330 259Q396 230 396 163Q396 135 385 107T352 51T289 7T195 -10Q118 -10 86 19T53 87Q53 126 74 143T118 160Q133 160 146 151T160 120Q160 94 142 76T111 58Q109 57 108 57T107 55Q108 52 115 47T146 34T201 27Q237 27 263 38T301 66T318 97T323 122Q323 150 302 164T254 181T195 196T148 231Q131 256 131 289Z" id="E1140-MJMATHI-73" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M630 29Q630 9 609 9Q604 9 587 25T493 118L389 222L284 117Q178 13 175 11Q171 9 168 9Q160 9 154 15T147 29Q147 36 161 51T255 146L359 250L255 354Q174 435 161 449T147 471Q147 480 153 485T168 490Q173 490 175 489Q178 487 284 383L389 278L493 382Q570 459 587 475T609 491Q630 491 630 471Q630 464 620 453T522 355L418 250L522 145Q606 61 618 48T630 29Z" id="E1140-MJMAIN-D7" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" id="E1140-MJMAIN-32" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M95 178Q89 178 81 186T72 200T103 230T169 280T207 309Q209 311 212 311H213Q219 311 227 294T281 177Q300 134 312 108L397 -77Q398 -77 501 136T707 565T814 786Q820 800 834 800Q841 800 846 794T853 782V776L620 293L385 -193Q381 -200 366 -200Q357 -200 354 -197Q352 -195 256 15L160 225L144 214Q129 202 113 190T95 178Z" id="E1140-MJMAIN-221A" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M164 157Q164 133 148 117T109 101H102Q148 22 224 22Q294 22 326 82Q345 115 345 210Q345 313 318 349Q292 382 260 382H254Q176 382 136 314Q132 307 129 306T114 304Q97 304 95 310Q93 314 93 485V614Q93 664 98 664Q100 666 102 666Q103 666 123 658T178 642T253 634Q324 634 389 662Q397 666 402 666Q410 666 410 648V635Q328 538 205 538Q174 538 149 544L139 546V374Q158 388 169 396T205 412T256 420Q337 420 393 355T449 201Q449 109 385 44T229 -22Q148 -22 99 32T50 154Q50 178 61 192T84 210T107 214Q132 214 148 197T164 157Z" id="E1140-MJMAIN-35" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M208 74Q208 50 254 46Q272 46 272 35Q272 34 270 22Q267 8 264 4T251 0Q249 0 239 0T205 1T141 2Q70 2 50 0H42Q35 7 35 11Q37 38 48 46H62Q132 49 164 96Q170 102 345 401T523 704Q530 716 547 716H555H572Q578 707 578 706L606 383Q634 60 636 57Q641 46 701 46Q726 46 726 36Q726 34 723 22Q720 7 718 4T704 0Q701 0 690 0T651 1T578 2Q484 2 455 0H443Q437 6 437 9T439 27Q443 40 445 43L449 46H469Q523 49 533 63L521 213H283L249 155Q208 86 208 74ZM516 260Q516 271 504 416T490 562L463 519Q447 492 400 412L310 260L413 259Q516 259 516 260Z" id="E1140-MJMATHI-41" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" id="E1140-MJMAIN-31" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M78 60Q78 84 95 102T138 120Q162 120 180 104T199 61Q199 36 182 18T139 0T96 17T78 60Z" id="E1140-MJMAIN-2E" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M462 0Q444 3 333 3Q217 3 199 0H190V46H221Q241 46 248 46T265 48T279 53T286 61Q287 63 287 115V165H28V211L179 442Q332 674 334 675Q336 677 355 677H373L379 671V211H471V165H379V114Q379 73 379 66T385 54Q393 47 442 46H471V0H462ZM293 211V545L74 212L183 211H293Z" id="E1140-MJMAIN-34" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M127 463Q100 463 85 480T69 524Q69 579 117 622T233 665Q268 665 277 664Q351 652 390 611T430 522Q430 470 396 421T302 350L299 348Q299 347 308 345T337 336T375 315Q457 262 457 175Q457 96 395 37T238 -22Q158 -22 100 21T42 130Q42 158 60 175T105 193Q133 193 151 175T169 130Q169 119 166 110T159 94T148 82T136 74T126 70T118 67L114 66Q165 21 238 21Q293 21 321 74Q338 107 338 175V195Q338 290 274 322Q259 328 213 329L171 330L168 332Q166 335 166 348Q166 366 174 366Q202 366 232 371Q266 376 294 413T322 525V533Q322 590 287 612Q265 626 240 626Q208 626 181 615T143 592T132 580H135Q138 579 143 578T153 573T165 566T175 555T183 540T186 520Q186 498 172 481T127 463Z" id="E1140-MJMAIN-33" stroke-width="1"&gt;&lt;/path&gt;&lt;/defs&gt;&lt;g fill="currentColor" stroke-width="0" stroke="currentColor" transform="matrix(1 0 0 -1 0 0)"&gt;&lt;use x="0" xlink:href="#E1140-MJMAINB-49" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(436,-150)"&gt;&lt;use transform="scale(0.707)" x="0" xlink:href="#E1140-MJMATHI-70" y="0"&gt;&lt;/use&gt;&lt;use transform="scale(0.707)" x="503" xlink:href="#E1140-MJMATHI-72" y="0"&gt;&lt;/use&gt;&lt;use transform="scale(0.707)" x="955" xlink:href="#E1140-MJMATHI-69" y="0"&gt;&lt;/use&gt;&lt;use transform="scale(0.707)" x="1300" xlink:href="#E1140-MJMATHI-6D" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;use x="2355" xlink:href="#E1140-MJMAIN-3D" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(3411,0)"&gt;&lt;use x="0" xlink:href="#E1140-MJMAINB-49" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(436,-150)"&gt;&lt;use transform="scale(0.707)" x="0" xlink:href="#E1140-MJMATHI-72" y="0"&gt;&lt;/use&gt;&lt;use transform="scale(0.707)" x="451" xlink:href="#E1140-MJMATHI-6D" y="0"&gt;&lt;/use&gt;&lt;use transform="scale(0.707)" x="1330" xlink:href="#E1140-MJMATHI-73" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;/g&gt;&lt;use x="5442" xlink:href="#E1140-MJMAIN-D7" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(6443,0)"&gt;&lt;use x="0" xlink:href="#E1140-MJMAIN-221A" y="9"&gt;&lt;/use&gt;&lt;rect height="60" stroke="none" width="500" x="833" y="750"&gt;&lt;/rect&gt;&lt;use x="833" xlink:href="#E1140-MJMAIN-32" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;use x="8055" xlink:href="#E1140-MJMAIN-3D" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(9111,0)"&gt;&lt;use xlink:href="#E1140-MJMAIN-32"&gt;&lt;/use&gt;&lt;use x="500" xlink:href="#E1140-MJMAIN-35" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;use x="10112" xlink:href="#E1140-MJMATHI-41" y="0"&gt;&lt;/use&gt;&lt;use x="11085" xlink:href="#E1140-MJMAIN-D7" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(12085,0)"&gt;&lt;use xlink:href="#E1140-MJMAIN-31"&gt;&lt;/use&gt;&lt;use x="500" xlink:href="#E1140-MJMAIN-2E" y="0"&gt;&lt;/use&gt;&lt;use x="779" xlink:href="#E1140-MJMAIN-34" y="0"&gt;&lt;/use&gt;&lt;use x="1279" xlink:href="#E1140-MJMAIN-31" y="0"&gt;&lt;/use&gt;&lt;use x="1780" xlink:href="#E1140-MJMAIN-34" y="0"&gt;&lt;/use&gt;&lt;use x="2280" xlink:href="#E1140-MJMAIN-32" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;use x="15144" xlink:href="#E1140-MJMAIN-3D" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(16200,0)"&gt;&lt;use xlink:href="#E1140-MJMAIN-33"&gt;&lt;/use&gt;&lt;use x="500" xlink:href="#E1140-MJMAIN-35" y="0"&gt;&lt;/use&gt;&lt;use x="1001" xlink:href="#E1140-MJMAIN-2E" y="0"&gt;&lt;/use&gt;&lt;use x="1279" xlink:href="#E1140-MJMAIN-33" y="0"&gt;&lt;/use&gt;&lt;use x="1780" xlink:href="#E1140-MJMAIN-35" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;use x="18481" xlink:href="#E1140-MJMATHI-41" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span class="MathJax" id="MathJax-Element-23-Frame" style="border: 0px; direction: ltr; display: inline; float: none; font-size: 100%; font-style: normal; font-weight: normal; letter-spacing: normal; line-height: normal; margin: 0px; max-height: none; max-width: none; min-height: 0px; min-width: 0px; padding: 0px; text-align: left; text-indent: 0px; text-transform: none; white-space: nowrap; word-spacing: normal; word-wrap: normal;"&gt;&lt;nobr style="-webkit-transition: none; border: 0px; line-height: normal; margin: 0px; max-height: 5000em; max-width: 5000em; min-height: 0px; min-width: 0px; padding: 0px; text-decoration: none; transition: none; vertical-align: 0px; white-space: nowrap;"&gt;&lt;/nobr&gt;&lt;/span&gt;&lt;br /&gt;
&lt;script id="MathJax-Element-23" type="math/tex; mode=display"&gt;
\mathbf{I}_{prim} = \mathbf{I}_{rms}\times \sqrt{2} = 25A\times1.4142 =35.35A&lt;/script&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Esta es la corriente de pico del primario. A continuación tenemos que calcular el del secundario. Sabemos que la proporción es 2000:1, con lo cual:&lt;/div&gt;
&lt;div class="mathjax-block md-end-block" contenteditable="false" id="mathjax-n286" style="-webkit-margin-after: 0rem; -webkit-margin-before: 0rem; box-sizing: border-box; margin: -1.143rem 0px 0.5rem; overflow-x: auto; overflow-y: hidden; padding-top: 0px; position: relative; white-space: pre; width: inherit;"&gt;
&lt;span class="MathJax_Preview" style="box-sizing: border-box; color: #888888;"&gt;&lt;/span&gt;&lt;span class="MathJax_SVG_Display" style="box-sizing: border-box; display: block !important; margin: 1em 0em; max-height: none; max-width: none; min-height: 0px; min-width: 100%; position: relative; text-align: center; text-indent: 0px; width: auto;"&gt;&lt;span class="MathJax_SVG" id="MathJax-Element-1058-Frame" style="border: 0px; box-sizing: border-box; direction: ltr; display: inline-block; float: none; font-size: 16px; font-style: normal; font-weight: normal; letter-spacing: normal; line-height: normal; margin: 0px; max-height: none; max-width: none; min-height: 0px; min-width: 0px; padding: 0px; text-align: left; text-indent: 0px; text-transform: none; white-space: nowrap; word-spacing: normal; word-wrap: normal; zoom: 0.9;" tabindex="-1"&gt;&lt;svg class="in-text-selection" height="5.379ex" style="vertical-align: -1.872ex;" viewbox="0 -1509.8 15367.3 2315.9" width="35.692ex" xmlns:xlink="http://www.w3.org/1999/xlink"&gt;&lt;defs&gt;&lt;path d="M397 0Q370 3 218 3Q65 3 38 0H25V62H139V624H25V686H38Q65 683 218 683Q370 683 397 686H410V624H296V62H410V0H397Z" id="E1141-MJMAINB-49" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M131 289Q131 321 147 354T203 415T300 442Q362 442 390 415T419 355Q419 323 402 308T364 292Q351 292 340 300T328 326Q328 342 337 354T354 372T367 378Q368 378 368 379Q368 382 361 388T336 399T297 405Q249 405 227 379T204 326Q204 301 223 291T278 274T330 259Q396 230 396 163Q396 135 385 107T352 51T289 7T195 -10Q118 -10 86 19T53 87Q53 126 74 143T118 160Q133 160 146 151T160 120Q160 94 142 76T111 58Q109 57 108 57T107 55Q108 52 115 47T146 34T201 27Q237 27 263 38T301 66T318 97T323 122Q323 150 302 164T254 181T195 196T148 231Q131 256 131 289Z" id="E1141-MJMATHI-73" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M39 168Q39 225 58 272T107 350T174 402T244 433T307 442H310Q355 442 388 420T421 355Q421 265 310 237Q261 224 176 223Q139 223 138 221Q138 219 132 186T125 128Q125 81 146 54T209 26T302 45T394 111Q403 121 406 121Q410 121 419 112T429 98T420 82T390 55T344 24T281 -1T205 -11Q126 -11 83 42T39 168ZM373 353Q367 405 305 405Q272 405 244 391T199 357T170 316T154 280T149 261Q149 260 169 260Q282 260 327 284T373 353Z" id="E1141-MJMATHI-65" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M34 159Q34 268 120 355T306 442Q362 442 394 418T427 355Q427 326 408 306T360 285Q341 285 330 295T319 325T330 359T352 380T366 386H367Q367 388 361 392T340 400T306 404Q276 404 249 390Q228 381 206 359Q162 315 142 235T121 119Q121 73 147 50Q169 26 205 26H209Q321 26 394 111Q403 121 406 121Q410 121 419 112T429 98T420 83T391 55T346 25T282 0T202 -11Q127 -11 81 37T34 159Z" id="E1141-MJMATHI-63" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" id="E1141-MJMAIN-3D" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M23 287Q24 290 25 295T30 317T40 348T55 381T75 411T101 433T134 442Q209 442 230 378L240 387Q302 442 358 442Q423 442 460 395T497 281Q497 173 421 82T249 -10Q227 -10 210 -4Q199 1 187 11T168 28L161 36Q160 35 139 -51T118 -138Q118 -144 126 -145T163 -148H188Q194 -155 194 -157T191 -175Q188 -187 185 -190T172 -194Q170 -194 161 -194T127 -193T65 -192Q-5 -192 -24 -194H-32Q-39 -187 -39 -183Q-37 -156 -26 -148H-6Q28 -147 33 -136Q36 -130 94 103T155 350Q156 355 156 364Q156 405 131 405Q109 405 94 377T71 316T59 280Q57 278 43 278H29Q23 284 23 287ZM178 102Q200 26 252 26Q282 26 310 49T356 107Q374 141 392 215T411 325V331Q411 405 350 405Q339 405 328 402T306 393T286 380T269 365T254 350T243 336T235 326L232 322Q232 321 229 308T218 264T204 212Q178 106 178 102Z" id="E1141-MJMATHI-70" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M21 287Q22 290 23 295T28 317T38 348T53 381T73 411T99 433T132 442Q161 442 183 430T214 408T225 388Q227 382 228 382T236 389Q284 441 347 441H350Q398 441 422 400Q430 381 430 363Q430 333 417 315T391 292T366 288Q346 288 334 299T322 328Q322 376 378 392Q356 405 342 405Q286 405 239 331Q229 315 224 298T190 165Q156 25 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 114 189T154 366Q154 405 128 405Q107 405 92 377T68 316T57 280Q55 278 41 278H27Q21 284 21 287Z" id="E1141-MJMATHI-72" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M184 600Q184 624 203 642T247 661Q265 661 277 649T290 619Q290 596 270 577T226 557Q211 557 198 567T184 600ZM21 287Q21 295 30 318T54 369T98 420T158 442Q197 442 223 419T250 357Q250 340 236 301T196 196T154 83Q149 61 149 51Q149 26 166 26Q175 26 185 29T208 43T235 78T260 137Q263 149 265 151T282 153Q302 153 302 143Q302 135 293 112T268 61T223 11T161 -11Q129 -11 102 10T74 74Q74 91 79 106T122 220Q160 321 166 341T173 380Q173 404 156 404H154Q124 404 99 371T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Z" id="E1141-MJMATHI-69" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M21 287Q22 293 24 303T36 341T56 388T88 425T132 442T175 435T205 417T221 395T229 376L231 369Q231 367 232 367L243 378Q303 442 384 442Q401 442 415 440T441 433T460 423T475 411T485 398T493 385T497 373T500 364T502 357L510 367Q573 442 659 442Q713 442 746 415T780 336Q780 285 742 178T704 50Q705 36 709 31T724 26Q752 26 776 56T815 138Q818 149 821 151T837 153Q857 153 857 145Q857 144 853 130Q845 101 831 73T785 17T716 -10Q669 -10 648 17T627 73Q627 92 663 193T700 345Q700 404 656 404H651Q565 404 506 303L499 291L466 157Q433 26 428 16Q415 -11 385 -11Q372 -11 364 -4T353 8T350 18Q350 29 384 161L420 307Q423 322 423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 181Q151 335 151 342Q154 357 154 369Q154 405 129 405Q107 405 92 377T69 316T57 280Q55 278 41 278H27Q21 284 21 287Z" id="E1141-MJMATHI-6D" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" id="E1141-MJMAIN-32" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" id="E1141-MJMAIN-30" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M127 463Q100 463 85 480T69 524Q69 579 117 622T233 665Q268 665 277 664Q351 652 390 611T430 522Q430 470 396 421T302 350L299 348Q299 347 308 345T337 336T375 315Q457 262 457 175Q457 96 395 37T238 -22Q158 -22 100 21T42 130Q42 158 60 175T105 193Q133 193 151 175T169 130Q169 119 166 110T159 94T148 82T136 74T126 70T118 67L114 66Q165 21 238 21Q293 21 321 74Q338 107 338 175V195Q338 290 274 322Q259 328 213 329L171 330L168 332Q166 335 166 348Q166 366 174 366Q202 366 232 371Q266 376 294 413T322 525V533Q322 590 287 612Q265 626 240 626Q208 626 181 615T143 592T132 580H135Q138 579 143 578T153 573T165 566T175 555T183 540T186 520Q186 498 172 481T127 463Z" id="E1141-MJMAIN-33" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M164 157Q164 133 148 117T109 101H102Q148 22 224 22Q294 22 326 82Q345 115 345 210Q345 313 318 349Q292 382 260 382H254Q176 382 136 314Q132 307 129 306T114 304Q97 304 95 310Q93 314 93 485V614Q93 664 98 664Q100 666 102 666Q103 666 123 658T178 642T253 634Q324 634 389 662Q397 666 402 666Q410 666 410 648V635Q328 538 205 538Q174 538 149 544L139 546V374Q158 388 169 396T205 412T256 420Q337 420 393 355T449 201Q449 109 385 44T229 -22Q148 -22 99 32T50 154Q50 178 61 192T84 210T107 214Q132 214 148 197T164 157Z" id="E1141-MJMAIN-35" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M78 60Q78 84 95 102T138 120Q162 120 180 104T199 61Q199 36 182 18T139 0T96 17T78 60Z" id="E1141-MJMAIN-2E" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M208 74Q208 50 254 46Q272 46 272 35Q272 34 270 22Q267 8 264 4T251 0Q249 0 239 0T205 1T141 2Q70 2 50 0H42Q35 7 35 11Q37 38 48 46H62Q132 49 164 96Q170 102 345 401T523 704Q530 716 547 716H555H572Q578 707 578 706L606 383Q634 60 636 57Q641 46 701 46Q726 46 726 36Q726 34 723 22Q720 7 718 4T704 0Q701 0 690 0T651 1T578 2Q484 2 455 0H443Q437 6 437 9T439 27Q443 40 445 43L449 46H469Q523 49 533 63L521 213H283L249 155Q208 86 208 74ZM516 260Q516 271 504 416T490 562L463 519Q447 492 400 412L310 260L413 259Q516 259 516 260Z" id="E1141-MJMATHI-41" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M55 283Q55 356 103 409T217 463Q262 463 297 447T395 382Q431 355 446 344T493 320T554 307H558Q613 307 652 344T694 433Q694 464 708 464T722 432Q722 356 673 304T564 251H554Q510 251 465 275T387 329T310 382T223 407H219Q164 407 122 367Q91 333 85 295T76 253T69 250Q55 250 55 283ZM56 56Q56 71 72 76H706Q722 70 722 56Q722 44 707 36H70Q56 43 56 56Z" id="E1141-MJMAIN-2243" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" id="E1141-MJMAIN-31" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M55 458Q56 460 72 567L88 674Q88 676 108 676H128V672Q128 662 143 655T195 646T364 644H485V605L417 512Q408 500 387 472T360 435T339 403T319 367T305 330T292 284T284 230T278 162T275 80Q275 66 275 52T274 28V19Q270 2 255 -10T221 -22Q210 -22 200 -19T179 0T168 40Q168 198 265 368Q285 400 349 489L395 552H302Q128 552 119 546Q113 543 108 522T98 479L95 458V455H55V458Z" id="E1141-MJMAIN-37" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M42 313Q42 476 123 571T303 666Q372 666 402 630T432 550Q432 525 418 510T379 495Q356 495 341 509T326 548Q326 592 373 601Q351 623 311 626Q240 626 194 566Q147 500 147 364L148 360Q153 366 156 373Q197 433 263 433H267Q313 433 348 414Q372 400 396 374T435 317Q456 268 456 210V192Q456 169 451 149Q440 90 387 34T253 -22Q225 -22 199 -14T143 16T92 75T56 172T42 313ZM257 397Q227 397 205 380T171 335T154 278T148 216Q148 133 160 97T198 39Q222 21 251 21Q302 21 329 59Q342 77 347 104T352 209Q352 289 347 316T329 361Q302 397 257 397Z" id="E1141-MJMAIN-36" stroke-width="1"&gt;&lt;/path&gt;&lt;/defs&gt;&lt;g fill="currentColor" stroke-width="0" stroke="currentColor" transform="matrix(1 0 0 -1 0 0)"&gt;&lt;use x="0" xlink:href="#E1141-MJMAINB-49" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(436,-150)"&gt;&lt;use transform="scale(0.707)" x="0" xlink:href="#E1141-MJMATHI-73" y="0"&gt;&lt;/use&gt;&lt;use transform="scale(0.707)" x="469" xlink:href="#E1141-MJMATHI-65" y="0"&gt;&lt;/use&gt;&lt;use transform="scale(0.707)" x="936" xlink:href="#E1141-MJMATHI-63" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;use x="1782" xlink:href="#E1141-MJMAIN-3D" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(2561,0)"&gt;&lt;g transform="translate(397,0)"&gt;&lt;rect height="60" stroke="none" width="2197" x="0" y="220"&gt;&lt;/rect&gt;&lt;g transform="translate(60,753)"&gt;&lt;use x="0" xlink:href="#E1141-MJMAINB-49" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(436,-150)"&gt;&lt;use transform="scale(0.707)" x="0" xlink:href="#E1141-MJMATHI-70" y="0"&gt;&lt;/use&gt;&lt;use transform="scale(0.707)" x="503" xlink:href="#E1141-MJMATHI-72" y="0"&gt;&lt;/use&gt;&lt;use transform="scale(0.707)" x="955" xlink:href="#E1141-MJMATHI-69" y="0"&gt;&lt;/use&gt;&lt;use transform="scale(0.707)" x="1300" xlink:href="#E1141-MJMATHI-6D" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;/g&gt;&lt;g transform="translate(97,-686)"&gt;&lt;use xlink:href="#E1141-MJMAIN-32"&gt;&lt;/use&gt;&lt;use x="500" xlink:href="#E1141-MJMAIN-30" y="0"&gt;&lt;/use&gt;&lt;use x="1001" xlink:href="#E1141-MJMAIN-30" y="0"&gt;&lt;/use&gt;&lt;use x="1501" xlink:href="#E1141-MJMAIN-30" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;use x="5554" xlink:href="#E1141-MJMAIN-3D" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(6332,0)"&gt;&lt;g transform="translate(397,0)"&gt;&lt;rect height="60" stroke="none" width="3151" x="0" y="220"&gt;&lt;/rect&gt;&lt;g transform="translate(60,676)"&gt;&lt;use xlink:href="#E1141-MJMAIN-33"&gt;&lt;/use&gt;&lt;use x="500" xlink:href="#E1141-MJMAIN-35" y="0"&gt;&lt;/use&gt;&lt;use x="1001" xlink:href="#E1141-MJMAIN-2E" y="0"&gt;&lt;/use&gt;&lt;use x="1279" xlink:href="#E1141-MJMAIN-33" y="0"&gt;&lt;/use&gt;&lt;use x="1780" xlink:href="#E1141-MJMAIN-35" y="0"&gt;&lt;/use&gt;&lt;use x="2280" xlink:href="#E1141-MJMATHI-41" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;g transform="translate(574,-686)"&gt;&lt;use xlink:href="#E1141-MJMAIN-32"&gt;&lt;/use&gt;&lt;use x="500" xlink:href="#E1141-MJMAIN-30" y="0"&gt;&lt;/use&gt;&lt;use x="1001" xlink:href="#E1141-MJMAIN-30" y="0"&gt;&lt;/use&gt;&lt;use x="1501" xlink:href="#E1141-MJMAIN-30" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;use x="10279" xlink:href="#E1141-MJMAIN-2243" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(11335,0)"&gt;&lt;use xlink:href="#E1141-MJMAIN-30"&gt;&lt;/use&gt;&lt;use x="500" xlink:href="#E1141-MJMAIN-2E" y="0"&gt;&lt;/use&gt;&lt;use x="779" xlink:href="#E1141-MJMAIN-30" y="0"&gt;&lt;/use&gt;&lt;use x="1279" xlink:href="#E1141-MJMAIN-31" y="0"&gt;&lt;/use&gt;&lt;use x="1780" xlink:href="#E1141-MJMAIN-37" y="0"&gt;&lt;/use&gt;&lt;use x="2280" xlink:href="#E1141-MJMAIN-36" y="0"&gt;&lt;/use&gt;&lt;use x="2781" xlink:href="#E1141-MJMAIN-37" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;use x="14616" xlink:href="#E1141-MJMATHI-41" y="0"&gt;&lt;br /&gt;&lt;/use&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span class="MathJax" id="MathJax-Element-24-Frame" style="border: 0px; direction: ltr; display: inline; float: none; font-size: 100%; font-style: normal; font-weight: normal; letter-spacing: normal; line-height: normal; margin: 0px; max-height: none; max-width: none; min-height: 0px; min-width: 0px; padding: 0px; text-align: left; text-indent: 0px; text-transform: none; white-space: nowrap; word-spacing: normal; word-wrap: normal;"&gt;&lt;nobr style="-webkit-transition: none; border: 0px; line-height: normal; margin: 0px; max-height: 5000em; max-width: 5000em; min-height: 0px; min-width: 0px; padding: 0px; text-decoration: none; transition: none; vertical-align: 0px; white-space: nowrap;"&gt;&lt;/nobr&gt;&lt;/span&gt;&lt;br /&gt;
&lt;script id="MathJax-Element-24" type="math/tex; mode=display"&gt;
\mathbf{I}_{sec}=\frac{\mathbf{I}_{prim}}{2000}= \frac{35.35A}{2000}\simeq 0.01767 A&lt;/script&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Insisto en que la corriente (tanto la de entrada como la de salida) es alterna. Por tanto, para convertir a voltaje, debemos tener en cuenta cuál es el voltaje máximo que admite la entrada del microcontrolador que vamos a utilizar. Más adelante insisto en esto, pero supongamos que el voltaje máximo que admite el dispositivo es de 3.3V.&lt;br /&gt;
Al poner una resistencia de carga vamos a tener un voltaje también alterno, con una onda senoidal, que será positivo en el pico más alto (el que corresponda a 0,017 A) pero negativo en el punto más bajo (el que corresponda a -0,017 A). Con la fórmula anterior hemos obtenido la corriente de pico, pero necesitamos saber cuál es el recorrido completo de la onda, desde el punto más bajo hasta el más alto, para después traducir este recorrido a un voltaje por medio de la resistencia.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Esto es lo que denominamos &lt;b&gt;corriente pico-a-pico&lt;/b&gt;, que es el doble. Por tanto, la fórmula para calcular la resistencia sería la siguiente:&lt;/div&gt;
&lt;span class="MathJax_SVG_Display" style="box-sizing: border-box; display: block !important; margin: 1em 0em; max-height: none; max-width: none; min-height: 0px; min-width: 100%; position: relative; text-align: center; text-indent: 0px; width: auto;"&gt;&lt;span class="MathJax_SVG" id="MathJax-Element-1059-Frame" style="border: 0px; box-sizing: border-box; direction: ltr; display: inline-block; float: none; font-size: 16px; font-style: normal; font-weight: normal; letter-spacing: normal; line-height: normal; margin: 0px; max-height: none; max-width: none; min-height: 0px; min-width: 0px; padding: 0px; text-align: left; text-indent: 0px; text-transform: none; white-space: nowrap; word-spacing: normal; word-wrap: normal; zoom: 0.9;" tabindex="-1"&gt;&lt;svg class="in-text-selection" height="2.694ex" style="vertical-align: -0.822ex;" viewbox="0 -806.1 17516 1160" width="40.682ex" xmlns:xlink="http://www.w3.org/1999/xlink"&gt;&lt;defs&gt;&lt;path d="M397 0Q370 3 218 3Q65 3 38 0H25V62H139V624H25V686H38Q65 683 218 683Q370 683 397 686H410V624H296V62H410V0H397Z" id="E1142-MJMAINB-49" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M23 287Q24 290 25 295T30 317T40 348T55 381T75 411T101 433T134 442Q209 442 230 378L240 387Q302 442 358 442Q423 442 460 395T497 281Q497 173 421 82T249 -10Q227 -10 210 -4Q199 1 187 11T168 28L161 36Q160 35 139 -51T118 -138Q118 -144 126 -145T163 -148H188Q194 -155 194 -157T191 -175Q188 -187 185 -190T172 -194Q170 -194 161 -194T127 -193T65 -192Q-5 -192 -24 -194H-32Q-39 -187 -39 -183Q-37 -156 -26 -148H-6Q28 -147 33 -136Q36 -130 94 103T155 350Q156 355 156 364Q156 405 131 405Q109 405 94 377T71 316T59 280Q57 278 43 278H29Q23 284 23 287ZM178 102Q200 26 252 26Q282 26 310 49T356 107Q374 141 392 215T411 325V331Q411 405 350 405Q339 405 328 402T306 393T286 380T269 365T254 350T243 336T235 326L232 322Q232 321 229 308T218 264T204 212Q178 106 178 102Z" id="E1142-MJMATHI-70" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" id="E1142-MJMAIN-3D" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" id="E1142-MJMAIN-32" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M630 29Q630 9 609 9Q604 9 587 25T493 118L389 222L284 117Q178 13 175 11Q171 9 168 9Q160 9 154 15T147 29Q147 36 161 51T255 146L359 250L255 354Q174 435 161 449T147 471Q147 480 153 485T168 490Q173 490 175 489Q178 487 284 383L389 278L493 382Q570 459 587 475T609 491Q630 491 630 471Q630 464 620 453T522 355L418 250L522 145Q606 61 618 48T630 29Z" id="E1142-MJMAIN-D7" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M131 289Q131 321 147 354T203 415T300 442Q362 442 390 415T419 355Q419 323 402 308T364 292Q351 292 340 300T328 326Q328 342 337 354T354 372T367 378Q368 378 368 379Q368 382 361 388T336 399T297 405Q249 405 227 379T204 326Q204 301 223 291T278 274T330 259Q396 230 396 163Q396 135 385 107T352 51T289 7T195 -10Q118 -10 86 19T53 87Q53 126 74 143T118 160Q133 160 146 151T160 120Q160 94 142 76T111 58Q109 57 108 57T107 55Q108 52 115 47T146 34T201 27Q237 27 263 38T301 66T318 97T323 122Q323 150 302 164T254 181T195 196T148 231Q131 256 131 289Z" id="E1142-MJMATHI-73" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M39 168Q39 225 58 272T107 350T174 402T244 433T307 442H310Q355 442 388 420T421 355Q421 265 310 237Q261 224 176 223Q139 223 138 221Q138 219 132 186T125 128Q125 81 146 54T209 26T302 45T394 111Q403 121 406 121Q410 121 419 112T429 98T420 82T390 55T344 24T281 -1T205 -11Q126 -11 83 42T39 168ZM373 353Q367 405 305 405Q272 405 244 391T199 357T170 316T154 280T149 261Q149 260 169 260Q282 260 327 284T373 353Z" id="E1142-MJMATHI-65" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M34 159Q34 268 120 355T306 442Q362 442 394 418T427 355Q427 326 408 306T360 285Q341 285 330 295T319 325T330 359T352 380T366 386H367Q367 388 361 392T340 400T306 404Q276 404 249 390Q228 381 206 359Q162 315 142 235T121 119Q121 73 147 50Q169 26 205 26H209Q321 26 394 111Q403 121 406 121Q410 121 419 112T429 98T420 83T391 55T346 25T282 0T202 -11Q127 -11 81 37T34 159Z" id="E1142-MJMATHI-63" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" id="E1142-MJMAIN-30" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M78 60Q78 84 95 102T138 120Q162 120 180 104T199 61Q199 36 182 18T139 0T96 17T78 60Z" id="E1142-MJMAIN-2E" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" id="E1142-MJMAIN-31" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M55 458Q56 460 72 567L88 674Q88 676 108 676H128V672Q128 662 143 655T195 646T364 644H485V605L417 512Q408 500 387 472T360 435T339 403T319 367T305 330T292 284T284 230T278 162T275 80Q275 66 275 52T274 28V19Q270 2 255 -10T221 -22Q210 -22 200 -19T179 0T168 40Q168 198 265 368Q285 400 349 489L395 552H302Q128 552 119 546Q113 543 108 522T98 479L95 458V455H55V458Z" id="E1142-MJMAIN-37" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M42 313Q42 476 123 571T303 666Q372 666 402 630T432 550Q432 525 418 510T379 495Q356 495 341 509T326 548Q326 592 373 601Q351 623 311 626Q240 626 194 566Q147 500 147 364L148 360Q153 366 156 373Q197 433 263 433H267Q313 433 348 414Q372 400 396 374T435 317Q456 268 456 210V192Q456 169 451 149Q440 90 387 34T253 -22Q225 -22 199 -14T143 16T92 75T56 172T42 313ZM257 397Q227 397 205 380T171 335T154 278T148 216Q148 133 160 97T198 39Q222 21 251 21Q302 21 329 59Q342 77 347 104T352 209Q352 289 347 316T329 361Q302 397 257 397Z" id="E1142-MJMAIN-36" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M208 74Q208 50 254 46Q272 46 272 35Q272 34 270 22Q267 8 264 4T251 0Q249 0 239 0T205 1T141 2Q70 2 50 0H42Q35 7 35 11Q37 38 48 46H62Q132 49 164 96Q170 102 345 401T523 704Q530 716 547 716H555H572Q578 707 578 706L606 383Q634 60 636 57Q641 46 701 46Q726 46 726 36Q726 34 723 22Q720 7 718 4T704 0Q701 0 690 0T651 1T578 2Q484 2 455 0H443Q437 6 437 9T439 27Q443 40 445 43L449 46H469Q523 49 533 63L521 213H283L249 155Q208 86 208 74ZM516 260Q516 271 504 416T490 562L463 519Q447 492 400 412L310 260L413 259Q516 259 516 260Z" id="E1142-MJMATHI-41" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M127 463Q100 463 85 480T69 524Q69 579 117 622T233 665Q268 665 277 664Q351 652 390 611T430 522Q430 470 396 421T302 350L299 348Q299 347 308 345T337 336T375 315Q457 262 457 175Q457 96 395 37T238 -22Q158 -22 100 21T42 130Q42 158 60 175T105 193Q133 193 151 175T169 130Q169 119 166 110T159 94T148 82T136 74T126 70T118 67L114 66Q165 21 238 21Q293 21 321 74Q338 107 338 175V195Q338 290 274 322Q259 328 213 329L171 330L168 332Q166 335 166 348Q166 366 174 366Q202 366 232 371Q266 376 294 413T322 525V533Q322 590 287 612Q265 626 240 626Q208 626 181 615T143 592T132 580H135Q138 579 143 578T153 573T165 566T175 555T183 540T186 520Q186 498 172 481T127 463Z" id="E1142-MJMAIN-33" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M164 157Q164 133 148 117T109 101H102Q148 22 224 22Q294 22 326 82Q345 115 345 210Q345 313 318 349Q292 382 260 382H254Q176 382 136 314Q132 307 129 306T114 304Q97 304 95 310Q93 314 93 485V614Q93 664 98 664Q100 666 102 666Q103 666 123 658T178 642T253 634Q324 634 389 662Q397 666 402 666Q410 666 410 648V635Q328 538 205 538Q174 538 149 544L139 546V374Q158 388 169 396T205 412T256 420Q337 420 393 355T449 201Q449 109 385 44T229 -22Q148 -22 99 32T50 154Q50 178 61 192T84 210T107 214Q132 214 148 197T164 157Z" id="E1142-MJMAIN-35" stroke-width="1"&gt;&lt;/path&gt;&lt;/defs&gt;&lt;g fill="currentColor" stroke-width="0" stroke="currentColor" transform="matrix(1 0 0 -1 0 0)"&gt;&lt;use x="0" xlink:href="#E1142-MJMAINB-49" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(436,-150)"&gt;&lt;use transform="scale(0.707)" x="0" xlink:href="#E1142-MJMATHI-70" y="0"&gt;&lt;/use&gt;&lt;use transform="scale(0.707)" x="503" xlink:href="#E1142-MJMATHI-70" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;use x="1526" xlink:href="#E1142-MJMAIN-3D" y="0"&gt;&lt;/use&gt;&lt;use x="2582" xlink:href="#E1142-MJMAIN-32" y="0"&gt;&lt;/use&gt;&lt;use x="3305" xlink:href="#E1142-MJMAIN-D7" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(4306,0)"&gt;&lt;use x="0" xlink:href="#E1142-MJMAINB-49" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(436,-150)"&gt;&lt;use transform="scale(0.707)" x="0" xlink:href="#E1142-MJMATHI-73" y="0"&gt;&lt;/use&gt;&lt;use transform="scale(0.707)" x="469" xlink:href="#E1142-MJMATHI-65" y="0"&gt;&lt;/use&gt;&lt;use transform="scale(0.707)" x="936" xlink:href="#E1142-MJMATHI-63" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;/g&gt;&lt;use x="6088" xlink:href="#E1142-MJMAIN-3D" y="0"&gt;&lt;/use&gt;&lt;use x="7144" xlink:href="#E1142-MJMAIN-32" y="0"&gt;&lt;/use&gt;&lt;use x="7867" xlink:href="#E1142-MJMAIN-D7" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(8868,0)"&gt;&lt;use xlink:href="#E1142-MJMAIN-30"&gt;&lt;/use&gt;&lt;use x="500" xlink:href="#E1142-MJMAIN-2E" y="0"&gt;&lt;/use&gt;&lt;use x="779" xlink:href="#E1142-MJMAIN-30" y="0"&gt;&lt;/use&gt;&lt;use x="1279" xlink:href="#E1142-MJMAIN-31" y="0"&gt;&lt;/use&gt;&lt;use x="1780" xlink:href="#E1142-MJMAIN-37" y="0"&gt;&lt;/use&gt;&lt;use x="2280" xlink:href="#E1142-MJMAIN-36" y="0"&gt;&lt;/use&gt;&lt;use x="2781" xlink:href="#E1142-MJMAIN-37" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;use x="12149" xlink:href="#E1142-MJMATHI-41" y="0"&gt;&lt;/use&gt;&lt;use x="13178" xlink:href="#E1142-MJMAIN-3D" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(14234,0)"&gt;&lt;use xlink:href="#E1142-MJMAIN-30"&gt;&lt;/use&gt;&lt;use x="500" xlink:href="#E1142-MJMAIN-2E" y="0"&gt;&lt;/use&gt;&lt;use x="779" xlink:href="#E1142-MJMAIN-30" y="0"&gt;&lt;/use&gt;&lt;use x="1279" xlink:href="#E1142-MJMAIN-33" y="0"&gt;&lt;/use&gt;&lt;use x="1780" xlink:href="#E1142-MJMAIN-35" y="0"&gt;&lt;/use&gt;&lt;use x="2280" xlink:href="#E1142-MJMAIN-33" y="0"&gt;&lt;/use&gt;&lt;use x="2781" xlink:href="#E1142-MJMAIN-35" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="mathjax-block md-end-block" contenteditable="false" id="mathjax-n610" style="-webkit-margin-after: 0rem; -webkit-margin-before: 0rem; box-sizing: border-box; margin: 0.5rem 0px; overflow-x: auto; overflow-y: hidden; padding-top: 0px; position: relative; white-space: pre; width: inherit;"&gt;
&lt;span class="MathJax_Preview" style="box-sizing: border-box; color: #888888;"&gt;&lt;/span&gt;&lt;span class="MathJax_SVG_Display" style="box-sizing: border-box; display: block !important; margin: 1em 0em; max-height: none; max-width: none; min-height: 0px; min-width: 100%; position: relative; text-align: center; text-indent: 0px; width: auto;"&gt;&lt;span class="MathJax_SVG" id="MathJax-Element-1060-Frame" style="border: 0px; box-sizing: border-box; direction: ltr; display: inline-block; float: none; font-size: 16px; font-style: normal; font-weight: normal; letter-spacing: normal; line-height: normal; margin: 0px; max-height: none; max-width: none; min-height: 0px; min-width: 0px; padding: 0px; text-align: left; text-indent: 0px; text-transform: none; white-space: nowrap; word-spacing: normal; word-wrap: normal; zoom: 0.9;" tabindex="-1"&gt;&lt;svg class="in-text-selection" height="5.846ex" style="vertical-align: -2.456ex;" viewbox="0 -1459.5 14488.6 2517" width="33.651ex" xmlns:xlink="http://www.w3.org/1999/xlink"&gt;&lt;defs&gt;&lt;path d="M394 0Q370 3 222 3Q75 3 51 0H39V62H147V624H39V686H234Q256 686 299 686T362 687Q479 687 554 669T681 593Q716 550 716 497Q716 390 568 338Q569 337 572 336T577 332Q605 317 623 300T650 258T662 218T668 172Q678 98 689 76Q707 40 748 40Q770 40 780 54T795 88T801 111Q805 117 827 117H831Q846 117 852 113T858 92Q857 78 852 63T834 30T797 1T739 -11Q630 -11 580 12T511 87Q506 104 506 168Q506 170 506 178T507 194Q507 289 438 313Q424 318 356 318H298V62H406V0H394ZM366 369Q459 370 490 381Q548 402 548 476V498V517Q548 578 513 600Q479 624 392 624H358H298V369H366Z" id="E1143-MJMAINB-52" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" id="E1143-MJMAIN-3D" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M592 686H604Q615 685 631 685T666 684T700 684T724 683Q829 683 835 686H843V624H744L611 315Q584 254 546 165Q492 40 482 19T461 -6L460 -7H409Q398 -4 391 9Q385 20 257 315L124 624H25V686H36Q57 683 190 683Q340 683 364 686H377V624H289L384 403L480 185L492 212Q504 240 529 298T575 405L670 624H582V686H592Z" id="E1143-MJMAINB-56" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M21 287Q22 293 24 303T36 341T56 388T88 425T132 442T175 435T205 417T221 395T229 376L231 369Q231 367 232 367L243 378Q303 442 384 442Q401 442 415 440T441 433T460 423T475 411T485 398T493 385T497 373T500 364T502 357L510 367Q573 442 659 442Q713 442 746 415T780 336Q780 285 742 178T704 50Q705 36 709 31T724 26Q752 26 776 56T815 138Q818 149 821 151T837 153Q857 153 857 145Q857 144 853 130Q845 101 831 73T785 17T716 -10Q669 -10 648 17T627 73Q627 92 663 193T700 345Q700 404 656 404H651Q565 404 506 303L499 291L466 157Q433 26 428 16Q415 -11 385 -11Q372 -11 364 -4T353 8T350 18Q350 29 384 161L420 307Q423 322 423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 181Q151 335 151 342Q154 357 154 369Q154 405 129 405Q107 405 92 377T69 316T57 280Q55 278 41 278H27Q21 284 21 287Z" id="E1143-MJMATHI-6D" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M33 157Q33 258 109 349T280 441Q331 441 370 392Q386 422 416 422Q429 422 439 414T449 394Q449 381 412 234T374 68Q374 43 381 35T402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487Q506 153 506 144Q506 138 501 117T481 63T449 13Q436 0 417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157ZM351 328Q351 334 346 350T323 385T277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q217 26 254 59T298 110Q300 114 325 217T351 328Z" id="E1143-MJMATHI-61" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M52 289Q59 331 106 386T222 442Q257 442 286 424T329 379Q371 442 430 442Q467 442 494 420T522 361Q522 332 508 314T481 292T458 288Q439 288 427 299T415 328Q415 374 465 391Q454 404 425 404Q412 404 406 402Q368 386 350 336Q290 115 290 78Q290 50 306 38T341 26Q378 26 414 59T463 140Q466 150 469 151T485 153H489Q504 153 504 145Q504 144 502 134Q486 77 440 33T333 -11Q263 -11 227 52Q186 -10 133 -10H127Q78 -10 57 16T35 71Q35 103 54 123T99 143Q142 143 142 101Q142 81 130 66T107 46T94 41L91 40Q91 39 97 36T113 29T132 26Q168 26 194 71Q203 87 217 139T245 247T261 313Q266 340 266 352Q266 380 251 392T217 404Q177 404 142 372T93 290Q91 281 88 280T72 278H58Q52 284 52 289Z" id="E1143-MJMATHI-78" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M397 0Q370 3 218 3Q65 3 38 0H25V62H139V624H25V686H38Q65 683 218 683Q370 683 397 686H410V624H296V62H410V0H397Z" id="E1143-MJMAINB-49" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M23 287Q24 290 25 295T30 317T40 348T55 381T75 411T101 433T134 442Q209 442 230 378L240 387Q302 442 358 442Q423 442 460 395T497 281Q497 173 421 82T249 -10Q227 -10 210 -4Q199 1 187 11T168 28L161 36Q160 35 139 -51T118 -138Q118 -144 126 -145T163 -148H188Q194 -155 194 -157T191 -175Q188 -187 185 -190T172 -194Q170 -194 161 -194T127 -193T65 -192Q-5 -192 -24 -194H-32Q-39 -187 -39 -183Q-37 -156 -26 -148H-6Q28 -147 33 -136Q36 -130 94 103T155 350Q156 355 156 364Q156 405 131 405Q109 405 94 377T71 316T59 280Q57 278 43 278H29Q23 284 23 287ZM178 102Q200 26 252 26Q282 26 310 49T356 107Q374 141 392 215T411 325V331Q411 405 350 405Q339 405 328 402T306 393T286 380T269 365T254 350T243 336T235 326L232 322Q232 321 229 308T218 264T204 212Q178 106 178 102Z" id="E1143-MJMATHI-70" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M127 463Q100 463 85 480T69 524Q69 579 117 622T233 665Q268 665 277 664Q351 652 390 611T430 522Q430 470 396 421T302 350L299 348Q299 347 308 345T337 336T375 315Q457 262 457 175Q457 96 395 37T238 -22Q158 -22 100 21T42 130Q42 158 60 175T105 193Q133 193 151 175T169 130Q169 119 166 110T159 94T148 82T136 74T126 70T118 67L114 66Q165 21 238 21Q293 21 321 74Q338 107 338 175V195Q338 290 274 322Q259 328 213 329L171 330L168 332Q166 335 166 348Q166 366 174 366Q202 366 232 371Q266 376 294 413T322 525V533Q322 590 287 612Q265 626 240 626Q208 626 181 615T143 592T132 580H135Q138 579 143 578T153 573T165 566T175 555T183 540T186 520Q186 498 172 481T127 463Z" id="E1143-MJMAIN-33" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M78 60Q78 84 95 102T138 120Q162 120 180 104T199 61Q199 36 182 18T139 0T96 17T78 60Z" id="E1143-MJMAIN-2E" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M52 648Q52 670 65 683H76Q118 680 181 680Q299 680 320 683H330Q336 677 336 674T334 656Q329 641 325 637H304Q282 635 274 635Q245 630 242 620Q242 618 271 369T301 118L374 235Q447 352 520 471T595 594Q599 601 599 609Q599 633 555 637Q537 637 537 648Q537 649 539 661Q542 675 545 679T558 683Q560 683 570 683T604 682T668 681Q737 681 755 683H762Q769 676 769 672Q769 655 760 640Q757 637 743 637Q730 636 719 635T698 630T682 623T670 615T660 608T652 599T645 592L452 282Q272 -9 266 -16Q263 -18 259 -21L241 -22H234Q216 -22 216 -15Q213 -9 177 305Q139 623 138 626Q133 637 76 637H59Q52 642 52 648Z" id="E1143-MJMATHI-56" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" id="E1143-MJMAIN-30" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M164 157Q164 133 148 117T109 101H102Q148 22 224 22Q294 22 326 82Q345 115 345 210Q345 313 318 349Q292 382 260 382H254Q176 382 136 314Q132 307 129 306T114 304Q97 304 95 310Q93 314 93 485V614Q93 664 98 664Q100 666 102 666Q103 666 123 658T178 642T253 634Q324 634 389 662Q397 666 402 666Q410 666 410 648V635Q328 538 205 538Q174 538 149 544L139 546V374Q158 388 169 396T205 412T256 420Q337 420 393 355T449 201Q449 109 385 44T229 -22Q148 -22 99 32T50 154Q50 178 61 192T84 210T107 214Q132 214 148 197T164 157Z" id="E1143-MJMAIN-35" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M208 74Q208 50 254 46Q272 46 272 35Q272 34 270 22Q267 8 264 4T251 0Q249 0 239 0T205 1T141 2Q70 2 50 0H42Q35 7 35 11Q37 38 48 46H62Q132 49 164 96Q170 102 345 401T523 704Q530 716 547 716H555H572Q578 707 578 706L606 383Q634 60 636 57Q641 46 701 46Q726 46 726 36Q726 34 723 22Q720 7 718 4T704 0Q701 0 690 0T651 1T578 2Q484 2 455 0H443Q437 6 437 9T439 27Q443 40 445 43L449 46H469Q523 49 533 63L521 213H283L249 155Q208 86 208 74ZM516 260Q516 271 504 416T490 562L463 519Q447 492 400 412L310 260L413 259Q516 259 516 260Z" id="E1143-MJMATHI-41" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M55 283Q55 356 103 409T217 463Q262 463 297 447T395 382Q431 355 446 344T493 320T554 307H558Q613 307 652 344T694 433Q694 464 708 464T722 432Q722 356 673 304T564 251H554Q510 251 465 275T387 329T310 382T223 407H219Q164 407 122 367Q91 333 85 295T76 253T69 250Q55 250 55 283ZM56 56Q56 71 72 76H706Q722 70 722 56Q722 44 707 36H70Q56 43 56 56Z" id="E1143-MJMAIN-2243" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M352 287Q304 211 232 211Q154 211 104 270T44 396Q42 412 42 436V444Q42 537 111 606Q171 666 243 666Q245 666 249 666T257 665H261Q273 665 286 663T323 651T370 619T413 560Q456 472 456 334Q456 194 396 97Q361 41 312 10T208 -22Q147 -22 108 7T68 93T121 149Q143 149 158 135T173 96Q173 78 164 65T148 49T135 44L131 43Q131 41 138 37T164 27T206 22H212Q272 22 313 86Q352 142 352 280V287ZM244 248Q292 248 321 297T351 430Q351 508 343 542Q341 552 337 562T323 588T293 615T246 625Q208 625 181 598Q160 576 154 546T147 441Q147 358 152 329T172 282Q197 248 244 248Z" id="E1143-MJMAIN-39" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M55 454Q55 503 75 546T127 617T197 665T272 695T337 704H352Q396 704 404 703Q527 687 596 615T666 454Q666 392 635 330T559 200T499 83V80H543Q589 81 600 83T617 93Q622 102 629 135T636 172L637 177H677V175L660 89Q645 3 644 2V0H552H488Q461 0 456 3T451 20Q451 89 499 235T548 455Q548 512 530 555T483 622T424 656T361 668Q332 668 303 658T243 626T193 560T174 456Q174 380 222 233T270 20Q270 7 263 0H77V2Q76 3 61 89L44 175V177H84L85 172Q85 171 88 155T96 119T104 93Q109 86 120 84T178 80H222V83Q206 132 162 199T87 329T55 454Z" id="E1143-MJMAIN-3A9" stroke-width="1"&gt;&lt;/path&gt;&lt;/defs&gt;&lt;g fill="currentColor" stroke-width="0" stroke="currentColor" transform="matrix(1 0 0 -1 0 0)"&gt;&lt;use x="0" xlink:href="#E1143-MJMAINB-52" y="0"&gt;&lt;/use&gt;&lt;use x="1140" xlink:href="#E1143-MJMAIN-3D" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(1918,0)"&gt;&lt;g transform="translate(397,0)"&gt;&lt;rect height="60" stroke="none" width="2489" x="0" y="220"&gt;&lt;/rect&gt;&lt;g transform="translate(60,676)"&gt;&lt;use x="0" xlink:href="#E1143-MJMAINB-56" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(869,-150)"&gt;&lt;use transform="scale(0.707)" x="0" xlink:href="#E1143-MJMATHI-6D" y="0"&gt;&lt;/use&gt;&lt;use transform="scale(0.707)" x="878" xlink:href="#E1143-MJMATHI-61" y="0"&gt;&lt;/use&gt;&lt;use transform="scale(0.707)" x="1408" xlink:href="#E1143-MJMATHI-78" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;/g&gt;&lt;g transform="translate(620,-686)"&gt;&lt;use x="0" xlink:href="#E1143-MJMAINB-49" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(436,-150)"&gt;&lt;use transform="scale(0.707)" x="0" xlink:href="#E1143-MJMATHI-70" y="0"&gt;&lt;/use&gt;&lt;use transform="scale(0.707)" x="503" xlink:href="#E1143-MJMATHI-70" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;use x="5204" xlink:href="#E1143-MJMAIN-3D" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(5982,0)"&gt;&lt;g transform="translate(397,0)"&gt;&lt;rect height="60" stroke="none" width="4152" x="0" y="220"&gt;&lt;/rect&gt;&lt;g transform="translate(1051,676)"&gt;&lt;use xlink:href="#E1143-MJMAIN-33"&gt;&lt;/use&gt;&lt;use x="500" xlink:href="#E1143-MJMAIN-2E" y="0"&gt;&lt;/use&gt;&lt;use x="779" xlink:href="#E1143-MJMAIN-33" y="0"&gt;&lt;/use&gt;&lt;use x="1279" xlink:href="#E1143-MJMATHI-56" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;g transform="translate(60,-686)"&gt;&lt;use xlink:href="#E1143-MJMAIN-30"&gt;&lt;/use&gt;&lt;use x="500" xlink:href="#E1143-MJMAIN-2E" y="0"&gt;&lt;/use&gt;&lt;use x="779" xlink:href="#E1143-MJMAIN-30" y="0"&gt;&lt;/use&gt;&lt;use x="1279" xlink:href="#E1143-MJMAIN-33" y="0"&gt;&lt;/use&gt;&lt;use x="1780" xlink:href="#E1143-MJMAIN-35" y="0"&gt;&lt;/use&gt;&lt;use x="2280" xlink:href="#E1143-MJMAIN-33" y="0"&gt;&lt;/use&gt;&lt;use x="2781" xlink:href="#E1143-MJMAIN-35" y="0"&gt;&lt;/use&gt;&lt;use x="3281" xlink:href="#E1143-MJMATHI-41" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;g transform="translate(10930,0)"&gt;&lt;use xlink:href="#E1143-MJMAIN-3D"&gt;&lt;/use&gt;&lt;use x="778" xlink:href="#E1143-MJMAIN-2243" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;g transform="translate(12765,0)"&gt;&lt;use xlink:href="#E1143-MJMAIN-39"&gt;&lt;/use&gt;&lt;use x="500" xlink:href="#E1143-MJMAIN-33" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;use x="13766" xlink:href="#E1143-MJMAIN-3A9" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span class="MathJax" id="MathJax-Element-26-Frame" style="border: 0px; direction: ltr; display: inline; float: none; font-size: 100%; font-style: normal; font-weight: normal; letter-spacing: normal; line-height: normal; margin: 0px; max-height: none; max-width: none; min-height: 0px; min-width: 0px; padding: 0px; text-align: left; text-indent: 0px; text-transform: none; white-space: nowrap; word-spacing: normal; word-wrap: normal;"&gt;&lt;nobr style="-webkit-transition: none; border: 0px; line-height: normal; margin: 0px; max-height: 5000em; max-width: 5000em; min-height: 0px; min-width: 0px; padding: 0px; text-decoration: none; transition: none; vertical-align: 0px; white-space: nowrap;"&gt;&lt;/nobr&gt;&lt;/span&gt;&lt;br /&gt;
&lt;script id="MathJax-Element-26" type="math/tex; mode=display"&gt;
\mathbf{R} = \frac{\mathbf{V}_{max}}{\mathbf{I}_{pp}}= \frac{3.3V}{0.03535 A}=\simeq93 \Omega&lt;/script&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Esta es la resistencia de carga ideal. Debemos aproximarla en base a las que hay en el mercado, siempre utilizando el menor valor disponible que se acerque más al valor ideal. En nuestro caso, podemos acercarnos mediante la utilización de tres resistencias en serie:&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
&lt;span class="MathJax_Preview" style="color: rgb(136 , 136 , 136);"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div aria-readonly="true" class="MathJax_Display" role="textbox" style="display: block; margin: 1em 0em; max-height: none; max-width: none; min-height: 0px; min-width: 0px; position: relative; text-align: center; text-align: center; text-indent: 0px; width: 100%;"&gt;
&lt;span class="MathJax" id="MathJax-Element-27-Frame" style="border: 0px; direction: ltr; display: inline; float: none; font-size: 100%; font-style: normal; font-weight: normal; letter-spacing: normal; line-height: normal; margin: 0px; max-height: none; max-width: none; min-height: 0px; min-width: 0px; padding: 0px; text-align: left; text-indent: 0px; text-transform: none; white-space: nowrap; word-spacing: normal; word-wrap: normal;"&gt;&lt;nobr style="-webkit-transition: none; border: 0px; line-height: normal; margin: 0px; max-height: 5000em; max-width: 5000em; min-height: 0px; min-width: 0px; padding: 0px; text-decoration: none; transition: none; vertical-align: 0px; white-space: nowrap;"&gt;&lt;span class="math" id="MathJax-Span-878" style="-webkit-transition: none; border: 0px; display: inline-block; display: inline; line-height: normal; margin: 0px; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px; width: 13.283em;"&gt;&lt;span style="-webkit-transition: none; border: 0px; display: inline-block; display: inline; font-size: 125%; height: 0px; line-height: normal; margin: 0px; padding: 0px; position: relative; position: static; text-decoration: none; transition: none; vertical-align: 0px; width: 10.613em;"&gt;&lt;span style="-webkit-transition: none; border: 0px; clip: rect(1.856em 1000em 2.962em -0.43em); display: inline; left: 0em; line-height: normal; margin: 0px; padding: 0px; position: absolute; position: static; text-decoration: none; top: -2.72em; transition: none; vertical-align: 0px;"&gt;&lt;span class="mrow" id="MathJax-Span-879" style="-webkit-transition: none; border: 0px; display: inline; line-height: normal; margin: 0px; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;&lt;span class="mn" id="MathJax-Span-880" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_main&amp;quot;; line-height: normal; margin: 0px; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;22&lt;/span&gt;&lt;span class="mi" id="MathJax-Span-881" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_main&amp;quot;; line-height: normal; margin: 0px; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;Ω&lt;/span&gt;&lt;span class="mo" id="MathJax-Span-882" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_main&amp;quot;; line-height: normal; margin: 0px; padding-left: 0.222em; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;+&lt;/span&gt;&lt;span class="mn" id="MathJax-Span-883" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_main&amp;quot;; line-height: normal; margin: 0px; padding-left: 0.222em; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;22&lt;/span&gt;&lt;span class="mi" id="MathJax-Span-884" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_main&amp;quot;; line-height: normal; margin: 0px; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;Ω&lt;/span&gt;&lt;span class="mo" id="MathJax-Span-885" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_main&amp;quot;; line-height: normal; margin: 0px; padding-left: 0.222em; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;+&lt;/span&gt;&lt;span class="mn" id="MathJax-Span-886" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_main&amp;quot;; line-height: normal; margin: 0px; padding-left: 0.222em; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;47&lt;/span&gt;&lt;span class="mi" id="MathJax-Span-887" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_main&amp;quot;; line-height: normal; margin: 0px; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;Ω&lt;/span&gt;&lt;span class="mo" id="MathJax-Span-888" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_main&amp;quot;; line-height: normal; margin: 0px; padding-left: 0.278em; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;=&lt;/span&gt;&lt;span class="mn" id="MathJax-Span-889" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_main&amp;quot;; line-height: normal; margin: 0px; padding-left: 0.278em; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;91&lt;/span&gt;&lt;span class="mi" id="MathJax-Span-890" style="-webkit-transition: none; border: 0px; display: inline; font-family: &amp;quot;mathjax_main&amp;quot;; line-height: normal; margin: 0px; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px;"&gt;Ω&lt;/span&gt;&lt;/span&gt;&lt;span style="-webkit-transition: none; border: 0px; display: inline-block; display: inline; height: 2.72em; line-height: normal; margin: 0px; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: 0px; width: 0px;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="-webkit-transition: none; border-left-style: solid; border-left-width: 0em; border: 0px; display: inline-block; display: inline; height: 1.116em; line-height: normal; margin: 0px; overflow: hidden; padding: 0px; position: static; text-decoration: none; transition: none; vertical-align: -0.169em; vertical-align: 0px; width: 0px;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/nobr&gt;&lt;/span&gt;&lt;/div&gt;
&lt;script id="MathJax-Element-27" type="math/tex; mode=display"&gt;
22\Omega + 22\Omega + 47\Omega = 91\Omega&lt;/script&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Por tanto, este será el valor de nuestra resistencia de carga. Con esta resistencia, podríamos avanzar los valores de voltaje que obtendríamos para ciertos valores de corriente:&lt;/div&gt;
&lt;div class="mathjax-block md-end-block" contenteditable="false" id="mathjax-n765" style="-webkit-margin-after: 0rem; -webkit-margin-before: 0rem; -webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #333333; font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; margin: -1.143rem 0px 0.5rem; orphans: 2; overflow-x: auto; overflow-y: hidden; padding-top: 0px; position: relative; text-align: left; text-indent: 0px; text-transform: none; white-space: pre; widows: 2; width: inherit; word-spacing: 0px;"&gt;
&lt;span class="MathJax_Preview" style="box-sizing: border-box; color: #888888;"&gt;&lt;/span&gt;&lt;span class="MathJax_SVG_Display" style="box-sizing: border-box; display: block !important; margin: 1em 0em; max-height: none; max-width: none; min-height: 0px; min-width: 100%; position: relative; text-align: center; text-indent: 0px; width: auto;"&gt;&lt;span class="MathJax_SVG" id="MathJax-Element-1062-Frame" style="border: 0px; box-sizing: border-box; direction: ltr; display: inline-block; float: none; font-size: 16px; font-style: normal; font-weight: normal; letter-spacing: normal; line-height: normal; margin: 0px; max-height: none; max-width: none; min-height: 0px; min-width: 0px; padding: 0px; text-align: left; text-indent: 0px; text-transform: none; white-space: nowrap; word-spacing: normal; word-wrap: normal; zoom: 0.9;" tabindex="-1"&gt;&lt;svg class="in-text-selection" height="5.262ex" style="vertical-align: -1.872ex;" viewbox="0 -1459.5 34262 2265.7" width="79.577ex" xmlns:xlink="http://www.w3.org/1999/xlink"&gt;&lt;defs&gt;&lt;path d="M397 0Q370 3 218 3Q65 3 38 0H25V62H139V624H25V686H38Q65 683 218 683Q370 683 397 686H410V624H296V62H410V0H397Z" id="E1145-MJMAINB-49" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M23 287Q24 290 25 295T30 317T40 348T55 381T75 411T101 433T134 442Q209 442 230 378L240 387Q302 442 358 442Q423 442 460 395T497 281Q497 173 421 82T249 -10Q227 -10 210 -4Q199 1 187 11T168 28L161 36Q160 35 139 -51T118 -138Q118 -144 126 -145T163 -148H188Q194 -155 194 -157T191 -175Q188 -187 185 -190T172 -194Q170 -194 161 -194T127 -193T65 -192Q-5 -192 -24 -194H-32Q-39 -187 -39 -183Q-37 -156 -26 -148H-6Q28 -147 33 -136Q36 -130 94 103T155 350Q156 355 156 364Q156 405 131 405Q109 405 94 377T71 316T59 280Q57 278 43 278H29Q23 284 23 287ZM178 102Q200 26 252 26Q282 26 310 49T356 107Q374 141 392 215T411 325V331Q411 405 350 405Q339 405 328 402T306 393T286 380T269 365T254 350T243 336T235 326L232 322Q232 321 229 308T218 264T204 212Q178 106 178 102Z" id="E1145-MJMATHI-70" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M21 287Q22 290 23 295T28 317T38 348T53 381T73 411T99 433T132 442Q161 442 183 430T214 408T225 388Q227 382 228 382T236 389Q284 441 347 441H350Q398 441 422 400Q430 381 430 363Q430 333 417 315T391 292T366 288Q346 288 334 299T322 328Q322 376 378 392Q356 405 342 405Q286 405 239 331Q229 315 224 298T190 165Q156 25 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 114 189T154 366Q154 405 128 405Q107 405 92 377T68 316T57 280Q55 278 41 278H27Q21 284 21 287Z" id="E1145-MJMATHI-72" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M184 600Q184 624 203 642T247 661Q265 661 277 649T290 619Q290 596 270 577T226 557Q211 557 198 567T184 600ZM21 287Q21 295 30 318T54 369T98 420T158 442Q197 442 223 419T250 357Q250 340 236 301T196 196T154 83Q149 61 149 51Q149 26 166 26Q175 26 185 29T208 43T235 78T260 137Q263 149 265 151T282 153Q302 153 302 143Q302 135 293 112T268 61T223 11T161 -11Q129 -11 102 10T74 74Q74 91 79 106T122 220Q160 321 166 341T173 380Q173 404 156 404H154Q124 404 99 371T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Z" id="E1145-MJMATHI-69" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M21 287Q22 293 24 303T36 341T56 388T88 425T132 442T175 435T205 417T221 395T229 376L231 369Q231 367 232 367L243 378Q303 442 384 442Q401 442 415 440T441 433T460 423T475 411T485 398T493 385T497 373T500 364T502 357L510 367Q573 442 659 442Q713 442 746 415T780 336Q780 285 742 178T704 50Q705 36 709 31T724 26Q752 26 776 56T815 138Q818 149 821 151T837 153Q857 153 857 145Q857 144 853 130Q845 101 831 73T785 17T716 -10Q669 -10 648 17T627 73Q627 92 663 193T700 345Q700 404 656 404H651Q565 404 506 303L499 291L466 157Q433 26 428 16Q415 -11 385 -11Q372 -11 364 -4T353 8T350 18Q350 29 384 161L420 307Q423 322 423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 181Q151 335 151 342Q154 357 154 369Q154 405 129 405Q107 405 92 377T69 316T57 280Q55 278 41 278H27Q21 284 21 287Z" id="E1145-MJMATHI-6D" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" id="E1145-MJMAIN-3D" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" id="E1145-MJMAIN-31" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" id="E1145-MJMAIN-30" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M208 74Q208 50 254 46Q272 46 272 35Q272 34 270 22Q267 8 264 4T251 0Q249 0 239 0T205 1T141 2Q70 2 50 0H42Q35 7 35 11Q37 38 48 46H62Q132 49 164 96Q170 102 345 401T523 704Q530 716 547 716H555H572Q578 707 578 706L606 383Q634 60 636 57Q641 46 701 46Q726 46 726 36Q726 34 723 22Q720 7 718 4T704 0Q701 0 690 0T651 1T578 2Q484 2 455 0H443Q437 6 437 9T439 27Q443 40 445 43L449 46H469Q523 49 533 63L521 213H283L249 155Q208 86 208 74ZM516 260Q516 271 504 416T490 562L463 519Q447 492 400 412L310 260L413 259Q516 259 516 260Z" id="E1145-MJMATHI-41" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M580 514Q580 525 596 525Q601 525 604 525T609 525T613 524T615 523T617 520T619 517T622 512Q659 438 720 381T831 300T927 263Q944 258 944 250T935 239T898 228T840 204Q696 134 622 -12Q618 -21 615 -22T600 -24Q580 -24 580 -17Q580 -13 585 0Q620 69 671 123L681 133H70Q56 140 56 153Q56 168 72 173H725L735 181Q774 211 852 250Q851 251 834 259T789 283T735 319L725 327H72Q56 332 56 347Q56 360 70 367H681L671 377Q638 412 609 458T580 514Z" id="E1145-MJMAIN-21D2" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M131 289Q131 321 147 354T203 415T300 442Q362 442 390 415T419 355Q419 323 402 308T364 292Q351 292 340 300T328 326Q328 342 337 354T354 372T367 378Q368 378 368 379Q368 382 361 388T336 399T297 405Q249 405 227 379T204 326Q204 301 223 291T278 274T330 259Q396 230 396 163Q396 135 385 107T352 51T289 7T195 -10Q118 -10 86 19T53 87Q53 126 74 143T118 160Q133 160 146 151T160 120Q160 94 142 76T111 58Q109 57 108 57T107 55Q108 52 115 47T146 34T201 27Q237 27 263 38T301 66T318 97T323 122Q323 150 302 164T254 181T195 196T148 231Q131 256 131 289Z" id="E1145-MJMATHI-73" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M39 168Q39 225 58 272T107 350T174 402T244 433T307 442H310Q355 442 388 420T421 355Q421 265 310 237Q261 224 176 223Q139 223 138 221Q138 219 132 186T125 128Q125 81 146 54T209 26T302 45T394 111Q403 121 406 121Q410 121 419 112T429 98T420 82T390 55T344 24T281 -1T205 -11Q126 -11 83 42T39 168ZM373 353Q367 405 305 405Q272 405 244 391T199 357T170 316T154 280T149 261Q149 260 169 260Q282 260 327 284T373 353Z" id="E1145-MJMATHI-65" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M34 159Q34 268 120 355T306 442Q362 442 394 418T427 355Q427 326 408 306T360 285Q341 285 330 295T319 325T330 359T352 380T366 386H367Q367 388 361 392T340 400T306 404Q276 404 249 390Q228 381 206 359Q162 315 142 235T121 119Q121 73 147 50Q169 26 205 26H209Q321 26 394 111Q403 121 406 121Q410 121 419 112T429 98T420 83T391 55T346 25T282 0T202 -11Q127 -11 81 37T34 159Z" id="E1145-MJMATHI-63" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" id="E1145-MJMAIN-32" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M78 60Q78 84 95 102T138 120Q162 120 180 104T199 61Q199 36 182 18T139 0T96 17T78 60Z" id="E1145-MJMAIN-2E" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M164 157Q164 133 148 117T109 101H102Q148 22 224 22Q294 22 326 82Q345 115 345 210Q345 313 318 349Q292 382 260 382H254Q176 382 136 314Q132 307 129 306T114 304Q97 304 95 310Q93 314 93 485V614Q93 664 98 664Q100 666 102 666Q103 666 123 658T178 642T253 634Q324 634 389 662Q397 666 402 666Q410 666 410 648V635Q328 538 205 538Q174 538 149 544L139 546V374Q158 388 169 396T205 412T256 420Q337 420 393 355T449 201Q449 109 385 44T229 -22Q148 -22 99 32T50 154Q50 178 61 192T84 210T107 214Q132 214 148 197T164 157Z" id="E1145-MJMAIN-35" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M592 686H604Q615 685 631 685T666 684T700 684T724 683Q829 683 835 686H843V624H744L611 315Q584 254 546 165Q492 40 482 19T461 -6L460 -7H409Q398 -4 391 9Q385 20 257 315L124 624H25V686H36Q57 683 190 683Q340 683 364 686H377V624H289L384 403L480 185L492 212Q504 240 529 298T575 405L670 624H582V686H592Z" id="E1145-MJMAINB-56" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M630 29Q630 9 609 9Q604 9 587 25T493 118L389 222L284 117Q178 13 175 11Q171 9 168 9Q160 9 154 15T147 29Q147 36 161 51T255 146L359 250L255 354Q174 435 161 449T147 471Q147 480 153 485T168 490Q173 490 175 489Q178 487 284 383L389 278L493 382Q570 459 587 475T609 491Q630 491 630 471Q630 464 620 453T522 355L418 250L522 145Q606 61 618 48T630 29Z" id="E1145-MJMAIN-D7" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M394 0Q370 3 222 3Q75 3 51 0H39V62H147V624H39V686H234Q256 686 299 686T362 687Q479 687 554 669T681 593Q716 550 716 497Q716 390 568 338Q569 337 572 336T577 332Q605 317 623 300T650 258T662 218T668 172Q678 98 689 76Q707 40 748 40Q770 40 780 54T795 88T801 111Q805 117 827 117H831Q846 117 852 113T858 92Q857 78 852 63T834 30T797 1T739 -11Q630 -11 580 12T511 87Q506 104 506 168Q506 170 506 178T507 194Q507 289 438 313Q424 318 356 318H298V62H406V0H394ZM366 369Q459 370 490 381Q548 402 548 476V498V517Q548 578 513 600Q479 624 392 624H358H298V369H366Z" id="E1145-MJMAINB-52" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M352 287Q304 211 232 211Q154 211 104 270T44 396Q42 412 42 436V444Q42 537 111 606Q171 666 243 666Q245 666 249 666T257 665H261Q273 665 286 663T323 651T370 619T413 560Q456 472 456 334Q456 194 396 97Q361 41 312 10T208 -22Q147 -22 108 7T68 93T121 149Q143 149 158 135T173 96Q173 78 164 65T148 49T135 44L131 43Q131 41 138 37T164 27T206 22H212Q272 22 313 86Q352 142 352 280V287ZM244 248Q292 248 321 297T351 430Q351 508 343 542Q341 552 337 562T323 588T293 615T246 625Q208 625 181 598Q160 576 154 546T147 441Q147 358 152 329T172 282Q197 248 244 248Z" id="E1145-MJMAIN-39" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M55 454Q55 503 75 546T127 617T197 665T272 695T337 704H352Q396 704 404 703Q527 687 596 615T666 454Q666 392 635 330T559 200T499 83V80H543Q589 81 600 83T617 93Q622 102 629 135T636 172L637 177H677V175L660 89Q645 3 644 2V0H552H488Q461 0 456 3T451 20Q451 89 499 235T548 455Q548 512 530 555T483 622T424 656T361 668Q332 668 303 658T243 626T193 560T174 456Q174 380 222 233T270 20Q270 7 263 0H77V2Q76 3 61 89L44 175V177H84L85 172Q85 171 88 155T96 119T104 93Q109 86 120 84T178 80H222V83Q206 132 162 199T87 329T55 454Z" id="E1145-MJMAIN-3A9" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M462 0Q444 3 333 3Q217 3 199 0H190V46H221Q241 46 248 46T265 48T279 53T286 61Q287 63 287 115V165H28V211L179 442Q332 674 334 675Q336 677 355 677H373L379 671V211H471V165H379V114Q379 73 379 66T385 54Q393 47 442 46H471V0H462ZM293 211V545L74 212L183 211H293Z" id="E1145-MJMAIN-34" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M52 648Q52 670 65 683H76Q118 680 181 680Q299 680 320 683H330Q336 677 336 674T334 656Q329 641 325 637H304Q282 635 274 635Q245 630 242 620Q242 618 271 369T301 118L374 235Q447 352 520 471T595 594Q599 601 599 609Q599 633 555 637Q537 637 537 648Q537 649 539 661Q542 675 545 679T558 683Q560 683 570 683T604 682T668 681Q737 681 755 683H762Q769 676 769 672Q769 655 760 640Q757 637 743 637Q730 636 719 635T698 630T682 623T670 615T660 608T652 599T645 592L452 282Q272 -9 266 -16Q263 -18 259 -21L241 -22H234Q216 -22 216 -15Q213 -9 177 305Q139 623 138 626Q133 637 76 637H59Q52 642 52 648Z" id="E1145-MJMATHI-56" stroke-width="1"&gt;&lt;/path&gt;&lt;/defs&gt;&lt;g fill="currentColor" stroke-width="0" stroke="currentColor" transform="matrix(1 0 0 -1 0 0)"&gt;&lt;use x="0" xlink:href="#E1145-MJMAINB-49" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(436,-150)"&gt;&lt;use transform="scale(0.707)" x="0" xlink:href="#E1145-MJMATHI-70" y="0"&gt;&lt;/use&gt;&lt;use transform="scale(0.707)" x="503" xlink:href="#E1145-MJMATHI-72" y="0"&gt;&lt;/use&gt;&lt;use transform="scale(0.707)" x="955" xlink:href="#E1145-MJMATHI-69" y="0"&gt;&lt;/use&gt;&lt;use transform="scale(0.707)" x="1300" xlink:href="#E1145-MJMATHI-6D" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;use x="2355" xlink:href="#E1145-MJMAIN-3D" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(3411,0)"&gt;&lt;use xlink:href="#E1145-MJMAIN-31"&gt;&lt;/use&gt;&lt;use x="500" xlink:href="#E1145-MJMAIN-30" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;use x="4412" xlink:href="#E1145-MJMATHI-41" y="0"&gt;&lt;/use&gt;&lt;use x="5440" xlink:href="#E1145-MJMAIN-21D2" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(6718,0)"&gt;&lt;use x="0" xlink:href="#E1145-MJMAINB-49" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(436,-150)"&gt;&lt;use transform="scale(0.707)" x="0" xlink:href="#E1145-MJMATHI-73" y="0"&gt;&lt;/use&gt;&lt;use transform="scale(0.707)" x="469" xlink:href="#E1145-MJMATHI-65" y="0"&gt;&lt;/use&gt;&lt;use transform="scale(0.707)" x="936" xlink:href="#E1145-MJMATHI-63" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;/g&gt;&lt;use x="8501" xlink:href="#E1145-MJMAIN-3D" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(9280,0)"&gt;&lt;g transform="translate(397,0)"&gt;&lt;rect height="60" stroke="none" width="2122" x="0" y="220"&gt;&lt;/rect&gt;&lt;g transform="translate(185,676)"&gt;&lt;use xlink:href="#E1145-MJMAIN-31"&gt;&lt;/use&gt;&lt;use x="500" xlink:href="#E1145-MJMAIN-30" y="0"&gt;&lt;/use&gt;&lt;use x="1001" xlink:href="#E1145-MJMATHI-41" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;g transform="translate(60,-686)"&gt;&lt;use xlink:href="#E1145-MJMAIN-32"&gt;&lt;/use&gt;&lt;use x="500" xlink:href="#E1145-MJMAIN-30" y="0"&gt;&lt;/use&gt;&lt;use x="1001" xlink:href="#E1145-MJMAIN-30" y="0"&gt;&lt;/use&gt;&lt;use x="1501" xlink:href="#E1145-MJMAIN-30" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;use x="12197" xlink:href="#E1145-MJMAIN-3D" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(13253,0)"&gt;&lt;use xlink:href="#E1145-MJMAIN-30"&gt;&lt;/use&gt;&lt;use x="500" xlink:href="#E1145-MJMAIN-2E" y="0"&gt;&lt;/use&gt;&lt;use x="779" xlink:href="#E1145-MJMAIN-30" y="0"&gt;&lt;/use&gt;&lt;use x="1279" xlink:href="#E1145-MJMAIN-30" y="0"&gt;&lt;/use&gt;&lt;use x="1780" xlink:href="#E1145-MJMAIN-35" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;use x="15534" xlink:href="#E1145-MJMATHI-41" y="0"&gt;&lt;/use&gt;&lt;use x="16562" xlink:href="#E1145-MJMAIN-21D2" y="0"&gt;&lt;/use&gt;&lt;use x="17840" xlink:href="#E1145-MJMAINB-56" y="0"&gt;&lt;/use&gt;&lt;use x="18988" xlink:href="#E1145-MJMAIN-3D" y="0"&gt;&lt;/use&gt;&lt;use x="20044" xlink:href="#E1145-MJMAINB-49" y="0"&gt;&lt;/use&gt;&lt;use x="20703" xlink:href="#E1145-MJMAIN-D7" y="0"&gt;&lt;/use&gt;&lt;use x="21703" xlink:href="#E1145-MJMAINB-52" y="0"&gt;&lt;/use&gt;&lt;use x="22844" xlink:href="#E1145-MJMAIN-3D" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(23900,0)"&gt;&lt;use xlink:href="#E1145-MJMAIN-30"&gt;&lt;/use&gt;&lt;use x="500" xlink:href="#E1145-MJMAIN-2E" y="0"&gt;&lt;/use&gt;&lt;use x="779" xlink:href="#E1145-MJMAIN-30" y="0"&gt;&lt;/use&gt;&lt;use x="1279" xlink:href="#E1145-MJMAIN-30" y="0"&gt;&lt;/use&gt;&lt;use x="1780" xlink:href="#E1145-MJMAIN-35" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;use x="26181" xlink:href="#E1145-MJMATHI-41" y="0"&gt;&lt;/use&gt;&lt;use x="27153" xlink:href="#E1145-MJMAIN-D7" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(28154,0)"&gt;&lt;use xlink:href="#E1145-MJMAIN-39"&gt;&lt;/use&gt;&lt;use x="500" xlink:href="#E1145-MJMAIN-31" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;use x="29155" xlink:href="#E1145-MJMAIN-3A9" y="0"&gt;&lt;/use&gt;&lt;use x="30155" xlink:href="#E1145-MJMAIN-3D" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(31212,0)"&gt;&lt;use xlink:href="#E1145-MJMAIN-30"&gt;&lt;/use&gt;&lt;use x="500" xlink:href="#E1145-MJMAIN-2E" y="0"&gt;&lt;/use&gt;&lt;use x="779" xlink:href="#E1145-MJMAIN-34" y="0"&gt;&lt;/use&gt;&lt;use x="1279" xlink:href="#E1145-MJMAIN-35" y="0"&gt;&lt;/use&gt;&lt;use x="1780" xlink:href="#E1145-MJMAIN-35" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;use x="33492" xlink:href="#E1145-MJMATHI-56" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class="mathjax-block md-end-block" contenteditable="false" id="mathjax-n779" style="-webkit-margin-after: 0rem; -webkit-margin-before: 0rem; -webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #333333; font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; margin: 0.5rem 0px; orphans: 2; overflow-x: auto; overflow-y: hidden; padding-top: 0px; position: relative; text-align: left; text-indent: 0px; text-transform: none; white-space: pre; widows: 2; width: inherit; word-spacing: 0px;"&gt;
&lt;span class="MathJax_Preview" style="box-sizing: border-box; color: #888888;"&gt;&lt;/span&gt;&lt;span class="MathJax_SVG_Display" style="box-sizing: border-box; display: block !important; margin: 1em 0em; max-height: none; max-width: none; min-height: 0px; min-width: 100%; position: relative; text-align: center; text-indent: 0px; width: auto;"&gt;&lt;span class="MathJax_SVG" id="MathJax-Element-1063-Frame" style="border: 0px; box-sizing: border-box; direction: ltr; display: inline-block; float: none; font-size: 16px; font-style: normal; font-weight: normal; letter-spacing: normal; line-height: normal; margin: 0px; max-height: none; max-width: none; min-height: 0px; min-width: 0px; padding: 0px; text-align: left; text-indent: 0px; text-transform: none; white-space: nowrap; word-spacing: normal; word-wrap: normal; zoom: 0.9;" tabindex="-1"&gt;&lt;svg class="in-text-selection" height="5.262ex" style="vertical-align: -1.872ex;" viewbox="0 -1459.5 35763.5 2265.7" width="83.064ex" xmlns:xlink="http://www.w3.org/1999/xlink"&gt;&lt;defs&gt;&lt;path d="M397 0Q370 3 218 3Q65 3 38 0H25V62H139V624H25V686H38Q65 683 218 683Q370 683 397 686H410V624H296V62H410V0H397Z" id="E1146-MJMAINB-49" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M23 287Q24 290 25 295T30 317T40 348T55 381T75 411T101 433T134 442Q209 442 230 378L240 387Q302 442 358 442Q423 442 460 395T497 281Q497 173 421 82T249 -10Q227 -10 210 -4Q199 1 187 11T168 28L161 36Q160 35 139 -51T118 -138Q118 -144 126 -145T163 -148H188Q194 -155 194 -157T191 -175Q188 -187 185 -190T172 -194Q170 -194 161 -194T127 -193T65 -192Q-5 -192 -24 -194H-32Q-39 -187 -39 -183Q-37 -156 -26 -148H-6Q28 -147 33 -136Q36 -130 94 103T155 350Q156 355 156 364Q156 405 131 405Q109 405 94 377T71 316T59 280Q57 278 43 278H29Q23 284 23 287ZM178 102Q200 26 252 26Q282 26 310 49T356 107Q374 141 392 215T411 325V331Q411 405 350 405Q339 405 328 402T306 393T286 380T269 365T254 350T243 336T235 326L232 322Q232 321 229 308T218 264T204 212Q178 106 178 102Z" id="E1146-MJMATHI-70" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M21 287Q22 290 23 295T28 317T38 348T53 381T73 411T99 433T132 442Q161 442 183 430T214 408T225 388Q227 382 228 382T236 389Q284 441 347 441H350Q398 441 422 400Q430 381 430 363Q430 333 417 315T391 292T366 288Q346 288 334 299T322 328Q322 376 378 392Q356 405 342 405Q286 405 239 331Q229 315 224 298T190 165Q156 25 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 114 189T154 366Q154 405 128 405Q107 405 92 377T68 316T57 280Q55 278 41 278H27Q21 284 21 287Z" id="E1146-MJMATHI-72" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M184 600Q184 624 203 642T247 661Q265 661 277 649T290 619Q290 596 270 577T226 557Q211 557 198 567T184 600ZM21 287Q21 295 30 318T54 369T98 420T158 442Q197 442 223 419T250 357Q250 340 236 301T196 196T154 83Q149 61 149 51Q149 26 166 26Q175 26 185 29T208 43T235 78T260 137Q263 149 265 151T282 153Q302 153 302 143Q302 135 293 112T268 61T223 11T161 -11Q129 -11 102 10T74 74Q74 91 79 106T122 220Q160 321 166 341T173 380Q173 404 156 404H154Q124 404 99 371T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Z" id="E1146-MJMATHI-69" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M21 287Q22 293 24 303T36 341T56 388T88 425T132 442T175 435T205 417T221 395T229 376L231 369Q231 367 232 367L243 378Q303 442 384 442Q401 442 415 440T441 433T460 423T475 411T485 398T493 385T497 373T500 364T502 357L510 367Q573 442 659 442Q713 442 746 415T780 336Q780 285 742 178T704 50Q705 36 709 31T724 26Q752 26 776 56T815 138Q818 149 821 151T837 153Q857 153 857 145Q857 144 853 130Q845 101 831 73T785 17T716 -10Q669 -10 648 17T627 73Q627 92 663 193T700 345Q700 404 656 404H651Q565 404 506 303L499 291L466 157Q433 26 428 16Q415 -11 385 -11Q372 -11 364 -4T353 8T350 18Q350 29 384 161L420 307Q423 322 423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 181Q151 335 151 342Q154 357 154 369Q154 405 129 405Q107 405 92 377T69 316T57 280Q55 278 41 278H27Q21 284 21 287Z" id="E1146-MJMATHI-6D" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z" id="E1146-MJMAIN-3D" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z" id="E1146-MJMAIN-32" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M164 157Q164 133 148 117T109 101H102Q148 22 224 22Q294 22 326 82Q345 115 345 210Q345 313 318 349Q292 382 260 382H254Q176 382 136 314Q132 307 129 306T114 304Q97 304 95 310Q93 314 93 485V614Q93 664 98 664Q100 666 102 666Q103 666 123 658T178 642T253 634Q324 634 389 662Q397 666 402 666Q410 666 410 648V635Q328 538 205 538Q174 538 149 544L139 546V374Q158 388 169 396T205 412T256 420Q337 420 393 355T449 201Q449 109 385 44T229 -22Q148 -22 99 32T50 154Q50 178 61 192T84 210T107 214Q132 214 148 197T164 157Z" id="E1146-MJMAIN-35" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M208 74Q208 50 254 46Q272 46 272 35Q272 34 270 22Q267 8 264 4T251 0Q249 0 239 0T205 1T141 2Q70 2 50 0H42Q35 7 35 11Q37 38 48 46H62Q132 49 164 96Q170 102 345 401T523 704Q530 716 547 716H555H572Q578 707 578 706L606 383Q634 60 636 57Q641 46 701 46Q726 46 726 36Q726 34 723 22Q720 7 718 4T704 0Q701 0 690 0T651 1T578 2Q484 2 455 0H443Q437 6 437 9T439 27Q443 40 445 43L449 46H469Q523 49 533 63L521 213H283L249 155Q208 86 208 74ZM516 260Q516 271 504 416T490 562L463 519Q447 492 400 412L310 260L413 259Q516 259 516 260Z" id="E1146-MJMATHI-41" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M580 514Q580 525 596 525Q601 525 604 525T609 525T613 524T615 523T617 520T619 517T622 512Q659 438 720 381T831 300T927 263Q944 258 944 250T935 239T898 228T840 204Q696 134 622 -12Q618 -21 615 -22T600 -24Q580 -24 580 -17Q580 -13 585 0Q620 69 671 123L681 133H70Q56 140 56 153Q56 168 72 173H725L735 181Q774 211 852 250Q851 251 834 259T789 283T735 319L725 327H72Q56 332 56 347Q56 360 70 367H681L671 377Q638 412 609 458T580 514Z" id="E1146-MJMAIN-21D2" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M131 289Q131 321 147 354T203 415T300 442Q362 442 390 415T419 355Q419 323 402 308T364 292Q351 292 340 300T328 326Q328 342 337 354T354 372T367 378Q368 378 368 379Q368 382 361 388T336 399T297 405Q249 405 227 379T204 326Q204 301 223 291T278 274T330 259Q396 230 396 163Q396 135 385 107T352 51T289 7T195 -10Q118 -10 86 19T53 87Q53 126 74 143T118 160Q133 160 146 151T160 120Q160 94 142 76T111 58Q109 57 108 57T107 55Q108 52 115 47T146 34T201 27Q237 27 263 38T301 66T318 97T323 122Q323 150 302 164T254 181T195 196T148 231Q131 256 131 289Z" id="E1146-MJMATHI-73" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M39 168Q39 225 58 272T107 350T174 402T244 433T307 442H310Q355 442 388 420T421 355Q421 265 310 237Q261 224 176 223Q139 223 138 221Q138 219 132 186T125 128Q125 81 146 54T209 26T302 45T394 111Q403 121 406 121Q410 121 419 112T429 98T420 82T390 55T344 24T281 -1T205 -11Q126 -11 83 42T39 168ZM373 353Q367 405 305 405Q272 405 244 391T199 357T170 316T154 280T149 261Q149 260 169 260Q282 260 327 284T373 353Z" id="E1146-MJMATHI-65" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M34 159Q34 268 120 355T306 442Q362 442 394 418T427 355Q427 326 408 306T360 285Q341 285 330 295T319 325T330 359T352 380T366 386H367Q367 388 361 392T340 400T306 404Q276 404 249 390Q228 381 206 359Q162 315 142 235T121 119Q121 73 147 50Q169 26 205 26H209Q321 26 394 111Q403 121 406 121Q410 121 419 112T429 98T420 83T391 55T346 25T282 0T202 -11Q127 -11 81 37T34 159Z" id="E1146-MJMATHI-63" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z" id="E1146-MJMAIN-30" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M78 60Q78 84 95 102T138 120Q162 120 180 104T199 61Q199 36 182 18T139 0T96 17T78 60Z" id="E1146-MJMAIN-2E" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z" id="E1146-MJMAIN-31" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M592 686H604Q615 685 631 685T666 684T700 684T724 683Q829 683 835 686H843V624H744L611 315Q584 254 546 165Q492 40 482 19T461 -6L460 -7H409Q398 -4 391 9Q385 20 257 315L124 624H25V686H36Q57 683 190 683Q340 683 364 686H377V624H289L384 403L480 185L492 212Q504 240 529 298T575 405L670 624H582V686H592Z" id="E1146-MJMAINB-56" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M630 29Q630 9 609 9Q604 9 587 25T493 118L389 222L284 117Q178 13 175 11Q171 9 168 9Q160 9 154 15T147 29Q147 36 161 51T255 146L359 250L255 354Q174 435 161 449T147 471Q147 480 153 485T168 490Q173 490 175 489Q178 487 284 383L389 278L493 382Q570 459 587 475T609 491Q630 491 630 471Q630 464 620 453T522 355L418 250L522 145Q606 61 618 48T630 29Z" id="E1146-MJMAIN-D7" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M394 0Q370 3 222 3Q75 3 51 0H39V62H147V624H39V686H234Q256 686 299 686T362 687Q479 687 554 669T681 593Q716 550 716 497Q716 390 568 338Q569 337 572 336T577 332Q605 317 623 300T650 258T662 218T668 172Q678 98 689 76Q707 40 748 40Q770 40 780 54T795 88T801 111Q805 117 827 117H831Q846 117 852 113T858 92Q857 78 852 63T834 30T797 1T739 -11Q630 -11 580 12T511 87Q506 104 506 168Q506 170 506 178T507 194Q507 289 438 313Q424 318 356 318H298V62H406V0H394ZM366 369Q459 370 490 381Q548 402 548 476V498V517Q548 578 513 600Q479 624 392 624H358H298V369H366Z" id="E1146-MJMAINB-52" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M352 287Q304 211 232 211Q154 211 104 270T44 396Q42 412 42 436V444Q42 537 111 606Q171 666 243 666Q245 666 249 666T257 665H261Q273 665 286 663T323 651T370 619T413 560Q456 472 456 334Q456 194 396 97Q361 41 312 10T208 -22Q147 -22 108 7T68 93T121 149Q143 149 158 135T173 96Q173 78 164 65T148 49T135 44L131 43Q131 41 138 37T164 27T206 22H212Q272 22 313 86Q352 142 352 280V287ZM244 248Q292 248 321 297T351 430Q351 508 343 542Q341 552 337 562T323 588T293 615T246 625Q208 625 181 598Q160 576 154 546T147 441Q147 358 152 329T172 282Q197 248 244 248Z" id="E1146-MJMAIN-39" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M55 454Q55 503 75 546T127 617T197 665T272 695T337 704H352Q396 704 404 703Q527 687 596 615T666 454Q666 392 635 330T559 200T499 83V80H543Q589 81 600 83T617 93Q622 102 629 135T636 172L637 177H677V175L660 89Q645 3 644 2V0H552H488Q461 0 456 3T451 20Q451 89 499 235T548 455Q548 512 530 555T483 622T424 656T361 668Q332 668 303 658T243 626T193 560T174 456Q174 380 222 233T270 20Q270 7 263 0H77V2Q76 3 61 89L44 175V177H84L85 172Q85 171 88 155T96 119T104 93Q109 86 120 84T178 80H222V83Q206 132 162 199T87 329T55 454Z" id="E1146-MJMAIN-3A9" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M127 463Q100 463 85 480T69 524Q69 579 117 622T233 665Q268 665 277 664Q351 652 390 611T430 522Q430 470 396 421T302 350L299 348Q299 347 308 345T337 336T375 315Q457 262 457 175Q457 96 395 37T238 -22Q158 -22 100 21T42 130Q42 158 60 175T105 193Q133 193 151 175T169 130Q169 119 166 110T159 94T148 82T136 74T126 70T118 67L114 66Q165 21 238 21Q293 21 321 74Q338 107 338 175V195Q338 290 274 322Q259 328 213 329L171 330L168 332Q166 335 166 348Q166 366 174 366Q202 366 232 371Q266 376 294 413T322 525V533Q322 590 287 612Q265 626 240 626Q208 626 181 615T143 592T132 580H135Q138 579 143 578T153 573T165 566T175 555T183 540T186 520Q186 498 172 481T127 463Z" id="E1146-MJMAIN-33" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M55 458Q56 460 72 567L88 674Q88 676 108 676H128V672Q128 662 143 655T195 646T364 644H485V605L417 512Q408 500 387 472T360 435T339 403T319 367T305 330T292 284T284 230T278 162T275 80Q275 66 275 52T274 28V19Q270 2 255 -10T221 -22Q210 -22 200 -19T179 0T168 40Q168 198 265 368Q285 400 349 489L395 552H302Q128 552 119 546Q113 543 108 522T98 479L95 458V455H55V458Z" id="E1146-MJMAIN-37" stroke-width="1"&gt;&lt;/path&gt;&lt;path d="M52 648Q52 670 65 683H76Q118 680 181 680Q299 680 320 683H330Q336 677 336 674T334 656Q329 641 325 637H304Q282 635 274 635Q245 630 242 620Q242 618 271 369T301 118L374 235Q447 352 520 471T595 594Q599 601 599 609Q599 633 555 637Q537 637 537 648Q537 649 539 661Q542 675 545 679T558 683Q560 683 570 683T604 682T668 681Q737 681 755 683H762Q769 676 769 672Q769 655 760 640Q757 637 743 637Q730 636 719 635T698 630T682 623T670 615T660 608T652 599T645 592L452 282Q272 -9 266 -16Q263 -18 259 -21L241 -22H234Q216 -22 216 -15Q213 -9 177 305Q139 623 138 626Q133 637 76 637H59Q52 642 52 648Z" id="E1146-MJMATHI-56" stroke-width="1"&gt;&lt;/path&gt;&lt;/defs&gt;&lt;g fill="currentColor" stroke-width="0" stroke="currentColor" transform="matrix(1 0 0 -1 0 0)"&gt;&lt;use x="0" xlink:href="#E1146-MJMAINB-49" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(436,-150)"&gt;&lt;use transform="scale(0.707)" x="0" xlink:href="#E1146-MJMATHI-70" y="0"&gt;&lt;/use&gt;&lt;use transform="scale(0.707)" x="503" xlink:href="#E1146-MJMATHI-72" y="0"&gt;&lt;/use&gt;&lt;use transform="scale(0.707)" x="955" xlink:href="#E1146-MJMATHI-69" y="0"&gt;&lt;/use&gt;&lt;use transform="scale(0.707)" x="1300" xlink:href="#E1146-MJMATHI-6D" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;use x="2355" xlink:href="#E1146-MJMAIN-3D" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(3411,0)"&gt;&lt;use xlink:href="#E1146-MJMAIN-32"&gt;&lt;/use&gt;&lt;use x="500" xlink:href="#E1146-MJMAIN-35" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;use x="4412" xlink:href="#E1146-MJMATHI-41" y="0"&gt;&lt;/use&gt;&lt;use x="5440" xlink:href="#E1146-MJMAIN-21D2" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(6718,0)"&gt;&lt;use x="0" xlink:href="#E1146-MJMAINB-49" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(436,-150)"&gt;&lt;use transform="scale(0.707)" x="0" xlink:href="#E1146-MJMATHI-73" y="0"&gt;&lt;/use&gt;&lt;use transform="scale(0.707)" x="469" xlink:href="#E1146-MJMATHI-65" y="0"&gt;&lt;/use&gt;&lt;use transform="scale(0.707)" x="936" xlink:href="#E1146-MJMATHI-63" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;/g&gt;&lt;use x="8501" xlink:href="#E1146-MJMAIN-3D" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(9280,0)"&gt;&lt;g transform="translate(397,0)"&gt;&lt;rect height="60" stroke="none" width="2122" x="0" y="220"&gt;&lt;/rect&gt;&lt;g transform="translate(185,676)"&gt;&lt;use xlink:href="#E1146-MJMAIN-32"&gt;&lt;/use&gt;&lt;use x="500" xlink:href="#E1146-MJMAIN-35" y="0"&gt;&lt;/use&gt;&lt;use x="1001" xlink:href="#E1146-MJMATHI-41" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;g transform="translate(60,-686)"&gt;&lt;use xlink:href="#E1146-MJMAIN-32"&gt;&lt;/use&gt;&lt;use x="500" xlink:href="#E1146-MJMAIN-30" y="0"&gt;&lt;/use&gt;&lt;use x="1001" xlink:href="#E1146-MJMAIN-30" y="0"&gt;&lt;/use&gt;&lt;use x="1501" xlink:href="#E1146-MJMAIN-30" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;use x="12197" xlink:href="#E1146-MJMAIN-3D" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(13253,0)"&gt;&lt;use xlink:href="#E1146-MJMAIN-30"&gt;&lt;/use&gt;&lt;use x="500" xlink:href="#E1146-MJMAIN-2E" y="0"&gt;&lt;/use&gt;&lt;use x="779" xlink:href="#E1146-MJMAIN-30" y="0"&gt;&lt;/use&gt;&lt;use x="1279" xlink:href="#E1146-MJMAIN-31" y="0"&gt;&lt;/use&gt;&lt;use x="1780" xlink:href="#E1146-MJMAIN-32" y="0"&gt;&lt;/use&gt;&lt;use x="2280" xlink:href="#E1146-MJMAIN-35" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;use x="16034" xlink:href="#E1146-MJMATHI-41" y="0"&gt;&lt;/use&gt;&lt;use x="17063" xlink:href="#E1146-MJMAIN-21D2" y="0"&gt;&lt;/use&gt;&lt;use x="18341" xlink:href="#E1146-MJMAINB-56" y="0"&gt;&lt;/use&gt;&lt;use x="19488" xlink:href="#E1146-MJMAIN-3D" y="0"&gt;&lt;/use&gt;&lt;use x="20545" xlink:href="#E1146-MJMAINB-49" y="0"&gt;&lt;/use&gt;&lt;use x="21203" xlink:href="#E1146-MJMAIN-D7" y="0"&gt;&lt;/use&gt;&lt;use x="22204" xlink:href="#E1146-MJMAINB-52" y="0"&gt;&lt;/use&gt;&lt;use x="23344" xlink:href="#E1146-MJMAIN-3D" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(24401,0)"&gt;&lt;use xlink:href="#E1146-MJMAIN-30"&gt;&lt;/use&gt;&lt;use x="500" xlink:href="#E1146-MJMAIN-2E" y="0"&gt;&lt;/use&gt;&lt;use x="779" xlink:href="#E1146-MJMAIN-30" y="0"&gt;&lt;/use&gt;&lt;use x="1279" xlink:href="#E1146-MJMAIN-31" y="0"&gt;&lt;/use&gt;&lt;use x="1780" xlink:href="#E1146-MJMAIN-32" y="0"&gt;&lt;/use&gt;&lt;use x="2280" xlink:href="#E1146-MJMAIN-35" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;use x="27182" xlink:href="#E1146-MJMATHI-41" y="0"&gt;&lt;/use&gt;&lt;use x="28154" xlink:href="#E1146-MJMAIN-D7" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(29155,0)"&gt;&lt;use xlink:href="#E1146-MJMAIN-39"&gt;&lt;/use&gt;&lt;use x="500" xlink:href="#E1146-MJMAIN-31" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;use x="30156" xlink:href="#E1146-MJMAIN-3A9" y="0"&gt;&lt;/use&gt;&lt;use x="31156" xlink:href="#E1146-MJMAIN-3D" y="0"&gt;&lt;/use&gt;&lt;g transform="translate(32213,0)"&gt;&lt;use xlink:href="#E1146-MJMAIN-31"&gt;&lt;/use&gt;&lt;use x="500" xlink:href="#E1146-MJMAIN-2E" y="0"&gt;&lt;/use&gt;&lt;use x="779" xlink:href="#E1146-MJMAIN-31" y="0"&gt;&lt;/use&gt;&lt;use x="1279" xlink:href="#E1146-MJMAIN-33" y="0"&gt;&lt;/use&gt;&lt;use x="1780" xlink:href="#E1146-MJMAIN-37" y="0"&gt;&lt;/use&gt;&lt;use x="2280" xlink:href="#E1146-MJMAIN-35" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;use x="34994" xlink:href="#E1146-MJMATHI-56" y="0"&gt;&lt;/use&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="-webkit-margin-after: 1rem; -webkit-margin-before: 1rem; -webkit-margin-end: 0px; -webkit-margin-start: 0px; -webkit-text-stroke-width: 0px; background-color: white; box-sizing: border-box; color: #333333; font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; margin: 0.5rem 0px; orphans: 2; position: relative; text-align: left; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; width: inherit; word-spacing: 0px;"&gt;
&lt;span class="md-line md-end-block" style="box-sizing: border-box; display: block;"&gt;&lt;span class="" style="box-sizing: border-box;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
&lt;span class="MathJax_Preview" style="color: rgb(136 , 136 , 136);"&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span class="MathJax" id="MathJax-Element-29-Frame" style="border: 0px; direction: ltr; display: inline; float: none; font-size: 100%; font-style: normal; font-weight: normal; letter-spacing: normal; line-height: normal; margin: 0px; max-height: none; max-width: none; min-height: 0px; min-width: 0px; padding: 0px; text-align: left; text-indent: 0px; text-transform: none; white-space: nowrap; word-spacing: normal; word-wrap: normal;"&gt;&lt;nobr style="-webkit-transition: none; border: 0px; line-height: normal; margin: 0px; max-height: 5000em; max-width: 5000em; min-height: 0px; min-width: 0px; padding: 0px; text-decoration: none; transition: none; vertical-align: 0px; white-space: nowrap;"&gt;&lt;/nobr&gt;&lt;/span&gt;&lt;br /&gt;
&lt;script id="MathJax-Element-29" type="math/tex; mode=display"&gt;
\mathbf{I}_{prim} = 25A \Rightarrow \mathbf{I}_{sec}=\frac{25A}{2000}=0.0125A \Rightarrow \mathbf{V} = \mathbf{I} \times \mathbf{R} = 0.0125A \times 91 \Omega = 1.1375V&lt;/script&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
El esquema eléctrico que tenemos hasta ahora sería el siguiente:&lt;/div&gt;
&lt;center&gt;
&lt;img alt="Circuito 1" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj76kMSLWz0eqpoXUuo1EniMB_HDOO4wuVDhNi2J8vkfzxADSVLgx2xszQTFuOVNZIwCWyLnQIVAZes3I-qrQ0rERDMuwTlIzPSX1ARyFtSOlw_R-5V42G0pLnrCDQHs_M5J5KOGuTwkhU/s400/circuito1.jpg" style="max-width: 100%;" /&gt;&lt;/center&gt;
&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Finalmente, tenemos un problema: las corrientes negativas. Hasta ahora los cálculos que hemos hecho nos permiten tener corrientes positivas y negativas (dado que es alterna), lo cual nos daría voltajes positivos y negativos. Las entradas analógicas de los controladores en principio sólo admiten valores de voltaje positivo, con lo cual nos quedaría un último paso: una desviación de voltaje.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
El truco consiste en añadir al voltaje que nos da nuestro circuito un voltaje de referencia fijo, que se sumará dándonos siempre valores positivos. Para ello, dado que nuestros cálculos los hemos hecho para una entrada a 3.3V, deberíamos sumarle mediante un &lt;b&gt;divisor de tensión&lt;/b&gt; justo la mitad: 1,65V.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Esto lo conseguimos añadiendo un divisor de tensión con dos resistencias del mismo valor a la salida del circuito anterior:&lt;/div&gt;
&lt;center&gt;
&lt;img alt="Circuito 2" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlBG5O3GqycG9WWPH5Bbk-aCsKUr1M9LQtMvoEI88yGzaRVRducuytTLiE37yMyEDc6J8Uuw4uloGWlpNkE-X1RBAR86nZYjrnNxtNFLSmnViJYqWfZDchsgIri64tNc6cRrwYkv3W5-o/s640/circuito2.jpg" style="max-width: 100%;" /&gt;&lt;/center&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Como podemos ver en el esquema, ahora el voltaje estaría comprendido entre un mínimo de 0 y un máximo de +V (3.3V en nuestros cálculos).&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
De todos modos, los cálculos que hemos realizado en base a &lt;b&gt;25A&lt;/b&gt; de máxima intensidad son los más ajustados si queremos cubrir el posible espectro de voltajes con la máxima precisión, pero no quiere decir que sea la forma más fácil, como veremos en la segunda parte del artículo.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Lo más fácil es emplear una resistencia de carga &lt;i&gt;estandarizada&lt;/i&gt; para la intensidad máxima del sensor (&lt;b&gt;100A&lt;/b&gt;), que sería la siguiente, en función del voltaje de alimentación:&lt;/div&gt;
&lt;table style="background-color: rgb(250 , 250 , 250); border-collapse: collapse; border-spacing: 0px; margin-bottom: 16px; padding: 0px;"&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style="border: 1px solid rgb(204 , 204 , 204); border: 1px solid rgb(230 , 230 , 230); font-weight: bold; margin: 0px; padding: 6px 13px;"&gt;Voltaje&lt;/th&gt;
&lt;th style="border: 1px solid rgb(204 , 204 , 204); border: 1px solid rgb(230 , 230 , 230); font-weight: bold; margin: 0px; padding: 6px 13px;"&gt;Resistencia&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style="border: 1px solid rgb(204 , 204 , 204); border: 1px solid rgb(230 , 230 , 230); margin: 0px; padding: 6px 13px;"&gt;5V regulados&lt;/td&gt;
&lt;td style="border: 1px solid rgb(204 , 204 , 204); border: 1px solid rgb(230 , 230 , 230); margin: 0px; padding: 6px 13px;"&gt;33 Ω&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style="background-color: #f2f2f2;"&gt;
&lt;td style="border: 1px solid rgb(204 , 204 , 204); border: 1px solid rgb(230 , 230 , 230); margin: 0px; padding: 6px 13px;"&gt;3.3V regulados&lt;/td&gt;
&lt;td style="border: 1px solid rgb(204 , 204 , 204); border: 1px solid rgb(230 , 230 , 230); margin: 0px; padding: 6px 13px;"&gt;&lt;b style="margin-bottom: 0px; margin-top: 0px;"&gt;22 Ω&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style="border: 1px solid rgb(204 , 204 , 204); border: 1px solid rgb(230 , 230 , 230); margin: 0px; padding: 6px 13px;"&gt;3.3V a baterías&lt;/td&gt;
&lt;td style="border: 1px solid rgb(204 , 204 , 204); border: 1px solid rgb(230 , 230 , 230); margin: 0px; padding: 6px 13px;"&gt;18 Ω&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="conclusiones" style="border-bottom-color: rgb(230 , 230 , 230); border-bottom-style: solid; border-bottom-width: 1px; clear: both; color: rgb(92 , 81 , 70); font-size: 1.8em; font-weight: 400; font-weight: bold; letter-spacing: -1px; line-height: 1.7em; margin: 1.275em 0px 0.85em;"&gt;
Conclusiones&lt;/h2&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
Terminamos aquí la primera parte de este artículo, y a modo de resumen:&lt;/div&gt;
&lt;ul&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Vamos a utilizar un sensor de corriente CT013 no invasivo, basado en un transformador de 2000:1.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Necesitaremos una o más resistencias de carga a la salida del sensor.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Necesitaremos también un divisor de tensión basado en dos resistencias idénticas.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;El voltaje de trabajo será de 3.3V.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;Aún nos queda por determinar qué dispositivo utilizaremos como controlador, cosa que decidiremos en la segunda parte del artículo.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcEp1ogyFd9nZ7Hz86ZINbCvSoYzOETA6xoeVDc9aGgGB3OSzc2bJDISZwxbe2BuuCM4Na5AD-yqWeFAXzatyz_4az3Nlrlao0kIoDCA3wyzLrmcff9UiTH4OZWf6VMfDCxR56779IUcY/s72-c/corriente_alterna.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Sensores de temperatura con HomeAssistant en OrangePi</title><link>http://nanolec.blogspot.com/2017/08/sensor-temperatura-homeassistant-orangepi.html</link><category>componentes</category><category>domótica</category><category>electrónica</category><category>home-assistant</category><category>orangepi</category><category>temperatura</category><author>noreply@blogger.com (Isidoro Aguilar Baeza)</author><pubDate>Thu, 3 Aug 2017 12:46:00 +0200</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-155451023305910224.post-2202118887696811833</guid><description>&lt;div style="background-color: rgb(255 , 255 , 255); background: rgb(255 , 255 , 255); color: rgb(142 , 128 , 113); font-family: &amp;quot;hiragino sans gb&amp;quot; , &amp;quot;microsoft yahei&amp;quot; , &amp;quot;stheiti&amp;quot; , &amp;quot;simsun&amp;quot; , &amp;quot;lucida grande&amp;quot; , &amp;quot;lucida sans unicode&amp;quot; , &amp;quot;lucida sans&amp;quot; , &amp;quot;segoe ui&amp;quot; , , &amp;quot;malgun gothic&amp;quot; , &amp;quot;verdana&amp;quot; , &amp;quot;tahoma&amp;quot; , sans-serif; font-family: &amp;quot;lucida grande&amp;quot; , &amp;quot;segoe ui&amp;quot; , &amp;quot;apple sd gothic neo&amp;quot; , &amp;quot;malgun gothic&amp;quot; , &amp;quot;lucida sans unicode&amp;quot; , &amp;quot;helvetica&amp;quot; , &amp;quot;arial&amp;quot; , sans-serif; font-size: 0.9em; font-size: 15px; margin: 0px; overflow-x: hidden; overflow-y: auto; padding: 20px; padding: 20px; padding: 5px 20px 26px;"&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Ahora que tenemos instalado HomeAssistant en nuestra Orange Pi Zero, vamos a ver un ejemplo práctico de cómo conectarle unos cuantos de sensores de temperatura.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Utilizaremos para ello sensores Dallas &lt;b&gt;DS18B20&lt;/b&gt; que ya vimos en &lt;a href="https://nanolec.blogspot.com/2015/11/componentes-sensores-de-temperatura.html" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;esta entrada del blog&lt;/a&gt;. Son pequeños, muy baratos y tienen la característica de que funcionanpor medio del protocolo &lt;b&gt;1Wire&lt;/b&gt;, que nos permite establecer un bus lineal (un único cable, para entendernos) en el que podemos colocar varios sensores en distintas posiciones. Si tenemos la posibilidad de hacer llegar un cable de un rincón a otro de la casa, podemos tener sensores en todas las habitaciones de una manera fácil.&lt;/div&gt;
&lt;center&gt;
&lt;img alt="DS18B20" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiG6ocJUtKbp-szkGNe4ZErfWBo0pyavVMd32lQwo7WusKgc-tBYBfgHK5COfoxdF_xgi1GPGRO3gz1et6hQQvJxe4IB1tir8BDKKOgzjZuqWB1soZ_B3dA4w5nfPEmIrRXiBc0PzqfgOg/s320/DS18B20.jpg" style="max-width: 100%;" /&gt;&lt;/center&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
HomeAssistant tiene soporte nativo para este protocolo, y la OrangePi Zero permite conectarlos por medio de sus pines GPIO (&lt;i&gt;General Purpose Input Output&lt;/i&gt; - &lt;i&gt;Entradas y salidas de propósito general&lt;/i&gt;), pero antes tenemos que activar su utilización. Utilizaremos para ello cualquier distribución de &lt;a href="https://www.blogger.com/www.armbian.com" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;armbian&lt;/a&gt; para la OPI Zero, como Debian o Ubuntu.&lt;/div&gt;
&lt;h2 id="activar-módulos-1wire" style="border-bottom-color: rgb(230 , 230 , 230); border-bottom-style: solid; border-bottom-width: 1px; clear: both; color: rgb(92 , 81 , 70); font-size: 1.8em; font-weight: 400; font-weight: bold; letter-spacing: -1px; line-height: 1.7em; margin: 1.275em 0px 0.85em;"&gt;
&lt;a href="https://www.blogger.com/blogger.g?blogID=155451023305910224#activar-m%C3%B3dulos-1wire" name="activar-módulos-1wire" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;/a&gt;Activar módulos 1Wire&lt;/h2&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
El kernel de armbian soporta el protocolo 1Wire para la OPI Zero, pero hay que activar los módulos correspondientes. Para ello, editaremos el fichero &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;/etc/modules-load.d/modules.conf&lt;/code&gt; y descomentaremos todas las líneas que comienzan por &lt;i&gt;w1&lt;/i&gt;, quedando de la siguiente manera:&lt;/div&gt;
&lt;pre style="background: rgb(35 , 36 , 31); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(248 , 248 , 242); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="ini" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;ini&amp;quot;&amp;gt;w1-sunxi
w1-gpio
w1-therm
#sunxi-cir
xradio_wlan
g_serial
xradio_wlan
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;w1-sunxi
w1-gpio
w1-therm
#sunxi-cir
xradio_wlan
g_serial
xradio_wlan
&lt;/code&gt;&lt;/pre&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Al reiniciar el sistema, deberían quedar activados los drivers del protocolo 1Wire. Para comprobarlo, basta con acceder al directorio &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;/sys/bus/w1&lt;/code&gt;. Si existe este directorio, es que todo ha ido bien.&lt;/div&gt;
&lt;h2 id="comprobar-gpio" style="border-bottom-color: rgb(230 , 230 , 230); border-bottom-style: solid; border-bottom-width: 1px; clear: both; color: rgb(92 , 81 , 70); font-size: 1.8em; font-weight: 400; font-weight: bold; letter-spacing: -1px; line-height: 1.7em; margin: 1.275em 0px 0.85em;"&gt;
&lt;a href="https://www.blogger.com/blogger.g?blogID=155451023305910224#comprobar-gpio" name="comprobar-gpio" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;/a&gt;Comprobar GPIO&lt;/h2&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
Ahora tenemos que comprobar dónde conectar los terminales de los sensores de temperatura.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Vamos a utilizar varios sensores en el mismo cable, siguiendo el esquema que vimos &lt;a href="http://nanolec.blogspot.com.es/2015/11/componentes-sensores-de-temperatura.html" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;en la entrada citada&lt;/a&gt; del blog. Todos ellos utilizan un sólo pin o GPIO, dado que se trata de un bus serie.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
El driver de 1Wire que está ahora habilitado en el kernel utiliza un GPIO concreto, y para averiguar cuál es, nos vamos al directorio &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;/boot&lt;/code&gt; y ejecutamos el siguiente comando:&lt;/div&gt;
&lt;pre style="background: rgb(35 , 36 , 31); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(248 , 248 , 242); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="bash" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;bash&amp;quot;&amp;gt;$ bin2fex script.bin script.fex
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;$ bin2fex script.bin script.fex
&lt;/code&gt;&lt;/pre&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Este comando nos convierte el fichero binario a uno de texto (&lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;script.fex&lt;/code&gt;) que podemos abrir con un editor y buscaremos en él la cadena “w1”.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
En mi OPI Zero, la sección tiene el siguiente contenido:&lt;/div&gt;
&lt;pre style="background: rgb(35 , 36 , 31); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(248 , 248 , 242); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="ini" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;ini&amp;quot;&amp;gt;[w1_para]
w1_used = 1
gpio = 10
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;&lt;span class="hljs-title" style="color: rgb(166 , 226 , 46);"&gt;[w1_para]&lt;/span&gt;
&lt;span class="hljs-setting"&gt;w1_used = &lt;span class="hljs-value" style="color: rgb(249 , 38 , 114);"&gt;&lt;span class="hljs-number" style="color: rgb(174 , 129 , 255);"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class="hljs-setting"&gt;gpio = &lt;span class="hljs-value" style="color: rgb(249 , 38 , 114);"&gt;&lt;span class="hljs-number" style="color: rgb(174 , 129 , 255);"&gt;10&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Lo que quiere decir que el driver utiliza en este caso el &lt;b&gt;GPIO10&lt;/b&gt;.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Podríamos elegir otro GPIO de los que están disponibles en el conector modificando el fichero fex y compilándolo de nuevo con el comando &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;fex2bin&lt;/code&gt;, pero en principio nos puede valer el 10 tal y como está. &lt;/div&gt;
&lt;h2 id="conexionado" style="border-bottom-color: rgb(230 , 230 , 230); border-bottom-style: solid; border-bottom-width: 1px; clear: both; color: rgb(92 , 81 , 70); font-size: 1.8em; font-weight: 400; font-weight: bold; letter-spacing: -1px; line-height: 1.7em; margin: 1.275em 0px 0.85em;"&gt;
&lt;a href="https://www.blogger.com/blogger.g?blogID=155451023305910224#conexionado" name="conexionado" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;/a&gt;Conexionado&lt;/h2&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
Siguiendo el esquema de conectores extraído de &lt;a href="http://linux-sunxi.org/Xunlong_Orange_Pi_Zero" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;linux-sunsi&lt;/a&gt;, el &lt;b&gt;GPIO10&lt;/b&gt; está disponible en el terminal número 26 (esquina inferior derecha) del bus de GPIO de la OPI Zero:&lt;/div&gt;
&lt;center&gt;
&lt;img alt="img" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4uL6vCOQXCgugUfDz4obfogOqkUAITHCfX1eq6tyfFwy6xwz0-Vr6nqySlaPMKJ9sh-VEHhBE9YkDEWCtKLMXPfe5kL9LygDrQrAVzRwzyc-S8Ye4VrgYmF1Jim_bgtNu50rGbx7O8cw/s400/gpio_opizero.png" style="max-width: 100%;" /&gt;&lt;/center&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Por tanto, utilizando la alimentación tradicional (&lt;i&gt;no parasitaria&lt;/i&gt;) del sensor de temperatura, las conexiones a realizar serían las tres siguientes:&lt;/div&gt;
&lt;ul&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;u&gt;Pin 2&lt;/u&gt;: VDD (5V).&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;u&gt;Pin 6&lt;/u&gt;: GND.&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;&lt;u&gt;Pin 26&lt;/u&gt;: Datos E/S.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Como se indica en el esquema siguiente (obtenido del proyecto &lt;a href="https://www.mysensors.org/build/temp" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;MySensors&lt;/a&gt;), podemos establecer un bus llevando a la distancia deseada los tres cables y colocando en los puntos de interes distintos sensores conectados en paralelo:&lt;/div&gt;
&lt;center&gt;
&lt;img alt="img" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrSiEUGC-Y00cKNZOW18tZWPSWufVxsyXBfj7uX4QztTEcECGIgL6Lzj4tZ2Y8HXpmUPm-gZTB3aBwfGvrDec9U09v8P9ttfHHjr-2DRKxoV8ioK-b3qIJvQzQE2LKtppsZUdgsmLBC7A/s320/dallas_paralelo.png" style="max-width: 100%;" /&gt;&lt;/center&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Entre la línea de alimentación y la de datos conectaremos una resistencia de 4K7 ohmios, al principio del bus.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
El cable del bus puede ser bastante largo (hay gente que lo ha llevado más alla de los 500m), y dependerá del tipo de cable (se recomienda par trenzado UTP de clase 5 o superior), de las interferencias, del voltaje empleado en la alimentación, etc.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
La alimentación del sensor en teoría se podría hacer a 3,3V, pero como admite un voltaje entre 3 y 5,5V, vamos a hacerlo a &lt;b&gt;5V&lt;/b&gt; para evitar que la caída de potencial a lo largo del bus nos cree un problema de alimentación.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
A continuación, unas fotos para ver cómo quedan los sensores en el cable UTP que yo he utilizado:&lt;/div&gt;
&lt;center&gt;
&lt;img alt="Sensor 1" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXkwsO6dLRa0BBUZfTyQlfD1J_wUYMeXiVgqImEVC-ex9VQMCi855k38Gor2aY4C3cHT6yHRitv3srVb_J3U8QMHcXrLR-mUAKKjO574avlfZ8BrRLcGQZ52lLiF-puZVulerCCiwEmhk/s320/18b20_1.jpg" style="max-width: 100%;" /&gt;&lt;br style="clear: both;" /&gt;Conexión del primer sensor (con la resistencia de 4K7)&lt;/center&gt;
&lt;center&gt;
&lt;img alt="Sensor 2" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPigNlJbYzlSJBiV7KmFTDDbRJCfgD979cOg81rRINJP8baZZ-Ob75MUhssmJm5bAKHXxErj3_F5Vj5aziR9tTBnAozvjIxrqUxbe_JHymbGsA7FkSWfvRE8HHkW8blGCdgb2H-pvEqlY/s320/18b20_2.jpg" style="max-width: 100%;" /&gt;&lt;br style="clear: both;" /&gt;Conexión de sensor intermedio&lt;/center&gt;
&lt;center&gt;
&lt;img alt="Conexión OPIZ" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEU8vIXuR6kTnsf2JVfluxKuEhsDQV3Fgs7ghhy6sVLfhrsEEezmWZGei3qEG5iUJJkFRPxKsiGPgrwuv0kxqVcxei8YZdWeGee5PqG5fl1t-_79hMAcH8Qd-XMZYL5FvKtQ9AFvYX9hM/s320/opizero_1wire.jpg" style="max-width: 100%;" /&gt;&lt;br style="clear: both;" /&gt;Conexión del bus a la Orange Pi Zero&lt;/center&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Una vez que conectemos los sensores, nos deben aparecer varios subdirectorios en &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;/sys/bus/w1&lt;/code&gt;,con el nombre “&lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;28-xxxx&lt;/code&gt;“. Cada uno de ellos es un sensor distinto, y el “xxxxx” es el &lt;b&gt;ID único&lt;/b&gt; del dispositivo.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Para comprobar que las lecturas de temperatura funcionan, podemos ejecutar en cada uno de ellos el siguiente comando:&lt;/div&gt;
&lt;pre style="background: rgb(35 , 36 , 31); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(248 , 248 , 242); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="bash" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;bash&amp;quot;&amp;gt;$ cat 28-XXXXXXXXXXXXX/w1_slave
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;$ cat &lt;span class="hljs-number" style="color: rgb(174 , 129 , 255);"&gt;28&lt;/span&gt;-XXXXXXXXXXXXX/w1_slave
&lt;/code&gt;&lt;/pre&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Si todo va bien, nos deberá devolver algo parecido a esto:&lt;/div&gt;
&lt;pre style="background: rgb(35 , 36 , 31); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(248 , 248 , 242); display: block; overflow-x: auto; overflow: auto; padding: 0.5em; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="ini" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;ini&amp;quot;&amp;gt;49 01 4b 46 7f ff 07 10 f6 : crc=f6 YES
49 01 4b 46 7f ff 07 10 f6 t=28355
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;49 01 4b 46 7f ff 07 10 f6 : crc=f6 YES
49 01 4b 46 7f ff 07 10 f6 t=28355
&lt;/code&gt;&lt;/pre&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Esto indica dos cosas:&lt;/div&gt;
&lt;ol style="list-style-type: decimal;"&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;El dispositivo transmite correctamente (el &lt;b&gt;CRC&lt;/b&gt; está bien, sin errores).&lt;/li&gt;
&lt;li style="display: list-item; line-height: 1.4em;"&gt;La temperatura actual es de &lt;b&gt;28,355ºC&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="activación-del-sensor-en-homeassistant" style="border-bottom-color: rgb(230 , 230 , 230); border-bottom-style: solid; border-bottom-width: 1px; clear: both; color: rgb(92 , 81 , 70); font-size: 1.8em; font-weight: 400; font-weight: bold; letter-spacing: -1px; line-height: 1.7em; margin: 1.275em 0px 0.85em;"&gt;
&lt;a href="https://www.blogger.com/blogger.g?blogID=155451023305910224#activaci%C3%B3n-del-sensor-en-homeassistant" name="activación-del-sensor-en-homeassistant" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;&lt;/a&gt;Activación del sensor en HomeAssistant&lt;/h2&gt;
&lt;div style="line-height: 19px; margin-top: 0px; margin: 1em 0px; word-wrap: break-word;"&gt;
Una vez que tenemos todo el cableado conectado y los sensores son detectados a nivel de sistema operativo, nos queda activarlos dentro de Home Assistant.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Para ello, utilizaremos la plataforma &lt;a href="https://home-assistant.io/components/sensor.onewire/" style="color: rgb(50 , 105 , 160); text-decoration: none; vertical-align: baseline;"&gt;onewire&lt;/a&gt;, definiendo de esta manera todos nuestros sensores, dentro del fichero de configuración &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;configuration.yaml&lt;/code&gt;:&lt;/div&gt;
&lt;pre style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); overflow: auto; padding: 0.5em; word-wrap: break-word;"&gt;&lt;code class="yaml" data-origin="&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;yaml&amp;quot;&amp;gt;# Sensores de temperatura Dallas 18B20
# Todos conectados en paralelo en el bus 1Wire
- platform: onewire
  names:
    28-000006769469: Temperatura pasillo
    28-0000067761dc: Temperatura salón
    28-000006775fde: Temperatura exterior
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;" style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 0px; border: 1px solid rgb(204 , 204 , 204); display: block; font-family: &amp;quot;consolas&amp;quot; , &amp;quot;inconsolata&amp;quot; , &amp;quot;courier&amp;quot; , monospace; font-size: 1em; font-weight: bold; font-weight: normal; letter-spacing: -1px; margin: 0px 2px; margin: 0px; padding: 0px 5px; white-space: pre; word-wrap: break-word;"&gt;# Sensores de temperatura Dallas 18B20
# Todos conectados en paralelo en el bus 1Wire
- platform: onewire
  names:
    28-000006769469: Temperatura pasillo
    28-0000067761dc: Temperatura salón
    28-000006775fde: Temperatura exterior
&lt;/code&gt;&lt;/pre&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Como podemos ver, hacemos una correspondencia entre el identificador de cada sensor (el que aparece en el directorio &lt;code style="border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; border: 1px solid rgb(204 , 204 , 204); color: rgb(232 , 103 , 65); font-size: 0.9em; margin: 0px 2px; padding: 0px 5px; word-wrap: break-word;"&gt;/sys/bus/w1&lt;/code&gt;) y el nombre que le queramos dar a cada sensor.&lt;/div&gt;
&lt;div style="line-height: 19px; margin: 1em 0px; word-wrap: break-word;"&gt;
Por defecto, Home Assistant nos mostrará el sensor como un sensor de temperatura, no tenemos que especificar ni un icono ni la unidad de medida, y nos aparecerá de esta manera:&lt;/div&gt;
&lt;center&gt;
&lt;img alt="Home Assistant - Temperatura" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjUvoKjrYGNq3vxlreauVobPZWQEqDf8SjqvmZZAZGeEvULU6ZPc6GhEP4HvHorI8Nk6vbO6TjA7gdmV0ffK6wwYSxgVaSN_WLEA_xogkP8wSNT3zWACQDZjnHmJMi-RFKyG72LPAi6h0/s640/ha_temperatura.jpg" style="max-width: 100%;" /&gt;&lt;/center&gt;
&lt;/div&gt;
</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiG6ocJUtKbp-szkGNe4ZErfWBo0pyavVMd32lQwo7WusKgc-tBYBfgHK5COfoxdF_xgi1GPGRO3gz1et6hQQvJxe4IB1tir8BDKKOgzjZuqWB1soZ_B3dA4w5nfPEmIrRXiBc0PzqfgOg/s72-c/DS18B20.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Instalar HomeAssistant en Orange Pi Zero</title><link>http://nanolec.blogspot.com/2017/07/instalar-homeassistant-en-orange-pi-zero.html</link><category>China</category><category>componentes</category><category>domótica</category><category>home-assistant</category><category>linux</category><category>orangepi</category><author>noreply@blogger.com (Isidoro Aguilar Baeza)</author><pubDate>Sat, 15 Jul 2017 12:16:00 +0200</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-155451023305910224.post-6298878860355573716</guid><description>He comenzado a utilizar un proyecto muy interesante para la Orange Pi Zero.&lt;br /&gt;
&lt;br /&gt;
Se trata de &lt;a href="https://home-assistant.io/" target="_blank"&gt;Home Assistant&lt;/a&gt;, un proyecto de software libre que nos permite tener un sistema centralizado para la domótica de nuestra casa.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnc_bjJvA6KYKMtzg3u-MVAhoFswKKo5mazi46JyFul9ffn37fRWMadP6lf0ioMI0vI7NnVnEnoL7Z3Sw47_tbVDRR7BoX4hjRfVbXsQ_3iIIPD8WnJ0eOqDR90zsvFU3YattoNnr_o2E/s1600/homeassistant.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="512" data-original-width="512" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnc_bjJvA6KYKMtzg3u-MVAhoFswKKo5mazi46JyFul9ffn37fRWMadP6lf0ioMI0vI7NnVnEnoL7Z3Sw47_tbVDRR7BoX4hjRfVbXsQ_3iIIPD8WnJ0eOqDR90zsvFU3YattoNnr_o2E/s320/homeassistant.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
Introducción&lt;/h2&gt;
Home Assistant es un proyecto de software libre, programador en Python, y con una creciente comunidad de aficionados detrás que están desarrollando sus propios componentes para la interconexión de multitud de dispositivos:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Sensores.&lt;/li&gt;
&lt;li&gt;Interruptores.&lt;/li&gt;
&lt;li&gt;Enchufes.&lt;/li&gt;
&lt;li&gt;Servicios web.&lt;/li&gt;
&lt;li&gt;Comandos de sistema.&lt;/li&gt;
&lt;li&gt;Etc. &lt;/li&gt;
&lt;/ul&gt;
Cada componente se enmarca dentro de una categoría, entre las que se destacan las siguientes:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Sensor. Cualquier cosa capaz de obtener información: sensores de movimiento, sensores de temperatura, estado de un ordenador, velocidad de conexión, información obtenida de una página web, etc.&lt;/li&gt;
&lt;li&gt;Interruptor. Cualquier cosa capaz de cambiar de estado: interruptores eléctricos, encender y apagar ordenadores, activar y desactivar servicios, etc.&lt;/li&gt;
&lt;li&gt;Reproductores multimedia. Cualquier cosa que reproduzca medios: televisores inteligentes, reproductores software, Chromecast, etc.&lt;/li&gt;
&lt;li&gt;Seguimiento de dispositivos. Cualquier cosa que cambie de lugar: posicionamiento GPS, detección por Wifi, por Bluetooth, etc.&lt;/li&gt;
&lt;li&gt;Automatismos. Son reglas que establece el usuario para que ocurran cosas cuando se dan ciertas circunstancias en el resto de elementos: que se enciendan las luces cuando no hay sol, estamos en un rango de horas y hay alguien en casa, que se enciendan cosas cuando un servicio está en un estado.... El límite es la imaginación.&lt;/li&gt;
&lt;/ul&gt;
No pretendo dar un curso de HomeAssistant, sino explicar brevemente cómo lo tengo instalado en mi Orange Pi Zero.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
Instalación&lt;/h2&gt;
Home Assistant se puede instalar en cualquier ordenador que tenga Python. No es necesariamente sólo para Linux, se puede instalar también en OSX y en Windows.&lt;br /&gt;
&lt;br /&gt;
Pero el verdadero potencial es que la aplicación no necesita grandes recursos, y podemos aprovechar estos pequeños micro-ordenadores como Raspberry u Orange Pi para montar un servidor dedicado.&lt;br /&gt;
&lt;br /&gt;
Estas son las instrucciones para instalar "Home Assistant" en armbian (distribución de Debian para ARM) en Orange Pi Zero. Casi todo está basado en la documentación "oficial" &lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;a href="https://home-assistant.io/docs/installation/armbian/"&gt;https://home-assistant.io/docs/installation/armbian/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: left;"&gt;
aunque con las modificaciones realizadas por mí para que funcione correctamente.&lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;h3&gt;
Paso 1: &lt;/h3&gt;
Instalamos todos los paquetes necesarios si no los tenemos ya:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq parrafo-terminal"&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get install python3-dev python3-pip&lt;/blockquote&gt;
&lt;br /&gt;
&lt;h3&gt;
Paso 2: &lt;/h3&gt;
Vamos a ejecutar el programa con un usuario específico, de modo que lo creamos, tanto el usuario como su grupo asociado:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq parrafo-terminal"&gt;
sudo addgroup homeassistant&lt;br /&gt;
sudo adduser --system --ingroup homeassistant homeassistant&lt;br /&gt;
sudo usermod -G aid_inet homeassistant&lt;/blockquote&gt;
El último comando es para que el usuario tenga permitido acceder a internet.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
Paso 3: &lt;/h3&gt;
Creamos un entorno virtual para Python asociado al usuario que hemos creado. De este modo, todos los paquetes instalados sólo afectarán al entorno virtual y no a todo el sistema:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq parrafo-terminal"&gt;
sudo pip3 install --upgrade virtualenv&lt;br /&gt;
sudo mkdir /srv/homeassistant&lt;br /&gt;
sudo chown homeassistant:homeassistant /srv/homeassistant&lt;br /&gt;
sudo mkdir /var/lib/home-assistant&lt;br /&gt;
sudo chown -R homeassistant:homeassistant /var/lib/home-assistant&lt;/blockquote&gt;
&lt;br /&gt;
Cambiamos al usuario que acabamos de crear y entramos y ejecutamos el entorno virtual:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq parrafo-terminal"&gt;
sudo su -s /bin/bash homeassistant&lt;br /&gt;
virtualenv -p python3 /srv/homeassistant&lt;br /&gt;
source /srv/homeassistant/bin/activate
&lt;/blockquote&gt;
&lt;br /&gt;
&lt;h3&gt;
Paso 4:&lt;/h3&gt;
&lt;b&gt;Instalamos homeassistant&lt;/b&gt; con el nuevo usuario que hemos creado y lo configuramos como servicio:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq parrafo-terminal"&gt;
pip3 install --upgrade homeassistant&lt;/blockquote&gt;
&lt;br /&gt;
&lt;span class=""&gt;Ejecutamos por primera vez HomeAssistant para que cree la configuración en el directorio que hemos establecido (/var/lib/home-assistant):&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq parrafo-terminal"&gt;
&lt;span class=""&gt;&lt;span class=""&gt;hass --config /var/lib/home-assistant&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;br /&gt;
Una vez que todo ha ido bien, detenemos la ejecución con Ctrl-C.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
Paso 5:&lt;/h3&gt;
Creamos un servicio para ejecutar Home Asistant. El fichero se denominará &lt;span style="font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;"&gt;/etc/init.d/hass&lt;/span&gt; y su contenido será el siguiente:&lt;br /&gt;
&lt;blockquote class="tr_bq parrafo-terminal"&gt;
#!/bin/sh&lt;br /&gt;
### BEGIN INIT INFO&lt;br /&gt;
# Provides:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hass&lt;br /&gt;
# Required-Start:&amp;nbsp;&amp;nbsp;&amp;nbsp; $local_fs $network $named $time $syslog&lt;br /&gt;
# Required-Stop:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $local_fs $network $named $time $syslog&lt;br /&gt;
# Default-Start:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2 3 4 5&lt;br /&gt;
# Default-Stop:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 1 6&lt;br /&gt;
# Description:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Home\ Assistant&lt;br /&gt;
### END INIT INFO&lt;br /&gt;
&lt;br /&gt;
# /etc/init.d Service Script for Home Assistant&lt;br /&gt;
# Created with: https://gist.github.com/naholyr/4275302#file-new-service-sh&lt;br /&gt;
PRE_EXEC=""&lt;br /&gt;
RUN_AS="homeassistant"&lt;br /&gt;
BIN="/usr/local/bin/hass"&lt;br /&gt;
PID_FILE="/tmp/hass.pid"&lt;br /&gt;
CONFIG_DIR="/var/lib/home-assistant"&lt;br /&gt;
FLAGS="-v -c $CONFIG_DIR --pid-file $PID_FILE --daemon"&lt;br /&gt;
REDIRECT="&amp;gt;&amp;gt; $CONFIG_DIR/home-assistant.log 2&amp;gt;&amp;amp;1"&lt;br /&gt;
&lt;br /&gt;
start() {&lt;br /&gt;
&amp;nbsp; if [ -f $PID_FILE ] &amp;amp;&amp;amp; kill -0 $(cat $PID_FILE) 2&amp;gt; /dev/null; then&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; echo 'Service already running' &amp;gt;&amp;amp;2&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; return 1&lt;br /&gt;
&amp;nbsp; fi&lt;br /&gt;
&amp;nbsp; echo 'Starting service…' &amp;gt;&amp;amp;2&lt;br /&gt;
&amp;nbsp; local CMD="$PRE_EXEC $BIN $FLAGS $REDIRECT"&lt;br /&gt;
&amp;nbsp; su -c "$CMD" $RUN_AS&lt;br /&gt;
&amp;nbsp; echo 'Service started' &amp;gt;&amp;amp;2&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
stop() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; if [ ! -f "$PID_FILE" ] || ! kill -0 $(cat "$PID_FILE") 2&amp;gt; /dev/null; then&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; echo 'Service not running' &amp;gt;&amp;amp;2&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; return 1&lt;br /&gt;
&amp;nbsp; fi&lt;br /&gt;
&amp;nbsp; echo 'Stopping service…' &amp;gt;&amp;amp;2&lt;br /&gt;
&amp;nbsp; kill $(cat "$PID_FILE")&lt;br /&gt;
&amp;nbsp; while ps -p $(cat "$PID_FILE") &amp;gt; /dev/null 2&amp;gt;&amp;amp;1; do sleep 1;done;&lt;br /&gt;
&amp;nbsp; echo 'Service stopped' &amp;gt;&amp;amp;2&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
install() {&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; echo "Installing Home Assistant Daemon (hass-daemon)"&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; echo "999999" &amp;gt; $PID_FILE&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; chown $RUN_AS $PID_FILE&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mkdir -p $CONFIG_DIR&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; chown $RUN_AS $CONFIG_DIR&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uninstall() {&lt;br /&gt;
&amp;nbsp; echo -n "Are you really sure you want to uninstall this service? That cannot be undone. [yes|No] "&lt;br /&gt;
&amp;nbsp; local SURE&lt;br /&gt;
&amp;nbsp; read SURE&lt;br /&gt;
&amp;nbsp; if [ "$SURE" = "yes" ]; then&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; stop&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; rm -fv "$PID_FILE"&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; echo "Notice: The config directory has not been removed"&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; echo $CONFIG_DIR&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; update-rc.d -f hass remove&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; rm -fv "$0"&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; echo "Home Assistant Daemon has been removed. Home Assistant is still installed."&lt;br /&gt;
&amp;nbsp; fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
case "$1" in&lt;br /&gt;
&amp;nbsp; start)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; start&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ;;&lt;br /&gt;
&amp;nbsp; stop)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; stop&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ;;&lt;br /&gt;
&amp;nbsp; install)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; install&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ;;&lt;br /&gt;
&amp;nbsp; uninstall)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; uninstall&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ;;&lt;br /&gt;
&amp;nbsp; restart)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; stop&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; start&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ;;&lt;br /&gt;
&amp;nbsp; *)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; echo "Usage: $0 {start|stop|restart|install|uninstall}"&lt;br /&gt;
esac&lt;/blockquote&gt;
&lt;br /&gt;
Una vez creado el servicio, hay que darle permisos de ejecución y activarlo al inicio:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq parrafo-terminal"&gt;
sudo chmod +x /etc/init.d/hass&lt;br /&gt;
update-rc.d hass defaults &lt;/blockquote&gt;
&lt;br /&gt;
&lt;h2&gt;
&lt;span class=""&gt;Utilización&lt;/span&gt;&lt;/h2&gt;
&lt;span class=""&gt;Una vez instalado como servicio, podremos iniciar o detener Home Assistant mediante los siguientes comandos:&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq parrafo-terminal"&gt;
&lt;span class=""&gt;service hass start&lt;/span&gt;&lt;br /&gt;
&lt;span class=""&gt;service hass stop &lt;/span&gt;&lt;/blockquote&gt;
&lt;br /&gt;
Destacar también que existe un fichero de log en el directorio /var/lib/home-assistant, que sería conveniente por facilidad enlazarlo en el directorio &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;/var/log&lt;/span&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq parrafo-terminal"&gt;
&lt;span class=""&gt;ln -s /var/lib/home-assistant/home-assistant.log /var/log/hass.log&lt;/span&gt;&lt;/blockquote&gt;
&lt;h2&gt;
Instalación de componentes adicionales&lt;/h2&gt;
Home Assistant tal como lo hemos instalado funciona como un servicio aislado que se ejecuta en un entorno virtual de Python.&lt;br /&gt;
&lt;br /&gt;
Cuando activemos en la configuración algún elemento nuevo, todos los componentes necesarios de Python normalmente se instalarán automáticamente en el directorio &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;deps&lt;/span&gt; dentro de &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;/var/lib/home-assistant&lt;/span&gt;. Esta instalación la realiza directamente el usuario &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;homeassistant&lt;/span&gt;.&lt;br /&gt;
&lt;br /&gt;
Si en alguna ocasión la instalación de un componente de Python fallase (cosa que podemos comprobar monitorizando el fichero de log) podemos realizarla a mano ejecutando el entorno virtual, de la siguiente manera:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote class="tr_bq parrafo-terminal"&gt;
sudo su -s /bin/bash homeassistant&lt;br /&gt;
source /srv/homeassistant/bin/activate&lt;br /&gt;pip3 install COMPONENTE&lt;/blockquote&gt;
&lt;br /&gt;
Y eso es todo por hoy. Espero que os guste. </description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnc_bjJvA6KYKMtzg3u-MVAhoFswKKo5mazi46JyFul9ffn37fRWMadP6lf0ioMI0vI7NnVnEnoL7Z3Sw47_tbVDRR7BoX4hjRfVbXsQ_3iIIPD8WnJ0eOqDR90zsvFU3YattoNnr_o2E/s72-c/homeassistant.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Orange Pi</title><link>http://nanolec.blogspot.com/2017/07/orange-pi.html</link><category>android</category><category>China</category><category>componentes</category><category>linux</category><category>orangepi</category><category>wifi</category><author>noreply@blogger.com (Isidoro Aguilar Baeza)</author><pubDate>Sun, 9 Jul 2017 20:27:00 +0200</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-155451023305910224.post-5634196003820711261</guid><description>Hola otra vez.&lt;br /&gt;
&lt;br /&gt;
Sí, lo sé: hace muchísimo tiempo que no escribo en el blog. Pero ¿qué le voy a hacer?, es que llevo una temporada sin tiempo para nada.&lt;br /&gt;
&lt;br /&gt;
Así que hoy que tengo un ratito voy a poner aquí unos breves apuntes sobre la Orange Pi.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBxPftUsX47ycUYF7J7TQcHhDe-d1AJSIZwIJIRSQESa6w1lF65jVivXHqwCJxkawWdGJuYqjUjy1g9xJ0NkzHEUuCRCudklYQ1fEk6L65ekUbi83m1tFPSjO2yTc72OaK9THjkvOYMm0/s1600/LogoOPI.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="200" data-original-width="600" height="106" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBxPftUsX47ycUYF7J7TQcHhDe-d1AJSIZwIJIRSQESa6w1lF65jVivXHqwCJxkawWdGJuYqjUjy1g9xJ0NkzHEUuCRCudklYQ1fEk6L65ekUbi83m1tFPSjO2yTc72OaK9THjkvOYMm0/s320/LogoOPI.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
¿Que qué es la Orange Pi?&lt;br /&gt;
¿No has oído hablar de la &lt;a href="https://www.raspberrypi.org/" target="_blank"&gt;Raspberry Pi&lt;/a&gt;? ¿En serio?&lt;br /&gt;
¿Ni de &lt;a href="http://cubieboard.org/model/" target="_blank"&gt;cubietruck&lt;/a&gt;? ¿Ni de &lt;a href="http://www.banana-pi.org/" target="_blank"&gt;Banana Pi&lt;/a&gt;? ¿Ni de &lt;a href="http://www.hardkernel.com/" target="_blank"&gt;Odroid&lt;/a&gt;? ¿Ni de &lt;a href="http://www.orangepi.org/" target="_blank"&gt;Orange Pi&lt;/a&gt;?&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
Raspberry Pi&lt;/h3&gt;
Bueno, pues todo comenzó en la Universidad de Cambridge (UK) en 2006. En la Facultad de Informática decidieron fabricar un ordenador de reducidas dimensiones en una única placa, que costase poco y que sirviera de "inspiración" a los alumnos para realizar sus propios proyectos. Recuerda un poco en sus orígenes al &lt;a href="https://nanolec.blogspot.com/2015/09/componentes-arduino-uno-y-pro-mini.html" target="_blank"&gt;Arduino&lt;/a&gt;, pero a diferencia de aquel, el objetivo era incluir un ordenador completo, no sólo un microcontrolador.&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://upload.wikimedia.org/wikipedia/commons/9/90/Front_of_Raspberry_Pi.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" data-original-height="597" data-original-width="800" height="296" src="https://upload.wikimedia.org/wikipedia/commons/9/90/Front_of_Raspberry_Pi.jpg" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Raspberry Pi 1 Model B&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;
No fue hasta el año 2012 cuando salió a la venta el primer modelo de Raspberry Pi, micro-ordenador del tamaño de una tarjeta de crédito, que fue un verdadero bombazo por su relación calidad-precio. Estas fueron las especificaciones del primer modelo (Raspbery Pi 1 Modelo B):&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Procesador: Broadcom BCM2835. ARMv6 de un sólo núcleo a 700Mhz.&lt;/li&gt;
&lt;li&gt;Gráfica: Broadcom VideoCore 4, capaz de codificar y decodificar 1080p, a 250 Mhz.&lt;/li&gt;
&lt;li&gt;Memoria: 256 MB.&lt;/li&gt;
&lt;li&gt;USB: 2 puertos USB 2.0&lt;/li&gt;
&lt;li&gt;Salida de vídeo: vídeo compuesto y HDMI.&lt;/li&gt;
&lt;li&gt;Salida de audio: minijack y HDMI.&lt;/li&gt;
&lt;li&gt;Almacenamiento: sin almacenamiento interno, con slot para tarjeta SD.&lt;/li&gt;
&lt;li&gt;Red: conector RJ45 a 10/100Mbps&lt;/li&gt;
&lt;li&gt;Otros puertos: 26 pines GPIO (General Purpose Input / Output). Mediante estos pines se pueden implementar protocolos SPI, I2C, I2S, UART, OneWire, etc.&lt;/li&gt;
&lt;/ul&gt;
La placa se alimentaba a 5V con un consumo de unos 700 mA, y el precio inicial fue de unas 22£ (unos 35$) más IVA.&lt;br /&gt;
&lt;br /&gt;
Debido al bajo precio de la placa, de la que se han vendido millones de unidades (tanto de los primeros modelos como de los que fueron saliendo después) pronto comenzó a surgir una gran comunidad de usuarios de manera que cualquiera que la compre puede encontrar miles de páginas donde se explica como instalarle cualquier distribución imaginable de Linux: Debian, Raspbian, ArchLinux, OpenElec, Ubuntu, etc.&lt;br /&gt;
&lt;br /&gt;
Además, el bus de conectores GPIO permite la conexión de cualquier dispositivo de la misma manera que lo hacíamos con un Arduino, con la gran ventaja de poder programar en cualquier lenguaje de programación y no estar limitado al C que utliza Arduino ni a su IDE.&lt;br /&gt;
&lt;br /&gt;
El único inconveniente que tiene esta placa es que, a diferencia del Arduino, se trata de un hardware cerrado. Uno puede montarse con cuatro componentes y medio su propio Arduino, hay cientos de fabricantes que lo hacen, diferentes precios, diferentes variantes.... Sin embargo, Raspberry sólo lo fabrica Raspberry, aunque el código fuente sí sea abierto.&lt;br /&gt;
&lt;br /&gt;
Este hecho, y la necesidad de tener más potencia a menos precio, ha provocado que a lo largo de estos años hayan aparecido distintos proyectos que emulan el concepto de Raspberry Pi, pero siempre mejorando en algo: precio, memoria, procesador, etc. Muchos de estos proyectos, además, se han hecho con la intención de que sean compatibles en software (y muchas veces también en hardware) con la placa original, de manera que lo que se puede hacer en una Raspberry se pueda hacer igual en otra placa.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
Orange Pi&lt;/h3&gt;
&lt;br /&gt;
Y aquí es donde llegamos a hablar de Orange Pi.&lt;br /&gt;
Orange Pi es una alternativa barata a Raspberry, tanto de hardware como de software abierto. Esto quiere decir que quien quiera puede construirse su propia placa o comprarla ya hecha a uno de los fabricantes.&lt;br /&gt;
&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSFdhKXQgI0t67ui9fwQoVKyncLRZN_ZnEQ1Q6EP4fraVXJRj0NJfXJ57MJufycEEKvP_U0fRmILdW7BMO0-zphNn4T8foTidK6Hz7kBKnU03upJhVZfu4VZ8SlWm1WoHbKojAuVZ36-8/s1600/Orangepi.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" data-original-height="401" data-original-width="620" height="257" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSFdhKXQgI0t67ui9fwQoVKyncLRZN_ZnEQ1Q6EP4fraVXJRj0NJfXJ57MJufycEEKvP_U0fRmILdW7BMO0-zphNn4T8foTidK6Hz7kBKnU03upJhVZfu4VZ8SlWm1WoHbKojAuVZ36-8/s400/Orangepi.jpg" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Orange Pi PC&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;br /&gt;
Los creadores originales de este micro-ordenador son la empresa china &lt;i&gt;Shenzhen Xunlong Software CO&lt;/i&gt;, y dispone de una creciente comunidad de usuarios gracias a sus bajos precios, la disponibilidad de software y una relativa compatibilidad con las Raspberry Pi.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
Modelos y características&lt;/h3&gt;
Hasta la fecha han salido una gran variedad de modelos de este dispositivo, algunas de cuyas características expongo en la siguiente tabla. La mayoría de ellos se basan en el procesador H3 o variantes de la misma marca china: &lt;b&gt;Allwinner&lt;/b&gt;. Este tipo de procesadores es muy habitual encontrarlos en multitud de "&lt;i&gt;tablets&lt;/i&gt;" y "&lt;i&gt;Android PC&lt;/i&gt;" chinos debido a su gran relación potencia-precio.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;style type="text/css"&gt;
.tg  {border-collapse:collapse;border-spacing:0;border-color:#aaa;margin:0px auto;}
.tg td{font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:#aaa;color:#333;background-color:#fff;}
.tg th{font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:#aaa;color:#fff;background-color:#f38630;}
.tg .tg-e3zv{font-weight:bold}
.tg .tg-fbz7{font-weight:bold;background-color:#ffc702;color:#000000;vertical-align:top}
.tg .tg-9hbo{font-weight:bold;vertical-align:top}
.tg .tg-yw4l{vertical-align:top}
th.tg-sort-header::-moz-selection { background:transparent; }th.tg-sort-header::selection      { background:transparent; }th.tg-sort-header { cursor:pointer; }table th.tg-sort-header:after {  content:'';  float:right;  margin-top:7px;  border-width:0 4px 4px;  border-style:solid;  border-color:#404040 transparent;  visibility:hidden;  }table th.tg-sort-header:hover:after {  visibility:visible;  }table th.tg-sort-desc:after,table th.tg-sort-asc:after,table th.tg-sort-asc:hover:after {  visibility:visible;  opacity:0.4;  }table th.tg-sort-desc:after {  border-bottom:none;  border-width:4px 4px 0;  }@media screen and (max-width: 767px) {.tg {width: auto !important;}.tg col {width: auto !important;}.tg-wrap {overflow-x: auto;-webkit-overflow-scrolling: touch;margin: auto 0px;}}&lt;/style&gt;

&lt;br /&gt;
&lt;div class="tg-wrap"&gt;
&lt;table class="tg" id="tg-RY0VC"&gt;
  &lt;tbody&gt;
&lt;tr&gt;
    &lt;th class="tg-fbz7"&gt;Modelo&lt;/th&gt;
    &lt;th class="tg-fbz7"&gt;CPU&lt;/th&gt;
    &lt;th class="tg-fbz7"&gt;RAM&lt;/th&gt;
    &lt;th class="tg-fbz7"&gt;Alm.interno&lt;/th&gt;
    &lt;th class="tg-fbz7"&gt;Alm.externo&lt;/th&gt;
    &lt;th class="tg-fbz7"&gt;Red&lt;/th&gt;
    &lt;th class="tg-fbz7"&gt;Vídeo&lt;/th&gt;
    &lt;th class="tg-fbz7"&gt;Conectores&lt;/th&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td class="tg-e3zv"&gt;Orange Pi Zero&lt;/td&gt;
    &lt;td class="tg-031e"&gt;H2+ (Cortex-A7 cuádruple núcleo)  &lt;/td&gt;
    &lt;td class="tg-031e"&gt;256MB/512MB&lt;/td&gt;
    &lt;td class="tg-031e" rowspan="4"&gt;NO&lt;/td&gt;
    &lt;td class="tg-031e" rowspan="6"&gt;MicroSD hasta 64GB&lt;/td&gt;
    &lt;td class="tg-031e"&gt;Ethernet 10/100 + WIFI&lt;/td&gt;
    &lt;td class="tg-031e"&gt;Compuesto&lt;/td&gt;
    &lt;td class="tg-031e"&gt;Bus 26 GPIO + conector expansión 13 pines + 2 USB 2.0 + USB OTG&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td class="tg-e3zv"&gt;Orange Pi One&lt;/td&gt;
    &lt;td class="tg-031e" rowspan="4"&gt;H3 (Cortex-A7 cuádruple núcleo)&lt;/td&gt;
    &lt;td class="tg-031e" rowspan="2"&gt;512MB&lt;/td&gt;
    &lt;td class="tg-031e" rowspan="4"&gt;Ethernet 10/100 + WIFI&lt;/td&gt;
    &lt;td class="tg-031e" rowspan="5"&gt;HDMI CEC&lt;/td&gt;
    &lt;td class="tg-031e"&gt;Bus 40 GPIO + USB 2.0 + USB OTG + conector cámara + infrarrojos + MIC&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td class="tg-e3zv"&gt;Orange Pi Lite&lt;/td&gt;
    &lt;td class="tg-031e"&gt;Bus 40 GPIO + 2 USB 2.0 + USB OTG + conector cámara + infrarrojos + MIC&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td class="tg-e3zv"&gt;Orange Pi PC&lt;/td&gt;
    &lt;td class="tg-031e" rowspan="2"&gt;1GB&lt;/td&gt;
    &lt;td class="tg-031e" rowspan="3"&gt;Bus 40 GPIO + 3 USB 2.0 + USB OTG + conector cámara + infrarrojos + MIC&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td class="tg-9hbo"&gt;Orange Pi PC Plus&lt;/td&gt;
    &lt;td class="tg-yw4l"&gt;8GB&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td class="tg-e3zv"&gt;Orange Pi PC 2&lt;/td&gt;
    &lt;td class="tg-031e"&gt;H5 (Cortex-A53 cuádruple núcleo 64 bit)&lt;/td&gt;
    &lt;td class="tg-031e"&gt;1GB&lt;/td&gt;
    &lt;td class="tg-031e"&gt;&lt;/td&gt;
    &lt;td class="tg-031e"&gt;Ethernet 100/1GB + WIFI&lt;/td&gt;
  &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;script charset="utf-8" type="text/javascript"&gt;var TgTableSort=window.TgTableSort||function(n,t){"use strict";function r(n,t){for(var e=[],o=n.childNodes,i=0;i&lt;o.length;++i){var u=o[i];if("."==t.substring(0,1)){var a=t.substring(1);f(u,a)&amp;&amp;e.push(u)}else u.nodeName.toLowerCase()==t&amp;&amp;e.push(u);var c=r(u,t);e=e.concat(c)}return e}function e(n,t){var e=[],o=r(n,"tr");return o.forEach(function(n){var o=r(n,"td");t&gt;=0&amp;&amp;t&lt;o.length&amp;&amp;e.push(o[t])}),e}function o(n){return n.textContent||n.innerText||""}function i(n){return n.innerHTML||""}function u(n,t){var r=e(n,t);return r.map(o)}function a(n,t){var r=e(n,t);return r.map(i)}function c(n){var t=n.className||"";return t.match(/\S+/g)||[]}function f(n,t){return-1!=c(n).indexOf(t)}function s(n,t){f(n,t)||(n.className+=" "+t)}function d(n,t){if(f(n,t)){var r=c(n),e=r.indexOf(t);r.splice(e,1),n.className=r.join(" ")}}function v(n){d(n,L),d(n,E)}function l(n,t,e){r(n,"."+E).map(v),r(n,"."+L).map(v),e==T?s(t,E):s(t,L)}function g(n){return function(t,r){var e=n*t.str.localeCompare(r.str);return 0==e&amp;&amp;(e=t.index-r.index),e}}function h(n){return function(t,r){var e=+t.str,o=+r.str;return e==o?t.index-r.index:n*(e-o)}}function m(n,t,r){var e=u(n,t),o=e.map(function(n,t){return{str:n,index:t}}),i=e&amp;&amp;-1==e.map(isNaN).indexOf(!0),a=i?h(r):g(r);return o.sort(a),o.map(function(n){return n.index})}function p(n,t,r,o){for(var i=f(o,E)?N:T,u=m(n,r,i),c=0;t&gt;c;++c){var s=e(n,c),d=a(n,c);s.forEach(function(n,t){n.innerHTML=d[u[t]]})}l(n,o,i)}function x(n,t){var r=t.length;t.forEach(function(t,e){t.addEventListener("click",function(){p(n,r,e,t)}),s(t,"tg-sort-header")})}var T=1,N=-1,E="tg-sort-asc",L="tg-sort-desc";return function(t){var e=n.getElementById(t),o=r(e,"tr"),i=o.length&gt;0?r(o[0],"td"):[];0==i.length&amp;&amp;(i=r(o[0],"th"));for(var u=1;u&lt;o.length;++u){var a=r(o[u],"td");if(a.length!=i.length)return}x(e,i)}}(document);document.addEventListener("DOMContentLoaded",function(n){TgTableSort("tg-RY0VC")});&lt;/script&gt;

&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
Orange Pi Zero&lt;/h3&gt;
Esta es la pequeña de la familia, el modelo que yo tengo actualmente.&lt;br /&gt;
No se trata de una placa muy potente ni tiene unas especificaciones sobresalientes. Además, no está pensada para utilizarla como ordenador de escritorio puesto que no tiene salida HDMI ni VGA.&lt;br /&gt;
&lt;br /&gt;
Sin embargo, para una gran cantidad de aplicaciones, tiene potencia suficiente y además incorpora de serie puertos USB, Wifi y conector de red RJ45. A pesar de que las especificaciones indican que necesita un alimentador de unos 1,5A - 2A yo la tengo funcionando conectada a un puerto USB que supuestamente debería dar unos 500 mA como máximo.&lt;br /&gt;
&lt;br /&gt;
Estas son las ventajas, pero también tiene algunos inconvenientes según mi experiencia:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;El conector &lt;b&gt;GPIO&lt;/b&gt; no viene incluído, sino que tienes que soldarlo a la placa o soldar directamente los cables que necesites.&lt;/li&gt;
&lt;li&gt;A pesar de traer &lt;b&gt;WIFI&lt;/b&gt;, me ha demostrado que es bastante inestable. Yo particularmente la uso por ethernet y va estupendamente.&lt;/li&gt;
&lt;li&gt;El procesador H2+ se calienta una barbaridad, tanto que si empiezas a pedirle es fácil que se ponga por encima de los 80 grados. Es casi imprescindible ponerle al menos un &lt;b&gt;disipador&lt;/b&gt; térmico para que pueda funcionar a unos 60 grados que es algo más tolerable aunque no es lo óptimo.&lt;/li&gt;
&lt;li&gt;La placa tiene salida de vídeo compuesto y posibilidad de tener más puertos USB aparte del que trae soldado y el USB OTG, pero por problemas de espacio no dispone de conectores para ello, sino que tiene un bus de expansión adicional (que sí viene soldado) de 13 pines en los que están disponibles todas estas señales. Venden un &lt;b&gt;adaptador de expansión&lt;/b&gt; que se conecta a este bus y nos permite obtener directamente los conectores.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
Software&lt;/h3&gt;
En la &lt;a href="http://www.orangepi.org/downloadresources/" target="_blank"&gt;página del fabricante&lt;/a&gt; disponemos de descargas de varias versiones de Sistemas Operativos para las Orange Pi:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Ubuntu.&lt;/li&gt;
&lt;li&gt;Debian.&lt;/li&gt;
&lt;li&gt;Raspbian (Distribución Debian específica par Raspberries).&lt;/li&gt;
&lt;li&gt;Armbian (Distribución Debian para dispositivos ARM).&lt;/li&gt;
&lt;li&gt;ArchLinux.&lt;/li&gt;
&lt;li&gt;Android.&lt;/li&gt;
&lt;/ul&gt;
También tenemos la página de &lt;a href="https://www.armbian.com/" target="_blank"&gt;armbian &lt;/a&gt;donde disponemos de las últimas versiones de esta distribución, para varios modelos de Orange Pi y otras placas similares.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
Precios&lt;/h3&gt;
El precio de la Orange Pi Zero, que es la que yo tengo, es muy barato.&lt;br /&gt;
&lt;br /&gt;
A mí me costó &lt;span class="label"&gt;&lt;/span&gt;
			                					&lt;span class="txt"&gt;US$15.95 (unos 14€) de oferta en Banggood un kit con:&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span class="txt"&gt;Orange Pi Zero de 512MB.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="txt"&gt;Tarjeta de expansión (con salida de vídeo compuesto y 2 puertos USB adicionales).&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class="txt"&gt;Caja para montaje de ambos elementos.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span class="txt"&gt;También podemos encontrarla en Aliexpress&amp;nbsp; a un precio parecido, por ejemplo en &lt;a href="https://www.aliexpress.com/item/Orange-Pi-Zero-H2-Quad-Core-Open-source-512MB-Protective-White-Case-development-board-beyond-Raspberry/32799111611.html?spm=2114.search0104.3.63.iKZpfJ&amp;amp;ws_ab_test=searchweb0_0,searchweb201602_2_10152_10065_10151_10068_10209_10084_10083_10080_10082_10081_10301_10110_10136_10303_10137_10111_10060_10176_10112_10113_10155_10114_10154_10056_10055_10054_10182_10059_10184_100031_10099_10078_10079_10210_10103_10073_10102_5360020_10189_10109_10052_10053_10142_10107_10050_10051,searchweb201603_3,ppcSwitch_7&amp;amp;btsid=0294b72d-1b14-4882-bcec-f2d29581f6d5&amp;amp;algo_expid=c20eb219-1cec-4620-be8c-adf8f3e2049c-7&amp;amp;algo_pvid=c20eb219-1cec-4620-be8c-adf8f3e2049c" target="_blank"&gt;este enlace&lt;/a&gt; (16.24$).&lt;/span&gt;&lt;br /&gt;
&lt;span class="txt"&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span class="txt"&gt;De todos modos, a lo mejor comprar la caja es una tontería, dada la temperatura que coge el cacharro estando al aire...&lt;/span&gt;&lt;br /&gt;
&lt;h3&gt;
&lt;span class="txt"&gt;Conclusión&lt;/span&gt;&lt;/h3&gt;
&lt;span class="txt"&gt;Resumiendo, la placa de la que he hablado hoy es un micro-ordenador muy barato que nos puede servir para hacer muchos proyectos distintos. Podríamos tener distintos servidores preparados y simplemente cambiar de tarjeta SD para cambiar de sistema.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="txt"&gt;Aunque sus especificaciones no son las mejores del mundo y no tiene una salida HDMI ni VGA (por tanto no es adecuada para montar un ordenador de sobremesa), sí que nos puede servir para montar cualquier servidor que se nos ocurra.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="txt"&gt;En el siguiente artículo tengo intención de hablar de un proyecto particular de domótica que estoy montando en mi Orange Pi Zero: &lt;a href="https://home-assistant.io/" target="_blank"&gt;Home Assistant&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="txt"&gt;Hasta la próxima.&amp;nbsp;&lt;/span&gt; </description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBxPftUsX47ycUYF7J7TQcHhDe-d1AJSIZwIJIRSQESa6w1lF65jVivXHqwCJxkawWdGJuYqjUjy1g9xJ0NkzHEUuCRCudklYQ1fEk6L65ekUbi83m1tFPSjO2yTc72OaK9THjkvOYMm0/s72-c/LogoOPI.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Componentes (8): Reproductor MP3 DFPlayer Mini</title><link>http://nanolec.blogspot.com/2016/10/componentes-reproductor-mp3-dfplayer.html</link><category>arduino</category><category>componentes</category><category>dfrobot</category><category>electrónica</category><category>mp3</category><category>sonido</category><author>noreply@blogger.com (Isidoro Aguilar Baeza)</author><pubDate>Tue, 25 Oct 2016 22:48:00 +0200</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-155451023305910224.post-5596296985935832670</guid><description>&lt;div style="text-align: justify;"&gt;
El componente que estudiaremos hoy es muy útil cuando queramos emitir sonidos en nuestro montaje. Se trata de un reproductor de MP3 (y otros formatos) completo que tiene un tamaño realmente reducido.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkKDwfLRmn7pGx8vNlqO3y_TXypgQBPyJl2xTxexXirLp70ZhNoJZKehPxdd_4lo4WuHy56VflSD4S06J0_UBl1u99A_xICdXCoNIHYTv6NnERaJsfMysCsJwTD2GTvJJO__UHoV5IPXk/s1600/IMG_20160117_180410.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="293" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkKDwfLRmn7pGx8vNlqO3y_TXypgQBPyJl2xTxexXirLp70ZhNoJZKehPxdd_4lo4WuHy56VflSD4S06J0_UBl1u99A_xICdXCoNIHYTv6NnERaJsfMysCsJwTD2GTvJJO__UHoV5IPXk/s320/IMG_20160117_180410.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
El fabricante original de este componente es &lt;a href="http://www.dfrobot.com/wiki/index.php/DFPlayer_Mini_SKU:DFR0299" target="_blank"&gt;DFRobot&lt;/a&gt;, una empresa china especializada en&amp;nbsp;kits electrónicos y que tienen un gran soporte para el aficionado por medio de su extensa wiki.&lt;br /&gt;
&lt;br /&gt;
El reproductor dispone de un slot para introducir una tarjeta de memoria microSD de donde leerá los ficheros de audio, y tiene conectores para:&lt;br /&gt;
&lt;ul style="text-align: justify;"&gt;
&lt;li&gt;Conectar directamente a un altavoz de pequeñas dimensiones (hasta 3W).&lt;/li&gt;
&lt;li&gt;Conectar a un amplificador de sonido o toma de auriculares.&lt;/li&gt;
&lt;li&gt;Conectarle directamente una serie de botones que nos encontramos normalmente en cualquier reproductor de MP3, como play, pausa, avance, retroceso, volumen, etc.&lt;/li&gt;
&lt;li&gt;Conectar con un dispositivo USB.&lt;/li&gt;
&lt;li&gt;Conectar con el puerto serie de un dispositivo externo como un Arduino desde el que lo podemos controlar.&lt;/li&gt;
&lt;/ul&gt;
Otras características del dispositivo son las siguientes:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Reproduce audio en formato MP3 y WMA (aunque en las especificaciones indican WMV). &lt;/li&gt;
&lt;li&gt;Admite tarjetas de un máximo de 32GB.&lt;/li&gt;
&lt;li&gt;Soporta ficheros organizados en hasta 100 directorios con 255 ficheros cada uno.&lt;/li&gt;
&lt;li&gt;Incluye un ecualizador de 6 bandas.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Y todo esto en un tamaño de 2cm x 2cm.&lt;br /&gt;
&lt;br /&gt;
Por tanto, el dispositivo puede funcionar directamente como reproductor independiente (simplemente si le conectamos una batería y unos botoncillos de nada) o bien como dispositivo programable y controlarlo desde un controlador como un Arduino.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
Descripción de los conectores&lt;/h3&gt;
Consultando en la Wiki de DFRobot, podemos ver la disposición de los conectores más importantes:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_dIYluZqdJvgu179lddA78mo2TkkOnMRsOw1ddYdDtM4__x6tY9IVYlHNT3jIq-DIjKU8IHsqhaMhn3gA2o4FtBFpm8G6KyjYEc5S6DVW_74pk5jyGPlJjlK1xaCmX3003FUp_Pkig90/s1600/Miniplayer_pin_map.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="189" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_dIYluZqdJvgu179lddA78mo2TkkOnMRsOw1ddYdDtM4__x6tY9IVYlHNT3jIq-DIjKU8IHsqhaMhn3gA2o4FtBFpm8G6KyjYEc5S6DVW_74pk5jyGPlJjlK1xaCmX3003FUp_Pkig90/s320/Miniplayer_pin_map.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;VCC&lt;/b&gt;: Conector de alimentación. Admite voltajes entre 3.3V y 5V.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;RX&lt;/b&gt;: Entrada serie (lectura).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;TX&lt;/b&gt;: Salida serie (escritura).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;DAC_R&lt;/b&gt;: Salida de audio canal derecho (para auriculares o línea).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;DAC_L&lt;/b&gt;: Salida de audio canal izquierdo.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SPK_1&lt;/b&gt;: Conector negativo para altavoz externo.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;GND&lt;/b&gt;: Tierra.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SPK_2&lt;/b&gt;: Conector positivo para altavoz externo.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;BUSY&lt;/b&gt;: Este conector es una salida cuyo valor lógico 0 indica que el dispositivo está reproduciendo. Se puede utilizar para controlar por ejemplo un LED.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;USB-&lt;/b&gt; y &lt;b&gt;USB+&lt;/b&gt;: No me queda muy claro si forman una salida USB (para conectarlo a un ordenador y acceder al almacenamiento) o bien una entrada (para reproducir a partir de un pendrive por ejemplo), aunque me inclino más por lo primero.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ADKEY_2&lt;/b&gt;: No me queda claro en la wiki. Literalmente "reproduce el quinto segmento". Supongo que será para ir al último fichero o algo así, ya lo probaré.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ADKEY_1&lt;/b&gt;: Igualmente, la wiki menciona "reproduce el primer segmento". Supongo que irá al inicio de la lista.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;IO_2&lt;/b&gt;: Para conectarle un botón de "avance". Una pulsación corta avanza a la siguiente canción y una larga aumenta el volumen.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;IO_1&lt;/b&gt;: Para conectarle un botón de "retroceso". Una pulsación corta retrocede a la canción anterior y una larta disminuye el volumen.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;/ul&gt;
&lt;h3&gt;
Utilización con Arduino&lt;/h3&gt;
Para utilizar el dispositivo desde Arduino, utilizaremos el protocolo serie conectándolo a un pin para recepción y a otro para emisión. El dispositivo se controla mediante comandos por este protocolo serie como: "avanzar pista", "retroceder pista", "reproducir", "pausa", "modo de repetición", etc.&lt;br /&gt;
&lt;br /&gt;
Todos los comandos se pueden consultar en la &lt;a href="https://www.dfrobot.com/wiki/index.php/DFPlayer_Mini_SKU:DFR0299#Serial_Mode" target="_blank"&gt;Wiki &lt;/a&gt;o bien en &lt;a href="http://www.picaxe.com/docs/spe033.pdf" target="_blank"&gt;este documento&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Igualmente, en la misma Wiki podemos descargarnos una librería para no tener que utilizar los comandos sino funciones definidas para cada cosa. La librería también está disponible en &lt;a href="https://github.com/DFRobot/DFRobot_utility" target="_blank"&gt;Github&lt;/a&gt;.&lt;br /&gt;
&lt;h3&gt;
Dónde comprar &lt;/h3&gt;
Evidentemente, podéis comprar este componente en la propia web de DFRobot, concretamente &lt;a href="http://www.dfrobot.com/index.php?route=product/product&amp;amp;product_id=1121&amp;amp;search=dfplayer&amp;amp;description=true#.VrXzWct1HrM" target="_blank"&gt;en esta página&lt;/a&gt;, por $8.90, más gastos de envío:&lt;br /&gt;
&lt;br /&gt;
O bien podéis hacer como yo y comprarlo en Aliexpress. A mí me salio por 6 dólares, pero los he visto &lt;a href="http://www.aliexpress.com/item/DFPlayer-Mini-MP3-Player-Module-For-Arduino/32571281167.html?spm=2114.01010208.3.27.ZrEb7H&amp;amp;ws_ab_test=searchweb201556_1,searchweb201644_1_505_506_503_504_301_502_10001_10002_10016_10017_10010_10005_10006_10011_10003_10004_10013_10009_10008,searchweb201560_1,searchweb1451318400_-1,searchweb1451318411_6451&amp;amp;btsid=c299011f-dd80-4a9d-849f-bde4371069ba" target="_blank"&gt;aquí a partir de 3 dólares&lt;/a&gt;. Toda una ganga, ¿no?&lt;/div&gt;
</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkKDwfLRmn7pGx8vNlqO3y_TXypgQBPyJl2xTxexXirLp70ZhNoJZKehPxdd_4lo4WuHy56VflSD4S06J0_UBl1u99A_xICdXCoNIHYTv6NnERaJsfMysCsJwTD2GTvJJO__UHoV5IPXk/s72-c/IMG_20160117_180410.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><enclosure length="432792" type="application/pdf" url="http://www.picaxe.com/docs/spe033.pdf"/><itunes:explicit>no</itunes:explicit><itunes:subtitle>El componente que estudiaremos hoy es muy útil cuando queramos emitir sonidos en nuestro montaje. Se trata de un reproductor de MP3 (y otros formatos) completo que tiene un tamaño realmente reducido. El fabricante original de este componente es DFRobot, una empresa china especializada en&amp;nbsp;kits electrónicos y que tienen un gran soporte para el aficionado por medio de su extensa wiki. El reproductor dispone de un slot para introducir una tarjeta de memoria microSD de donde leerá los ficheros de audio, y tiene conectores para: Conectar directamente a un altavoz de pequeñas dimensiones (hasta 3W). Conectar a un amplificador de sonido o toma de auriculares. Conectarle directamente una serie de botones que nos encontramos normalmente en cualquier reproductor de MP3, como play, pausa, avance, retroceso, volumen, etc. Conectar con un dispositivo USB. Conectar con el puerto serie de un dispositivo externo como un Arduino desde el que lo podemos controlar. Otras características del dispositivo son las siguientes: Reproduce audio en formato MP3 y WMA (aunque en las especificaciones indican WMV). Admite tarjetas de un máximo de 32GB. Soporta ficheros organizados en hasta 100 directorios con 255 ficheros cada uno. Incluye un ecualizador de 6 bandas. Y todo esto en un tamaño de 2cm x 2cm. Por tanto, el dispositivo puede funcionar directamente como reproductor independiente (simplemente si le conectamos una batería y unos botoncillos de nada) o bien como dispositivo programable y controlarlo desde un controlador como un Arduino. Descripción de los conectores Consultando en la Wiki de DFRobot, podemos ver la disposición de los conectores más importantes: VCC: Conector de alimentación. Admite voltajes entre 3.3V y 5V. RX: Entrada serie (lectura). TX: Salida serie (escritura). DAC_R: Salida de audio canal derecho (para auriculares o línea). DAC_L: Salida de audio canal izquierdo. SPK_1: Conector negativo para altavoz externo. GND: Tierra. SPK_2: Conector positivo para altavoz externo. BUSY: Este conector es una salida cuyo valor lógico 0 indica que el dispositivo está reproduciendo. Se puede utilizar para controlar por ejemplo un LED. USB- y USB+: No me queda muy claro si forman una salida USB (para conectarlo a un ordenador y acceder al almacenamiento) o bien una entrada (para reproducir a partir de un pendrive por ejemplo), aunque me inclino más por lo primero. ADKEY_2: No me queda claro en la wiki. Literalmente "reproduce el quinto segmento". Supongo que será para ir al último fichero o algo así, ya lo probaré. ADKEY_1: Igualmente, la wiki menciona "reproduce el primer segmento". Supongo que irá al inicio de la lista. IO_2: Para conectarle un botón de "avance". Una pulsación corta avanza a la siguiente canción y una larga aumenta el volumen. IO_1: Para conectarle un botón de "retroceso". Una pulsación corta retrocede a la canción anterior y una larta disminuye el volumen. Utilización con Arduino Para utilizar el dispositivo desde Arduino, utilizaremos el protocolo serie conectándolo a un pin para recepción y a otro para emisión. El dispositivo se controla mediante comandos por este protocolo serie como: "avanzar pista", "retroceder pista", "reproducir", "pausa", "modo de repetición", etc. Todos los comandos se pueden consultar en la Wiki o bien en este documento. Igualmente, en la misma Wiki podemos descargarnos una librería para no tener que utilizar los comandos sino funciones definidas para cada cosa. La librería también está disponible en Github. Dónde comprar Evidentemente, podéis comprar este componente en la propia web de DFRobot, concretamente en esta página, por $8.90, más gastos de envío: O bien podéis hacer como yo y comprarlo en Aliexpress. A mí me salio por 6 dólares, pero los he visto aquí a partir de 3 dólares. Toda una ganga, ¿no?</itunes:subtitle><itunes:author>noreply@blogger.com (Isidoro Aguilar Baeza)</itunes:author><itunes:summary>El componente que estudiaremos hoy es muy útil cuando queramos emitir sonidos en nuestro montaje. Se trata de un reproductor de MP3 (y otros formatos) completo que tiene un tamaño realmente reducido. El fabricante original de este componente es DFRobot, una empresa china especializada en&amp;nbsp;kits electrónicos y que tienen un gran soporte para el aficionado por medio de su extensa wiki. El reproductor dispone de un slot para introducir una tarjeta de memoria microSD de donde leerá los ficheros de audio, y tiene conectores para: Conectar directamente a un altavoz de pequeñas dimensiones (hasta 3W). Conectar a un amplificador de sonido o toma de auriculares. Conectarle directamente una serie de botones que nos encontramos normalmente en cualquier reproductor de MP3, como play, pausa, avance, retroceso, volumen, etc. Conectar con un dispositivo USB. Conectar con el puerto serie de un dispositivo externo como un Arduino desde el que lo podemos controlar. Otras características del dispositivo son las siguientes: Reproduce audio en formato MP3 y WMA (aunque en las especificaciones indican WMV). Admite tarjetas de un máximo de 32GB. Soporta ficheros organizados en hasta 100 directorios con 255 ficheros cada uno. Incluye un ecualizador de 6 bandas. Y todo esto en un tamaño de 2cm x 2cm. Por tanto, el dispositivo puede funcionar directamente como reproductor independiente (simplemente si le conectamos una batería y unos botoncillos de nada) o bien como dispositivo programable y controlarlo desde un controlador como un Arduino. Descripción de los conectores Consultando en la Wiki de DFRobot, podemos ver la disposición de los conectores más importantes: VCC: Conector de alimentación. Admite voltajes entre 3.3V y 5V. RX: Entrada serie (lectura). TX: Salida serie (escritura). DAC_R: Salida de audio canal derecho (para auriculares o línea). DAC_L: Salida de audio canal izquierdo. SPK_1: Conector negativo para altavoz externo. GND: Tierra. SPK_2: Conector positivo para altavoz externo. BUSY: Este conector es una salida cuyo valor lógico 0 indica que el dispositivo está reproduciendo. Se puede utilizar para controlar por ejemplo un LED. USB- y USB+: No me queda muy claro si forman una salida USB (para conectarlo a un ordenador y acceder al almacenamiento) o bien una entrada (para reproducir a partir de un pendrive por ejemplo), aunque me inclino más por lo primero. ADKEY_2: No me queda claro en la wiki. Literalmente "reproduce el quinto segmento". Supongo que será para ir al último fichero o algo así, ya lo probaré. ADKEY_1: Igualmente, la wiki menciona "reproduce el primer segmento". Supongo que irá al inicio de la lista. IO_2: Para conectarle un botón de "avance". Una pulsación corta avanza a la siguiente canción y una larga aumenta el volumen. IO_1: Para conectarle un botón de "retroceso". Una pulsación corta retrocede a la canción anterior y una larta disminuye el volumen. Utilización con Arduino Para utilizar el dispositivo desde Arduino, utilizaremos el protocolo serie conectándolo a un pin para recepción y a otro para emisión. El dispositivo se controla mediante comandos por este protocolo serie como: "avanzar pista", "retroceder pista", "reproducir", "pausa", "modo de repetición", etc. Todos los comandos se pueden consultar en la Wiki o bien en este documento. Igualmente, en la misma Wiki podemos descargarnos una librería para no tener que utilizar los comandos sino funciones definidas para cada cosa. La librería también está disponible en Github. Dónde comprar Evidentemente, podéis comprar este componente en la propia web de DFRobot, concretamente en esta página, por $8.90, más gastos de envío: O bien podéis hacer como yo y comprarlo en Aliexpress. A mí me salio por 6 dólares, pero los he visto aquí a partir de 3 dólares. Toda una ganga, ¿no?</itunes:summary><itunes:keywords>arduino, componentes, dfrobot, electrónica, mp3, sonido</itunes:keywords></item><item><title>Componentes (7): Dispositivo Wifi ESP8266</title><link>http://nanolec.blogspot.com/2016/10/componentes-dispositivo-wifi-esp8266.html</link><category>arduino</category><category>componentes</category><category>electrónica</category><category>esp8266</category><category>wifi</category><author>noreply@blogger.com (Isidoro Aguilar Baeza)</author><pubDate>Sun, 23 Oct 2016 21:18:00 +0200</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-155451023305910224.post-7434566156296455904</guid><description>&lt;div style="text-align: justify;"&gt;
Pues sí, tenéis razón: tengo el blog completamente abandonado desde hace casi un año. Pero es que ha sido un año muy complicado y cargado de todo tipo de cosas.&lt;br /&gt;
&lt;br /&gt;
Así que hoy que es Domingo, está lloviendo y estamos encerrados en casa, he decidido desempolvar el arduíno, el portátil y el blog y ponerme a escribir un ratito.&lt;br /&gt;
&lt;br /&gt;
Retomo hoy la serie que empecé hace tiempo acerca de componentes electrónicos que conectar a nuestros "cacharros" y le dedico hoy un rato al &lt;b&gt;ESP8266&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
Introducción&lt;/h3&gt;
El ESP8266 es un dispositivo (SoC o System on a Chip) que permite incorporar funcionalidad &lt;b&gt;Wifi &lt;/b&gt;a cualquier aparato. Se trata de un componente de muy bajo coste y alta miniaturización producido por el relativamente recién llegado fabricante chino &lt;a href="https://espressif.com/" target="_blank"&gt;Espressif&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
El chip en sí mide 5x5 mm e incorpora:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Una unidad microcontroladora (MCU) a modo de CPU, de 32 bits.&lt;/li&gt;
&lt;li&gt;Memoria RAM para instrucciones de 64KB, y para datos de 96KB.&lt;/li&gt;
&lt;li&gt;Memoria Flash. &lt;/li&gt;
&lt;li&gt;Un sistema operativo integrado de tiempo real.&lt;/li&gt;
&lt;li&gt;Una pila de controladores software y hardware para WIFI b/g/n.&lt;/li&gt;
&lt;li&gt;Conectores para antena y otros (entre ellos 16 puertos de entradas y salidas).&lt;/li&gt;
&lt;li&gt;Amplificadores de potencia, filtros y gestión de energía de bajo consumo.&lt;/li&gt;
&lt;/ul&gt;
De hecho, el dispositivo posee tres modos de funcionamiento: &lt;i&gt;activo&lt;/i&gt;, &lt;i&gt;suspendido &lt;/i&gt;y &lt;i&gt;sueño profundo&lt;/i&gt; (deep sleep), que permite un aprovechamiento óptimo de la energía, motivo por el cual ha sido adoptado en muchos dispositivos como "TV Sticks" que vienen de China.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcAPK_1JJsCMo9-hW1Gqju_cYdToowBGD7MwSxKmgscv5hPu2eqIu6jBFA_vobYtQEab0_orlDI3DMXNjNneBoCrSEjeeKYJNwIstF907HFUqETBLEVBeilL22NhXs8CkZGpZFYgIp_Wc/s1600/IMG_20161023_183224.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="298" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcAPK_1JJsCMo9-hW1Gqju_cYdToowBGD7MwSxKmgscv5hPu2eqIu6jBFA_vobYtQEab0_orlDI3DMXNjNneBoCrSEjeeKYJNwIstF907HFUqETBLEVBeilL22NhXs8CkZGpZFYgIp_Wc/s400/IMG_20161023_183224.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
El dispositivo puede funcionar conectado a un controlador, como un Arduino por ejemplo, o bien de manera autónoma puesto que es programable.&lt;br /&gt;
&lt;br /&gt;
En el caso de funcionar conectado a un controlador, su manejo se realiza mediante comandos "AT" como si se tratase de un modem, utilizando el protocolo &lt;a href="https://es.wikipedia.org/wiki/Conjunto_de_comandos_Hayes" target="_blank"&gt;Hayes&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
Presentación y conexiones&lt;/h3&gt;
Como&amp;nbsp; hemos dicho, el chip mide 5mm de lado, y se puede soldar directamente sobre la placa, pero para nuestros propósitos, existe una presentación que se denomina ESP-01 (o ESP8266-01) que incluye el módulo ESP8266, un oscilador, y un interfaz con 8 pines de control (ver foto del párrafo anterior).&lt;br /&gt;
&lt;br /&gt;
El conexionado de esta presentación es el que se muestra en la siguiente imagen:&lt;br /&gt;
&lt;ol&gt;&lt;a href="https://pixhawk.org/_media/peripherals/esp8266_pinout.png?w=400&amp;amp;tok=275996" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="131" src="https://pixhawk.org/_media/peripherals/esp8266_pinout.png?w=400&amp;amp;tok=275996" width="320" /&gt;&lt;/a&gt;&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt; &lt;b&gt;RX&lt;/b&gt;: Recepción de datos.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;GPIO0 &lt;/b&gt;y &lt;b&gt;GPIO2&lt;/b&gt;: Estos dos pines son de entrada/salida, y se utilizan para arrancar el módulo en distintos modos: modo normal, programación, etc. Hay quien dice que deben conectarse a una alimentación de 3,3V con una resistencia de "pull-up", pero para las pruebas que yo he hecho (tengo uno funcionando desde hace más de un año) simplemente los dejo sin conectar y el módulo arranca correctamente.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;GND&lt;/b&gt;: Tierra&lt;/li&gt;
&lt;li&gt;&lt;b&gt;VCC&lt;/b&gt;: Alimentación. OJO: debe recibir una alimentación de &lt;b&gt;3,3V&lt;/b&gt; (en las especificaciones indica un máximo de 3,6V).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;RESET&lt;/b&gt;: Alimentar para reiniciar el dispositivo.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CHPD&lt;/b&gt;: Si este pin recibe un valor lógico de 1, el dispositivo se mantendrá en modo activo, mientras que si recibe un 0 permanecerá suspendido. En mis experimentos, sueldo este pin directamente con el VCC de alimentación, a 3,3V.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;TX&lt;/b&gt;: Transmisión de datos.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
Funcionamiento&lt;/h3&gt;
El dispositivo puede funcionar tanto como un cliente, para conectarse a una red Wifi, o como un servidor (por ejemplo para montar un minúsculo servidor web).&lt;br /&gt;
&lt;br /&gt;
Todas las funciones se pueden controlar por medio de comandos AT (también conocido como Hayes), que son comandos de texto que se envían mediante una conexión serie y comienzan todos con las letras "AT". La lista completa de comandos se puede consultar &lt;a href="http://www.pridopia.co.uk/pi-doc/ESP8266ATCommandsSet.pdf" target="_blank"&gt;en este enlace&lt;/a&gt;, pero a continuación hago un pequeño resumen para ver qué podemos llegar a conseguir con él:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;AT+CWLAP&lt;/b&gt;: Permite obtener una lista de las distintas redes Wifi disponibles.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;AT+CWJAP&lt;/b&gt;: Nos permite conectarnos con una red especificando su SSID y contraseña.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;AT+CIFSR&lt;/b&gt;: Nos permite consultar la dirección IP obtenida.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;AT+CIPSTART&lt;/b&gt;: Inicia una conexión con una dirección IP remota. &lt;/li&gt;
&lt;li&gt;&lt;b&gt;AT+CIPSEND&lt;/b&gt;: Envía datos a la dirección especificada anteriormente.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;AT+CIPCLOSE&lt;/b&gt;: Termina la conexión con la dirección remota.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;AT+CIPSERVE&lt;/b&gt;: Inicia o finaliza el modo servidor.&lt;/li&gt;
&lt;/ul&gt;
Como se puede ver, su utilización es muy simple. Además, siempre podemos utilizar una librería que nos permita enviar los comandos necesarios. &lt;br /&gt;
&lt;ul&gt;
&lt;/ul&gt;
&lt;h3&gt;
Librerías&lt;/h3&gt;
&lt;h3&gt;
&lt;/h3&gt;
Para utilizar este módulo con Arduino, hay numerosas librerías; sobre todo considerando la posibilidad de utilizarlo como dispositivo independiente o como dispositivo serie conectado al Arduino.&lt;br /&gt;
&lt;br /&gt;
La librería "oficial" de la comunidad ESP8266 es la siguiente:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;a href="https://github.com/esp8266/Arduino"&gt;https://github.com/esp8266/Arduino&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Aunque la que yo he utilizado hasta ahora es esta otra (de James Sleeman) que es muy fácil de utilizar:&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;a href="https://github.com/Autonomi/ESP8266"&gt;https://github.com/Autonomi/ESP8266&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;h3&gt;
Precios&lt;/h3&gt;
Finalmente, este módulo está disponible en una gran cantidad de sitios. Como siempre yo lo compré directamente a China en &lt;a href="https://www.aliexpress.com/item/Free-shipping-ESP8266-serial-WIFI-wireless-module-wireless-transceiver/2053974711.html?spm=2114.13010608.0.0.bbo2Id" target="_blank"&gt;este enlace&lt;/a&gt; de Aliexpress, aunque parece que ya no lo tienen disponible. Da igual, en &lt;a href="https://www.aliexpress.com/item/Free-shipping-10PCS-ESP8266-serial-WIFI-wireless-module-wireless-transceiver-100-new/32258674935.html?spm=2114.01010208.3.1.AbwAN2&amp;amp;ws_ab_test=searchweb0_0,searchweb201602_2_10065_10068_10069_10084_10083_10017_10080_10082_10081_10060_10061_10062_10056_10055_10054_10059_10078_10079_10073_10070_421_420_10052_10053_10050_10051,searchweb201603_1&amp;amp;btsid=1e6df715-2727-4590-84ba-e7942717e4d1" target="_blank"&gt;este otro enlace&lt;/a&gt; lo tienen aún más barato, a 1,70$ y es un éxito de ventas.&lt;/div&gt;
</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcAPK_1JJsCMo9-hW1Gqju_cYdToowBGD7MwSxKmgscv5hPu2eqIu6jBFA_vobYtQEab0_orlDI3DMXNjNneBoCrSEjeeKYJNwIstF907HFUqETBLEVBeilL22NhXs8CkZGpZFYgIp_Wc/s72-c/IMG_20161023_183224.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><enclosure length="277045" type="application/pdf" url="http://www.pridopia.co.uk/pi-doc/ESP8266ATCommandsSet.pdf"/><itunes:explicit>no</itunes:explicit><itunes:subtitle>Pues sí, tenéis razón: tengo el blog completamente abandonado desde hace casi un año. Pero es que ha sido un año muy complicado y cargado de todo tipo de cosas. Así que hoy que es Domingo, está lloviendo y estamos encerrados en casa, he decidido desempolvar el arduíno, el portátil y el blog y ponerme a escribir un ratito. Retomo hoy la serie que empecé hace tiempo acerca de componentes electrónicos que conectar a nuestros "cacharros" y le dedico hoy un rato al ESP8266. Introducción El ESP8266 es un dispositivo (SoC o System on a Chip) que permite incorporar funcionalidad Wifi a cualquier aparato. Se trata de un componente de muy bajo coste y alta miniaturización producido por el relativamente recién llegado fabricante chino Espressif. El chip en sí mide 5x5 mm e incorpora: Una unidad microcontroladora (MCU) a modo de CPU, de 32 bits. Memoria RAM para instrucciones de 64KB, y para datos de 96KB. Memoria Flash. Un sistema operativo integrado de tiempo real. Una pila de controladores software y hardware para WIFI b/g/n. Conectores para antena y otros (entre ellos 16 puertos de entradas y salidas). Amplificadores de potencia, filtros y gestión de energía de bajo consumo. De hecho, el dispositivo posee tres modos de funcionamiento: activo, suspendido y sueño profundo (deep sleep), que permite un aprovechamiento óptimo de la energía, motivo por el cual ha sido adoptado en muchos dispositivos como "TV Sticks" que vienen de China. El dispositivo puede funcionar conectado a un controlador, como un Arduino por ejemplo, o bien de manera autónoma puesto que es programable. En el caso de funcionar conectado a un controlador, su manejo se realiza mediante comandos "AT" como si se tratase de un modem, utilizando el protocolo Hayes. Presentación y conexiones Como&amp;nbsp; hemos dicho, el chip mide 5mm de lado, y se puede soldar directamente sobre la placa, pero para nuestros propósitos, existe una presentación que se denomina ESP-01 (o ESP8266-01) que incluye el módulo ESP8266, un oscilador, y un interfaz con 8 pines de control (ver foto del párrafo anterior). El conexionado de esta presentación es el que se muestra en la siguiente imagen: RX: Recepción de datos. GPIO0 y GPIO2: Estos dos pines son de entrada/salida, y se utilizan para arrancar el módulo en distintos modos: modo normal, programación, etc. Hay quien dice que deben conectarse a una alimentación de 3,3V con una resistencia de "pull-up", pero para las pruebas que yo he hecho (tengo uno funcionando desde hace más de un año) simplemente los dejo sin conectar y el módulo arranca correctamente. GND: Tierra VCC: Alimentación. OJO: debe recibir una alimentación de 3,3V (en las especificaciones indica un máximo de 3,6V). RESET: Alimentar para reiniciar el dispositivo. CHPD: Si este pin recibe un valor lógico de 1, el dispositivo se mantendrá en modo activo, mientras que si recibe un 0 permanecerá suspendido. En mis experimentos, sueldo este pin directamente con el VCC de alimentación, a 3,3V. TX: Transmisión de datos. Funcionamiento El dispositivo puede funcionar tanto como un cliente, para conectarse a una red Wifi, o como un servidor (por ejemplo para montar un minúsculo servidor web). Todas las funciones se pueden controlar por medio de comandos AT (también conocido como Hayes), que son comandos de texto que se envían mediante una conexión serie y comienzan todos con las letras "AT". La lista completa de comandos se puede consultar en este enlace, pero a continuación hago un pequeño resumen para ver qué podemos llegar a conseguir con él: AT+CWLAP: Permite obtener una lista de las distintas redes Wifi disponibles. AT+CWJAP: Nos permite conectarnos con una red especificando su SSID y contraseña. AT+CIFSR: Nos permite consultar la dirección IP obtenida. AT+CIPSTART: Inicia una conexión con una dirección IP remota. AT+CIPSEND: Envía datos a la dirección especificada anteriormente. AT+CIPCLOSE: Termina la conexión con la dirección remota. AT+CIPSERVE: Inicia o finaliza el modo servidor. Como se puede ver, su utilización es muy simple. Además, siempre podemos utilizar una librería que nos permita enviar los comandos necesarios. Librerías Para utilizar este módulo con Arduino, hay numerosas librerías; sobre todo considerando la posibilidad de utilizarlo como dispositivo independiente o como dispositivo serie conectado al Arduino. La librería "oficial" de la comunidad ESP8266 es la siguiente: https://github.com/esp8266/Arduino Aunque la que yo he utilizado hasta ahora es esta otra (de James Sleeman) que es muy fácil de utilizar: https://github.com/Autonomi/ESP8266 Precios Finalmente, este módulo está disponible en una gran cantidad de sitios. Como siempre yo lo compré directamente a China en este enlace de Aliexpress, aunque parece que ya no lo tienen disponible. Da igual, en este otro enlace lo tienen aún más barato, a 1,70$ y es un éxito de ventas.</itunes:subtitle><itunes:author>noreply@blogger.com (Isidoro Aguilar Baeza)</itunes:author><itunes:summary>Pues sí, tenéis razón: tengo el blog completamente abandonado desde hace casi un año. Pero es que ha sido un año muy complicado y cargado de todo tipo de cosas. Así que hoy que es Domingo, está lloviendo y estamos encerrados en casa, he decidido desempolvar el arduíno, el portátil y el blog y ponerme a escribir un ratito. Retomo hoy la serie que empecé hace tiempo acerca de componentes electrónicos que conectar a nuestros "cacharros" y le dedico hoy un rato al ESP8266. Introducción El ESP8266 es un dispositivo (SoC o System on a Chip) que permite incorporar funcionalidad Wifi a cualquier aparato. Se trata de un componente de muy bajo coste y alta miniaturización producido por el relativamente recién llegado fabricante chino Espressif. El chip en sí mide 5x5 mm e incorpora: Una unidad microcontroladora (MCU) a modo de CPU, de 32 bits. Memoria RAM para instrucciones de 64KB, y para datos de 96KB. Memoria Flash. Un sistema operativo integrado de tiempo real. Una pila de controladores software y hardware para WIFI b/g/n. Conectores para antena y otros (entre ellos 16 puertos de entradas y salidas). Amplificadores de potencia, filtros y gestión de energía de bajo consumo. De hecho, el dispositivo posee tres modos de funcionamiento: activo, suspendido y sueño profundo (deep sleep), que permite un aprovechamiento óptimo de la energía, motivo por el cual ha sido adoptado en muchos dispositivos como "TV Sticks" que vienen de China. El dispositivo puede funcionar conectado a un controlador, como un Arduino por ejemplo, o bien de manera autónoma puesto que es programable. En el caso de funcionar conectado a un controlador, su manejo se realiza mediante comandos "AT" como si se tratase de un modem, utilizando el protocolo Hayes. Presentación y conexiones Como&amp;nbsp; hemos dicho, el chip mide 5mm de lado, y se puede soldar directamente sobre la placa, pero para nuestros propósitos, existe una presentación que se denomina ESP-01 (o ESP8266-01) que incluye el módulo ESP8266, un oscilador, y un interfaz con 8 pines de control (ver foto del párrafo anterior). El conexionado de esta presentación es el que se muestra en la siguiente imagen: RX: Recepción de datos. GPIO0 y GPIO2: Estos dos pines son de entrada/salida, y se utilizan para arrancar el módulo en distintos modos: modo normal, programación, etc. Hay quien dice que deben conectarse a una alimentación de 3,3V con una resistencia de "pull-up", pero para las pruebas que yo he hecho (tengo uno funcionando desde hace más de un año) simplemente los dejo sin conectar y el módulo arranca correctamente. GND: Tierra VCC: Alimentación. OJO: debe recibir una alimentación de 3,3V (en las especificaciones indica un máximo de 3,6V). RESET: Alimentar para reiniciar el dispositivo. CHPD: Si este pin recibe un valor lógico de 1, el dispositivo se mantendrá en modo activo, mientras que si recibe un 0 permanecerá suspendido. En mis experimentos, sueldo este pin directamente con el VCC de alimentación, a 3,3V. TX: Transmisión de datos. Funcionamiento El dispositivo puede funcionar tanto como un cliente, para conectarse a una red Wifi, o como un servidor (por ejemplo para montar un minúsculo servidor web). Todas las funciones se pueden controlar por medio de comandos AT (también conocido como Hayes), que son comandos de texto que se envían mediante una conexión serie y comienzan todos con las letras "AT". La lista completa de comandos se puede consultar en este enlace, pero a continuación hago un pequeño resumen para ver qué podemos llegar a conseguir con él: AT+CWLAP: Permite obtener una lista de las distintas redes Wifi disponibles. AT+CWJAP: Nos permite conectarnos con una red especificando su SSID y contraseña. AT+CIFSR: Nos permite consultar la dirección IP obtenida. AT+CIPSTART: Inicia una conexión con una dirección IP remota. AT+CIPSEND: Envía datos a la dirección especificada anteriormente. AT+CIPCLOSE: Termina la conexión con la dirección remota. AT+CIPSERVE: Inicia o finaliza el modo servidor. Como se puede ver, su utilización es muy simple. Además, siempre podemos utilizar una librería que nos permita enviar los comandos necesarios. Librerías Para utilizar este módulo con Arduino, hay numerosas librerías; sobre todo considerando la posibilidad de utilizarlo como dispositivo independiente o como dispositivo serie conectado al Arduino. La librería "oficial" de la comunidad ESP8266 es la siguiente: https://github.com/esp8266/Arduino Aunque la que yo he utilizado hasta ahora es esta otra (de James Sleeman) que es muy fácil de utilizar: https://github.com/Autonomi/ESP8266 Precios Finalmente, este módulo está disponible en una gran cantidad de sitios. Como siempre yo lo compré directamente a China en este enlace de Aliexpress, aunque parece que ya no lo tienen disponible. Da igual, en este otro enlace lo tienen aún más barato, a 1,70$ y es un éxito de ventas.</itunes:summary><itunes:keywords>arduino, componentes, electrónica, esp8266, wifi</itunes:keywords></item><item><title>Cómo comprar en China y no fastidiarla en el intento</title><link>http://nanolec.blogspot.com/2015/11/como-comprar-en-china-y-no-fastidiarla.html</link><category>aliexpress</category><category>alipay</category><category>black friday</category><category>China</category><category>compras</category><category>ebay</category><category>electrónica</category><category>paypal</category><category>taobao</category><author>noreply@blogger.com (Isidoro Aguilar Baeza)</author><pubDate>Sun, 29 Nov 2015 02:39:00 +0100</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-155451023305910224.post-6476486231839200573</guid><description>&lt;br /&gt;
&lt;h2&gt;
Consejos para la compra online en China&lt;/h2&gt;
&lt;div class="parrafo-color"&gt;
Black Friday, Cyber Monday, Navidad, Acción de Gracias, 9 de Septiembre, 11 de Septiembre, el día de la primavera, el día de los solteros, el año nuevo chino...&lt;br /&gt;
&lt;br /&gt;
Toda celebración es buena para fomentar el consumismo. Y mucho mejor si 
el que vende está en un país comunista... ¡Viva el libre mercado!&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;div class="separator" style="clear: both;"&gt;
Sí, ya sé que este es un blog de tecnología, pero en fin, hoy me apetecía hablar un poco sobre las compras online, y especialmente las referidas a tiendas o plataformas chinas a las que soy tan aficionado.&lt;/div&gt;
&lt;div class="separator" style="clear: both;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxhHxfPFFMrSHhv_f5OoBJqQdoZ4ZGWJIB6vJaHPm86iP_a3s9vFIaT_S7Z49U7tD3lAMFnubw_hKdd3PYYTj8WQpC8j6WdzlJr82meisGa27vF8lvOcyR0YC9Eh26El70lx25OMHgH7g/s640/blogger-image-1094456934.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img align="middle" border="0" height="266" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxhHxfPFFMrSHhv_f5OoBJqQdoZ4ZGWJIB6vJaHPm86iP_a3s9vFIaT_S7Z49U7tD3lAMFnubw_hKdd3PYYTj8WQpC8j6WdzlJr82meisGa27vF8lvOcyR0YC9Eh26El70lx25OMHgH7g/s400/blogger-image-1094456934.jpg" width="400" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
Cuando uno oye hablar de esto por primera vez, piensa que esto de comprar en el extranjero es muy complicado y muy peligroso, y cuando piensas en China inevitablemente se te viene a la cabeza el típico establecimiento chino de tu barrio donde sólo el dependiente sabe dónde está cada cosa, donde hay un espía vigilándote en cada esquina de cada pasillo de la tienda y cuando tienes una duda y le preguntas al chino por algo, él te sonríe como si te hubiera entendido, le habla en chino a otro empleado y él te explica que &lt;span style="color: #666666;"&gt;&lt;i&gt;"...segulo, no ploblema..."&lt;/i&gt;&lt;/span&gt; y te vas a casa más mosqueado que un pavo pensando que posiblemente te hayan engañado...&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;
Y es verdad, los chinos y los españoles no somos muy distintos a pesar de las diferencias culturales: el que te puede engañar seguramente te va a engañar, o a lo mejor no, nunca se sabe...&lt;br /&gt;
&lt;br /&gt;
Luego piensas que en realidad, quitando honrosas excepciones, la mayoría de las cosas que hoy compramos en una tienda española (o francesa, o italiana, o estadounidense, o ....) se ha fabricado en China. Y resulta que esos mismos fabricantes chinos que fabrican para empresas europeas o americanas luego te van a vender el mismo producto (o casi) casi a precio de fábrica; eso sí: olvídate de controles de calidad, de pruebas y de muchas otras cosas que encarecen el producto final. Lógicamente también te evitas las comisiones de terceros: transporte, marcas, etc.&lt;br /&gt;
&lt;br /&gt;
Si añadimos a esto el hecho de que China posee un servicio postal a coste casi cero, promocionado por su gobierno, las empresas chinas se lanzaron hace años a una carrera por la venta por internet; y el crecimiento de intermediarios que se encargan de vender artículos al por menor es imparable.&lt;br /&gt;
&lt;br /&gt;
Mi intención en este artículo es proporcionar una serie de consejos o "verdades fundamentales" que tenemos que tener en cuenta si queremos convertirnos en "importadores de autoconsumo" y comprar en tiendas chinas. Como este es un blog de tecnologías, me voy a centrar en lo referente a las compras tecnológicas en base a mi experiencia, pero la mayor parte de lo que aquí expongo puede valer para otro tipo de compras.&lt;br /&gt;
&lt;h2&gt;
Cosas básicas a tener en cuenta&lt;/h2&gt;
Lo primero que tenemos que tener en cuenta es que se trata de una compra a distancia, y la relación entre el vendedor y el comprador es difícil cuando no se conocen mutuamente, cuanto más si viven en países distantes de culturas muy diferentes. Por esto y por otros factores de riesgo, os expongo a continuación unos consejos generales relacionados con los peligros de nuestra transacción.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Los chinos son muy buenos imitadores&lt;/b&gt;.&lt;br /&gt;Este factor es muy importante. No sólo se trata de que la mayor parte de los artículos se fabriquen en China, sino que los chinos, como su forma de vida, están acostumbrados a subsistir imitando todo aquello que exista. Tiene mucho que ver con las restricciones que tienen originadas por su sistema político, pero también con su bajo nivel económico. En China puedes encontrar imitaciones virtualmente de todo: desde un Windows XP que resulta que ni Microsoft, ni Windows ni XP hasta piezas de LEGO que no son LEGO, pasando por tarjetas de memoria que no son lo que parecen, etc. Se trata de aparentar, y muchas veces van a intentar colártela. Si nos centramos en el tema de los teléfonos móviles, decir que existen imitaciones chinas de otras marcas chinas que a su vez son imitaciones de marcas occidentales... Y más de uno ha caído, lo advierto. Muchas veces la calidad del objeto imitado es muy buena, la verdad, pero otras deja muchísimo que desear.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Desconfiar por sistema&lt;/b&gt;.&lt;br /&gt;Otra cosa que hay que tener en cuenta es que no podemos fiarnos nunca al 100% de lo que diga un vendedor, ya que por norma general puede pasar una de las siguientes cosas:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Que el vendedor no sepa lo que vende, y simplemente ponga una información que no se corresponde con el artículo.&lt;/li&gt;
&lt;li&gt;Que el vendedor haya puesto una descripción del artículo que ha copiado de otra web, que a su vez han copiado de otra web, que a su vez tecleó el becario de una empresa china subcontratada por 5 euros el día por una empresa que vende el artículo original; pero que luego resulte que esa información es incorrecta porque ya el artículo que venden no es el mismo.&lt;/li&gt;
&lt;li&gt;Que el vendedor te esté engañando vilmente y te quiere vender gato por liebre.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;blockquote class="tr_bq"&gt;
Es verdad que esto puede ser un poco decepcionante, pero es mejor estar prevenido antes de darle al botón "comprar". Esto no se puede aplicar al 100% de los casos, lógicamente, pero hay cosas que yo no compraría jamás en una tienda china por mucha reputación que tenga, como tarjetas de memoria y pendrives. Leí hace un tiempo un artículo en el que un servicio técnico abre un disco duro que un cliente había comprado en China y no le funcionaba bien. Al abrir el disco, esto es lo que encontraron: &lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;a href="http://i.imgur.com/i08Cy1V.jpg" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://i.imgur.com/i08Cy1V.jpg" height="320" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Se trata de una carcasa de disco duro con supuestamente 500GB que en su interior sólo tenía un pendrive de 8GB "trucado" y algo de metal para hacer peso. El truco del pendrive consiste en que al sistema le dice que tiene 500GB (o lo que quiera) pero a la hora de grabar ficheros, cuando llega al final del disco sigue grabando por el principio machacando lo que hubiera. En &lt;a href="https://www.reddit.com/r/funny/comments/2nl2eh/so_my_friend_bought_a_new_500gb_hard_drive_and/" target="_blank"&gt;este enlace de reddit&lt;/a&gt; y en &lt;a href="http://www.cracktwo.com/2011/04/chinese-fake-hard-drive.html" target="_blank"&gt;este otro&lt;/a&gt; podéis ver casos similares. Y la cosa parece ser bastante habitual, hay que tener mucho cuidado porque hay &lt;a href="http://www.aliexpress.com/item/Wholesale-Micro-SD-card-16GB-use-for-Mobile-phone/517318297.html" target="_blank"&gt;vendedores &lt;/a&gt;que incluso te lo dicen a la cara: &lt;span style="color: #666666;"&gt;&lt;i&gt;"...oye, que es mentira, que estas tarjetas de 128 GB que vendemos, en realidad son de mentira, tienen sólo 16..."&lt;/i&gt;&lt;/span&gt;. Así que recordad: nada de tarjetas ni pendrives ni discos duros supermaravillosos. &lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;El menos común de los sentidos&lt;/b&gt;.&lt;br /&gt;Dicen que así es el sentido común, y es verdad. Vamos a ver: ¿de verdad tú crees que por 90 dólares te van a vender un iPhone? ¿de verdad crees que una tarjeta microSD de 128GB puede llegar a costar 10 dólares?&lt;br /&gt;Hay cosas que no son comprensibles. Si tú haces una búsqueda de un artículo electrónico en una plataforma de compra, ordenas los resultados por precios y resulta que hay un vendedor que vende ese artículo a la mitad de precio que el resto, pues ve pensándote que es un engaño, por muy bonitas que sean las fotos que te pone y las especificaciones que te escribe.&lt;br /&gt;Por tanto, hay que usar muchísimo el sentido común.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;La experiencia es la madre de la ciencia&lt;/b&gt;.&lt;br /&gt;Este es un consejo también muy importante a tener en cuenta: nadie nace sabiendo, y para todo hay que aprender, a veces de forma agradable y a veces de forma traumática. Por tanto mi consejo es que si no tenéis experiencia previa, no os toméis a la ligera vuestras compras, no seáis compradores compulsivos.&lt;br /&gt;Esto es importante tenerlo en cuenta siempre, pero más en situaciones de supuestas "rebajas" o "días locos" que se repiten a lo largo del calendario, porque como pongo al principio, cualquier conmemoración es buena para vender.&lt;br /&gt;Lo importante es que estemos informados, que consultemos las opiniones de otros compradores, que consultemos al vendedor todas nuestras sospechas, que leamos mucho en distintos foros de compras las experiencias que otros han tenido. A pesar de que el vendedor nos puede querer engañar, nosotros debemos saber leer entre líneas y sobretodo si nos ponemos en contacto con él la experiencia suele ser buena. Los trabajadores que están a cargo del soporte tanto en las propias tiendas como en foros especializados suelen saber bien de lo que hablan y normalmente no te van a engañar.&lt;br /&gt;Casi todas las tiendas tienen un apartado donde los compradores pueden poner su valoración de la transacción una vez realizada. Es muy importante leer estas valoraciones o al menos ver si hay muchos puntos negativos. Es verdad que esto tampoco es una regla de tres, porque hay vendedores excelentes y compradores muy "tiquis miquis". Por lo contrario, a veces también hay malos vendedores y compradores falsos que dejan buenas valoraciones; pero por norma general os doy dos apuntes acerca de este consejo:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;No comprar artículos sin valoraciones ni compras anteriores. No queráis ser el primer comprador de un artículo, dejad egoistamente que otros experimenten antes que vosotros.&lt;/li&gt;
&lt;li&gt;Leed bien los comentarios negativos: muchas veces tampoco los compradores saben lo que compran, o no entienden que un artículo tarde un mes y medio en llegar a su casa. Sed justos.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;b&gt;Las malas consejeras&lt;/b&gt;.&lt;br /&gt;Insisto: las prisas son malas. Para toda compra, pero sobre todo las chinas.&lt;br /&gt;Habrá quien no estará de acuerdo, habrá a quien le guste ser un comprador compulsivo; pero por experiencia os puedo decir que a la hora de hacer una compra en China hay que mirar muchas cosas, no ser de gatillo fácil, y más teniendo en cuenta la gran cantidad de "ofertas" que nos vienen a las manos o a nuestro correo electrónico. Curiosamente, el otro día me llegó una "oferta" de viernes negro de un móvil que, supuestamente rebajado, costaba 10 dólares más que su precio normal en el resto de las tiendas. Por tanto hay que ser muy precavido ante supuestas ofertas, mirar en el resto de tiendas "legales" que conozcamos, buscar cupones descuento, etc. Además, las prisas pueden hacer que nos equivoquemos a la hora de pagar, o a la hora de elegir el método de envío, y en infinidad de cosas.&lt;/li&gt;
&lt;ul&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;b&gt;Qué horas son estas&lt;/b&gt;.&lt;br /&gt;Un riesgo a tener en cuenta es que la tienda en la que estás comprando no está en España. Está en un lugar en el que cuando tú entras a trabajar, ellos ya están pensando en volver a casa. Son 8 horas más en China que en España, así que tenlo en cuenta si quieres ponerte en contacto con el servicio técnico o quieres entrar en un chat online de la tienda. Muchas veces te dejarán en espera, porque toda Europa está intentando hablar con ellos cuando para ellos son las 5 o las 6 de la tarde, y no creo que para ellos sea muy agradable. Si intentas hablar con ellos después de las 10 de la mañana, acostúmbrate a que no te van a responder como mínimo hasta mañana.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;En un lugar muy, muy lejano&lt;/b&gt;.&lt;br /&gt;Otra cosa que hay que entender es la distancia, por algo se le llama el lejano Oriente. Estamos hablando de hacer una compra en una tienda que la mayoría de las veces es un intermediario. Que normalmente no va a tener stock de todos los artículos que vende, que muchas veces tiene que pedir material al almacén, que luego tiene que mandarlo por el correo, que no es el correo más rápido del mundo, y que tu pedido tiene que pasar por multitud de países, de oficinas de correos, y de manos.&lt;br /&gt;Otra cosa es saber diferenciar entre "tiempo de preparación" o "processing time", que es el tiempo que tarda la empresa en preparar tu pedido desde que lo compras hasta que ellos lo envían y "tiempo de envío" o "shipping time" que es el tiempo que tardan las compañías de correos o mensajería internacionales en llevarte el pedido desde la tienda hasta tu casa.&lt;br /&gt;Así que, sin prisas. Si quieres hacerlo bien, prepárate a esperar entre la suma de estos dos tiempos al menos 20 días para recibir tu pedido. Mientras tanto, puedes consultar el estado de tu pedido en la tienda y la situación aproximada del paquete mediante webs especializadas como &lt;a href="https://www.17track.net/" target="_blank"&gt;17track&lt;/a&gt;.&lt;br /&gt;Normalmente, todas las tiendas van a ofrecerte diferentes métodos de envío, y cada uno tiene sus ventajas e inconvenientes. A continuacion os pongo los más comunes:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Air mail o flat rate mail&lt;/b&gt;.&lt;br /&gt;Se trata del método más barato, equiparable a nuestro "correo ordinario" con la diferencia de que a ellos con China Post les sale prácticamente gratis mandar un paquete de esta forma a cualquier parte del mundo. Es un método lento y poco seguro, porque no lleva número de "tracking" o seguimiento y no podemos saber dónde está nuestro pedido. Por contrapartida, tiene la ventaja de ser gratuíto para el comprador y en el 99,99% de las ocasiones no lo parará la aduana al entrar en España.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Registered air mail&lt;/b&gt;.&lt;br /&gt;Este método es el equivalente de nuestro "correo certificado". Tiene tracking o seguimiento y podemos saber mediante 17track y otras webs por dónde va pasando, siempre que las correspondientes compañías se encarguen de ir actualizándolo. En algunas tiendas este envío es gratuíto (la mayoría) y en otras depende del importe del artículo. El tiempo de envío es prácticamente el mismo y tiene la misma ventaja "aduanera". Sin embargo, existe un límite en el peso del artículo de aproximadamente 2Kg.&lt;br /&gt;Decir también que el vendedor puede elegir diferentes compañías para realizar este tipo de envío, como China Post, Hong Kong Post, Singapore Post, PostNL, Deutsche Post y otras menos conocidas. El funcionamiento de todas ellas es igual, y al final aquí en España lo reparte Correos y tienes que firmar la entrega al cartero.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Expedited shipping&lt;/b&gt;.&lt;br /&gt;Este tipo de envío no viene por Correos sino por diferentes agencias de transporte como DHL, UPS, etc. El envío es muy rápido, 4 ó 5 días, pero como contrapartida hay un 99% de probabilidad de que te lo paren en la aduana y tengas que pagar (ver punto siguiente). Además este tipo de envío no suele ser gratuíto sino bastante caro.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;b&gt;Esto es una importación&lt;/b&gt;.&lt;br /&gt;Algo que muchas veces se nos olvida y que es muy importante: al comprar en un país extracomunitario estamos realizando una importación, y dependiendo de cómo lo hagamos estamos obviando todo el tema de impuestos que este hecho lleva asociado.&lt;br /&gt;Por un lado, según la &lt;a href="https://www.boe.es/buscar/act.php?id=BOE-A-1992-28740" target="_blank"&gt;ley 37/1992&lt;/a&gt; del Impuesto de Valor Añadido, toda importación está sujeta a IVA; pero además, la base imponible de dicho IVA irá incrementada por los impuestos y gravámenes que se devenguen de la importación y los gastos accesorios. Y da igual que seamos una empresa o un particular.&lt;br /&gt;Por tanto, si lo hiciésemos bien, pagando todos nuestros aranceles e impuestos, la compra que realizamos en una tienda china debería pasar por aduana y pasar por caja, incrementando el gasto al menos en un 21%. Lo que pasa es que casi nadie hace esto, luego veremos por qué. Pero la ley es la ley.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;La garantía, esa gran desconocida&lt;/b&gt;.&lt;br /&gt;Finalmente está el tema de la garantía. Por norma general, los artículos electrónicos comprados en China tienen 1 año de garantía, no 2 como en España. Pero hay que hacer varias consideraciones sobre esto:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;El período de garantía digamos que no es una norma general en el caso de las exportaciones. Hay tiendas que la acatarán y tiendas que no.&lt;/li&gt;
&lt;li&gt;Se trata de una garantía en China, de manera que toca mandar el aparato de vuelta si tienes algún problema, y los gastos de España a China son mucho más caros en este caso.&lt;/li&gt;
&lt;li&gt;Si el aparato viene defectuoso, queda en manos de la tienda la potestad de cambiártelo por otro o bien considerarlo como garantía, todo esto previo envío a China.&lt;/li&gt;
&lt;li&gt;Algunas tiendas te darán la opción de arreglar el aparato en una tienda española de tu confianza siempre y cuando pidas un presupuesto previo y ellos te lo acepten.&lt;/li&gt;
&lt;li&gt;Dado el volumen de negocio, algunas tiendas te dan ahora la opción de mandarlo a un servicio técnico español propuesto por ellos.&lt;/li&gt;
&lt;li&gt;En todo caso, si tienes una avería te toca confiar en la buena fe del vendedor y tendrás que esperar bastante: primero a que el aparato llegue a China (o al servicio técnico de España y que ellos lo envíen a China); después esperar que su servicio técnico o bien el fabricante arreglen el aparato; y finalmente esperar que te lo vuelvan a mandar. El tiempo puede sobrepasar perfectamente los dos meses.&lt;br /&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;h2&gt;
Medios de pago&lt;/h2&gt;
Si a pesar de haber leido todo lo anterior eres valiente y sigues queriendo comprar en China, tendremos que hablar del dinero, que es algo que a la gente le duele más que saber a qué tienda se dirige: cómo pagar.&lt;br /&gt;
&lt;h3&gt;
Paypal&lt;/h3&gt;
&lt;div class="separator" style="clear: both;"&gt;
El primer medio de pago reomendado y del que casi todo el mundo ha oido hablar es Paypal.&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMkZHdWXIMcg_DTFkBu03bP2qrn1rpFOaHns76lGO8ck6X4d7NzzRoKgwV4NWm94TyO8mNeg2tO22MKwvKl-dZPqcjnbX6di4R2exwmtkTK2xRMsBvWoV6STRQrCfPS3-WQGfP7rjormA/s640/blogger-image-1687269451.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="182" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMkZHdWXIMcg_DTFkBu03bP2qrn1rpFOaHns76lGO8ck6X4d7NzzRoKgwV4NWm94TyO8mNeg2tO22MKwvKl-dZPqcjnbX6di4R2exwmtkTK2xRMsBvWoV6STRQrCfPS3-WQGfP7rjormA/s400/blogger-image-1687269451.jpg" width="400" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;
Paypal es un intermediario. Podemos pensar en Paypal como una cuenta corriente que tenemos en otro banco y a la que transferimos el dinero cuando queremos comprar, de manera que el vendedor no conozca tu cuenta real que tienes en tu banco de siempre.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;
Además de proteger tu identidad bancaria, Paypal tiene otras muchas ventajas, como la protección ante fraudes y los gastos de devolución gratuitos.&lt;br /&gt;
&lt;br /&gt;
El tema de la protección funciona de la siguiente manera: supongamos que vas y compras un teléfono en una tienda online y que después de dos meses el teléfono no te ha llegado.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Si el vendedor admite Paypal, tú has pagado mediante tu cuenta Paypal, que a su vez te ha cargado el coste en tu cuenta corriente o en tu tarjeta de débito o de crédito. Paypal le ha pagado al vendedor y se ha quedado con una pequeña comisión.&lt;/li&gt;
&lt;li&gt;En caso de fraude (te han enviado algo que no es lo que compraste) o de no recepción, puedes abrir una disputa. Paypal entonces hará de mediador y se pondrá en contacto con el vendedor, y probablemente te pedirá que demuestres el hecho: documentos, correos electrónicos, fotos, etc. Si el vendedor acepta la disputa, normalmente se va aponer en contacto contigo para llegar a un acuerdo: devolverte el dinero, mandarte otro artículo o lo que sea. En caso de que no se llegue a un acuerdo, Paypal te debe devolver el dinero.&lt;/li&gt;
&lt;/ul&gt;
Si la compra se hace en eBay, además hay una ventaja añadida y es que no se te va a cobrar nada hasta que hayas recibido el artículo. También han añadido otra ventaja recientemente y es que te reembolsan los gastos de envío en caso de que sea necesario devolver el artículo.&lt;br /&gt;
&lt;br /&gt;
Abrir una cuenta en Paypal es de lo más fácil del mundo, tan fácil como crearnos una dirección de correo electrónico. Una vez que tengamos nuestra cuenta, hay que añadirle fondos; esto es, decirle dónde va a realizar los cargos correspondientes a los pagos que hagamos con Paypal.&lt;br /&gt;
&lt;br /&gt;
Podemos elegir cargar los gastos en una o más tarjetas de crédito y también directamente como un cargo en nuestra cuenta corriente. Podemos tener un origen de los fondos para todas las compras, o bien elegirlo en cada compra. En cualquier caso, Paypal realizará un pequeño cargo (algunos céntimos) en nuestro origen de fondos con un código que tendremos que rellenar si queremos tener los beneficios de&amp;nbsp; una cuenta registrada.&lt;br /&gt;
&lt;br /&gt;
La cuenta que abrimos en Paypal está en euros al abrirse desde España. Esto quiere decir que los cargos siempre nos los va a hacer en euros, independientemente de la moneda en la que se haga la compra. Si la compra se hace en dólares es Paypal el que hace el cambio, y hay que tenerlo en cuenta a la hora de pagar porque este cambio suele ser menos favorable que el que nos haría nuestro banco, porque incluye una comisión. Antiguamente, en la propia web de Paypal había una calculadora que permitía obtener el importe exacto al que correspondía una cantidad concreta de dólares, pero desde que cambiaron el diseño esta herramienta ha desaparecido.&lt;br /&gt;
&lt;h3&gt;
Alipay&lt;/h3&gt;
&lt;div class="separator" style="clear: both;"&gt;
Alipay es otro intermediario parecido a Paypal&lt;span style="color: #0000ee;"&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwliBaoLqROkW9NumYPh7tq2npOf3RwYm2DIxvmd2R0tffySUch1spQe9AulQ4GzfTfUikjzdrX_R0UXHc4SYd7Q90OoyOpcR7p_m4WDIo-VetBijEy2W5MTzwN3Sm3pRpYIBHnletIOk/s640/blogger-image--201801183.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="158" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwliBaoLqROkW9NumYPh7tq2npOf3RwYm2DIxvmd2R0tffySUch1spQe9AulQ4GzfTfUikjzdrX_R0UXHc4SYd7Q90OoyOpcR7p_m4WDIo-VetBijEy2W5MTzwN3Sm3pRpYIBHnletIOk/s400/blogger-image--201801183.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both;"&gt;
Dicen las malas lenguas que en el origen de los tiempos, cuando hacías una compra en una tienda del grupo Alibaba (Aliexpress, TaoBao, Tmall...) podías pagar también por Paypal. Esto cambió en poco tiempo debido a discrepancias entre las dos empresas (hay que tener en cuenta que Paypal formó parte durante bastante tiempo de la empresa eBay) y por la política del gobierno chino de no tener ninguna dependencia de empresas o sistemas extranjeros.&lt;/div&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;div class="separator" style="clear: both;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both;"&gt;
A partir de ahí surgió Alipay, que es un medio de pago válido (aunque no obligatorio) en los portales indicados, y propiedad de dicho grupo empresarial. La diferencia con Paypal es que Alipay retiene nuestro dinero y no se lo paga al vendedor hasta que el cliente verifica que el producto es correcto, se ha recibido y no se trata de un fraude. Esto está bien en principio, pero para evitar que el vendedor se quede esperando para siempre a que el cliente confirme la recepción, existe un período de protección preestablecido pasado el cual se cierra automáticamente la transacción dándola por buena y pagando finalmente al vendedor. El sistema nos avisará un poco antes de que termine el periodo de protección para que lo ampliemos si es que todavía no hemos recibido nada.&lt;/div&gt;
&lt;div class="separator" style="clear: both;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both;"&gt;
En caso de problemas, también permite abrir una disputa y Alipay responderá en caso de que no se llegue a un acuerdo con el vendedor.&amp;nbsp;&lt;/div&gt;
&lt;div class="separator" style="clear: both;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both;"&gt;
Crear una cuenta en AliPay también es inmediato. A diferencia de Paypal, en este caso sólo se admiten tarjetas como origen de los fondos. &lt;/div&gt;
&lt;br /&gt;
&lt;h3&gt;
Tarjetas de crédito&lt;/h3&gt;
Otro medio de pago que se puede utilizar son las tarjetas de crédito (o débito).&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJs6iat02xJ0jShWD9Pp8PG8v4mZXl3VIkESH5Y_17JH3ins890oFue0Y6YdoP86lYcRWX7Bl6lb3c1z8RkSk7uGNwKw7H50N3RAbLWa2c2mJw53EiOFSPJfb1RLdNrt8jVQw9U75NaZY/s640/blogger-image--746571910.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="226" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJs6iat02xJ0jShWD9Pp8PG8v4mZXl3VIkESH5Y_17JH3ins890oFue0Y6YdoP86lYcRWX7Bl6lb3c1z8RkSk7uGNwKw7H50N3RAbLWa2c2mJw53EiOFSPJfb1RLdNrt8jVQw9U75NaZY/s400/blogger-image--746571910.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both;"&gt;
Evidentemente, esta forma de pagar es más "peligrosa" porque ya no hay un intermediario entre el cliente y el vendedor, sino que damos directamente nuestros datos (número de cuenta, fecha de caducidad, código de verificación) a alguien del que muchas veces no conocemos mucho. Es cierto que los emisores de tarjetas como Visa y Mastercard tienen ciertos mecanismos de protección frente al fraude, pero yo no recomiendo para nada este tipo de pago. Siempre que sea posible, hay que elegir una tienda que admita pagos por Paypal o bien por AliPay.&lt;/div&gt;
&lt;h2&gt;
&lt;/h2&gt;
&lt;h2&gt;
Plataformas de compra&lt;/h2&gt;
&lt;div style="text-align: justify;"&gt;
A continuación voy a hablar brevemente sobre dónde podemos hacer nuestras compras tecnológicas. Voy a distinguir entre plataformas de compra y tiendas.&lt;/div&gt;
&lt;br /&gt;
Este primer caso, el de las plataformas, sigue siempre el mismo esquema:&lt;br /&gt;
&lt;ul&gt;
&lt;li style="text-align: justify;"&gt;Por un lado está el vendedor, que puede ser o bien una tienda física que quiere vender también online, o bien una tienda puramente online, o incluso un particular que quiera vender algo.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;Por otro lado está el dueño de la plataforma, que se encarga de poner su infraestructura: un escaparate virtual, unas herramientas de búsqueda, una gestión de cuentas de clientes, una gestión de tiendas para que el vendedor exponga sus artículos, unos accesos a las pasarelas de pagos, etc. El dueño de la plataforma normalmente cobrará al vendedor una comisión por cada venta que realice, en función de muchos criterios: tipo de artículo, volumen de ventas, etc.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;Finalmente tenemos al cliente que somos nosotros. Para accede a la plaraforma de compra necesitaremos registrarnos y podremos hacer un seguimiento de lo que hemos comprado, su estado, la posibilidad de reclamar al vendedor, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="text-align: justify;"&gt;
Lo que hay que saber es diferenciar entre la plataforma, que no vende nada, y el vendedor que puede ser uno u otro para un mismo artículo que busquemos. &lt;/div&gt;
&lt;h3&gt;
eBay&lt;/h3&gt;
&lt;div style="text-align: justify;"&gt;
eBay fue la primera plataforma internacional de compras online y todavía hoy sigue siendo de las más importantes y conocidas.&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOsaCj18Dod_xw2rI_aqQVsDXWoPwH0shP29R8ZRBarKkS7SYD7ftaD2ZFD5iK-tjMqDkK9gOwCXBfzIIQMEsrIKc8iH_iTRt5pPY8rBFY-K-IOpYEh526x4BcIg2bV_7vWTIpWximWeQ/s640/blogger-image--289081587.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="175" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOsaCj18Dod_xw2rI_aqQVsDXWoPwH0shP29R8ZRBarKkS7SYD7ftaD2ZFD5iK-tjMqDkK9gOwCXBfzIIQMEsrIKc8iH_iTRt5pPY8rBFY-K-IOpYEh526x4BcIg2bV_7vWTIpWximWeQ/s400/blogger-image--289081587.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both;"&gt;
eBay se dio a conocer principalmente por las "subastas", que es una forma de compra en la que el artículo no tiene un precio fijo y son los clientes los que pujan hasta la cantidad que están dispuestos a pagar. Aunque son algo muy interesante, ya veces puedes encontrar algún chollo, no es el mejor método para comprar.&lt;/div&gt;
&lt;div class="separator" style="clear: both;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both;"&gt;
Cuando quieres comprar un artículo tecnológico en eBay, lo primero es saber lo que buscas. Una vez que has localizado un artículo que tiene un precio que te parece bueno, hay que fijarse en los datos concretos del vendedor.Vamos a mirar tres datos fundamentales que nos van a permitir decidir si comprar o no:&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Nº de ventas&lt;/b&gt;.&lt;br /&gt;&lt;div style="text-align: justify;"&gt;
En la ficha del artículo podemos ver el número de unidades que el vendedor ha vendido de este artículo. Si se trata de un artículo que acaba de salir al mercado, es normal que haya pocas ventas, pero si se trata de algo que no es nuevo, desconfía de los vendedores que tienen un precio superestupendo pero casi ninguna venta. Por algo será. Es como cuando pasas por la calle y ves un bar con unos precios estupendos pero todas las mesas están vacías... ¿entrarías?&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Puntuación del vendedor&lt;/b&gt;.&lt;br /&gt;&lt;div style="text-align: justify;"&gt;
La puntuación del vendedor la ponen los clientes, y éstos pueden votar de forma positiva o bien negativa. En base a esto, un vendedor tendrá mejor puntuación cuanto más contentos hayan quedados sus clientes. Podemos leer también los comentarios concretos que ha dejado la gente al votar, lo que nos puede aclarar muchas cosas.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Antigüedad&lt;/b&gt;.&lt;br /&gt;&lt;div style="text-align: justify;"&gt;
Finalmente, y relacionado con los dos puntos anteriores, tenemos la antigüedad del vendedor. No es lo mismo comprar en un vendedor que abrió la tienda hace 7 años que en uno que la acaba de abrir este mes. Hay muchos casos de tiendas que abren venden unos cuantos de artículos con una calidad muy mala y a los tres meses cierran y se acabó el negocio.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="text-align: justify;"&gt;
Lógicamente, deberemos sopesar otras cosas, como el medio de pago (Paypal preferentemente), la forma de envío, si es gratuíto o no, si lleva número de seguimiento o no, etc. Una vez realizada la compra ya sólo nos queda esperar y realizar el seguimiento si es posible.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
eBay nos aporta la posibilidad de establecer comunicación con el vendedor y de abrir una disputa en caso de que algo vaya mal, como que el artículo no llegue, o llegue estropeado, o bien se trate de una estafa. El plazo para abrir disputa es de 45 días a partir de la fecha de compra, así que tenemos que estar pendiente. Si el artículo no ha llegado en 45 días, abrir disputa por si acaso. Después la disputa se puede elevar en reclamación para que se nos devuelva el dinero si no hay acuerdo.&lt;/div&gt;
&lt;h3&gt;
Aliexpress&lt;/h3&gt;
Aliexpress es una plataforma de compra del grupo Alibaba. Sus vendedores son en su mayor parte de China y de Hong Kong.&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLPRmMJ5uETJaSbIzfz6oa2sasczrAnZ1W8t0VbLsFWFrCSawt4RD5ZuX7wmGIZuLOduO-Pptn9fs-QgM80m4Qp6G5rzKqIcxKbXi4MXX6l_-Yl4Tj7r1w2Y0vAHCsheIw0jwukIOtp6k/s640/blogger-image-739029852.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="97" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLPRmMJ5uETJaSbIzfz6oa2sasczrAnZ1W8t0VbLsFWFrCSawt4RD5ZuX7wmGIZuLOduO-Pptn9fs-QgM80m4Qp6G5rzKqIcxKbXi4MXX6l_-Yl4Tj7r1w2Y0vAHCsheIw0jwukIOtp6k/s400/blogger-image-739029852.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Inicialmente, de cara a occidente sólo,existía la plataforma alibaba.com, que estaba destinada sobre todo a los importadores occidentales que quisieran revender productos chinos, comprándolos en grandes lotes. Al cabo de un tiempo comprendieron que había mucho más negocio si vendías al pormenor, a importadores particulares en lugar de a empresas. Y así surgió Aliexpress.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Aliexpress es una plataforma gigante semejante a eBay, pero sin subastas. En ella puedes encontrar cualquier producto que se fabrique en China, de todo tipo, y su funcionamiento es muy fácil. Aunque a día de hoy, puedes configurar la plataforma para que se vea en español y los precios en euros, yo os recomiendo todo lo contrario: ponerla en inglés y los precios en dólares. Así nos ahorraremos dolores de cabeza al intentar entender la pintoresca traducción automática, y no nos llevaremos a engaños con el cambio de moneda, ya que internamente la plataforma siempre nos cobrará en dólares y será tu banco el que te haga el cambio.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Una vez que realizamos la búsqueda, podemos ordenarla por varios criterios, y aquí os hago las mismas recomendaciones que en eBay. Podemos ordenar los resultados por precio, pero yo os aconsejo hacerlo mejor por número de pedidos o por la puntuación del vendedor (seller rating). También podríamos ordenar por precio pero deberemos ver si el vendedor tiene buena reputación y si ha vendido muchas unidades del artículo.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Dentro de la ficha de un artículo podemos comprobar la puntuación del vendedor y consultar los comentarios de los usuarios. Los comentarios son muy relativos porque hay gente muy exigente o con pocos conocimientos, y también hay gente que se conforma con cualquier cosa, es muy relativo. Lo que más ayuda son las fotos o vídeos en los comentarios de manera que podamos comprobar la calidad o veracidad del producto.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Otra recomendación es usar siempre que sea posible la aplicación móvil en vez del navegador de escritorio. Hay aplicación móvil para Android, iPhone y iPad, y hay muchos artículos que tienen un precio más bajo cuando se compra desde ella.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Para pagar el artículo, podemos hacerlo por tarjeta de crédito/débito o bien por Alipay. En cualquiera de los casos, Aliexpress nos cobra a nosotros pero no le paga al vendedor hasta que se dé por conforme la recepción. Hay un perïodo de protección establecido por cada artículo, y al terminar éste si el cliente no ha dicho nada, se le paga automáticamente al proveedor. Aliexpress nos mandará un correo electrónico unos días antes de que esto ocurra para que nos dé tiempo de solicitar al proveedor que nos extienda el período de protección, a lo que éste accederá normalmente.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Dentro del período de protección podemos abrir una disputa para que el vendedor responda ante una incidencia. Además, cada vendedor puede añadir protecciones adicionales, como por ejemplo que nos devuelva el dinero íntegro en caso de que el artículo no llegue en 60 días, o que nos mande otro artículo en caso de que llegue defectuoso.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Normalmente, los vendedores enviarán el pedido por correo aéreo registrado, con número de seguimiento, y de forma gratuíta. También hay otras formas de envío, incluyendo el envío por correo ordinario o por mensajería. En los dos primeros casos el envío es bastante lento, y las compañías utilizadas suelen ser China Post, Hong Kong Post, Singapore Post, PostNL o Deutsche Post. Todas ellas nos llegarán por Correos, con muy baja probabilidad de tener que pagar en aduanas. Por otro lado, el envío por mensajería es rápido pero caro. Nos llega principalmente por DHL o UPS y tiene alta probabilidad de parar en aduanas.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Una vez que nos llegue el producto, tendremos la oportunidad de marcar el pedido como entregado y dejar comentarios positivos o negativos. Os recomiendo no pulsar el botón en cuanto nos llegue, sino comprobar antes si realmente el artículo funciona bien. En caso contrario, no podremos abrir una disputa.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Yo he comprado muchísimo en esta plataforma a numerosos vendedores y hasta ahora no he tenido ningún problema. Es verdad que alguna vez ha llegado algún artículo mal pero o bien el vendedor o bien Aliexpress han dado la cara. Muy importante sobre todo no dejar que se pase el período de protección.&lt;/div&gt;
&lt;h3&gt;
Taobao&lt;/h3&gt;
&lt;div style="text-align: justify;"&gt;
Si Aliexpress es la plataforma china para occidente, Taobao (y más recientemente Tmall) está considerada como el (gigante) eBay de China.
&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMqBdLFyXSZchiuFCh6yAALPuSdRgRv8K7d9QT6FPxLaUfPZipYy8z-I66AJvdlmIw0hXe182mV5urhAXDJzuu0T9wxSCv2t-8s8FTxoQGsRNIh6HFeZB88_qpOzRi4Zrx-q12NRp2lPg/s640/blogger-image--565086357.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="181" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMqBdLFyXSZchiuFCh6yAALPuSdRgRv8K7d9QT6FPxLaUfPZipYy8z-I66AJvdlmIw0hXe182mV5urhAXDJzuu0T9wxSCv2t-8s8FTxoQGsRNIh6HFeZB88_qpOzRi4Zrx-q12NRp2lPg/s400/blogger-image--565086357.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Se trata de otra plataforma del grupo Alibaba donde infinidad de vendedores ofrecen millones de productos a los compradores chinos, con unos precios mucho más bajos que los que ofrecen al mercado exterior. Su funcionamiento es muy semejante a Aliexpress, con las siguientes salvedades:&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;El único idioma utilizado es el chino.&lt;/li&gt;
&lt;li&gt;Sólo se admite el envío a direcciones físicas de China.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="text-align: justify;"&gt;
Por tanto, si sabes chino y vives allí está muy bien, pero de lo contrario...&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Bueno, pues de lo contrario tienes la posibilidad de usar un "agente taobao". Se trata de intermediarios que tienen su negocio en China y admiten pedidos del extranjero. Ellos se encargan de comprar el artículo en Taobao y cuando lo reciben te lo mandan a tí, a cambio de una módica comisión. Después depende de la forma de envío que tengas que pagar aduanas y demás. Los mejores agentes incluyen la posibilidad de pagar con Paypal y la traducción automática a la hora de hacer búsquedas y obtener resultados.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Os pongo algunos de los agentes más conocidos:&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;taobao.es&lt;/li&gt;
&lt;li&gt;yoybuy.com&lt;/li&gt;
&lt;li&gt;budybuy.com&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="text-align: justify;"&gt;
Que conste que yo nunca he usado este método. Es verdad que es mucho más barato, pero si le sumas los gastos de envío, la comisión del agente y demás, ya no estoy tan seguro de que merezca la pena. &lt;/div&gt;
&lt;h2&gt;
Tiendas especializadas&lt;/h2&gt;
&lt;div style="text-align: justify;"&gt;
Para terminar, os pongo una pequeña reseña de algunas tiendas verificadas y moderadamente fiables, donde yo he comprado y normalmente no he tenido problemas. Ojo: no me hago responsable si os dan algún problema, simplemente digo que &lt;u&gt;yo&lt;/u&gt; no los he tenido.&lt;/div&gt;
&lt;ul&gt;
&lt;li style="text-align: justify;"&gt;
&lt;a href="http://www.dx.com/" target="_blank"&gt;&lt;u&gt;DealExtreme&lt;/u&gt;&lt;/a&gt;.&lt;br /&gt;Esta fue la primera tienda china en la que compré. Tienen todo tipo de artículos de electrónica y sus precios suelen ser competitivos. No aconsejada para móviles ni tablets porque tienen poca variedad.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;
&lt;a href="http://www.lightinthebox.com/" target="_blank"&gt;&lt;u&gt;Lightinthebox&lt;/u&gt;&lt;/a&gt;.&lt;br /&gt;Aconsejable para bombillas. Ojo porque aunque tienen mucha variedad, las especificaciones en cuanto a lúmenes son cosa de ciencia ficción.&lt;br /&gt;En cuanto a resolución de problemas funcionan muy bien.&lt;br /&gt; &lt;/li&gt;
&lt;li style="text-align: justify;"&gt;
&lt;a href="http://www.banggood.com/" target="_blank"&gt;&lt;u&gt;Banggood&lt;/u&gt;&lt;/a&gt;.&lt;br /&gt;Esta tienda para mi gusto es la que mejor realiza los envíos y mejor soporte tienen. Tienen gran variedad de artículos electrónicos, aunque lo más interesante son las ofertas puntuales, porque normalmente en aliexpress encontraremos mejores precios. Venden pocos móviles pero cuando tienen uno en oferta son casi insuperables.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;
&lt;a href="http://www.pandawill.com/" target="_blank"&gt;&lt;u&gt;Pandawill&lt;/u&gt;&lt;/a&gt;.&lt;br /&gt;Tienda especializada en móviles y tablets. Creo que es en la que más he comprado, seguida de Antelife. Tienen buenos precios y un catálogo grandísimo. Lo más interesante es su "Happy Hour", ofertas diarias en las que puedes conseguir un móvil rebajado.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;
&lt;a href="http://www.antelife.com/" target="_blank"&gt;&lt;u&gt;Antelife&lt;/u&gt;&lt;/a&gt;.&lt;br /&gt;Otro clásico para móviles y tablets. Sus precios son iguales o ligeramente inferiores a los de Pandawill, y cada semana tienen ofertas limitadas. El soporte bastante bueno.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;Otras tiendas especializadas.&lt;br /&gt;Pongo aquí otra lista de tiendas en las que no tengo tanta experiencia. No me hago responsable de su funcionamiento:&lt;/li&gt;
&lt;ul style="text-align: justify;"&gt;
&lt;li&gt;&lt;a href="http://www.gearbest.com/" target="_blank"&gt;Gearbest&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.geekbuying.com/" target="_blank"&gt;Geekbuying&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.1949deal.com/" target="_blank"&gt;1949deal&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.geekvida.es/" target="_blank"&gt;Geekvida&lt;/a&gt; (con almacén en España). &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.tinydeal.com/" target="_blank"&gt;Tinydeal&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;h2&gt;
Conclusión&lt;/h2&gt;
&lt;div style="text-align: justify;"&gt;
Bueno, pues esto ha sido todo por hoy, al final me he pasado escribiendo.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Espero que a alguien le sirva para tener cabeza y saber lo que hace si tiene el gusanillo de lanzarse a la aventura del comercio chino.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Ahora os toca a vosotros: espero vuestros comentarios y no dudéis en preguntar y matizar todo lo que se os pase por la cabeza.&lt;/div&gt;
&lt;br /&gt;
Gracias.</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxhHxfPFFMrSHhv_f5OoBJqQdoZ4ZGWJIB6vJaHPm86iP_a3s9vFIaT_S7Z49U7tD3lAMFnubw_hKdd3PYYTj8WQpC8j6WdzlJr82meisGa27vF8lvOcyR0YC9Eh26El70lx25OMHgH7g/s72-c/blogger-image-1094456934.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></item><item><title>Componentes (6): Display LCD 16x02</title><link>http://nanolec.blogspot.com/2015/11/componentes-display-lcd-16x02.html</link><category>arduino</category><category>componentes</category><category>electrónica</category><author>noreply@blogger.com (Isidoro Aguilar Baeza)</author><pubDate>Mon, 23 Nov 2015 20:13:00 +0100</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-155451023305910224.post-7961776550844747040</guid><description>&lt;div style="text-align: justify;"&gt;
El dispositivo que estudiamos hoy es muy útil porque nos puede permitir ver qué es lo que ocurre dentro de nuestro Arduino.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghWBOFrwRNaFpwyVWsddy2iroFbhvqrbYa_Vm-9naXAw9UQbmu4IKk_-m1qeBadU7wiqL-I11qdLv98EjUgXJpNofVXJQGE0dV8tgmVw0DvsNcalsChAe31foOMHZVk2ON-dmXldwrWGY/s1600/IMG_20151117_211505_1447791386983.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="202" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghWBOFrwRNaFpwyVWsddy2iroFbhvqrbYa_Vm-9naXAw9UQbmu4IKk_-m1qeBadU7wiqL-I11qdLv98EjUgXJpNofVXJQGE0dV8tgmVw0DvsNcalsChAe31foOMHZVk2ON-dmXldwrWGY/s400/IMG_20151117_211505_1447791386983.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Se trata de una pantalla o display LCD bastante utilizado, un estándar utilizado en multitud de aparatos. Hay varias versiones pero nos vamos a centrar en el que nos permite mostrar 2 líneas de texto de 16 caracteres cada una.&lt;br /&gt;
&lt;br /&gt;
Una pantalla &lt;b&gt;LCD &lt;/b&gt;es básicamente una matriz (filas x columnas) de &lt;b&gt;puntos &lt;/b&gt;o &lt;b&gt;píxeles &lt;/b&gt;en un panel de un material (cristal líquido) que tiene unas características que permiten modificar su transparencia aplicándole una corriente eléctrica de la forma adecuada. Normalmente, un panel LCD no emite ninguna luz, sino que se le aplica una &lt;b&gt;luz de fondo&lt;/b&gt; (backlight) por ejemplo a partir de un conjunto de LEDs, y son las propiedades de transparencia u opacidad del material las que hacen que se vea más o menos esta luz de fondo.&lt;br /&gt;
&lt;br /&gt;
Para poder obtener un texto o una imagen del panel LCD, necesitaremos una parte electrónica o controlador que se encargará de traducir lo que queremos representar por una disposición de puntos apagados o encendidos según sea necesario. &lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
El dispositivo del que hablamos hoy tiene un controlador que nos permite representar dos líneas de texto con un máximo de 16 caracteres en cada una. El controlador original (&lt;a href="https://en.wikipedia.org/wiki/Hitachi_HD44780_LCD_controller" target="_blank"&gt;HD44780&lt;/a&gt;) está fabricado por Hitachi, pero de él se han hecho innumerables copias por parte de otros fabricantes.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
Conexiones&lt;/h3&gt;
El controlador HD44780 tiene un conexionado paralelo a base de 16 pines, de los cuales se muestra su función a continuación. Paralelo quiere decir que tanto los datos como los comandos se mandan byte a byte, no como una secuencia de bits.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBVAuaEVNixeYA8GJQrBIakYVLJI80Hh92ec8O4exmmWai5qJgNVVdH9WLedC7x0UvHMvUui1PecVFTkzumfxf83opp2Ti-ojDKDc3_PB2wfaVcmyWg2B-w87DOBoTcnQoaVFVgJejFkU/s1600/LCD.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBVAuaEVNixeYA8GJQrBIakYVLJI80Hh92ec8O4exmmWai5qJgNVVdH9WLedC7x0UvHMvUui1PecVFTkzumfxf83opp2Ti-ojDKDc3_PB2wfaVcmyWg2B-w87DOBoTcnQoaVFVgJejFkU/s320/LCD.jpg" width="151" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ol&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9Rwak6xX_rsrJbaqTaggHl2DbZzwHJnKQX4-jbUkVX9DlSis8XhQKxU2-0HnmK0KzrbKxM-rtzv1cCeLhdrdCqs_C185HwQ4JY6hqzJa6RtU5sxgV4_kdoScvGU_bgcaBNTcFlxAy0oY/s1600/LCD.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;/a&gt;
&lt;li&gt;Tierra.&lt;/li&gt;
&lt;li&gt;VCC. Alimentación entre 3.3V y 5V.&lt;/li&gt;
&lt;li&gt;&amp;nbsp;Ajuste del contraste.&lt;/li&gt;
&lt;li&gt;Register Select (RS). RS=0 para comandos, RS=1 para datos.&lt;/li&gt;
&lt;li&gt;Read / Write (RW). RW=0 para escribir, RW=1 para leer.&lt;/li&gt;
&lt;li&gt;Enable. Puesto a 1 habilita el display, y a 0 lo inhabilita.&lt;/li&gt;
&lt;li&gt;Bit 0.&lt;/li&gt;
&lt;li&gt;Bit 1.&lt;/li&gt;
&lt;li&gt;Bit 2.&lt;/li&gt;
&lt;li&gt;Bit 3.&lt;/li&gt;
&lt;li&gt;Bit 4.&lt;/li&gt;
&lt;li&gt;Bit 5.&lt;/li&gt;
&lt;li&gt;Bit 6.&lt;/li&gt;
&lt;li&gt;Bit 7.&lt;/li&gt;
&lt;li&gt;Positivo de la luz de fondo.&lt;/li&gt;
&lt;li&gt;Negativo de la luz de fondo.&lt;/li&gt;
&lt;/ol&gt;
El dispositivo dispone de un juego de comandos que nos permiten realizar todas las operaciones de escritura y configuración necesaria, como por ejemplo: limpiar la pantalla, posicionar el cursor, escribir caracteres, etc.&lt;br /&gt;
&lt;br /&gt;
De los 8 pines de datos en realidad podemos utilizar sólo los 4 últimos (11 a 14), dado que el dispositivo tiene un modo de funcionamiento en que se mandan los bytes en dos ciclos de escritura.&lt;br /&gt;
&lt;br /&gt;
Aún así, se ve claramente que conectar un display a nuestro Arduino por paralelo es un problema, porque al menos necesitaremos 7 pines de nuestro Arduino (RS, RW, Enable y los 4 bits de datos). Si nuestro montaje ya incorpora otros dispositivos, es muy probable que nos quedemos sin conexiones disponibles, o bien que tengamos que utilizar un Arduino Mega.&lt;br /&gt;
&lt;br /&gt;
De todos modos, si queréis utilizar así el display, lo podéis hacer perfectamente. Para ello, el IDE de Arduino incorpora de serie la librería &lt;a href="https://www.arduino.cc/en/Reference/LiquidCrystal" target="_blank"&gt;LiquidCrystal&lt;/a&gt;, con lo cual no tenemos que descargar nada adicional. &lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
Adaptador serie&lt;/h3&gt;
Otra posibilidad es la de utilizar un adaptador serie que nos permita controlar el display mediante el protocolo I2C.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnSKUiySOLJv-6eibTtcFin8CpKvVnrlS4vWaT7kqJg1ZL9A_swx1OXkTe2V1M-Y1t_YiYd_tVTKwYs9Eb6HAd0ImxMMyrP2PRWPSkG1tNGb0XPg48rU9yoh4X0esenZxfq2QBzvkbn9c/s1600/IMG_20151123_181357.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="160" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnSKUiySOLJv-6eibTtcFin8CpKvVnrlS4vWaT7kqJg1ZL9A_swx1OXkTe2V1M-Y1t_YiYd_tVTKwYs9Eb6HAd0ImxMMyrP2PRWPSkG1tNGb0XPg48rU9yoh4X0esenZxfq2QBzvkbn9c/s400/IMG_20151123_181357.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Este interfaz nos permite controlar un display nada más que con 2 pines (aparte de GND y VCC, claro). Como se puede ver en la imagen, el dispositivo tiene por una cara una hilera de pines que se conecta directamente al bus de 16 pines del HD44780, y por la otra cara tiene 4 pines:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;GND.&lt;/li&gt;
&lt;li&gt;VCC.&lt;/li&gt;
&lt;li&gt;SDA.&lt;/li&gt;
&lt;li&gt;SCL.&lt;/li&gt;
&lt;/ol&gt;
Los dos primeros son para la alimentación, y los otros dos forman parte del protocolo I2C. Además, en la misma cara tenemos un regulador que nos permite graduar la intensidad de la iluminación del display.&lt;br /&gt;
&lt;br /&gt;
El &lt;a href="https://es.wikipedia.org/wiki/I%C2%B2C" target="_blank"&gt;bus I2C&lt;/a&gt; (Inter-Integrated Circuits) es un bus de comunicaciones que nos permite interconectar circuitos integrados mediante un protocolo serie. Este protocolo utiliza la línea SDA para transferir datos y la línea SCL para la señal de reloj.&lt;br /&gt;
&lt;br /&gt;
Como ya se dijo en &lt;a href="http://nanolec.blogspot.com.es/2015/09/componentes-arduino-uno-y-pro-mini.html" target="_blank"&gt;el artículo sobre Arduino&lt;/a&gt;, hay ciertos puertos que tienen un propósito específico, y este es el caso para el bus I2C. Para conectar el interfaz al Arduino, necesitaremos utilizar forzosamente los puertos A4 y A5 del Arduino a los pines SDA y SCL respectivamente.&lt;br /&gt;
&lt;br /&gt;
Además, si queremos utilizar esta configuración, tendremos que utilizar las siguientes librerías:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Wire (incluído en el IDE de Arduino).&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/Home#!usage" target="_blank"&gt;LiquidCrystal_I2C&lt;/a&gt; (fmalpartida).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
Precios&lt;/h3&gt;
Si queremos utilizar el display tal cual, sólo con el controlador paralelo, podemos comprarlo en Aliexpress por 1,44$ en &lt;a href="http://www.aliexpress.com/item/Freeshipping-LCD1602-LCD-monitor-1602-5V-blue-screen-and-white-code-for-ARDUINO/32412091753.html?spm=2114.01020208.3.1.RQjpcF&amp;amp;ws_ab_test=searchweb201556_9_79_78_77_80,searchweb201644_5,searchweb201560_6" target="_blank"&gt;este enlace&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Por otra parte, pagando un poquito más os lo podéis comprar con el interfaz I2C incluido por 2,12$ en &lt;a href="http://www.aliexpress.com/item/1602-16x2-HD44780-Character-LCD-w-IIC-I2C-1602-Serial-Interface-Adapter-Module/2042039421.html" target="_blank"&gt;este otro enlace&lt;/a&gt; (que es el que yo compré).&lt;/div&gt;
</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghWBOFrwRNaFpwyVWsddy2iroFbhvqrbYa_Vm-9naXAw9UQbmu4IKk_-m1qeBadU7wiqL-I11qdLv98EjUgXJpNofVXJQGE0dV8tgmVw0DvsNcalsChAe31foOMHZVk2ON-dmXldwrWGY/s72-c/IMG_20151117_211505_1447791386983.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Componentes (5): Sensores de temperatura</title><link>http://nanolec.blogspot.com/2015/11/componentes-sensores-de-temperatura.html</link><category>arduino</category><category>componentes</category><category>electrónica</category><author>noreply@blogger.com (Isidoro Aguilar Baeza)</author><pubDate>Tue, 17 Nov 2015 21:02:00 +0100</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-155451023305910224.post-2008425913203034959</guid><description>&lt;div style="text-align: justify;"&gt;
Una de las primeras cosas que se nos viene a la cabeza cuando queremos hacer nuestro primer montaje con un Arduino es medir la temperatura...&lt;/div&gt;
&lt;ul class="parrafo-color"&gt;
&lt;li&gt;Me he comprado un Arduino...&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;¿Y para qué? &lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Pues.... quiero hacer un termómetro.&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;¿Y no tienes un termómetro en casa? &lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;Ya, pero.....&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="text-align: justify;"&gt;
Bueno, vale, es verdad, lo de las estaciones meteorológicas no es ningún invento nuevo, pero... mola más cuando lo haces tú mismo. Además, es mucho menos limitado, podemos hacer muchas cosas: termómetros conectados a internet, una red de termómetros repartidos por todas partes, conexión con LCD's, mostrar las máxima y mínimas diarias, calcular las tendencias....&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Vamos a ver dos tipos de componentes que nos permiten medir la temperatura en nuestros montajes. &lt;/div&gt;
&lt;br /&gt;
&lt;h2&gt;
DHT11 / DHT22&lt;/h2&gt;
&lt;div style="text-align: justify;"&gt;
Estos componentes de DFRobot son de los más conocidos a la hora de medir temperatura, por su bajo coste y también por ser de los más fáciles de utilizar. Además de la temperatura, también miden la humedad.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Existen dos versiones, cada una con una precisión distinta:&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;DHT11&lt;/b&gt;.&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_yN0Qxpb-ggRkJiPsVN2-wYb4RY6_GALu7rGoufEolXQV3snCoQx4QU42_qQ6Icc0c73xLQWtUgKaYGt6WpkRKu49Gct1V4wMe5UzfEqg8hixJbuACdHXNqlUoAflKeRL5fzQKGtH5_M/s1600/dht11.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="90" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_yN0Qxpb-ggRkJiPsVN2-wYb4RY6_GALu7rGoufEolXQV3snCoQx4QU42_qQ6Icc0c73xLQWtUgKaYGt6WpkRKu49Gct1V4wMe5UzfEqg8hixJbuACdHXNqlUoAflKeRL5fzQKGtH5_M/s320/dht11.jpg" width="90" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Mide la temperatura y la humedad en grados enteros (o puntos porcentuales en caso de la humedad). Su rango de temperatura va entre 0ºC y 50ºC, con una precisión de 2ºC, y el de la humedad va entre 20% y 80%, con una precisión del 5%.&lt;/div&gt;
&lt;/li&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;li&gt;&lt;b&gt;DHT22&lt;/b&gt;.&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwyDUN9WtUi77IBbS31YHPpMovGyto-y2dmoiHS489xaBPNh1s3TC2eIuA3sTHBJEgu8m5uXldHN9YdNZr5dMedvYHz8x-KWNg9-7dJVcvj2RWy4i7HbCdDRk6XU8b-sTWXsCbJoi4R2M/s1600/dht22.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="90" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwyDUN9WtUi77IBbS31YHPpMovGyto-y2dmoiHS489xaBPNh1s3TC2eIuA3sTHBJEgu8m5uXldHN9YdNZr5dMedvYHz8x-KWNg9-7dJVcvj2RWy4i7HbCdDRk6XU8b-sTWXsCbJoi4R2M/s320/dht22.jpg" width="90" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Mide la temperatura y la humedad en décimas de grado (o décimas porcentuales), y sus rangos admisibles son de -40ºC a 125ºC con una precisión de 0.5ºC y de 0% a 100% de humedad con una precisión de 2-5%.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="text-align: justify;"&gt;
Básicamente su comportamiento es idéntico, salvo las diferencias de precisión indicadas. El DHT11 está empaquetado normalmente en color azul mientras que el DHT22, algo más grande y caro, está empaquetado en blanco.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;
&lt;h3&gt;
Funcionamiento&lt;/h3&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Su funcionamiento es muy sencillo: tienen cuatro patillas, de las cuales conectaremos sólo tres. Si miramos el componente tal como se muestran en las fotos, las conexiones son las siguientes:&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;ol style="text-align: justify;"&gt;
&lt;li&gt;Alimentación. Requieren&amp;nbsp; de un voltaje de entre 3 y 5V.&lt;/li&gt;
&lt;li&gt;Salida. Este pin es el que nos proporciona la medida. La señal que proporciona &lt;u&gt;no es analógica,&lt;/u&gt; sino &lt;b&gt;digital&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;No conectado.&lt;/li&gt;
&lt;li&gt;Masa. Este pin irá conectado a GND.&lt;/li&gt;
&lt;/ol&gt;
&lt;div style="text-align: justify;"&gt;
Para utilizarlo con Arduino, podemos usar una de las muchas librerías que existen, pero yo recomiendo la de Adafruit:&lt;/div&gt;
&lt;br /&gt;
&lt;a href="https://github.com/adafruit/DHT-sensor-library"&gt;https://github.com/adafruit/DHT-sensor-library&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Es importante remarcar la velocidad a la que podemos leer los datos. En el caso del DHT11 podemos leerla como máximo una vez por segundo (1Hz), mientras que en el caso del DHT22 podremos leer como mucho una vez cada dos segundos (0,5Hz).&lt;br /&gt;
&lt;br /&gt;
Para más información y para ver ejemplos de código, os recomiendo &lt;a href="https://learn.adafruit.com/dht/connecting-to-a-dhtxx-sensor" target="_blank"&gt;esta página de adafruit&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
Precios&lt;/h3&gt;
Si ya habéis leido otras entradas del blog sabréis mi afición por las compras orientales. Pues bien, aquí van algunos enlaces de Aliexpress donde podéis comprar estos componentes:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.aliexpress.com/item/1pcs-DHT11-Digital-Temperature-and-Humidity-Sensor-IN-STOCK/917193337.html?spm=2114.01020208.3.11.aYtyBl&amp;amp;ws_ab_test=searchweb201556_9_79_78_77_80,searchweb201644_5,searchweb201560_9" target="_blank"&gt;DHT11&lt;/a&gt;: este sale muy barato. En el enlace está a 0.73$ (unos 0.70€).&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.aliexpress.com/item/1pcs-DHT22-digital-temperature-and-humidity-sensor-Temperature-and-humidity-module-AM2302-replace-SHT11-SHT15/1956275791.html" target="_blank"&gt;DHT22&lt;/a&gt;: este es el que yo tengo, sale un poco más caro pero nada del otro mundo. 2.50$ (unos 2.38€).&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;h2&gt;
Dallas DS18B20&lt;/h2&gt;
&lt;div style="text-align: justify;"&gt;
Este es otro sensor muy conocido. Lo fabrica Dallas Semiconductors y sólo mide la temperatura, no la humedad.&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh512yYU-oX3K19Gw1AIrBlJznOPvK3UcBvaMRg9st5zJN5LMottSog_Hb4EtX5y1PcbUm21Gs6Sl0Y7SBnhi1REpSnabqnQQuOR9FmY6PR8m4gjhlef-GkTWbMtbtQmjethpX01BVFgBo/s1600/DS18B20.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="271" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh512yYU-oX3K19Gw1AIrBlJznOPvK3UcBvaMRg9st5zJN5LMottSog_Hb4EtX5y1PcbUm21Gs6Sl0Y7SBnhi1REpSnabqnQQuOR9FmY6PR8m4gjhlef-GkTWbMtbtQmjethpX01BVFgBo/s320/DS18B20.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
La precisión y el rango de temperaturas son muy similares a los del DHT22: entre -55ºC y +125ºC y precisión de 0.5ºC, y existen muchas formas de empaquetado: en forma de transistor, en forma de integrado para zócalo, impermeable para exterior, etc.&lt;/div&gt;
&lt;br /&gt;
&lt;h3&gt;
Funcionamiento&lt;/h3&gt;
&lt;div style="text-align: justify;"&gt;
La característica más destacable de este sensor es que se comunica por medio un bus denominado "&lt;b&gt;1 Wire&lt;/b&gt;", que utiliza un sólo cable (más la masa) tanto para leer los datos como para alimentarse. En un mismo bus "1 Wire" puede haber multitud de sensores conectados (de este o de otro tipo). A la hora de leerlos, se diferencian unos de otros en que cada uno de ellos tiene una dirección física de 64 bits distinta, parecido a las MAC que utilizan las tarjetas de red.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
De las tres patillas que tiene el sensor de la imagen, el conexionado es el siguiente, de izquierda a derecha:&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;GND.&lt;/li&gt;
&lt;li&gt;Entrada / salida digital de datos.&lt;/li&gt;
&lt;li&gt;Vdd. Alimentación opcional a 5V. &lt;/li&gt;
&lt;/ol&gt;
&lt;div style="text-align: justify;"&gt;
Existen dos modos de funcionamiento:&lt;/div&gt;
&lt;ul style="text-align: justify;"&gt;
&lt;li&gt;&lt;u&gt;Modo alimentado&lt;/u&gt;.&lt;br /&gt;En este modo se utilizan los 3 pines del sensor. Alimentaremos a 5V por medio del pin 3 y conectaremos el 2 a una entrada digital, con una resistencia de "pull-up" entre los pines 2 y 3. Esta resistencia en principio puede ser de cualquier valor alto, pero os recomiendo encarecidamente que utilicéis una de 4.7KΩ. A mi sólo me ha funcionado así.&lt;/li&gt;
&lt;li&gt;&lt;u&gt;Modo parasitario&lt;/u&gt;.&lt;br /&gt;En este modo tan sólo se utilizan dos pines, el 1 y el 2, mientras que el 3 lo conectamos a tierra junto con el 1. El sensor "tomará prestada" la alimentación del bus de datos acumulando energía por medio de un condensador interno. Para que funcione bien, tenemos que utilizar de nuevo la resistencia de 4.7KΩ entre +5V y el pin de datos. La diferencia, es que a los sensores sólo mandamos dichos dos pines. En el siguiente esquema se puede ver mejor lo que digo:&lt;br /&gt;&lt;br /&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbf3mPgn-LlDcXIAVCqfr8aA7LpqZKhHXkRjmy2x8dRhdRyjqKl7IeK1JWEqlUaEdRw158LMzgdEX4w0WhXIZcZL0H03iIwe6xAz4D2D668G98BWO7TPl0vL5LzQA_LLw5jDWizS9dkys/s1600/ds18b20-parasite-power.jpg" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="144" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbf3mPgn-LlDcXIAVCqfr8aA7LpqZKhHXkRjmy2x8dRhdRyjqKl7IeK1JWEqlUaEdRw158LMzgdEX4w0WhXIZcZL0H03iIwe6xAz4D2D668G98BWO7TPl0vL5LzQA_LLw5jDWizS9dkys/s320/ds18b20-parasite-power.jpg" width="320" /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
A la hora de conectarlo a un Arduino, el pin de datos lo conectaremos a cualquier entrada/salida digital, al igual que los sensores DHT.&lt;br /&gt;
&lt;br /&gt;
En cuanto a las librerías que tendremos que usar, utilizaremos estas dos:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.pjrc.com/teensy/arduino_libraries/OneWire.zip" target="_blank"&gt;OneWire&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://milesburton.com/Dallas_Temperature_Control_Library" target="_blank"&gt;DallasTemperature&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;span id="goog_1139488389"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;h3&gt;
Precios&lt;/h3&gt;
&lt;div style="text-align: justify;"&gt;
Este sensor es más barato que el anterior.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Yo lo compré en Aliexpress y &lt;a href="http://www.aliexpress.com/item/Free-Shipping-10PCS-DS18B20-TO92-Sensor-18B20-TO-92-Digital-Thermometer/514174063.html" target="_blank"&gt;aquí tenéis el enlace&lt;/a&gt;.&amp;nbsp; Me salieron a 0,53€ cada uno, comprándolo en un paquete de 10.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Y eso es todo por hoy. Hay más sensores de temperatura, pero creo que con estos cubrimos el expediente de momento.&lt;/div&gt;
</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_yN0Qxpb-ggRkJiPsVN2-wYb4RY6_GALu7rGoufEolXQV3snCoQx4QU42_qQ6Icc0c73xLQWtUgKaYGt6WpkRKu49Gct1V4wMe5UzfEqg8hixJbuACdHXNqlUoAflKeRL5fzQKGtH5_M/s72-c/dht11.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><enclosure length="15704" type="application/zip" url="http://www.pjrc.com/teensy/arduino_libraries/OneWire.zip"/><itunes:explicit>no</itunes:explicit><itunes:subtitle>Una de las primeras cosas que se nos viene a la cabeza cuando queremos hacer nuestro primer montaje con un Arduino es medir la temperatura... Me he comprado un Arduino... ¿Y para qué? Pues.... quiero hacer un termómetro. ¿Y no tienes un termómetro en casa? Ya, pero..... Bueno, vale, es verdad, lo de las estaciones meteorológicas no es ningún invento nuevo, pero... mola más cuando lo haces tú mismo. Además, es mucho menos limitado, podemos hacer muchas cosas: termómetros conectados a internet, una red de termómetros repartidos por todas partes, conexión con LCD's, mostrar las máxima y mínimas diarias, calcular las tendencias.... Vamos a ver dos tipos de componentes que nos permiten medir la temperatura en nuestros montajes. DHT11 / DHT22 Estos componentes de DFRobot son de los más conocidos a la hora de medir temperatura, por su bajo coste y también por ser de los más fáciles de utilizar. Además de la temperatura, también miden la humedad. Existen dos versiones, cada una con una precisión distinta: DHT11. Mide la temperatura y la humedad en grados enteros (o puntos porcentuales en caso de la humedad). Su rango de temperatura va entre 0ºC y 50ºC, con una precisión de 2ºC, y el de la humedad va entre 20% y 80%, con una precisión del 5%. DHT22. Mide la temperatura y la humedad en décimas de grado (o décimas porcentuales), y sus rangos admisibles son de -40ºC a 125ºC con una precisión de 0.5ºC y de 0% a 100% de humedad con una precisión de 2-5%. Básicamente su comportamiento es idéntico, salvo las diferencias de precisión indicadas. El DHT11 está empaquetado normalmente en color azul mientras que el DHT22, algo más grande y caro, está empaquetado en blanco. Funcionamiento Su funcionamiento es muy sencillo: tienen cuatro patillas, de las cuales conectaremos sólo tres. Si miramos el componente tal como se muestran en las fotos, las conexiones son las siguientes: Alimentación. Requieren&amp;nbsp; de un voltaje de entre 3 y 5V. Salida. Este pin es el que nos proporciona la medida. La señal que proporciona no es analógica, sino digital. No conectado. Masa. Este pin irá conectado a GND. Para utilizarlo con Arduino, podemos usar una de las muchas librerías que existen, pero yo recomiendo la de Adafruit: https://github.com/adafruit/DHT-sensor-library Es importante remarcar la velocidad a la que podemos leer los datos. En el caso del DHT11 podemos leerla como máximo una vez por segundo (1Hz), mientras que en el caso del DHT22 podremos leer como mucho una vez cada dos segundos (0,5Hz). Para más información y para ver ejemplos de código, os recomiendo esta página de adafruit. Precios Si ya habéis leido otras entradas del blog sabréis mi afición por las compras orientales. Pues bien, aquí van algunos enlaces de Aliexpress donde podéis comprar estos componentes: DHT11: este sale muy barato. En el enlace está a 0.73$ (unos 0.70€). DHT22: este es el que yo tengo, sale un poco más caro pero nada del otro mundo. 2.50$ (unos 2.38€). Dallas DS18B20 Este es otro sensor muy conocido. Lo fabrica Dallas Semiconductors y sólo mide la temperatura, no la humedad. La precisión y el rango de temperaturas son muy similares a los del DHT22: entre -55ºC y +125ºC y precisión de 0.5ºC, y existen muchas formas de empaquetado: en forma de transistor, en forma de integrado para zócalo, impermeable para exterior, etc. Funcionamiento La característica más destacable de este sensor es que se comunica por medio un bus denominado "1 Wire", que utiliza un sólo cable (más la masa) tanto para leer los datos como para alimentarse. En un mismo bus "1 Wire" puede haber multitud de sensores conectados (de este o de otro tipo). A la hora de leerlos, se diferencian unos de otros en que cada uno de ellos tiene una dirección física de 64 bits distinta, parecido a las MAC que utilizan las tarjetas de red. De las tres patillas que tiene el sensor de la imagen, el conexionado es el siguiente, de izquierda a derecha: GND. Entrada / salida digital de datos. Vdd. Alimentación opcional a 5V. Existen dos modos de funcionamiento: Modo alimentado. En este modo se utilizan los 3 pines del sensor. Alimentaremos a 5V por medio del pin 3 y conectaremos el 2 a una entrada digital, con una resistencia de "pull-up" entre los pines 2 y 3. Esta resistencia en principio puede ser de cualquier valor alto, pero os recomiendo encarecidamente que utilicéis una de 4.7KΩ. A mi sólo me ha funcionado así. Modo parasitario. En este modo tan sólo se utilizan dos pines, el 1 y el 2, mientras que el 3 lo conectamos a tierra junto con el 1. El sensor "tomará prestada" la alimentación del bus de datos acumulando energía por medio de un condensador interno. Para que funcione bien, tenemos que utilizar de nuevo la resistencia de 4.7KΩ entre +5V y el pin de datos. La diferencia, es que a los sensores sólo mandamos dichos dos pines. En el siguiente esquema se puede ver mejor lo que digo: A la hora de conectarlo a un Arduino, el pin de datos lo conectaremos a cualquier entrada/salida digital, al igual que los sensores DHT. En cuanto a las librerías que tendremos que usar, utilizaremos estas dos: OneWire. DallasTemperature. Precios Este sensor es más barato que el anterior. Yo lo compré en Aliexpress y aquí tenéis el enlace.&amp;nbsp; Me salieron a 0,53€ cada uno, comprándolo en un paquete de 10. Y eso es todo por hoy. Hay más sensores de temperatura, pero creo que con estos cubrimos el expediente de momento.</itunes:subtitle><itunes:author>noreply@blogger.com (Isidoro Aguilar Baeza)</itunes:author><itunes:summary>Una de las primeras cosas que se nos viene a la cabeza cuando queremos hacer nuestro primer montaje con un Arduino es medir la temperatura... Me he comprado un Arduino... ¿Y para qué? Pues.... quiero hacer un termómetro. ¿Y no tienes un termómetro en casa? Ya, pero..... Bueno, vale, es verdad, lo de las estaciones meteorológicas no es ningún invento nuevo, pero... mola más cuando lo haces tú mismo. Además, es mucho menos limitado, podemos hacer muchas cosas: termómetros conectados a internet, una red de termómetros repartidos por todas partes, conexión con LCD's, mostrar las máxima y mínimas diarias, calcular las tendencias.... Vamos a ver dos tipos de componentes que nos permiten medir la temperatura en nuestros montajes. DHT11 / DHT22 Estos componentes de DFRobot son de los más conocidos a la hora de medir temperatura, por su bajo coste y también por ser de los más fáciles de utilizar. Además de la temperatura, también miden la humedad. Existen dos versiones, cada una con una precisión distinta: DHT11. Mide la temperatura y la humedad en grados enteros (o puntos porcentuales en caso de la humedad). Su rango de temperatura va entre 0ºC y 50ºC, con una precisión de 2ºC, y el de la humedad va entre 20% y 80%, con una precisión del 5%. DHT22. Mide la temperatura y la humedad en décimas de grado (o décimas porcentuales), y sus rangos admisibles son de -40ºC a 125ºC con una precisión de 0.5ºC y de 0% a 100% de humedad con una precisión de 2-5%. Básicamente su comportamiento es idéntico, salvo las diferencias de precisión indicadas. El DHT11 está empaquetado normalmente en color azul mientras que el DHT22, algo más grande y caro, está empaquetado en blanco. Funcionamiento Su funcionamiento es muy sencillo: tienen cuatro patillas, de las cuales conectaremos sólo tres. Si miramos el componente tal como se muestran en las fotos, las conexiones son las siguientes: Alimentación. Requieren&amp;nbsp; de un voltaje de entre 3 y 5V. Salida. Este pin es el que nos proporciona la medida. La señal que proporciona no es analógica, sino digital. No conectado. Masa. Este pin irá conectado a GND. Para utilizarlo con Arduino, podemos usar una de las muchas librerías que existen, pero yo recomiendo la de Adafruit: https://github.com/adafruit/DHT-sensor-library Es importante remarcar la velocidad a la que podemos leer los datos. En el caso del DHT11 podemos leerla como máximo una vez por segundo (1Hz), mientras que en el caso del DHT22 podremos leer como mucho una vez cada dos segundos (0,5Hz). Para más información y para ver ejemplos de código, os recomiendo esta página de adafruit. Precios Si ya habéis leido otras entradas del blog sabréis mi afición por las compras orientales. Pues bien, aquí van algunos enlaces de Aliexpress donde podéis comprar estos componentes: DHT11: este sale muy barato. En el enlace está a 0.73$ (unos 0.70€). DHT22: este es el que yo tengo, sale un poco más caro pero nada del otro mundo. 2.50$ (unos 2.38€). Dallas DS18B20 Este es otro sensor muy conocido. Lo fabrica Dallas Semiconductors y sólo mide la temperatura, no la humedad. La precisión y el rango de temperaturas son muy similares a los del DHT22: entre -55ºC y +125ºC y precisión de 0.5ºC, y existen muchas formas de empaquetado: en forma de transistor, en forma de integrado para zócalo, impermeable para exterior, etc. Funcionamiento La característica más destacable de este sensor es que se comunica por medio un bus denominado "1 Wire", que utiliza un sólo cable (más la masa) tanto para leer los datos como para alimentarse. En un mismo bus "1 Wire" puede haber multitud de sensores conectados (de este o de otro tipo). A la hora de leerlos, se diferencian unos de otros en que cada uno de ellos tiene una dirección física de 64 bits distinta, parecido a las MAC que utilizan las tarjetas de red. De las tres patillas que tiene el sensor de la imagen, el conexionado es el siguiente, de izquierda a derecha: GND. Entrada / salida digital de datos. Vdd. Alimentación opcional a 5V. Existen dos modos de funcionamiento: Modo alimentado. En este modo se utilizan los 3 pines del sensor. Alimentaremos a 5V por medio del pin 3 y conectaremos el 2 a una entrada digital, con una resistencia de "pull-up" entre los pines 2 y 3. Esta resistencia en principio puede ser de cualquier valor alto, pero os recomiendo encarecidamente que utilicéis una de 4.7KΩ. A mi sólo me ha funcionado así. Modo parasitario. En este modo tan sólo se utilizan dos pines, el 1 y el 2, mientras que el 3 lo conectamos a tierra junto con el 1. El sensor "tomará prestada" la alimentación del bus de datos acumulando energía por medio de un condensador interno. Para que funcione bien, tenemos que utilizar de nuevo la resistencia de 4.7KΩ entre +5V y el pin de datos. La diferencia, es que a los sensores sólo mandamos dichos dos pines. En el siguiente esquema se puede ver mejor lo que digo: A la hora de conectarlo a un Arduino, el pin de datos lo conectaremos a cualquier entrada/salida digital, al igual que los sensores DHT. En cuanto a las librerías que tendremos que usar, utilizaremos estas dos: OneWire. DallasTemperature. Precios Este sensor es más barato que el anterior. Yo lo compré en Aliexpress y aquí tenéis el enlace.&amp;nbsp; Me salieron a 0,53€ cada uno, comprándolo en un paquete de 10. Y eso es todo por hoy. Hay más sensores de temperatura, pero creo que con estos cubrimos el expediente de momento.</itunes:summary><itunes:keywords>arduino, componentes, electrónica</itunes:keywords></item><item><title>Componentes (4): Programador para Arduino</title><link>http://nanolec.blogspot.com/2015/10/componentes-4-programador-para-arduino.html</link><category>arduino</category><category>componentes</category><category>electrónica</category><author>noreply@blogger.com (Isidoro Aguilar Baeza)</author><pubDate>Sun, 4 Oct 2015 18:32:00 +0200</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-155451023305910224.post-752330699367378001</guid><description>&lt;div style="text-align: justify;"&gt;
En el &lt;a href="http://nanolec.blogspot.com.es/2015/09/componentes-arduino-uno-y-pro-mini.html" target="_blank"&gt;artículo anterior&lt;/a&gt; hablábamos de dos modelos concretos de Arduino, el&amp;nbsp; Uno y el Pro Mini. Vimos igualmente que el segundo modelo no trae conexión directa por USB, lo cual es una ventaja (menos coste, tamaño y consumo) y un inconveniente (necesidad de interfaces externas).&lt;/div&gt;
&lt;br /&gt;
Hoy vamos a ver brevemente cómo hacemos para programar el Arduino Pro Mini.&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJttiuzrYl37Fj5jfF3ZJD1t6zv-FAassw02_VWZofQslkXpxfZ5ocue1o-7g4CoxEdIMT8jBEkaK85amfZAhBJXDXbUfucc3bik-GAOhaKCTE_3dPNtEXCbpkbyw9zwA1JEiA8dN-U1E/s1600/IMG_20150714_171711.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJttiuzrYl37Fj5jfF3ZJD1t6zv-FAassw02_VWZofQslkXpxfZ5ocue1o-7g4CoxEdIMT8jBEkaK85amfZAhBJXDXbUfucc3bik-GAOhaKCTE_3dPNtEXCbpkbyw9zwA1JEiA8dN-U1E/s320/IMG_20150714_171711.jpg" width="317" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Adaptador CP2102&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style="text-align: justify;"&gt;
Arduino implementa un bus denominado &lt;b&gt;UART &lt;/b&gt;(&lt;i&gt;Universal Asynchronous Receiver Transmitter&lt;/i&gt;) que es una conexión serie que permite comunicarse con otros dispositivos. Utilizaremos este bus para conectarnos al PC y poder programarlo, pero existe un problema: en nuestro PC tenemos otros tipos de buses de comunicación en serie, como &lt;b&gt;RS232 &lt;/b&gt;y &lt;b&gt;USB&lt;/b&gt;. Por tanto, necesitamos un adaptador o interfaz que nos permita "traducir" la conversación entre ambos extremos. Este adaptador debe convertir además los voltajes, puesto que UART utiliza niveles lógicos TTL mientras que USB no.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Existen muchos fabricantes que venden este tipo de adaptadores, pero básicamente hablaremos de estos dos:&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;ul&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUl9SRVBJIPMwX5pbFGXmxhVADXeKHo0P7KfIsD1HtnMprVEMAmowACGuf3r4G4bsJfxrlOBF-j-J0cBoNto_5QD3D9YbIkW3-NkO0vM9_BwVdsJGG_bOZ3GNaM8Idl_to500z2XBYOCM/s1600/IMG_20151004_182451.JPG" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;/a&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6Kau0luZkRw9BpBYzTvmY1cjSZIFkP1TIEaDKxFDmpoxlJGtgWt3skNJj9rdXKlr5aM78iInW3Ucxm9jHPsFDNjBPzrXh94b9a3NRbABCV9saai3RxS7AP50wSnVPWPh76IiBgrvSBUo/s1600/IMG_20151004_181700.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;/a&gt;
&lt;li&gt;&lt;b&gt;Silicon Labs CP2102&lt;/b&gt;.&lt;br /&gt;Este adaptador lo encontramos en &lt;a href="http://www.aliexpress.com/item/1LOT-2PCS-1pcs-CP2102-1pcs-328-8Mhz-3-3V-BS-pro-mini-For-Arduino-Compatible-With/2023701323.html" target="_blank"&gt;este artículo&lt;/a&gt; que compré en Aliexpress. Viene un pack compuesto por un Arduino Pro Mini y el adaptador por un precio de 3,71€, o también podemos encontrarlo &lt;a href="http://www.aliexpress.com/item/CP2102-USB-2-0-to-TTL-UART-Module-6Pin-Serial-Converter-STC-Replace-FT232-Module/1859102520.html?spm=2114.031010208.3.2.tTilin&amp;amp;ws_ab_test=201556_7,201527_3_71_72_73_74_75,0_0" target="_blank"&gt;suelto&lt;/a&gt; por unos 1,36€. Como se puede ver es muy barato y tiene una gran ventaja: si lo enfrentamos al lado pequeño del Arduino por donde está accesible el bus UART, sus conexiones van perfectamente emparejadas, sobre todo la conexión entre RXD y TXD, que tienen que ir "cruzadas", esto es: de RX a TX y de TX a RX. Este circuito ya viene así preparado.&lt;br /&gt;&lt;br /&gt;Por otro lado, tiene un &lt;b&gt;inconveniente &lt;/b&gt;que hay que tener en cuenta:&lt;br /&gt; USB proporciona &lt;b&gt;5V&lt;/b&gt;, y este dispositivo propaga esta alimentación al Arduino por el bus UART. Esto está muy bien si nuestro Arduino funciona a 5V, pero si tenemos el modelo que va a 3.3V, aunque por la alimentación no hay problema porque está en los límites admisibles, sí que podemos tener un problema si desde el Arduino estamos alimentando algún dispositivo que vaya a 3.3V, podríamos quemarlo.&lt;br /&gt;Hay que tener esto en cuenta ya que podemos tener nuestro montaje preparado con sus dispositivos conectados y a la hora de programarlo podemos quemar algo. Para evitar esto, podríamos desconectar el pin VCC del adaptador, para que la alimentación la coja Arduino de otra patilla.&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6Kau0luZkRw9BpBYzTvmY1cjSZIFkP1TIEaDKxFDmpoxlJGtgWt3skNJj9rdXKlr5aM78iInW3Ucxm9jHPsFDNjBPzrXh94b9a3NRbABCV9saai3RxS7AP50wSnVPWPh76IiBgrvSBUo/s1600/IMG_20151004_181700.jpg" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6Kau0luZkRw9BpBYzTvmY1cjSZIFkP1TIEaDKxFDmpoxlJGtgWt3skNJj9rdXKlr5aM78iInW3Ucxm9jHPsFDNjBPzrXh94b9a3NRbABCV9saai3RxS7AP50wSnVPWPh76IiBgrvSBUo/s200/IMG_20151004_181700.jpg" width="200" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Por otro lado, su utilización es muy sencilla. En esta foto podemos ver un detalle de cómo lo podemos conectar al Arduino, gracias a que trae unas patillas que puedes soldar a modo de zócalo. Lo pinchas en el Arduino y a programar. Insisto, siempre que no tengas dispositivos sensibles que vayan a 3.3V.&lt;br /&gt;Por la parte del conector USB lo conectamos al PC y nos aparecerá un nuevo puerto serie que es el que tenemos que utilizar para mandar el programa desde nuestro IDE. Si por lo que sea, tu ordenador no te reconoce el dispositivo, en esta página tenéis los drivers:&lt;br /&gt;&lt;br /&gt;&lt;a href="https://www.silabs.com/products/mcu/Pages/USBtoUARTBridgeVCPDrivers.aspx" target="_blank"&gt;https://www.silabs.com/products/mcu/Pages/USBtoUARTBridgeVCPDrivers.aspx&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;FTDI FT232R&lt;/b&gt;.&lt;br /&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUl9SRVBJIPMwX5pbFGXmxhVADXeKHo0P7KfIsD1HtnMprVEMAmowACGuf3r4G4bsJfxrlOBF-j-J0cBoNto_5QD3D9YbIkW3-NkO0vM9_BwVdsJGG_bOZ3GNaM8Idl_to500z2XBYOCM/s1600/IMG_20151004_182451.JPG" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="120" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUl9SRVBJIPMwX5pbFGXmxhVADXeKHo0P7KfIsD1HtnMprVEMAmowACGuf3r4G4bsJfxrlOBF-j-J0cBoNto_5QD3D9YbIkW3-NkO0vM9_BwVdsJGG_bOZ3GNaM8Idl_to500z2XBYOCM/s200/IMG_20151004_182451.JPG" width="200" /&gt;&lt;/a&gt;Este otro chip es de FTDI (&lt;i&gt;Future Technology Devices Technology&lt;/i&gt;) y lo incorpora &lt;a href="http://www.aliexpress.com/item/1pcs-FT232RL-FTDI-USB-3-3V-5-5V-to-TTL-Serial-Adapter-Module-forArduino-Mini-Port/32256920717.html" target="_blank"&gt;este otro artículo&lt;/a&gt; que también compré en Aliexpress, por uno 1,62€. Lo compré para evitar el problema que acabo de describir, porque la ventaja que tiene es que tú configuras mediante un puente a qué voltaje quieres trabajar: a 5V o a 3.3V.&lt;br /&gt;En otro orden de cosas, la conexión es igual de fácil que en el otro chip, con la diferencia de que tienes que ponerlo "boca abajo" con respecto al Arduino, y no "enfrentado" como era el otro. Hay que fijarse mucho en las conexiones. La clave está de nuevo en los pines RX/TX que debemos asegurarnos de que van del receptor al transmisor y viceversa.&lt;br /&gt;&lt;br /&gt;Con este además tuve problemas de detección inicialmente por parte de Windows, por lo que os pongo un enlace a los drivers oficiales por si os pasa lo mismo. Una vez instalado el driver, el ordenador lo detecta como un nuevo puerto COM.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ftdichip.com/Drivers/VCP.htm" target="_blank"&gt;http://www.ftdichip.com/Drivers/VCP.htm&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
Y eso es todo por hoy.&lt;br /&gt;&lt;br /&gt;</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJttiuzrYl37Fj5jfF3ZJD1t6zv-FAassw02_VWZofQslkXpxfZ5ocue1o-7g4CoxEdIMT8jBEkaK85amfZAhBJXDXbUfucc3bik-GAOhaKCTE_3dPNtEXCbpkbyw9zwA1JEiA8dN-U1E/s72-c/IMG_20150714_171711.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Componentes (3): Arduino UNO y Pro Mini</title><link>http://nanolec.blogspot.com/2015/09/componentes-arduino-uno-y-pro-mini.html</link><category>arduino</category><category>componentes</category><category>electrónica</category><author>noreply@blogger.com (Isidoro Aguilar Baeza)</author><pubDate>Sat, 19 Sep 2015 21:45:00 +0200</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-155451023305910224.post-1162688584940532260</guid><description>&lt;div style="text-align: justify;"&gt;
En este artículo hablaremos un poco del "cerebro" de algunos de los montajes que haremos. Se trata de Arduino, una plataforma de hardware libre enfocada al aprendizaje de microelectrónica que ha tenido una repercusión bestial a nivel mundial, teniendo una amplísima comunidad detrás que en sus 10 años de vida ha generado literalmente &lt;i&gt;millones &lt;/i&gt;de programas y librerías de código abierto al alcance de todos.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2vv0O5tSEFwOrvxNf3QXlnXKCTJSAwNsH07wOJf8nSB2irLYC2V1FAzWG5SFC4FdrJ_UNQmHNO42FDNU_yyC6S-KVgvoV0-MJgC1qoud56yRlOPnEIuVm5X2aoXUdIkxXwsDwDrdsTrE/s1600/lovearduino.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2vv0O5tSEFwOrvxNf3QXlnXKCTJSAwNsH07wOJf8nSB2irLYC2V1FAzWG5SFC4FdrJ_UNQmHNO42FDNU_yyC6S-KVgvoV0-MJgC1qoud56yRlOPnEIuVm5X2aoXUdIkxXwsDwDrdsTrE/s320/lovearduino.png" width="274" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h2 style="text-align: justify;"&gt;
Un poco de historia&lt;/h2&gt;
&lt;div style="text-align: justify;"&gt;
&lt;a href="https://es.wikipedia.org/wiki/Arduino" target="_blank"&gt;Arduino&lt;/a&gt; es un proyecto que se inicia en Italia en 2005 como soporte para hacer prácticas de electrónica en el Instituto de Diseño Interactivo de la ciudad de Ivrea.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
No es que no hubiera en aquella época plataformas de experimentación y microcontroladores programables, pero el problema era que su hardware era &lt;i&gt;cerrado&lt;/i&gt;; esto es,&amp;nbsp; eran los fabricantes los que diseñaban las placas, las conexiones, los componentes, etc y al usuario final se le vendía como un producto hecho tan sólo especificando el modo de programarlo.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Con el auge del software libre en mente, los creadores de Arduino pretendían fomentar el uso de una plataforma totalmente abierta, en su &lt;u&gt;software &lt;/u&gt;y también en su &lt;u&gt;hardware&lt;/u&gt;, mediante la utilización de componentes baratos y ampliamente conocidos, entregando a la comunidad el diseño de las placas de manera que cualquier persona pudiera o bien comprar un Arduino por poco precio o bien construírselo el mismo, bien en forma de kit o construyéndolo desde cero con sus fotolitos, sus soldaduras, etc.&lt;br /&gt;
&lt;br /&gt;
El proyecto no sólo incorporaba una placa de hardware, sino también un bootloader para el microcontrolador, un lenguaje de programación y un entorno de desarrollo que funciona tanto en Windows como en Mac y en Linux, todo de código abierto. El coste total de las primeras unidades debía ser inferior a los 30€.&lt;br /&gt;
&lt;br /&gt;
Con el tiempo, el proyecto saltó del entorno educativo al gran público: aficionados a la electrónica, diseñadores de hardware, empresas, etc. La comunidad de personas que utilizan Arduino en sus proyectos es gigantesca y prácticamente se puede hacer de todo con ellos.&lt;br /&gt;
&lt;br /&gt;
Además, recientemente con el auge de las compras de componentes electrónicos directamente a los fabricantes (China) y a precios irrisorios, montar un proyecto electrónico es francamente fácil y barato, que es lo que vamos a ver en próximos artículos.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Para el que quiera ver un poco más de historia de Arduino en detalle, os recomiendo ver el siguiente documental (en español):&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen="" frameborder="0" height="281" mozallowfullscreen="" src="https://player.vimeo.com/video/18390711" webkitallowfullscreen="" width="500"&gt;&lt;/iframe&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h2 style="text-align: justify;"&gt;
Componentes&lt;/h2&gt;
&lt;div style="text-align: justify;"&gt;
El &lt;b&gt;núcleo &lt;/b&gt;de Arduino es un microcontrolador de la marca Atmel.&lt;br /&gt;
&lt;br /&gt;
¿Que qué es un microcontrolador? Pues un &lt;a href="https://es.wikipedia.org/wiki/Microcontrolador" target="_blank"&gt;microcontrolador&lt;/a&gt; es un ordenador en miniatura; se trata de un circuito integrado que, a diferencia de muchos otros circuitos de propósitos específicos, es programable, y tiene su &lt;b&gt;CPU&lt;/b&gt;, su &lt;b&gt;memoria &lt;/b&gt;y sus interfaces de &lt;b&gt;entrada/salida&lt;/b&gt; para comunicarse con otros dispositivos.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://cdn.sparkfun.com/assets/7/1/9/0/c/5228fb7a757b7fb7568b456d.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="238" src="https://cdn.sparkfun.com/assets/7/1/9/0/c/5228fb7a757b7fb7568b456d.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
Por otro lado, la marca &lt;b&gt;Atmel &lt;/b&gt;os sonará a algunos si habéis conocido el mundo de la "educación" de tarjetas decodificadoras de televisión por satélite. Por los tiempos de Vía Digital, se utilizaba un microcontrolador (el AT90S8515 principalmente) de Atmel para programarle cierto código que permitía ver "florecer" los canales emulando la codificación Nagravisión. En aquellos tiempos, este Atmel era un chip que había que programar con un programador externo que se conectaba al PC por medio del puerto serie o paralelo.&lt;br /&gt;
&lt;br /&gt;
Pues bien, el microcontrolador que utilizan los Arduino son una evolución de aquellos Atmel, específicamente los modelos Atmega168, Atmega328, Atmega1280, Atmega8 entre otros. El modelo específico de microcontrolador que se incorpore implicará las principales diferencias entre los &lt;b&gt;distintos modelos de Arduino&lt;/b&gt;, como su capacidad de memoria, de almacenamiento, su velocidad, el número de puertos, etc. En la siguiente tabla podemos ver una relación entre el modelo de Arduino, el microcontrolador que usa y sus características principales:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;style type="text/css"&gt;
.tg  {border-collapse:collapse;border-spacing:0;border-color:#aaa;margin:0px auto;}
.tg td{font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:#aaa;color:#333;background-color:#fff;}
.tg th{font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:#aaa;color:#fff;background-color:#f38630;}
.tg .tg-s0es{font-weight:bold;font-size:12px;background-color:#ffcc67;color:#343434}
.tg .tg-0xaq{font-weight:bold;font-size:12px;background-color:#ffcc67;color:#343434;text-align:center}
.tg .tg-3sk9{font-weight:bold;font-size:12px}
.tg .tg-k6pi{font-size:12px}
.tg .tg-kr94{font-size:12px;text-align:center}
th.tg-sort-header::-moz-selection { background:transparent; }th.tg-sort-header::selection      { background:transparent; }th.tg-sort-header { cursor:pointer; }table th.tg-sort-header:after {  content:'';  float:right;  margin-top:7px;  border-width:0 4px 4px;  border-style:solid;  border-color:#404040 transparent;  visibility:hidden;  }table th.tg-sort-header:hover:after {  visibility:visible;  }table th.tg-sort-desc:after,table th.tg-sort-asc:after,table th.tg-sort-asc:hover:after {  visibility:visible;  opacity:0.4;  }table th.tg-sort-desc:after {  border-bottom:none;  border-width:4px 4px 0;  }@media screen and (max-width: 767px) {.tg {width: auto !important;}.tg col {width: auto !important;}.tg-wrap {overflow-x: auto;-webkit-overflow-scrolling: touch;margin: auto 0px;}}&lt;/style&gt;

&lt;br /&gt;
&lt;div class="tg-wrap"&gt;
&lt;table class="tg" id="tg-MkuZW"&gt;
  &lt;tbody&gt;
&lt;tr&gt;
    &lt;th class="tg-s0es"&gt;Arduino&lt;/th&gt;
    &lt;th class="tg-s0es"&gt;Microcontrolador&lt;/th&gt;
    &lt;th class="tg-0xaq"&gt;Voltaje&lt;/th&gt;
    &lt;th class="tg-0xaq"&gt;Velocidad&lt;/th&gt;
    &lt;th class="tg-s0es"&gt;RAM&lt;/th&gt;
    &lt;th class="tg-0xaq"&gt;Flash&lt;/th&gt;
    &lt;th class="tg-0xaq"&gt;EEPROM&lt;/th&gt;
    &lt;th class="tg-0xaq"&gt;Puertos&lt;br /&gt;
Digitales&lt;/th&gt;
    &lt;th class="tg-0xaq"&gt;Puertos&lt;br /&gt;
Analógicos&lt;/th&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td class="tg-3sk9"&gt;UNO R3&lt;/td&gt;
    &lt;td class="tg-k6pi"&gt;Atmega328P&lt;/td&gt;
    &lt;td class="tg-kr94"&gt;5V&lt;/td&gt;
    &lt;td class="tg-kr94"&gt;16Mhz&lt;/td&gt;
    &lt;td class="tg-k6pi"&gt;2KB&lt;/td&gt;
    &lt;td class="tg-kr94"&gt;32KB&lt;/td&gt;
    &lt;td class="tg-kr94"&gt;1KB&lt;/td&gt;
    &lt;td class="tg-kr94"&gt;14 (6 PWM)&lt;/td&gt;
    &lt;td class="tg-kr94"&gt;6&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td class="tg-3sk9"&gt;Mega R3&lt;/td&gt;
    &lt;td class="tg-k6pi"&gt;Atmega2560&lt;/td&gt;
    &lt;td class="tg-kr94"&gt;5V&lt;/td&gt;
    &lt;td class="tg-kr94"&gt;16Mhz&lt;/td&gt;
    &lt;td class="tg-k6pi"&gt;8KB&lt;/td&gt;
    &lt;td class="tg-kr94"&gt;256KB&lt;/td&gt;
    &lt;td class="tg-kr94"&gt;4KB&lt;/td&gt;
    &lt;td class="tg-kr94"&gt;54 (15PWM)&lt;/td&gt;
    &lt;td class="tg-kr94"&gt;16&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td class="tg-3sk9"&gt;Pro Mini 3.3V&lt;/td&gt;
    &lt;td class="tg-k6pi"&gt;Atmega328&lt;/td&gt;
    &lt;td class="tg-kr94"&gt;3.3V&lt;/td&gt;
    &lt;td class="tg-kr94"&gt;8Mhz&lt;/td&gt;
    &lt;td class="tg-k6pi"&gt;2KB&lt;/td&gt;
    &lt;td class="tg-kr94"&gt;32KB&lt;/td&gt;
    &lt;td class="tg-kr94"&gt;1KB&lt;/td&gt;
    &lt;td class="tg-kr94"&gt;14 (6 PWM)&lt;/td&gt;
    &lt;td class="tg-kr94"&gt;6&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td class="tg-3sk9"&gt;Pro Mini 5V&lt;/td&gt;
    &lt;td class="tg-k6pi"&gt;Atmega328&lt;/td&gt;
    &lt;td class="tg-kr94"&gt;5V&lt;/td&gt;
    &lt;td class="tg-kr94"&gt;16Mhz&lt;/td&gt;
    &lt;td class="tg-k6pi"&gt;2KB&lt;/td&gt;
    &lt;td class="tg-kr94"&gt;32KB&lt;/td&gt;
    &lt;td class="tg-kr94"&gt;1KB&lt;/td&gt;
    &lt;td class="tg-kr94"&gt;14 (6 PWM)&lt;/td&gt;
    &lt;td class="tg-kr94"&gt;6&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td class="tg-3sk9"&gt;Arduino DUE&lt;/td&gt;
    &lt;td class="tg-k6pi"&gt;AT91SAM3X8E&lt;/td&gt;
    &lt;td class="tg-kr94"&gt;3.3V&lt;/td&gt;
    &lt;td class="tg-kr94"&gt;84Mhz&lt;/td&gt;
    &lt;td class="tg-k6pi"&gt;96KB&lt;/td&gt;
    &lt;td class="tg-kr94"&gt;512KB&lt;/td&gt;
    &lt;td class="tg-kr94"&gt;-&lt;/td&gt;
    &lt;td class="tg-kr94"&gt;54 (12PWM)&lt;/td&gt;
    &lt;td class="tg-kr94"&gt;12&lt;/td&gt;
  &lt;/tr&gt;
&lt;tr&gt;
    &lt;td class="tg-3sk9"&gt;Arduino Lilypad&lt;/td&gt;
    &lt;td class="tg-k6pi"&gt;Atmega168V&lt;/td&gt;
    &lt;td class="tg-kr94"&gt;3.3V&lt;/td&gt;
    &lt;td class="tg-kr94"&gt;8Mhz&lt;/td&gt;
    &lt;td class="tg-k6pi"&gt;1KB&lt;/td&gt;
    &lt;td class="tg-k6pi"&gt;16KB&lt;/td&gt;
    &lt;td class="tg-kr94"&gt;512B&lt;/td&gt;
    &lt;td class="tg-k6pi"&gt;14 (6 PWM)&lt;/td&gt;
    &lt;td class="tg-kr94"&gt;6&lt;/td&gt;
  &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;script charset="utf-8" type="text/javascript"&gt;var TgTableSort=window.TgTableSort||function(n,t){"use strict";function r(n,t){for(var e=[],o=n.childNodes,i=0;i&lt;o.length;++i){var u=o[i];if("."==t.substring(0,1)){var a=t.substring(1);f(u,a)&amp;&amp;e.push(u)}else u.nodeName.toLowerCase()==t&amp;&amp;e.push(u);var c=r(u,t);e=e.concat(c)}return e}function e(n,t){var e=[],o=r(n,"tr");return o.forEach(function(n){var o=r(n,"td");t&gt;=0&amp;&amp;t&lt;o.length&amp;&amp;e.push(o[t])}),e}function o(n){return n.textContent||n.innerText||""}function i(n){return n.innerHTML||""}function u(n,t){var r=e(n,t);return r.map(o)}function a(n,t){var r=e(n,t);return r.map(i)}function c(n){var t=n.className||"";return t.match(/\S+/g)||[]}function f(n,t){return-1!=c(n).indexOf(t)}function s(n,t){f(n,t)||(n.className+=" "+t)}function d(n,t){if(f(n,t)){var r=c(n),e=r.indexOf(t);r.splice(e,1),n.className=r.join(" ")}}function v(n){d(n,L),d(n,E)}function l(n,t,e){r(n,"."+E).map(v),r(n,"."+L).map(v),e==T?s(t,E):s(t,L)}function g(n){return function(t,r){var e=n*t.str.localeCompare(r.str);return 0==e&amp;&amp;(e=t.index-r.index),e}}function h(n){return function(t,r){var e=+t.str,o=+r.str;return e==o?t.index-r.index:n*(e-o)}}function m(n,t,r){var e=u(n,t),o=e.map(function(n,t){return{str:n,index:t}}),i=e&amp;&amp;-1==e.map(isNaN).indexOf(!0),a=i?h(r):g(r);return o.sort(a),o.map(function(n){return n.index})}function p(n,t,r,o){for(var i=f(o,E)?N:T,u=m(n,r,i),c=0;t&gt;c;++c){var s=e(n,c),d=a(n,c);s.forEach(function(n,t){n.innerHTML=d[u[t]]})}l(n,o,i)}function x(n,t){var r=t.length;t.forEach(function(t,e){t.addEventListener("click",function(){p(n,r,e,t)}),s(t,"tg-sort-header")})}var T=1,N=-1,E="tg-sort-asc",L="tg-sort-desc";return function(t){var e=n.getElementById(t),o=r(e,"tr"),i=o.length&gt;0?r(o[0],"td"):[];0==i.length&amp;&amp;(i=r(o[0],"th"));for(var u=1;u&lt;o.length;++u){var a=r(o[u],"td");if(a.length!=i.length)return}x(e,i)}}(document);document.addEventListener("DOMContentLoaded",function(n){TgTableSort("tg-MkuZW")});&lt;/script&gt;

&lt;br /&gt;
&lt;br /&gt;
Hay muchos más modelos que los que se muestran en la tabla, pero nos sirve para hacernos una idea. Como se puede ver, tenemos varios parámetros a tener en cuenta y que condicionarán nuestra elección, como por ejemplo:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Voltaje de funcionamiento.&lt;br /&gt;Hay modelos que funcionan a 5V y otros que lo hacen a 3.3V.&lt;/li&gt;
&lt;li&gt;Velocidad.&lt;br /&gt;A más velocidad, más consumo del microcontrolador. Nos condicionará si queremos alimentarlo a baterías.&lt;/li&gt;
&lt;li&gt;RAM.&lt;br /&gt;El microcontrolador incorpora una memoria volátil para almacenar datos temporales (variables de nuestro programa).&lt;/li&gt;
&lt;li&gt;Flash.&lt;br /&gt;Además, también incorpora un chip de memoria no volátil para el almacenamiento de nuestro programa. Si vamos a hacer un programa muy grande, tendremos que elegir un tipo adecuado de Arduino.&lt;/li&gt;
&lt;li&gt;EEPROM.&lt;br /&gt;El micro también incorpora memoria no volátil de propósito específico: almacenar configuraciones y parámetros que no forman parte del código.&lt;/li&gt;
&lt;li&gt;Entradas/salidas digitales.&lt;br /&gt;Cada modelo tiene un número de puertos digitales de entrada y salida. Algunos de ellos tienen propósitos específicos como servir de puerto serie de comunicaciones, o conectar con otros dispositivos por medio de los protocolos I2C o ISP. Además, algunos de estos puertos pueden funcionar como salidas "pseudo-analógicas" PWM.&lt;/li&gt;
&lt;li&gt;Entradas analógicas.&lt;br /&gt;Cada modelo tiene también una serie de puertos de entrada analógicos, conectados a un conversor analógico/digital.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;h2&gt;
Arduino UNO&lt;/h2&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4_9vzuCmKiMzdW49Lb1VUlSDaJ1904hqWL3e20sxjAu1uuhs1UDSy9eZDi4zP9hCJxeutt6AfqKngZjYRZBY_lVFl07B752QAQMp2gHqfNhwHIVjfuJcF89lIRu9PdXFtCrBDYVIxfsY/s1600/ArduinoUnoR3Front.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="138" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4_9vzuCmKiMzdW49Lb1VUlSDaJ1904hqWL3e20sxjAu1uuhs1UDSy9eZDi4zP9hCJxeutt6AfqKngZjYRZBY_lVFl07B752QAQMp2gHqfNhwHIVjfuJcF89lIRu9PdXFtCrBDYVIxfsY/s200/ArduinoUnoR3Front.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
Este modelo de Arduino es el más adecuado para todo principiante. Está basado como hemos visto en la tabla superior en el microcontrolador Atmega328P de Atmel, y funciona con 5V y a 16Mhz.&lt;br /&gt;
&lt;br /&gt;
La placa tiene, además del microcontrolador, un oscilador de cristal a 16Mhz, un botón de reset, un regulador de tensión de 5V, un conector hembra para USB-B y un conector para un alimentador externo. Además, para comunicarse mediante el puerto USB incorpora otro controlador, el Atmega16U2.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
Puertos &lt;/h3&gt;
Dispone de 14 pines de entrada/salida digital (numerados del 0 al 13), algunos de los cuales tienen propósitos específicos:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;0 y 1: Se utilizan como consola de comunicaciones serie, para poder leer y escribir caracteres y comunicarse así con el mundo exterior. El 0 es para la recepción y el 1 para la emisión. Ambos pines están replicados también por el puerto USB, de manera que podemos comunicarnos con el ordenador al que esté conectado.&lt;/li&gt;
&lt;li&gt;2 y 3: Sirven como entradas de interrupción. Podemos conectarlas a un dispositivo que emita una alerta cuando cambie un estado, cuando se reciban datos, etc.&lt;/li&gt;
&lt;li&gt;&amp;nbsp;3, 5, 6, 9, 10 y 11: Se pueden utilizar como salidas analógicas PWM. Al escribir un valor entre 0 y 255 producirá un voltaje entre 0 y 5V de forma uniformemente distribuida.&lt;/li&gt;
&lt;li&gt;10, 11, 12 y 13: Se pueden utilizar para conectar dispositivos siguiendo el protocolo SPI.&lt;/li&gt;
&lt;li&gt;13: Lleva conectado un LED que hay en la placa. Este se encenderá cuando configuramos el puerto como salida y escribimos un 1.&lt;/li&gt;
&lt;/ul&gt;
Además también existen 6 puertos de entrada analógica (A0 a A5) que están conectados a un conversor analógico/digital de 10 bits.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
Alimentación&lt;/h3&gt;
En cuanto a la alimentación, hemos dicho que el microcontrolador funciona a 5V, pero la placa generalmente necesitará algo más de voltaje para funcionar. El regulador se encargará de proporcionar los 5V&amp;nbsp; a partir de la tensión de entrada. Existen las siguientes posibilidades a la hora de alimentar la placa:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;A través del conector USB. Si tenemos el Arduino conectado al ordenador, además de servirnos para programarlo y para tener acceso a la consola serie, podemos alimentarlo a través del mismo cable. La tensión es entonces de 5V.&lt;/li&gt;
&lt;li&gt;A través del conector de alimentación externa. Este conector admite entre 6V y 20V, pero normalmente deberemos proporcionar un mínimo de 7 si queremos que el regulador de tensión y la placa funcionen de forma estable.&lt;/li&gt;
&lt;li&gt;A través del pin Vin. Este conector está unido a la entrada anterior, y podemos alimentarlo con el mismo voltaje.&lt;/li&gt;
&lt;li&gt;A través del pin 5V. Este conector realmente es una salida que proviene del regulador cuando alimentamos el Arduino por cualquiera de las entradas anteriores. Normalmente no debe usarse de entrada, a menos que no tengamos nada más conectado en el resto y que la tensión que proporcionemos sea exactamente de 5V regulados.&lt;/li&gt;
&lt;/ul&gt;
Además existe un pin&amp;nbsp; 3.3V que funciona normalmente como salida regulada a dicha tensión. Su salida nos proporciona un máximo de 50 mA que podemos utilizar para alimentar periféricos.&lt;br /&gt;
&lt;ul&gt;
&lt;/ul&gt;
&lt;h2&gt;
Arduino Pro Mini&lt;/h2&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSNclTO61HSjEtLtf5mzjjwGaBuRvYXePgjwZCxa5MWtUDqa9jQirpSRMLHp5ZVt1oqZQ0HexEXZYwfklNvhm7HwtPFvM-sS8EUaRKSXqVidYcH2gg9THXQ2mZ8TkBlCL3dUHwK7VmGU0/s1600/arduinopromini.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="112" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSNclTO61HSjEtLtf5mzjjwGaBuRvYXePgjwZCxa5MWtUDqa9jQirpSRMLHp5ZVt1oqZQ0HexEXZYwfklNvhm7HwtPFvM-sS8EUaRKSXqVidYcH2gg9THXQ2mZ8TkBlCL3dUHwK7VmGU0/s200/arduinopromini.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Este otro modelo es apropiado para montajes independientes, sin necesidad de tener el Arduino conectado al ordenador y pudiendo alimentarlo mediante un transformador o bien pilas o baterías.&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Su tamaño es mucho más pequeño y tiene ciertas carencias con respecto al UNO dado el uso que se le va a dar.&lt;/div&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;La principal carencia que tiene es que no tiene puerto USB. En su lugar, cada vez que queramos programarlo deberemos conectarlo porlos conectores del lado derecho de la imagen con un adaptador FTDI, que nos permite adaptar los niveles lógicos del circuito con los de la conexión USB.&lt;/li&gt;
&lt;li&gt;Otra carencia es que en lugar de tener unos zócalos para pinchar conectores directamente, sólo dispone de pequeños orificios en su lugar, en los que podremos soldar patillas para montar en tableros o bien directamente los cables que necesitemos.&lt;/li&gt;
&lt;li&gt;Finalmente este Arduino sólo tiene un regulador, por lo que no podremos alimentar dispositivos externos que tengan un voltaje distinto al propio del Arduino.&lt;/li&gt;
&lt;/ul&gt;
Por lo demás, las características son las mismas que las del Arduino UNO en cuanto a memoria y conectores,&amp;nbsp; distinguiéndose sólo en cuanto a voltaje y velocidad. Existen de hecho dos variantes distintas de este Arduino:&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Arduino Pro Mini 5V&lt;/b&gt;.&lt;br /&gt;Funciona a 5V y 16Mhz, y se puede alimentar por el conector "RAW" con una tensión de entre 5V y 12V, o bien por medio del conector "VCC" por donde deben entrar exactamente 5V. &lt;/li&gt;
&lt;li&gt;&lt;b&gt;Arduino Pro Mini 3.3V&lt;/b&gt;.&lt;br /&gt;Este otro funciona a 3.3V y 8Mhz, siendo el más adecuado para montajes en los que se requiera muy poco consumo. Se puede alimentar de igual forma por RAW entre 3.3V y 12V o por VCC con 3.3V. Es muy interesante leer &lt;a href="http://www.mysensors.org/build/battery" target="_blank"&gt;este artículo&lt;/a&gt; de mysensors.org en el que hacen una modificación a este Arduino para que se pueda alimentar sólo con dos pilas AA, a 3V. La modificación consiste básicamente en eliminar el LED de encendido y el regulador de 3.3V.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h2&gt;
Clónicos&lt;/h2&gt;
&lt;div style="text-align: justify;"&gt;
Como hemos dicho al principio, Arduino es una plataforma de hardware libre, lo que quiere decir que o bien puedes comprarlo en los canales y tiendas "oficiales", o bien puedes irte a la página oficial (&lt;a href="http://www.arduino.cc/"&gt;www.arduino.cc&lt;/a&gt;) y descargarte los esquemas de la placa que quieras y montarla tú mismo añadiendo, modificando o eliminando lo que quieras.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
También quiere decir que cualquier otro fabricante puede construir su propio Arduino y venderlo al precio que quiera. Dada mi afición a la importación al por menor desde China, mis Arduinos son todos clónicos y procedentes del Oriente. Os dejo unos enlaces a algunos de los productos que he comprado:&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: right; margin-left: 1em; text-align: right;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaY-scIJ7M2vcHynNfLpTyXrsAFimrUin77l3KilV3-IWinYmp-0KhZZKOn8-ghLCMnOxQPHTS8AeaOKrOwjS469cJRs2Pmq5P2y5eGyuFM7S7N6mKW0QQenvVvIJ3znxct139ad87btc/s1600/IMG_20150714_171514.jpg" style="clear: right; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaY-scIJ7M2vcHynNfLpTyXrsAFimrUin77l3KilV3-IWinYmp-0KhZZKOn8-ghLCMnOxQPHTS8AeaOKrOwjS469cJRs2Pmq5P2y5eGyuFM7S7N6mKW0QQenvVvIJ3znxct139ad87btc/s320/IMG_20150714_171514.jpg" width="240" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Clónico del Pro Mini 3.3V&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://www.aliexpress.com/item/high-quality-UNO-R3-MEGA328P-CH340-CH340G-for-Arduino-UNO-R3-USB-CABLE/32272110284.html" target="_blank"&gt;Arduino UNO R3 modificado&lt;/a&gt;.&lt;/b&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;
Este dispositivo es un Arduino UNO que en lugar del Atmel Atmega328P "normal" utiliza el Atmega328P-AU que es exactamente igual pero empaquetado en un formato mucho más reducido (y barato). Otra modificación con respecto al original es que, en lugar de utilizar el Atmega16U2, utiliza el chip CH340G que es mucho más barato y da menos problemas con Windows 8 y superiores. Este artículo en concreto de Aliexpress incorpora un cable USB para conectarlo al ordenador y sale por unos &lt;b&gt;2,93€&lt;/b&gt;. Si ya tenéis un cable de este tipo (USB-A a USB-B, el de las impresoras) os podéis ahorrar todavía más.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://www.aliexpress.com/item/Free-Shipping-5PCS-LOT-Pro-Mini-Atmega328-3-3v-8MHz-For-Arduino-Compatible-nano-uno/1972594178.html" target="_blank"&gt;Lote de 5 Arduinos Pro Mini 3.3V&lt;/a&gt;.&lt;/b&gt;&lt;br /&gt;Es un pedido de 5 Arduinos clónicos por un total de 8,23€ (&lt;b&gt;1,65€&lt;/b&gt; la unidad). Según dicen en las especificaciones, el rango de voltaje admitido es más amplio que el del original, llegando a permitir hasta 15V (yo no lo probaría). Recomiendan utilizar el pin VCC si el voltaje está entre 2,7V y 5V o bien el RAW en caso de que sea superior a 5V.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;a href="http://www.aliexpress.com/item/1LOT-2PCS-1pcs-CP2102-1pcs-328-8Mhz-3-3V-pro-mini-For-Arduino-Compatible-With-Nano/2023701323.html" target="_blank"&gt;Lote de Arduino Pro Mini 3.3V + Programador FTDI&lt;/a&gt;.&lt;/b&gt;&lt;br /&gt;Finalmente, este lote lo compré porque era más barato que comprar el programador por separado. Se trata de un Arduino como los anteriores y un programador FTDI que se puede conectar directamente al Arduino. El lote completo sale por &lt;b&gt;3,64€&lt;/b&gt; en Aliexpress. Es importante señalar que este programador entrega 5V de alimentación siempre, aunque el Arduino sea de 3.3V.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2vv0O5tSEFwOrvxNf3QXlnXKCTJSAwNsH07wOJf8nSB2irLYC2V1FAzWG5SFC4FdrJ_UNQmHNO42FDNU_yyC6S-KVgvoV0-MJgC1qoud56yRlOPnEIuVm5X2aoXUdIkxXwsDwDrdsTrE/s72-c/lovearduino.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Proyecto Ibertren: Presentación</title><link>http://nanolec.blogspot.com/2015/09/proyecto-ibertren-presentacion.html</link><category>arduino</category><category>electricidad</category><category>modelismo</category><author>noreply@blogger.com (Isidoro Aguilar Baeza)</author><pubDate>Sun, 6 Sep 2015 22:13:00 +0200</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-155451023305910224.post-3820362723312196301</guid><description>&lt;h2 style="text-align: justify;"&gt;
Introducción &lt;/h2&gt;
&lt;div style="text-align: justify;"&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaQAFMU0MwliHzKLjle34NY70aFMutRXNt7xDaadN8NTMNbM5tpgSzdrgamQw1-1PitKVjgibppmFu8GRumQSfYC3fIkElYie5XwQ4l3ssSYYi0cuICl9yXCq9fEZBzOAPf0QGkXMk-2Y/s1600/IMG_5611.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaQAFMU0MwliHzKLjle34NY70aFMutRXNt7xDaadN8NTMNbM5tpgSzdrgamQw1-1PitKVjgibppmFu8GRumQSfYC3fIkElYie5XwQ4l3ssSYYi0cuICl9yXCq9fEZBzOAPf0QGkXMk-2Y/s320/IMG_5611.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
Cuando yo era pequeño, uno de los hobbies que tenía era el modelismo de trenes en miniatura.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Los que tengan una edad parecida a la mía, recordarán la marca &lt;b&gt;&lt;a href="https://es.wikipedia.org/wiki/Ibertren" target="_blank"&gt;IBERTREN&lt;/a&gt;&lt;/b&gt;, una empresa dedicada a hacer trenes de juguete en miniatura que en aquella época no existían en España. Inicialmente, se dedicó a la &lt;b&gt;escala N&lt;/b&gt; (9mm entre raíles), y todas las vías tenían &lt;u&gt;3 contactos&lt;/u&gt;: los dos raíles más un contacto central sobre el que se desliza un patín de la locomotora. Por esta razón, esta escala pasó a denominarse más tarde como &lt;b&gt;3N&lt;/b&gt;. Mientras tanto, en el modelismo "de verdad" la escala era 2N, esto esto es: la corriente se toma de los dos raíles, uno positivo y otro negativo.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Más tarde, Ibertren entró también en la escala HO, mucho más grande, y eventualmente también hizo modelos en escala 2N, pero eso es otra historia.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihIB8k6_7lUMeYcyt01sRWqjmrIoxqPeHkwNTkF_RJWyOpsY74qWwzcAb8gFXhcjGE7dPWwbMjevjaN-Bf0djXjOh4ET5_oDGhaeVFB_SSd-kK0_HwFmUfbHbDhtSO8BvoRuWq9vHj8Bw/s1600/IMG_5636.JPG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="213" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihIB8k6_7lUMeYcyt01sRWqjmrIoxqPeHkwNTkF_RJWyOpsY74qWwzcAb8gFXhcjGE7dPWwbMjevjaN-Bf0djXjOh4ET5_oDGhaeVFB_SSd-kK0_HwFmUfbHbDhtSO8BvoRuWq9vHj8Bw/s320/IMG_5636.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
La cosa es que yo tenía una maqueta de Ibertren, con tres trenes distintos, uno de pasajeros, un talgo completo y uno de mercancías, cada uno con su respectiva locomotora. Aquí os adjunto algunas fotografías de cómo se conserva la maqueta a día de hoy.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Lamentablemente, el transformador original que traía el Ibertren se estropeó. Mi padre, que siempre ha sido bastante manitas para la electrónica, me hizo otro transformador y reutilizó algunas partes del original, y además añadió ciertas "características" como un silbato y un control de luces de las casas de la maqueta.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
La cosa es que la maqueta se abandonó debajo de una cama durante muchos años, y a día de hoy aunque bien conservada, no funciona el alimentador porque el circuito se rompió.&lt;br /&gt;
&lt;table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-KGQWFg91MCM-VV09kUkCzZkGVFWzte9ycaQGh7v4DuQWQCExFrCEnnp02kfs0iuhkJX25zomExLwtGGZQXLN8izch_H4lfCPbJgocguz4jLQfy8JXNexB2uUk6-CYy_MMjJEDNFr6Do/s1600/IMG_5629.JPG" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="266" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-KGQWFg91MCM-VV09kUkCzZkGVFWzte9ycaQGh7v4DuQWQCExFrCEnnp02kfs0iuhkJX25zomExLwtGGZQXLN8izch_H4lfCPbJgocguz4jLQfy8JXNexB2uUk6-CYy_MMjJEDNFr6Do/s400/IMG_5629.JPG" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Tres generaciones, una afición&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-ADOuFt4WwtkV6-zfi5X9oqblSPwlkRNSlFP0MJJh6JjkmHdCoA1Ox2GHY7p7-kTLMqIN-MxFnhVFZtJ7h32nT0Xype3QWaRS6MPbM5ihkrBDdVz_njcsxTP31QWEOBxMOEHpwQnEsCg/s1600/IMG_5610.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="266" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-ADOuFt4WwtkV6-zfi5X9oqblSPwlkRNSlFP0MJJh6JjkmHdCoA1Ox2GHY7p7-kTLMqIN-MxFnhVFZtJ7h32nT0Xype3QWaRS6MPbM5ihkrBDdVz_njcsxTP31QWEOBxMOEHpwQnEsCg/s400/IMG_5610.JPG" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Algunos detalles de la maqueta&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;h2 style="text-align: justify;"&gt;
&lt;/h2&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2tt_EgLeJMOX6ckF8IGLVHvbDrxhoJ_bORYrCEXbjuADJffv2Oc5OODsNJwB3FU0zcWBSvY5qPP-Jp1Kng7rw7OpOdzT1TKo3LHSN9_vKUZq4QmWRugPdAw1tOLkzdDR0UMQb2JTYbjQ/s1600/IMG_5608.JPG" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="266" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2tt_EgLeJMOX6ckF8IGLVHvbDrxhoJ_bORYrCEXbjuADJffv2Oc5OODsNJwB3FU0zcWBSvY5qPP-Jp1Kng7rw7OpOdzT1TKo3LHSN9_vKUZq4QmWRugPdAw1tOLkzdDR0UMQb2JTYbjQ/s400/IMG_5608.JPG" width="400" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Como se puede ver, queda un buen trabajo de restauración&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h2 style="text-align: justify;"&gt;
Objetivos&lt;/h2&gt;
&lt;div style="text-align: justify;"&gt;
Mi objetivo en este proyecto no es tan sólo&amp;nbsp; arreglar el alimentador sino, dados los tiempos que corren y las nuevas tecnologías que ahora existen (han pasado 30 años) vamos a intentar "modernizar" un poquito el asunto.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Mi intencion es utilizar un Arduino para mover todo el invento, y esta es mi lista de intenciones:&lt;/div&gt;
&lt;ul style="text-align: justify;"&gt;
&lt;li&gt;&lt;b&gt;Control suave de los trenes.&lt;/b&gt;&lt;br /&gt;Arduino incorpora salidas PWM que no son analógicas pero se comportan como tales, ya hablaremos un poco más de esto más adelante. La ventaja es que el avance de las locomotoras a velocidades bajas es bastante más eficiente y suave que la simple regulación de voltaje que se hacía habitualmente en los circuitos analógicos.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Control digital de la marcha.&lt;/b&gt;&lt;br /&gt;Antiguamente, para cambiar la marcha de los trenes, el controlador de Ibertren disponía de un conmutador que cambiaba el sentido de la corriente. Si el tren estaba en marcha, esto era catastrófico: imagínate meter marcha atrás en el coche cuando éste está en movimiento... Con un control digital podemos programar el Arduino de manera que cuando solicitemos el cambio de sentido, éste puede reducir la velocidad hasta cero, cambiar la polaridad y después incrementar de nuevo la velocidad hasta donde estaba anteriormente.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Display digital.&lt;/b&gt;&lt;br /&gt;¿Por qué no ponerle al invento un display que nos muestre información como la velocidad, la marcha, o lo que se nos ocurra?&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Sonidos personalizados.&lt;/b&gt;&lt;br /&gt;La maqueta tenía como os he dicho un circuito que hacía sonar un silbato al pulsar un botón. Con un Arduino podemos tener muchos tipos de sonidos grabados en MP3 (o WAV) que se activen con un panel de distintos botones: campanas de la estación, silbato, locuciones, etc. Hay componentes baratísimos que nos permiten reproducir sonidos almacenados en una microSD y controlándolo desde Arduino.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Control de iluminación.&lt;/b&gt;&lt;br /&gt;La maqueta dispone de varias casas que tenían una pequeña bombilla de 12V. Hay un interruptor general que nos permite encender o apagar las luces. Mi intención es sustituir este circuito por LED's de bajo consumo y voltaje (3.3V - 5V) y alta luminosidad. Además podemos programar el encendido o apagado automático, disminuir o aumentar la luminosidad al pulsar un botón, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="text-align: justify;"&gt;
Hay ciertas cosas que todavía tengo que pensar, pero las posibilidades son muy grandes: por ejemplo podríamos poner sensores de presencia en ciertos puntos del circuito de vías y detener los trenes si hay un obstáculo, o activar automáticamente los cambios de vía eléctricos, etc. Ya veremos lo que da de sí. &lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h2 style="text-align: justify;"&gt;
&lt;b&gt;Análisis de requerimientos&lt;/b&gt;&lt;/h2&gt;
&lt;div style="text-align: justify;"&gt;
A continuación, vamos a ver qué elementos vamos a necesitar para realizar el proyecto.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Primero, veamos qué circuitos de corriente vamos a necesitar:&lt;/div&gt;
&lt;ol&gt;
&lt;li style="text-align: justify;"&gt;Los trenes de Ibertren en la escala N (3N) funcionan con &lt;b&gt;corriente continua a 12V&lt;/b&gt;, y su control es &lt;b&gt;analógico&lt;/b&gt;; esto es, se regula su velocidad modificando el voltaje entre 0V y 12V. Para el cambio de sentido simplemente se invierte la polaridad, alimentándolos entre -12V y 0V. En cuanto a la corriente máxima necesaria, creo (a ojo de buen cubero) que con &lt;b&gt;2A &lt;/b&gt;tendremos bastante para mover un máximo de 2 locomotoras. Si no recuerdo mal, he leído en algún sitio que el alimentador original de Ibertren proporcionaba un máximo de 2,5A, pero compartido entre 12V alterna y 12V continua. Por lo tanto, vamos a necesitar un circuito de &lt;b&gt;12V DC 2A&lt;/b&gt;.&lt;br /&gt;Tengo que especificar que con nuestro Arduino no vamos a proporcionar realmente corriente continua sino PWM, es decir corriente "pulsada", pero para el caso nos vale.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;Además, la maqueta dispone de cuatro cambios de vía eléctricos. Estos cambios consisten en un doble electroimán y un núcleo metálico que se desplaza en un sentido u otro. Estos electroimanes se alimentan a &lt;b&gt;12V con corriente alterna&lt;/b&gt; mediante unos pulsadores. Vamos a suponer también que la corriente máxima es de &lt;b&gt;2A&lt;/b&gt;. Por tanto, vamos a necesitar otro circuito de &lt;b&gt;12V AC 2A&lt;/b&gt;.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;Finalmente está la alimentación de todo lo demás: necesitamos alimentar un Arduino, unos LED's y otra serie de componentes electrónicos: display, amplificadores PWM, reproductor de MP3... Para todos estos elementos lo ideal es una alimentación a 5V en continua. Por tanto vamos a necesitar &lt;b&gt;un tercer circuito a 5V DC&lt;/b&gt;. Ya veremos la corriente máxima necesaria, pero no creo que supere 1A.&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;
Por tanto, estos son los requerimientos a primera vista:&lt;br /&gt;
&lt;ul&gt;
&lt;li style="text-align: justify;"&gt;Un &lt;b&gt;transformador &lt;/b&gt;de 220V AC a 12V AC. Creo que en la maqueta debe haber alguno que funcione todavía y en caso contrario habría que comprar uno. Con él alimentaremos el circuito número 2 (desvíos eléctricos).&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;Un &lt;b&gt;alimentador &lt;/b&gt;que nos dé 12V DC y 5V DC. Podríamos construir uno que nos dé estas tensiones o bien podemos comprar &lt;a href="http://www.aliexpress.com/item/Hot-Selling-12V-5V-AC-Adapter-Hard-Disk-Power-Supply-For-Hard-Disk-Drive-Black-GUB/2044354040.html" target="_blank"&gt;este alimentador de discos duros&lt;/a&gt; que nos da 2A en cada circuito independiente a 12V y a 5V. Cuesta unos &lt;b&gt;2,74€&lt;/b&gt; en Aliexpress y con él podemos alimentar los circuitos números 1 y 3 (motores y electrónica).&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;Un &lt;b&gt;Arduino &lt;/b&gt;a 5V.&lt;br /&gt;Podemos utilizar un Arduino UNO o un Pro Mini. Opto por &lt;a href="http://www.aliexpress.com/item/Free-Shipping-1pcs-lot-ATMEGA328P-Pro-Mini-328-Mini-ATMEGA328-5V-16MHz-for-Arduino/32291252874.html" target="_blank"&gt;el segundo&lt;/a&gt; por ser más barato y ocupar menos espacio. &lt;b&gt;1,41€&lt;/b&gt; en Aliexpress.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;Un &lt;b&gt;display &lt;/b&gt;digital.&lt;br /&gt;Hay muchos displays LCD disponibles que nos permiten mostrar 2 líneas de 16 caracteres cada una. Normalmente utilizan un protocolo de comunicación en paralelo, es decir, utiliza 8 líneas de datos al mismo tiempo. Si no queremos quedarnos sin pines disponibles en el Arduino, deberemos utilizar un adaptador al protocolo serie. Se puede conseguir &lt;a href="http://www.aliexpress.com/item/1602-16x2-HD44780-Character-LCD-w-IIC-I2C-1602-Serial-Interface-Adapter-Module/2042039421.html" target="_blank"&gt;un pack con los dos componentes&lt;/a&gt; por &lt;b&gt;1,96€&lt;/b&gt; en Aliexpress, y sólo tendremos que utilizar 4 pines incluyendo la alimentación.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;Un &lt;b&gt;amplificador de potencia &lt;/b&gt;PWM.&lt;br /&gt;Si nuestro Arduino funciona a 5V, el voltaje máximo que podremos sacar por los pines PWM será de 5V, insuficiente para alimentar el circuito de los motores de los trenes. Además necesitaremos mucha más intensidad de corriente de la que nos va a proporcionar el Arduino (unos 2A según hemos estimado). Por tanto, necesitaremos construirnos un circuito amplificador basado en un transistor que nos controle hasta 12V a partir de los 5V del Arduino. O también podemos comprar &lt;a href="http://www.aliexpress.com/item/Free-shipping-1pcs-lot-Special-promotions-2pcs-lot-L298N-motor-driver-board-module-stepper-motor-smart/1872427142.html" target="_blank"&gt;este componente&lt;/a&gt; que está ya diseñado específicamente para motores y cuesta unos &lt;b&gt;1,72€&lt;/b&gt; en Aliexpress y permite controlar dos canales independientes de 2A cada uno y para un voltaje de entre 5V y 35V.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;Un &lt;b&gt;reproductor de sonidos&lt;/b&gt;.&lt;br /&gt;Este componente es opcional, pero mola. Se trata del &lt;a href="http://www.aliexpress.com/item/DFPlayer-Mini-MP3-Player-Module-For-Arduino/32361503872.html?spm=2114.01020208.3.2.HyzIua&amp;amp;ws_ab_test=201407_5,201444_6,201409_2" target="_blank"&gt;DFPlayer Mini&lt;/a&gt;, un mini reproductor de MP3 (o WAV, o WMA) que incorpora un lector de tarjetas microSD y puede reproducir ficheros de música (o sonido) de forma independiente o controlado por un Arduino. Se puede conectar directamente a un altavoz y también tiene una salida de línea. Cuesta &lt;b&gt;5,48€&lt;/b&gt; en Aliexpress.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;Algunos &lt;b&gt;pulsadores&lt;/b&gt;.&lt;br /&gt;Vamos a necesitar varios pulsadores, tanto para el cambio de sentido como para activar y desactivar el alumbrado como para el reproductor de sonido.&lt;br /&gt;Para el cambio de sentido me han gustado &lt;a href="http://www.aliexpress.com/item/5pcs-Blue-LED-10mm-Cap-Arrow-12V-50mA-Momentary-Tact-Push-Button-Switch/32395566007.html" target="_blank"&gt;estos&lt;/a&gt; que tienen una tapa en forma de flecha e incorporan iluminación mediante LED's. Midem 1 cm de diámetro y cuestan &lt;b&gt;4,56€&lt;/b&gt; en Aliexpress el lote de 5 pulsadores.&lt;br /&gt;Para el resto, podemos utilizar &lt;a href="http://www.aliexpress.com/item/20pcs-Tactile-Push-Button-Switch-Tact-Switch-6-X-6-X-11mm-4-pin-DIP-Top/32283126795.html" target="_blank"&gt;estos otros&lt;/a&gt;, que sólo cuestan&lt;b&gt; 0,69€&lt;/b&gt; el lote de 20 en Aliexpress.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;Unos cuantos de &lt;b&gt;LED's&lt;/b&gt;.&lt;br /&gt;También vamos a necesitar LED's, tanto para la iluminación como para indicar ciertas cosas, como el funcionamiento del circuito como para indicar que las luces están activadas, o para lo que sea. En Aliexpress venden este &lt;a href="http://www.aliexpress.com/item/wholesale-100-pcs-5mm-Round-Red-Super-bright-emitting-diode-LED-Light-5000MCD-free-shipping/32341796834.html" target="_blank"&gt;lote de 100 LED's&lt;/a&gt; en blanco por &lt;b&gt;0,98€&lt;/b&gt;. O si los queremos en colores también tenemos este otro &lt;a href="http://www.aliexpress.com/item/20pcs-X-5-color-100pcs-3mm-white-red-yellow-blue-green-Light-emitting-diode-Super-Bright/32343812819.html" target="_blank"&gt;lote de 100 LED's&lt;/a&gt; en 5 colores (20 de cada) por &lt;b&gt;1,03€&lt;/b&gt;. Todos ellos son pequeños (3mm de diámetro), de alta luminosidad y admiten un voltaje máximo de 3,4V, lo que podemos conseguir por medio de algunas resistencias a partir de los 5V que tenemos en el circuito 3.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="text-align: justify;"&gt;
Finalmente, también habrá que buscar otra serie de componentes, como un potenciómetro que gire menos de 180º entre la posición mínima y la máxima (es posible que valga el que tiene el circuito antiguo); una bonita cubierta para el mismo; una caja para montar la consola con el display, el potenciómetro, los botones, etc (o ya veremos si utilizamos la propia consola de Ibertren aunque sea un sacrilegio para coleccionistas); cable, resistencias, condesadores, etc.&lt;/div&gt;
&lt;br /&gt;
Quitando todas estas cosas, de momento vamos por unos &lt;b&gt;19€&lt;/b&gt; de presupuesto, que no está nada mal.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;
Siguientes pasos&lt;/h2&gt;
&lt;div style="text-align: justify;"&gt;
Antes de seguir adelante, tengo que hacer algunas mediciones en la maqueta, para ver qué se puede aprovechar y qué hay que comprar. En cuanto lo tenga claro, pediré los componentes e iremos estudiando cómo funciona cada uno de ellos para realizar el montaje de todos. Seguramente este artículo lo vaya modificando a medida que vaya dando dichos pasos.&lt;/div&gt;
</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaQAFMU0MwliHzKLjle34NY70aFMutRXNt7xDaadN8NTMNbM5tpgSzdrgamQw1-1PitKVjgibppmFu8GRumQSfYC3fIkElYie5XwQ4l3ssSYYi0cuICl9yXCq9fEZBzOAPf0QGkXMk-2Y/s72-c/IMG_5611.JPG" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Componentes (2): Transceptor inalámbrico nRF24L01+</title><link>http://nanolec.blogspot.com/2015/08/componentes-transceptor-inalambrico.html</link><category>componentes</category><category>electrónica</category><author>noreply@blogger.com (Isidoro Aguilar Baeza)</author><pubDate>Sun, 16 Aug 2015 18:26:00 +0200</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-155451023305910224.post-1531649043417801904</guid><description>En el artículo de hoy vamos a conocer otro componente muy útil para nuestros montajes: el transceptor inalámbrico &lt;b&gt;nRF24L01+&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiBAa9yvEePBq0ery9CdThhAHKs_g-l-7675hEUDaB5aSCr5_JrRO-1dgw_OowEDU_Pzl_4JYZlxnHmA3aQXQ0ACecm7rtJx3hAoWcQL9Z0Cvja6uS8i9hP1QP4IhnX1sXHU4SEad_ozs/s1600/nRF24L01%252B.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="226" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiBAa9yvEePBq0ery9CdThhAHKs_g-l-7675hEUDaB5aSCr5_JrRO-1dgw_OowEDU_Pzl_4JYZlxnHmA3aQXQ0ACecm7rtJx3hAoWcQL9Z0Cvja6uS8i9hP1QP4IhnX1sXHU4SEad_ozs/s320/nRF24L01%252B.png" width="320" /&gt;&lt;/a&gt;Se trata de un &lt;b&gt;&lt;i&gt;transceptor&lt;/i&gt;&lt;/b&gt; inalámbrico, esto es, un dispositivo capaz de funcionar como &lt;i&gt;trans&lt;/i&gt;misor y como re&lt;i&gt;ceptor&lt;/i&gt; por medio de radiofrecuencia. La banda de radiofrecuencia utilizada es la &lt;a href="https://es.wikipedia.org/wiki/Banda_ISM" target="_blank"&gt;ISM &lt;/a&gt;(Industrial, Scientifical and Medical), una banda reservada para su uso no comercial por parte de particulares, y concretamente el rango de frecuencias desde 2,400 a 2,500 Ghz que todos conocemos por ser el utilizado por microondas, WIFI, Bluetooth, teclados y ratones inalámbricos, y multitud de otros aparatos.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Este dispositivo, fabricado por &lt;a href="https://www.nordicsemi.com/eng/Products/2.4GHz-RF/nRF24L01P" target="_blank"&gt;&lt;i&gt;Nordic Semiconductor&lt;/i&gt;&lt;/a&gt;,&amp;nbsp; nos permitirá comunicar un dispositivo (arduino o de cualquier otro tipo) con otro, pudiendo funcionar como emisor o receptor en cada momento. Hay multitud de artículos en los que se puede encontrar información sobre él, de manera que paso a destacar sus características principales.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h4 style="text-align: justify;"&gt;
Primero lo que no es:&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="text-align: justify;"&gt;El nRF24L01+ no es un dispositivo WIFI, aunque utilice la misma frecuencia.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;Tampoco se trata de un dispositivo Bluetooth, aunque hay personas, como &lt;a href="http://dmitry.gr/index.php?r=05.Projects&amp;amp;proj=11.%20Bluetooth%20LE%20fakery" target="_blank"&gt;Dmitry Grinberg&lt;/a&gt;, que han conseguido empaquetar parte del protocolo Bluetooth LE mediante el dispositivo y comunicarse de una manera algo rudimentaria con otros dispositivos Bluetooth.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
&amp;nbsp;Lo que sí es:&lt;/h4&gt;
&lt;ul&gt;
&lt;li style="text-align: justify;"&gt;Se trata de un dispositivo inalámbrico de &lt;b&gt;ultra-baja potencia&lt;/b&gt;. Su pico de consumo cuando está recibiendo o emitiendo es de 14 mA, cuando está en modo de reposo 26 μA, y cuando está en modo "apagado" es de 900 nA. El tiempo de activación cuando está en uno de estos modos es rapidísimo, lo que facilita su utilización en entornos con necesidades de muy bajo consumo.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;Utiliza la &lt;b&gt;banda de 2,4 Ghz a 2,525 Ghz&lt;/b&gt; para la comunicación, y puede hacerlo a una velocidad de &lt;b&gt;250kbps, 1 Mbps o 2 Mbps&lt;/b&gt;. Su alcance máximo (en abierto y sin obstáculos) puede llegar a los 200 metros, lo cual no está nada mal.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;Puede utilizar cualquiera de los 126 canales disponibles en su rango de frecuencias.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;Puede mandar&lt;b&gt; secuencias de datos hasta 32 bytes&lt;/b&gt; seguidos en modo "ShockBurst" (ráfagas).&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;6 &lt;b&gt;canales de datos&lt;/b&gt; simultáneos para comunicación en estrella con otros dispositivos iguales. Cada uno de estos canales debe tener una &lt;b&gt;dirección&lt;/b&gt;, que debe ser igual en el receptor que en el emisor. Estas direcciones son un número de entre 3 y 5 bytes. Se recomienda para evitar errores que los bits de la dirección cambien de nivel (de 0 a 1 o de 1 a 0) varias veces.&lt;/li&gt;
&lt;li&gt;En las especificaciones del fabricante indica que puede funcionar con una &lt;b&gt;alimentación de entre 1,9V a 3,6V&lt;/b&gt;, aunque según lo que yo he leído parece ser muy quisquilloso y deberíamos alimentarlo siempre a 3,3V. Ya veremos cómo se comporta con un par de pilas AA, que es como quiero probarlo...&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Su coste es muy bajo&lt;/b&gt;, tirando a ridículo. En la foto de arriba podéis ver el que yo he comprado en Aliexpress por un precio de 0,60€, con los gastos de envío incluídos desde China y puesto en casa. Es verdad que yo he pedido 10 y así salen más baratos, pero aún así el precio es ridículo. Os pongo el enlace del mío por si le interesa a alguien:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.aliexpress.com/item/Free-Shipping-10PCS-NRF24L01-wireless-data-transmission-module-2-4G-the-NRF24L01-upgrade-version-We-are/1680738017.html"&gt;http://www.aliexpress.com/item/Free-Shipping-10PCS-NRF24L01-wireless-data-transmission-module-2-4G-the-NRF24L01-upgrade-version-We-are/1680738017.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;En cuanto a la comunicación inalámbrica, utiliza un protocolo propio que asegura la integridad de los paquetes, reenviando paquetes que se pierdan de forma transparente y devolviendo un "ACK" que asegura al emisor que el mensaje ha llegado al receptor.&lt;/li&gt;
&lt;li&gt;&lt;div style="text-align: justify;"&gt;
En cuanto a la comunicación con controladores como el arduino, utiliza el &lt;a href="https://es.wikipedia.org/wiki/Serial_Peripheral_Interface" target="_blank"&gt;protocolo SPI&lt;/a&gt;
 (Serial Peripheral Interface), un estándar utilizado en los equipos 
electrónicos para transmitir información de un integrado a otro. Las 
señales estandar de dicho protocolo están disponibles en sus patillas 
según el siguiente esquema:&lt;/div&gt;
&lt;br /&gt;&lt;img alt="Conexionado nRF24L01+" border="0" height="222" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaSiQfspEvrjMkDsomFE-kuogAZJHNiIl9Sy_SB4vDP0oeGepvzUjpYBOpWMHCMQqxDKqqc8rQoHfhREUpjo6oi26aaO0AMgrN-dbIqvqDAgtzLJLzY6MB8oPYEgWMbmYuSgdTj1cM5JM/s400/nRF24L01%252B.png" title="Conexionado nRF24L01+" width="550" /&gt; &lt;br /&gt;Y este es el significado de cada una de ellas:&lt;/li&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;GND&lt;/b&gt;: Tierra o masa común.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;&lt;b&gt;VCC&lt;/b&gt;: Conector de alimentación. En las especificaciones se indica que debe estar comprendida entre 1,9V y 3,6V. &lt;u&gt;OJO&lt;/u&gt;: nunca alimentar a 5V o adiós transceptor.&lt;br /&gt;Por internet hay multitud de comentarios acerca de que la alimentación debe ser exclusivamente de 3,3V y muchos incorporan un pequeño condensador entre las patillas 1 y 2 para estabilizar la alimentación. En mis pruebas voy a intentar alimentarlo a 3V a partir de pilas, a ver qué tal va.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;&lt;b&gt;CE&lt;/b&gt; (Chip Enable): Hay que ponerlo a 1 cuando queramos recibir o enviar datos.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;&lt;b&gt;CSN &lt;/b&gt;(Chip Select Not): Hay que ponerlo a 0 cuando queramos mandar un comando SPI al dispositivo desde el controlador.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;&lt;b&gt;SCK &lt;/b&gt;(SPI Clock): Señal de reloj para el protocolo SPI.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;&lt;b&gt;MOSI &lt;/b&gt;(Master Output Slave Input): Esta línea sirve para enviar datos desde el controlador (denominado maestro) al dispositivo inalámbrico (denominado esclavo).&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;&lt;b&gt;MISO &lt;/b&gt;(Master Input Slave Output): Esta línea hace lo contrario, enviar datos desde el dispositivo inalámbrico (slave out) al controlador (master in).&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;&lt;b&gt;IRQ&lt;/b&gt;: Esta línea de interrupción se activa en determinadas circunstancias alertando al controlador. Se puede programar para que se ponga a 1 cuando se reciba un paquete de datos, o cuando se termine la transmisión, etc.&lt;/li&gt;
&lt;/ol&gt;
&lt;li style="text-align: justify;"&gt;El funcionamiento del protocolo SPI en este dispositivo se sale del ámbito que quiero darle a este artículo; se trata de una serie de comandos a bajo nivel que se asemejan mucho a la programación en código máquina, escribiendo valores en registros concretos del dispositivo. No obstante, si alguien quiere hacerse su propia librería para programarlo, puede encontrar todo muy bien documentado en el &lt;a href="http://gizmosnack.blogspot.com.es/2013/04/tutorial-nrf24l01-and-avr.html" target="_blank"&gt;este artículo de gizmosnack&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Y eso es todo por ahora. Sólo decir que para utilizar el dispositivo desde Arduino hay numerosas librerías, como &lt;a href="https://github.com/mysensors/Arduino/tree/master/libraries/MySensors" target="_blank"&gt;ésta&lt;/a&gt;, &lt;a href="https://github.com/aaronds/arduino-nrf24l01" target="_blank"&gt;ésta&lt;/a&gt;, &lt;a href="http://www.airspayce.com/mikem/arduino/RadioHead/index.html" target="_blank"&gt;ésta&lt;/a&gt;, &lt;a href="http://tmrh20.github.io/RF24/" target="_blank"&gt;ésta&lt;/a&gt;, &lt;a href="https://github.com/stanleyseow/RF24" target="_blank"&gt;ésta&lt;/a&gt;, &lt;a href="http://playground.arduino.cc/uploads/InterfacingWithHardware/Mirf.zip" target="_blank"&gt;ésta&lt;/a&gt;, &lt;a href="https://github.com/stanleyseow/arduino-nrf24l01" target="_blank"&gt;ésta&lt;/a&gt;, &lt;a href="https://github.com/maniacbug/RF24" target="_blank"&gt;ésta&lt;/a&gt; o muchas otras. Cuando haga más pruebas os diré la que yo voy a usar. &lt;/div&gt;
&lt;ul&gt;
&lt;/ul&gt;
</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjiBAa9yvEePBq0ery9CdThhAHKs_g-l-7675hEUDaB5aSCr5_JrRO-1dgw_OowEDU_Pzl_4JYZlxnHmA3aQXQ0ACecm7rtJx3hAoWcQL9Z0Cvja6uS8i9hP1QP4IhnX1sXHU4SEad_ozs/s72-c/nRF24L01%252B.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Componentes (1): Sensor de corriente SCT013</title><link>http://nanolec.blogspot.com/2015/08/componentes-sensor-de-corriente-sct013.html</link><category>componentes</category><category>electricidad</category><author>noreply@blogger.com (Isidoro Aguilar Baeza)</author><pubDate>Sun, 9 Aug 2015 03:23:00 +0200</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-155451023305910224.post-4143213747958306783</guid><description>&lt;div style="text-align: justify;"&gt;
Con la entrada de hoy comienzo una serie de entradas en las que voy a describir algunos de los &lt;b&gt;componentes&lt;/b&gt; eléctricos/electrónicos que voy a usar en mis montajes. Yo no es que sea un genio en el campo de la electrónica ni de la electricidad: lo poco que estudié fue ya hace muchos años, pero conozco los fundamentos porque siempre me ha gustado. Como curiosidad, todavía en casa de mis padres conservo un par de cajas de&amp;nbsp;&lt;a href="http://www.rosaspage.com/consultorio/electro_l.html" id="id_dabb_f73c_d1d2_8391" target="_blank"&gt;Electro-L&lt;/a&gt;&amp;nbsp;como el de la imagen:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style="text-align: center;"&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW_SP2GXMZKCJMcTRgeo8AkjvQhroN6n_qNyo0N43k9UBW-NvYveq72IOH1jvsZScyPtB5eDoVjwLDkYKCgE2gBCWYAUaHDZqYf33vXtNHSsJ-Yfsqt9mjlF8qf24OqqN8gOJm8zrqr_E/s1600/electro-l.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" data-original-height="444" data-original-width="512" height="346" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW_SP2GXMZKCJMcTRgeo8AkjvQhroN6n_qNyo0N43k9UBW-NvYveq72IOH1jvsZScyPtB5eDoVjwLDkYKCgE2gBCWYAUaHDZqYf33vXtNHSsJ-Yfsqt9mjlF8qf24OqqN8gOJm8zrqr_E/s400/electro-l.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;i&gt;(No, el de la foto no soy yo, aunque lo parezca...)&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Lo que quiero decir con esto es que voy a intentar explicar los fundamentos como para tontos, y así nos enteramos todos, incluido yo.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;span style="font-size: large;"&gt;El transformador&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Para entender el funcionamiento de nuestro sensor de corriente eléctrica, tenemos que hablar antes del&amp;nbsp;&lt;a href="https://es.m.wikipedia.org/wiki/Transformador" id="id_51a9_a26_8f6a_ad09" target="_blank"&gt;transformador&lt;/a&gt;&amp;nbsp;(enlace a Wikipedia)&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Un &lt;i&gt;transformador&lt;/i&gt; es uno de los componentes fundamentales de la distribución de la electricidad tal y como la conocemos hoy. Su fundamento es la &lt;i&gt;inducción electromagnética&lt;/i&gt;: ese famoso fenómeno que he tenido que volver a aprender este año al preguntarle a mi hija de 12 años un tema de Conocimiento del Medio que dice que al mover con rapidez un campo magnético en las cercanías de un conductor eléctrico enrollado a modo de espiral sobre un núcleo de hierro, en dicho conductor se produce una corriente eléctrica que es proporcional a la velocidad con la que muevas el campo magnético, y viceversa; que al recorrer una corriente eléctrica pulsante por dicho conductor se induce un campo magnético proporcional...&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
El transformador hace uso de &lt;u&gt;los dos efectos al mismo tiempo&lt;/u&gt;.&amp;nbsp;Básicamente son dos bobinas enrolladas sobre un núcleo común (normalmente un núcleo de hierro o ferrita en forma circular o cuadrangular). Al circular una &lt;u&gt;corriente alterna&lt;/u&gt; sobre la bobina número 1 (el &lt;i&gt;primario&lt;/i&gt;), esto genera un campo magnético que se propaga por el núcleo común, induciendo una nueva corriente en la bobina número 2 (el &lt;i&gt;secundario&lt;/i&gt;).&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;img alt="" id="id_8d43_98a9_c9db_3ec2" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgP5xzQCRbFZreqlEbkWOlFEHqMA70MPPjdJjSfceuutlnTcB095F4C54reRC1MTwN-6dZN9ImlXLoCthl5OeKb_lLeQKDlbRxgiFxbF8kQn5_akOcQFUL4Q-Dls8ncYVWAzdn9D8-FeLo/" style="height: auto; width: 391px;" title="" /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Una de las características más interesantes de este componente es que en él confluyen dos circuitos eléctricos independientes, cada uno con unas características, pero la &lt;b&gt;potencia&lt;/b&gt; se conserva (idealmente, aunque siempre puede haber alguna pérdida) en ambos circuitos. Otra de las características interesantes es que la &lt;b&gt;intensidad&lt;/b&gt; de la corriente inducida en el secundario es &lt;i&gt;inversamente proporciona&lt;/i&gt;l al número de vueltas de su bobina, y &lt;i&gt;directamente proporcional&lt;/i&gt; al número de vueltas de la bobina principal. De este modo, obtenemos las siguientes fórmulas:&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;b&gt;&lt;span style="font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;"&gt;V&lt;sub&gt;p&lt;/sub&gt; * I&lt;sub&gt;p&lt;/sub&gt; = V&lt;sub&gt;s&lt;/sub&gt; * I&lt;sub&gt;s&lt;/sub&gt;&lt;/span&gt;&lt;/b&gt; (potencia invariable)&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;b&gt;&lt;span style="font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;"&gt;N&lt;sub&gt;p&lt;/sub&gt;/N&lt;sub&gt;s&lt;/sub&gt; = I&lt;sub&gt;s&lt;/sub&gt;/I&lt;/span&gt;&lt;/b&gt;&lt;sub&gt;&lt;b&gt;&lt;span style="font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;"&gt;p&lt;/span&gt;&lt;/b&gt; &lt;/sub&gt;(proporcionalidad de las intensidades)&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Siendo V&lt;sub&gt;p&lt;/sub&gt; el voltaje del circuito primario, V&lt;sub&gt;s&lt;/sub&gt; el del secundario, N&lt;sub&gt;p&lt;/sub&gt; el número de vueltas de la bobina del primario, N&lt;sub&gt;s&lt;/sub&gt; el número de vueltas del secundario, I&lt;sub&gt;p&lt;/sub&gt; la intensidad de la corriente que circula por el circuito primario e I&lt;sub&gt;s&lt;/sub&gt; la que circula por el secundario.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Pongamos un ejemplo para comprender todo esto. Si tenéis una cierta edad, supongo que habréis conocido esos transformadores que había en nuestras casas cuando teníamos la corriente a 125V y las televisiones y otros electrodomésticos funcionaban a 220V. Estos transformadores tenían por tanto un primario cuyo V&lt;sub&gt;p&lt;/sub&gt; = 125V y un secundario cuyo V&lt;sub&gt;s&lt;/sub&gt; = 220V. Si nuestra tele tenía un consumo digamos de unos 100W, podemos calcular las intensidades de ambos circuitos porque sabemos que la potencia es (aproximadamente) la misma a ambos lados del transformador:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;span style="font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;"&gt;&lt;b&gt;P = V * I, &amp;nbsp;100W = 125V * I&lt;sub&gt;p&lt;/sub&gt; = 220V * I&lt;sub&gt;s&lt;/sub&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
Despejando, &lt;b&gt;&lt;span style="font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;"&gt;I&lt;sub&gt;p&lt;/sub&gt; = 100W / 125V = 0,8A&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
Igualmente, &lt;b&gt;&lt;span style="font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;"&gt;I&lt;sub&gt;s&lt;/sub&gt;&amp;nbsp;= 100W / 220V = 0,45A&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Vemos por tanto que la intensidad de la corriente que pasa por este secundario es inferior a la del primario mientras que el voltaje es superior, manteniéndose siempre el producto de ambos, que es la potencia, invariable.&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Podríamos también calcular el número de vueltas de cada bobina según la proporción que hemos visto antes. Supongamos que el primario tenía un &lt;i&gt;devanado&lt;/i&gt; de 1000 vueltas. ¿Cuantas vueltas tendría el secundario?&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;b&gt;&lt;span style="font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;b&gt;&lt;span style="font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;"&gt;&lt;span style="-webkit-text-size-adjust: auto; background-color: rgba(255, 255, 255, 0);"&gt;&lt;span style="text-align: center;"&gt;I&lt;/span&gt;&lt;sub style="text-align: center;"&gt;s&lt;/sub&gt;&lt;span style="text-align: center;"&gt;/I&lt;/span&gt;&lt;sub style="text-align: center;"&gt;p&lt;/sub&gt;&lt;span style="text-align: center;"&gt;&amp;nbsp;= 0,45A / 0,8A = 1000&lt;/span&gt;&lt;span style="text-align: center;"&gt;/N&lt;/span&gt;&lt;sub style="text-align: center;"&gt;s&lt;/sub&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;b&gt;&lt;span style="font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;"&gt;&lt;span style="-webkit-text-size-adjust: auto; background-color: rgba(255, 255, 255, 0);"&gt;&lt;span style="text-align: center;"&gt;Ns = 0,8A * 1000 / 0,45A = 1760 vueltas&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;span style="-webkit-text-size-adjust: auto; background-color: rgba(255, 255, 255, 0);"&gt;&lt;span style="text-align: center;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;span style="-webkit-text-size-adjust: auto; background-color: rgba(255, 255, 255, 0);"&gt;&lt;span style="text-align: center;"&gt;Vemos por tanto que, si el número de vueltas del secundario es superior al del primario, aumenta proporcionalmente el voltaje y disminuye inversamente la intensidad. De hecho, si tuviéramos el mismo número de vueltas en ambos lados, ambos circuitos,tendrían las mismas características, con la diferencia de que serían dos circuitos aislados.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;span style="-webkit-text-size-adjust: auto; background-color: rgba(255, 255, 255, 0);"&gt;&lt;span style="text-align: center;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;span style="-webkit-text-size-adjust: auto; background-color: rgba(255, 255, 255, 0);"&gt;&lt;span style="text-align: center;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;El sensor de corriente&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: left;"&gt;
&lt;span style="-webkit-text-size-adjust: auto; background-color: rgba(255, 255, 255, 0);"&gt;&lt;span style="text-align: center;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Bueno, pues ya está bien de teoría. El componente que nos traemos entre manos, el sensor de corriente (también llamada pinza amperimétrica en algunos sitios) es un tipo específico de transformador, con ciertas características particulares:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;El núcleo del transformador se puede abrir y cerrar, para poder situarlo alrededor de un conductor sin tener que desconectarlo.&lt;/li&gt;
&lt;li&gt;El devanado primario lo constituye el conductor a medir al pasar por dentro del núcleo, y tiene por tanto una sola vuelta.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
El resto de las características (y las fórmulas matemáticas empleadas) son exactamente iguales que en el resto de los transformadores.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
En la imagen pongo el que yo he comprado:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;img alt="" id="id_5dd0_f7f2_4487_2e7c" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjL6ItZXsTj3O3fzcn1KnobY_3XuE11YBxWm2gMu4M2CxjB40VXQkPCQ30LpbO6M3-Zm8kIG1VPA0f0KZclJ4xLJ7KBp3aLcRzNROneBVnx9y8-sLjWYAUGu8yqpF8Ucv-hSGSlZwFpsgs/" style="display: block; float: left; height: auto; width: 317px;" title="" /&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Se trata de un sensor &lt;b&gt;SCT013&lt;/b&gt; de la marca &lt;b&gt;yhdc&lt;/b&gt; (chino) que se puede comprar en muchas partes. Yo el mío lo compré en Aliexpress y me costó unos 5€ puesto en casa. El enlace al producto en cuestión es el siguiente:&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href="http://www.aliexpress.com/item/Free-Shipping-New-Non-invasive-0-100A-AC-Sensor-Split-Core-Current-Transformer-SCT-013-000/32264516329.html" target="_blank"&gt;http://www.aliexpress.com/item/Free-Shipping-New-Non-invasive-0-100A-AC-Sensor-Split-Core-Current-Transformer-SCT-013-000/32264516329.html&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Este sensor admite una intensidad máxima de &lt;b&gt;100A&lt;/b&gt; en el primario, transformándola en una intensidad máxima de &lt;b&gt;50mA&lt;/b&gt; en el secundario. Como hemos dicho, el primario tendrá una única vuelta, por lo que aplicando la fórmula de proporcionalidad obtenemos que el secundario esta formado por una bobina con &lt;b&gt;2000&lt;/b&gt; vueltas en su devanado.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;b&gt;&lt;span style="font-family: &amp;quot;courier new&amp;quot; , &amp;quot;courier&amp;quot; , monospace;"&gt;100A / 0,05A = 2000 / 1&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
El sensor viene con un cable de aproximadamente un metro y con un conector de tipo &lt;i&gt;minijack&lt;/i&gt; en su extremo, con tres contactos (minijack audio stereo) de los cuales el intermedio no tiene conexión. El secundario por tanto se accede por medio de los otros dos contactos.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
El sensor es pasivo (no requiere alimentación) y su funcionamiento es lógicamente muy sencillo si sabemos cómo funciona un transformador: en el primario (el conductor a medir) se aplica una corriente alterna con un consumo determinado y como resultado tenemos la &lt;b&gt;intensidad a medir&lt;/b&gt;. Dicha corriente genera otra corriente inducida en el secundario que tiene una intensidad 2000 veces menor. Lógicamente, lo que nos interesa no es obtener una intensidad proporcional, sino un voltaje proporcional que podamos medir más fácilmente, pero eso es otra historia y ya la veremos cuando conectemos el sensor al arduino.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Por otra parte, una vez calculada la intensidad en el primario, calcular la potencia o consumo eléctrico es tan fácil como multiplicarla por el voltaje de entrada (normalmente 230V).&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Como ya digo, este artículo es tan sólo una introducción al funcionamiento de este componente. Su utilización practica la veremos más adelante, mediante un montaje con arduino.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW_SP2GXMZKCJMcTRgeo8AkjvQhroN6n_qNyo0N43k9UBW-NvYveq72IOH1jvsZScyPtB5eDoVjwLDkYKCgE2gBCWYAUaHDZqYf33vXtNHSsJ-Yfsqt9mjlF8qf24OqqN8gOJm8zrqr_E/s72-c/electro-l.jpg" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Servers Ultimate Pro gratis hoy en Amazon</title><link>http://nanolec.blogspot.com/2015/08/servers-ultimate-pro-gratis-hoy-en.html</link><category>android</category><author>noreply@blogger.com (Isidoro Aguilar Baeza)</author><pubDate>Wed, 5 Aug 2015 15:49:00 +0200</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-155451023305910224.post-8652644805191236015</guid><description>&lt;p dir="ltr"&gt;Si te parece muy complicado instalarte un servidor en tu m&amp;#243;vil, hay aplicaciones que te permiten tener uno o varios servicios directamente desde Android: FTP, servidor web, repositorios, etc.&lt;/p&gt;
&lt;p dir="ltr"&gt;Entrando hoy por casualidad en la tienda de Amazon, he visto que la aplicaci&amp;#243;n gratuita del d&amp;#237;a es Servers Ultimate Pro:&lt;/p&gt;
&lt;p dir="ltr"&gt;&lt;a href="http://www.amazon.es/Ice-Cold-Apps-Servers-Ultimate/dp/B00E00C70C"&gt;http://&lt;/a&gt;&lt;a href="http://www.amazon.es/Ice-Cold-Apps-Servers-Ultimate/dp/B00E00C70C"&gt;www.amazon.es&lt;/a&gt;&lt;a href="http://www.amazon.es/Ice-Cold-Apps-Servers-Ultimate/dp/B00E00C70C"&gt;/&lt;/a&gt;&lt;a href="http://www.amazon.es/Ice-Cold-Apps-Servers-Ultimate/dp/B00E00C70C"&gt;Ice-&lt;/a&gt;&lt;a href="http://www.amazon.es/Ice-Cold-Apps-Servers-Ultimate/dp/B00E00C70C"&gt;Cold-Apps-&lt;/a&gt;&lt;a href="http://www.amazon.es/Ice-Cold-Apps-Servers-Ultimate/dp/B00E00C70C"&gt;Servers-&lt;/a&gt;&lt;a href="http://www.amazon.es/Ice-Cold-Apps-Servers-Ultimate/dp/B00E00C70C"&gt;Ultimate&lt;/a&gt;&lt;a href="http://www.amazon.es/Ice-Cold-Apps-Servers-Ultimate/dp/B00E00C70C"&gt;/&lt;/a&gt;&lt;a href="http://www.amazon.es/Ice-Cold-Apps-Servers-Ultimate/dp/B00E00C70C"&gt;dp&lt;/a&gt;&lt;a href="http://www.amazon.es/Ice-Cold-Apps-Servers-Ultimate/dp/B00E00C70C"&gt;/B00E00C70C&lt;/a&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt;Yo me la he bajado, para un futuro, merece la pena.&lt;/p&gt;
</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Un servidor en tu móvil (y II)</title><link>http://nanolec.blogspot.com/2015/07/un-servidor-en-tu-movil-y-ii.html</link><category>android</category><category>linux</category><author>noreply@blogger.com (Isidoro Aguilar Baeza)</author><pubDate>Tue, 14 Jul 2015 16:27:00 +0200</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-155451023305910224.post-7014748807707414407</guid><description>&lt;div style="text-align: justify;"&gt;
En el artículo anterior [&lt;a href="http://nanolec.blogspot.com.es/2015/07/un-servidor-en-tu-movil-i.html"&gt;Un servidor en tu móvil (I)&lt;/a&gt;], vimos cómo montar todo un servidor Debian Linux en un teléfono móvil con Android sin una potencia exagerada. Vamos a continuar hoy donde lo dejamos, para configurar ciertas cosas que nos pueden venir bien.&lt;/div&gt;
&lt;br /&gt;
&lt;h4&gt;
Pantalla de configuración&lt;/h4&gt;
&lt;div style="text-align: justify;"&gt;
A diferencia de la pantalla de "propiedades" que vimos en el artículo anterior, donde podíamos seleccionar la distribución de linux y demás, a la pantalla de configuración de &lt;a href="https://play.google.com/store/apps/details?id=ru.meefik.linuxdeploy" target="_blank"&gt;Linux Deploy&lt;/a&gt; se accede pulsando la tecla de menú de Android. Nos aparece el menú de la aplicación donde seleccionamos "configuración" o "settings":&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjum91yZOzCpfrHSZaMjAsvbSSW1nwoSuhdDUPP8d6DdcFND286rpphj7ecIaSvegMtnzsaXe9ZHduADzynCD9oc5DjO3E8eYhQy3flP72dk_y584q_NZTV6YTXmVCegqzhVHbis9wACrI/s1600/Screenshot_2015-07-14-15-42-00.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: left;"&gt;&lt;img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjum91yZOzCpfrHSZaMjAsvbSSW1nwoSuhdDUPP8d6DdcFND286rpphj7ecIaSvegMtnzsaXe9ZHduADzynCD9oc5DjO3E8eYhQy3flP72dk_y584q_NZTV6YTXmVCegqzhVHbis9wACrI/s320/Screenshot_2015-07-14-15-42-00.png" width="179" /&gt;&lt;/a&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9Z6x2dowBSO73583opDNh0lIEl0yFljTyZR13arXQAH8_E_Q7jsJekhM6QumQNSGREB7Y4AXV7-agwFrmNA0ZhHR0Rk4w0vWZfRtaOvIoIy3TVZb0NhdIfkPiVgdbuGt1lAM1sP3FGUA/s1600/Screenshot_2015-07-14-15-42-12.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em; text-align: right;"&gt;&lt;img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg9Z6x2dowBSO73583opDNh0lIEl0yFljTyZR13arXQAH8_E_Q7jsJekhM6QumQNSGREB7Y4AXV7-agwFrmNA0ZhHR0Rk4w0vWZfRtaOvIoIy3TVZb0NhdIfkPiVgdbuGt1lAM1sP3FGUA/s320/Screenshot_2015-07-14-15-42-12.png" width="179" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="margin-left: 1em; margin-right: 1em; text-align: left;"&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Uno de los principales ajustes que podemos hacer, lógicamente, es poner el idioma en español. Por defecto, al instalar la aplicación nos lo pondrá en inglés. Además, podemos cambiar el tema entre el oscuro y el claro.&lt;/div&gt;
&lt;br /&gt;
Pero lo que más tenemos que tener en cuenta son los siguientes puntos:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li style="text-align: justify;"&gt;Por defecto, la aplicación está configurada para que la pantalla se quede encendida todo el tiempo mientras que el Linux esté funcionando. Esta es la primera opción, que en español se llama "&lt;b&gt;bloquear pantalla&lt;/b&gt;". Yo os recomendaría que desmarcaseis esta opción, porque de lo contrario terminaremos con un teléfono que se calienta como un demonio y una pantalla gastada, si es que realmente vamos a utilizar este invento como un servidor.&lt;br /&gt;¿Que por qué la aplicación viene configurada así? Pues muy fácil: Android hace una gestión del procesador de manera que cuando la pantalla se apaga es porque realmente no vamos a utilizar el teléfono, y por tanto la mayoría de las aplicaciones se quedan suspendidas o con un modo de funcionamiento de "bajo consumo". El procesador entra en modo "sleep" y sólo se despierta para hacer ciertas tareas urgentes: atender a las señales provenientes de la red de telefonía, mostrar notificaciones, etc. El resultado que yo observé al principio es que, si desmarcas esta opción, el Linux sigue funcionando, pero muuuuuuuyyyyyyyy leeeeeeennnntttooooooooo.&lt;br /&gt;De todos modos, os insisto en que desmarquéis la opción y ahora vemos como solucionar este problema.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;&lt;b&gt;Bloquear Wi-Fi&lt;/b&gt;.&lt;br /&gt;Esta opción hay que dejarla marcada, para que no se nos desconecte el servidor de la red.&lt;/li&gt;
&lt;li style="text-align: justify;"&gt;&lt;b&gt;Autoarranque&lt;/b&gt;.&lt;br /&gt;Marcando esta opción, cada vez que arranquemos el teléfono se nos iniciará nuestro servidor Linux, con lo cual es muy recomendable mantenerla marcada.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
Como mantener el procesador despierto&lt;/h4&gt;
&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;
Como hemos visto antes, por defecto Android pone en modo "sleep" al procesador cuando la pantalla está apagada, y nosotros no queremos tener la pantalla siempre encendida para que funcione bien nuestro servidor.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Hay una pequeña aplicación que nos permite evitar que el procesador se duerma y se denomina "RedEye Stay Awake". Su versión gratuíta, con algo de publicidad puede descargarse aquí:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://play.google.com/store/apps/details?id=com.binarymagi.redeye.free" target="_blank"&gt;&lt;img border="0" height="68" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0P2G32mYYwDHHUoB-JsRwVci5W35f08Q5VPC55UCHCjAFm6sibfYwB3zjWeGkClD_OUXzK-KMhhI4odlzxaQBvLhmXIT_kIj3hkxIjJ9EISZ4DUgLTfGyYV47SZVARxxBKfhlL_7B8uw/s200/playstore.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
Como su nombre indica, esta aplicación le pone los "ojos rojos" al procesador porque no le deja dormir, y hay varios métodos para hacerlo. Podemos elegir el método en la opción "awake level":&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzDgJMbmlrmn3B4sLauGPcx1f-GaYgXK6BxwpNbDeKOCj6az_Efh_RRLCHVLrZdXS3jpROIw4cvbbsEYaOUtTat5Z4bWITjcv4_9bFk_QNTW3YhH-rsctoW0x816SubUqdPLZSV6ywJqc/s1600/Screenshot_2015-07-14-16-10-22.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzDgJMbmlrmn3B4sLauGPcx1f-GaYgXK6BxwpNbDeKOCj6az_Efh_RRLCHVLrZdXS3jpROIw4cvbbsEYaOUtTat5Z4bWITjcv4_9bFk_QNTW3YhH-rsctoW0x816SubUqdPLZSV6ywJqc/s320/Screenshot_2015-07-14-16-10-22.png" width="180" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
El método que debemos elegir es "CPU awake only", porque todos los demás mantendrán la pantalla encendida en mayor o menor medida.&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFJpbeAaedhqPhkPElf_iNdksWckBWm5ljnBZiRgemdazBfyG6RotJoMBjRphkiNGyTC_NndFtUBaSitRTFz6NsLU3rDv3J1teH12sCLj4ZQY69rdazmAC60XWcOCGamriT071VL1FZDM/s1600/Screenshot_2015-07-14-16-10-34.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFJpbeAaedhqPhkPElf_iNdksWckBWm5ljnBZiRgemdazBfyG6RotJoMBjRphkiNGyTC_NndFtUBaSitRTFz6NsLU3rDv3J1teH12sCLj4ZQY69rdazmAC60XWcOCGamriT071VL1FZDM/s320/Screenshot_2015-07-14-16-10-34.png" width="180" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
Otras opciones que debemos seleccionar son las que se ven en esta pantalla: "start at boot" para que la aplicación se inicie al arrancar el teléfono y no nos tengamos que preocupar por iniciarlo y "enable at startup" para que se active el mantener despierto al procesador al iniciar la aplicación. De lo contrario necesitaríamos pulsar sobre el icono de la barra de notificaciones para activar este modo la primera vez.&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: justify;"&gt;
Una vez que tenemos todo así configurado ya no tenemos que preocuparnos porque se inicie correctamente el servidor. Tendremos un servidor que se inicia cuando encendemos el teléfono y además lo tenemos configurado de manera que no duerma nunca.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h4&gt;
Iniciando los servicios automáticamente&lt;/h4&gt;
&lt;div style="text-align: justify;"&gt;
Por último vamos a ver cómo configurar nuestro Linux para que los servicios que tengamos instalados se arranquen correctamente.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Supongamos que instalamos un servicio como Apache o MySQL. Al instalar los paquetes con las herramientas estándar como apt-get o dpkg, se nos van a crear los scripts de inicio de los servicios como es normal, de manera que podemos iniciarlos a mano con el comando "service":&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;gt; service apache2 start&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;gt; service apache2 stop&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;...&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Sin embargo, si reiniciamos el Linux observaremos que los servicios no se inician automáticamente..&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Inicialmente se me ocurrió instalar el comando rcconf (&lt;span style="font-family: Courier New, Courier, monospace;"&gt;apt-get install rcconf&lt;/span&gt;) que yo he usado otras veces. Se trata de una pequeña utilidad que nos permite activar o desactivar el arranque automático de los servicios instalados, de una manera muy gráfica. Pero fue en vano: a pesar de que los servicios están en teoría activados, la realidad es que no se inician en el inicio del sistema.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
La solución es la siguiente: dentro de la pantalla de "propiedades" de Linux Deploy hay una opción que se llama "Scripts personalizados". Hay que activar esta opción y después se nos activa otra entrada que dice "Lista de scripts". Pulsando sobre esta opción nos aparece la siguiente pantalla:&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLtpaPEI_LFs2EUlD1VvvbiLViq4gIMV8E80O2Mi_anX4z3cMPXsvbSD6kqXicB3qCLII1Lk_WXlAKfK1CrkQMkkv6qgl9KgFvrynCdeSOcxkcq1v_HWl5Kkb56gr7Jmzwx6QFOR6egkE/s1600/Screenshot_2015-07-14-16-23-20.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLtpaPEI_LFs2EUlD1VvvbiLViq4gIMV8E80O2Mi_anX4z3cMPXsvbSD6kqXicB3qCLII1Lk_WXlAKfK1CrkQMkkv6qgl9KgFvrynCdeSOcxkcq1v_HWl5Kkb56gr7Jmzwx6QFOR6egkE/s320/Screenshot_2015-07-14-16-23-20.png" width="180" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
La pantalla no es más que una lista de los servicios que queremos iniciar automáticamente. Pulsando la tecla de menú podemos dar de alta, modificar o dar de baja elementos de la lista. Cada elemento de la lista debe ser la ruta al script del servicio. Concretamente vemos en la pantalla que yo tengo puestos tres servicios en arranque automático: MySQL, Apache y el cron.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Y esto es todo de momento. Más adelante veremos cómo instalar ciertos servicios en nuestro flamante servidor.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjum91yZOzCpfrHSZaMjAsvbSSW1nwoSuhdDUPP8d6DdcFND286rpphj7ecIaSvegMtnzsaXe9ZHduADzynCD9oc5DjO3E8eYhQy3flP72dk_y584q_NZTV6YTXmVCegqzhVHbis9wACrI/s72-c/Screenshot_2015-07-14-15-42-00.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Un servidor en tu móvil (I)</title><link>http://nanolec.blogspot.com/2015/07/un-servidor-en-tu-movil-i.html</link><category>android</category><category>linux</category><author>noreply@blogger.com (Isidoro Aguilar Baeza)</author><pubDate>Sun, 5 Jul 2015 18:35:00 +0200</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-155451023305910224.post-3953950221416872946</guid><description>&lt;div style="text-align: justify;"&gt;
¿Cuántos de vosotros tiene olvidado en un cajón un móvil que ya no usa?&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Con el ritmo de los tiempos y el consumismo, vamos almacenando (o tirando) piezas de tecnología que hace dos años (o menos) se nos antojaban como la mayor maravilla del mundo, hasta que salió su sucesor. Salen nuevos programas y tu móvil ya no puede con ellos, tienes que desinstalar y limpiar si te quieres instalar el último juego, vas acumulando ficheros, programas, fotos, lo que sea.... y de repente: ¡anda! ¡si ya ha salido el S6! Y va una operadora y te lo vende a un módico precio que tú estás dispuesto a pagar...&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
La cosa es que tu viejo móvil acaba en un cajón (o en las manos de tu hija o de tu sobrino), mientras que tú disfutas de otro aparato que tiene mucha más potencia de lo que realmente necesitas.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Pues la entrada de hoy es una respuesta a la siguiente pregunta: ¿qué utilidad le puedo dar a mi antiguo móvil?&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://cdn2.gsmarena.com/vv/pics/sony/sony-xperia-p-all-colors.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: justify;"&gt;&lt;img border="0" src="http://cdn2.gsmarena.com/vv/pics/sony/sony-xperia-p-all-colors.jpg" height="200" width="161" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
Resulta que en términos de potencia, estamos tirando a la basura o al abandono verdaderos ordenadores, que son mucho más potentes que los ordenadores de escritorio que teníamos hace unos años. Yo por ejemplo, tenía olvidado un Sony Xperia P que había dejado de usar porque la batería no intercambiable que traía me duraba unas dos horas y lo cambié por un teléfono chino que me va mil veces mejor. Pero resulta que dicho Xperia es todo un equipo con un procesador de doble núcleo, 1 GB de RAM y 16GB de almacenamiento interno. Más que suficiente para montar un pequeño servidor doméstico.&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;
&lt;br /&gt;
Os cuento qué es lo que hice:&lt;br /&gt;
&lt;br /&gt;
Resulta que Android es, en gran parte, un sistema basado en Linux. No es que sea un Linux completo, pero posee un núcleo con las funcionalidades básicas.&lt;br /&gt;
En principio, podríamos pensar que podríamos utilizar Android como servidor Linux, y en cierto modo es así: existen aplicaciones (por ejemplo &lt;a href="https://play.google.com/store/apps/details?id=com.icecoldapps.serversultimate" target="_blank"&gt;Servers Ultimate&lt;/a&gt;) que nos permiten montar servidores desde el propio Android... pero sigue sin ser un servidor completo.&lt;br /&gt;
&lt;br /&gt;
Lo que yo quería era tener una distribución completa de Linux en el móvil. Para esto hay principalmente dos programas disponibles en el Play Store:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://play.google.com/store/apps/details?id=com.zpwebsites.linuxonandroid" target="_blank"&gt;Complete Linux Installer&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://play.google.com/store/apps/details?id=ru.meefik.linuxdeploy" target="_blank"&gt;Linux Deploy&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;br /&gt;
Ambas parten del mismo principio: establecen un "&lt;a href="https://es.wikipedia.org/wiki/Chroot" target="_blank"&gt;chroot&lt;/a&gt;", que no es más que un entorno virtual independiente dentro del sistema de ficheros de un sistema linux, en el que podemos instalar lo que queramos, como si se tratase de otra máquina. No es exactamente el concepto de "máquina virtual", porque realmente no hay nada que emular, se trata de la misma máquina ejecutando otro sistema operativo, independiente del principal. Se asemeja mucho al concepto de "jaula" como se conoce en FreeBSD.&lt;br /&gt;
&lt;br /&gt;
Pues bien, resulta que ambas aplicaciones nos permiten establecer un "chroot" dentro del sistema de ficheros de Android, sobre el cual instalan una distribución completa de Linux: Debian, Ubuntu, Gentoo, Kali, OpenSUSE y muchas otras.&lt;br /&gt;
&lt;br /&gt;
Yo he probado ambas como digo, pero me quedo con la segunda: Linux Deploy. Es mucho más versátil, falla menos y me permite hacer todo lo que le pido. A continuación os cuento los pasos principales para poner en marcha un sistema Linux completo en vuestro Android con Linux Deploy:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Instalamos la aplicación&lt;/b&gt;.&lt;br /&gt;Este paso está claro, se trata de una aplicación gratuita y se encuentra en el Play Store en el enlace que os he puesto arriba. Sólo una advertencia: vuestro teléfono debe estar &lt;b&gt;&lt;i&gt;rooteado&lt;/i&gt;&lt;/b&gt;, de lo contrario no funcionará.&lt;br /&gt;Otra cosa a tener en cuenta es la memoria. Si tenéis el teléfono cargado de aplicaciones, vais a tener problemas. Yo lo que hice fue restablecer el teléfono de fábrica y dejarlo con el mínimo de aplicaciones: de hecho le desactivé muchas aplicaciones de Google que están cargando siempre la memoria.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Elegimos nuestra distribución&lt;/b&gt;.&lt;br /&gt;Para ello, pulsamos sobre el icono inferior derecho de la pantalla principal del programa:&lt;br /&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2LZmlPGrkMMq4y-Y38Hfb2kirmcx08gXsbgHa4FOhjBPa13vmtvARAUbHUE0cWnHWdn0jToyOPpdKHUWgOdLXZisjfSDxGooIH80X1XVUT2ehuyK61SLFNyGYn2dOJ_F6pKThavKL8xU/s1600/Screenshot_2015-07-05-18-00-45.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img alt="" border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2LZmlPGrkMMq4y-Y38Hfb2kirmcx08gXsbgHa4FOhjBPa13vmtvARAUbHUE0cWnHWdn0jToyOPpdKHUWgOdLXZisjfSDxGooIH80X1XVUT2ehuyK61SLFNyGYn2dOJ_F6pKThavKL8xU/s200/Screenshot_2015-07-05-18-00-45.png" title="Pantalla principal" width="112" /&gt;&lt;/a&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhe-5kMhyphenhyphene38Eep94TfsiRIMdMz9h6JbRnP13_GBsp1xb8HIOEPpBodPbcaf5AquAFwMr7RmNN6Oe_9qZQccfdjpc4UDOVZaco9d9Z6Hb9fmEL8R0CMNzPXb9MJVSycdqMGH8-q2i3R5Js/s1600/Screenshot_2015-07-05-18-14-21.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img alt="" border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhe-5kMhyphenhyphene38Eep94TfsiRIMdMz9h6JbRnP13_GBsp1xb8HIOEPpBodPbcaf5AquAFwMr7RmNN6Oe_9qZQccfdjpc4UDOVZaco9d9Z6Hb9fmEL8R0CMNzPXb9MJVSycdqMGH8-q2i3R5Js/s200/Screenshot_2015-07-05-18-14-21.png" title="Selección de la distribución" width="112" /&gt;&lt;/a&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNoqoUoXn4D89kbcJO79wVUQNB1gwDa9d8AA3RiZAjcnhUF0fQICspyZDmM4GtpOf4EWAMqlVcNGzB90wWE70MVDJWTDOQMQcr95hzJcyf_cR-cUUJmoJs85KiLEfKVYWYgZ8SwDOzWnU/s1600/Screenshot_2015-07-05-18-16-25.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"&gt;&lt;img alt="" border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNoqoUoXn4D89kbcJO79wVUQNB1gwDa9d8AA3RiZAjcnhUF0fQICspyZDmM4GtpOf4EWAMqlVcNGzB90wWE70MVDJWTDOQMQcr95hzJcyf_cR-cUUJmoJs85KiLEfKVYWYgZ8SwDOzWnU/s200/Screenshot_2015-07-05-18-16-25.png" title="Selección de la versión" width="112" /&gt;&lt;/a&gt;&lt;br /&gt;Una vez que entramos en esta ventana, podemos seleccionar la distribución a instalar. Como podéis ver hay bastantes para elegir. Yo instalé Debian, a la que estoy bastante acostumbrado.&lt;br /&gt;&lt;br /&gt;Lo siguiente es seleccionar la versión de la distribución. Como se puede ver, yo he cogido el canal "stable", que en la fecha actual (Julio 2015) corresponde a la versión 8 de Debian, también llamada "Jessie".&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Configuración adicional&lt;/b&gt;.&lt;br /&gt;Sin salir de esta pantalla, elegiremos también las siguientes opciones, dejando el resto tal cual:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;u&gt;Seleccionar componentes&lt;/u&gt;: dejaremos marcado sólo "&lt;b&gt;servidor SSH&lt;/b&gt;". El resto lo vamos a desmarcar porque en principio no nos va a hacer falta. Si lo que queremos es montar un servidor, no nos hace falta para nada un "ambiente de escritorio", ni necesitamos un servidor VNC ni por supuesto un servidor X. Todas esas opciones tienen como cometido acceder al Linux de forma gráfica. Nosotros somos más frikis y lo único que queremos es poder conectarnos desde un terminal de comandos.&lt;/li&gt;
&lt;li&gt;Desmarcamos la opción "&lt;u&gt;GUI&lt;/u&gt;".&lt;/li&gt;
&lt;li&gt;&lt;u&gt;Localización&lt;/u&gt;: la ponemos en "es_ES.UTF8, para que el sistema nos hable en nuestro idioma.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;b&gt;Instalación&lt;/b&gt;.&lt;br /&gt;Una vez que hemos realizado la configuración indicada, pulsamos la primera entrada de esta pantalla, que en español dice "Instalar". Al hacer esto, la aplicación va a hacer lo siguiente:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;Va a crear un fichero "linux.img" en nuestra tarjeta SD o almacenamiento interno. El tamaño dependerá de la distribución seleccionada. Para Debian, en principio el tamaño será de 4GB. Si queremos otro tamaño, tenemos que tener en cuenta que la tarjeta SD normalmente está formateada en FAT32, que tiene un límite de tamaño de 4GB para los ficheros, con lo que deberíamos crear una partición ext2, ext3 o ext4 y cambiar el tipo de instalación. A mí concretamente con 4GB me sobran.&lt;/li&gt;
&lt;li&gt;Se va a descargar la distribución y versión seleccionadas (imprescindible tener el móvil conectado a la WIFI).&lt;/li&gt;
&lt;li&gt;Va a instalar una serie de paquetes básicos necesarios para las opciones seleccionadas.&lt;/li&gt;
&lt;li&gt;Una vez que está todo terminado, lo indicará por pantalla.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;b&gt;Arrancamos nuestro Linux&lt;/b&gt;.&lt;br /&gt;Una vez instalada la distribución, podemos pasar a arrancarla. Para ello pulsaremos el botón "Start" o "Iniciar" de la pantalla principal de la aplicación.&lt;br /&gt;Ya tenemos el Linux funcionando. Podemos conectarnos desde nuestro ordenador abriendo un terminal SSH y conectándonos a la dirección IP del teléfono (la muestra en la pantalla principal).&lt;br /&gt;&lt;br /&gt;El usuario por defecto es "android", y su contraseña "changeme". Dicho usuario tiene permisos de "sudoers", con lo que mediante el comando "sudo" puede ejecutar instrucciones como root. Os recomiendo que la primera instrucción que ejecutéis sea para cambiar la contraseña del usuario "android":&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;gt; sudo passwd android&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
Y esto es todo por hoy. Ya tenemos nuestro servidor instalado y funcionando. En la próxima entrada veremos cómo optimizar el funcionamiento de todo esto.&lt;br /&gt;
&lt;ol&gt;
&lt;/ol&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="text-align: justify;"&gt;
&lt;br /&gt;&lt;/div&gt;
</description><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2LZmlPGrkMMq4y-Y38Hfb2kirmcx08gXsbgHa4FOhjBPa13vmtvARAUbHUE0cWnHWdn0jToyOPpdKHUWgOdLXZisjfSDxGooIH80X1XVUT2ehuyK61SLFNyGYn2dOJ_F6pKThavKL8xU/s72-c/Screenshot_2015-07-05-18-00-45.png" width="72"/><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>A modo de presentación</title><link>http://nanolec.blogspot.com/2015/07/a-modo-de-presentacion.html</link><author>noreply@blogger.com (Isidoro Aguilar Baeza)</author><pubDate>Thu, 2 Jul 2015 19:04:00 +0200</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-155451023305910224.post-3860033210248364243</guid><description>&lt;p dir="ltr"&gt;Muy buenas.&lt;/p&gt;
&lt;p dir="ltr"&gt;Pues nada, s&amp;#243;lo unas pocas palabras a modo de introducci&amp;#243;n del blog.&lt;/p&gt;
&lt;p dir="ltr"&gt;Me llamo Isidoro y soy de Huelva, y me gustan los aparatos y la electr&amp;#243;nica desde que tengo uso de raz&amp;#243;n, por influencia de mi padre.&lt;/p&gt;
&lt;p dir="ltr"&gt;A los 12 a&amp;#241;os me regalaron un ZX Spectrum y ese fue el detonante de mi gran afici&amp;#243;n por la inform&amp;#225;tica, que posteriormente se convirti&amp;#243; en mi carrera y hoy mi trabajo.&lt;/p&gt;
&lt;p dir="ltr"&gt;A lo largo de los a&amp;#241;os he programado mucho, y en muchos lenguajes: Basic, c&amp;#243;digo m&amp;#225;quina de Z80 y 8086, C, C++, Modula 2, Cobol, Delphi, PowerBuilder, Visual C, Clipper, Java, JavaScript, PHP, C#, y seguramente alg&amp;#250;n otro que me dejo en el tintero...&lt;/p&gt;
&lt;p dir="ltr"&gt;Pero este blog en principio no va de programaci&amp;#243;n, aunque seguramente algo saldr&amp;#225; por el camino. Mi intenci&amp;#243;n es que este blog contenga una serie de "recetas" relacionadas con los "peque&amp;#241;os dispositivos" que hoy d&amp;#237;a nos invaden, la inform&amp;#225;tica de las cosas peque&amp;#241;as: arduino, android, algo de linux, montajes de peque&amp;#241;os servidores y cosas as&amp;#237;... La idea es documentar aqu&amp;#237; los montajes que voy haciendo (o que ya tengo hechos) de manera que luego no tenga que decir: "&amp;#191;Y c&amp;#243;mo mont&amp;#233; esto que ya no me acuerdo?". De camino, espero que a alguien m&amp;#225;s le sirva de "inspiraci&amp;#243;n".&lt;/p&gt;
&lt;p dir="ltr"&gt;Pues nada m&amp;#225;s, que se&amp;#225;is bienvenidos y espero poder tener tiempo para ir escribiendo de vez en cuando.&lt;/p&gt;
</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item></channel></rss>