<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[ChuJALT - Anduino, Nodemcu, Wemos]]></title>
		<link>https://chujalt.com/</link>
		<description><![CDATA[ChuJALT - https://chujalt.com]]></description>
		<pubDate>Thu, 05 Mar 2026 14:04:35 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[Wemos mini, controlar servo via wifi.]]></title>
			<link>https://chujalt.com/thread-19.html</link>
			<pubDate>Sat, 06 Mar 2021 11:16:36 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://chujalt.com/member.php?action=profile&uid=1">chujalt</a>]]></dc:creator>
			<guid isPermaLink="false">https://chujalt.com/thread-19.html</guid>
			<description><![CDATA[Saludos.<br />
<br />
Recientemente he adquirido una placa Wemos mini D1 y me parece increíble que con lo pequeña que es, lo funcional que resulta, con wifi integrado y todo (ESP8266). Fijaros en la foto de mas abajo su tamaño, el cable conectado a ella es un micro-usb. El precio también es muy atractivo, por unos 3 € la podéis encontrar.<br />
<br />
Con ella vamos a controlar el giro de un servo vía wifi desde una página web.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Material necesario:</span><br />
<ul class="mycode_list"><li>Una placa Wemos mini D1.<br />
</li>
<li>Un Micro Servo 9G<br />
</li>
</ul>
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/wemosmini.jpg" loading="lazy"  alt="[Imagen: wemosmini.jpg]" class="mycode_img img-responsive" /></div>
<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/servo.jpg" loading="lazy"  alt="[Imagen: servo.jpg]" class="mycode_img img-responsive" /></div>
<br />
<br />
<br />
<br />
<div style="text-align: left;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b">Conexiones:</span></div>
<br />
<div style="text-align: left;" class="mycode_align"><ul class="mycode_list"><li>Pin cable amarillo del servo al pin D7 de la Wemos mini.<br />
</li>
<li>Pin cable rojo del servo al pin 5v de la Wemos mini.<br />
</li>
<li>Pin cable marrón del servo al pin GND de la Wemos mini.<br />
</li>
</ul>
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #3333ff;" class="mycode_color">Página web para controlar el servo:</span></span><br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//ES" "http://www.w3.org/TR/html4/strict.dtd"&gt;<br />
&lt;html&gt;<br />
  &lt;head&gt;<br />
    &lt;meta content="text/html; charset=ISO-8859-1" http-equiv="content-type"&gt;<br />
    &lt;title&gt;Control servo&lt;/title&gt;<br />
&lt;style type="text/css"&gt;<br />
#juan {<br />
    position: absolute;<br />
    left: 50%;<br />
    top: 50%;<br />
    transform: translate(-50%, -50%);<br />
    -webkit-transform: translate(-50%, -50%);<br />
}<br />
&lt;/style&gt;<br />
  &lt;/head&gt;<br />
  &lt;body&gt;<br />
&lt;div id="juan"&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=000';" value="000" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=005';" value="005" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=010';" value="010" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=015';" value="015" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=020';" value="020" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=025';" value="025" /&gt;&lt;/br&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=030';" value="030" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=035';" value="035" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=040';" value="040" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=045';" value="045" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=050';" value="050" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=055';" value="055" /&gt;&lt;/br&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=060';" value="060" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=065';" value="065" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=070';" value="070" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=075';" value="075" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=080';" value="080" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=085';" value="085" /&gt;&lt;/br&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=090';" value="090" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=095';" value="095" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=100';" value="100" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=105';" value="105" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=110';" value="110" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=115';" value="115" /&gt;&lt;/br&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=120';" value="120" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=125';" value="125" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=130';" value="130" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=135';" value="135" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=140';" value="140" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=145';" value="145" /&gt;&lt;/br&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=150';" value="150" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=155';" value="155" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=160';" value="160" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=165';" value="165" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=170';" value="170" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=175';" value="175" /&gt;&lt;/br&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=180';" value="180" /&gt;<br />
 &lt;/div&gt;<br />
<br />
&lt;/body&gt;<br />
&lt;/html&gt;</code></div></div><br />
<br />
<br />
Imagen de la página web:<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/grados.png" loading="lazy"  alt="[Imagen: grados.png]" class="mycode_img img-responsive" /></div>
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #3333ff;" class="mycode_color">Código Wemos mini:</span></span><br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>//Conexiones<br />
//Amarillo: D7<br />
//Rojo: 3V<br />
//Marrón: GND<br />
#include &lt;Servo.h&gt; <br />
#include &lt;ESP8266WiFi.h&gt;<br />
const int servo_pin = D7; <br />
Servo myservo;  <br />
unsigned int old_value;<br />
const char* ssid = "Tu_ssid";<br />
const char* password = "Tu_contraseña";<br />
IPAddress ip(192,168,1,111);<br />
IPAddress gateway(192,168,1,1);<br />
IPAddress subnet(255,255,255,0);<br />
WiFiServer server(80);<br />
<br />
void setup() <br />
{ <br />
  Serial.begin(115200);<br />
  delay(10);<br />
 myservo.attach(servo_pin); <br />
   old_value = 90;<br />
 WiFi.begin(ssid, password);<br />
  WiFi.config(ip, gateway, subnet);<br />
  <br />
  server.begin(); <br />
} <br />
<br />
 String f = "";<br />
void loop() {<br />
<br />
  WiFiClient client = server.available();<br />
  if (!client) {<br />
    return;<br />
  }<br />
 <br />
<br />
  Serial.println("new client");<br />
  while(!client.available()){<br />
    delay(1);<br />
  }<br />
 <br />
  String request = client.readStringUntil('&#92;r');<br />
  client.flush();<br />
 <br />
<br />
   char i1 = request.indexOf("GET /angulo="), i2;<br />
   if (i1 != -1) <br />
     i2 = request.indexOf(" ", i1+12);<br />
     f = request.substring(i1+12, i2);<br />
int g = f.toInt();<br />
<br />
    <br />
   if ((0 &lt;= g) &amp;&amp; (g &lt;= 180)) {<br />
         <br />
      if (g &lt; old_value)<br />
       {   <br />
      for(int i = old_value ; i &gt; g ; i -= 1)<br />
         {<br />
         myservo.write(i);<br />
         delay(15);<br />
         }<br />
         old_value = g;<br />
       }<br />
       <br />
     if (g &gt; old_value)<br />
       {<br />
       for(int i = old_value ; i &lt; g ; i += 1)<br />
         {<br />
         myservo.write(i);<br />
         delay(15);<br />
         }<br />
         old_value = g;<br />
      }<br />
<br />
   }  <br />
<br />
 <br />
 delay(100);<br />
 client.println("HTTP/1.1 200 OK");<br />
  client.println("Content-Type: text/html");<br />
  client.println("");<br />
  client.println("&lt;!DOCTYPE HTML&gt;");<br />
  client.println("&lt;html&gt;");<br />
  client.print("&lt;body onload='history.back();'&gt;&#92;n");<br />
  client.println("&lt;/body&gt;");<br />
  client.println("&lt;/html&gt;");<br />
 <br />
  delay(1);<br />
}</code></div></div><br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Comentario del código:</span><br />
<ul class="mycode_list"><li>Se incluyen las librerías necesarias.<br />
</li>
<li>Se indica el pin del servo.<br />
</li>
<li>Se dan todos los parámetros para la conexión wifi. En este caso a la placa le hemos asignado la dirección IP 192.168.1.111.<br />
</li>
<li>Se inicia el servo y la conexión wifi.<br />
</li>
<li>Se recibe mediante el método GET los parámetros enviados desde la página web y se desecha todo menos lo que nos interesa, que es el número de grados.<br />
</li>
<li>Una vez captado ese número, se envía al servo para que gire esos grados.<br />
</li>
<li>La placa envía al navegador una pequeña página web con un "history.back()" para que nos vuelva a mostrar el teclado de manera inmediata.<br />
</li>
</ul>
<br />
Bueno, ya está, espero que a alguien le sirva.<br />
<br />
<br />
Saludos</div>]]></description>
			<content:encoded><![CDATA[Saludos.<br />
<br />
Recientemente he adquirido una placa Wemos mini D1 y me parece increíble que con lo pequeña que es, lo funcional que resulta, con wifi integrado y todo (ESP8266). Fijaros en la foto de mas abajo su tamaño, el cable conectado a ella es un micro-usb. El precio también es muy atractivo, por unos 3 € la podéis encontrar.<br />
<br />
Con ella vamos a controlar el giro de un servo vía wifi desde una página web.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Material necesario:</span><br />
<ul class="mycode_list"><li>Una placa Wemos mini D1.<br />
</li>
<li>Un Micro Servo 9G<br />
</li>
</ul>
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/wemosmini.jpg" loading="lazy"  alt="[Imagen: wemosmini.jpg]" class="mycode_img img-responsive" /></div>
<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/servo.jpg" loading="lazy"  alt="[Imagen: servo.jpg]" class="mycode_img img-responsive" /></div>
<br />
<br />
<br />
<br />
<div style="text-align: left;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b">Conexiones:</span></div>
<br />
<div style="text-align: left;" class="mycode_align"><ul class="mycode_list"><li>Pin cable amarillo del servo al pin D7 de la Wemos mini.<br />
</li>
<li>Pin cable rojo del servo al pin 5v de la Wemos mini.<br />
</li>
<li>Pin cable marrón del servo al pin GND de la Wemos mini.<br />
</li>
</ul>
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #3333ff;" class="mycode_color">Página web para controlar el servo:</span></span><br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//ES" "http://www.w3.org/TR/html4/strict.dtd"&gt;<br />
&lt;html&gt;<br />
  &lt;head&gt;<br />
    &lt;meta content="text/html; charset=ISO-8859-1" http-equiv="content-type"&gt;<br />
    &lt;title&gt;Control servo&lt;/title&gt;<br />
&lt;style type="text/css"&gt;<br />
#juan {<br />
    position: absolute;<br />
    left: 50%;<br />
    top: 50%;<br />
    transform: translate(-50%, -50%);<br />
    -webkit-transform: translate(-50%, -50%);<br />
}<br />
&lt;/style&gt;<br />
  &lt;/head&gt;<br />
  &lt;body&gt;<br />
&lt;div id="juan"&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=000';" value="000" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=005';" value="005" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=010';" value="010" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=015';" value="015" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=020';" value="020" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=025';" value="025" /&gt;&lt;/br&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=030';" value="030" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=035';" value="035" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=040';" value="040" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=045';" value="045" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=050';" value="050" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=055';" value="055" /&gt;&lt;/br&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=060';" value="060" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=065';" value="065" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=070';" value="070" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=075';" value="075" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=080';" value="080" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=085';" value="085" /&gt;&lt;/br&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=090';" value="090" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=095';" value="095" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=100';" value="100" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=105';" value="105" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=110';" value="110" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=115';" value="115" /&gt;&lt;/br&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=120';" value="120" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=125';" value="125" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=130';" value="130" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=135';" value="135" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=140';" value="140" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=145';" value="145" /&gt;&lt;/br&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=150';" value="150" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=155';" value="155" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=160';" value="160" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=165';" value="165" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=170';" value="170" /&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=175';" value="175" /&gt;&lt;/br&gt;<br />
   &lt;input type="button" onclick="location.href='http://192.168.1.111/angulo=180';" value="180" /&gt;<br />
 &lt;/div&gt;<br />
<br />
&lt;/body&gt;<br />
&lt;/html&gt;</code></div></div><br />
<br />
<br />
Imagen de la página web:<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/grados.png" loading="lazy"  alt="[Imagen: grados.png]" class="mycode_img img-responsive" /></div>
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #3333ff;" class="mycode_color">Código Wemos mini:</span></span><br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>//Conexiones<br />
//Amarillo: D7<br />
//Rojo: 3V<br />
//Marrón: GND<br />
#include &lt;Servo.h&gt; <br />
#include &lt;ESP8266WiFi.h&gt;<br />
const int servo_pin = D7; <br />
Servo myservo;  <br />
unsigned int old_value;<br />
const char* ssid = "Tu_ssid";<br />
const char* password = "Tu_contraseña";<br />
IPAddress ip(192,168,1,111);<br />
IPAddress gateway(192,168,1,1);<br />
IPAddress subnet(255,255,255,0);<br />
WiFiServer server(80);<br />
<br />
void setup() <br />
{ <br />
  Serial.begin(115200);<br />
  delay(10);<br />
 myservo.attach(servo_pin); <br />
   old_value = 90;<br />
 WiFi.begin(ssid, password);<br />
  WiFi.config(ip, gateway, subnet);<br />
  <br />
  server.begin(); <br />
} <br />
<br />
 String f = "";<br />
void loop() {<br />
<br />
  WiFiClient client = server.available();<br />
  if (!client) {<br />
    return;<br />
  }<br />
 <br />
<br />
  Serial.println("new client");<br />
  while(!client.available()){<br />
    delay(1);<br />
  }<br />
 <br />
  String request = client.readStringUntil('&#92;r');<br />
  client.flush();<br />
 <br />
<br />
   char i1 = request.indexOf("GET /angulo="), i2;<br />
   if (i1 != -1) <br />
     i2 = request.indexOf(" ", i1+12);<br />
     f = request.substring(i1+12, i2);<br />
int g = f.toInt();<br />
<br />
    <br />
   if ((0 &lt;= g) &amp;&amp; (g &lt;= 180)) {<br />
         <br />
      if (g &lt; old_value)<br />
       {   <br />
      for(int i = old_value ; i &gt; g ; i -= 1)<br />
         {<br />
         myservo.write(i);<br />
         delay(15);<br />
         }<br />
         old_value = g;<br />
       }<br />
       <br />
     if (g &gt; old_value)<br />
       {<br />
       for(int i = old_value ; i &lt; g ; i += 1)<br />
         {<br />
         myservo.write(i);<br />
         delay(15);<br />
         }<br />
         old_value = g;<br />
      }<br />
<br />
   }  <br />
<br />
 <br />
 delay(100);<br />
 client.println("HTTP/1.1 200 OK");<br />
  client.println("Content-Type: text/html");<br />
  client.println("");<br />
  client.println("&lt;!DOCTYPE HTML&gt;");<br />
  client.println("&lt;html&gt;");<br />
  client.print("&lt;body onload='history.back();'&gt;&#92;n");<br />
  client.println("&lt;/body&gt;");<br />
  client.println("&lt;/html&gt;");<br />
 <br />
  delay(1);<br />
}</code></div></div><br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Comentario del código:</span><br />
<ul class="mycode_list"><li>Se incluyen las librerías necesarias.<br />
</li>
<li>Se indica el pin del servo.<br />
</li>
<li>Se dan todos los parámetros para la conexión wifi. En este caso a la placa le hemos asignado la dirección IP 192.168.1.111.<br />
</li>
<li>Se inicia el servo y la conexión wifi.<br />
</li>
<li>Se recibe mediante el método GET los parámetros enviados desde la página web y se desecha todo menos lo que nos interesa, que es el número de grados.<br />
</li>
<li>Una vez captado ese número, se envía al servo para que gire esos grados.<br />
</li>
<li>La placa envía al navegador una pequeña página web con un "history.back()" para que nos vuelva a mostrar el teclado de manera inmediata.<br />
</li>
</ul>
<br />
Bueno, ya está, espero que a alguien le sirva.<br />
<br />
<br />
Saludos</div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Instalar micropython en Wemos Mini.]]></title>
			<link>https://chujalt.com/thread-18.html</link>
			<pubDate>Sat, 06 Mar 2021 11:14:26 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://chujalt.com/member.php?action=profile&uid=1">chujalt</a>]]></dc:creator>
			<guid isPermaLink="false">https://chujalt.com/thread-18.html</guid>
			<description><![CDATA[Saludos.<br />
<br />
Vamos a explicar como instalar una versión de micropython en nuestro Wemos Mini. Este tutorial está explicado para hacerlo en un sistema operativo <span style="font-weight: bold;" class="mycode_b">LINUX</span>.<br />
<br />
Yo he utilizado un Wemos Mini D1.<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/wemosmini.jpg" loading="lazy"  alt="[Imagen: wemosmini.jpg]" class="mycode_img img-responsive" /></div>
<br />
<br />
<div style="text-align: left;" class="mycode_align">En primer lugar tenemos que bajarnos una herramienta que se llama <span style="font-weight: bold;" class="mycode_b">esptool</span> mediante el comando pip. Abrimos un terminal y escribimos:</div>
<br />
<div style="text-align: left;" class="mycode_align"><div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>sudo pip install esptool</code></div></div></div>
<br />
En muchos sitios de internet pone que esta herramienta funciona bajo python 2.7, pero eran las versiones antiguas, ahora funciona en cualquier versión de python, yo trabajo con la 3.5<br />
<br />
Una vez instalado esptool conectamos nuestro Wemos Mini al PC y tecleamos:<br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>sudo esptool.py flash_id</code></div></div><br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/micropython_1.png" loading="lazy"  alt="[Imagen: micropython_1.png]" class="mycode_img img-responsive" /></div>
<br />
<div style="text-align: left;" class="mycode_align">Como veis, sale varia información, entre ellas el tamaño de la memoria y el puerto serie al que está conectado, en mi caso /dev/ttyUSB0</div>
<br />
<div style="text-align: left;" class="mycode_align">Opcionalmente le doy permisos a ese puerto serie para luego no estar logeándome como <span style="font-weight: bold;" class="mycode_b">sudo </span>en todos los pasos siguientes:</div>
<br />
<div style="text-align: left;" class="mycode_align"><div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>sudo chmod 777 /dev/ttyUSB0</code></div></div></div>
<br />
<div style="text-align: left;" class="mycode_align">Vamos a bajarnos la versión de micropython de la siguiente dirección <a href="http://micropython.org/download#esp8266" target="_blank" rel="noopener" class="mycode_url">http://micropython.org/download#esp8266</a>, yo me bajé la que pone entre paréntesis latest, que es la última.</div>
<br />
<div style="text-align: left;" class="mycode_align">Ahora vamos a flashear la memoria del Wemos Mini, tecleamos:</div>
<br />
<div style="text-align: left;" class="mycode_align"><div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>esptool.py --port /dev/ttyUSB0 erase_flash</code></div></div></div>
<br />
<div style="text-align: left;" class="mycode_align">Si todo ha ido bien no os dará ningún mensaje de error y os informará que la memoria ha sido flasheada. El proceso dura poco, unos 10 segundos.</div>
<br />
<div style="text-align: left;" class="mycode_align">Seguidamente cargamos micropython en nuestro Wemos Mini (el archivo que nos hemos bajado antes) tecleamos:</div>
<br />
<div style="text-align: left;" class="mycode_align"><div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash --flash_size=detect 0 /home/chujalt/esp8266-20180511-v1.9.4.bin</code></div></div></div>
<br />
<div style="text-align: left;" class="mycode_align">Lógicamente cambiar la ruta donde tenéis vuestro archivo. <span style="font-weight: bold;" class="mycode_b"><span style="color: #cc3333;" class="mycode_color">OJO</span> </span>este comando es el que sale en la página oficial de micropython, si carga correctamente, pero luego, a la hora de comprobar por consola si funcionaba micropython (último paso de este tutorial), no sale nada, volved a flashear la memoria y probad con estos comandos:</div>
<br />
<div style="text-align: left;" class="mycode_align"><div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>esptool.py --port /dev/ttyUSB0 --baud 115200 write_flash --flash_mode=dout --flash_size=detect 0 /home/chujalt/esp8266-20180511-v1.9.4.bin</code></div></div><br />
Si no os da errores os dirá que ya está cargado micropython.<br />
<br />
Ahora toca comprobar que funciona correctamente, hay varios programas para comunicarnos con el puerto serie, screen, minicom, picocom..... Yo he utilizado screen. Si no lo tenéis instalado:<br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>sudo apt install screen</code></div></div><br />
 </div>
Una vez instalado, tecleamos:<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>screen /dev/ttyUSB0 115200</code></div></div><br />
Se quedará la pantalla en negro, pulsamos el botón reset de nuestro Wemos Mini para que se reseté, y si todo ha ido bien nos saldrá el promt de micropyton.<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/micropython_2.png" loading="lazy"  alt="[Imagen: micropython_2.png]" class="mycode_img img-responsive" /></div>
<br />
<div style="text-align: left;" class="mycode_align">Bueno, ya está, espero que le sirva a alguien.</div>
Saludos.]]></description>
			<content:encoded><![CDATA[Saludos.<br />
<br />
Vamos a explicar como instalar una versión de micropython en nuestro Wemos Mini. Este tutorial está explicado para hacerlo en un sistema operativo <span style="font-weight: bold;" class="mycode_b">LINUX</span>.<br />
<br />
Yo he utilizado un Wemos Mini D1.<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/wemosmini.jpg" loading="lazy"  alt="[Imagen: wemosmini.jpg]" class="mycode_img img-responsive" /></div>
<br />
<br />
<div style="text-align: left;" class="mycode_align">En primer lugar tenemos que bajarnos una herramienta que se llama <span style="font-weight: bold;" class="mycode_b">esptool</span> mediante el comando pip. Abrimos un terminal y escribimos:</div>
<br />
<div style="text-align: left;" class="mycode_align"><div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>sudo pip install esptool</code></div></div></div>
<br />
En muchos sitios de internet pone que esta herramienta funciona bajo python 2.7, pero eran las versiones antiguas, ahora funciona en cualquier versión de python, yo trabajo con la 3.5<br />
<br />
Una vez instalado esptool conectamos nuestro Wemos Mini al PC y tecleamos:<br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>sudo esptool.py flash_id</code></div></div><br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/micropython_1.png" loading="lazy"  alt="[Imagen: micropython_1.png]" class="mycode_img img-responsive" /></div>
<br />
<div style="text-align: left;" class="mycode_align">Como veis, sale varia información, entre ellas el tamaño de la memoria y el puerto serie al que está conectado, en mi caso /dev/ttyUSB0</div>
<br />
<div style="text-align: left;" class="mycode_align">Opcionalmente le doy permisos a ese puerto serie para luego no estar logeándome como <span style="font-weight: bold;" class="mycode_b">sudo </span>en todos los pasos siguientes:</div>
<br />
<div style="text-align: left;" class="mycode_align"><div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>sudo chmod 777 /dev/ttyUSB0</code></div></div></div>
<br />
<div style="text-align: left;" class="mycode_align">Vamos a bajarnos la versión de micropython de la siguiente dirección <a href="http://micropython.org/download#esp8266" target="_blank" rel="noopener" class="mycode_url">http://micropython.org/download#esp8266</a>, yo me bajé la que pone entre paréntesis latest, que es la última.</div>
<br />
<div style="text-align: left;" class="mycode_align">Ahora vamos a flashear la memoria del Wemos Mini, tecleamos:</div>
<br />
<div style="text-align: left;" class="mycode_align"><div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>esptool.py --port /dev/ttyUSB0 erase_flash</code></div></div></div>
<br />
<div style="text-align: left;" class="mycode_align">Si todo ha ido bien no os dará ningún mensaje de error y os informará que la memoria ha sido flasheada. El proceso dura poco, unos 10 segundos.</div>
<br />
<div style="text-align: left;" class="mycode_align">Seguidamente cargamos micropython en nuestro Wemos Mini (el archivo que nos hemos bajado antes) tecleamos:</div>
<br />
<div style="text-align: left;" class="mycode_align"><div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash --flash_size=detect 0 /home/chujalt/esp8266-20180511-v1.9.4.bin</code></div></div></div>
<br />
<div style="text-align: left;" class="mycode_align">Lógicamente cambiar la ruta donde tenéis vuestro archivo. <span style="font-weight: bold;" class="mycode_b"><span style="color: #cc3333;" class="mycode_color">OJO</span> </span>este comando es el que sale en la página oficial de micropython, si carga correctamente, pero luego, a la hora de comprobar por consola si funcionaba micropython (último paso de este tutorial), no sale nada, volved a flashear la memoria y probad con estos comandos:</div>
<br />
<div style="text-align: left;" class="mycode_align"><div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>esptool.py --port /dev/ttyUSB0 --baud 115200 write_flash --flash_mode=dout --flash_size=detect 0 /home/chujalt/esp8266-20180511-v1.9.4.bin</code></div></div><br />
Si no os da errores os dirá que ya está cargado micropython.<br />
<br />
Ahora toca comprobar que funciona correctamente, hay varios programas para comunicarnos con el puerto serie, screen, minicom, picocom..... Yo he utilizado screen. Si no lo tenéis instalado:<br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>sudo apt install screen</code></div></div><br />
 </div>
Una vez instalado, tecleamos:<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>screen /dev/ttyUSB0 115200</code></div></div><br />
Se quedará la pantalla en negro, pulsamos el botón reset de nuestro Wemos Mini para que se reseté, y si todo ha ido bien nos saldrá el promt de micropyton.<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/micropython_2.png" loading="lazy"  alt="[Imagen: micropython_2.png]" class="mycode_img img-responsive" /></div>
<br />
<div style="text-align: left;" class="mycode_align">Bueno, ya está, espero que le sirva a alguien.</div>
Saludos.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Controlar color de led rgb vía wifi con Nodemcu.]]></title>
			<link>https://chujalt.com/thread-17.html</link>
			<pubDate>Sat, 06 Mar 2021 11:11:50 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://chujalt.com/member.php?action=profile&uid=1">chujalt</a>]]></dc:creator>
			<guid isPermaLink="false">https://chujalt.com/thread-17.html</guid>
			<description><![CDATA[Saludos....<br />
<br />
En esta ocasión vamos a realizar un sistema para controlar desde una página web el color que mostrará un led rgb. Para ello necesitaremos dos tipos de código, el de la página web y el del Nodemcu (que al estar hecho para cargar con la Arduino IDE también sirve para Arduino).<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Materiales utilizados</span><br />
<ul class="mycode_list"><li>Una placa Nodemcu (yo he utilizado la V2).<br />
</li>
<li>4 Cables dupont.<br />
</li>
<li>Un led rgb Keyes<br />
</li>
</ul>
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/nodemcu.jpg" loading="lazy"  alt="[Imagen: nodemcu.jpg]" class="mycode_img img-responsive" /></div>
<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/led_rgb.jpg" loading="lazy"  alt="[Imagen: led_rgb.jpg]" class="mycode_img img-responsive" /></div>
<br />
<br />
<br />
<div style="text-align: left;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b">Conexiones</span></div>
<ul class="mycode_list"><li>Pin GND del Nodemcu al pin V/G del led rgb.<br />
</li>
<li>Pin D1 del Nodemcu al pin R del led rgb.<br />
</li>
<li>Pin D2 del Nodemcu al pin G del led rgb.<br />
</li>
<li>Pin D3 del Nodemcu al pin B del led rgb.<br />
</li>
</ul>
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #cc3366;" class="mycode_color">Código página Web:</span></span><br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>&lt;!DOCTYPE html&gt;<br />
&lt;html lang="es"&gt;&lt;head&gt;<br />
 <br />
 &lt;meta charset="utf-8"&gt;<br />
 &lt;title&gt;Tabla colores&lt;/title&gt;<br />
<br />
 <br />
 <br />
 &lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"&gt;<br />
&lt;style&gt;<br />
 table {<br />
    width: 50%;<br />
    height: 200px;<br />
       text-align: left;<br />
       margin-left: auto;<br />
       margin-right: auto;<br />
}<br />
.link a{<br />
display:block;<br />
height:100%;<br />
}<br />
&lt;/style&gt;<br />
&lt;/head&gt;&lt;body&gt;&lt;br&gt;<br />
&lt;div style="text-align: center;"&gt;<br />
&lt;h4&gt;&lt;big&gt;&lt;big&gt;TABLA DE COLORES&lt;/big&gt;&lt;/big&gt;&lt;/h4&gt;<br />
&lt;br&gt;<br />
&lt;/div&gt;<br />
<br />
&lt;table border="1" cellpadding="0" cellspacing="0"&gt;<br />
<br />
 &lt;tbody&gt;<br />
   &lt;tr&gt;<br />
     &lt;td style="vertical-align: top; background-color: rgb(255,255,255);" class="link"&gt;&lt;a href="http://192.168.1.222/color=255255255"&gt; &lt;/a&gt;&lt;br&gt;<br />
     &lt;/td&gt;<br />
     &lt;td style="vertical-align: top; background-color: rgb(153,153,153);" class="link"&gt;&lt;a href="http://192.168.1.222/color=153153153"&gt; &lt;/a&gt;&lt;br&gt;<br />
     &lt;/td&gt;<br />
     &lt;td style="vertical-align: top; background-color: rgb(0,0,0);" class="link"&gt;&lt;a href="http://192.168.1.222/color=000000000"&gt; &lt;/a&gt;&lt;br&gt;<br />
     &lt;/td&gt;<br />
     &lt;td style="vertical-align: top; background-color: rgb(255,0,0);" class="link"&gt;&lt;a href="http://192.168.1.222/color=255000000"&gt; &lt;/a&gt;&lt;br&gt;<br />
     &lt;/td&gt;<br />
     &lt;td style="vertical-align: top; background-color: rgb(102,0,0);" class="link"&gt;&lt;a href="http://192.168.1.222/color=102000000"&gt; &lt;/a&gt;&lt;br&gt;<br />
     &lt;/td&gt;<br />
   &lt;/tr&gt;<br />
   &lt;tr&gt;<br />
     &lt;td style="vertical-align: top; background-color: rgb(255,153,0);" class="link"&gt;&lt;a href="http://192.168.1.222/color=255153000"&gt; &lt;/a&gt;&lt;br&gt;<br />
     &lt;/td&gt;<br />
     &lt;td style="vertical-align: top; background-color: rgb(153,51,0);" class="link"&gt;&lt;a href="http://192.168.1.222/color=153051000"&gt; &lt;/a&gt;&lt;br&gt;<br />
     &lt;/td&gt;<br />
     &lt;td style="vertical-align: top; background-color: rgb(255,204,102);" class="link"&gt;&lt;a href="http://192.168.1.222/color=255204102"&gt; &lt;/a&gt;&lt;br&gt;<br />
     &lt;/td&gt;<br />
     &lt;td style="vertical-align: top; background-color: rgb(153,102,51);" class="link"&gt;&lt;a href="http://192.168.1.222/color=153102051"&gt; &lt;/a&gt;&lt;br&gt;<br />
     &lt;/td&gt;<br />
     &lt;td style="vertical-align: top; background-color: rgb(255,255,0);" class="link"&gt;&lt;a href="http://192.168.1.222/color=255255000"&gt; &lt;/a&gt;&lt;br&gt;<br />
     &lt;/td&gt;<br />
   &lt;/tr&gt;<br />
   &lt;tr&gt;<br />
     &lt;td style="vertical-align: top; background-color: rgb(102,102,0);" class="link"&gt;&lt;a href="http://192.168.1.222/color=102102000"&gt; &lt;/a&gt;&lt;br&gt;<br />
     &lt;/td&gt;<br />
     &lt;td style="vertical-align: top; background-color: rgb(51,255,51);" class="link"&gt;&lt;a href="http://192.168.1.222/color=051255051"&gt; &lt;/a&gt;&lt;br&gt;<br />
     &lt;/td&gt;<br />
     &lt;td style="vertical-align: top; background-color: rgb(0,102,0);" class="link"&gt;&lt;a href="http://192.168.1.222/color=000102000"&gt; &lt;/a&gt;&lt;br&gt;<br />
     &lt;/td&gt;<br />
     &lt;td style="vertical-align: top; background-color: rgb(102,204,204);" class="link"&gt;&lt;a href="http://192.168.1.222/color=102204204"&gt; &lt;/a&gt;&lt;br&gt;<br />
     &lt;/td&gt;<br />
     &lt;td style="vertical-align: top; background-color: rgb(51,102,102);" class="link"&gt;&lt;a href="http://192.168.1.222/color=051102102"&gt; &lt;/a&gt;&lt;br&gt;<br />
     &lt;/td&gt;<br />
   &lt;/tr&gt;<br />
   &lt;tr&gt;<br />
     &lt;td style="vertical-align: top; background-color: rgb(51,102,255);" class="link"&gt;&lt;a href="http://192.168.1.222/color=051102255"&gt; &lt;/a&gt;&lt;br&gt;<br />
     &lt;/td&gt;<br />
     &lt;td style="vertical-align: top; background-color: rgb(0,0,153);" class="link"&gt;&lt;a href="http://192.168.1.222/color=000000153"&gt; &lt;/a&gt;&lt;br&gt;<br />
     &lt;/td&gt;<br />
     &lt;td style="vertical-align: top; background-color: rgb(255,153,255);" class="link"&gt;&lt;a href="http://192.168.1.222/color=255153255"&gt; &lt;/a&gt;&lt;br&gt;<br />
     &lt;/td&gt;<br />
     &lt;td style="vertical-align: top; background-color: rgb(204,51,204);" class="link"&gt;&lt;a href="http://192.168.1.222/color=204051204"&gt; &lt;/a&gt;&lt;br&gt;<br />
     &lt;/td&gt;<br />
     &lt;td style="vertical-align: top; background-color: rgb(102,51,102);" class="link"&gt;&lt;a href="http://192.168.1.222/color=102051102"&gt; &lt;/a&gt;&lt;br&gt;<br />
     &lt;/td&gt;<br />
   &lt;/tr&gt;<br />
 &lt;/tbody&gt;<br />
&lt;/table&gt;<br />
<br />
&lt;br&gt;<br />
<br />
&lt;br&gt;<br />
&lt;/body&gt;&lt;/html&gt;</code></div></div><br />
<br />
Este código lo que nos muestra es una página web sencilla con una tabla de unos cuantos colores, que enlaza con la dirección ip que le daremos al Nodemcu.<br />
<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/tabla_colores.png" loading="lazy"  alt="[Imagen: tabla_colores.png]" class="mycode_img img-responsive" /></div>
<br />
<br />
<br />
<div style="text-align: left;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="color: #cc3366;" class="mycode_color">Código Arduino:</span></span></div>
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>#include &lt;ESP8266WiFi.h&gt;<br />
<br />
const char* ssid = "Tu_red";<br />
const char* password = "Tu_Contraseña";<br />
IPAddress ip(192,168,1,222);<br />
IPAddress gateway(192,168,1,1);<br />
IPAddress subnet(255,255,255,0);<br />
        int pinLedR = D1;  <br />
        int pinLedV = D2;  <br />
        int pinLedA = D3;   <br />
WiFiServer server(80);<br />
<br />
void setup() {<br />
 Serial.begin(115200);<br />
 delay(10);<br />
<br />
          pinMode(pinLedR, OUTPUT);    <br />
          pinMode(pinLedV, OUTPUT);   <br />
          pinMode(pinLedA, OUTPUT);  <br />
<br />
 WiFi.begin(ssid, password);<br />
 WiFi.config(ip, gateway, subnet);<br />
 <br />
 server.begin(); <br />
}<br />
String f = "";<br />
void loop() {<br />
<br />
 WiFiClient client = server.available();<br />
 if (!client) {<br />
   return;<br />
 }<br />
<br />
<br />
 Serial.println("new client");<br />
 while(!client.available()){<br />
   delay(1);<br />
 }<br />
<br />
 String request = client.readStringUntil('&#92;r');<br />
 client.flush();<br />
<br />
<br />
  char i1 = request.indexOf("GET /color="), i2;<br />
  if (i1 != -1) <br />
    i2 = request.indexOf(" ", i1+11);<br />
    f = request.substring(i1+11, i2);<br />
<br />
 String pepe = f.substring(0,2);<br />
  String juan = f.substring(3,5);<br />
  String pedro = f.substring(6,8);<br />
<br />
<br />
  <br />
 analogWrite(pinLedR, pepe.toInt());<br />
 analogWrite(pinLedV, juan.toInt());<br />
 analogWrite(pinLedA, pedro.toInt());  <br />
<br />
<br />
 client.println("HTTP/1.1 200 OK");<br />
 client.println("Content-Type: text/html");<br />
 client.println("");<br />
 client.println("&lt;!DOCTYPE HTML&gt;");<br />
 client.println("&lt;html&gt;");<br />
 client.print("&lt;body onload='history.back();'&gt;&#92;n");<br />
 client.println("&lt;/body&gt;");<br />
 client.println("&lt;/html&gt;");<br />
<br />
 delay(1);<br />
<br />
  }</code></div></div><br />
<br />
<br />
El código lo que hace en primer lugar es recibir todos los datos de red y asignarle una ip fija al Nodemcu (en este caso la 192.168.1.222).<br />
<br />
 <br />
Luego le asignamos los pines al led y los iniciamos como salida.<br />
 <br />
Luego inicia la comunicación wifi y recibe los datos del enlace que pulsemos en la página, esos datos son los valores para que muestre un color u otro.<br />
 <br />
Por último desde el Nodemcu enviamos una pequeña página con un javascript para que el navegador vuelva a mostrar la tabla de colores.<br />
 <br />
 <br />
Bueno... espero que le sirva a alguien..... Saludos]]></description>
			<content:encoded><![CDATA[Saludos....<br />
<br />
En esta ocasión vamos a realizar un sistema para controlar desde una página web el color que mostrará un led rgb. Para ello necesitaremos dos tipos de código, el de la página web y el del Nodemcu (que al estar hecho para cargar con la Arduino IDE también sirve para Arduino).<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Materiales utilizados</span><br />
<ul class="mycode_list"><li>Una placa Nodemcu (yo he utilizado la V2).<br />
</li>
<li>4 Cables dupont.<br />
</li>
<li>Un led rgb Keyes<br />
</li>
</ul>
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/nodemcu.jpg" loading="lazy"  alt="[Imagen: nodemcu.jpg]" class="mycode_img img-responsive" /></div>
<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/led_rgb.jpg" loading="lazy"  alt="[Imagen: led_rgb.jpg]" class="mycode_img img-responsive" /></div>
<br />
<br />
<br />
<div style="text-align: left;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b">Conexiones</span></div>
<ul class="mycode_list"><li>Pin GND del Nodemcu al pin V/G del led rgb.<br />
</li>
<li>Pin D1 del Nodemcu al pin R del led rgb.<br />
</li>
<li>Pin D2 del Nodemcu al pin G del led rgb.<br />
</li>
<li>Pin D3 del Nodemcu al pin B del led rgb.<br />
</li>
</ul>
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #cc3366;" class="mycode_color">Código página Web:</span></span><br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>&lt;!DOCTYPE html&gt;<br />
&lt;html lang="es"&gt;&lt;head&gt;<br />
 <br />
 &lt;meta charset="utf-8"&gt;<br />
 &lt;title&gt;Tabla colores&lt;/title&gt;<br />
<br />
 <br />
 <br />
 &lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"&gt;<br />
&lt;style&gt;<br />
 table {<br />
    width: 50%;<br />
    height: 200px;<br />
       text-align: left;<br />
       margin-left: auto;<br />
       margin-right: auto;<br />
}<br />
.link a{<br />
display:block;<br />
height:100%;<br />
}<br />
&lt;/style&gt;<br />
&lt;/head&gt;&lt;body&gt;&lt;br&gt;<br />
&lt;div style="text-align: center;"&gt;<br />
&lt;h4&gt;&lt;big&gt;&lt;big&gt;TABLA DE COLORES&lt;/big&gt;&lt;/big&gt;&lt;/h4&gt;<br />
&lt;br&gt;<br />
&lt;/div&gt;<br />
<br />
&lt;table border="1" cellpadding="0" cellspacing="0"&gt;<br />
<br />
 &lt;tbody&gt;<br />
   &lt;tr&gt;<br />
     &lt;td style="vertical-align: top; background-color: rgb(255,255,255);" class="link"&gt;&lt;a href="http://192.168.1.222/color=255255255"&gt; &lt;/a&gt;&lt;br&gt;<br />
     &lt;/td&gt;<br />
     &lt;td style="vertical-align: top; background-color: rgb(153,153,153);" class="link"&gt;&lt;a href="http://192.168.1.222/color=153153153"&gt; &lt;/a&gt;&lt;br&gt;<br />
     &lt;/td&gt;<br />
     &lt;td style="vertical-align: top; background-color: rgb(0,0,0);" class="link"&gt;&lt;a href="http://192.168.1.222/color=000000000"&gt; &lt;/a&gt;&lt;br&gt;<br />
     &lt;/td&gt;<br />
     &lt;td style="vertical-align: top; background-color: rgb(255,0,0);" class="link"&gt;&lt;a href="http://192.168.1.222/color=255000000"&gt; &lt;/a&gt;&lt;br&gt;<br />
     &lt;/td&gt;<br />
     &lt;td style="vertical-align: top; background-color: rgb(102,0,0);" class="link"&gt;&lt;a href="http://192.168.1.222/color=102000000"&gt; &lt;/a&gt;&lt;br&gt;<br />
     &lt;/td&gt;<br />
   &lt;/tr&gt;<br />
   &lt;tr&gt;<br />
     &lt;td style="vertical-align: top; background-color: rgb(255,153,0);" class="link"&gt;&lt;a href="http://192.168.1.222/color=255153000"&gt; &lt;/a&gt;&lt;br&gt;<br />
     &lt;/td&gt;<br />
     &lt;td style="vertical-align: top; background-color: rgb(153,51,0);" class="link"&gt;&lt;a href="http://192.168.1.222/color=153051000"&gt; &lt;/a&gt;&lt;br&gt;<br />
     &lt;/td&gt;<br />
     &lt;td style="vertical-align: top; background-color: rgb(255,204,102);" class="link"&gt;&lt;a href="http://192.168.1.222/color=255204102"&gt; &lt;/a&gt;&lt;br&gt;<br />
     &lt;/td&gt;<br />
     &lt;td style="vertical-align: top; background-color: rgb(153,102,51);" class="link"&gt;&lt;a href="http://192.168.1.222/color=153102051"&gt; &lt;/a&gt;&lt;br&gt;<br />
     &lt;/td&gt;<br />
     &lt;td style="vertical-align: top; background-color: rgb(255,255,0);" class="link"&gt;&lt;a href="http://192.168.1.222/color=255255000"&gt; &lt;/a&gt;&lt;br&gt;<br />
     &lt;/td&gt;<br />
   &lt;/tr&gt;<br />
   &lt;tr&gt;<br />
     &lt;td style="vertical-align: top; background-color: rgb(102,102,0);" class="link"&gt;&lt;a href="http://192.168.1.222/color=102102000"&gt; &lt;/a&gt;&lt;br&gt;<br />
     &lt;/td&gt;<br />
     &lt;td style="vertical-align: top; background-color: rgb(51,255,51);" class="link"&gt;&lt;a href="http://192.168.1.222/color=051255051"&gt; &lt;/a&gt;&lt;br&gt;<br />
     &lt;/td&gt;<br />
     &lt;td style="vertical-align: top; background-color: rgb(0,102,0);" class="link"&gt;&lt;a href="http://192.168.1.222/color=000102000"&gt; &lt;/a&gt;&lt;br&gt;<br />
     &lt;/td&gt;<br />
     &lt;td style="vertical-align: top; background-color: rgb(102,204,204);" class="link"&gt;&lt;a href="http://192.168.1.222/color=102204204"&gt; &lt;/a&gt;&lt;br&gt;<br />
     &lt;/td&gt;<br />
     &lt;td style="vertical-align: top; background-color: rgb(51,102,102);" class="link"&gt;&lt;a href="http://192.168.1.222/color=051102102"&gt; &lt;/a&gt;&lt;br&gt;<br />
     &lt;/td&gt;<br />
   &lt;/tr&gt;<br />
   &lt;tr&gt;<br />
     &lt;td style="vertical-align: top; background-color: rgb(51,102,255);" class="link"&gt;&lt;a href="http://192.168.1.222/color=051102255"&gt; &lt;/a&gt;&lt;br&gt;<br />
     &lt;/td&gt;<br />
     &lt;td style="vertical-align: top; background-color: rgb(0,0,153);" class="link"&gt;&lt;a href="http://192.168.1.222/color=000000153"&gt; &lt;/a&gt;&lt;br&gt;<br />
     &lt;/td&gt;<br />
     &lt;td style="vertical-align: top; background-color: rgb(255,153,255);" class="link"&gt;&lt;a href="http://192.168.1.222/color=255153255"&gt; &lt;/a&gt;&lt;br&gt;<br />
     &lt;/td&gt;<br />
     &lt;td style="vertical-align: top; background-color: rgb(204,51,204);" class="link"&gt;&lt;a href="http://192.168.1.222/color=204051204"&gt; &lt;/a&gt;&lt;br&gt;<br />
     &lt;/td&gt;<br />
     &lt;td style="vertical-align: top; background-color: rgb(102,51,102);" class="link"&gt;&lt;a href="http://192.168.1.222/color=102051102"&gt; &lt;/a&gt;&lt;br&gt;<br />
     &lt;/td&gt;<br />
   &lt;/tr&gt;<br />
 &lt;/tbody&gt;<br />
&lt;/table&gt;<br />
<br />
&lt;br&gt;<br />
<br />
&lt;br&gt;<br />
&lt;/body&gt;&lt;/html&gt;</code></div></div><br />
<br />
Este código lo que nos muestra es una página web sencilla con una tabla de unos cuantos colores, que enlaza con la dirección ip que le daremos al Nodemcu.<br />
<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/tabla_colores.png" loading="lazy"  alt="[Imagen: tabla_colores.png]" class="mycode_img img-responsive" /></div>
<br />
<br />
<br />
<div style="text-align: left;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b"><span style="color: #cc3366;" class="mycode_color">Código Arduino:</span></span></div>
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>#include &lt;ESP8266WiFi.h&gt;<br />
<br />
const char* ssid = "Tu_red";<br />
const char* password = "Tu_Contraseña";<br />
IPAddress ip(192,168,1,222);<br />
IPAddress gateway(192,168,1,1);<br />
IPAddress subnet(255,255,255,0);<br />
        int pinLedR = D1;  <br />
        int pinLedV = D2;  <br />
        int pinLedA = D3;   <br />
WiFiServer server(80);<br />
<br />
void setup() {<br />
 Serial.begin(115200);<br />
 delay(10);<br />
<br />
          pinMode(pinLedR, OUTPUT);    <br />
          pinMode(pinLedV, OUTPUT);   <br />
          pinMode(pinLedA, OUTPUT);  <br />
<br />
 WiFi.begin(ssid, password);<br />
 WiFi.config(ip, gateway, subnet);<br />
 <br />
 server.begin(); <br />
}<br />
String f = "";<br />
void loop() {<br />
<br />
 WiFiClient client = server.available();<br />
 if (!client) {<br />
   return;<br />
 }<br />
<br />
<br />
 Serial.println("new client");<br />
 while(!client.available()){<br />
   delay(1);<br />
 }<br />
<br />
 String request = client.readStringUntil('&#92;r');<br />
 client.flush();<br />
<br />
<br />
  char i1 = request.indexOf("GET /color="), i2;<br />
  if (i1 != -1) <br />
    i2 = request.indexOf(" ", i1+11);<br />
    f = request.substring(i1+11, i2);<br />
<br />
 String pepe = f.substring(0,2);<br />
  String juan = f.substring(3,5);<br />
  String pedro = f.substring(6,8);<br />
<br />
<br />
  <br />
 analogWrite(pinLedR, pepe.toInt());<br />
 analogWrite(pinLedV, juan.toInt());<br />
 analogWrite(pinLedA, pedro.toInt());  <br />
<br />
<br />
 client.println("HTTP/1.1 200 OK");<br />
 client.println("Content-Type: text/html");<br />
 client.println("");<br />
 client.println("&lt;!DOCTYPE HTML&gt;");<br />
 client.println("&lt;html&gt;");<br />
 client.print("&lt;body onload='history.back();'&gt;&#92;n");<br />
 client.println("&lt;/body&gt;");<br />
 client.println("&lt;/html&gt;");<br />
<br />
 delay(1);<br />
<br />
  }</code></div></div><br />
<br />
<br />
El código lo que hace en primer lugar es recibir todos los datos de red y asignarle una ip fija al Nodemcu (en este caso la 192.168.1.222).<br />
<br />
 <br />
Luego le asignamos los pines al led y los iniciamos como salida.<br />
 <br />
Luego inicia la comunicación wifi y recibe los datos del enlace que pulsemos en la página, esos datos son los valores para que muestre un color u otro.<br />
 <br />
Por último desde el Nodemcu enviamos una pequeña página con un javascript para que el navegador vuelva a mostrar la tabla de colores.<br />
 <br />
 <br />
Bueno... espero que le sirva a alguien..... Saludos]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Nodemcu, alarma nivel agua via wifi.]]></title>
			<link>https://chujalt.com/thread-16.html</link>
			<pubDate>Sat, 06 Mar 2021 11:09:29 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://chujalt.com/member.php?action=profile&uid=1">chujalt</a>]]></dc:creator>
			<guid isPermaLink="false">https://chujalt.com/thread-16.html</guid>
			<description><![CDATA[Saludos.<br />
<br />
En esta ocasión vamos a crear una alarma de nivel de agua. Una página web creada al efecto nos informará si el agua no ha llegado al nivel o, si por el contrario, si que ha llegado.<br />
<br />
Para ello necesitamos 2 tipos de código, el de la página web (con php) y el del Nodemcu, al cual le cargaremos el programa con la Arduino ID.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Materiales utilizados:</span><ul class="mycode_list"><li>Una placa Nodemcu (yo he utilizado la V2).<br />
</li>
<li>Un módulo sensor de agua para Arduino.<br />
</li>
<li>3 cables Dupont.<br />
</li>
</ul>
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/nodemcu.jpg" loading="lazy"  width="400" height="400" alt="[Imagen: nodemcu.jpg]" class="mycode_img img-responsive" /></div>
<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/sensoragua.jpg" loading="lazy"  alt="[Imagen: sensoragua.jpg]" class="mycode_img img-responsive" /></div>
<br />
<br />
<br />
<br />
<div style="text-align: left;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b">Conexiones:</span></div>
<div style="text-align: left;" class="mycode_align"><ul class="mycode_list"><li>Pin S del sensor de líquidos al pin A0 del Nodemcu.<br />
</li>
<li>Pin + del sensor de líquidos al pin 3.3V del Nodemcu.<br />
</li>
<li>Pin - del sensor de líquidos al pin GND del Nodemcu.<br />
</li>
</ul>
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #3333cc;" class="mycode_color">Código página web:</span></span><br />
<div class="codeblock phpcodeblock"><div class="title">Código PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">&lt;?php<br />&nbsp; &nbsp; </span><span style="color: #FF8000">//&nbsp;this&nbsp;refreshes&nbsp;current&nbsp;page&nbsp;after&nbsp;5&nbsp;seconds.<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; header</span><span style="color: #007700">(&nbsp;</span><span style="color: #DD0000">"refresh:5;"&nbsp;</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;<br /></span>&lt;!doctype&nbsp;html&gt;<br />&lt;html&nbsp;lang="en"&gt;<br />&lt;head&gt;<br />&nbsp; &lt;meta&nbsp;charset="utf-8"&gt;<br />&nbsp; &lt;title&gt;Sensor&nbsp;agua&lt;/title&gt;<br />&lt;style&gt;<br />.normal<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;background:&nbsp;green;<br />&nbsp; &nbsp; &nbsp; &nbsp; color:&nbsp;yellow;<br />&nbsp; &nbsp; &nbsp; &nbsp; border-radius:&nbsp;1em;<br />&nbsp; &nbsp; &nbsp; &nbsp; padding:&nbsp;1em;<br />&nbsp; &nbsp; &nbsp; &nbsp; position:&nbsp;absolute;<br />&nbsp; &nbsp; &nbsp; &nbsp; top:&nbsp;50%;<br />&nbsp; &nbsp; &nbsp; &nbsp; left:&nbsp;50%;<br />&nbsp; &nbsp; &nbsp; &nbsp; margin-right:&nbsp;-50%;<br />&nbsp; &nbsp; &nbsp; &nbsp; transform:&nbsp;translate(-50%,&nbsp;-50%);<br />&nbsp; &nbsp; &nbsp; &nbsp; text-align:center<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />.anormal<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;background:&nbsp;red;<br />&nbsp; &nbsp; &nbsp; &nbsp; color:&nbsp;yellow;<br />&nbsp; &nbsp; &nbsp; &nbsp; border-radius:&nbsp;1em;<br />&nbsp; &nbsp; &nbsp; &nbsp; padding:&nbsp;1em;<br />&nbsp; &nbsp; &nbsp; &nbsp; position:&nbsp;absolute;<br />&nbsp; &nbsp; &nbsp; &nbsp; top:&nbsp;50%;<br />&nbsp; &nbsp; &nbsp; &nbsp; left:&nbsp;50%;<br />&nbsp; &nbsp; &nbsp; &nbsp; margin-right:&nbsp;-50%;<br />&nbsp; &nbsp; &nbsp; &nbsp; transform:&nbsp;translate(-50%,&nbsp;-50%);<br />&nbsp; &nbsp; &nbsp; &nbsp; text-align:center<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&lt;/style&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;?<br />&#36;url&nbsp;=&nbsp;'http://192.168.1.222';<br />&#36;content&nbsp;=&nbsp;file_get_contents(&#36;url);<br />&#36;doc&nbsp;=&nbsp;new&nbsp;DOMDocument();<br />&#36;doc-&gt;loadHtml(&#36;content);<br />&#36;contenido&nbsp;=&nbsp;explode("&#092;n",&nbsp;trim(&#36;doc-&gt;getElementById('nivel')-&gt;nodeValue))[0];<br />if&nbsp;(&#36;contenido&nbsp;&lt;&nbsp;200)<br />{<br />echo"&lt;div&nbsp;class='normal'&gt;";<br />echo"En&nbsp;estos&nbsp;momentos&nbsp;no&nbsp;ocurre&nbsp;nada.&lt;br/&gt;TODO&nbsp;CORRECTO";<br />echo"&lt;/div&gt;";<br />}<br />else<br />{<br />echo"&lt;div&nbsp;class='anormal'&gt;";<br />echo"ATENCION....&nbsp;ATENCION....&nbsp;ALARMA.....&nbsp;ALARMA&lt;br/&gt;La&nbsp;cosa&nbsp;no&nbsp;va&nbsp;bien";<br />echo"&lt;/div&gt;";<br />}&nbsp;<br />?&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;&nbsp;<br /></code></div></div></div><br />
<br />
La página lo que realiza es conectar cada 5 segundos con la dirección ip del Nodemcu y leer las lecturas del sensor, en nuestro caso le hemos dado un límite de 200, si no llega a ese límite nos dará una información, si llega o lo sobrepasa nos dará otra.<br />
<br />
<br />
Si no llega a la lectura límite:<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/aguabien.png" loading="lazy"  alt="[Imagen: aguabien.png]" class="mycode_img img-responsive" /></div>
<br />
<br />
<br />
Si llega a la lectura límite:<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/aguamal.png" loading="lazy"  alt="[Imagen: aguamal.png]" class="mycode_img img-responsive" /></div>
<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #3333cc;" class="mycode_color">Código Nodemcu:</span></span><br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>#include &lt;ESP8266WiFi.h&gt;<br />
 const char* ssid = "Tu_ssid";<br />
const char* password = "Tu_contraseña";<br />
IPAddress ip(192,168,1,222);<br />
IPAddress gateway(192,168,1,1);<br />
IPAddress subnet(255,255,255,0);<br />
const int analogInPin = A0; <br />
int sensorValue = 0;<br />
WiFiServer server(80);<br />
void setup() {<br />
 WiFi.begin(ssid, password);<br />
  WiFi.config(ip, gateway, subnet);<br />
  server.begin(); <br />
}<br />
void loop() {<br />
 WiFiClient client = server.available();<br />
  if (!client) {<br />
    return;<br />
  }<br />
  while(!client.available()){<br />
    delay(1);<br />
  }<br />
  String request = client.readStringUntil('&#92;r');<br />
  client.flush();<br />
client.println("HTTP/1.1 200 OK");<br />
  client.println("Content-Type: text/html");<br />
  client.println("");<br />
  client.println("&lt;!DOCTYPE HTML&gt;");<br />
  client.println("&lt;html&gt;");<br />
  client.print("&lt;body&gt;");  <br />
   client.print("&lt;div id='nivel'&gt;");<br />
  client.print(analogRead(analogInPin));<br />
   client.print("&lt;/div&gt;");<br />
  client.println("&lt;/body&gt;");<br />
  client.println("&lt;/html&gt;");<br />
 <br />
  delay(1);<br />
<br />
}</code></div></div><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Explicación del código:</span><ul class="mycode_list"><li>Cargamos las librerías necesarias.<br />
</li>
<li>Le damos los parámetros de nuestra red wifi y le asignamos una dirección ip, en este caso la 192.168.1.222<br />
</li>
<li>Asignamos el pin de lectura del sensor.<br />
</li>
<li>Iniciamos el sensor y la comunicación wifi.<br />
</li>
<li>Creamos una página web que contiene la lectura del sensor de líquidos.<br />
</li>
</ul>
<br />
Bueno, ya está, espero que le sirva a alguien.<br />
<br />
Saludos.<br />
<br />
<br />
</div>]]></description>
			<content:encoded><![CDATA[Saludos.<br />
<br />
En esta ocasión vamos a crear una alarma de nivel de agua. Una página web creada al efecto nos informará si el agua no ha llegado al nivel o, si por el contrario, si que ha llegado.<br />
<br />
Para ello necesitamos 2 tipos de código, el de la página web (con php) y el del Nodemcu, al cual le cargaremos el programa con la Arduino ID.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Materiales utilizados:</span><ul class="mycode_list"><li>Una placa Nodemcu (yo he utilizado la V2).<br />
</li>
<li>Un módulo sensor de agua para Arduino.<br />
</li>
<li>3 cables Dupont.<br />
</li>
</ul>
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/nodemcu.jpg" loading="lazy"  width="400" height="400" alt="[Imagen: nodemcu.jpg]" class="mycode_img img-responsive" /></div>
<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/sensoragua.jpg" loading="lazy"  alt="[Imagen: sensoragua.jpg]" class="mycode_img img-responsive" /></div>
<br />
<br />
<br />
<br />
<div style="text-align: left;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b">Conexiones:</span></div>
<div style="text-align: left;" class="mycode_align"><ul class="mycode_list"><li>Pin S del sensor de líquidos al pin A0 del Nodemcu.<br />
</li>
<li>Pin + del sensor de líquidos al pin 3.3V del Nodemcu.<br />
</li>
<li>Pin - del sensor de líquidos al pin GND del Nodemcu.<br />
</li>
</ul>
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #3333cc;" class="mycode_color">Código página web:</span></span><br />
<div class="codeblock phpcodeblock"><div class="title">Código PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">&lt;?php<br />&nbsp; &nbsp; </span><span style="color: #FF8000">//&nbsp;this&nbsp;refreshes&nbsp;current&nbsp;page&nbsp;after&nbsp;5&nbsp;seconds.<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; header</span><span style="color: #007700">(&nbsp;</span><span style="color: #DD0000">"refresh:5;"&nbsp;</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;<br /></span>&lt;!doctype&nbsp;html&gt;<br />&lt;html&nbsp;lang="en"&gt;<br />&lt;head&gt;<br />&nbsp; &lt;meta&nbsp;charset="utf-8"&gt;<br />&nbsp; &lt;title&gt;Sensor&nbsp;agua&lt;/title&gt;<br />&lt;style&gt;<br />.normal<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;background:&nbsp;green;<br />&nbsp; &nbsp; &nbsp; &nbsp; color:&nbsp;yellow;<br />&nbsp; &nbsp; &nbsp; &nbsp; border-radius:&nbsp;1em;<br />&nbsp; &nbsp; &nbsp; &nbsp; padding:&nbsp;1em;<br />&nbsp; &nbsp; &nbsp; &nbsp; position:&nbsp;absolute;<br />&nbsp; &nbsp; &nbsp; &nbsp; top:&nbsp;50%;<br />&nbsp; &nbsp; &nbsp; &nbsp; left:&nbsp;50%;<br />&nbsp; &nbsp; &nbsp; &nbsp; margin-right:&nbsp;-50%;<br />&nbsp; &nbsp; &nbsp; &nbsp; transform:&nbsp;translate(-50%,&nbsp;-50%);<br />&nbsp; &nbsp; &nbsp; &nbsp; text-align:center<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />.anormal<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;background:&nbsp;red;<br />&nbsp; &nbsp; &nbsp; &nbsp; color:&nbsp;yellow;<br />&nbsp; &nbsp; &nbsp; &nbsp; border-radius:&nbsp;1em;<br />&nbsp; &nbsp; &nbsp; &nbsp; padding:&nbsp;1em;<br />&nbsp; &nbsp; &nbsp; &nbsp; position:&nbsp;absolute;<br />&nbsp; &nbsp; &nbsp; &nbsp; top:&nbsp;50%;<br />&nbsp; &nbsp; &nbsp; &nbsp; left:&nbsp;50%;<br />&nbsp; &nbsp; &nbsp; &nbsp; margin-right:&nbsp;-50%;<br />&nbsp; &nbsp; &nbsp; &nbsp; transform:&nbsp;translate(-50%,&nbsp;-50%);<br />&nbsp; &nbsp; &nbsp; &nbsp; text-align:center<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&lt;/style&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;?<br />&#36;url&nbsp;=&nbsp;'http://192.168.1.222';<br />&#36;content&nbsp;=&nbsp;file_get_contents(&#36;url);<br />&#36;doc&nbsp;=&nbsp;new&nbsp;DOMDocument();<br />&#36;doc-&gt;loadHtml(&#36;content);<br />&#36;contenido&nbsp;=&nbsp;explode("&#092;n",&nbsp;trim(&#36;doc-&gt;getElementById('nivel')-&gt;nodeValue))[0];<br />if&nbsp;(&#36;contenido&nbsp;&lt;&nbsp;200)<br />{<br />echo"&lt;div&nbsp;class='normal'&gt;";<br />echo"En&nbsp;estos&nbsp;momentos&nbsp;no&nbsp;ocurre&nbsp;nada.&lt;br/&gt;TODO&nbsp;CORRECTO";<br />echo"&lt;/div&gt;";<br />}<br />else<br />{<br />echo"&lt;div&nbsp;class='anormal'&gt;";<br />echo"ATENCION....&nbsp;ATENCION....&nbsp;ALARMA.....&nbsp;ALARMA&lt;br/&gt;La&nbsp;cosa&nbsp;no&nbsp;va&nbsp;bien";<br />echo"&lt;/div&gt;";<br />}&nbsp;<br />?&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;&nbsp;<br /></code></div></div></div><br />
<br />
La página lo que realiza es conectar cada 5 segundos con la dirección ip del Nodemcu y leer las lecturas del sensor, en nuestro caso le hemos dado un límite de 200, si no llega a ese límite nos dará una información, si llega o lo sobrepasa nos dará otra.<br />
<br />
<br />
Si no llega a la lectura límite:<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/aguabien.png" loading="lazy"  alt="[Imagen: aguabien.png]" class="mycode_img img-responsive" /></div>
<br />
<br />
<br />
Si llega a la lectura límite:<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/aguamal.png" loading="lazy"  alt="[Imagen: aguamal.png]" class="mycode_img img-responsive" /></div>
<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #3333cc;" class="mycode_color">Código Nodemcu:</span></span><br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>#include &lt;ESP8266WiFi.h&gt;<br />
 const char* ssid = "Tu_ssid";<br />
const char* password = "Tu_contraseña";<br />
IPAddress ip(192,168,1,222);<br />
IPAddress gateway(192,168,1,1);<br />
IPAddress subnet(255,255,255,0);<br />
const int analogInPin = A0; <br />
int sensorValue = 0;<br />
WiFiServer server(80);<br />
void setup() {<br />
 WiFi.begin(ssid, password);<br />
  WiFi.config(ip, gateway, subnet);<br />
  server.begin(); <br />
}<br />
void loop() {<br />
 WiFiClient client = server.available();<br />
  if (!client) {<br />
    return;<br />
  }<br />
  while(!client.available()){<br />
    delay(1);<br />
  }<br />
  String request = client.readStringUntil('&#92;r');<br />
  client.flush();<br />
client.println("HTTP/1.1 200 OK");<br />
  client.println("Content-Type: text/html");<br />
  client.println("");<br />
  client.println("&lt;!DOCTYPE HTML&gt;");<br />
  client.println("&lt;html&gt;");<br />
  client.print("&lt;body&gt;");  <br />
   client.print("&lt;div id='nivel'&gt;");<br />
  client.print(analogRead(analogInPin));<br />
   client.print("&lt;/div&gt;");<br />
  client.println("&lt;/body&gt;");<br />
  client.println("&lt;/html&gt;");<br />
 <br />
  delay(1);<br />
<br />
}</code></div></div><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Explicación del código:</span><ul class="mycode_list"><li>Cargamos las librerías necesarias.<br />
</li>
<li>Le damos los parámetros de nuestra red wifi y le asignamos una dirección ip, en este caso la 192.168.1.222<br />
</li>
<li>Asignamos el pin de lectura del sensor.<br />
</li>
<li>Iniciamos el sensor y la comunicación wifi.<br />
</li>
<li>Creamos una página web que contiene la lectura del sensor de líquidos.<br />
</li>
</ul>
<br />
Bueno, ya está, espero que le sirva a alguien.<br />
<br />
Saludos.<br />
<br />
<br />
</div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Instalar micropython en Nodemcu.]]></title>
			<link>https://chujalt.com/thread-15.html</link>
			<pubDate>Sat, 06 Mar 2021 11:07:45 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://chujalt.com/member.php?action=profile&uid=1">chujalt</a>]]></dc:creator>
			<guid isPermaLink="false">https://chujalt.com/thread-15.html</guid>
			<description><![CDATA[Saludos.<br />
<br />
Vamos a explicar como instalar una versión de micropython en nuestro Nodemcu. Este tutorial está explicado para hacerlo en un sistema operativo <span style="font-weight: bold;" class="mycode_b">LINUX</span>.<br />
<br />
Yo he utilizado un Nodemcu V2.<br />
<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/nodemcu.jpg" loading="lazy"  alt="[Imagen: nodemcu.jpg]" class="mycode_img img-responsive" /></div>
<div style="text-align: left;" class="mycode_align">En primer lugar tenemos que bajarnos una herramienta que se llama <span style="font-weight: bold;" class="mycode_b">esptool</span> mediante el comando pip. Abrimos un terminal y escribimos:</div>
<br />
<div style="text-align: left;" class="mycode_align"><div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>sudo pip install esptool</code></div></div></div>
<br />
En muchos sitios de internet pone que esta herramienta funciona bajo python 2.7, pero eran las versiones antiguas, ahora funciona en cualquier versión de python, yo trabajo con la 3.5<br />
<br />
Una vez instalado esptool conectamos nuestro nodemcu al PC y tecleamos:<br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>sudo esptool.py flash_id</code></div></div><br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/micropython_1.png" loading="lazy"  alt="[Imagen: micropython_1.png]" class="mycode_img img-responsive" /></div>
<br />
<div style="text-align: left;" class="mycode_align">Como veis, sale varia información, entre ellas el tamaño de la memoria y el puerto serie al que está conectado, en mi caso /dev/ttyUSB0</div>
<br />
<div style="text-align: left;" class="mycode_align">Opcionalmente le doy permisos a ese puerto serie para luego no estar logeándome como <span style="font-weight: bold;" class="mycode_b">sudo </span>en todos los pasos siguientes:</div>
<br />
<div style="text-align: left;" class="mycode_align"><div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>sudo chmod 777 /dev/ttyUSB0</code></div></div></div>
<br />
<div style="text-align: left;" class="mycode_align">Vamos a bajarnos la versión de micropython de la siguiente dirección <a href="http://micropython.org/download#esp8266" target="_blank" rel="noopener" class="mycode_url">http://micropython.org/download#esp8266</a>, yo me bajé la que pone entre paréntesis latest, que es la última.</div>
<br />
<div style="text-align: left;" class="mycode_align">Ahora vamos a flashear la memoria del nodemcu, tecleamos:</div>
<br />
<div style="text-align: left;" class="mycode_align"><div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>esptool.py --port /dev/ttyUSB0 erase_flash</code></div></div></div>
<br />
<div style="text-align: left;" class="mycode_align">Si todo ha ido bien no os dará ningún mensaje de error y os informará que la memoria ha sido flasheada. El proceso dura poco, unos 10 segundos.</div>
<br />
<div style="text-align: left;" class="mycode_align">Seguidamente cargamos micropython en nuestro nodemcu (el archivo que nos hemos bajado antes) tecleamos:</div>
<br />
<div style="text-align: left;" class="mycode_align"><div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash --flash_size=detect 0 /home/chujalt/esp8266-20180511-v1.9.4.bin</code></div></div></div>
<br />
<div style="text-align: left;" class="mycode_align">Lógicamente cambiar la ruta donde tenéis vuestro archivo. <span style="font-weight: bold;" class="mycode_b"><span style="color: #cc3333;" class="mycode_color">OJO</span> </span>este comando es el que sale en la página oficial de micropython, me cargaba correctamente, pero luego, a la hora de comprobar por consola si funcionaba micropython (último paso de este tutorial), no salía nada. Si es así, volver a flashear la memoria y probad con estos comandos:</div>
<br />
<div style="text-align: left;" class="mycode_align"><div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>esptool.py --port /dev/ttyUSB0 --baud 115200 write_flash --flash_mode=dout --flash_size=detect 0 /home/chujalt/esp8266-20180511-v1.9.4.bin</code></div></div><br />
Si no os da errores os dirá que ya está cargado micropython.<br />
<br />
Ahora toca comprobar que funciona correctamente, hay varios programas para comunicarnos con el puerto serie, screen, minicom, picocom..... Yo he utilizado screen. Si no lo tenéis instalado:<br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>sudo apt install screen</code></div></div><br />
 </div>
Una vez instalado, tecleamos:<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>screen /dev/ttyUSB0 115200</code></div></div><br />
Se quedará la pantalla en negro, pulsamos el botón reset de nuestro Nodemcu para que se reseté, y si todo ha ido bien nos saldrá el promt de micropyton.<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/micropython_2.png" loading="lazy"  alt="[Imagen: micropython_2.png]" class="mycode_img img-responsive" /></div>
<br />
<div style="text-align: left;" class="mycode_align">Bueno, ya está, espero que le sirva a alguien.</div>
<div style="text-align: left;" class="mycode_align">Saludos.</div>]]></description>
			<content:encoded><![CDATA[Saludos.<br />
<br />
Vamos a explicar como instalar una versión de micropython en nuestro Nodemcu. Este tutorial está explicado para hacerlo en un sistema operativo <span style="font-weight: bold;" class="mycode_b">LINUX</span>.<br />
<br />
Yo he utilizado un Nodemcu V2.<br />
<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/nodemcu.jpg" loading="lazy"  alt="[Imagen: nodemcu.jpg]" class="mycode_img img-responsive" /></div>
<div style="text-align: left;" class="mycode_align">En primer lugar tenemos que bajarnos una herramienta que se llama <span style="font-weight: bold;" class="mycode_b">esptool</span> mediante el comando pip. Abrimos un terminal y escribimos:</div>
<br />
<div style="text-align: left;" class="mycode_align"><div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>sudo pip install esptool</code></div></div></div>
<br />
En muchos sitios de internet pone que esta herramienta funciona bajo python 2.7, pero eran las versiones antiguas, ahora funciona en cualquier versión de python, yo trabajo con la 3.5<br />
<br />
Una vez instalado esptool conectamos nuestro nodemcu al PC y tecleamos:<br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>sudo esptool.py flash_id</code></div></div><br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/micropython_1.png" loading="lazy"  alt="[Imagen: micropython_1.png]" class="mycode_img img-responsive" /></div>
<br />
<div style="text-align: left;" class="mycode_align">Como veis, sale varia información, entre ellas el tamaño de la memoria y el puerto serie al que está conectado, en mi caso /dev/ttyUSB0</div>
<br />
<div style="text-align: left;" class="mycode_align">Opcionalmente le doy permisos a ese puerto serie para luego no estar logeándome como <span style="font-weight: bold;" class="mycode_b">sudo </span>en todos los pasos siguientes:</div>
<br />
<div style="text-align: left;" class="mycode_align"><div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>sudo chmod 777 /dev/ttyUSB0</code></div></div></div>
<br />
<div style="text-align: left;" class="mycode_align">Vamos a bajarnos la versión de micropython de la siguiente dirección <a href="http://micropython.org/download#esp8266" target="_blank" rel="noopener" class="mycode_url">http://micropython.org/download#esp8266</a>, yo me bajé la que pone entre paréntesis latest, que es la última.</div>
<br />
<div style="text-align: left;" class="mycode_align">Ahora vamos a flashear la memoria del nodemcu, tecleamos:</div>
<br />
<div style="text-align: left;" class="mycode_align"><div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>esptool.py --port /dev/ttyUSB0 erase_flash</code></div></div></div>
<br />
<div style="text-align: left;" class="mycode_align">Si todo ha ido bien no os dará ningún mensaje de error y os informará que la memoria ha sido flasheada. El proceso dura poco, unos 10 segundos.</div>
<br />
<div style="text-align: left;" class="mycode_align">Seguidamente cargamos micropython en nuestro nodemcu (el archivo que nos hemos bajado antes) tecleamos:</div>
<br />
<div style="text-align: left;" class="mycode_align"><div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash --flash_size=detect 0 /home/chujalt/esp8266-20180511-v1.9.4.bin</code></div></div></div>
<br />
<div style="text-align: left;" class="mycode_align">Lógicamente cambiar la ruta donde tenéis vuestro archivo. <span style="font-weight: bold;" class="mycode_b"><span style="color: #cc3333;" class="mycode_color">OJO</span> </span>este comando es el que sale en la página oficial de micropython, me cargaba correctamente, pero luego, a la hora de comprobar por consola si funcionaba micropython (último paso de este tutorial), no salía nada. Si es así, volver a flashear la memoria y probad con estos comandos:</div>
<br />
<div style="text-align: left;" class="mycode_align"><div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>esptool.py --port /dev/ttyUSB0 --baud 115200 write_flash --flash_mode=dout --flash_size=detect 0 /home/chujalt/esp8266-20180511-v1.9.4.bin</code></div></div><br />
Si no os da errores os dirá que ya está cargado micropython.<br />
<br />
Ahora toca comprobar que funciona correctamente, hay varios programas para comunicarnos con el puerto serie, screen, minicom, picocom..... Yo he utilizado screen. Si no lo tenéis instalado:<br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>sudo apt install screen</code></div></div><br />
 </div>
Una vez instalado, tecleamos:<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>screen /dev/ttyUSB0 115200</code></div></div><br />
Se quedará la pantalla en negro, pulsamos el botón reset de nuestro Nodemcu para que se reseté, y si todo ha ido bien nos saldrá el promt de micropyton.<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/micropython_2.png" loading="lazy"  alt="[Imagen: micropython_2.png]" class="mycode_img img-responsive" /></div>
<br />
<div style="text-align: left;" class="mycode_align">Bueno, ya está, espero que le sirva a alguien.</div>
<div style="text-align: left;" class="mycode_align">Saludos.</div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Nodemcu, controlar encendido / apagado de led via wifi]]></title>
			<link>https://chujalt.com/thread-14.html</link>
			<pubDate>Sat, 06 Mar 2021 11:05:11 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://chujalt.com/member.php?action=profile&uid=1">chujalt</a>]]></dc:creator>
			<guid isPermaLink="false">https://chujalt.com/thread-14.html</guid>
			<description><![CDATA[Saludos.<br />
<br />
Vamos a controlar el encendido / apagado  de un led vía wifi con Nodemcu. La página web que nos proporcionará el Nodemcu nos dirá si en led está encendido o apagado y nos mostrará un botón para realizar una acción según sea el caso. <br />
El programa lo cargaremos al Nodemcu con el Arduino IDE.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Materiales necesarios:</span><br />
<ul class="mycode_list"><li>Una placa Nodemcu (yo he utilizado la V2).<br />
</li>
<li>2 cables dupont.<br />
</li>
<li>Un led.<br />
</li>
</ul>
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/nodemcu.jpg" loading="lazy"  width="400" height="400" alt="[Imagen: nodemcu.jpg]" class="mycode_img img-responsive" /></div>
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/led.gif" loading="lazy"  alt="[Imagen: led.gif]" class="mycode_img img-responsive" /></div>
<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Conexiones:</span><br />
<ul class="mycode_list"><li>Pin D7 del Nodemcu al polo positivo del led<br />
</li>
<li>Pin GND del Nodemcu al polo negativo del led<br />
</li>
</ul>
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #3333ff;" class="mycode_color">Código para Nodemcu:</span></span><br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>#include &lt;ESP8266WiFi.h&gt;<br />
 <br />
const char* ssid = "Tu_ssid";<br />
const char* password = "Tu_contraseña";<br />
IPAddress ip(192,168,1,222);<br />
IPAddress gateway(192,168,1,1);<br />
IPAddress subnet(255,255,255,0);<br />
int ledPin = 13; //Lo conectamos a D7<br />
WiFiServer server(80);<br />
 <br />
void setup() {<br />
  Serial.begin(115200);<br />
  delay(10);<br />
 <br />
  pinMode(ledPin, OUTPUT);<br />
  digitalWrite(ledPin, LOW);<br />
<br />
  WiFi.begin(ssid, password);<br />
  WiFi.config(ip, gateway, subnet);<br />
  <br />
  server.begin(); <br />
}<br />
 <br />
void loop() {<br />
<br />
  WiFiClient client = server.available();<br />
  if (!client) {<br />
    return;<br />
  }<br />
 <br />
<br />
  Serial.println("new client");<br />
  while(!client.available()){<br />
    delay(1);<br />
  }<br />
 <br />
  String request = client.readStringUntil('&#92;r');<br />
  client.flush();<br />
 <br />
 <br />
  int value = digitalRead(ledPin);<br />
  if (request.indexOf("/LED=ON") != -1)  {<br />
    digitalWrite(ledPin, HIGH);<br />
    value = HIGH;<br />
  }<br />
  if (request.indexOf("/LED=OFF") != -1)  {<br />
    digitalWrite(ledPin, LOW);<br />
    value = LOW;<br />
  }<br />
 <br />
 <br />
  client.println("HTTP/1.1 200 OK");<br />
  client.println("Content-Type: text/html");<br />
  client.println("");<br />
  client.println("&lt;!DOCTYPE HTML&gt;");<br />
  client.println("&lt;html&gt;");<br />
 <br />
  client.print("El led esta ahora: ");<br />
 <br />
  if(value == HIGH) {<br />
    client.print("Encendido");<br />
    client.println("&lt;br&gt;&lt;br&gt;");<br />
    client.println("&lt;a href=&#92;"/LED=OFF&#92;"&#92;"&gt;&lt;button&gt;Apagar&lt;/button&gt;&lt;/a&gt;&lt;br /&gt;");  <br />
  } else {<br />
    client.print("Apagado");<br />
client.println("&lt;br&gt;&lt;br&gt;");<br />
  client.println("&lt;a href=&#92;"/LED=ON&#92;"&#92;"&gt;&lt;button&gt;Encender&lt;/button&gt;&lt;/a&gt;");<br />
  } <br />
  client.println("&lt;/html&gt;");<br />
 <br />
  delay(1);<br />
 <br />
}</code></div></div><br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #3333ff;" class="mycode_color">Comentario del código:</span></span><br />
<br />
En primer lugar está la configuración de la red wifi. Deberás cambiar la sidd y la contraseña por la de tu router. En este script le asignamos la dirección IP 192.168.1.222, la puedes cambiar a tu gusto siempre que esté en el rango de ips de tu router.<br />
<br />
Le asignamos el pin 13 al led, que en la placa Nodemcu es el D7, le indicamos que es de salida y lo iniciamos en LOW (apagado).<br />
<br />
Comenzamos la comunicación Wifi.<br />
<br />
Recién encendida la placa Nodemcu, el led estará apagado, al pone en el navegador la dirección IP 192.168.1.222 nos mostrará lo siguiente:<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/nodemculed1.png" loading="lazy"  alt="[Imagen: nodemculed1.png]" class="mycode_img img-responsive" /></div>
<br />
<br />
<div style="text-align: left;" class="mycode_align">Si le damos al botón de encender, el led se encenderá y el navegador nos mostrará:</div>
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/nodemculed2.png" loading="lazy"  alt="[Imagen: nodemculed2.png]" class="mycode_img img-responsive" /></div>
<br />
<br />
<div style="text-align: left;" class="mycode_align">Si le damos al botón de apagar, el led se apagará y nos mostrará el navegador:</div>
<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/nodemculed3.png" loading="lazy"  alt="[Imagen: nodemculed3.png]" class="mycode_img img-responsive" /></div>
<br />
<br />
<br />
<div style="text-align: left;" class="mycode_align">Y ya está. Como habéis visto la página que muestra es muy sencilla, pero era para que vierais como funciona.</div>
<br />
<div style="text-align: left;" class="mycode_align">Bueno, espero que le sirva a alguien.</div>
<br />
<div style="text-align: left;" class="mycode_align">Saludos.</div>]]></description>
			<content:encoded><![CDATA[Saludos.<br />
<br />
Vamos a controlar el encendido / apagado  de un led vía wifi con Nodemcu. La página web que nos proporcionará el Nodemcu nos dirá si en led está encendido o apagado y nos mostrará un botón para realizar una acción según sea el caso. <br />
El programa lo cargaremos al Nodemcu con el Arduino IDE.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Materiales necesarios:</span><br />
<ul class="mycode_list"><li>Una placa Nodemcu (yo he utilizado la V2).<br />
</li>
<li>2 cables dupont.<br />
</li>
<li>Un led.<br />
</li>
</ul>
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/nodemcu.jpg" loading="lazy"  width="400" height="400" alt="[Imagen: nodemcu.jpg]" class="mycode_img img-responsive" /></div>
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/led.gif" loading="lazy"  alt="[Imagen: led.gif]" class="mycode_img img-responsive" /></div>
<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Conexiones:</span><br />
<ul class="mycode_list"><li>Pin D7 del Nodemcu al polo positivo del led<br />
</li>
<li>Pin GND del Nodemcu al polo negativo del led<br />
</li>
</ul>
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #3333ff;" class="mycode_color">Código para Nodemcu:</span></span><br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>#include &lt;ESP8266WiFi.h&gt;<br />
 <br />
const char* ssid = "Tu_ssid";<br />
const char* password = "Tu_contraseña";<br />
IPAddress ip(192,168,1,222);<br />
IPAddress gateway(192,168,1,1);<br />
IPAddress subnet(255,255,255,0);<br />
int ledPin = 13; //Lo conectamos a D7<br />
WiFiServer server(80);<br />
 <br />
void setup() {<br />
  Serial.begin(115200);<br />
  delay(10);<br />
 <br />
  pinMode(ledPin, OUTPUT);<br />
  digitalWrite(ledPin, LOW);<br />
<br />
  WiFi.begin(ssid, password);<br />
  WiFi.config(ip, gateway, subnet);<br />
  <br />
  server.begin(); <br />
}<br />
 <br />
void loop() {<br />
<br />
  WiFiClient client = server.available();<br />
  if (!client) {<br />
    return;<br />
  }<br />
 <br />
<br />
  Serial.println("new client");<br />
  while(!client.available()){<br />
    delay(1);<br />
  }<br />
 <br />
  String request = client.readStringUntil('&#92;r');<br />
  client.flush();<br />
 <br />
 <br />
  int value = digitalRead(ledPin);<br />
  if (request.indexOf("/LED=ON") != -1)  {<br />
    digitalWrite(ledPin, HIGH);<br />
    value = HIGH;<br />
  }<br />
  if (request.indexOf("/LED=OFF") != -1)  {<br />
    digitalWrite(ledPin, LOW);<br />
    value = LOW;<br />
  }<br />
 <br />
 <br />
  client.println("HTTP/1.1 200 OK");<br />
  client.println("Content-Type: text/html");<br />
  client.println("");<br />
  client.println("&lt;!DOCTYPE HTML&gt;");<br />
  client.println("&lt;html&gt;");<br />
 <br />
  client.print("El led esta ahora: ");<br />
 <br />
  if(value == HIGH) {<br />
    client.print("Encendido");<br />
    client.println("&lt;br&gt;&lt;br&gt;");<br />
    client.println("&lt;a href=&#92;"/LED=OFF&#92;"&#92;"&gt;&lt;button&gt;Apagar&lt;/button&gt;&lt;/a&gt;&lt;br /&gt;");  <br />
  } else {<br />
    client.print("Apagado");<br />
client.println("&lt;br&gt;&lt;br&gt;");<br />
  client.println("&lt;a href=&#92;"/LED=ON&#92;"&#92;"&gt;&lt;button&gt;Encender&lt;/button&gt;&lt;/a&gt;");<br />
  } <br />
  client.println("&lt;/html&gt;");<br />
 <br />
  delay(1);<br />
 <br />
}</code></div></div><br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #3333ff;" class="mycode_color">Comentario del código:</span></span><br />
<br />
En primer lugar está la configuración de la red wifi. Deberás cambiar la sidd y la contraseña por la de tu router. En este script le asignamos la dirección IP 192.168.1.222, la puedes cambiar a tu gusto siempre que esté en el rango de ips de tu router.<br />
<br />
Le asignamos el pin 13 al led, que en la placa Nodemcu es el D7, le indicamos que es de salida y lo iniciamos en LOW (apagado).<br />
<br />
Comenzamos la comunicación Wifi.<br />
<br />
Recién encendida la placa Nodemcu, el led estará apagado, al pone en el navegador la dirección IP 192.168.1.222 nos mostrará lo siguiente:<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/nodemculed1.png" loading="lazy"  alt="[Imagen: nodemculed1.png]" class="mycode_img img-responsive" /></div>
<br />
<br />
<div style="text-align: left;" class="mycode_align">Si le damos al botón de encender, el led se encenderá y el navegador nos mostrará:</div>
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/nodemculed2.png" loading="lazy"  alt="[Imagen: nodemculed2.png]" class="mycode_img img-responsive" /></div>
<br />
<br />
<div style="text-align: left;" class="mycode_align">Si le damos al botón de apagar, el led se apagará y nos mostrará el navegador:</div>
<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/nodemculed3.png" loading="lazy"  alt="[Imagen: nodemculed3.png]" class="mycode_img img-responsive" /></div>
<br />
<br />
<br />
<div style="text-align: left;" class="mycode_align">Y ya está. Como habéis visto la página que muestra es muy sencilla, pero era para que vierais como funciona.</div>
<br />
<div style="text-align: left;" class="mycode_align">Bueno, espero que le sirva a alguien.</div>
<br />
<div style="text-align: left;" class="mycode_align">Saludos.</div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Enviar mensaje de texto a Arduino vía wifi con HLK-RM04]]></title>
			<link>https://chujalt.com/thread-13.html</link>
			<pubDate>Fri, 05 Mar 2021 20:33:38 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://chujalt.com/member.php?action=profile&uid=1">chujalt</a>]]></dc:creator>
			<guid isPermaLink="false">https://chujalt.com/thread-13.html</guid>
			<description><![CDATA[Saludos.<br />
<br />
Os voy a mostrar como mandar mensajes (strings) a una placa arduino vía wifi desde un PC, tablet o smartphone.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Materiales utilizados: </span><br />
<ul class="mycode_list"><li>Una placa Arduino (yo he utilizado la Uno)<br />
</li>
<li>Un módulo wifi HLK-RM04<br />
</li>
<li>Una pantalla lcd I2C 16X2<br />
</li>
<li>8 cables dupont<br />
</li>
</ul>
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/WIFI-HLK-RM04.jpg" loading="lazy"  alt="[Imagen: WIFI-HLK-RM04.jpg]" class="mycode_img img-responsive" /></div>
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/lcd_i2c.jpg" loading="lazy"  width="477" height="477" alt="[Imagen: lcd_i2c.jpg]" class="mycode_img img-responsive" /></div>
<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Conexiones: </span><br />
<ul class="mycode_list"><li>Pin RX del módulo HLK-RM04 a pin TX de Arduino.<br />
</li>
<li>Pin TX del módulo HLK-RM04 a pin RX de Arduino.<br />
</li>
<li>Pin 5V del módulo HLK-RM04 a pin 5V de Arduino.<br />
</li>
<li>Pin GND del módulo HLK-RM04 a pin GND de Arduino.<br />
</li>
<li>Pin SDA del lcd a pin A4 de Arduino.<br />
</li>
<li>Pin CSL del lcd a pin A5 de Arduino.<br />
</li>
<li>Pin VCC del lcd a pin 5V de Arduino.<br />
</li>
<li>Pin GND del lcd a pin GND de Aruino.<br />
</li>
</ul>
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Software necesario:</span><br />
<ul class="mycode_list"><li>Una página web para mandar el mensaje.<br />
</li>
<li>El código para la placa Arduino.<br />
</li>
</ul>
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #3333ff;" class="mycode_color">Código para página web:</span></span><br />
<br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;<br />
&lt;title&gt;mandar Mensaje&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;p align="center"&gt;<br />
&lt;font size="8"&gt;<br />
&lt;/p&gt;<br />
 &lt;form name="input" action="http://192.168.1.254:8080/mensaje" method="get"&gt;<br />
Introduce texto: &lt;input type="text" name="f"&gt;<br />
&lt;input type="submit" value="Submit"&gt;<br />
&lt;/form&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</code></div></div><br />
<br />
Como veis el código es muy simple, tiene sólo lo indispensable para que funcione.<br />
Lo importante es el action del formulario, que apunta a la dirección ip del módulo HLK-RM04 por el puerto 8080 y a una página llamada mensaje, que en realidad no existe pero lo recogerá nuestra placa Arduino y el method, que tiene que ser get, esto es que mandará el mensaje a través de la url. También en el campo de texto, que lo llamamos f para que recoja la variable y envíe el mensaje a través de ésta a nuestra placa.<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #3333ff;" class="mycode_color">Código para la Arduino:</span></span><br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>#include &lt;Wire.h&gt; <br />
#include &lt;LiquidCrystal_I2C.h&gt;<br />
<br />
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  <br />
<br />
void setup() {     <br />
  Serial.begin(57600);  <br />
 lcd.begin(16,2);   <br />
  lcd.backlight(); <br />
}<br />
<br />
String f = "";<br />
void loop() {<br />
  boolean has_request = false;<br />
  String in = "";<br />
  if (Serial.available()) {<br />
    in = "";<br />
    while (true) {  <br />
      while (Serial.available() == false) {}<br />
      in += (char)(Serial.read());<br />
      if (in.endsWith("&#92;r&#92;n&#92;r&#92;n")) {<br />
        has_request = true;  break;<br />
      }<br />
    }   <br />
  }<br />
  if (has_request) {<br />
    char i1 = in.indexOf("GET /mensaje?f="), i2;<br />
    if (i1 != -1) {<br />
      i2 = in.indexOf(" ", i1+15);<br />
      f = in.substring(i1+15, i2);<br />
    }<br />
    Serial.println("HTTP/1.1 200 OK");<br />
    Serial.println("Content-Type: text/html");<br />
    Serial.println("Connection: close"); <br />
<br />
    String sr = "&lt;!DOCTYPE HTML&gt;&#92;n";<br />
    sr += "&lt;html&gt;&#92;n";<br />
    sr += "&lt;body onload='history.back();'&gt;&#92;n";&nbsp;&nbsp;&nbsp;&nbsp;<br />
    sr += "&lt;/body&gt;";  <br />
    sr += "&lt;/html&gt;";<br />
    Serial.print("Content-Length: ");<br />
    Serial.print(sr.length());<br />
    Serial.print("&#92;r&#92;n&#92;r&#92;n");<br />
    Serial.print(sr);<br />
    has_request = false; <br />
    lcd.clear();<br />
    f.replace("+", " ");<br />
     lcd.print(f);<br />
  }<br />
<br />
<br />
}</code></div></div><br />
<br />
Este código básicamente lo que hacer es, primero cargar las librerías necesarias, iniciar la comunicación de arduino con el módulo wifi e iniciar la pantalla lcd, recoger el valor de la variable (mensaje) que le hemos enviado, enviar una página web muy básica para que el navegador vuelva a la página de enviar mensajes, imprimir el mensaje en la pantalla lcd.<br />
Cabe destacar que las url no admiten los espacios en blanco, por lo que nuestro navegador, si el mensaje los contiene los sustituirá por el signo +, si nuestro mensaje es "Hola Juan" en la pantalla del lcd imprimirá "Hola+Juan", el código también sustituye los signos + por espacios en blanco para que nos imprima "Hola Juan".<br />
<br />
Bueno, espero que le sirva a alguien <img src="https://chujalt.com/images/smilies/wink.png" alt="Guiño" title="Guiño" class="smilie smilie_2" />]]></description>
			<content:encoded><![CDATA[Saludos.<br />
<br />
Os voy a mostrar como mandar mensajes (strings) a una placa arduino vía wifi desde un PC, tablet o smartphone.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Materiales utilizados: </span><br />
<ul class="mycode_list"><li>Una placa Arduino (yo he utilizado la Uno)<br />
</li>
<li>Un módulo wifi HLK-RM04<br />
</li>
<li>Una pantalla lcd I2C 16X2<br />
</li>
<li>8 cables dupont<br />
</li>
</ul>
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/WIFI-HLK-RM04.jpg" loading="lazy"  alt="[Imagen: WIFI-HLK-RM04.jpg]" class="mycode_img img-responsive" /></div>
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/lcd_i2c.jpg" loading="lazy"  width="477" height="477" alt="[Imagen: lcd_i2c.jpg]" class="mycode_img img-responsive" /></div>
<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Conexiones: </span><br />
<ul class="mycode_list"><li>Pin RX del módulo HLK-RM04 a pin TX de Arduino.<br />
</li>
<li>Pin TX del módulo HLK-RM04 a pin RX de Arduino.<br />
</li>
<li>Pin 5V del módulo HLK-RM04 a pin 5V de Arduino.<br />
</li>
<li>Pin GND del módulo HLK-RM04 a pin GND de Arduino.<br />
</li>
<li>Pin SDA del lcd a pin A4 de Arduino.<br />
</li>
<li>Pin CSL del lcd a pin A5 de Arduino.<br />
</li>
<li>Pin VCC del lcd a pin 5V de Arduino.<br />
</li>
<li>Pin GND del lcd a pin GND de Aruino.<br />
</li>
</ul>
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Software necesario:</span><br />
<ul class="mycode_list"><li>Una página web para mandar el mensaje.<br />
</li>
<li>El código para la placa Arduino.<br />
</li>
</ul>
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #3333ff;" class="mycode_color">Código para página web:</span></span><br />
<br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;<br />
&lt;title&gt;mandar Mensaje&lt;/title&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&lt;p align="center"&gt;<br />
&lt;font size="8"&gt;<br />
&lt;/p&gt;<br />
 &lt;form name="input" action="http://192.168.1.254:8080/mensaje" method="get"&gt;<br />
Introduce texto: &lt;input type="text" name="f"&gt;<br />
&lt;input type="submit" value="Submit"&gt;<br />
&lt;/form&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</code></div></div><br />
<br />
Como veis el código es muy simple, tiene sólo lo indispensable para que funcione.<br />
Lo importante es el action del formulario, que apunta a la dirección ip del módulo HLK-RM04 por el puerto 8080 y a una página llamada mensaje, que en realidad no existe pero lo recogerá nuestra placa Arduino y el method, que tiene que ser get, esto es que mandará el mensaje a través de la url. También en el campo de texto, que lo llamamos f para que recoja la variable y envíe el mensaje a través de ésta a nuestra placa.<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #3333ff;" class="mycode_color">Código para la Arduino:</span></span><br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>#include &lt;Wire.h&gt; <br />
#include &lt;LiquidCrystal_I2C.h&gt;<br />
<br />
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  <br />
<br />
void setup() {     <br />
  Serial.begin(57600);  <br />
 lcd.begin(16,2);   <br />
  lcd.backlight(); <br />
}<br />
<br />
String f = "";<br />
void loop() {<br />
  boolean has_request = false;<br />
  String in = "";<br />
  if (Serial.available()) {<br />
    in = "";<br />
    while (true) {  <br />
      while (Serial.available() == false) {}<br />
      in += (char)(Serial.read());<br />
      if (in.endsWith("&#92;r&#92;n&#92;r&#92;n")) {<br />
        has_request = true;  break;<br />
      }<br />
    }   <br />
  }<br />
  if (has_request) {<br />
    char i1 = in.indexOf("GET /mensaje?f="), i2;<br />
    if (i1 != -1) {<br />
      i2 = in.indexOf(" ", i1+15);<br />
      f = in.substring(i1+15, i2);<br />
    }<br />
    Serial.println("HTTP/1.1 200 OK");<br />
    Serial.println("Content-Type: text/html");<br />
    Serial.println("Connection: close"); <br />
<br />
    String sr = "&lt;!DOCTYPE HTML&gt;&#92;n";<br />
    sr += "&lt;html&gt;&#92;n";<br />
    sr += "&lt;body onload='history.back();'&gt;&#92;n";&nbsp;&nbsp;&nbsp;&nbsp;<br />
    sr += "&lt;/body&gt;";  <br />
    sr += "&lt;/html&gt;";<br />
    Serial.print("Content-Length: ");<br />
    Serial.print(sr.length());<br />
    Serial.print("&#92;r&#92;n&#92;r&#92;n");<br />
    Serial.print(sr);<br />
    has_request = false; <br />
    lcd.clear();<br />
    f.replace("+", " ");<br />
     lcd.print(f);<br />
  }<br />
<br />
<br />
}</code></div></div><br />
<br />
Este código básicamente lo que hacer es, primero cargar las librerías necesarias, iniciar la comunicación de arduino con el módulo wifi e iniciar la pantalla lcd, recoger el valor de la variable (mensaje) que le hemos enviado, enviar una página web muy básica para que el navegador vuelva a la página de enviar mensajes, imprimir el mensaje en la pantalla lcd.<br />
Cabe destacar que las url no admiten los espacios en blanco, por lo que nuestro navegador, si el mensaje los contiene los sustituirá por el signo +, si nuestro mensaje es "Hola Juan" en la pantalla del lcd imprimirá "Hola+Juan", el código también sustituye los signos + por espacios en blanco para que nos imprima "Hola Juan".<br />
<br />
Bueno, espero que le sirva a alguien <img src="https://chujalt.com/images/smilies/wink.png" alt="Guiño" title="Guiño" class="smilie smilie_2" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Arduino, mostrar mensajes predefinidos en lcd I2C 16x2]]></title>
			<link>https://chujalt.com/thread-12.html</link>
			<pubDate>Fri, 05 Mar 2021 20:31:15 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://chujalt.com/member.php?action=profile&uid=1">chujalt</a>]]></dc:creator>
			<guid isPermaLink="false">https://chujalt.com/thread-12.html</guid>
			<description><![CDATA[Saludos<br />
<br />
Os voy a mostrar el código que he hecho para mostrar unos mensajes ya predefinidos (y que se muestran según la tecla que pulses en un teclado) en una pantalla lcd I2C 16X2 (16 caracteres y 2 líneas)<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Materiales utilizados:</span><br />
<ul class="mycode_list"><li>Una placa arduino Uno o nano (yo he utilizado la nano, pero también vale para la Uno)<br />
</li>
<li>4 cables dupont<br />
</li>
<li>Una pantalla lcd I2C 16X2<br />
</li>
</ul>
<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/lcd_i2c.jpg" loading="lazy"  width="477" height="477" alt="[Imagen: lcd_i2c.jpg]" class="mycode_img img-responsive" /></div>
<br />
<br />
<br />
<br />
<div style="text-align: left;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b">Conexiones:</span></div>
<div style="text-align: left;" class="mycode_align"><ul class="mycode_list"><li>Pin SCL del lcd --&gt; Pin A5 de Arduino<br />
</li>
<li>Pin SDA del lcd --&gt; Pin A4 de Arduino<br />
</li>
<li>Pin VCC del lcd --&gt; Pin 5 voltios de Arduino<br />
</li>
<li>Pin GND del lcd --&gt; Pin GND de Arduino<br />
</li>
</ul>
</div>
<br />
<div style="text-align: left;" class="mycode_align">El código es el siguiente, después de él pasaré a comentarlo:</div>
<br />
<div style="text-align: left;" class="mycode_align"><div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>#include &lt;Wire.h&gt; <br />
#include &lt;LiquidCrystal_I2C.h&gt;<br />
<br />
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);<br />
<br />
void setup()  <br />
{<br />
  Serial.begin(9600);  <br />
<br />
  lcd.begin(16,2);   <br />
<br />
  lcd.backlight(); <br />
<br />
}<br />
<br />
void loop() <br />
  {   <br />
    lcd.setCursor(0, 0);<br />
  lcd.write("Esperando datos"); <br />
  lcd.blink();<br />
  delay(1000);<br />
 if (Serial.available()) {<br />
<br />
      delay(100);  <br />
       lcd.setCursor (0,1);<br />
      while (Serial.available() &gt; 0) {<br />
        char pepe = Serial.read();<br />
if (pepe == '1')<br />
{<br />
  lcd.clear();<br />
  lcd.setCursor(0, 0);<br />
  lcd.write("Mensaje recibido");  <br />
   delay(100);  <br />
       lcd.setCursor (0,1);<br />
lcd.write("Hola");<br />
 lcd.noBlink();<br />
}<br />
 <br />
else if (pepe == '2')<br />
{<br />
  lcd.clear();<br />
  lcd.setCursor(0, 0);<br />
  lcd.write("Mensaje recibido");  <br />
   delay(100);  <br />
       lcd.setCursor (0,1);<br />
lcd.write("Adios");<br />
 lcd.noBlink();<br />
}<br />
else <br />
{<br />
   lcd.clear();<br />
lcd.write("Mensaje erroneo");<br />
 lcd.noBlink();<br />
<br />
}      </code></div></div></div>
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Comentario del código</span>:<ul class="mycode_list"><li>Incluimos las librerias necesarias para que todo funcione correctamente.<br />
</li>
<li>Indicamos todos los pines necesarios<br />
</li>
<li>Iniciamos la comunicación a 9600 baudios<br />
</li>
<li>Encendemos el lcd<br />
</li>
<li>Situamos el cursor del lcd en la primera linea e imprimimos la frase "Esperando datos" con un blink después del último carácter que se enciende y se apaga.<br />
</li>
<li>Si se inicia la comunicación serial (enviamos algo a la placa arduino) creamos unas variable tipo char (la he llamado pepe) para almacenar los valores de ese envío.<br />
</li>
<li>Limpiamos la pantalla del lcd<br />
</li>
<li>En la primera linea mostramos "Mensaje recibido"<br />
</li>
<li>La segunda linea mostrará, si hemos tecleado un 1 "Hola", si hemos pulsado un 2 "Adios", si pulsamos cualquier otra cosa "Mensaje erroneo"<br />
</li>
<li>Espera 5 segundos para que podamos leer el mensaje, limpia la pantalla del lcd y vuelve a poner "Esperando datos"<br />
</li>
<li>Está claro que podemos poner todos los "else if" que queramos para esperar unas pulsaciones de teclado y su correspondiente mensaje a mostrar.<br />
</li>
</ul>
<br />
Bueno, espero que os sirve de algo y que el código os sirva para luego ir adaptándolo como vosotros queráis.]]></description>
			<content:encoded><![CDATA[Saludos<br />
<br />
Os voy a mostrar el código que he hecho para mostrar unos mensajes ya predefinidos (y que se muestran según la tecla que pulses en un teclado) en una pantalla lcd I2C 16X2 (16 caracteres y 2 líneas)<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Materiales utilizados:</span><br />
<ul class="mycode_list"><li>Una placa arduino Uno o nano (yo he utilizado la nano, pero también vale para la Uno)<br />
</li>
<li>4 cables dupont<br />
</li>
<li>Una pantalla lcd I2C 16X2<br />
</li>
</ul>
<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/lcd_i2c.jpg" loading="lazy"  width="477" height="477" alt="[Imagen: lcd_i2c.jpg]" class="mycode_img img-responsive" /></div>
<br />
<br />
<br />
<br />
<div style="text-align: left;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b">Conexiones:</span></div>
<div style="text-align: left;" class="mycode_align"><ul class="mycode_list"><li>Pin SCL del lcd --&gt; Pin A5 de Arduino<br />
</li>
<li>Pin SDA del lcd --&gt; Pin A4 de Arduino<br />
</li>
<li>Pin VCC del lcd --&gt; Pin 5 voltios de Arduino<br />
</li>
<li>Pin GND del lcd --&gt; Pin GND de Arduino<br />
</li>
</ul>
</div>
<br />
<div style="text-align: left;" class="mycode_align">El código es el siguiente, después de él pasaré a comentarlo:</div>
<br />
<div style="text-align: left;" class="mycode_align"><div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>#include &lt;Wire.h&gt; <br />
#include &lt;LiquidCrystal_I2C.h&gt;<br />
<br />
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);<br />
<br />
void setup()  <br />
{<br />
  Serial.begin(9600);  <br />
<br />
  lcd.begin(16,2);   <br />
<br />
  lcd.backlight(); <br />
<br />
}<br />
<br />
void loop() <br />
  {   <br />
    lcd.setCursor(0, 0);<br />
  lcd.write("Esperando datos"); <br />
  lcd.blink();<br />
  delay(1000);<br />
 if (Serial.available()) {<br />
<br />
      delay(100);  <br />
       lcd.setCursor (0,1);<br />
      while (Serial.available() &gt; 0) {<br />
        char pepe = Serial.read();<br />
if (pepe == '1')<br />
{<br />
  lcd.clear();<br />
  lcd.setCursor(0, 0);<br />
  lcd.write("Mensaje recibido");  <br />
   delay(100);  <br />
       lcd.setCursor (0,1);<br />
lcd.write("Hola");<br />
 lcd.noBlink();<br />
}<br />
 <br />
else if (pepe == '2')<br />
{<br />
  lcd.clear();<br />
  lcd.setCursor(0, 0);<br />
  lcd.write("Mensaje recibido");  <br />
   delay(100);  <br />
       lcd.setCursor (0,1);<br />
lcd.write("Adios");<br />
 lcd.noBlink();<br />
}<br />
else <br />
{<br />
   lcd.clear();<br />
lcd.write("Mensaje erroneo");<br />
 lcd.noBlink();<br />
<br />
}      </code></div></div></div>
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Comentario del código</span>:<ul class="mycode_list"><li>Incluimos las librerias necesarias para que todo funcione correctamente.<br />
</li>
<li>Indicamos todos los pines necesarios<br />
</li>
<li>Iniciamos la comunicación a 9600 baudios<br />
</li>
<li>Encendemos el lcd<br />
</li>
<li>Situamos el cursor del lcd en la primera linea e imprimimos la frase "Esperando datos" con un blink después del último carácter que se enciende y se apaga.<br />
</li>
<li>Si se inicia la comunicación serial (enviamos algo a la placa arduino) creamos unas variable tipo char (la he llamado pepe) para almacenar los valores de ese envío.<br />
</li>
<li>Limpiamos la pantalla del lcd<br />
</li>
<li>En la primera linea mostramos "Mensaje recibido"<br />
</li>
<li>La segunda linea mostrará, si hemos tecleado un 1 "Hola", si hemos pulsado un 2 "Adios", si pulsamos cualquier otra cosa "Mensaje erroneo"<br />
</li>
<li>Espera 5 segundos para que podamos leer el mensaje, limpia la pantalla del lcd y vuelve a poner "Esperando datos"<br />
</li>
<li>Está claro que podemos poner todos los "else if" que queramos para esperar unas pulsaciones de teclado y su correspondiente mensaje a mostrar.<br />
</li>
</ul>
<br />
Bueno, espero que os sirve de algo y que el código os sirva para luego ir adaptándolo como vosotros queráis.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Control de acceso, Arduino + php + mysql]]></title>
			<link>https://chujalt.com/thread-11.html</link>
			<pubDate>Fri, 05 Mar 2021 20:29:42 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://chujalt.com/member.php?action=profile&uid=1">chujalt</a>]]></dc:creator>
			<guid isPermaLink="false">https://chujalt.com/thread-11.html</guid>
			<description><![CDATA[Saludos....<br />
<br />
Os voy a mostrar como hacer un control de acceso utilizando la placa arduino, mas un poco de código php y base de datos Mysql. De esta manera podemos loguearnos desde cualquier dispositivo que este conectado a internet, un pc, una tablet, un teléfono, etc.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Materiales utilizados</span>:<br />
<ul class="mycode_list"><li>Una Placa Arduino (yo he utilizado la nano)<br />
</li>
<li>8 cables dupont<br />
</li>
<li>Una pantalla lcd I2C 16X2<br />
</li>
<li>Un módulo led rgb<br />
</li>
</ul>
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/lcd_i2c.jpg" loading="lazy"  width="400" height="400" alt="[Imagen: lcd_i2c.jpg]" class="mycode_img img-responsive" /></div>
<br />
<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/led_rgb.jpg" loading="lazy"  alt="[Imagen: led_rgb.jpg]" class="mycode_img img-responsive" /></div>
<br />
<br />
<br />
<span style="color: #333333;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">Conexiones:</span></span><br />
<ul class="mycode_list"><li>Pin SCL del lcd --&gt; Pin A5 de Arduino<br />
</li>
<li>Pin SDA del lcd --&gt; Pin A4 de Arduino<br />
</li>
<li>Pin VCC del lcd --&gt; Pin 5 voltios de Arduino<br />
</li>
<li>Pin GND del lcd --&gt; Pin GND de Arduino<br />
</li>
<li>Pin V-G del led --&gt;Pin GND de Arduino<br />
</li>
<li>Pin R del led --&gt; Pin 11 de Arduino<br />
</li>
<li>Pin G del led --&gt; Pin 10 de arduino<br />
</li>
<li>Pin B del led --&gt; Pin 9 de Arduino <br />
</li>
</ul>
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Software necesario</span>:<br />
<ul class="mycode_list"><li>El código para Arduino (se mostrará mas abajo).<br />
</li>
<li>Una página php para introducir el código y verificarlo (se mostrará mas abajo).<br />
</li>
<li>Una página php para conectar con la base de datos donde están los usuarios y los códigos de acceso (se mostrará mas abajo).<br />
</li>
<li>Una archivo php que conecta nuestro ordenador con arduino. Para descargar <a href="http://haciendoweb.com/archivos/php_serial_class_php.zip" target="_blank" rel="noopener" class="mycode_url">AQUI</a><br />
</li>
<li>Una base de datos Mysql donde se guardarán los usuarios y los códigos de acceso (se explicará mas abajo).<br />
</li>
</ul>
<br />
<br />
El sistema lo que hace es mostrar en la pantalla del lcd la frase "ESPERANDO DATOS" mientras el led está en color azul parpadeante.<br />
Cuando ponemos desde la página web el código, si éste es correcto la pantalla lcd muestra "Saludos + nombre de usuario" y el led se pone de color verde. Si el código es incorrecto, no existe, la pantalla muestra "Sin acceso. Código erroneo" y muestra el led de color rojo.<br />
Cabe decir que se puede ampliar para que, por ejemplo, accione un relé para abrir una puerta o lo que se os ocurra.<br />
<br />
<br />
<br />
<span style="color: #3333ff;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">Código para la placa arduino</span></span>:<br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>#include &lt;Wire.h&gt; <br />
#include &lt;LiquidCrystal_I2C.h&gt;<br />
<br />
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);<br />
int redPin = 11;<br />
int greenPin = 10;<br />
int bluePin = 9;<br />
void setup()  <br />
{<br />
  Serial.begin(9600);  <br />
 pinMode(redPin, OUTPUT);<br />
  pinMode(greenPin, OUTPUT);<br />
  pinMode(bluePin, OUTPUT); <br />
  lcd.begin(16,2);   <br />
<br />
  lcd.backlight(); <br />
  lcd.setCursor(4,0);<br />
  lcd.print("ESPERANDO");<br />
  lcd.setCursor(6,1);<br />
  lcd.print("DATOS");  <br />
while(!Serial.available()) {<br />
  digitalWrite(bluePin, HIGH);<br />
  delay(500);<br />
  digitalWrite(bluePin, LOW);<br />
  delay(500); <br />
}<br />
}<br />
<br />
void loop() <br />
  {<br />
    if (Serial.available()) {<br />
      delay(100);  <br />
      lcd.clear(); <br />
      lcd.setCursor(4,0);<br />
     lcd.print("SALUDOS"); <br />
     lcd.setCursor(1,1); <br />
      while (Serial.available() &gt; 0) {<br />
        char pepe = Serial.read();<br />
        char juan[] = "^";<br />
        if (pepe == juan[0]) <br />
        {<br />
          lcd.clear();<br />
           lcd.setCursor(3,0);<br />
     lcd.print("SIN ACCESO"); <br />
     lcd.setCursor(1,1); <br />
        lcd.write("CODIGO ERRONEO");<br />
        digitalWrite(bluePin, LOW);<br />
  digitalWrite(greenPin, LOW); <br />
  digitalWrite(redPin, HIGH);<br />
<br />
        }<br />
        else<br />
        {<br />
        lcd.write(pepe);<br />
        digitalWrite(bluePin, LOW);<br />
  digitalWrite(greenPin, HIGH); <br />
  digitalWrite(redPin, LOW); <br />
        }<br />
           <br />
      }<br />
      delay(5000);<br />
    digitalWrite(greenPin, LOW); <br />
  digitalWrite(redPin, LOW);  <br />
  software_Reset() ; <br />
    }<br />
  }<br />
 void software_Reset() <br />
{<br />
asm volatile ("  jmp 0");  <br />
}  </code></div></div><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Comentario del código</span>:<br />
<ul class="mycode_list"><li>Incluimos las librerías necesarias para que todo funcione correctamente.<br />
</li>
<li>Indicamos todos los pines necesarios.<br />
</li>
<li>Iniciamos la comunicación a 9600 baudios.<br />
</li>
<li>Apagamos todos los colores del led y encendemos el lcd.<br />
</li>
<li>Le decimos al lcd que muestre en pantalla "ESPERANDO DATOS" y que el led parpadee en color azul cada medio segundo.<br />
</li>
<li>Si se inicia la comunicación serial y ésta envía el carácter "^" (previamente enviada por la página php) el lcd imprime  "Sin acceso. Código erroneo" y el led se pone en rojo fijo.<br />
</li>
<li>Si la página php no envía ese carácter y envía otra cadena, ésta sera el nombre de usuario, que previamente ha sido confirmada desde la base de datos al meter el código, entonces la pantalla de lcd mostrará "Saludos (nombre del usuario)" y el led se pondrá en color verde fijo.<br />
</li>
<li>Tanto como si el código es bueno o erróneo, a los 5 segundos se resetea y vuelve a mostrar en pantalla  "ESPERANDO DATOS" y el led de color azul parpadeante.<br />
</li>
</ul>
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #3333ff;" class="mycode_color">Código pagina principal php</span></span>:<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Código PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">&lt;!</span><span style="color: #0000BB">DOCTYPE&nbsp;HTML&nbsp;</span><span style="color: #007700">PUBLIC&nbsp;</span><span style="color: #DD0000">"-//W3C//DTD&nbsp;HTML&nbsp;4.01&nbsp;Transitional//EN"</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">html</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">head</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">title</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">CONTROL&nbsp;DE&nbsp;ACCESO</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">title</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">meta&nbsp;http</span><span style="color: #007700">-</span><span style="color: #0000BB">equiv</span><span style="color: #007700">=</span><span style="color: #DD0000">"content-type"&nbsp;</span><span style="color: #0000BB">content</span><span style="color: #007700">=</span><span style="color: #DD0000">"text/html;&nbsp;charset=ISO-8859-1"&nbsp;</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">META&nbsp;name</span><span style="color: #007700">=</span><span style="color: #DD0000">"robots"&nbsp;</span><span style="color: #0000BB">content</span><span style="color: #007700">=</span><span style="color: #DD0000">"NOINDEX,NOFOLLOW"</span><span style="color: #007700">&gt;&nbsp;<br />&lt;/</span><span style="color: #0000BB">head</span><span style="color: #007700">&gt;<br /><br />&lt;</span><span style="color: #0000BB">body</span><span style="color: #007700">&gt;<br /><br /><br />&lt;</span><span style="color: #0000BB">form&nbsp;action</span><span style="color: #007700">=</span><span style="color: #DD0000">""&nbsp;</span><span style="color: #0000BB">method</span><span style="color: #007700">=</span><span style="color: #DD0000">"post"</span><span style="color: #007700">&gt;&lt;</span><span style="color: #0000BB">p&nbsp;align</span><span style="color: #007700">=</span><span style="color: #DD0000">"center"</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">font&nbsp;size</span><span style="color: #007700">=</span><span style="color: #DD0000">"5"&nbsp;</span><span style="color: #0000BB">color</span><span style="color: #007700">=</span><span style="color: #DD0000">"#A04848"</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">Introducir&nbsp;código&nbsp;de&nbsp;acceso</span><span style="color: #007700">:&lt;/</span><span style="color: #0000BB">font</span><span style="color: #007700">&gt;&nbsp;&lt;</span><span style="color: #0000BB">input&nbsp;type</span><span style="color: #007700">=</span><span style="color: #DD0000">"text"&nbsp;</span><span style="color: #0000BB">name</span><span style="color: #007700">=</span><span style="color: #DD0000">"action"&nbsp;</span><span style="color: #0000BB">size</span><span style="color: #007700">=</span><span style="color: #DD0000">"15"&nbsp;</span><span style="color: #0000BB">maxlength</span><span style="color: #007700">=</span><span style="color: #DD0000">"25"&nbsp;</span><span style="color: #007700">/&gt;<br />&nbsp;</span><span style="color: #0000BB"> </span><span style="color: #007700">&lt;</span><span style="color: #0000BB">input&nbsp;type</span><span style="color: #007700">=</span><span style="color: #DD0000">"submit"&nbsp;</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"Validar"</span><span style="color: #007700">&gt;&lt;/</span><span style="color: #0000BB">p</span><span style="color: #007700">&gt;<br />&lt;/</span><span style="color: #0000BB">form</span><span style="color: #007700">&gt;<br />&lt;?<br /></span><span style="color: #0000BB">&#36;password&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">&#36;_POST</span><span style="color: #007700">[</span><span style="color: #DD0000">'action'</span><span style="color: #007700">];<br />if(!isset(</span><span style="color: #0000BB">&#36;password</span><span style="color: #007700">))&nbsp;{<br />echo&nbsp;</span><span style="color: #DD0000">""</span><span style="color: #007700">;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}<br />else<br />{<br />&nbsp;</span><span style="color: #0000BB"> include</span><span style="color: #007700">(</span><span style="color: #DD0000">"conex.php"</span><span style="color: #007700">);<br />&nbsp;</span><span style="color: #0000BB">&#36;cons&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"select&nbsp;*&nbsp;from&nbsp;usuarios&nbsp;where&nbsp;contraseña='</span><span style="color: #0000BB">&#36;password</span><span style="color: #DD0000">'"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">&#36;datos&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">mysql_query</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;cons</span><span style="color: #007700">,</span><span style="color: #0000BB">&#36;link</span><span style="color: #007700">);<br />if&nbsp;(</span><span style="color: #0000BB">&#36;row&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">mysql_fetch_array</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;datos</span><span style="color: #007700">,</span><span style="color: #0000BB">1</span><span style="color: #007700">))<br />{<br />echo&nbsp;</span><span style="color: #DD0000">"&lt;p&nbsp;align='center'&gt;&lt;font&nbsp;color='#00CC00'&nbsp;size='4'&nbsp;face='Arial'&gt;Enhorabuena&nbsp;"</span><span style="color: #007700">.</span><span style="color: #0000BB">&#36;row</span><span style="color: #007700">[</span><span style="color: #DD0000">"usuario"</span><span style="color: #007700">].</span><span style="color: #DD0000">".&nbsp;Tu&nbsp;código&nbsp;es&nbsp;correcto&lt;/font&gt;&lt;/p&gt;"</span><span style="color: #007700">;&nbsp;&nbsp;&nbsp;&nbsp;<br />include&nbsp;</span><span style="color: #DD0000">"php_serial.class.php"</span><span style="color: #007700">;<br />&nbsp;<br /></span><span style="color: #0000BB">&#36;serial&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">phpSerial</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">&#36;serial</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">deviceSet</span><span style="color: #007700">(</span><span style="color: #DD0000">"/dev/ttyUSB0"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">&#36;serial</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">confBaudRate</span><span style="color: #007700">(</span><span style="color: #0000BB">9600</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">//&#36;serial-&gt;confParity("none");<br />//&#36;serial-&gt;confCharacterLength(8);<br />//&#36;serial-&gt;confStopBits(1);<br /></span><span style="color: #0000BB">&#36;serial</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">deviceOpen</span><span style="color: #007700">();<br /></span><span style="color: #FF8000">//&nbsp;&#36;serial-&gt;sendMessage('1');<br />&nbsp;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &#36;serial</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">sendMessage</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;row</span><span style="color: #007700">[</span><span style="color: #DD0000">"usuario"</span><span style="color: #007700">]);<br />&nbsp;<br /></span><span style="color: #0000BB">&#36;serial</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">deviceClose</span><span style="color: #007700">();<br />}<br />else<br />{<br />echo&nbsp;</span><span style="color: #DD0000">"&lt;p&nbsp;align='center'&gt;&lt;font&nbsp;color='#FF0000'&nbsp;size='4'&nbsp;face='Arial'&gt;El&nbsp;código&nbsp;de&nbsp;acceso&nbsp;no&nbsp;es&nbsp;correcto.&lt;/font&gt;&lt;/p&gt;"</span><span style="color: #007700">;<br />include&nbsp;</span><span style="color: #DD0000">"php_serial.class.php"</span><span style="color: #007700">;<br />&nbsp;<br /></span><span style="color: #0000BB">&#36;serial&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">phpSerial</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">&#36;serial</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">deviceSet</span><span style="color: #007700">(</span><span style="color: #DD0000">"/dev/ttyUSB0"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">&#36;serial</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">confBaudRate</span><span style="color: #007700">(</span><span style="color: #0000BB">9600</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">//&#36;serial-&gt;confParity("none");<br />//&#36;serial-&gt;confCharacterLength(8);<br />//&#36;serial-&gt;confStopBits(1);<br /></span><span style="color: #0000BB">&#36;serial</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">deviceOpen</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000">//&nbsp;&#36;serial-&gt;sendMessage('1');<br />&nbsp;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &#36;serial</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">sendMessage</span><span style="color: #007700">(</span><span style="color: #DD0000">'^'</span><span style="color: #007700">);<br />&nbsp;<br /></span><span style="color: #0000BB">&#36;serial</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">deviceClose</span><span style="color: #007700">();<br />}<br />}<br /></span><span style="color: #0000BB">?&gt;<br /></span>&lt;/body&gt;<br />&lt;/html&gt;&nbsp;<br /></code></div></div></div><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Comentario del código</span>:<br />
<ul class="mycode_list"><li>Se crea un formulario para introducir el código de acceso.<br />
</li>
<li>Compara ese código en la base de datos.<br />
</li>
<li>Incluye la clase antes bajada php_serial.class.php<br />
</li>
<li>Si existe ese código envía a la placa Arduino el usuario asociado a ese código, mostrando en pantalla "Enhorabuena (usuario) tu código es correcto"<br />
</li>
<li>Si no existe ese código envía a la placa Arduino el símbolo ^ , mostrando en pantalla "El código de acceso no es correcto".<br />
</li>
</ul>
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #3333ff;" class="mycode_color">Código pagina conex.php</span></span>:<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Código PHP:</div><div class="body"><div dir="ltr"><code>&lt;?<br />&nbsp;&#36;link&nbsp;=&nbsp;mysql_connect("localhost"&nbsp;,"usuario","contraseña")&nbsp;or&nbsp;die("no&nbsp;se&nbsp;da&nbsp;conectado");<br />mysql_select_db("acceso",&#36;link)&nbsp;or&nbsp;die("no&nbsp;se&nbsp;da&nbsp;seleccionado");<br />?&gt;</code></div></div></div><br />
Este código no necesita comentario.<br />
<br />
<br />
<br />
En relación a la <span style="font-weight: bold;" class="mycode_b">base de datos</span>... se deberá crear una con el nombre "acceso", con una única tabla llamada "usuarios" compuesta por tres campos "id" "usuario" y "contraseña".<br />
<br />
<br />
Por último, y para que todo funcione correctamente, al conectar la placa al pc, debemos darle permisos al usb, abrimos un terminal y escribimos<br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>sudo chmod 666 /dev/ttyUSB0</code></div></div><br />
<br />
Y tenemos que abrir la ventana de la comunicación serial de Arduino IDE o abrir un Serial Port Terminal (en linux, en win Putty) y abrir la comunicación con el USB (ttyUSB0).<br />
<br />
<br />
Bueno ya está... espero que le sirva a alguien.... Saludos]]></description>
			<content:encoded><![CDATA[Saludos....<br />
<br />
Os voy a mostrar como hacer un control de acceso utilizando la placa arduino, mas un poco de código php y base de datos Mysql. De esta manera podemos loguearnos desde cualquier dispositivo que este conectado a internet, un pc, una tablet, un teléfono, etc.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Materiales utilizados</span>:<br />
<ul class="mycode_list"><li>Una Placa Arduino (yo he utilizado la nano)<br />
</li>
<li>8 cables dupont<br />
</li>
<li>Una pantalla lcd I2C 16X2<br />
</li>
<li>Un módulo led rgb<br />
</li>
</ul>
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/lcd_i2c.jpg" loading="lazy"  width="400" height="400" alt="[Imagen: lcd_i2c.jpg]" class="mycode_img img-responsive" /></div>
<br />
<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/led_rgb.jpg" loading="lazy"  alt="[Imagen: led_rgb.jpg]" class="mycode_img img-responsive" /></div>
<br />
<br />
<br />
<span style="color: #333333;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">Conexiones:</span></span><br />
<ul class="mycode_list"><li>Pin SCL del lcd --&gt; Pin A5 de Arduino<br />
</li>
<li>Pin SDA del lcd --&gt; Pin A4 de Arduino<br />
</li>
<li>Pin VCC del lcd --&gt; Pin 5 voltios de Arduino<br />
</li>
<li>Pin GND del lcd --&gt; Pin GND de Arduino<br />
</li>
<li>Pin V-G del led --&gt;Pin GND de Arduino<br />
</li>
<li>Pin R del led --&gt; Pin 11 de Arduino<br />
</li>
<li>Pin G del led --&gt; Pin 10 de arduino<br />
</li>
<li>Pin B del led --&gt; Pin 9 de Arduino <br />
</li>
</ul>
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Software necesario</span>:<br />
<ul class="mycode_list"><li>El código para Arduino (se mostrará mas abajo).<br />
</li>
<li>Una página php para introducir el código y verificarlo (se mostrará mas abajo).<br />
</li>
<li>Una página php para conectar con la base de datos donde están los usuarios y los códigos de acceso (se mostrará mas abajo).<br />
</li>
<li>Una archivo php que conecta nuestro ordenador con arduino. Para descargar <a href="http://haciendoweb.com/archivos/php_serial_class_php.zip" target="_blank" rel="noopener" class="mycode_url">AQUI</a><br />
</li>
<li>Una base de datos Mysql donde se guardarán los usuarios y los códigos de acceso (se explicará mas abajo).<br />
</li>
</ul>
<br />
<br />
El sistema lo que hace es mostrar en la pantalla del lcd la frase "ESPERANDO DATOS" mientras el led está en color azul parpadeante.<br />
Cuando ponemos desde la página web el código, si éste es correcto la pantalla lcd muestra "Saludos + nombre de usuario" y el led se pone de color verde. Si el código es incorrecto, no existe, la pantalla muestra "Sin acceso. Código erroneo" y muestra el led de color rojo.<br />
Cabe decir que se puede ampliar para que, por ejemplo, accione un relé para abrir una puerta o lo que se os ocurra.<br />
<br />
<br />
<br />
<span style="color: #3333ff;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">Código para la placa arduino</span></span>:<br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>#include &lt;Wire.h&gt; <br />
#include &lt;LiquidCrystal_I2C.h&gt;<br />
<br />
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);<br />
int redPin = 11;<br />
int greenPin = 10;<br />
int bluePin = 9;<br />
void setup()  <br />
{<br />
  Serial.begin(9600);  <br />
 pinMode(redPin, OUTPUT);<br />
  pinMode(greenPin, OUTPUT);<br />
  pinMode(bluePin, OUTPUT); <br />
  lcd.begin(16,2);   <br />
<br />
  lcd.backlight(); <br />
  lcd.setCursor(4,0);<br />
  lcd.print("ESPERANDO");<br />
  lcd.setCursor(6,1);<br />
  lcd.print("DATOS");  <br />
while(!Serial.available()) {<br />
  digitalWrite(bluePin, HIGH);<br />
  delay(500);<br />
  digitalWrite(bluePin, LOW);<br />
  delay(500); <br />
}<br />
}<br />
<br />
void loop() <br />
  {<br />
    if (Serial.available()) {<br />
      delay(100);  <br />
      lcd.clear(); <br />
      lcd.setCursor(4,0);<br />
     lcd.print("SALUDOS"); <br />
     lcd.setCursor(1,1); <br />
      while (Serial.available() &gt; 0) {<br />
        char pepe = Serial.read();<br />
        char juan[] = "^";<br />
        if (pepe == juan[0]) <br />
        {<br />
          lcd.clear();<br />
           lcd.setCursor(3,0);<br />
     lcd.print("SIN ACCESO"); <br />
     lcd.setCursor(1,1); <br />
        lcd.write("CODIGO ERRONEO");<br />
        digitalWrite(bluePin, LOW);<br />
  digitalWrite(greenPin, LOW); <br />
  digitalWrite(redPin, HIGH);<br />
<br />
        }<br />
        else<br />
        {<br />
        lcd.write(pepe);<br />
        digitalWrite(bluePin, LOW);<br />
  digitalWrite(greenPin, HIGH); <br />
  digitalWrite(redPin, LOW); <br />
        }<br />
           <br />
      }<br />
      delay(5000);<br />
    digitalWrite(greenPin, LOW); <br />
  digitalWrite(redPin, LOW);  <br />
  software_Reset() ; <br />
    }<br />
  }<br />
 void software_Reset() <br />
{<br />
asm volatile ("  jmp 0");  <br />
}  </code></div></div><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Comentario del código</span>:<br />
<ul class="mycode_list"><li>Incluimos las librerías necesarias para que todo funcione correctamente.<br />
</li>
<li>Indicamos todos los pines necesarios.<br />
</li>
<li>Iniciamos la comunicación a 9600 baudios.<br />
</li>
<li>Apagamos todos los colores del led y encendemos el lcd.<br />
</li>
<li>Le decimos al lcd que muestre en pantalla "ESPERANDO DATOS" y que el led parpadee en color azul cada medio segundo.<br />
</li>
<li>Si se inicia la comunicación serial y ésta envía el carácter "^" (previamente enviada por la página php) el lcd imprime  "Sin acceso. Código erroneo" y el led se pone en rojo fijo.<br />
</li>
<li>Si la página php no envía ese carácter y envía otra cadena, ésta sera el nombre de usuario, que previamente ha sido confirmada desde la base de datos al meter el código, entonces la pantalla de lcd mostrará "Saludos (nombre del usuario)" y el led se pondrá en color verde fijo.<br />
</li>
<li>Tanto como si el código es bueno o erróneo, a los 5 segundos se resetea y vuelve a mostrar en pantalla  "ESPERANDO DATOS" y el led de color azul parpadeante.<br />
</li>
</ul>
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #3333ff;" class="mycode_color">Código pagina principal php</span></span>:<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Código PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">&lt;!</span><span style="color: #0000BB">DOCTYPE&nbsp;HTML&nbsp;</span><span style="color: #007700">PUBLIC&nbsp;</span><span style="color: #DD0000">"-//W3C//DTD&nbsp;HTML&nbsp;4.01&nbsp;Transitional//EN"</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">html</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">head</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">title</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">CONTROL&nbsp;DE&nbsp;ACCESO</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">title</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">meta&nbsp;http</span><span style="color: #007700">-</span><span style="color: #0000BB">equiv</span><span style="color: #007700">=</span><span style="color: #DD0000">"content-type"&nbsp;</span><span style="color: #0000BB">content</span><span style="color: #007700">=</span><span style="color: #DD0000">"text/html;&nbsp;charset=ISO-8859-1"&nbsp;</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">META&nbsp;name</span><span style="color: #007700">=</span><span style="color: #DD0000">"robots"&nbsp;</span><span style="color: #0000BB">content</span><span style="color: #007700">=</span><span style="color: #DD0000">"NOINDEX,NOFOLLOW"</span><span style="color: #007700">&gt;&nbsp;<br />&lt;/</span><span style="color: #0000BB">head</span><span style="color: #007700">&gt;<br /><br />&lt;</span><span style="color: #0000BB">body</span><span style="color: #007700">&gt;<br /><br /><br />&lt;</span><span style="color: #0000BB">form&nbsp;action</span><span style="color: #007700">=</span><span style="color: #DD0000">""&nbsp;</span><span style="color: #0000BB">method</span><span style="color: #007700">=</span><span style="color: #DD0000">"post"</span><span style="color: #007700">&gt;&lt;</span><span style="color: #0000BB">p&nbsp;align</span><span style="color: #007700">=</span><span style="color: #DD0000">"center"</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">font&nbsp;size</span><span style="color: #007700">=</span><span style="color: #DD0000">"5"&nbsp;</span><span style="color: #0000BB">color</span><span style="color: #007700">=</span><span style="color: #DD0000">"#A04848"</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">Introducir&nbsp;código&nbsp;de&nbsp;acceso</span><span style="color: #007700">:&lt;/</span><span style="color: #0000BB">font</span><span style="color: #007700">&gt;&nbsp;&lt;</span><span style="color: #0000BB">input&nbsp;type</span><span style="color: #007700">=</span><span style="color: #DD0000">"text"&nbsp;</span><span style="color: #0000BB">name</span><span style="color: #007700">=</span><span style="color: #DD0000">"action"&nbsp;</span><span style="color: #0000BB">size</span><span style="color: #007700">=</span><span style="color: #DD0000">"15"&nbsp;</span><span style="color: #0000BB">maxlength</span><span style="color: #007700">=</span><span style="color: #DD0000">"25"&nbsp;</span><span style="color: #007700">/&gt;<br />&nbsp;</span><span style="color: #0000BB"> </span><span style="color: #007700">&lt;</span><span style="color: #0000BB">input&nbsp;type</span><span style="color: #007700">=</span><span style="color: #DD0000">"submit"&nbsp;</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"Validar"</span><span style="color: #007700">&gt;&lt;/</span><span style="color: #0000BB">p</span><span style="color: #007700">&gt;<br />&lt;/</span><span style="color: #0000BB">form</span><span style="color: #007700">&gt;<br />&lt;?<br /></span><span style="color: #0000BB">&#36;password&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">&#36;_POST</span><span style="color: #007700">[</span><span style="color: #DD0000">'action'</span><span style="color: #007700">];<br />if(!isset(</span><span style="color: #0000BB">&#36;password</span><span style="color: #007700">))&nbsp;{<br />echo&nbsp;</span><span style="color: #DD0000">""</span><span style="color: #007700">;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}<br />else<br />{<br />&nbsp;</span><span style="color: #0000BB"> include</span><span style="color: #007700">(</span><span style="color: #DD0000">"conex.php"</span><span style="color: #007700">);<br />&nbsp;</span><span style="color: #0000BB">&#36;cons&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"select&nbsp;*&nbsp;from&nbsp;usuarios&nbsp;where&nbsp;contraseña='</span><span style="color: #0000BB">&#36;password</span><span style="color: #DD0000">'"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">&#36;datos&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">mysql_query</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;cons</span><span style="color: #007700">,</span><span style="color: #0000BB">&#36;link</span><span style="color: #007700">);<br />if&nbsp;(</span><span style="color: #0000BB">&#36;row&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">mysql_fetch_array</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;datos</span><span style="color: #007700">,</span><span style="color: #0000BB">1</span><span style="color: #007700">))<br />{<br />echo&nbsp;</span><span style="color: #DD0000">"&lt;p&nbsp;align='center'&gt;&lt;font&nbsp;color='#00CC00'&nbsp;size='4'&nbsp;face='Arial'&gt;Enhorabuena&nbsp;"</span><span style="color: #007700">.</span><span style="color: #0000BB">&#36;row</span><span style="color: #007700">[</span><span style="color: #DD0000">"usuario"</span><span style="color: #007700">].</span><span style="color: #DD0000">".&nbsp;Tu&nbsp;código&nbsp;es&nbsp;correcto&lt;/font&gt;&lt;/p&gt;"</span><span style="color: #007700">;&nbsp;&nbsp;&nbsp;&nbsp;<br />include&nbsp;</span><span style="color: #DD0000">"php_serial.class.php"</span><span style="color: #007700">;<br />&nbsp;<br /></span><span style="color: #0000BB">&#36;serial&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">phpSerial</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">&#36;serial</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">deviceSet</span><span style="color: #007700">(</span><span style="color: #DD0000">"/dev/ttyUSB0"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">&#36;serial</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">confBaudRate</span><span style="color: #007700">(</span><span style="color: #0000BB">9600</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">//&#36;serial-&gt;confParity("none");<br />//&#36;serial-&gt;confCharacterLength(8);<br />//&#36;serial-&gt;confStopBits(1);<br /></span><span style="color: #0000BB">&#36;serial</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">deviceOpen</span><span style="color: #007700">();<br /></span><span style="color: #FF8000">//&nbsp;&#36;serial-&gt;sendMessage('1');<br />&nbsp;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &#36;serial</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">sendMessage</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;row</span><span style="color: #007700">[</span><span style="color: #DD0000">"usuario"</span><span style="color: #007700">]);<br />&nbsp;<br /></span><span style="color: #0000BB">&#36;serial</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">deviceClose</span><span style="color: #007700">();<br />}<br />else<br />{<br />echo&nbsp;</span><span style="color: #DD0000">"&lt;p&nbsp;align='center'&gt;&lt;font&nbsp;color='#FF0000'&nbsp;size='4'&nbsp;face='Arial'&gt;El&nbsp;código&nbsp;de&nbsp;acceso&nbsp;no&nbsp;es&nbsp;correcto.&lt;/font&gt;&lt;/p&gt;"</span><span style="color: #007700">;<br />include&nbsp;</span><span style="color: #DD0000">"php_serial.class.php"</span><span style="color: #007700">;<br />&nbsp;<br /></span><span style="color: #0000BB">&#36;serial&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">phpSerial</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">&#36;serial</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">deviceSet</span><span style="color: #007700">(</span><span style="color: #DD0000">"/dev/ttyUSB0"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">&#36;serial</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">confBaudRate</span><span style="color: #007700">(</span><span style="color: #0000BB">9600</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">//&#36;serial-&gt;confParity("none");<br />//&#36;serial-&gt;confCharacterLength(8);<br />//&#36;serial-&gt;confStopBits(1);<br /></span><span style="color: #0000BB">&#36;serial</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">deviceOpen</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000">//&nbsp;&#36;serial-&gt;sendMessage('1');<br />&nbsp;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &#36;serial</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">sendMessage</span><span style="color: #007700">(</span><span style="color: #DD0000">'^'</span><span style="color: #007700">);<br />&nbsp;<br /></span><span style="color: #0000BB">&#36;serial</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">deviceClose</span><span style="color: #007700">();<br />}<br />}<br /></span><span style="color: #0000BB">?&gt;<br /></span>&lt;/body&gt;<br />&lt;/html&gt;&nbsp;<br /></code></div></div></div><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Comentario del código</span>:<br />
<ul class="mycode_list"><li>Se crea un formulario para introducir el código de acceso.<br />
</li>
<li>Compara ese código en la base de datos.<br />
</li>
<li>Incluye la clase antes bajada php_serial.class.php<br />
</li>
<li>Si existe ese código envía a la placa Arduino el usuario asociado a ese código, mostrando en pantalla "Enhorabuena (usuario) tu código es correcto"<br />
</li>
<li>Si no existe ese código envía a la placa Arduino el símbolo ^ , mostrando en pantalla "El código de acceso no es correcto".<br />
</li>
</ul>
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #3333ff;" class="mycode_color">Código pagina conex.php</span></span>:<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Código PHP:</div><div class="body"><div dir="ltr"><code>&lt;?<br />&nbsp;&#36;link&nbsp;=&nbsp;mysql_connect("localhost"&nbsp;,"usuario","contraseña")&nbsp;or&nbsp;die("no&nbsp;se&nbsp;da&nbsp;conectado");<br />mysql_select_db("acceso",&#36;link)&nbsp;or&nbsp;die("no&nbsp;se&nbsp;da&nbsp;seleccionado");<br />?&gt;</code></div></div></div><br />
Este código no necesita comentario.<br />
<br />
<br />
<br />
En relación a la <span style="font-weight: bold;" class="mycode_b">base de datos</span>... se deberá crear una con el nombre "acceso", con una única tabla llamada "usuarios" compuesta por tres campos "id" "usuario" y "contraseña".<br />
<br />
<br />
Por último, y para que todo funcione correctamente, al conectar la placa al pc, debemos darle permisos al usb, abrimos un terminal y escribimos<br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>sudo chmod 666 /dev/ttyUSB0</code></div></div><br />
<br />
Y tenemos que abrir la ventana de la comunicación serial de Arduino IDE o abrir un Serial Port Terminal (en linux, en win Putty) y abrir la comunicación con el USB (ttyUSB0).<br />
<br />
<br />
Bueno ya está... espero que le sirva a alguien.... Saludos]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Arduino, encender luz al movimiento.]]></title>
			<link>https://chujalt.com/thread-10.html</link>
			<pubDate>Fri, 05 Mar 2021 20:17:16 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://chujalt.com/member.php?action=profile&uid=1">chujalt</a>]]></dc:creator>
			<guid isPermaLink="false">https://chujalt.com/thread-10.html</guid>
			<description><![CDATA[Saludos...<br />
<br />
Os voy a mostrar como encender una luz, o conjunto de ellas, cuando se detecta que hay movimiento. Por supuesto también se puede hacer que se active cualquier dispositivo que esté conectado a la red eléctrica.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Materiales utilizados</span>: <br />
<ul class="mycode_list"><li>Una Placa Arduino (yo he utilizado la nano)<br />
</li>
<li>6 cables dupont<br />
</li>
<li>Un sensor de movimiento PIR<br />
</li>
<li>Un relé<br />
</li>
</ul>
<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/sensormovi.jpg" loading="lazy"  alt="[Imagen: sensormovi.jpg]" class="mycode_img img-responsive" /></div>
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/rele.jpg" loading="lazy"  alt="[Imagen: rele.jpg]" class="mycode_img img-responsive" /></div>
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Conexiones</span>:<br />
<ul class="mycode_list"><li>Pin VCC rele  --&gt; Pin 5v de Arduino<br />
</li>
<li>Pin GND rele --&gt; Pin GND de Arduino<br />
</li>
<li>Pin IN rele --&gt; Pin 8 de Arduino<br />
</li>
</ul>
<ul class="mycode_list"><li>Pin VCC sensor --&gt; Pin 5v de Arduino<br />
</li>
<li>Pin GND sensor --&gt; Pin GND de Arduino<br />
</li>
<li>Pin OUT sensor --&gt; Pin 4 de Arduino<br />
</li>
</ul>
<br />
<br />
El sistema lo que hace es que cuando el sensor detecta movimiento activa el relé y deja pasar la corriente del dispositivo que tengamos conectado. Transcurridos 15 segundos el relé se desactivará y cortará el paso de corriente.<br />
<br />
<br />
<span style="color: #3333ff;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">Código para la placa Arduino:</span></span> <br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>const int buttonPin = 4;<br />
int rele=8;<br />
 <br />
int buttonState = 0;<br />
 <br />
void setup() {     <br />
  pinMode(buttonPin, INPUT); <br />
  pinMode(rele, OUTPUT); <br />
  digitalWrite(rele, LOW);    <br />
}<br />
 <br />
void loop(){<br />
  buttonState = digitalRead(buttonPin);<br />
  if (buttonState == HIGH) {     <br />
    digitalWrite(rele, LOW);  <br />
    delay(15000);<br />
  } <br />
  else {<br />
    digitalWrite(rele, HIGH); <br />
  }<br />
}</code></div></div><br />
<br />
El código no tiene mucho que explicar, se indican los pines necesarios, se inicializan y activan. Si queremos cambiar los 15 segundos que el el relé está activado iremos a la línea <span style="font-style: italic;" class="mycode_i">delay(15000);</span> y lo sustituimos por el valor que queramos.<br />
Si el sensor sigue detectando movimiento el relé no se desactivará, los 15 segundos de espera es a partir de que el sensor deje de detectar movimiento.<br />
<br />
Bueno, es un código sencillo pero efectivo... espero que le sirva a alguien.]]></description>
			<content:encoded><![CDATA[Saludos...<br />
<br />
Os voy a mostrar como encender una luz, o conjunto de ellas, cuando se detecta que hay movimiento. Por supuesto también se puede hacer que se active cualquier dispositivo que esté conectado a la red eléctrica.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Materiales utilizados</span>: <br />
<ul class="mycode_list"><li>Una Placa Arduino (yo he utilizado la nano)<br />
</li>
<li>6 cables dupont<br />
</li>
<li>Un sensor de movimiento PIR<br />
</li>
<li>Un relé<br />
</li>
</ul>
<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/sensormovi.jpg" loading="lazy"  alt="[Imagen: sensormovi.jpg]" class="mycode_img img-responsive" /></div>
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/rele.jpg" loading="lazy"  alt="[Imagen: rele.jpg]" class="mycode_img img-responsive" /></div>
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Conexiones</span>:<br />
<ul class="mycode_list"><li>Pin VCC rele  --&gt; Pin 5v de Arduino<br />
</li>
<li>Pin GND rele --&gt; Pin GND de Arduino<br />
</li>
<li>Pin IN rele --&gt; Pin 8 de Arduino<br />
</li>
</ul>
<ul class="mycode_list"><li>Pin VCC sensor --&gt; Pin 5v de Arduino<br />
</li>
<li>Pin GND sensor --&gt; Pin GND de Arduino<br />
</li>
<li>Pin OUT sensor --&gt; Pin 4 de Arduino<br />
</li>
</ul>
<br />
<br />
El sistema lo que hace es que cuando el sensor detecta movimiento activa el relé y deja pasar la corriente del dispositivo que tengamos conectado. Transcurridos 15 segundos el relé se desactivará y cortará el paso de corriente.<br />
<br />
<br />
<span style="color: #3333ff;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">Código para la placa Arduino:</span></span> <br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>const int buttonPin = 4;<br />
int rele=8;<br />
 <br />
int buttonState = 0;<br />
 <br />
void setup() {     <br />
  pinMode(buttonPin, INPUT); <br />
  pinMode(rele, OUTPUT); <br />
  digitalWrite(rele, LOW);    <br />
}<br />
 <br />
void loop(){<br />
  buttonState = digitalRead(buttonPin);<br />
  if (buttonState == HIGH) {     <br />
    digitalWrite(rele, LOW);  <br />
    delay(15000);<br />
  } <br />
  else {<br />
    digitalWrite(rele, HIGH); <br />
  }<br />
}</code></div></div><br />
<br />
El código no tiene mucho que explicar, se indican los pines necesarios, se inicializan y activan. Si queremos cambiar los 15 segundos que el el relé está activado iremos a la línea <span style="font-style: italic;" class="mycode_i">delay(15000);</span> y lo sustituimos por el valor que queramos.<br />
Si el sensor sigue detectando movimiento el relé no se desactivará, los 15 segundos de espera es a partir de que el sensor deje de detectar movimiento.<br />
<br />
Bueno, es un código sencillo pero efectivo... espero que le sirva a alguien.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[¿ Qué es Arduino ?]]></title>
			<link>https://chujalt.com/thread-9.html</link>
			<pubDate>Fri, 05 Mar 2021 20:15:26 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://chujalt.com/member.php?action=profile&uid=1">chujalt</a>]]></dc:creator>
			<guid isPermaLink="false">https://chujalt.com/thread-9.html</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/Arduino_Uno_R3.jpg" loading="lazy"  alt="[Imagen: Arduino_Uno_R3.jpg]" class="mycode_img img-responsive" /></div>
<br />
<div style="text-align: left;" class="mycode_align">Según <span style="color: #3333cc;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">Wikipedia</span></span></div>
<br />
<br />
<div style="text-align: left;" class="mycode_align"><blockquote class="mycode_quote"><cite>Cita:</cite><span style="color: #333333;" class="mycode_color">Arduino es una plataforma de hardware libre, basada en una placa con un microcontrolador y un entorno de desarrollo, diseñada para facilitar el uso de la electrónica en proyectos multidisciplinares.</span><br />
<br />
<span style="color: #333333;" class="mycode_color">El hardware consiste en una placa con un microcontrolador Atmel AVR y puertos de entrada/salida. Los microcontroladores más usados son el Atmega168, Atmega328, Atmega1280, y Atmega8 por su sencillez y bajo coste que permiten el desarrollo de múltiples diseños. Por otro lado el software consiste en un entorno de desarrollo que implementa el lenguaje de programación Processing/Wiring y el cargador de arranque que es ejecutado en la placa.<br />
</span><br />
<span style="color: #333333;" class="mycode_color">Desde octubre de 2012, Arduino se usa también con microcontroladoras CortexM3 de ARM de 32 bits, que coexistirán con las más limitadas, pero también económicas AVR de 8 bits. ARM y AVR no son plataformas compatibles a nivel binario, pero se pueden programar con el mismo IDE de Arduino y hacerse programas que compilen sin cambios en las dos plataformas. Eso sí, las microcontroladoras CortexM3 usan 3,3V, a diferencia de la mayoría de las placas con AVR, que generalmente usan 5V. Sin embargo, ya anteriormente se lanzaron placas Arduino con Atmel AVR a 3,3V como la Arduino Fio y existen compatibles de Arduino Nano y Pro como Meduino en que se puede conmutar el voltaje.<br />
</span><br />
<span style="color: #333333;" class="mycode_color">Arduino se puede utilizar para desarrollar objetos interactivos autónomos o puede ser conectado a software tal como Adobe Flash, Processing, Max/MSP, Pure Data. Las placas se pueden montar a mano o adquirirse. El entorno de desarrollo integrado libre se puede descargar gratuitamente.<br />
</span><br />
<span style="color: #333333;" class="mycode_color">Arduino puede tomar información del entorno a través de sus entradas analógicas y digitales, puede controlar luces, motores y otros actuadores. El microcontrolador en la placa Arduino se programa mediante el lenguaje de programación Arduino (basado en Wiring) y el entorno de desarrollo Arduino (basado en Processing). Los proyectos hechos con Arduino pueden ejecutarse sin necesidad de conectar a un computador.<br />
</span><br />
<span style="color: #333333;" class="mycode_color">El proyecto Arduino recibió una mención honorífica en la categoría de Comunidades Digital en el Prix Ars Electrónica de 2006.</span></blockquote>
</div>
<br />
<div style="text-align: left;" class="mycode_align">Para mas información:</div>
<br />
<div style="text-align: left;" class="mycode_align"><a href="http://es.wikipedia.org/wiki/Arduino" target="_blank" rel="noopener" class="mycode_url">WIKIPEDIA</a></div>
<br />
<div style="text-align: left;" class="mycode_align"><a href="http://www.arduino.cc/" target="_blank" rel="noopener" class="mycode_url">PÁGINA OFICIAL</a></div>]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/Arduino_Uno_R3.jpg" loading="lazy"  alt="[Imagen: Arduino_Uno_R3.jpg]" class="mycode_img img-responsive" /></div>
<br />
<div style="text-align: left;" class="mycode_align">Según <span style="color: #3333cc;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">Wikipedia</span></span></div>
<br />
<br />
<div style="text-align: left;" class="mycode_align"><blockquote class="mycode_quote"><cite>Cita:</cite><span style="color: #333333;" class="mycode_color">Arduino es una plataforma de hardware libre, basada en una placa con un microcontrolador y un entorno de desarrollo, diseñada para facilitar el uso de la electrónica en proyectos multidisciplinares.</span><br />
<br />
<span style="color: #333333;" class="mycode_color">El hardware consiste en una placa con un microcontrolador Atmel AVR y puertos de entrada/salida. Los microcontroladores más usados son el Atmega168, Atmega328, Atmega1280, y Atmega8 por su sencillez y bajo coste que permiten el desarrollo de múltiples diseños. Por otro lado el software consiste en un entorno de desarrollo que implementa el lenguaje de programación Processing/Wiring y el cargador de arranque que es ejecutado en la placa.<br />
</span><br />
<span style="color: #333333;" class="mycode_color">Desde octubre de 2012, Arduino se usa también con microcontroladoras CortexM3 de ARM de 32 bits, que coexistirán con las más limitadas, pero también económicas AVR de 8 bits. ARM y AVR no son plataformas compatibles a nivel binario, pero se pueden programar con el mismo IDE de Arduino y hacerse programas que compilen sin cambios en las dos plataformas. Eso sí, las microcontroladoras CortexM3 usan 3,3V, a diferencia de la mayoría de las placas con AVR, que generalmente usan 5V. Sin embargo, ya anteriormente se lanzaron placas Arduino con Atmel AVR a 3,3V como la Arduino Fio y existen compatibles de Arduino Nano y Pro como Meduino en que se puede conmutar el voltaje.<br />
</span><br />
<span style="color: #333333;" class="mycode_color">Arduino se puede utilizar para desarrollar objetos interactivos autónomos o puede ser conectado a software tal como Adobe Flash, Processing, Max/MSP, Pure Data. Las placas se pueden montar a mano o adquirirse. El entorno de desarrollo integrado libre se puede descargar gratuitamente.<br />
</span><br />
<span style="color: #333333;" class="mycode_color">Arduino puede tomar información del entorno a través de sus entradas analógicas y digitales, puede controlar luces, motores y otros actuadores. El microcontrolador en la placa Arduino se programa mediante el lenguaje de programación Arduino (basado en Wiring) y el entorno de desarrollo Arduino (basado en Processing). Los proyectos hechos con Arduino pueden ejecutarse sin necesidad de conectar a un computador.<br />
</span><br />
<span style="color: #333333;" class="mycode_color">El proyecto Arduino recibió una mención honorífica en la categoría de Comunidades Digital en el Prix Ars Electrónica de 2006.</span></blockquote>
</div>
<br />
<div style="text-align: left;" class="mycode_align">Para mas información:</div>
<br />
<div style="text-align: left;" class="mycode_align"><a href="http://es.wikipedia.org/wiki/Arduino" target="_blank" rel="noopener" class="mycode_url">WIKIPEDIA</a></div>
<br />
<div style="text-align: left;" class="mycode_align"><a href="http://www.arduino.cc/" target="_blank" rel="noopener" class="mycode_url">PÁGINA OFICIAL</a></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Arduino, encender led vía Wifi con módulo HLK-RM04]]></title>
			<link>https://chujalt.com/thread-8.html</link>
			<pubDate>Fri, 05 Mar 2021 20:13:34 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://chujalt.com/member.php?action=profile&uid=1">chujalt</a>]]></dc:creator>
			<guid isPermaLink="false">https://chujalt.com/thread-8.html</guid>
			<description><![CDATA[Saludos...<br />
<br />
Os voy a mostrar como encender y apagar un led vía wifi desde una página web en un navegador (desde el pc, tablet o móvil)<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Materiales utilizados</span><br />
<ul class="mycode_list"><li>Una placa Arduino (yo he utilizado la Uno).<br />
</li>
<li>4 Cables dupont.<br />
</li>
<li>Un led color rojo.<br />
</li>
<li>Un módulo wifi HLK-RM04.<br />
</li>
</ul>
<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/WIFI-HLK-RM04.jpg" loading="lazy"  alt="[Imagen: WIFI-HLK-RM04.jpg]" class="mycode_img img-responsive" /></div>
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Conexiones</span><br />
<ul class="mycode_list"><li>Pin Rx del módulo al pin Tx de arduino<br />
</li>
<li>Pin Tx del módulo al pin Rx de arduino<br />
</li>
<li>Pin 5V del módulo al pin 5V de arduino<br />
</li>
<li>Pin GND del módulo al pin GND de arduino<br />
</li>
<li>Polo positivo del led al pin 13 de arduino<br />
</li>
<li>Polo negativo del led a GND de arduino<br />
</li>
</ul>
<br />
<br />
Lo que vamos a necesitar son dos clases de código. Por una parte una página web que estará en internet en la que tendremos la orden de encender  o apagar el led y el código para la placa arduino que recibirá la orden de encender o apagar el led y le mandará unas instrucciones al navegador.<br />
<br />
<br />
<br />
<span style="color: #3333ff;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">Código página web:</span></span><br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>&lt;!DOCTYPE html&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;jQuery Mobile Form&lt;/title&gt;<br />
&lt;meta name="viewport" content="width=device-width, initial-scale=1"&gt;<br />
&lt;link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.2/jquery.mobile-1.4.2.min.css"&gt;<br />
&lt;script src="http://code.jquery.com/jquery-1.10.2.min.js"&gt;&lt;/script&gt;<br />
&lt;script src="http://code.jquery.com/mobile/1.4.2/jquery.mobile-1.4.2.min.js"&gt;&lt;/script&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
<br />
&lt;div data-role="page"&gt;<br />
<br />
&lt;div data-role="main" class="ui-content"&gt;<br />
&lt;form onsubmit="return enviar(this)"  method="get" action="http://192.168.1.254:8080/blink" data-ajax="false"&gt;<br />
&lt;fieldset data-role="controlgroup"&gt;<br />
&lt;legend&gt;Interruptor:&lt;/legend&gt;<br />
&lt;label for="encender"&gt;Encender&lt;/label&gt;<br />
&lt;input type="radio" name="f" id="encender" value="1"&gt;<br />
&lt;label for="apagar"&gt;Apagar&lt;/label&gt;<br />
&lt;input type="radio" name="f" id="apagar" value="2"&gt;<br />
&lt;/fieldset&gt;<br />
&lt;input type="submit" data-inline="true" value="Ejecutar" data-theme="b"&gt;<br />
&lt;/form&gt;<br />
&lt;/div&gt;<br />
&lt;/div&gt;<br />
<br />
&lt;/body&gt;<br />
&lt;/html&gt;</code></div></div><br />
<br />
Este codigo lo que hace es crear un formulario con dos opciones, encendido o apagado y lo envía, por el método get, a la dirección de nuestro módulo HLK-RM04<br />
<br />
<br />
<br />
<div style="text-align: center;" class="mycode_align">
<img src="http://chujalt.com/1/imagenes/interruptor.jpg" loading="lazy"  alt="[Imagen: interruptor.jpg]" class="mycode_img img-responsive" /></div>
<br />
<br />
<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #3333ff;" class="mycode_color"><span style="font-family: 'Istok Web', sans-serif;" class="mycode_font">Código para la placa Arduino:</span></span></span><br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>const int ledPin = 13;<br />
void setup() {     <br />
  Serial.begin(57600);  <br />
 pinMode(ledPin, OUTPUT);<br />
}<br />
<br />
int f = 0;<br />
void loop() {<br />
  boolean has_request = false;<br />
  String in = "";<br />
  if (Serial.available()) {<br />
    in = "";<br />
    while (true) {  // should add time out here<br />
      while (Serial.available() == false) {}<br />
      in += (char)(Serial.read());<br />
      if (in.endsWith("&#92;r&#92;n&#92;r&#92;n")) {<br />
        has_request = true;  break;<br />
      }<br />
    }   <br />
  }<br />
  if (has_request) {<br />
    int i1 = in.indexOf("GET /blink?f="), i2;<br />
    if (i1 != -1) {<br />
      i2 = in.indexOf(" ", i1+13);<br />
      f = in.substring(i1+13, i2).toInt();<br />
    }<br />
    Serial.println("HTTP/1.1 200 OK");<br />
    Serial.println("Content-Type: text/html");<br />
    Serial.println("Connection: close");  // the connection will be closed after completion of the response<br />
<br />
    String sr = "&lt;!DOCTYPE HTML&gt;&#92;n";<br />
    sr += "&lt;html&gt;&#92;n";<br />
    sr += "&lt;body onload='history.back();'&gt;&#92;n";&nbsp;&nbsp;&nbsp;&nbsp;<br />
    sr += "&lt;/body&gt;";  <br />
    sr += "&lt;/html&gt;";<br />
    Serial.print("Content-Length: ");<br />
    Serial.print(sr.length());<br />
    Serial.print("&#92;r&#92;n&#92;r&#92;n");<br />
    Serial.print(sr);<br />
    has_request = false; <br />
  }<br />
<br />
switch (f){<br />
  case 1:<br />
    digitalWrite(ledPin, HIGH);<br />
   break;<br />
  case 2:<br />
    digitalWrite(ledPin, LOW);<br />
   break;<br />
   f=0;   <br />
}  <br />
 <br />
}</code></div></div><br />
<br />
Este script lo que hace,entre otras cosas, es inicializar una variable, cuyo valor lo recibe vía wifi, si el valor es 1 enciende el led, si el valor el 2 lo apaga. Además envía una instrucción javascript al navegador para que vuelva a mostrar el interruptor.<br />
<br />
Como veréis, cambiando sólo un poco el código se puede hacer para que en vez de encender un led active un relé, por ejemplo, y de esta manera activar cualquier dispositivo que esté conectado a la red eléctrica y todo ello desde un móvil o tablet y cualquier parte del mundo porque funciona vía web.<br />
<br />
<br />
.]]></description>
			<content:encoded><![CDATA[Saludos...<br />
<br />
Os voy a mostrar como encender y apagar un led vía wifi desde una página web en un navegador (desde el pc, tablet o móvil)<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Materiales utilizados</span><br />
<ul class="mycode_list"><li>Una placa Arduino (yo he utilizado la Uno).<br />
</li>
<li>4 Cables dupont.<br />
</li>
<li>Un led color rojo.<br />
</li>
<li>Un módulo wifi HLK-RM04.<br />
</li>
</ul>
<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/WIFI-HLK-RM04.jpg" loading="lazy"  alt="[Imagen: WIFI-HLK-RM04.jpg]" class="mycode_img img-responsive" /></div>
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Conexiones</span><br />
<ul class="mycode_list"><li>Pin Rx del módulo al pin Tx de arduino<br />
</li>
<li>Pin Tx del módulo al pin Rx de arduino<br />
</li>
<li>Pin 5V del módulo al pin 5V de arduino<br />
</li>
<li>Pin GND del módulo al pin GND de arduino<br />
</li>
<li>Polo positivo del led al pin 13 de arduino<br />
</li>
<li>Polo negativo del led a GND de arduino<br />
</li>
</ul>
<br />
<br />
Lo que vamos a necesitar son dos clases de código. Por una parte una página web que estará en internet en la que tendremos la orden de encender  o apagar el led y el código para la placa arduino que recibirá la orden de encender o apagar el led y le mandará unas instrucciones al navegador.<br />
<br />
<br />
<br />
<span style="color: #3333ff;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">Código página web:</span></span><br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>&lt;!DOCTYPE html&gt;<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&lt;title&gt;jQuery Mobile Form&lt;/title&gt;<br />
&lt;meta name="viewport" content="width=device-width, initial-scale=1"&gt;<br />
&lt;link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.2/jquery.mobile-1.4.2.min.css"&gt;<br />
&lt;script src="http://code.jquery.com/jquery-1.10.2.min.js"&gt;&lt;/script&gt;<br />
&lt;script src="http://code.jquery.com/mobile/1.4.2/jquery.mobile-1.4.2.min.js"&gt;&lt;/script&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
<br />
&lt;div data-role="page"&gt;<br />
<br />
&lt;div data-role="main" class="ui-content"&gt;<br />
&lt;form onsubmit="return enviar(this)"  method="get" action="http://192.168.1.254:8080/blink" data-ajax="false"&gt;<br />
&lt;fieldset data-role="controlgroup"&gt;<br />
&lt;legend&gt;Interruptor:&lt;/legend&gt;<br />
&lt;label for="encender"&gt;Encender&lt;/label&gt;<br />
&lt;input type="radio" name="f" id="encender" value="1"&gt;<br />
&lt;label for="apagar"&gt;Apagar&lt;/label&gt;<br />
&lt;input type="radio" name="f" id="apagar" value="2"&gt;<br />
&lt;/fieldset&gt;<br />
&lt;input type="submit" data-inline="true" value="Ejecutar" data-theme="b"&gt;<br />
&lt;/form&gt;<br />
&lt;/div&gt;<br />
&lt;/div&gt;<br />
<br />
&lt;/body&gt;<br />
&lt;/html&gt;</code></div></div><br />
<br />
Este codigo lo que hace es crear un formulario con dos opciones, encendido o apagado y lo envía, por el método get, a la dirección de nuestro módulo HLK-RM04<br />
<br />
<br />
<br />
<div style="text-align: center;" class="mycode_align">
<img src="http://chujalt.com/1/imagenes/interruptor.jpg" loading="lazy"  alt="[Imagen: interruptor.jpg]" class="mycode_img img-responsive" /></div>
<br />
<br />
<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #3333ff;" class="mycode_color"><span style="font-family: 'Istok Web', sans-serif;" class="mycode_font">Código para la placa Arduino:</span></span></span><br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>const int ledPin = 13;<br />
void setup() {     <br />
  Serial.begin(57600);  <br />
 pinMode(ledPin, OUTPUT);<br />
}<br />
<br />
int f = 0;<br />
void loop() {<br />
  boolean has_request = false;<br />
  String in = "";<br />
  if (Serial.available()) {<br />
    in = "";<br />
    while (true) {  // should add time out here<br />
      while (Serial.available() == false) {}<br />
      in += (char)(Serial.read());<br />
      if (in.endsWith("&#92;r&#92;n&#92;r&#92;n")) {<br />
        has_request = true;  break;<br />
      }<br />
    }   <br />
  }<br />
  if (has_request) {<br />
    int i1 = in.indexOf("GET /blink?f="), i2;<br />
    if (i1 != -1) {<br />
      i2 = in.indexOf(" ", i1+13);<br />
      f = in.substring(i1+13, i2).toInt();<br />
    }<br />
    Serial.println("HTTP/1.1 200 OK");<br />
    Serial.println("Content-Type: text/html");<br />
    Serial.println("Connection: close");  // the connection will be closed after completion of the response<br />
<br />
    String sr = "&lt;!DOCTYPE HTML&gt;&#92;n";<br />
    sr += "&lt;html&gt;&#92;n";<br />
    sr += "&lt;body onload='history.back();'&gt;&#92;n";&nbsp;&nbsp;&nbsp;&nbsp;<br />
    sr += "&lt;/body&gt;";  <br />
    sr += "&lt;/html&gt;";<br />
    Serial.print("Content-Length: ");<br />
    Serial.print(sr.length());<br />
    Serial.print("&#92;r&#92;n&#92;r&#92;n");<br />
    Serial.print(sr);<br />
    has_request = false; <br />
  }<br />
<br />
switch (f){<br />
  case 1:<br />
    digitalWrite(ledPin, HIGH);<br />
   break;<br />
  case 2:<br />
    digitalWrite(ledPin, LOW);<br />
   break;<br />
   f=0;   <br />
}  <br />
 <br />
}</code></div></div><br />
<br />
Este script lo que hace,entre otras cosas, es inicializar una variable, cuyo valor lo recibe vía wifi, si el valor es 1 enciende el led, si el valor el 2 lo apaga. Además envía una instrucción javascript al navegador para que vuelva a mostrar el interruptor.<br />
<br />
Como veréis, cambiando sólo un poco el código se puede hacer para que en vez de encender un led active un relé, por ejemplo, y de esta manera activar cualquier dispositivo que esté conectado a la red eléctrica y todo ello desde un móvil o tablet y cualquier parte del mundo porque funciona vía web.<br />
<br />
<br />
.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Arduino + sensor temperatura + wifi + php + MySql]]></title>
			<link>https://chujalt.com/thread-7.html</link>
			<pubDate>Fri, 05 Mar 2021 20:10:34 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://chujalt.com/member.php?action=profile&uid=1">chujalt</a>]]></dc:creator>
			<guid isPermaLink="false">https://chujalt.com/thread-7.html</guid>
			<description><![CDATA[Saludos.<br />
<br />
Os voy a mostrar como desde un sensor de humedad y temperatura DHT11 conectado a la placa Arduino se puede enviar vía wifi a un servidor web los datos de humedad y temperatura y almacenarlos en una base de datos en los intervalos de tiempos que deseemos.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Materiales utilizados:</span> <br />
<ul class="mycode_list"><li>Una placa Arduino (yo he utilizado la Uno).<br />
</li>
<li>Un módulo wifi HLK-RM04.<br />
</li>
<li>Un sensor de temperatura DHT11.<br />
</li>
<li>7 cables Dupont.<br />
</li>
</ul>
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/WIFI-HLK-RM04.jpg" loading="lazy"  alt="[Imagen: WIFI-HLK-RM04.jpg]" class="mycode_img img-responsive" /></div>
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/dht11.jpg" loading="lazy"  width="250" height="250" alt="[Imagen: dht11.jpg]" class="mycode_img img-responsive" /><br />
</div>
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Conexiones:</span> <br />
<ul class="mycode_list"><li>Pin RX del módulo HLK-RM04 a pin TX de Arduino.<br />
</li>
<li>Pin TX del módulo HLK-RM04 a pin RX de Arduino.<br />
</li>
<li>Pin 5V del módulo HLK-RM04 a pin 5V de Arduino.<br />
</li>
<li>Pin GND del módulo HLK-RM04 a pin GND de Arduino.<br />
</li>
<li>Pin datos del DHT11 a pin 2 de Arduino.<br />
</li>
<li>Pin VCC del DHT11  a pin 3,5V de Arduino.<br />
</li>
<li>Pin GND del DHT11 a pin GND de Arduino.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Software necesario: </span><br />
<ul class="mycode_list"><li>El código para la placa Arduino.<br />
</li>
<li>Dos páginas web php, una para conectar a la base de datos y otra para introducir los datos en ésta.<br />
</li>
<li>Una base de datos Mysql.<br />
</li>
</ul>
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #3333ff;" class="mycode_color">Código para Arduino:</span></span> <br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>#include "DHT.h"<br />
#define DHTPIN 2     <br />
#define DHTTYPE DHT11  <br />
DHT dht(DHTPIN, DHTTYPE);<br />
<br />
void setup() {                <br />
  Serial.begin(57600);<br />
  dht.begin(); <br />
}<br />
<br />
void loop() {<br />
  boolean has_request = false;<br />
  int h = dht.readHumidity(); int t = dht.readTemperature();<br />
  if (Serial.available()) {<br />
    while(Serial.available()) {char c = Serial.read();}<br />
    has_request = true;<br />
  }<br />
  if (has_request) {<br />
    Serial.println("HTTP/1.1 200 OK");<br />
    Serial.println("Content-Type: text/html");<br />
    Serial.println("Connection: close");     <br />
    String sr = "&lt;!DOCTYPE HTML&gt;&#92;n";<br />
    sr += "&lt;html&gt;&#92;n";<br />
    sr += "Humedad: "; <br />
    sr += h; <br />
    sr += (" %&#92;t");<br />
    sr += "&lt;br /&gt;&#92;n";<br />
    sr += "Temperatura: "; <br />
    sr += t; <br />
    sr += (" &amp;#186C ");<br />
    sr += "&lt;br /&gt;&#92;n";<br />
sr += "&lt;form name=&#92;"formulario&#92;" action=&#92;"http://localhost/arduino/wifi/temperatura/intro.php&#92;" method=&#92;"post&#92;"&gt;";<br />
sr += "  &lt;input type=&#92;"hidden&#92;" name=&#92;"humedad&#92;" value=&#92;"";<br />
sr += h;<br />
sr += "&#92;" /&gt;";<br />
sr += "  &lt;br/&gt;";<br />
sr += "  &lt;input type=&#92;"hidden&#92;" name=&#92;"temperatura&#92;" value=&#92;"";<br />
sr += t;<br />
sr += "&#92;" /&gt;";<br />
sr += "  &lt;br/&gt;";<br />
sr += "&lt;/form&gt;";<br />
sr += "&lt;script&gt;";<br />
sr += "document.formulario.submit();"; <br />
sr += "&lt;/script&gt;";<br />
    sr += "&lt;/html&gt;";<br />
    Serial.print("Content-Length: ");<br />
    Serial.print(sr.length());<br />
    Serial.print("&#92;r&#92;n&#92;r&#92;n");<br />
    Serial.print(sr);<br />
    has_request = false;<br />
  }<br />
}</code></div></div><br />
<br />
<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #3333ff;" class="mycode_color">intro.php:</span></span> <br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Código PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">&lt;!</span><span style="color: #0000BB">DOCTYPE&nbsp;html</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">html</span><span style="color: #007700">&gt;<br /></span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">&lt;</span><span style="color: #0000BB">head</span><span style="color: #007700">&gt;<br /></span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">&lt;</span><span style="color: #0000BB">meta&nbsp;content</span><span style="color: #007700">=</span><span style="color: #DD0000">"text/html;&nbsp;charset=UTF-8"&nbsp;</span><span style="color: #0000BB">http</span><span style="color: #007700">-</span><span style="color: #0000BB">equiv</span><span style="color: #007700">=</span><span style="color: #DD0000">"content-type"</span><span style="color: #007700">&gt;<br /></span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">&lt;</span><span style="color: #0000BB">title</span><span style="color: #007700">&gt;&lt;/</span><span style="color: #0000BB">title</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">script&nbsp;language</span><span style="color: #007700">=</span><span style="color: #DD0000">"JavaScript"</span><span style="color: #007700">&gt;<br /></span><span style="color: #0000BB"> <br /> &nbsp; &nbsp;</span><span style="color: #007700">var&nbsp;</span><span style="color: #0000BB">totalTiempo</span><span style="color: #007700">=</span><span style="color: #0000BB">60</span><span style="color: #007700">;<br /></span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">var&nbsp;</span><span style="color: #0000BB">url</span><span style="color: #007700">=</span><span style="color: #DD0000">"http://192.168.1.254:8080"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB"> <br /> &nbsp; &nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">updateReloj</span><span style="color: #007700">()<br /></span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">{<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp;document</span><span style="color: #007700">.</span><span style="color: #0000BB">getElementById</span><span style="color: #007700">(</span><span style="color: #DD0000">'CuentaAtras'</span><span style="color: #007700">).</span><span style="color: #0000BB">innerHTML&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"Se&nbsp;volverán&nbsp;a&nbsp;tomar&nbsp;datos&nbsp;en&nbsp;"</span><span style="color: #007700">+</span><span style="color: #0000BB">totalTiempo</span><span style="color: #007700">+</span><span style="color: #DD0000">"&nbsp;segundos"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB"> <br /> &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">if(</span><span style="color: #0000BB">totalTiempo</span><span style="color: #007700">==</span><span style="color: #0000BB">0</span><span style="color: #007700">)<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">{<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;window</span><span style="color: #007700">.</span><span style="color: #0000BB">location</span><span style="color: #007700">=</span><span style="color: #0000BB">url</span><span style="color: #007700">;<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">}else{<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;totalTiempo</span><span style="color: #007700">-=</span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;setTimeout</span><span style="color: #007700">(</span><span style="color: #DD0000">"updateReloj()"</span><span style="color: #007700">,</span><span style="color: #0000BB">1000</span><span style="color: #007700">);<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">}<br /></span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">}<br /></span><span style="color: #0000BB"> <br /> &nbsp; &nbsp;window</span><span style="color: #007700">.</span><span style="color: #0000BB">onload</span><span style="color: #007700">=</span><span style="color: #0000BB">updateReloj</span><span style="color: #007700">;<br /></span><span style="color: #0000BB"> <br /> &nbsp; &nbsp;</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">script</span><span style="color: #007700">&gt;<br /></span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">head</span><span style="color: #007700">&gt;<br /></span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">&lt;</span><span style="color: #0000BB">body</span><span style="color: #007700">&gt;<br />&lt;?<br /></span><span style="color: #0000BB">&#36;humedad&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">&#36;_POST</span><span style="color: #007700">[</span><span style="color: #DD0000">'humedad'</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">&#36;temperatura&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">&#36;_POST</span><span style="color: #007700">[</span><span style="color: #DD0000">'temperatura'</span><span style="color: #007700">];<br />if&nbsp;(!isset(</span><span style="color: #0000BB">&#36;humedad</span><span style="color: #007700">)){</span><span style="color: #0000BB"> <br /></span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">"Datos&nbsp;no&nbsp;recibidos.&nbsp;Error"</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">else <br /></span><span style="color: #007700">{<br />include(</span><span style="color: #DD0000">"conex.php"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB"> if</span><span style="color: #007700">(</span><span style="color: #0000BB">mysql_query</span><span style="color: #007700">(</span><span style="color: #DD0000">"INSERT&nbsp;INTO&nbsp;datos&nbsp;(humedad,&nbsp;temperatura) <br /> &nbsp;VALUES&nbsp;('</span><span style="color: #0000BB">&#36;humedad</span><span style="color: #DD0000">',&nbsp;'</span><span style="color: #0000BB">&#36;temperatura</span><span style="color: #DD0000">')"</span><span style="color: #007700">))<br /></span><span style="color: #0000BB"> </span><span style="color: #007700">{<br />echo&nbsp;</span><span style="color: #DD0000">"&lt;p&nbsp;align='center'&gt;&lt;b&gt;&lt;font&nbsp;color='#000000'&nbsp;face='Arial,&nbsp;Helvetica,&nbsp;sans-serif'&nbsp;size='3'&gt;Los&nbsp;datos&nbsp;han&nbsp;sido&nbsp;introducidos&nbsp;correctamente:&lt;br&gt;<br />Humedad:&nbsp;</span><span style="color: #0000BB">&#36;humedad</span><span style="color: #DD0000">&lt;br&gt;<br />Temperatura:&nbsp;</span><span style="color: #0000BB">&#36;temperatura</span><span style="color: #DD0000">&lt;br&gt;<br />&lt;/p&gt;"</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">"&lt;h2&nbsp;id='CuentaAtras'&nbsp;align='center'&gt;&lt;/h2&gt;"</span><span style="color: #007700">;<br />}<br />else<br /></span><span style="color: #0000BB"> </span><span style="color: #007700">{<br /></span><span style="color: #0000BB"> echo&nbsp;</span><span style="color: #DD0000">"&lt;p&nbsp;align='center'&gt;&lt;b&gt;&lt;font&nbsp;color='#000000'&nbsp;face='Arial,&nbsp;Helvetica,&nbsp;sans-serif'&nbsp;size='5'&gt;Ha&nbsp;habido&nbsp;problemas.&nbsp;Vuelva&nbsp;a&nbsp;intentarlo&lt;/b&gt;&lt;/p&gt;"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB"> </span><span style="color: #007700">}<br /></span><span style="color: #0000BB"> </span><span style="color: #007700">}<br /><br /></span><span style="color: #0000BB">?&gt;<br /></span><br /> &nbsp;&lt;/body&gt;<br />&lt;/html&gt;&nbsp;<br /></code></div></div></div><br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #3333ff;" class="mycode_color">conex.php:</span></span> <br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Código PHP:</div><div class="body"><div dir="ltr"><code>&lt;?<br /> &#36;link&nbsp;=&nbsp;mysql_connect("localhost"&nbsp;,"usuario","contraseña")&nbsp;or&nbsp;die("no&nbsp;se&nbsp;da&nbsp;conectado");<br />mysql_select_db("hutem",&#36;link)&nbsp;or&nbsp;die("no&nbsp;se&nbsp;da&nbsp;seleccionado");<br />?&gt;</code></div></div></div><br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #3333ff;" class="mycode_color">Base de datos Mysql:</span></span> <br />
<ul class="mycode_list"><li>Nombre base de datos: hutem<br />
</li>
<li>Nombre de tabla: datos<br />
</li>
<li>4 campos: id, humedad, temperatura, fecha (con la propiedad timestamp, para saber cuando se introdujeron los datos)<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Consideraciones previas:</span>  Al módulo Wifi HLK-RM04 le he asignado una ip fija en mi red, la 192.168.1.254 y el puerto 8080.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Explicación cómo funciona:</span> <br />
<br />
La placa Arduino recoge los datos de humedad y temperatura que le proporciona el sensor y crea una sencilla página html con un formulario con estos datos que mediante javascript se autoejecuta.<br />
<br />
En el navegador de nuestro PC ponemos la dirección 192.168.1.254:8080, entonces se inicia la comunicación con el módulo wifi y nos es enviada la página web mencionada anteriormente.<br />
<br />
Como el formulario enviado se autoejecuta, nos envía a la página intro.php, donde se introducen los datos recibidos en la base de datos y comienza una cuenta atrás de 60 segundos y volver a la dirección 192.168.1.254:8080 y así tener un bucle e ir almacenando los datos cada 60 segundos. Por supuesto esta cantidad de segundos se pueden variar y poner el tiempo que queramos.<br />
<br />
<br />
Bueno, espero que le sirva a alguien.<br />
<br />
Saludos.]]></description>
			<content:encoded><![CDATA[Saludos.<br />
<br />
Os voy a mostrar como desde un sensor de humedad y temperatura DHT11 conectado a la placa Arduino se puede enviar vía wifi a un servidor web los datos de humedad y temperatura y almacenarlos en una base de datos en los intervalos de tiempos que deseemos.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Materiales utilizados:</span> <br />
<ul class="mycode_list"><li>Una placa Arduino (yo he utilizado la Uno).<br />
</li>
<li>Un módulo wifi HLK-RM04.<br />
</li>
<li>Un sensor de temperatura DHT11.<br />
</li>
<li>7 cables Dupont.<br />
</li>
</ul>
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/WIFI-HLK-RM04.jpg" loading="lazy"  alt="[Imagen: WIFI-HLK-RM04.jpg]" class="mycode_img img-responsive" /></div>
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/dht11.jpg" loading="lazy"  width="250" height="250" alt="[Imagen: dht11.jpg]" class="mycode_img img-responsive" /><br />
</div>
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Conexiones:</span> <br />
<ul class="mycode_list"><li>Pin RX del módulo HLK-RM04 a pin TX de Arduino.<br />
</li>
<li>Pin TX del módulo HLK-RM04 a pin RX de Arduino.<br />
</li>
<li>Pin 5V del módulo HLK-RM04 a pin 5V de Arduino.<br />
</li>
<li>Pin GND del módulo HLK-RM04 a pin GND de Arduino.<br />
</li>
<li>Pin datos del DHT11 a pin 2 de Arduino.<br />
</li>
<li>Pin VCC del DHT11  a pin 3,5V de Arduino.<br />
</li>
<li>Pin GND del DHT11 a pin GND de Arduino.<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Software necesario: </span><br />
<ul class="mycode_list"><li>El código para la placa Arduino.<br />
</li>
<li>Dos páginas web php, una para conectar a la base de datos y otra para introducir los datos en ésta.<br />
</li>
<li>Una base de datos Mysql.<br />
</li>
</ul>
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #3333ff;" class="mycode_color">Código para Arduino:</span></span> <br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>#include "DHT.h"<br />
#define DHTPIN 2     <br />
#define DHTTYPE DHT11  <br />
DHT dht(DHTPIN, DHTTYPE);<br />
<br />
void setup() {                <br />
  Serial.begin(57600);<br />
  dht.begin(); <br />
}<br />
<br />
void loop() {<br />
  boolean has_request = false;<br />
  int h = dht.readHumidity(); int t = dht.readTemperature();<br />
  if (Serial.available()) {<br />
    while(Serial.available()) {char c = Serial.read();}<br />
    has_request = true;<br />
  }<br />
  if (has_request) {<br />
    Serial.println("HTTP/1.1 200 OK");<br />
    Serial.println("Content-Type: text/html");<br />
    Serial.println("Connection: close");     <br />
    String sr = "&lt;!DOCTYPE HTML&gt;&#92;n";<br />
    sr += "&lt;html&gt;&#92;n";<br />
    sr += "Humedad: "; <br />
    sr += h; <br />
    sr += (" %&#92;t");<br />
    sr += "&lt;br /&gt;&#92;n";<br />
    sr += "Temperatura: "; <br />
    sr += t; <br />
    sr += (" &amp;#186C ");<br />
    sr += "&lt;br /&gt;&#92;n";<br />
sr += "&lt;form name=&#92;"formulario&#92;" action=&#92;"http://localhost/arduino/wifi/temperatura/intro.php&#92;" method=&#92;"post&#92;"&gt;";<br />
sr += "  &lt;input type=&#92;"hidden&#92;" name=&#92;"humedad&#92;" value=&#92;"";<br />
sr += h;<br />
sr += "&#92;" /&gt;";<br />
sr += "  &lt;br/&gt;";<br />
sr += "  &lt;input type=&#92;"hidden&#92;" name=&#92;"temperatura&#92;" value=&#92;"";<br />
sr += t;<br />
sr += "&#92;" /&gt;";<br />
sr += "  &lt;br/&gt;";<br />
sr += "&lt;/form&gt;";<br />
sr += "&lt;script&gt;";<br />
sr += "document.formulario.submit();"; <br />
sr += "&lt;/script&gt;";<br />
    sr += "&lt;/html&gt;";<br />
    Serial.print("Content-Length: ");<br />
    Serial.print(sr.length());<br />
    Serial.print("&#92;r&#92;n&#92;r&#92;n");<br />
    Serial.print(sr);<br />
    has_request = false;<br />
  }<br />
}</code></div></div><br />
<br />
<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #3333ff;" class="mycode_color">intro.php:</span></span> <br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Código PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">&lt;!</span><span style="color: #0000BB">DOCTYPE&nbsp;html</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">html</span><span style="color: #007700">&gt;<br /></span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">&lt;</span><span style="color: #0000BB">head</span><span style="color: #007700">&gt;<br /></span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">&lt;</span><span style="color: #0000BB">meta&nbsp;content</span><span style="color: #007700">=</span><span style="color: #DD0000">"text/html;&nbsp;charset=UTF-8"&nbsp;</span><span style="color: #0000BB">http</span><span style="color: #007700">-</span><span style="color: #0000BB">equiv</span><span style="color: #007700">=</span><span style="color: #DD0000">"content-type"</span><span style="color: #007700">&gt;<br /></span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">&lt;</span><span style="color: #0000BB">title</span><span style="color: #007700">&gt;&lt;/</span><span style="color: #0000BB">title</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">script&nbsp;language</span><span style="color: #007700">=</span><span style="color: #DD0000">"JavaScript"</span><span style="color: #007700">&gt;<br /></span><span style="color: #0000BB"> <br /> &nbsp; &nbsp;</span><span style="color: #007700">var&nbsp;</span><span style="color: #0000BB">totalTiempo</span><span style="color: #007700">=</span><span style="color: #0000BB">60</span><span style="color: #007700">;<br /></span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">var&nbsp;</span><span style="color: #0000BB">url</span><span style="color: #007700">=</span><span style="color: #DD0000">"http://192.168.1.254:8080"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB"> <br /> &nbsp; &nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">updateReloj</span><span style="color: #007700">()<br /></span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">{<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp;document</span><span style="color: #007700">.</span><span style="color: #0000BB">getElementById</span><span style="color: #007700">(</span><span style="color: #DD0000">'CuentaAtras'</span><span style="color: #007700">).</span><span style="color: #0000BB">innerHTML&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"Se&nbsp;volverán&nbsp;a&nbsp;tomar&nbsp;datos&nbsp;en&nbsp;"</span><span style="color: #007700">+</span><span style="color: #0000BB">totalTiempo</span><span style="color: #007700">+</span><span style="color: #DD0000">"&nbsp;segundos"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB"> <br /> &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">if(</span><span style="color: #0000BB">totalTiempo</span><span style="color: #007700">==</span><span style="color: #0000BB">0</span><span style="color: #007700">)<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">{<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;window</span><span style="color: #007700">.</span><span style="color: #0000BB">location</span><span style="color: #007700">=</span><span style="color: #0000BB">url</span><span style="color: #007700">;<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">}else{<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;totalTiempo</span><span style="color: #007700">-=</span><span style="color: #0000BB">1</span><span style="color: #007700">;<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;setTimeout</span><span style="color: #007700">(</span><span style="color: #DD0000">"updateReloj()"</span><span style="color: #007700">,</span><span style="color: #0000BB">1000</span><span style="color: #007700">);<br /></span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="color: #007700">}<br /></span><span style="color: #0000BB"> &nbsp; &nbsp;</span><span style="color: #007700">}<br /></span><span style="color: #0000BB"> <br /> &nbsp; &nbsp;window</span><span style="color: #007700">.</span><span style="color: #0000BB">onload</span><span style="color: #007700">=</span><span style="color: #0000BB">updateReloj</span><span style="color: #007700">;<br /></span><span style="color: #0000BB"> <br /> &nbsp; &nbsp;</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">script</span><span style="color: #007700">&gt;<br /></span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">head</span><span style="color: #007700">&gt;<br /></span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">&lt;</span><span style="color: #0000BB">body</span><span style="color: #007700">&gt;<br />&lt;?<br /></span><span style="color: #0000BB">&#36;humedad&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">&#36;_POST</span><span style="color: #007700">[</span><span style="color: #DD0000">'humedad'</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">&#36;temperatura&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">&#36;_POST</span><span style="color: #007700">[</span><span style="color: #DD0000">'temperatura'</span><span style="color: #007700">];<br />if&nbsp;(!isset(</span><span style="color: #0000BB">&#36;humedad</span><span style="color: #007700">)){</span><span style="color: #0000BB"> <br /></span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">"Datos&nbsp;no&nbsp;recibidos.&nbsp;Error"</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">else <br /></span><span style="color: #007700">{<br />include(</span><span style="color: #DD0000">"conex.php"</span><span style="color: #007700">);<br /></span><span style="color: #0000BB"> if</span><span style="color: #007700">(</span><span style="color: #0000BB">mysql_query</span><span style="color: #007700">(</span><span style="color: #DD0000">"INSERT&nbsp;INTO&nbsp;datos&nbsp;(humedad,&nbsp;temperatura) <br /> &nbsp;VALUES&nbsp;('</span><span style="color: #0000BB">&#36;humedad</span><span style="color: #DD0000">',&nbsp;'</span><span style="color: #0000BB">&#36;temperatura</span><span style="color: #DD0000">')"</span><span style="color: #007700">))<br /></span><span style="color: #0000BB"> </span><span style="color: #007700">{<br />echo&nbsp;</span><span style="color: #DD0000">"&lt;p&nbsp;align='center'&gt;&lt;b&gt;&lt;font&nbsp;color='#000000'&nbsp;face='Arial,&nbsp;Helvetica,&nbsp;sans-serif'&nbsp;size='3'&gt;Los&nbsp;datos&nbsp;han&nbsp;sido&nbsp;introducidos&nbsp;correctamente:&lt;br&gt;<br />Humedad:&nbsp;</span><span style="color: #0000BB">&#36;humedad</span><span style="color: #DD0000">&lt;br&gt;<br />Temperatura:&nbsp;</span><span style="color: #0000BB">&#36;temperatura</span><span style="color: #DD0000">&lt;br&gt;<br />&lt;/p&gt;"</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">"&lt;h2&nbsp;id='CuentaAtras'&nbsp;align='center'&gt;&lt;/h2&gt;"</span><span style="color: #007700">;<br />}<br />else<br /></span><span style="color: #0000BB"> </span><span style="color: #007700">{<br /></span><span style="color: #0000BB"> echo&nbsp;</span><span style="color: #DD0000">"&lt;p&nbsp;align='center'&gt;&lt;b&gt;&lt;font&nbsp;color='#000000'&nbsp;face='Arial,&nbsp;Helvetica,&nbsp;sans-serif'&nbsp;size='5'&gt;Ha&nbsp;habido&nbsp;problemas.&nbsp;Vuelva&nbsp;a&nbsp;intentarlo&lt;/b&gt;&lt;/p&gt;"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB"> </span><span style="color: #007700">}<br /></span><span style="color: #0000BB"> </span><span style="color: #007700">}<br /><br /></span><span style="color: #0000BB">?&gt;<br /></span><br /> &nbsp;&lt;/body&gt;<br />&lt;/html&gt;&nbsp;<br /></code></div></div></div><br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #3333ff;" class="mycode_color">conex.php:</span></span> <br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Código PHP:</div><div class="body"><div dir="ltr"><code>&lt;?<br /> &#36;link&nbsp;=&nbsp;mysql_connect("localhost"&nbsp;,"usuario","contraseña")&nbsp;or&nbsp;die("no&nbsp;se&nbsp;da&nbsp;conectado");<br />mysql_select_db("hutem",&#36;link)&nbsp;or&nbsp;die("no&nbsp;se&nbsp;da&nbsp;seleccionado");<br />?&gt;</code></div></div></div><br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #3333ff;" class="mycode_color">Base de datos Mysql:</span></span> <br />
<ul class="mycode_list"><li>Nombre base de datos: hutem<br />
</li>
<li>Nombre de tabla: datos<br />
</li>
<li>4 campos: id, humedad, temperatura, fecha (con la propiedad timestamp, para saber cuando se introdujeron los datos)<br />
</li>
</ul>
<br />
<span style="font-weight: bold;" class="mycode_b">Consideraciones previas:</span>  Al módulo Wifi HLK-RM04 le he asignado una ip fija en mi red, la 192.168.1.254 y el puerto 8080.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Explicación cómo funciona:</span> <br />
<br />
La placa Arduino recoge los datos de humedad y temperatura que le proporciona el sensor y crea una sencilla página html con un formulario con estos datos que mediante javascript se autoejecuta.<br />
<br />
En el navegador de nuestro PC ponemos la dirección 192.168.1.254:8080, entonces se inicia la comunicación con el módulo wifi y nos es enviada la página web mencionada anteriormente.<br />
<br />
Como el formulario enviado se autoejecuta, nos envía a la página intro.php, donde se introducen los datos recibidos en la base de datos y comienza una cuenta atrás de 60 segundos y volver a la dirección 192.168.1.254:8080 y así tener un bucle e ir almacenando los datos cada 60 segundos. Por supuesto esta cantidad de segundos se pueden variar y poner el tiempo que queramos.<br />
<br />
<br />
Bueno, espero que le sirva a alguien.<br />
<br />
Saludos.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Control de acceso, Arduino + wifi + php + javascript + MySql]]></title>
			<link>https://chujalt.com/thread-6.html</link>
			<pubDate>Fri, 05 Mar 2021 20:08:26 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://chujalt.com/member.php?action=profile&uid=1">chujalt</a>]]></dc:creator>
			<guid isPermaLink="false">https://chujalt.com/thread-6.html</guid>
			<description><![CDATA[Saludos....<br />
<br />
Os voy a mostrar como hacer un control de acceso vía Wifi utilizando la placa arduino, mas un poco de código php, javascript y base de datos Mysql. De esta manera podemos loguearnos desde cualquier dispositivo que este conectado a internet, un pc, una tablet, un teléfono, etc, sin necesidad de que nuestra placa Arduino este conectada por cable a nuestro PC.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Materiales utilizados</span>:<br />
<ul class="mycode_list"><li>Una Placa Arduino (yo he utilizado la nano)<br />
</li>
<li>Un módulo wifi HLK-RM04<br />
</li>
<li>12 cables dupont<br />
</li>
<li>Una pantalla lcd I2C 16X2<br />
</li>
<li>Un módulo led rgb<br />
</li>
</ul>
<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/WIFI-HLK-RM04.jpg" loading="lazy"  alt="[Imagen: WIFI-HLK-RM04.jpg]" class="mycode_img img-responsive" /></div>
<br />
<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/lcd_i2c.jpg" loading="lazy"  width="400" height="400" alt="[Imagen: lcd_i2c.jpg]" class="mycode_img img-responsive" /></div>
<br />
<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/led_rgb.jpg" loading="lazy"  alt="[Imagen: led_rgb.jpg]" class="mycode_img img-responsive" /></div>
<br />
<br />
<br />
<span style="color: #333333;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">Conexiones:</span></span><br />
<ul class="mycode_list"><li>Pin SCL del lcd --&gt; Pin A5 de Arduino<br />
</li>
<li>Pin SDA del lcd --&gt; Pin A4 de Arduino<br />
</li>
<li>Pin VCC del lcd --&gt; Pin 5 voltios de Arduino<br />
</li>
<li>Pin GND del lcd --&gt; Pin GND de Arduino<br />
</li>
<li>Pin V-G del led --&gt;Pin GND de Arduino<br />
</li>
<li>Pin R del led --&gt; Pin 11 de Arduino<br />
</li>
<li>Pin G del led --&gt; Pin 10 de arduino<br />
</li>
<li>Pin B del led --&gt; Pin 9 de Arduino<br />
</li>
<li>Pin Rx del módulo HLK-RM04 --&gt; Pin Tx de Arduino<br />
</li>
<li>Pin Tx del módulo HLK-RM04 --&gt; Pin Rx de Arduino<br />
</li>
<li>Pin GND del módulo HLK-RM04 --&gt; Pin GND de Arduino<br />
</li>
<li>Pin 5v del módulo HLK-RM04 --&gt; Pin 5v de Arduino<br />
</li>
</ul>
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Software necesario</span>:<br />
<ul class="mycode_list"><li>El código para Arduino (se mostrará mas abajo).<br />
</li>
<li>Una página php para introducir el código y verificarlo (se mostrará mas abajo).<br />
</li>
<li>Una página php para conectar con la base de datos donde están los usuarios y los códigos de acceso (se mostrará mas abajo).<br />
</li>
<li>Una base de datos Mysql donde se guardarán los usuarios y los códigos de acceso (se explicará mas abajo).<br />
</li>
</ul>
<br />
<br />
El sistema lo que hace es mostrar en la pantalla del lcd la frase "ESPERANDO DATOS" mientras el led está en color azul parpadeante.<br />
Cuando ponemos desde la página web el código, si éste es correcto la pantalla lcd muestra "Saludos + nombre de usuario" y el led se pone de color verde. Si el código es incorrecto, no existe, la pantalla muestra "Sin acceso. Código erroneo" y muestra el led de color rojo. A los 5 segundos se reseatea y vuelve a mostrar "ESPERANDO DATOS" con led azul parpadeante.<br />
<br />
Cabe decir que se puede ampliar para que, por ejemplo, accione un relé para abrir una puerta o lo que se os ocurra.<br />
<br />
<br />
<br />
<span style="color: #3333ff;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">Código para la placa arduino</span></span>:<br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>#include &lt;Wire.h&gt; <br />
#include &lt;LiquidCrystal_I2C.h&gt;<br />
<br />
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);<br />
int redPin = 11;<br />
int greenPin = 10;<br />
int bluePin = 9;<br />
void setup()  <br />
{<br />
  Serial.begin(57600);  <br />
 pinMode(redPin, OUTPUT);<br />
  pinMode(greenPin, OUTPUT);<br />
  pinMode(bluePin, OUTPUT); <br />
  lcd.begin(16,2);   <br />
<br />
  lcd.backlight(); <br />
  lcd.setCursor(4,0);<br />
  lcd.print("ESPERANDO");<br />
  lcd.setCursor(6,1);<br />
  lcd.print("DATOS");  <br />
while(!Serial.available()) {<br />
  digitalWrite(bluePin, HIGH);<br />
  delay(500);<br />
  digitalWrite(bluePin, LOW);<br />
  delay(500); <br />
}<br />
}<br />
String f = "";<br />
void loop() <br />
  {<br />
boolean has_request = false;<br />
  String in = "";<br />
    if (Serial.available()) {<br />
 in = "";<br />
    while (true) {  <br />
       while (Serial.available() == false) {}<br />
      in += (char)(Serial.read());<br />
      if (in.endsWith("&#92;r&#92;n")) {<br />
        has_request = true;  break;<br />
      }<br />
    }   <br />
  }<br />
  if (has_request) {<br />
    char i1 = in.indexOf("GET /mensaje?f="), i2;<br />
    if (i1 != -1) {<br />
      i2 = in.indexOf(" ", i1+15);<br />
      f = in.substring(i1+15, i2);<br />
    }     <br />
     if (f == "aaa") <br />
        {<br />
          lcd.clear();<br />
           lcd.setCursor(3,0);<br />
     lcd.print("SIN ACCESO"); <br />
     lcd.setCursor(1,1); <br />
        lcd.write("CODIGO ERRONEO");<br />
        digitalWrite(bluePin, LOW);<br />
  digitalWrite(greenPin, LOW); <br />
  digitalWrite(redPin, HIGH);<br />
  pagina();<br />
<br />
        }<br />
        else<br />
        {<br />
           lcd.clear(); <br />
      lcd.setCursor(4,0);<br />
     lcd.print("SALUDOS"); <br />
     lcd.setCursor(1,1); <br />
     f.replace("+", " ");<br />
        lcd.print(f);<br />
        digitalWrite(bluePin, LOW);<br />
  digitalWrite(greenPin, HIGH); <br />
  digitalWrite(redPin, LOW); <br />
   pagina();<br />
        }<br />
   <br />
     has_request = false;  <br />
    <br />
    }<br />
      delay(5000);<br />
    digitalWrite(greenPin, LOW); <br />
  digitalWrite(redPin, LOW);  <br />
  software_Reset() ; <br />
  }<br />
  void pagina()<br />
  {<br />
 <br />
    Serial.println("HTTP/1.1 200 OK");<br />
    Serial.println("Content-Type: text/html");<br />
<br />
    String sr = "&lt;!DOCTYPE HTML&gt;&#92;n";<br />
    sr += "&lt;html&gt;&#92;n";<br />
    sr += "&lt;head&gt;&#92;n";<br />
    sr += "&lt;meta http-equiv='Refresh' content='0;url=http://192.168.1.11/arduino/wifi/acceso/index.php'&gt;&#92;n";<br />
    sr += "&lt;/head&gt;&#92;n";<br />
    sr += "&lt;body&gt;&#92;n";&nbsp;&nbsp;&nbsp;&nbsp;<br />
    sr += "&lt;/body&gt;";  <br />
    sr += "&lt;/html&gt;";<br />
    Serial.print("Content-Length: ");<br />
    Serial.print(sr.length());<br />
    Serial.print("&#92;r&#92;n&#92;r&#92;n");<br />
    Serial.print(sr);   <br />
  }<br />
 void software_Reset() <br />
{<br />
asm volatile ("  jmp 0");  <br />
}  </code></div></div><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Comentario del código</span>:<br />
<ul class="mycode_list"><li>Incluimos las librerías necesarias para que todo funcione correctamente.<br />
</li>
<li>Indicamos todos los pines necesarios.<br />
</li>
<li>Iniciamos la comunicación a 57600 baudios.<br />
</li>
<li>Apagamos todos los colores del led y encendemos el lcd.<br />
</li>
<li>Le decimos al lcd que muestre en pantalla "ESPERANDO DATOS" y que el led parpadee en color azul cada medio segundo.<br />
</li>
<li>Si se inicia la comunicación serial y ésta envía "aaa" (previamente enviada por la página php) el lcd imprime  "Sin acceso. Código erroneo" y el led se pone en rojo fijo.<br />
</li>
<li>Si la página php no envía ese carácter y envía otra cadena, ésta sera el nombre de usuario, que previamente ha sido confirmada desde la base de datos al meter el código, entonces la pantalla de lcd mostrará "Saludos (nombre del usuario)" y el led se pondrá en color verde fijo.<br />
</li>
<li>Una vez recibida la información la placa Arduino mando unos comandos (página web) para que se vuelva a mostrar el teclado (mas abajo imagen).<br />
</li>
<li>Tanto como si el código es bueno o erróneo, a los 5 segundos se resetea y vuelve a mostrar en pantalla  "ESPERANDO DATOS" y el led de color azul parpadeante.<br />
</li>
</ul>
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #3333ff;" class="mycode_color">Código pagina principal php</span></span>:<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Código PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">&lt;</span><span style="color: #0000BB">html</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">head</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">title</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">teclado&nbsp;en&nbsp;pantalla</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">title</span><span style="color: #007700">&gt;<br />&lt;!</span><span style="color: #0000BB">DOCTYPE&nbsp;html&nbsp;</span><span style="color: #007700">PUBLIC&nbsp;</span><span style="color: #DD0000">"-//W3C//DTD&nbsp;HTML&nbsp;4.01&nbsp;Transitional//EN"</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">meta&nbsp;http</span><span style="color: #007700">-</span><span style="color: #0000BB">equiv</span><span style="color: #007700">=</span><span style="color: #DD0000">"Content-Type"&nbsp;</span><span style="color: #0000BB">content</span><span style="color: #007700">=</span><span style="color: #DD0000">"text/html;&nbsp;charset=iso-8859-1"&nbsp;</span><span style="color: #007700">/&gt;<br />&lt;</span><span style="color: #0000BB">META&nbsp;name</span><span style="color: #007700">=</span><span style="color: #DD0000">"robots"&nbsp;</span><span style="color: #0000BB">content</span><span style="color: #007700">=</span><span style="color: #DD0000">"NOINDEX,NOFOLLOW"</span><span style="color: #007700">&gt;&nbsp;<br />&lt;</span><span style="color: #0000BB">script&nbsp;language</span><span style="color: #007700">=</span><span style="color: #DD0000">"JavaScript"&nbsp;</span><span style="color: #0000BB">type</span><span style="color: #007700">=</span><span style="color: #DD0000">"text/javascript"</span><span style="color: #007700">&gt;<br /></span><span style="color: #FF8000">//&nbsp;Comprueba&nbsp;Navegador&nbsp;y&nbsp;Plataforma&nbsp;del&nbsp;pc<br /></span><span style="color: #007700">var&nbsp;</span><span style="color: #0000BB">clientPC&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">navigator</span><span style="color: #007700">.</span><span style="color: #0000BB">userAgent</span><span style="color: #007700">.</span><span style="color: #0000BB">toLowerCase</span><span style="color: #007700">();&nbsp;</span><span style="color: #FF8000">//&nbsp;Coge&nbsp;info&nbsp;cliente<br /></span><span style="color: #007700">var&nbsp;</span><span style="color: #0000BB">clientVer&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">parseInt</span><span style="color: #007700">(</span><span style="color: #0000BB">navigator</span><span style="color: #007700">.</span><span style="color: #0000BB">appVersion</span><span style="color: #007700">);&nbsp;</span><span style="color: #FF8000">//&nbsp;Coge&nbsp;versiÃ³n&nbsp;navegador<br />&nbsp;<br /></span><span style="color: #007700">var&nbsp;</span><span style="color: #0000BB">is_ie&nbsp;</span><span style="color: #007700">=&nbsp;((</span><span style="color: #0000BB">clientPC</span><span style="color: #007700">.</span><span style="color: #0000BB">indexOf</span><span style="color: #007700">(</span><span style="color: #DD0000">"msie"</span><span style="color: #007700">)&nbsp;!=&nbsp;-</span><span style="color: #0000BB">1</span><span style="color: #007700">)&nbsp;&amp;&amp;&nbsp;(</span><span style="color: #0000BB">clientPC</span><span style="color: #007700">.</span><span style="color: #0000BB">indexOf</span><span style="color: #007700">(</span><span style="color: #DD0000">"opera"</span><span style="color: #007700">)&nbsp;==&nbsp;-</span><span style="color: #0000BB">1</span><span style="color: #007700">));<br />var&nbsp;</span><span style="color: #0000BB">is_nav&nbsp;</span><span style="color: #007700">=&nbsp;((</span><span style="color: #0000BB">clientPC</span><span style="color: #007700">.</span><span style="color: #0000BB">indexOf</span><span style="color: #007700">(</span><span style="color: #DD0000">'mozilla'</span><span style="color: #007700">)!=-</span><span style="color: #0000BB">1</span><span style="color: #007700">)&nbsp;&amp;&amp;&nbsp;(</span><span style="color: #0000BB">clientPC</span><span style="color: #007700">.</span><span style="color: #0000BB">indexOf</span><span style="color: #007700">(</span><span style="color: #DD0000">'spoofer'</span><span style="color: #007700">)==-</span><span style="color: #0000BB">1</span><span style="color: #007700">)<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #007700">&amp;&amp;&nbsp;(</span><span style="color: #0000BB">clientPC</span><span style="color: #007700">.</span><span style="color: #0000BB">indexOf</span><span style="color: #007700">(</span><span style="color: #DD0000">'compatible'</span><span style="color: #007700">)&nbsp;==&nbsp;-</span><span style="color: #0000BB">1</span><span style="color: #007700">)&nbsp;&amp;&amp;&nbsp;(</span><span style="color: #0000BB">clientPC</span><span style="color: #007700">.</span><span style="color: #0000BB">indexOf</span><span style="color: #007700">(</span><span style="color: #DD0000">'opera'</span><span style="color: #007700">)==-</span><span style="color: #0000BB">1</span><span style="color: #007700">)<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #007700">&amp;&amp;&nbsp;(</span><span style="color: #0000BB">clientPC</span><span style="color: #007700">.</span><span style="color: #0000BB">indexOf</span><span style="color: #007700">(</span><span style="color: #DD0000">'webtv'</span><span style="color: #007700">)==-</span><span style="color: #0000BB">1</span><span style="color: #007700">)&nbsp;&amp;&amp;&nbsp;(</span><span style="color: #0000BB">clientPC</span><span style="color: #007700">.</span><span style="color: #0000BB">indexOf</span><span style="color: #007700">(</span><span style="color: #DD0000">'hotjava'</span><span style="color: #007700">)==-</span><span style="color: #0000BB">1</span><span style="color: #007700">));<br />var&nbsp;</span><span style="color: #0000BB">is_moz&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;<br />&nbsp;<br />var&nbsp;</span><span style="color: #0000BB">is_win&nbsp;</span><span style="color: #007700">=&nbsp;((</span><span style="color: #0000BB">clientPC</span><span style="color: #007700">.</span><span style="color: #0000BB">indexOf</span><span style="color: #007700">(</span><span style="color: #DD0000">"win"</span><span style="color: #007700">)!=-</span><span style="color: #0000BB">1</span><span style="color: #007700">)&nbsp;||&nbsp;(</span><span style="color: #0000BB">clientPC</span><span style="color: #007700">.</span><span style="color: #0000BB">indexOf</span><span style="color: #007700">(</span><span style="color: #DD0000">"16bit"</span><span style="color: #007700">)&nbsp;!=&nbsp;-</span><span style="color: #0000BB">1</span><span style="color: #007700">));<br />var&nbsp;</span><span style="color: #0000BB">is_mac&nbsp;</span><span style="color: #007700">=&nbsp;(</span><span style="color: #0000BB">clientPC</span><span style="color: #007700">.</span><span style="color: #0000BB">indexOf</span><span style="color: #007700">(</span><span style="color: #DD0000">"mac"</span><span style="color: #007700">)!=-</span><span style="color: #0000BB">1</span><span style="color: #007700">);<br />&nbsp;<br />function&nbsp;</span><span style="color: #0000BB">imprm</span><span style="color: #007700">(</span><span style="color: #0000BB">bot</span><span style="color: #007700">)&nbsp;{<br />var&nbsp;</span><span style="color: #0000BB">txtarea&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">getElementById</span><span style="color: #007700">(</span><span style="color: #DD0000">'ta'</span><span style="color: #007700">);<br />var&nbsp;</span><span style="color: #0000BB">tecla&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;Array(</span><span style="color: #DD0000">'1'</span><span style="color: #007700">,</span><span style="color: #DD0000">'2'</span><span style="color: #007700">,</span><span style="color: #DD0000">'3'</span><span style="color: #007700">,</span><span style="color: #DD0000">'4'</span><span style="color: #007700">,</span><span style="color: #DD0000">'5'</span><span style="color: #007700">,</span><span style="color: #DD0000">'6'</span><span style="color: #007700">,</span><span style="color: #DD0000">'7'</span><span style="color: #007700">,</span><span style="color: #DD0000">'8'</span><span style="color: #007700">,</span><span style="color: #DD0000">'9'</span><span style="color: #007700">,</span><span style="color: #DD0000">'0'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">value</span><span style="color: #007700">+=</span><span style="color: #0000BB">tecla</span><span style="color: #007700">[</span><span style="color: #0000BB">bot</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">focus</span><span style="color: #007700">();<br />return;<br />}<br />&nbsp;<br />function&nbsp;</span><span style="color: #0000BB">imprM</span><span style="color: #007700">(</span><span style="color: #0000BB">bot</span><span style="color: #007700">)&nbsp;{<br />var&nbsp;</span><span style="color: #0000BB">txtarea&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">getElementById</span><span style="color: #007700">(</span><span style="color: #DD0000">'ta'</span><span style="color: #007700">);<br />var&nbsp;</span><span style="color: #0000BB">teclaM&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;Array<br /></span><span style="color: #0000BB">txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">value</span><span style="color: #007700">+=</span><span style="color: #0000BB">teclaM</span><span style="color: #007700">[</span><span style="color: #0000BB">bot</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">focus</span><span style="color: #007700">();<br />return;<br />}<br />&nbsp;<br />&nbsp;<br />var&nbsp;</span><span style="color: #0000BB">capa1<br /></span><span style="color: #007700">var&nbsp;</span><span style="color: #0000BB">capa2<br /></span><span style="color: #007700">var&nbsp;</span><span style="color: #0000BB">ns4&nbsp;</span><span style="color: #007700">=&nbsp;(</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">layers</span><span style="color: #007700">)?&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">:</span><span style="color: #0000BB">false<br /></span><span style="color: #007700">var&nbsp;</span><span style="color: #0000BB">ie4&nbsp;</span><span style="color: #007700">=&nbsp;(</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">all</span><span style="color: #007700">)?&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">:</span><span style="color: #0000BB">false<br /></span><span style="color: #007700">var&nbsp;</span><span style="color: #0000BB">ns6&nbsp;</span><span style="color: #007700">=&nbsp;(</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">getElementById</span><span style="color: #007700">)?&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">:</span><span style="color: #0000BB">false<br />&nbsp;<br /></span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">teclado</span><span style="color: #007700">()&nbsp;{<br />&nbsp;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">if&nbsp;(</span><span style="color: #0000BB">ns4</span><span style="color: #007700">)&nbsp;{<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp;capa1&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">c1<br />&nbsp; &nbsp; &nbsp;capa2&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">c2<br />&nbsp; </span><span style="color: #007700">}<br />&nbsp;if&nbsp;(</span><span style="color: #0000BB">ie4</span><span style="color: #007700">)&nbsp;{<br />&nbsp;</span><span style="color: #0000BB"> &nbsp;capa1&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">c1</span><span style="color: #007700">.</span><span style="color: #0000BB">style<br />&nbsp; &nbsp;capa2&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">c2</span><span style="color: #007700">.</span><span style="color: #0000BB">style<br />&nbsp;</span><span style="color: #007700">}<br />&nbsp;if&nbsp;(</span><span style="color: #0000BB">ns6</span><span style="color: #007700">)&nbsp;{<br />&nbsp;</span><span style="color: #0000BB"> &nbsp;capa1&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">getElementById</span><span style="color: #007700">(</span><span style="color: #DD0000">'c1'</span><span style="color: #007700">).</span><span style="color: #0000BB">style<br />&nbsp; &nbsp;capa2&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">getElementById</span><span style="color: #007700">(</span><span style="color: #DD0000">'c2'</span><span style="color: #007700">).</span><span style="color: #0000BB">style<br />&nbsp;</span><span style="color: #007700">}<br />}<br />&nbsp;<br />function&nbsp;</span><span style="color: #0000BB">muestra</span><span style="color: #007700">(</span><span style="color: #0000BB">obj</span><span style="color: #007700">)&nbsp;{<br />if&nbsp;(</span><span style="color: #0000BB">ns4</span><span style="color: #007700">)&nbsp;</span><span style="color: #0000BB">obj</span><span style="color: #007700">.</span><span style="color: #0000BB">visibility&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"show"<br /></span><span style="color: #007700">else&nbsp;if&nbsp;(</span><span style="color: #0000BB">ie4</span><span style="color: #007700">)&nbsp;</span><span style="color: #0000BB">obj</span><span style="color: #007700">.</span><span style="color: #0000BB">visibility&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"visible"<br /></span><span style="color: #007700">else&nbsp;if&nbsp;(</span><span style="color: #0000BB">ns6</span><span style="color: #007700">)&nbsp;</span><span style="color: #0000BB">obj</span><span style="color: #007700">.</span><span style="color: #0000BB">visibility&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"visible"<br /></span><span style="color: #007700">}<br />function&nbsp;</span><span style="color: #0000BB">oculta</span><span style="color: #007700">(</span><span style="color: #0000BB">obj</span><span style="color: #007700">)&nbsp;{<br />if&nbsp;(</span><span style="color: #0000BB">ns4</span><span style="color: #007700">)&nbsp;</span><span style="color: #0000BB">obj</span><span style="color: #007700">.</span><span style="color: #0000BB">visibility&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"hide"<br /></span><span style="color: #007700">else&nbsp;if&nbsp;(</span><span style="color: #0000BB">ie4</span><span style="color: #007700">)&nbsp;</span><span style="color: #0000BB">obj</span><span style="color: #007700">.</span><span style="color: #0000BB">visibility&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"hidden"<br /></span><span style="color: #007700">else&nbsp;if&nbsp;(</span><span style="color: #0000BB">ns6</span><span style="color: #007700">)&nbsp;</span><span style="color: #0000BB">obj</span><span style="color: #007700">.</span><span style="color: #0000BB">visibility&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"hidden"<br /></span><span style="color: #007700">}<br />&nbsp;<br />&nbsp;<br />function&nbsp;</span><span style="color: #0000BB">borrar</span><span style="color: #007700">()&nbsp;{<br />var&nbsp;</span><span style="color: #0000BB">txtarea&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">getElementById</span><span style="color: #007700">(</span><span style="color: #DD0000">'ta'</span><span style="color: #007700">);<br />if&nbsp;((</span><span style="color: #0000BB">clientVer&nbsp;</span><span style="color: #007700">&gt;=&nbsp;</span><span style="color: #0000BB">4</span><span style="color: #007700">)&nbsp;&amp;&amp;&nbsp;</span><span style="color: #0000BB">is_ie&nbsp;</span><span style="color: #007700">&amp;&amp;&nbsp;</span><span style="color: #0000BB">is_win</span><span style="color: #007700">)&nbsp;{<br />var&nbsp;</span><span style="color: #0000BB">txtSeleccion&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">selection</span><span style="color: #007700">.</span><span style="color: #0000BB">createRange</span><span style="color: #007700">().</span><span style="color: #0000BB">text</span><span style="color: #007700">;<br />&nbsp;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; if&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">selection</span><span style="color: #007700">)&nbsp;{<br />&nbsp;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; if&nbsp;</span><span style="color: #007700">(!</span><span style="color: #0000BB">txtSeleccion</span><span style="color: #007700">)&nbsp;{<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">focus</span><span style="color: #007700">();<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; var&nbsp;Sel&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">selection</span><span style="color: #007700">.</span><span style="color: #0000BB">createRange</span><span style="color: #007700">();<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; Sel</span><span style="color: #007700">.</span><span style="color: #0000BB">moveStart&nbsp;</span><span style="color: #007700">(</span><span style="color: #DD0000">'character'</span><span style="color: #007700">,&nbsp;-</span><span style="color: #0000BB">txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">value</span><span style="color: #007700">.</span><span style="color: #0000BB">length</span><span style="color: #007700">);<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; curPos&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">Sel</span><span style="color: #007700">.</span><span style="color: #0000BB">text</span><span style="color: #007700">.</span><span style="color: #0000BB">length</span><span style="color: #007700">;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #0000BB">txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">value</span><span style="color: #007700">.</span><span style="color: #0000BB">substr</span><span style="color: #007700">(</span><span style="color: #0000BB">0</span><span style="color: #007700">,</span><span style="color: #0000BB">txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">value</span><span style="color: #007700">.</span><span style="color: #0000BB">length</span><span style="color: #007700">-</span><span style="color: #0000BB">1</span><span style="color: #007700">);<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; return</span><span style="color: #007700">(</span><span style="color: #0000BB">curPos</span><span style="color: #007700">);<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; </span><span style="color: #007700">}<br />&nbsp;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">focus</span><span style="color: #007700">();<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; var&nbsp;Sel&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">selection</span><span style="color: #007700">.</span><span style="color: #0000BB">createRange</span><span style="color: #007700">();<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; document</span><span style="color: #007700">.</span><span style="color: #0000BB">selection</span><span style="color: #007700">.</span><span style="color: #0000BB">createRange</span><span style="color: #007700">().</span><span style="color: #0000BB">text&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">""</span><span style="color: #007700">;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; Sel</span><span style="color: #007700">.</span><span style="color: #0000BB">moveStart&nbsp;</span><span style="color: #007700">(</span><span style="color: #DD0000">'character'</span><span style="color: #007700">,&nbsp;-</span><span style="color: #0000BB">txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">value</span><span style="color: #007700">.</span><span style="color: #0000BB">length</span><span style="color: #007700">);<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; curPos&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">Sel</span><span style="color: #007700">.</span><span style="color: #0000BB">text</span><span style="color: #007700">.</span><span style="color: #0000BB">length</span><span style="color: #007700">;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; return</span><span style="color: #007700">(</span><span style="color: #0000BB">curPos</span><span style="color: #007700">);<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">}<br />}<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />else&nbsp;if&nbsp;(</span><span style="color: #0000BB">txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">selectionEnd&nbsp;</span><span style="color: #007700">&amp;&amp;&nbsp;(</span><span style="color: #0000BB">txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">selectionEnd&nbsp;</span><span style="color: #007700">-&nbsp;</span><span style="color: #0000BB">txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">selectionStart&nbsp;</span><span style="color: #007700">&gt;&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">))<br />&nbsp;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">{<br />&nbsp;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; var&nbsp;selLargo&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">textLength</span><span style="color: #007700">;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; var&nbsp;selEmpz&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">selectionStart</span><span style="color: #007700">;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; var&nbsp;selFin&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">selectionEnd</span><span style="color: #007700">;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; var&nbsp;s1&nbsp;</span><span style="color: #007700">=&nbsp;(</span><span style="color: #0000BB">txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">value</span><span style="color: #007700">).</span><span style="color: #0000BB">substring</span><span style="color: #007700">(</span><span style="color: #0000BB">0</span><span style="color: #007700">,</span><span style="color: #0000BB">selEmpz</span><span style="color: #007700">);<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; var&nbsp;s2&nbsp;</span><span style="color: #007700">=&nbsp;(</span><span style="color: #0000BB">txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">value</span><span style="color: #007700">).</span><span style="color: #0000BB">substring</span><span style="color: #007700">(</span><span style="color: #0000BB">selFin</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">selLargo</span><span style="color: #007700">);<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">value&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB"> s1&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB"> s2</span><span style="color: #007700">;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; return</span><span style="color: #007700">(</span><span style="color: #0000BB">selEmpz</span><span style="color: #007700">);&nbsp;</span><span style="color: #0000BB"> &nbsp; <br />&nbsp;<br /></span><span style="color: #007700">}<br />else<br />{<br />&nbsp;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; var&nbsp;selLargo&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">textLength</span><span style="color: #007700">;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">value&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">value</span><span style="color: #007700">.</span><span style="color: #0000BB">substr</span><span style="color: #007700">(</span><span style="color: #0000BB">0</span><span style="color: #007700">,</span><span style="color: #0000BB">txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">value</span><span style="color: #007700">.</span><span style="color: #0000BB">length</span><span style="color: #007700">-</span><span style="color: #0000BB">1</span><span style="color: #007700">);<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; var&nbsp;Cursor&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">textLength</span><span style="color: #007700">;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; return</span><span style="color: #007700">(</span><span style="color: #0000BB">Cursor</span><span style="color: #007700">);&nbsp;<br />&nbsp;<br />}<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; almznaCursor</span><span style="color: #007700">(</span><span style="color: #0000BB">txtarea</span><span style="color: #007700">);<br />}<br />&nbsp;<br />function&nbsp;</span><span style="color: #0000BB">almznaCursor</span><span style="color: #007700">(</span><span style="color: #0000BB">textEl</span><span style="color: #007700">)&nbsp;{<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; if&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">textEl</span><span style="color: #007700">.</span><span style="color: #0000BB">createTextRange</span><span style="color: #007700">)&nbsp;</span><span style="color: #0000BB">textEl</span><span style="color: #007700">.</span><span style="color: #0000BB">caretPos&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">selection</span><span style="color: #007700">.</span><span style="color: #0000BB">createRange</span><span style="color: #007700">().</span><span style="color: #0000BB">duplicate</span><span style="color: #007700">();<br />}<br />&nbsp;<br />&nbsp;<br />function&nbsp;</span><span style="color: #0000BB">PosicionCursor</span><span style="color: #007700">(</span><span style="color: #0000BB">pos</span><span style="color: #007700">)&nbsp;{<br />var&nbsp;</span><span style="color: #0000BB">txtarea&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">getElementById</span><span style="color: #007700">(</span><span style="color: #DD0000">'ta'</span><span style="color: #007700">);<br />&nbsp;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #FF8000">//Firefox<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; if&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">txtarea&nbsp;</span><span style="color: #007700">.</span><span style="color: #0000BB">setSelectionRange</span><span style="color: #007700">)&nbsp;{<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; txtarea&nbsp;</span><span style="color: #007700">.</span><span style="color: #0000BB">focus</span><span style="color: #007700">();<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; txtarea&nbsp;</span><span style="color: #007700">.</span><span style="color: #0000BB">setSelectionRange</span><span style="color: #007700">(</span><span style="color: #0000BB">pos</span><span style="color: #007700">,</span><span style="color: #0000BB">pos</span><span style="color: #007700">);<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">}<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; else&nbsp;</span><span style="color: #007700">if&nbsp;(</span><span style="color: #0000BB">txtarea&nbsp;</span><span style="color: #007700">.</span><span style="color: #0000BB">createTextRange</span><span style="color: #007700">)&nbsp;{<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; var&nbsp;rango&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">txtarea&nbsp;</span><span style="color: #007700">.</span><span style="color: #0000BB">createTextRange</span><span style="color: #007700">();<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; rango</span><span style="color: #007700">.</span><span style="color: #0000BB">collapse</span><span style="color: #007700">(</span><span style="color: #0000BB">true</span><span style="color: #007700">);<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; rango</span><span style="color: #007700">.</span><span style="color: #0000BB">moveEnd</span><span style="color: #007700">(</span><span style="color: #DD0000">'character'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">pos</span><span style="color: #007700">);<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; rango</span><span style="color: #007700">.</span><span style="color: #0000BB">moveStart</span><span style="color: #007700">(</span><span style="color: #DD0000">'character'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">pos</span><span style="color: #007700">);<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; rango</span><span style="color: #007700">.</span><span style="color: #0000BB">select</span><span style="color: #007700">();<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">}<br />}<br />&nbsp;<br />function&nbsp;</span><span style="color: #0000BB">EliminarCaracter</span><span style="color: #007700">()<br />{<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; PosicionCursor</span><span style="color: #007700">(</span><span style="color: #0000BB">borrar</span><span style="color: #007700">());<br />}<br />&nbsp;<br />&lt;/</span><span style="color: #0000BB">script</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">style&nbsp;type</span><span style="color: #007700">=</span><span style="color: #DD0000">"text/css"</span><span style="color: #007700">&gt;<br /></span><span style="color: #FF8000">#juan&nbsp;{<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; position</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">absolute</span><span style="color: #007700">;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; left</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">50</span><span style="color: #007700">%;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; top</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">50</span><span style="color: #007700">%;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; transform</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">translate</span><span style="color: #007700">(-</span><span style="color: #0000BB">50</span><span style="color: #007700">%,&nbsp;-</span><span style="color: #0000BB">50</span><span style="color: #007700">%);<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">-</span><span style="color: #0000BB">webkit</span><span style="color: #007700">-</span><span style="color: #0000BB">transform</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">translate</span><span style="color: #007700">(-</span><span style="color: #0000BB">50</span><span style="color: #007700">%,&nbsp;-</span><span style="color: #0000BB">50</span><span style="color: #007700">%);<br />}<br /></span><span style="color: #FF8000">#andres&nbsp;{<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; position</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">absolute</span><span style="color: #007700">;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; left</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">50</span><span style="color: #007700">%;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; top</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">70</span><span style="color: #007700">%;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; transform</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">translate</span><span style="color: #007700">(-</span><span style="color: #0000BB">50</span><span style="color: #007700">%,&nbsp;-</span><span style="color: #0000BB">70</span><span style="color: #007700">%);<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">-</span><span style="color: #0000BB">webkit</span><span style="color: #007700">-</span><span style="color: #0000BB">transform</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">translate</span><span style="color: #007700">(-</span><span style="color: #0000BB">50</span><span style="color: #007700">%,&nbsp;-</span><span style="color: #0000BB">70</span><span style="color: #007700">%);<br />}<br />&lt;/</span><span style="color: #0000BB">style</span><span style="color: #007700">&gt;<br />&lt;/</span><span style="color: #0000BB">head</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">body&nbsp;onLoad</span><span style="color: #007700">=</span><span style="color: #DD0000">"teclado();"</span><span style="color: #007700">&gt;<br />&nbsp;&lt;</span><span style="color: #0000BB">div&nbsp;id</span><span style="color: #007700">=</span><span style="color: #DD0000">"juan"</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">form&nbsp;method</span><span style="color: #007700">=</span><span style="color: #DD0000">"POST"&nbsp;</span><span style="color: #0000BB">action</span><span style="color: #007700">=</span><span style="color: #DD0000">""</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">input&nbsp;type</span><span style="color: #007700">=</span><span style="color: #DD0000">"password"&nbsp;</span><span style="color: #0000BB">id</span><span style="color: #007700">=</span><span style="color: #DD0000">"ta"&nbsp;</span><span style="color: #0000BB">name</span><span style="color: #007700">=</span><span style="color: #DD0000">"pepe"&nbsp;</span><span style="color: #0000BB">size</span><span style="color: #007700">=</span><span style="color: #DD0000">"9"</span><span style="color: #007700">&gt;&lt;</span><span style="color: #0000BB">br</span><span style="color: #007700">&gt;&lt;</span><span style="color: #0000BB">br</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">div&nbsp;id</span><span style="color: #007700">=</span><span style="color: #DD0000">"c1"</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">input&nbsp;type</span><span style="color: #007700">=</span><span style="color: #DD0000">"button"&nbsp;</span><span style="color: #0000BB">id</span><span style="color: #007700">=</span><span style="color: #DD0000">"1"&nbsp;</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"1"&nbsp;</span><span style="color: #0000BB">onclick</span><span style="color: #007700">=</span><span style="color: #DD0000">"imprm(0);"&nbsp;</span><span style="color: #007700">/&gt;<br />&lt;</span><span style="color: #0000BB">input&nbsp;type</span><span style="color: #007700">=</span><span style="color: #DD0000">"button"&nbsp;</span><span style="color: #0000BB">id</span><span style="color: #007700">=</span><span style="color: #DD0000">"2"&nbsp;</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"2"&nbsp;</span><span style="color: #0000BB">onclick</span><span style="color: #007700">=</span><span style="color: #DD0000">"imprm(1);"&nbsp;</span><span style="color: #007700">/&gt;<br />&lt;</span><span style="color: #0000BB">input&nbsp;type</span><span style="color: #007700">=</span><span style="color: #DD0000">"button"&nbsp;</span><span style="color: #0000BB">id</span><span style="color: #007700">=</span><span style="color: #DD0000">"3"&nbsp;</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"3"&nbsp;</span><span style="color: #0000BB">onclick</span><span style="color: #007700">=</span><span style="color: #DD0000">"imprm(2);"&nbsp;</span><span style="color: #007700">/&gt;&lt;</span><span style="color: #0000BB">br</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">input&nbsp;type</span><span style="color: #007700">=</span><span style="color: #DD0000">"button"&nbsp;</span><span style="color: #0000BB">id</span><span style="color: #007700">=</span><span style="color: #DD0000">"4"&nbsp;</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"4"&nbsp;</span><span style="color: #0000BB">onclick</span><span style="color: #007700">=</span><span style="color: #DD0000">"imprm(3);"&nbsp;</span><span style="color: #007700">/&gt;<br />&lt;</span><span style="color: #0000BB">input&nbsp;type</span><span style="color: #007700">=</span><span style="color: #DD0000">"button"&nbsp;</span><span style="color: #0000BB">id</span><span style="color: #007700">=</span><span style="color: #DD0000">"5"&nbsp;</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"5"&nbsp;</span><span style="color: #0000BB">onclick</span><span style="color: #007700">=</span><span style="color: #DD0000">"imprm(4);"&nbsp;</span><span style="color: #007700">/&gt;<br />&lt;</span><span style="color: #0000BB">input&nbsp;type</span><span style="color: #007700">=</span><span style="color: #DD0000">"button"&nbsp;</span><span style="color: #0000BB">id</span><span style="color: #007700">=</span><span style="color: #DD0000">"6"&nbsp;</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"6"&nbsp;</span><span style="color: #0000BB">onclick</span><span style="color: #007700">=</span><span style="color: #DD0000">"imprm(5);"&nbsp;</span><span style="color: #007700">/&gt;&lt;</span><span style="color: #0000BB">br</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">input&nbsp;type</span><span style="color: #007700">=</span><span style="color: #DD0000">"button"&nbsp;</span><span style="color: #0000BB">id</span><span style="color: #007700">=</span><span style="color: #DD0000">"7"&nbsp;</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"7"&nbsp;</span><span style="color: #0000BB">onclick</span><span style="color: #007700">=</span><span style="color: #DD0000">"imprm(6);"&nbsp;</span><span style="color: #007700">/&gt;<br />&lt;</span><span style="color: #0000BB">input&nbsp;type</span><span style="color: #007700">=</span><span style="color: #DD0000">"button"&nbsp;</span><span style="color: #0000BB">id</span><span style="color: #007700">=</span><span style="color: #DD0000">"8"&nbsp;</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"8"&nbsp;</span><span style="color: #0000BB">onclick</span><span style="color: #007700">=</span><span style="color: #DD0000">"imprm(7);"&nbsp;</span><span style="color: #007700">/&gt;<br />&lt;</span><span style="color: #0000BB">input&nbsp;type</span><span style="color: #007700">=</span><span style="color: #DD0000">"button"&nbsp;</span><span style="color: #0000BB">id</span><span style="color: #007700">=</span><span style="color: #DD0000">"9"&nbsp;</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"9"&nbsp;</span><span style="color: #0000BB">onclick</span><span style="color: #007700">=</span><span style="color: #DD0000">"imprm(8);"&nbsp;</span><span style="color: #007700">/&gt;&lt;</span><span style="color: #0000BB">br</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">input&nbsp;type</span><span style="color: #007700">=</span><span style="color: #DD0000">"button"&nbsp;</span><span style="color: #0000BB">id</span><span style="color: #007700">=</span><span style="color: #DD0000">"10"&nbsp;</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"0"&nbsp;</span><span style="color: #0000BB">onclick</span><span style="color: #007700">=</span><span style="color: #DD0000">"imprm(9);"&nbsp;</span><span style="color: #007700">/&gt;<br />&lt;</span><span style="color: #0000BB">input&nbsp;type</span><span style="color: #007700">=</span><span style="color: #DD0000">"button"&nbsp;</span><span style="color: #0000BB">id</span><span style="color: #007700">=</span><span style="color: #DD0000">"eliminar_caracter"&nbsp;</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"Borrar"&nbsp;</span><span style="color: #0000BB">onclick</span><span style="color: #007700">=</span><span style="color: #DD0000">"EliminarCaracter()"&nbsp;</span><span style="color: #0000BB">style</span><span style="color: #007700">=</span><span style="color: #DD0000">"width:58px;&nbsp;height:20px;&nbsp;text-align:center;&nbsp;font-size:10px;"&nbsp;</span><span style="color: #007700">/&gt;<br />&lt;</span><span style="color: #0000BB">br</span><span style="color: #007700">&gt;&lt;</span><span style="color: #0000BB">br</span><span style="color: #007700">&gt;&lt;</span><span style="color: #0000BB">input&nbsp;type</span><span style="color: #007700">=</span><span style="color: #DD0000">"submit"&nbsp;</span><span style="color: #0000BB">id</span><span style="color: #007700">=</span><span style="color: #DD0000">"60"&nbsp;</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"ENVIAR"&nbsp;</span><span style="color: #0000BB">style</span><span style="color: #007700">=</span><span style="color: #DD0000">"width:90px;&nbsp;height:20px;&nbsp;text-align:center;&nbsp;font-size:10px;"</span><span style="color: #007700">/&gt;&nbsp;<br />&lt;/</span><span style="color: #0000BB">div</span><span style="color: #007700">&gt;<br /><br />&lt;/</span><span style="color: #0000BB">form</span><span style="color: #007700">&gt;<br />&lt;/</span><span style="color: #0000BB">div</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">div&nbsp;id</span><span style="color: #007700">=</span><span style="color: #DD0000">"andres"</span><span style="color: #007700">&gt;<br />&lt;?<br /></span><span style="color: #0000BB">&#36;password&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">&#36;_POST</span><span style="color: #007700">[</span><span style="color: #DD0000">'pepe'</span><span style="color: #007700">];<br />if(!isset(</span><span style="color: #0000BB">&#36;password</span><span style="color: #007700">))&nbsp;{<br />echo&nbsp;</span><span style="color: #DD0000">""</span><span style="color: #007700">;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}<br />else<br />{<br />&nbsp;</span><span style="color: #0000BB"> include</span><span style="color: #007700">(</span><span style="color: #DD0000">"conex.php"</span><span style="color: #007700">);<br />&nbsp;</span><span style="color: #0000BB">&#36;cons&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"select&nbsp;*&nbsp;from&nbsp;usuarios&nbsp;where&nbsp;contraseña='</span><span style="color: #0000BB">&#36;password</span><span style="color: #DD0000">'"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">&#36;datos&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">mysql_query</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;cons</span><span style="color: #007700">,</span><span style="color: #0000BB">&#36;link</span><span style="color: #007700">);<br />if&nbsp;(</span><span style="color: #0000BB">&#36;row&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">mysql_fetch_array</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;datos</span><span style="color: #007700">,</span><span style="color: #0000BB">1</span><span style="color: #007700">))<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">?&gt;<br /></span>&lt;SCRIPT&nbsp;LANGUAGE="JavaScript"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.onload&nbsp;=&nbsp;function()&nbsp;{<br />&nbsp; &nbsp; alert("Enhorabuena&nbsp;&lt;?&nbsp;echo&nbsp;&#36;row["usuario"];&nbsp;?&gt;.&nbsp;Tu&nbsp;código&nbsp;es&nbsp;correcto");<br />};<br />&lt;/SCRIPT&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br />&lt;form&nbsp;name='acceso'&nbsp;action='http://192.168.1.254:8080/mensaje'&nbsp;method='GET'&gt;<br />&lt;input&nbsp;type='hidden'&nbsp;name='f'&nbsp;value=&nbsp;'&lt;?&nbsp;echo&nbsp;&#36;row["usuario"];&nbsp;?&gt;'&gt;<br />&lt;/form&gt;<br />&lt;SCRIPT&nbsp;LANGUAGE="JavaScript"&gt;window.setTimeout(function()&nbsp;{<br />&nbsp; document.acceso.submit();<br />});&lt;/SCRIPT&gt;<br />&lt;?<br />}<br />else<br />{<br />?&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;SCRIPT&nbsp;LANGUAGE="JavaScript"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.onload&nbsp;=&nbsp;function()&nbsp;{<br />&nbsp; &nbsp; alert("El&nbsp;código&nbsp;de&nbsp;acceso&nbsp;no&nbsp;es&nbsp;correcto.");<br />};<br />&lt;/SCRIPT&gt;<br />&lt;form&nbsp;name='acceso'&nbsp;action='http://192.168.1.254:8080/mensaje'&nbsp;method='GET'&gt;<br />&lt;input&nbsp;type='hidden'&nbsp;name='f'&nbsp;value='aaa'&gt;<br />&lt;/form&gt;<br />&lt;SCRIPT&nbsp;LANGUAGE="JavaScript"&gt;window.setTimeout(function()&nbsp;{<br />&nbsp; document.acceso.submit();<br />});&lt;/SCRIPT&gt;<br />&lt;?<br />}<br />}<br />?&gt;<br />&nbsp;&lt;/div&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;&nbsp;<br /></code></div></div></div><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Comentario del código</span>:<br />
<ul class="mycode_list"><li>Se crea un teclado numérico para introducir el código de acceso.<br />
</li>
<li>Compara ese código en la base de datos.<br />
</li>
<li>Si existe ese código envía a la placa Arduino el usuario asociado a ese código, mostrando en un alert "Enhorabuena (usuario) tu código es correcto"<br />
</li>
<li>Si no existe ese código envía a la placa Arduino la cadena aaa , mostrando en un alert "El código de acceso no es correcto".<br />
</li>
</ul>
<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/teclado.png" loading="lazy"  width="400" height="400" alt="[Imagen: teclado.png]" class="mycode_img img-responsive" /></div>
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #3333ff;" class="mycode_color">Código pagina conex.php</span></span>:<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Código PHP:</div><div class="body"><div dir="ltr"><code>&lt;?<br />&nbsp;&#36;link&nbsp;=&nbsp;mysql_connect("localhost"&nbsp;,"usuario","contraseña")&nbsp;or&nbsp;die("no&nbsp;se&nbsp;da&nbsp;conectado");<br />mysql_select_db("acceso",&#36;link)&nbsp;or&nbsp;die("no&nbsp;se&nbsp;da&nbsp;seleccionado");<br />?&gt;</code></div></div></div><br />
Este código no necesita comentario.<br />
<br />
<br />
<br />
En relación a la <span style="font-weight: bold;" class="mycode_b">base de datos</span>... se deberá crear una con el nombre "acceso", con una única tabla llamada "usuarios" compuesta por tres campos "id" "usuario" y "contraseña".<br />
<br />
<br />
Bueno ya está... espero que le sirva a alguien.... Saludos]]></description>
			<content:encoded><![CDATA[Saludos....<br />
<br />
Os voy a mostrar como hacer un control de acceso vía Wifi utilizando la placa arduino, mas un poco de código php, javascript y base de datos Mysql. De esta manera podemos loguearnos desde cualquier dispositivo que este conectado a internet, un pc, una tablet, un teléfono, etc, sin necesidad de que nuestra placa Arduino este conectada por cable a nuestro PC.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Materiales utilizados</span>:<br />
<ul class="mycode_list"><li>Una Placa Arduino (yo he utilizado la nano)<br />
</li>
<li>Un módulo wifi HLK-RM04<br />
</li>
<li>12 cables dupont<br />
</li>
<li>Una pantalla lcd I2C 16X2<br />
</li>
<li>Un módulo led rgb<br />
</li>
</ul>
<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/WIFI-HLK-RM04.jpg" loading="lazy"  alt="[Imagen: WIFI-HLK-RM04.jpg]" class="mycode_img img-responsive" /></div>
<br />
<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/lcd_i2c.jpg" loading="lazy"  width="400" height="400" alt="[Imagen: lcd_i2c.jpg]" class="mycode_img img-responsive" /></div>
<br />
<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/led_rgb.jpg" loading="lazy"  alt="[Imagen: led_rgb.jpg]" class="mycode_img img-responsive" /></div>
<br />
<br />
<br />
<span style="color: #333333;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">Conexiones:</span></span><br />
<ul class="mycode_list"><li>Pin SCL del lcd --&gt; Pin A5 de Arduino<br />
</li>
<li>Pin SDA del lcd --&gt; Pin A4 de Arduino<br />
</li>
<li>Pin VCC del lcd --&gt; Pin 5 voltios de Arduino<br />
</li>
<li>Pin GND del lcd --&gt; Pin GND de Arduino<br />
</li>
<li>Pin V-G del led --&gt;Pin GND de Arduino<br />
</li>
<li>Pin R del led --&gt; Pin 11 de Arduino<br />
</li>
<li>Pin G del led --&gt; Pin 10 de arduino<br />
</li>
<li>Pin B del led --&gt; Pin 9 de Arduino<br />
</li>
<li>Pin Rx del módulo HLK-RM04 --&gt; Pin Tx de Arduino<br />
</li>
<li>Pin Tx del módulo HLK-RM04 --&gt; Pin Rx de Arduino<br />
</li>
<li>Pin GND del módulo HLK-RM04 --&gt; Pin GND de Arduino<br />
</li>
<li>Pin 5v del módulo HLK-RM04 --&gt; Pin 5v de Arduino<br />
</li>
</ul>
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Software necesario</span>:<br />
<ul class="mycode_list"><li>El código para Arduino (se mostrará mas abajo).<br />
</li>
<li>Una página php para introducir el código y verificarlo (se mostrará mas abajo).<br />
</li>
<li>Una página php para conectar con la base de datos donde están los usuarios y los códigos de acceso (se mostrará mas abajo).<br />
</li>
<li>Una base de datos Mysql donde se guardarán los usuarios y los códigos de acceso (se explicará mas abajo).<br />
</li>
</ul>
<br />
<br />
El sistema lo que hace es mostrar en la pantalla del lcd la frase "ESPERANDO DATOS" mientras el led está en color azul parpadeante.<br />
Cuando ponemos desde la página web el código, si éste es correcto la pantalla lcd muestra "Saludos + nombre de usuario" y el led se pone de color verde. Si el código es incorrecto, no existe, la pantalla muestra "Sin acceso. Código erroneo" y muestra el led de color rojo. A los 5 segundos se reseatea y vuelve a mostrar "ESPERANDO DATOS" con led azul parpadeante.<br />
<br />
Cabe decir que se puede ampliar para que, por ejemplo, accione un relé para abrir una puerta o lo que se os ocurra.<br />
<br />
<br />
<br />
<span style="color: #3333ff;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">Código para la placa arduino</span></span>:<br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>#include &lt;Wire.h&gt; <br />
#include &lt;LiquidCrystal_I2C.h&gt;<br />
<br />
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);<br />
int redPin = 11;<br />
int greenPin = 10;<br />
int bluePin = 9;<br />
void setup()  <br />
{<br />
  Serial.begin(57600);  <br />
 pinMode(redPin, OUTPUT);<br />
  pinMode(greenPin, OUTPUT);<br />
  pinMode(bluePin, OUTPUT); <br />
  lcd.begin(16,2);   <br />
<br />
  lcd.backlight(); <br />
  lcd.setCursor(4,0);<br />
  lcd.print("ESPERANDO");<br />
  lcd.setCursor(6,1);<br />
  lcd.print("DATOS");  <br />
while(!Serial.available()) {<br />
  digitalWrite(bluePin, HIGH);<br />
  delay(500);<br />
  digitalWrite(bluePin, LOW);<br />
  delay(500); <br />
}<br />
}<br />
String f = "";<br />
void loop() <br />
  {<br />
boolean has_request = false;<br />
  String in = "";<br />
    if (Serial.available()) {<br />
 in = "";<br />
    while (true) {  <br />
       while (Serial.available() == false) {}<br />
      in += (char)(Serial.read());<br />
      if (in.endsWith("&#92;r&#92;n")) {<br />
        has_request = true;  break;<br />
      }<br />
    }   <br />
  }<br />
  if (has_request) {<br />
    char i1 = in.indexOf("GET /mensaje?f="), i2;<br />
    if (i1 != -1) {<br />
      i2 = in.indexOf(" ", i1+15);<br />
      f = in.substring(i1+15, i2);<br />
    }     <br />
     if (f == "aaa") <br />
        {<br />
          lcd.clear();<br />
           lcd.setCursor(3,0);<br />
     lcd.print("SIN ACCESO"); <br />
     lcd.setCursor(1,1); <br />
        lcd.write("CODIGO ERRONEO");<br />
        digitalWrite(bluePin, LOW);<br />
  digitalWrite(greenPin, LOW); <br />
  digitalWrite(redPin, HIGH);<br />
  pagina();<br />
<br />
        }<br />
        else<br />
        {<br />
           lcd.clear(); <br />
      lcd.setCursor(4,0);<br />
     lcd.print("SALUDOS"); <br />
     lcd.setCursor(1,1); <br />
     f.replace("+", " ");<br />
        lcd.print(f);<br />
        digitalWrite(bluePin, LOW);<br />
  digitalWrite(greenPin, HIGH); <br />
  digitalWrite(redPin, LOW); <br />
   pagina();<br />
        }<br />
   <br />
     has_request = false;  <br />
    <br />
    }<br />
      delay(5000);<br />
    digitalWrite(greenPin, LOW); <br />
  digitalWrite(redPin, LOW);  <br />
  software_Reset() ; <br />
  }<br />
  void pagina()<br />
  {<br />
 <br />
    Serial.println("HTTP/1.1 200 OK");<br />
    Serial.println("Content-Type: text/html");<br />
<br />
    String sr = "&lt;!DOCTYPE HTML&gt;&#92;n";<br />
    sr += "&lt;html&gt;&#92;n";<br />
    sr += "&lt;head&gt;&#92;n";<br />
    sr += "&lt;meta http-equiv='Refresh' content='0;url=http://192.168.1.11/arduino/wifi/acceso/index.php'&gt;&#92;n";<br />
    sr += "&lt;/head&gt;&#92;n";<br />
    sr += "&lt;body&gt;&#92;n";&nbsp;&nbsp;&nbsp;&nbsp;<br />
    sr += "&lt;/body&gt;";  <br />
    sr += "&lt;/html&gt;";<br />
    Serial.print("Content-Length: ");<br />
    Serial.print(sr.length());<br />
    Serial.print("&#92;r&#92;n&#92;r&#92;n");<br />
    Serial.print(sr);   <br />
  }<br />
 void software_Reset() <br />
{<br />
asm volatile ("  jmp 0");  <br />
}  </code></div></div><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Comentario del código</span>:<br />
<ul class="mycode_list"><li>Incluimos las librerías necesarias para que todo funcione correctamente.<br />
</li>
<li>Indicamos todos los pines necesarios.<br />
</li>
<li>Iniciamos la comunicación a 57600 baudios.<br />
</li>
<li>Apagamos todos los colores del led y encendemos el lcd.<br />
</li>
<li>Le decimos al lcd que muestre en pantalla "ESPERANDO DATOS" y que el led parpadee en color azul cada medio segundo.<br />
</li>
<li>Si se inicia la comunicación serial y ésta envía "aaa" (previamente enviada por la página php) el lcd imprime  "Sin acceso. Código erroneo" y el led se pone en rojo fijo.<br />
</li>
<li>Si la página php no envía ese carácter y envía otra cadena, ésta sera el nombre de usuario, que previamente ha sido confirmada desde la base de datos al meter el código, entonces la pantalla de lcd mostrará "Saludos (nombre del usuario)" y el led se pondrá en color verde fijo.<br />
</li>
<li>Una vez recibida la información la placa Arduino mando unos comandos (página web) para que se vuelva a mostrar el teclado (mas abajo imagen).<br />
</li>
<li>Tanto como si el código es bueno o erróneo, a los 5 segundos se resetea y vuelve a mostrar en pantalla  "ESPERANDO DATOS" y el led de color azul parpadeante.<br />
</li>
</ul>
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #3333ff;" class="mycode_color">Código pagina principal php</span></span>:<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Código PHP:</div><div class="body"><div dir="ltr"><code><span style="color: #007700">&lt;</span><span style="color: #0000BB">html</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">head</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">title</span><span style="color: #007700">&gt;</span><span style="color: #0000BB">teclado&nbsp;en&nbsp;pantalla</span><span style="color: #007700">&lt;/</span><span style="color: #0000BB">title</span><span style="color: #007700">&gt;<br />&lt;!</span><span style="color: #0000BB">DOCTYPE&nbsp;html&nbsp;</span><span style="color: #007700">PUBLIC&nbsp;</span><span style="color: #DD0000">"-//W3C//DTD&nbsp;HTML&nbsp;4.01&nbsp;Transitional//EN"</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">meta&nbsp;http</span><span style="color: #007700">-</span><span style="color: #0000BB">equiv</span><span style="color: #007700">=</span><span style="color: #DD0000">"Content-Type"&nbsp;</span><span style="color: #0000BB">content</span><span style="color: #007700">=</span><span style="color: #DD0000">"text/html;&nbsp;charset=iso-8859-1"&nbsp;</span><span style="color: #007700">/&gt;<br />&lt;</span><span style="color: #0000BB">META&nbsp;name</span><span style="color: #007700">=</span><span style="color: #DD0000">"robots"&nbsp;</span><span style="color: #0000BB">content</span><span style="color: #007700">=</span><span style="color: #DD0000">"NOINDEX,NOFOLLOW"</span><span style="color: #007700">&gt;&nbsp;<br />&lt;</span><span style="color: #0000BB">script&nbsp;language</span><span style="color: #007700">=</span><span style="color: #DD0000">"JavaScript"&nbsp;</span><span style="color: #0000BB">type</span><span style="color: #007700">=</span><span style="color: #DD0000">"text/javascript"</span><span style="color: #007700">&gt;<br /></span><span style="color: #FF8000">//&nbsp;Comprueba&nbsp;Navegador&nbsp;y&nbsp;Plataforma&nbsp;del&nbsp;pc<br /></span><span style="color: #007700">var&nbsp;</span><span style="color: #0000BB">clientPC&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">navigator</span><span style="color: #007700">.</span><span style="color: #0000BB">userAgent</span><span style="color: #007700">.</span><span style="color: #0000BB">toLowerCase</span><span style="color: #007700">();&nbsp;</span><span style="color: #FF8000">//&nbsp;Coge&nbsp;info&nbsp;cliente<br /></span><span style="color: #007700">var&nbsp;</span><span style="color: #0000BB">clientVer&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">parseInt</span><span style="color: #007700">(</span><span style="color: #0000BB">navigator</span><span style="color: #007700">.</span><span style="color: #0000BB">appVersion</span><span style="color: #007700">);&nbsp;</span><span style="color: #FF8000">//&nbsp;Coge&nbsp;versiÃ³n&nbsp;navegador<br />&nbsp;<br /></span><span style="color: #007700">var&nbsp;</span><span style="color: #0000BB">is_ie&nbsp;</span><span style="color: #007700">=&nbsp;((</span><span style="color: #0000BB">clientPC</span><span style="color: #007700">.</span><span style="color: #0000BB">indexOf</span><span style="color: #007700">(</span><span style="color: #DD0000">"msie"</span><span style="color: #007700">)&nbsp;!=&nbsp;-</span><span style="color: #0000BB">1</span><span style="color: #007700">)&nbsp;&amp;&amp;&nbsp;(</span><span style="color: #0000BB">clientPC</span><span style="color: #007700">.</span><span style="color: #0000BB">indexOf</span><span style="color: #007700">(</span><span style="color: #DD0000">"opera"</span><span style="color: #007700">)&nbsp;==&nbsp;-</span><span style="color: #0000BB">1</span><span style="color: #007700">));<br />var&nbsp;</span><span style="color: #0000BB">is_nav&nbsp;</span><span style="color: #007700">=&nbsp;((</span><span style="color: #0000BB">clientPC</span><span style="color: #007700">.</span><span style="color: #0000BB">indexOf</span><span style="color: #007700">(</span><span style="color: #DD0000">'mozilla'</span><span style="color: #007700">)!=-</span><span style="color: #0000BB">1</span><span style="color: #007700">)&nbsp;&amp;&amp;&nbsp;(</span><span style="color: #0000BB">clientPC</span><span style="color: #007700">.</span><span style="color: #0000BB">indexOf</span><span style="color: #007700">(</span><span style="color: #DD0000">'spoofer'</span><span style="color: #007700">)==-</span><span style="color: #0000BB">1</span><span style="color: #007700">)<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #007700">&amp;&amp;&nbsp;(</span><span style="color: #0000BB">clientPC</span><span style="color: #007700">.</span><span style="color: #0000BB">indexOf</span><span style="color: #007700">(</span><span style="color: #DD0000">'compatible'</span><span style="color: #007700">)&nbsp;==&nbsp;-</span><span style="color: #0000BB">1</span><span style="color: #007700">)&nbsp;&amp;&amp;&nbsp;(</span><span style="color: #0000BB">clientPC</span><span style="color: #007700">.</span><span style="color: #0000BB">indexOf</span><span style="color: #007700">(</span><span style="color: #DD0000">'opera'</span><span style="color: #007700">)==-</span><span style="color: #0000BB">1</span><span style="color: #007700">)<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="color: #007700">&amp;&amp;&nbsp;(</span><span style="color: #0000BB">clientPC</span><span style="color: #007700">.</span><span style="color: #0000BB">indexOf</span><span style="color: #007700">(</span><span style="color: #DD0000">'webtv'</span><span style="color: #007700">)==-</span><span style="color: #0000BB">1</span><span style="color: #007700">)&nbsp;&amp;&amp;&nbsp;(</span><span style="color: #0000BB">clientPC</span><span style="color: #007700">.</span><span style="color: #0000BB">indexOf</span><span style="color: #007700">(</span><span style="color: #DD0000">'hotjava'</span><span style="color: #007700">)==-</span><span style="color: #0000BB">1</span><span style="color: #007700">));<br />var&nbsp;</span><span style="color: #0000BB">is_moz&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;<br />&nbsp;<br />var&nbsp;</span><span style="color: #0000BB">is_win&nbsp;</span><span style="color: #007700">=&nbsp;((</span><span style="color: #0000BB">clientPC</span><span style="color: #007700">.</span><span style="color: #0000BB">indexOf</span><span style="color: #007700">(</span><span style="color: #DD0000">"win"</span><span style="color: #007700">)!=-</span><span style="color: #0000BB">1</span><span style="color: #007700">)&nbsp;||&nbsp;(</span><span style="color: #0000BB">clientPC</span><span style="color: #007700">.</span><span style="color: #0000BB">indexOf</span><span style="color: #007700">(</span><span style="color: #DD0000">"16bit"</span><span style="color: #007700">)&nbsp;!=&nbsp;-</span><span style="color: #0000BB">1</span><span style="color: #007700">));<br />var&nbsp;</span><span style="color: #0000BB">is_mac&nbsp;</span><span style="color: #007700">=&nbsp;(</span><span style="color: #0000BB">clientPC</span><span style="color: #007700">.</span><span style="color: #0000BB">indexOf</span><span style="color: #007700">(</span><span style="color: #DD0000">"mac"</span><span style="color: #007700">)!=-</span><span style="color: #0000BB">1</span><span style="color: #007700">);<br />&nbsp;<br />function&nbsp;</span><span style="color: #0000BB">imprm</span><span style="color: #007700">(</span><span style="color: #0000BB">bot</span><span style="color: #007700">)&nbsp;{<br />var&nbsp;</span><span style="color: #0000BB">txtarea&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">getElementById</span><span style="color: #007700">(</span><span style="color: #DD0000">'ta'</span><span style="color: #007700">);<br />var&nbsp;</span><span style="color: #0000BB">tecla&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;Array(</span><span style="color: #DD0000">'1'</span><span style="color: #007700">,</span><span style="color: #DD0000">'2'</span><span style="color: #007700">,</span><span style="color: #DD0000">'3'</span><span style="color: #007700">,</span><span style="color: #DD0000">'4'</span><span style="color: #007700">,</span><span style="color: #DD0000">'5'</span><span style="color: #007700">,</span><span style="color: #DD0000">'6'</span><span style="color: #007700">,</span><span style="color: #DD0000">'7'</span><span style="color: #007700">,</span><span style="color: #DD0000">'8'</span><span style="color: #007700">,</span><span style="color: #DD0000">'9'</span><span style="color: #007700">,</span><span style="color: #DD0000">'0'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">value</span><span style="color: #007700">+=</span><span style="color: #0000BB">tecla</span><span style="color: #007700">[</span><span style="color: #0000BB">bot</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">focus</span><span style="color: #007700">();<br />return;<br />}<br />&nbsp;<br />function&nbsp;</span><span style="color: #0000BB">imprM</span><span style="color: #007700">(</span><span style="color: #0000BB">bot</span><span style="color: #007700">)&nbsp;{<br />var&nbsp;</span><span style="color: #0000BB">txtarea&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">getElementById</span><span style="color: #007700">(</span><span style="color: #DD0000">'ta'</span><span style="color: #007700">);<br />var&nbsp;</span><span style="color: #0000BB">teclaM&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;Array<br /></span><span style="color: #0000BB">txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">value</span><span style="color: #007700">+=</span><span style="color: #0000BB">teclaM</span><span style="color: #007700">[</span><span style="color: #0000BB">bot</span><span style="color: #007700">];<br /></span><span style="color: #0000BB">txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">focus</span><span style="color: #007700">();<br />return;<br />}<br />&nbsp;<br />&nbsp;<br />var&nbsp;</span><span style="color: #0000BB">capa1<br /></span><span style="color: #007700">var&nbsp;</span><span style="color: #0000BB">capa2<br /></span><span style="color: #007700">var&nbsp;</span><span style="color: #0000BB">ns4&nbsp;</span><span style="color: #007700">=&nbsp;(</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">layers</span><span style="color: #007700">)?&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">:</span><span style="color: #0000BB">false<br /></span><span style="color: #007700">var&nbsp;</span><span style="color: #0000BB">ie4&nbsp;</span><span style="color: #007700">=&nbsp;(</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">all</span><span style="color: #007700">)?&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">:</span><span style="color: #0000BB">false<br /></span><span style="color: #007700">var&nbsp;</span><span style="color: #0000BB">ns6&nbsp;</span><span style="color: #007700">=&nbsp;(</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">getElementById</span><span style="color: #007700">)?&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">:</span><span style="color: #0000BB">false<br />&nbsp;<br /></span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">teclado</span><span style="color: #007700">()&nbsp;{<br />&nbsp;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">if&nbsp;(</span><span style="color: #0000BB">ns4</span><span style="color: #007700">)&nbsp;{<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp;capa1&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">c1<br />&nbsp; &nbsp; &nbsp;capa2&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">c2<br />&nbsp; </span><span style="color: #007700">}<br />&nbsp;if&nbsp;(</span><span style="color: #0000BB">ie4</span><span style="color: #007700">)&nbsp;{<br />&nbsp;</span><span style="color: #0000BB"> &nbsp;capa1&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">c1</span><span style="color: #007700">.</span><span style="color: #0000BB">style<br />&nbsp; &nbsp;capa2&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">c2</span><span style="color: #007700">.</span><span style="color: #0000BB">style<br />&nbsp;</span><span style="color: #007700">}<br />&nbsp;if&nbsp;(</span><span style="color: #0000BB">ns6</span><span style="color: #007700">)&nbsp;{<br />&nbsp;</span><span style="color: #0000BB"> &nbsp;capa1&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">getElementById</span><span style="color: #007700">(</span><span style="color: #DD0000">'c1'</span><span style="color: #007700">).</span><span style="color: #0000BB">style<br />&nbsp; &nbsp;capa2&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">getElementById</span><span style="color: #007700">(</span><span style="color: #DD0000">'c2'</span><span style="color: #007700">).</span><span style="color: #0000BB">style<br />&nbsp;</span><span style="color: #007700">}<br />}<br />&nbsp;<br />function&nbsp;</span><span style="color: #0000BB">muestra</span><span style="color: #007700">(</span><span style="color: #0000BB">obj</span><span style="color: #007700">)&nbsp;{<br />if&nbsp;(</span><span style="color: #0000BB">ns4</span><span style="color: #007700">)&nbsp;</span><span style="color: #0000BB">obj</span><span style="color: #007700">.</span><span style="color: #0000BB">visibility&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"show"<br /></span><span style="color: #007700">else&nbsp;if&nbsp;(</span><span style="color: #0000BB">ie4</span><span style="color: #007700">)&nbsp;</span><span style="color: #0000BB">obj</span><span style="color: #007700">.</span><span style="color: #0000BB">visibility&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"visible"<br /></span><span style="color: #007700">else&nbsp;if&nbsp;(</span><span style="color: #0000BB">ns6</span><span style="color: #007700">)&nbsp;</span><span style="color: #0000BB">obj</span><span style="color: #007700">.</span><span style="color: #0000BB">visibility&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"visible"<br /></span><span style="color: #007700">}<br />function&nbsp;</span><span style="color: #0000BB">oculta</span><span style="color: #007700">(</span><span style="color: #0000BB">obj</span><span style="color: #007700">)&nbsp;{<br />if&nbsp;(</span><span style="color: #0000BB">ns4</span><span style="color: #007700">)&nbsp;</span><span style="color: #0000BB">obj</span><span style="color: #007700">.</span><span style="color: #0000BB">visibility&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"hide"<br /></span><span style="color: #007700">else&nbsp;if&nbsp;(</span><span style="color: #0000BB">ie4</span><span style="color: #007700">)&nbsp;</span><span style="color: #0000BB">obj</span><span style="color: #007700">.</span><span style="color: #0000BB">visibility&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"hidden"<br /></span><span style="color: #007700">else&nbsp;if&nbsp;(</span><span style="color: #0000BB">ns6</span><span style="color: #007700">)&nbsp;</span><span style="color: #0000BB">obj</span><span style="color: #007700">.</span><span style="color: #0000BB">visibility&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"hidden"<br /></span><span style="color: #007700">}<br />&nbsp;<br />&nbsp;<br />function&nbsp;</span><span style="color: #0000BB">borrar</span><span style="color: #007700">()&nbsp;{<br />var&nbsp;</span><span style="color: #0000BB">txtarea&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">getElementById</span><span style="color: #007700">(</span><span style="color: #DD0000">'ta'</span><span style="color: #007700">);<br />if&nbsp;((</span><span style="color: #0000BB">clientVer&nbsp;</span><span style="color: #007700">&gt;=&nbsp;</span><span style="color: #0000BB">4</span><span style="color: #007700">)&nbsp;&amp;&amp;&nbsp;</span><span style="color: #0000BB">is_ie&nbsp;</span><span style="color: #007700">&amp;&amp;&nbsp;</span><span style="color: #0000BB">is_win</span><span style="color: #007700">)&nbsp;{<br />var&nbsp;</span><span style="color: #0000BB">txtSeleccion&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">selection</span><span style="color: #007700">.</span><span style="color: #0000BB">createRange</span><span style="color: #007700">().</span><span style="color: #0000BB">text</span><span style="color: #007700">;<br />&nbsp;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; if&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">selection</span><span style="color: #007700">)&nbsp;{<br />&nbsp;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; if&nbsp;</span><span style="color: #007700">(!</span><span style="color: #0000BB">txtSeleccion</span><span style="color: #007700">)&nbsp;{<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">focus</span><span style="color: #007700">();<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; var&nbsp;Sel&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">selection</span><span style="color: #007700">.</span><span style="color: #0000BB">createRange</span><span style="color: #007700">();<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; Sel</span><span style="color: #007700">.</span><span style="color: #0000BB">moveStart&nbsp;</span><span style="color: #007700">(</span><span style="color: #DD0000">'character'</span><span style="color: #007700">,&nbsp;-</span><span style="color: #0000BB">txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">value</span><span style="color: #007700">.</span><span style="color: #0000BB">length</span><span style="color: #007700">);<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; curPos&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">Sel</span><span style="color: #007700">.</span><span style="color: #0000BB">text</span><span style="color: #007700">.</span><span style="color: #0000BB">length</span><span style="color: #007700">;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #0000BB">txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">value</span><span style="color: #007700">.</span><span style="color: #0000BB">substr</span><span style="color: #007700">(</span><span style="color: #0000BB">0</span><span style="color: #007700">,</span><span style="color: #0000BB">txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">value</span><span style="color: #007700">.</span><span style="color: #0000BB">length</span><span style="color: #007700">-</span><span style="color: #0000BB">1</span><span style="color: #007700">);<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; return</span><span style="color: #007700">(</span><span style="color: #0000BB">curPos</span><span style="color: #007700">);<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; </span><span style="color: #007700">}<br />&nbsp;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">focus</span><span style="color: #007700">();<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; var&nbsp;Sel&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">selection</span><span style="color: #007700">.</span><span style="color: #0000BB">createRange</span><span style="color: #007700">();<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; document</span><span style="color: #007700">.</span><span style="color: #0000BB">selection</span><span style="color: #007700">.</span><span style="color: #0000BB">createRange</span><span style="color: #007700">().</span><span style="color: #0000BB">text&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">""</span><span style="color: #007700">;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; Sel</span><span style="color: #007700">.</span><span style="color: #0000BB">moveStart&nbsp;</span><span style="color: #007700">(</span><span style="color: #DD0000">'character'</span><span style="color: #007700">,&nbsp;-</span><span style="color: #0000BB">txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">value</span><span style="color: #007700">.</span><span style="color: #0000BB">length</span><span style="color: #007700">);<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; curPos&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">Sel</span><span style="color: #007700">.</span><span style="color: #0000BB">text</span><span style="color: #007700">.</span><span style="color: #0000BB">length</span><span style="color: #007700">;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; return</span><span style="color: #007700">(</span><span style="color: #0000BB">curPos</span><span style="color: #007700">);<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">}<br />}<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />&nbsp;<br />else&nbsp;if&nbsp;(</span><span style="color: #0000BB">txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">selectionEnd&nbsp;</span><span style="color: #007700">&amp;&amp;&nbsp;(</span><span style="color: #0000BB">txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">selectionEnd&nbsp;</span><span style="color: #007700">-&nbsp;</span><span style="color: #0000BB">txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">selectionStart&nbsp;</span><span style="color: #007700">&gt;&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">))<br />&nbsp;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">{<br />&nbsp;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; var&nbsp;selLargo&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">textLength</span><span style="color: #007700">;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; var&nbsp;selEmpz&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">selectionStart</span><span style="color: #007700">;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; var&nbsp;selFin&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">selectionEnd</span><span style="color: #007700">;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; var&nbsp;s1&nbsp;</span><span style="color: #007700">=&nbsp;(</span><span style="color: #0000BB">txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">value</span><span style="color: #007700">).</span><span style="color: #0000BB">substring</span><span style="color: #007700">(</span><span style="color: #0000BB">0</span><span style="color: #007700">,</span><span style="color: #0000BB">selEmpz</span><span style="color: #007700">);<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; var&nbsp;s2&nbsp;</span><span style="color: #007700">=&nbsp;(</span><span style="color: #0000BB">txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">value</span><span style="color: #007700">).</span><span style="color: #0000BB">substring</span><span style="color: #007700">(</span><span style="color: #0000BB">selFin</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">selLargo</span><span style="color: #007700">);<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">value&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB"> s1&nbsp;</span><span style="color: #007700">+&nbsp;</span><span style="color: #0000BB"> s2</span><span style="color: #007700">;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; return</span><span style="color: #007700">(</span><span style="color: #0000BB">selEmpz</span><span style="color: #007700">);&nbsp;</span><span style="color: #0000BB"> &nbsp; <br />&nbsp;<br /></span><span style="color: #007700">}<br />else<br />{<br />&nbsp;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; var&nbsp;selLargo&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">textLength</span><span style="color: #007700">;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">value&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">value</span><span style="color: #007700">.</span><span style="color: #0000BB">substr</span><span style="color: #007700">(</span><span style="color: #0000BB">0</span><span style="color: #007700">,</span><span style="color: #0000BB">txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">value</span><span style="color: #007700">.</span><span style="color: #0000BB">length</span><span style="color: #007700">-</span><span style="color: #0000BB">1</span><span style="color: #007700">);<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; var&nbsp;Cursor&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">txtarea</span><span style="color: #007700">.</span><span style="color: #0000BB">textLength</span><span style="color: #007700">;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; return</span><span style="color: #007700">(</span><span style="color: #0000BB">Cursor</span><span style="color: #007700">);&nbsp;<br />&nbsp;<br />}<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; almznaCursor</span><span style="color: #007700">(</span><span style="color: #0000BB">txtarea</span><span style="color: #007700">);<br />}<br />&nbsp;<br />function&nbsp;</span><span style="color: #0000BB">almznaCursor</span><span style="color: #007700">(</span><span style="color: #0000BB">textEl</span><span style="color: #007700">)&nbsp;{<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; if&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">textEl</span><span style="color: #007700">.</span><span style="color: #0000BB">createTextRange</span><span style="color: #007700">)&nbsp;</span><span style="color: #0000BB">textEl</span><span style="color: #007700">.</span><span style="color: #0000BB">caretPos&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">selection</span><span style="color: #007700">.</span><span style="color: #0000BB">createRange</span><span style="color: #007700">().</span><span style="color: #0000BB">duplicate</span><span style="color: #007700">();<br />}<br />&nbsp;<br />&nbsp;<br />function&nbsp;</span><span style="color: #0000BB">PosicionCursor</span><span style="color: #007700">(</span><span style="color: #0000BB">pos</span><span style="color: #007700">)&nbsp;{<br />var&nbsp;</span><span style="color: #0000BB">txtarea&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">document</span><span style="color: #007700">.</span><span style="color: #0000BB">getElementById</span><span style="color: #007700">(</span><span style="color: #DD0000">'ta'</span><span style="color: #007700">);<br />&nbsp;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #FF8000">//Firefox<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; if&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">txtarea&nbsp;</span><span style="color: #007700">.</span><span style="color: #0000BB">setSelectionRange</span><span style="color: #007700">)&nbsp;{<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; txtarea&nbsp;</span><span style="color: #007700">.</span><span style="color: #0000BB">focus</span><span style="color: #007700">();<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; txtarea&nbsp;</span><span style="color: #007700">.</span><span style="color: #0000BB">setSelectionRange</span><span style="color: #007700">(</span><span style="color: #0000BB">pos</span><span style="color: #007700">,</span><span style="color: #0000BB">pos</span><span style="color: #007700">);<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">}<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; else&nbsp;</span><span style="color: #007700">if&nbsp;(</span><span style="color: #0000BB">txtarea&nbsp;</span><span style="color: #007700">.</span><span style="color: #0000BB">createTextRange</span><span style="color: #007700">)&nbsp;{<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; var&nbsp;rango&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">txtarea&nbsp;</span><span style="color: #007700">.</span><span style="color: #0000BB">createTextRange</span><span style="color: #007700">();<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; rango</span><span style="color: #007700">.</span><span style="color: #0000BB">collapse</span><span style="color: #007700">(</span><span style="color: #0000BB">true</span><span style="color: #007700">);<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; rango</span><span style="color: #007700">.</span><span style="color: #0000BB">moveEnd</span><span style="color: #007700">(</span><span style="color: #DD0000">'character'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">pos</span><span style="color: #007700">);<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; rango</span><span style="color: #007700">.</span><span style="color: #0000BB">moveStart</span><span style="color: #007700">(</span><span style="color: #DD0000">'character'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">pos</span><span style="color: #007700">);<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; &nbsp; &nbsp; rango</span><span style="color: #007700">.</span><span style="color: #0000BB">select</span><span style="color: #007700">();<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">}<br />}<br />&nbsp;<br />function&nbsp;</span><span style="color: #0000BB">EliminarCaracter</span><span style="color: #007700">()<br />{<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; PosicionCursor</span><span style="color: #007700">(</span><span style="color: #0000BB">borrar</span><span style="color: #007700">());<br />}<br />&nbsp;<br />&lt;/</span><span style="color: #0000BB">script</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">style&nbsp;type</span><span style="color: #007700">=</span><span style="color: #DD0000">"text/css"</span><span style="color: #007700">&gt;<br /></span><span style="color: #FF8000">#juan&nbsp;{<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; position</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">absolute</span><span style="color: #007700">;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; left</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">50</span><span style="color: #007700">%;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; top</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">50</span><span style="color: #007700">%;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; transform</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">translate</span><span style="color: #007700">(-</span><span style="color: #0000BB">50</span><span style="color: #007700">%,&nbsp;-</span><span style="color: #0000BB">50</span><span style="color: #007700">%);<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">-</span><span style="color: #0000BB">webkit</span><span style="color: #007700">-</span><span style="color: #0000BB">transform</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">translate</span><span style="color: #007700">(-</span><span style="color: #0000BB">50</span><span style="color: #007700">%,&nbsp;-</span><span style="color: #0000BB">50</span><span style="color: #007700">%);<br />}<br /></span><span style="color: #FF8000">#andres&nbsp;{<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; position</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">absolute</span><span style="color: #007700">;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; left</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">50</span><span style="color: #007700">%;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; top</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">70</span><span style="color: #007700">%;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; transform</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">translate</span><span style="color: #007700">(-</span><span style="color: #0000BB">50</span><span style="color: #007700">%,&nbsp;-</span><span style="color: #0000BB">70</span><span style="color: #007700">%);<br />&nbsp;</span><span style="color: #0000BB"> &nbsp; </span><span style="color: #007700">-</span><span style="color: #0000BB">webkit</span><span style="color: #007700">-</span><span style="color: #0000BB">transform</span><span style="color: #007700">:&nbsp;</span><span style="color: #0000BB">translate</span><span style="color: #007700">(-</span><span style="color: #0000BB">50</span><span style="color: #007700">%,&nbsp;-</span><span style="color: #0000BB">70</span><span style="color: #007700">%);<br />}<br />&lt;/</span><span style="color: #0000BB">style</span><span style="color: #007700">&gt;<br />&lt;/</span><span style="color: #0000BB">head</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">body&nbsp;onLoad</span><span style="color: #007700">=</span><span style="color: #DD0000">"teclado();"</span><span style="color: #007700">&gt;<br />&nbsp;&lt;</span><span style="color: #0000BB">div&nbsp;id</span><span style="color: #007700">=</span><span style="color: #DD0000">"juan"</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">form&nbsp;method</span><span style="color: #007700">=</span><span style="color: #DD0000">"POST"&nbsp;</span><span style="color: #0000BB">action</span><span style="color: #007700">=</span><span style="color: #DD0000">""</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">input&nbsp;type</span><span style="color: #007700">=</span><span style="color: #DD0000">"password"&nbsp;</span><span style="color: #0000BB">id</span><span style="color: #007700">=</span><span style="color: #DD0000">"ta"&nbsp;</span><span style="color: #0000BB">name</span><span style="color: #007700">=</span><span style="color: #DD0000">"pepe"&nbsp;</span><span style="color: #0000BB">size</span><span style="color: #007700">=</span><span style="color: #DD0000">"9"</span><span style="color: #007700">&gt;&lt;</span><span style="color: #0000BB">br</span><span style="color: #007700">&gt;&lt;</span><span style="color: #0000BB">br</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">div&nbsp;id</span><span style="color: #007700">=</span><span style="color: #DD0000">"c1"</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">input&nbsp;type</span><span style="color: #007700">=</span><span style="color: #DD0000">"button"&nbsp;</span><span style="color: #0000BB">id</span><span style="color: #007700">=</span><span style="color: #DD0000">"1"&nbsp;</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"1"&nbsp;</span><span style="color: #0000BB">onclick</span><span style="color: #007700">=</span><span style="color: #DD0000">"imprm(0);"&nbsp;</span><span style="color: #007700">/&gt;<br />&lt;</span><span style="color: #0000BB">input&nbsp;type</span><span style="color: #007700">=</span><span style="color: #DD0000">"button"&nbsp;</span><span style="color: #0000BB">id</span><span style="color: #007700">=</span><span style="color: #DD0000">"2"&nbsp;</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"2"&nbsp;</span><span style="color: #0000BB">onclick</span><span style="color: #007700">=</span><span style="color: #DD0000">"imprm(1);"&nbsp;</span><span style="color: #007700">/&gt;<br />&lt;</span><span style="color: #0000BB">input&nbsp;type</span><span style="color: #007700">=</span><span style="color: #DD0000">"button"&nbsp;</span><span style="color: #0000BB">id</span><span style="color: #007700">=</span><span style="color: #DD0000">"3"&nbsp;</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"3"&nbsp;</span><span style="color: #0000BB">onclick</span><span style="color: #007700">=</span><span style="color: #DD0000">"imprm(2);"&nbsp;</span><span style="color: #007700">/&gt;&lt;</span><span style="color: #0000BB">br</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">input&nbsp;type</span><span style="color: #007700">=</span><span style="color: #DD0000">"button"&nbsp;</span><span style="color: #0000BB">id</span><span style="color: #007700">=</span><span style="color: #DD0000">"4"&nbsp;</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"4"&nbsp;</span><span style="color: #0000BB">onclick</span><span style="color: #007700">=</span><span style="color: #DD0000">"imprm(3);"&nbsp;</span><span style="color: #007700">/&gt;<br />&lt;</span><span style="color: #0000BB">input&nbsp;type</span><span style="color: #007700">=</span><span style="color: #DD0000">"button"&nbsp;</span><span style="color: #0000BB">id</span><span style="color: #007700">=</span><span style="color: #DD0000">"5"&nbsp;</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"5"&nbsp;</span><span style="color: #0000BB">onclick</span><span style="color: #007700">=</span><span style="color: #DD0000">"imprm(4);"&nbsp;</span><span style="color: #007700">/&gt;<br />&lt;</span><span style="color: #0000BB">input&nbsp;type</span><span style="color: #007700">=</span><span style="color: #DD0000">"button"&nbsp;</span><span style="color: #0000BB">id</span><span style="color: #007700">=</span><span style="color: #DD0000">"6"&nbsp;</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"6"&nbsp;</span><span style="color: #0000BB">onclick</span><span style="color: #007700">=</span><span style="color: #DD0000">"imprm(5);"&nbsp;</span><span style="color: #007700">/&gt;&lt;</span><span style="color: #0000BB">br</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">input&nbsp;type</span><span style="color: #007700">=</span><span style="color: #DD0000">"button"&nbsp;</span><span style="color: #0000BB">id</span><span style="color: #007700">=</span><span style="color: #DD0000">"7"&nbsp;</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"7"&nbsp;</span><span style="color: #0000BB">onclick</span><span style="color: #007700">=</span><span style="color: #DD0000">"imprm(6);"&nbsp;</span><span style="color: #007700">/&gt;<br />&lt;</span><span style="color: #0000BB">input&nbsp;type</span><span style="color: #007700">=</span><span style="color: #DD0000">"button"&nbsp;</span><span style="color: #0000BB">id</span><span style="color: #007700">=</span><span style="color: #DD0000">"8"&nbsp;</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"8"&nbsp;</span><span style="color: #0000BB">onclick</span><span style="color: #007700">=</span><span style="color: #DD0000">"imprm(7);"&nbsp;</span><span style="color: #007700">/&gt;<br />&lt;</span><span style="color: #0000BB">input&nbsp;type</span><span style="color: #007700">=</span><span style="color: #DD0000">"button"&nbsp;</span><span style="color: #0000BB">id</span><span style="color: #007700">=</span><span style="color: #DD0000">"9"&nbsp;</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"9"&nbsp;</span><span style="color: #0000BB">onclick</span><span style="color: #007700">=</span><span style="color: #DD0000">"imprm(8);"&nbsp;</span><span style="color: #007700">/&gt;&lt;</span><span style="color: #0000BB">br</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">input&nbsp;type</span><span style="color: #007700">=</span><span style="color: #DD0000">"button"&nbsp;</span><span style="color: #0000BB">id</span><span style="color: #007700">=</span><span style="color: #DD0000">"10"&nbsp;</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"0"&nbsp;</span><span style="color: #0000BB">onclick</span><span style="color: #007700">=</span><span style="color: #DD0000">"imprm(9);"&nbsp;</span><span style="color: #007700">/&gt;<br />&lt;</span><span style="color: #0000BB">input&nbsp;type</span><span style="color: #007700">=</span><span style="color: #DD0000">"button"&nbsp;</span><span style="color: #0000BB">id</span><span style="color: #007700">=</span><span style="color: #DD0000">"eliminar_caracter"&nbsp;</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"Borrar"&nbsp;</span><span style="color: #0000BB">onclick</span><span style="color: #007700">=</span><span style="color: #DD0000">"EliminarCaracter()"&nbsp;</span><span style="color: #0000BB">style</span><span style="color: #007700">=</span><span style="color: #DD0000">"width:58px;&nbsp;height:20px;&nbsp;text-align:center;&nbsp;font-size:10px;"&nbsp;</span><span style="color: #007700">/&gt;<br />&lt;</span><span style="color: #0000BB">br</span><span style="color: #007700">&gt;&lt;</span><span style="color: #0000BB">br</span><span style="color: #007700">&gt;&lt;</span><span style="color: #0000BB">input&nbsp;type</span><span style="color: #007700">=</span><span style="color: #DD0000">"submit"&nbsp;</span><span style="color: #0000BB">id</span><span style="color: #007700">=</span><span style="color: #DD0000">"60"&nbsp;</span><span style="color: #0000BB">value</span><span style="color: #007700">=</span><span style="color: #DD0000">"ENVIAR"&nbsp;</span><span style="color: #0000BB">style</span><span style="color: #007700">=</span><span style="color: #DD0000">"width:90px;&nbsp;height:20px;&nbsp;text-align:center;&nbsp;font-size:10px;"</span><span style="color: #007700">/&gt;&nbsp;<br />&lt;/</span><span style="color: #0000BB">div</span><span style="color: #007700">&gt;<br /><br />&lt;/</span><span style="color: #0000BB">form</span><span style="color: #007700">&gt;<br />&lt;/</span><span style="color: #0000BB">div</span><span style="color: #007700">&gt;<br />&lt;</span><span style="color: #0000BB">div&nbsp;id</span><span style="color: #007700">=</span><span style="color: #DD0000">"andres"</span><span style="color: #007700">&gt;<br />&lt;?<br /></span><span style="color: #0000BB">&#36;password&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">&#36;_POST</span><span style="color: #007700">[</span><span style="color: #DD0000">'pepe'</span><span style="color: #007700">];<br />if(!isset(</span><span style="color: #0000BB">&#36;password</span><span style="color: #007700">))&nbsp;{<br />echo&nbsp;</span><span style="color: #DD0000">""</span><span style="color: #007700">;<br />&nbsp;</span><span style="color: #0000BB"> &nbsp;</span><span style="color: #007700">}<br />else<br />{<br />&nbsp;</span><span style="color: #0000BB"> include</span><span style="color: #007700">(</span><span style="color: #DD0000">"conex.php"</span><span style="color: #007700">);<br />&nbsp;</span><span style="color: #0000BB">&#36;cons&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">"select&nbsp;*&nbsp;from&nbsp;usuarios&nbsp;where&nbsp;contraseña='</span><span style="color: #0000BB">&#36;password</span><span style="color: #DD0000">'"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">&#36;datos&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">mysql_query</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;cons</span><span style="color: #007700">,</span><span style="color: #0000BB">&#36;link</span><span style="color: #007700">);<br />if&nbsp;(</span><span style="color: #0000BB">&#36;row&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">mysql_fetch_array</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;datos</span><span style="color: #007700">,</span><span style="color: #0000BB">1</span><span style="color: #007700">))<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">?&gt;<br /></span>&lt;SCRIPT&nbsp;LANGUAGE="JavaScript"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.onload&nbsp;=&nbsp;function()&nbsp;{<br />&nbsp; &nbsp; alert("Enhorabuena&nbsp;&lt;?&nbsp;echo&nbsp;&#36;row["usuario"];&nbsp;?&gt;.&nbsp;Tu&nbsp;código&nbsp;es&nbsp;correcto");<br />};<br />&lt;/SCRIPT&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br />&lt;form&nbsp;name='acceso'&nbsp;action='http://192.168.1.254:8080/mensaje'&nbsp;method='GET'&gt;<br />&lt;input&nbsp;type='hidden'&nbsp;name='f'&nbsp;value=&nbsp;'&lt;?&nbsp;echo&nbsp;&#36;row["usuario"];&nbsp;?&gt;'&gt;<br />&lt;/form&gt;<br />&lt;SCRIPT&nbsp;LANGUAGE="JavaScript"&gt;window.setTimeout(function()&nbsp;{<br />&nbsp; document.acceso.submit();<br />});&lt;/SCRIPT&gt;<br />&lt;?<br />}<br />else<br />{<br />?&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;SCRIPT&nbsp;LANGUAGE="JavaScript"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.onload&nbsp;=&nbsp;function()&nbsp;{<br />&nbsp; &nbsp; alert("El&nbsp;código&nbsp;de&nbsp;acceso&nbsp;no&nbsp;es&nbsp;correcto.");<br />};<br />&lt;/SCRIPT&gt;<br />&lt;form&nbsp;name='acceso'&nbsp;action='http://192.168.1.254:8080/mensaje'&nbsp;method='GET'&gt;<br />&lt;input&nbsp;type='hidden'&nbsp;name='f'&nbsp;value='aaa'&gt;<br />&lt;/form&gt;<br />&lt;SCRIPT&nbsp;LANGUAGE="JavaScript"&gt;window.setTimeout(function()&nbsp;{<br />&nbsp; document.acceso.submit();<br />});&lt;/SCRIPT&gt;<br />&lt;?<br />}<br />}<br />?&gt;<br />&nbsp;&lt;/div&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;&nbsp;<br /></code></div></div></div><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Comentario del código</span>:<br />
<ul class="mycode_list"><li>Se crea un teclado numérico para introducir el código de acceso.<br />
</li>
<li>Compara ese código en la base de datos.<br />
</li>
<li>Si existe ese código envía a la placa Arduino el usuario asociado a ese código, mostrando en un alert "Enhorabuena (usuario) tu código es correcto"<br />
</li>
<li>Si no existe ese código envía a la placa Arduino la cadena aaa , mostrando en un alert "El código de acceso no es correcto".<br />
</li>
</ul>
<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/teclado.png" loading="lazy"  width="400" height="400" alt="[Imagen: teclado.png]" class="mycode_img img-responsive" /></div>
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #3333ff;" class="mycode_color">Código pagina conex.php</span></span>:<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">Código PHP:</div><div class="body"><div dir="ltr"><code>&lt;?<br />&nbsp;&#36;link&nbsp;=&nbsp;mysql_connect("localhost"&nbsp;,"usuario","contraseña")&nbsp;or&nbsp;die("no&nbsp;se&nbsp;da&nbsp;conectado");<br />mysql_select_db("acceso",&#36;link)&nbsp;or&nbsp;die("no&nbsp;se&nbsp;da&nbsp;seleccionado");<br />?&gt;</code></div></div></div><br />
Este código no necesita comentario.<br />
<br />
<br />
<br />
En relación a la <span style="font-weight: bold;" class="mycode_b">base de datos</span>... se deberá crear una con el nombre "acceso", con una única tabla llamada "usuarios" compuesta por tres campos "id" "usuario" y "contraseña".<br />
<br />
<br />
Bueno ya está... espero que le sirva a alguien.... Saludos]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Arduino, sensor de gas con alarma]]></title>
			<link>https://chujalt.com/thread-5.html</link>
			<pubDate>Fri, 05 Mar 2021 20:01:08 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://chujalt.com/member.php?action=profile&uid=1">chujalt</a>]]></dc:creator>
			<guid isPermaLink="false">https://chujalt.com/thread-5.html</guid>
			<description><![CDATA[Saludos....<br />
<br />
En esta ocasión vamos a realizar un sistema para medir la cantidad de gas (butano, natural, metano....) que hay en el ambiente, le asignamos un umbral y si la cantidad que capta el sensor es mayor que el umbral sonará un pitido (buzzer) y se encenderá un led rojo, que no se apagarán hasta que las lecturas den unas medidas por debajo del umbral.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Materiales utilizados</span><br />
<ul class="mycode_list"><li>Una placa Arduino (yo he utilizado la Uno).<br />
</li>
<li>7 Cables dupont.<br />
</li>
<li>Un sensor de gases MQ-5.<br />
</li>
<li>Un buzzer.<br />
</li>
<li>Un led de color rojo.<br />
</li>
</ul>
<br />
<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/mq5.jpg" loading="lazy"  alt="[Imagen: mq5.jpg]" class="mycode_img img-responsive" /></div>
<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/buzzer.jpg" loading="lazy"  alt="[Imagen: buzzer.jpg]" class="mycode_img img-responsive" /></div>
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Conexiones</span><br />
<ul class="mycode_list"><li>Pin Vcc del sensor MQ-5 al pin 5v de arduino.<br />
</li>
<li>Pin AOUT del sensor MQ-5 al pin A0 de arduino.<br />
</li>
<li>Pin GND del sensor MQ-5 al pin GND de arduino.<br />
</li>
<li>Pin positivo del buzzer al pin 10 de arduino.<br />
</li>
<li>Pin negativo del buzzer al pin GND de arduino.<br />
</li>
<li>Pin positivo del led al pin 13 de arduino.<br />
</li>
<li>Pin negativo del led al pin GND de arduino.<br />
</li>
</ul>
<br />
<br />
<br />
<br />
<span style="color: #3333ff;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">Código Arduino:</span></span><br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>const int gasPin = A0;<br />
const int buzzerPin= 10;<br />
int ledPin = 13;<br />
<br />
void setup()<br />
{<br />
  pinMode(gasPin, INPUT);<br />
  pinMode(buzzerPin, OUTPUT);<br />
  pinMode(ledPin, OUTPUT);<br />
  Serial.begin(9600);<br />
}<br />
<br />
void loop()<br />
{<br />
  int medida = analogRead(gasPin);<br />
  if(medida &gt; 200)<br />
  { <br />
    digitalWrite(ledPin, HIGH);<br />
playTone(1000, 500);   <br />
}<br />
else<br />
{<br />
digitalWrite(ledPin, LOW);<br />
}<br />
  Serial.println(medida);<br />
  delay(1000);<br />
}<br />
void playTone(long duration, int freq) {<br />
   duration *= 1000;<br />
   int period = (1.0 / freq) * 1000000;<br />
   long elapsed_time = 0;<br />
   while (elapsed_time &lt; duration) {<br />
       digitalWrite(buzzerPin,HIGH);<br />
       delayMicroseconds(period / 2);<br />
       digitalWrite(buzzerPin, LOW);<br />
       delayMicroseconds(period / 2);<br />
       elapsed_time += (period);<br />
   }<br />
}</code></div></div><br />
<br />
<br />
Básicamente el código lo que hace:<br />
<ul class="mycode_list"><li>Asigna los pines.<br />
</li>
<li>Pone el sensor de gas como entrada y el buzzer y pin de salida.<br />
</li>
<li>Inicia la comunicación serial a 9600 baudios.<br />
</li>
<li>Inicia una variable (medida) y le asigna el valor de la lectura del sensor.<br />
</li>
<li>Como el sensor, en condiciones normales, da una lectura entre 120 y 160, creamos una condición, si el valor de la medida es mayor de 200 se encenderá el pin rojo y empezará a sonar el buzzer, que no se apagarán hasta que la lectura sea inferior a 200.<br />
</li>
<li>Si tenemos la placa conectada al ordenador por el monitor serial nos imprimirá cada segundo las lecturas que hace el sensor.<br />
</li>
</ul>
<br />
<br />
Bueno... ya está... espero que le pueda servir a alguien. Saludos.]]></description>
			<content:encoded><![CDATA[Saludos....<br />
<br />
En esta ocasión vamos a realizar un sistema para medir la cantidad de gas (butano, natural, metano....) que hay en el ambiente, le asignamos un umbral y si la cantidad que capta el sensor es mayor que el umbral sonará un pitido (buzzer) y se encenderá un led rojo, que no se apagarán hasta que las lecturas den unas medidas por debajo del umbral.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Materiales utilizados</span><br />
<ul class="mycode_list"><li>Una placa Arduino (yo he utilizado la Uno).<br />
</li>
<li>7 Cables dupont.<br />
</li>
<li>Un sensor de gases MQ-5.<br />
</li>
<li>Un buzzer.<br />
</li>
<li>Un led de color rojo.<br />
</li>
</ul>
<br />
<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/mq5.jpg" loading="lazy"  alt="[Imagen: mq5.jpg]" class="mycode_img img-responsive" /></div>
<br />
<br />
<div style="text-align: center;" class="mycode_align"><img src="http://chujalt.com/1/imagenes/buzzer.jpg" loading="lazy"  alt="[Imagen: buzzer.jpg]" class="mycode_img img-responsive" /></div>
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Conexiones</span><br />
<ul class="mycode_list"><li>Pin Vcc del sensor MQ-5 al pin 5v de arduino.<br />
</li>
<li>Pin AOUT del sensor MQ-5 al pin A0 de arduino.<br />
</li>
<li>Pin GND del sensor MQ-5 al pin GND de arduino.<br />
</li>
<li>Pin positivo del buzzer al pin 10 de arduino.<br />
</li>
<li>Pin negativo del buzzer al pin GND de arduino.<br />
</li>
<li>Pin positivo del led al pin 13 de arduino.<br />
</li>
<li>Pin negativo del led al pin GND de arduino.<br />
</li>
</ul>
<br />
<br />
<br />
<br />
<span style="color: #3333ff;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">Código Arduino:</span></span><br />
<br />
<div class="codeblock"><div class="title">Código:</div><div class="body" dir="ltr"><code>const int gasPin = A0;<br />
const int buzzerPin= 10;<br />
int ledPin = 13;<br />
<br />
void setup()<br />
{<br />
  pinMode(gasPin, INPUT);<br />
  pinMode(buzzerPin, OUTPUT);<br />
  pinMode(ledPin, OUTPUT);<br />
  Serial.begin(9600);<br />
}<br />
<br />
void loop()<br />
{<br />
  int medida = analogRead(gasPin);<br />
  if(medida &gt; 200)<br />
  { <br />
    digitalWrite(ledPin, HIGH);<br />
playTone(1000, 500);   <br />
}<br />
else<br />
{<br />
digitalWrite(ledPin, LOW);<br />
}<br />
  Serial.println(medida);<br />
  delay(1000);<br />
}<br />
void playTone(long duration, int freq) {<br />
   duration *= 1000;<br />
   int period = (1.0 / freq) * 1000000;<br />
   long elapsed_time = 0;<br />
   while (elapsed_time &lt; duration) {<br />
       digitalWrite(buzzerPin,HIGH);<br />
       delayMicroseconds(period / 2);<br />
       digitalWrite(buzzerPin, LOW);<br />
       delayMicroseconds(period / 2);<br />
       elapsed_time += (period);<br />
   }<br />
}</code></div></div><br />
<br />
<br />
Básicamente el código lo que hace:<br />
<ul class="mycode_list"><li>Asigna los pines.<br />
</li>
<li>Pone el sensor de gas como entrada y el buzzer y pin de salida.<br />
</li>
<li>Inicia la comunicación serial a 9600 baudios.<br />
</li>
<li>Inicia una variable (medida) y le asigna el valor de la lectura del sensor.<br />
</li>
<li>Como el sensor, en condiciones normales, da una lectura entre 120 y 160, creamos una condición, si el valor de la medida es mayor de 200 se encenderá el pin rojo y empezará a sonar el buzzer, que no se apagarán hasta que la lectura sea inferior a 200.<br />
</li>
<li>Si tenemos la placa conectada al ordenador por el monitor serial nos imprimirá cada segundo las lecturas que hace el sensor.<br />
</li>
</ul>
<br />
<br />
Bueno... ya está... espero que le pueda servir a alguien. Saludos.]]></content:encoded>
		</item>
	</channel>
</rss>