Cual es el proceso
Hay muchas formas de utilizar ESP866 para la comunicación. Algunos pueden usarlo para enviar / recibir datos en línea o cargar datos con regularidad. Para este tutorial , solo le mostraré cómo podemos comunicarnos con Arduino de forma inalámbrica usando su teléfono (Android o iPhone). Esto se hará sin conexión, por lo que no es necesario tener conexión a Internet.
Nuestro ESP8266 servirá como punto de acceso (modo AP), lo que significa que proporcionará acceso a la red Wi-Fi a otros dispositivos (estaciones) y los conectará a una red cableada.
El proceso es bastante simple. Utilice su teléfono para enviar cualquier comando a Arduino. Con la ayuda de ESP8266, todo funcionará de forma inalámbrica.
COMPONENTES Y SUMINISTROS
Circuito construido
Conecte los pines más descritos en esta tabla de pines
Sigue estos pasos.
- conecte el Pin VCC / 3.3V / Power de ESP y el Pin de habilitación (cables rojos) a la resistencia de 10K y luego al pin de alimentación de + 3.3V de Uno.
- conecte la clavija de tierra / GND del ESP (cable negro) a la clavija de tierra / GND de Uno.
- conecte el TX (cable verde) del ESP al Pin 3 de Uno
- cconecte el RX (cable azul) del ESP a la resistencia de 1K y luego al Pin 2 de Uno.
- cconecte el RX (cable azul) del ESP a la resistencia de 1K y luego al pin GND de Uno.
Configurar conexión
Una vez que todo esté configurado, notará que su ESP8266 Wifi estará disponible dentro del alcance de su teléfono.
1 . Descarga TCP Client para Android
Puede descargar cualquier cliente TCP disponible en Play Store, pero yo usé el cliente TCP de Sollae Systems
2 . Desde su teléfono, conéctese a su ESP8266 Wifi
Si su wifi ESP8266 no se muestra en las redes wifi disponibles, asegúrese de que su Arduino esté funcionando y que todo esté conectado correctamente. Si no, soluciona el problema de tu ESP siguiendo su documentación.
Por lo general, el nombre del wifi / ssid comenzará en ESP siguiendo el nombre de su versión, el mío es ESP11.
3 . Una vez conectado, obtenga la dirección IP estática.
Importante: puede verificar la IP del ESP yendo a la Configuración de Wifi de su teléfono y haciendo clic en la información de la red.
La dirección IP predeterminada en el modo AP es 192.168.4.1 .
Puede cambiar la IP estática siguiendo esta referencia de Wifi.config () .
4 . Abra el cliente TCP que descargó anteriormente.
Cree la conexión haciendo clic en conectar, agregue la IP y el puerto 80 de ESP así:
80 es el puerto que usé para nuestro servidor ESP, pero puede cambiarlo reemplazando 80 por cualquier número de puerto que desee de nuestro código en la línea 23
6. Espere a que la consola TCP diga «Conectado».
Habla contigo Arduino Uno a través de un teléfono inteligente
Una vez conectado, envíe la solicitud escribiendo el siguiente código al cliente TCP:
esp8266: <any AT Commands>
La comunicación con ESP8266 se realiza mediante el comando de atención o los comandos AT.
O encienda el LED incorporado usando el comando
LEDON
O apague el LED incorporado usando el comando
LEDOFF
O simplemente di
HELLO
Puede cambiar la respuesta de lo que envía dependiendo de la lógica que ponga en el código.
Importante: esp8266, LEDON, LEDOFF y HELLO es mi identificador de comando personalizado. Si pones algo diferente a estos, devolverá ErrRead.
ErrRead significa que ningún identificador de comando coincide con el mensaje que envió.
El mensaje ErrRead está codificado en la línea 64 .
Sobre el circuito
El pin de alimentación de ESP está etiquetado como VIN en mi ESP11, sin embargo, para algunas versiones podría ser 3.3V o Power o VCC.
También necesitará alimentar el pin CH_EN o el pin de habilitación de ESP para que funcione.
IMPORTANTE no use voltaje a ESP más de 3.3VC
ESP8266 usa estrictamente 3.3 V. Más que eso destruirá el módulo.
Como Arduino es de 5V, tuve que poner un divisor de voltaje. Esas son las resistencias.
El TX de ESP está conectado al RX de Uno, lo que significa que todo lo que queramos transmitir (TX) en ESP recibirá (RX) por Uno, y viceversa.
Al construir este circuito, ahora estamos listos para iniciar WIFI con Arduino UNO.
Nota : Si conecta el depurador en serie mediante un cable USB o abre el puerto COM, la comunicación entre ESP y Arduino se verá interrumpida y no funcionará.
Entonces, antes de flashear Uno, primero quite el Rx / Tx del ESP.
Sobre el Código
Importante: Existen diferentes tipos de ESP8266. Cambie la velocidad en baudios en el código adjunto en la línea 16 según lo que use su ESP8266.
Toda nuestra solicitud se leerá y analizará en la función loop ()
if(wifiSerial.available()>0){
String message = readWifiSerialMessage();
if(find(message,"esp8266:")){
String result = sendToWifi(message.substring(8,message.length()),responseTime,DEBUG);
if(find(result,"OK"))
sendData("\n"+result);
else
sendData("\nErrRead"); //At command ERROR CODE for Failed Executing statement
}else
if(find(message,"HELLO")){ //receives HELLO from wifi
sendData("\\nHI!"); //arduino says HI
}else if(find(message,"LEDON")){
digitalWrite(13,HIGH);
}else if(find(message,"LEDOFF")){
digitalWrite(13,LOW);
}
else{
sendData("\nErrRead"); //Command ERROR CODE for UNABLE TO READ
}
}
Puede ver desde arriba que utilicé mi función buscar ( <mensaje recibido> , <mensaje que desea encontrar> ) para interpretar el mensaje y decirle a Arduino a qué código llamar.
Si desea comunicarse con Arduino UNO o hacer algo, simplemente agregue su condición. por ejemplo :
if(find(message,"MY CODE")){
// I found 'MY CODE' from received message
// lets do something here
}
if(find(message,"A")){
// I found 'A' from received message
// lets do something here
}
Agregué alguna función para comunicarme con ESP8266.
/*
* Name: sendData
* Description: Function used to send string to tcp client using cipsend
* Params:
* Returns: void
*/
void sendData(String str){
String len="";
len+=str.length();
sendToWifi("AT+CIPSEND=0,"+len,responseTime,DEBUG);
delay(100);
sendToWifi(str,responseTime,DEBUG);
delay(100);
sendToWifi("AT+CIPCLOSE=5",responseTime,DEBUG);
}
/*
* Name: find
* Description: Function used to match two string
* Params:
* Returns: true if match else false
*/
boolean find(String string, String value){
if(string.indexOf(value)>=0)
return true;
return false;
}
/*
* Name: readSerialMessage
* Description: Function used to read data from Arduino Serial.
* Params:
* Returns: The response from the Arduino (if there is a reponse)
*/
String readSerialMessage(){
char value[100];
int index_count =0;
while(Serial.available()>0){
value[index_count]=Serial.read();
index_count++;
value[index_count] = '\0'; // Null terminate the string
}
String str(value);
str.trim();
return str;
}
/*
* Name: readWifiSerialMessage
* Description: Function used to read data from ESP8266 Serial.
* Params:
* Returns: The response from the esp8266 (if there is a reponse)
*/
String readWifiSerialMessage(){
char value[100];
int index_count =0;
while(wifiSerial.available()>0){
value[index_count]=wifiSerial.read();
index_count++;
value[index_count] = '\0'; // Null terminate the string
}
String str(value);
str.trim();
return str;
}
/*
* Name: sendToWifi
* Description: Function used to send data to ESP8266.
* Params: command - the data/command to send; timeout - the time to wait for a response; debug - print to Serial window?(true = yes, false = no)
* Returns: The response from the esp8266 (if there is a reponse)
*/
String sendToWifi(String command, const int timeout, boolean debug){
String response = "";
wifiSerial.println(command); // send the read character to the esp8266
long int time = millis();
while( (time+timeout) > millis())
{
while(wifiSerial.available())
{
// The esp has data so display its output to the serial window
char c = wifiSerial.read(); // read the next character.
response+=c;
}
}
if(debug)
{
Serial.println(response);
}
return response;
}
/*
* Name: sendToUno
* Description: Function used to send data to Arduino.
* Params: command - the data/command to send; timeout - the time to wait for a response; debug - print to Serial window?(true = yes, false = no)
* Returns: The response from the esp8266 (if there is a reponse)
*/
String sendToUno(String command, const int timeout, boolean debug){
String response = "";
Serial.println(command); // send the read character to the esp8266
long int time = millis();
while( (time+timeout) > millis())
{
while(Serial.available())
{
// The esp has data so display its output to the serial window
char c = Serial.read(); // read the next character.
response+=c;
}
}
if(debug)
{
Serial.println(response);
}
return response;
The story
¡Eso es todo! Ahora que ha aprendido a comunicarse con Arduino Uno a través de Wifi, ahora puede explorar más proyectos de Internet de las cosas.
-
Arduino ATmega 2560 R3¡Oferta!
$20.50$19.00 -
Arduino Uno Wifi¡Oferta!
$15.00$13.00 -
Arduino Mini USB Nano V3.0 CH340 Chip Board 5V 16M + Cable¡Oferta!
$9.00$8.50