Solución:
//TRASMISOR
void setup() {
Serial.begin(19200);
pinMode(13,INPUT);
}
void loop() {
if(digitalRead(13)==HIGH){
Serial.print("Hola Mundo");
delay(200);
}
***************************************************************
//RECEPTOR
String dato;
void setup() {
Serial.begin(19200);
}
void loop() {
while(Serial.available()){
dato=Serial.readString();
Serial.println(dato);
}
}
//PROBLEMA EJEMPLO DE COMUNICACIÓN
SERIAL:
void setup(){
Serial.begin(9600);
Serial.available(); //Consulta si hay datos de llegado
void loop(){}
Solución;
//Problema número 2, Solución:
char dato;
void setup(){
Serial.begin(9600);
}
void loop(){
if(Serial.available()>0){
dato=Serial.read();
Serial.print(dato);
}
Solución:
//Problema numero 3, Solución:
String dato=""; //Cadena de datos
boolean estado=0;
void setup(){
Serial.begin(9600);
}
void loop(){
estado=0;
while(Serial.available()){
char caracter=Serial.read();
dato.concat(caracter);
estado=1;
delay(5);
}
if(estado==1){
Serial.println(dato);
dato="";
}
Solución:
COMANDO: CALCULADORA
Ingrese primer numero:
Ingrese Segundo numero:
Menu: Suma, resta, producto o división
COMANDOS: SUM, RES, PROD, DIV
Respuesta: XXX
//Problema numero 4, Solución:
String dato=""; //Cadena de datos
boolean estado=0;
int numero, numero1, numero2;
void setup(){
Serial.begin(9600);
}
void loop(){
estado=0;
while(Serial.available()){
char caracter=Serial.read();
dato.concat(caracter);
estado=1;
delay(5);
}
if(estado==1){
//Serial.println(dato);
if(dato=="CALCULADORA"){Serial.print("Ingrese el primer numero: ");}
if(dato=="SUM"){numero=numero1+numero2; Serial.print("Respuesta:
"); Serial.println(numero); numero1=0;}
if(dato=="REST"){numero=numero1-numero2; Serial.print("Respuesta:
"); Serial.println(numero);numero1=0;}
if(dato=="PROD"){numero=numero1*numero2;
Serial.print("Respuesta: "); Serial.println(numero);numero1=0;}
if(dato=="DIV"){numero=numero1/numero2; Serial.print("Respuesta:
"); Serial.println(numero);numero1=0;}
numero=dato.toInt();
if(numero!=0){
if(numero1!=0){numero2=numero;Serial.println(numero2);}
else{numero1=numero;
Serial.println(numero1);
Serial.print("Ingrese el segundo numero: ");
}
}
dato="";
}
}
TERCERA CLASE:
17/04
MÓDULO BLUETOOH
Existen dos clases o tipos de módulos (antenas) bluetooth: modulo HC-06
(Esclavo), Módulo HC-05 (Maestro o esclavo)
CLASE 24 ABRIL 2020
NIVELES LOGICOS:
Azul: Arduino
Verde: Bluetooth
La solución para la comunicación es bajar el nivel del arduino 5v a 3.3v
DIVISOR DE VOLTAJE
TAREA
ENVIAR INFORMACIÓN VÍA BLUETOOTH DESDE LA LAPTOP HASTA EL
ARDUINO Y QUE SE VISUALICE EN UNA PANTALLA LCD
COMANDOS AT-ESP8266
Lista de comandos:
Comando Respuesta Función
AT - Probar iniciación correcta
AT OK Prueba si el módulo responde correctamente
AT+RST - Reinicia el módulo
AT+RST OK Resetéa el módulo
AT+CWMODE - Modo Wifi
+CWMODE:(1-3)
AT+CWMODE=? Lista los modos validos
OK
+CWMODE:modo
Pregunta en que modo AP esta actualmente el
AT+CWMODE?
módulo
OK
AT+CWMODE=mo OK Establece el módulo en el modo dado
1 = Modo estación (cliente)
do 2 = Modo AP (huésped)
3 = Modo AP + Estación (modo dual)
AT+CWLAP - Lista APs disponibles
Lista los Acess Points disponibles para
conectarse.
ecn: codificación, puede ser:
0 = Abierto
1 = WEP
AT+CWLAP:ecn,ssid,r
ssi,mac 2 = WPA PSK
AT+CWLAP
OK 3 = WPA2 PSK
4 = WPA WPA2 PSK
ssid: String que contiene el SSID del AP
rssi: Fuerza de la señal
mac: String que contiene la dirección MAC
+CWLAP:ecn,ssid,rssi,
AT+CWLAP=ssid,m mac Busca Acess Points disponibles para
ac,ch conectarse con las condiciones especificadas
OK
AT+CWJAP - Unirse a un Access Point
+ CWJAP:ssid
Imprime el SSID al que el módulo esta
AT+CWJAP?
conectado
OK
AT+CWJAP=ssid,p El módulo se conecta al la red con el nombre
OK
wd ssid indicado y la contraseña pwd suministrada
AT+CWQAP - Desconectarse de una Access Point
Se desconecta de la red que esta actualmente
AT+CWQAP OK
conectado
AT+CWSAP - Configurar el softAP del módulo
+CWSAP:ssid,pwd,ch,
ecn
AT+CWSAP? Pregunta la configuración actual del softAP
OK
AT+CWSAP=ssid,p OK Configura el softAP con
wd,ch,ecn
ssid: String con el nombre de la red
pwd: Contraseña, no mayor a 64 caracteres
ch: Canal inalámbrico
ecn: Tipo de codificación
1 = Abierto
2 = WPA_PSK
3 = WPA2_PSK
4 = WPA_WPA2_PSK
AT+CIPSTATUS - Información acerca de la coneción
status:
2 = Se obtuvo IP
3 = Conectado
4 = Desconectado
STATUS:status id: ID de la conexión en caso de multiconexión
(1-4)
+CIPSTATUS:id,type,a
AT+CIPSTATUS
ddr,port,tetype type: Tipo de conexión, "TCP" o "UDP"
OK addr: Dirección IP de la conexión
port: Numero del puerto
tetype:
0 = El módulo corre como cliente
1 = El módulo corre como servidor
AT+CIPMUX - Habilitar o deshabilitar multiples conexiones
AT+CIPMUX=mode OK mode:
0 = Conexión unica
1 = Múltiples conexiones, hasta 4
+CIPMUX:mode
AT+CIPMUX? Imprime el mode, el modo de conexión actual
OK
AT+CIPSTART - Establece una conexión TCP o registra un puerto UDP e inicia la conexión
(cliente)
Empieza una conexión como cliente (en modo
conexión única)
type: puede ser "TCP" o "UDP"
AT+CIPSTART=typ
OK
e,addr,port
addr: String que contenga la dirección IP
remota
port: String que contenga el puerto remoto
OK Empieza una conexión como cliente (En modo
AT+CIPSTART=id,t conexión múltiple)
ype,addr,port
id: ID de la conexión (1-4)
[+CIPSTART:(id)
(“type”),(“ip address”),
AT+CIPSTART=? (port)] Lista los posibles comandos
OK
AT + CIPCLOSE - Cierra la conexión TCP o UDP
AT+CIPCLOSE=? OK
Cierra la conexión TCP o UDP con el ID "id" en
AT+CIPCLOSE=id OK
modo conexión múltiple
Cierra la conexión TCP o UDP para modo de
AT+CIPCLOSE OK
conexión única
AT+CIPSEND - Enviar datos (SERVIDOR)
AT+CIPSEND=? OK
Establece la longitud de datos a enviarse
AT+CIPSEND=leng
SEND OK (máximo 2048). Para un envío normal (modo
th
conexión única)
Establece la longitud de datos a enviarse en la
AT+CIPSEND=id,le
SEND OK conexión número "id". Para un envío normal
ngth
(modo conexión múltiple)
Envía datos sin adornos cada 20ms. El módulo
retorna ">" después ejecutar el comando, si se
AT+CIPSEND
recibe el comando "+++" se regresa al modo
comando.
AT+CIFSR - Obtener la dirección IP local
AT+CIFSR=? OK
AT+CIFSR +CIFSR:ip Retorna la dirección IP local del módulo como
cliente.
OK
AT+CIFSERVER -
Configurar como
servidor
Configura el módulo como servidor donde el
modo:
AT+CIPSERVER= 0 = Borrar servidor
OK
mode[,port]
1 = Crear servicio
puerto: numero del puerto, por defecto es el
333
AT+CIOBAUD Cambiar la velocidad de transmisión serial
+CIOBAUD:(9600-
921600) Nos informa que las velocidades de
AT+CIOBAUD=?
transmisión permitidas están en este rango
OK
+CIOBAUD:baudrate
Nos indica que el módulo está actualmente
AT+CiOBAUD?
configurado a 'baudrate'
OK
Configura la velocidad de transmisión a
AT+CIOBAUD=bau 'baudrate'
OK
drate
ejemplo:
#include <SoftwareSerial.h>
// arduino Rx (pin 3) ---- ESP8266 Tx
// arduino Tx (pin 2) ---- ESP8266 Rx
SoftwareSerial esp8266(2,3);
void setup()
{
Serial.begin(9600); // monitor serial del arduino
esp8266.begin(9600); // baud rate del ESP8255
pinMode(13,OUTPUT);
digitalWrite(13,LOW);
sendDataAT("AT+RST\r\n",2000); // resetear módulo
sendDataAT("AT+CWMODE=1\r\n",1000); // configurar como cliente
sendDataAT("AT+CWJAP=\"Xiomi Note
11\",\"HousePando$1\"\r\n",8000); //SSID y contraseña para unirse a red
sendDataAT("AT+CIFSR\r\n",1000); // obtener dirección IP
sendDataAT("AT+CIPMUX=1\r\n",1000); // configurar para multiples
conexiones
sendDataAT("AT+CIPSERVER=1,80\r\n",1000); // servidor en el
puerto 80
}
void loop(){
if(esp8266.available()){
if(esp8266.find("+IPD,")){
delay(1500);
int conexionID = esp8266.read()-48; // Obtiene el ID del cliente
(1,2,3..)
esp8266.find("led="); // bucar el texto "led="
int state = (esp8266.read()-48); // Obtener el estado del pin a mostrar
digitalWrite(13,state); // Cambiar estado del pin
while(esp8266.available()){
char c = esp8266.read();
Serial.print(c);
}
//responder y cerrar la conexión para que el navegador no se quede
cargando
// página web a enviar
sendWep("<h1 style='text-align: center;'>CURSO ARDUINO ONLINE
ATIY<br/><img style='display: block; margin-left: auto; margin-right: auto;'
src='https://i.blogs.es/fc0fc9/650_1000_gi01a201312292200/450_1000.p
ng' alt='' width='99' height='113' /></h1>",conexionID);
sendWep("<br><br/>",conexionID);
sendWep("<p style='text-align: center;'><a
href=\"/led=1\"\"><button><strong>ENCENDER LED
</strong></button></a></p>",conexionID);
sendWep("<p style='text-align: center;'><a
href=\"/led=0\"\"><button><strong>APAGAR LED
</strong></button></a><br/></p>",conexionID);
//"<input type='button' name='boton' value='Boton'
style='width:70px; height:25px'>"
// comando para terminar conexión (FIN)
String comandoCerrar = "AT+CIPCLOSE=";
comandoCerrar+=conexionID;
comandoCerrar+="\r\n";
sendDataAT(comandoCerrar,3000);
}
}
}
/*
Enviar comando al esp8266 y verificar la respuesta del módulo, todo esto
dentro del tiempo timeout
*/
void sendDataAT(String comando, const int timeout){
long int time = millis(); // medir el tiempo actual para verificar timeout
esp8266.print(comando); // enviar el comando al ESP8266
while( (time+timeout) > millis()) {
while(esp8266.available()) {
char c = esp8266.read(); // leer el siguiente caracter
Serial.print(c);
}
}
return;
}
/*FUNCION PARA ENVIAR PAGINA WEB*/
void sendWep(String mensajeWep, int pcID){
String envioAT="AT+CIPSEND=";
envioAT+=pcID;
envioAT+=",";
envioAT+=mensajeWep.length();
envioAT+="\r\n";
sendDataAT(envioAT,250);
sendDataAT(mensajeWep,250);
}