[Aporte] Tarjeta comandada desde TCP/IP UDP Modulo ESP8266

Fernando: No existe una librería como tal para CCS del modulo ESP8266, ya que este modulo cuenta con una serie de Comandos AT con los que puedes hacer prácticamente todo, si revisas este post, encontraras especificado todo lo necesario, incluso el aporte esta basado en un PIC.

Lo que si esta disponible (y sigue en desarrollo) son diferentes formas de aprovechar el modulo ESP8266 con otros Firmwares que se le pueden cargar a este modulo inclusive se puede lograr aprovechar con el IDE de desarrollo de Arduino y lenguaje con sus respectivas restricciones/beneficios, de los firmwares que yo se que existen son:

  • El basado en comandos AT (como generalmente viene al comprarlo)
  • Lua NodeMCU (lenguaje de programación basado en Scripts)
  • Espruino (basado en Java Script)
  • Sming (framework de desarrollo en el propio modulo)
  • MMISCOOL'S BASIC INTERPRETER (Interprete de lenguaje basic)

Si tu visitas el sitio de ESP8266 podrás ver las diferentes opciones que existen, ya que el modulo como tal es un microcontrolador con suficiente capacidad y desempeño como para poderlo aprovechar sin la dependencia de microcontroladores extras, solo es tener la paciencia de estudiarlo.

Yo actualmente sigo utilizandolo con comandos AT (gobernado por un pic) y solo he explorado el IDE de Arduino.


Saludos y hasta pronto
 
Fernando: No existe una librería como tal para CCS del modulo ESP8266, ya que este modulo cuenta con una serie de Comandos AT con los que puedes hacer prácticamente todo, si revisas este post, encontraras especificado todo lo necesario, incluso el aporte esta basado en un PIC.

Lo que si esta disponible (y sigue en desarrollo) son diferentes formas de aprovechar el modulo ESP8266 con otros Firmwares que se le pueden cargar a este modulo inclusive se puede lograr aprovechar con el IDE de desarrollo de Arduino y lenguaje con sus respectivas restricciones/beneficios, de los firmwares que yo se que existen son:

  • El basado en comandos AT (como generalmente viene al comprarlo)
  • Lua NodeMCU (lenguaje de programación basado en Scripts)
  • Espruino (basado en Java Script)
  • Sming (framework de desarrollo en el propio modulo)
  • MMISCOOL'S BASIC INTERPRETER (Interprete de lenguaje basic)

Si tu visitas el sitio de ESP8266 podrás ver las diferentes opciones que existen, ya que el modulo como tal es un microcontrolador con suficiente capacidad y desempeño como para poderlo aprovechar sin la dependencia de microcontroladores extras, solo es tener la paciencia de estudiarlo.

Yo actualmente sigo utilizandolo con comandos AT (gobernado por un pic) y solo he explorado el IDE de Arduino.


Saludos y hasta pronto

La mejor respuesta esperable... MUCHAS GRACIAS Miborbolla!!!!
 
Hola, buenas tardes, me encuentro realizando un proyecto para la universidad, y tu aporte me a servio de mucho, pero tengo un problema al intentar mandar información del PIC a VB, no consigo hacerlo, pruebo tu programa y funciona, pero el que yo eh realizado no lo hace, podrias ayudarme???
este es mi porgrama

PHP:
Imports System.Net
Imports System.Text.Encoding

Public Class Form1

    Dim puerto As Integer = 7777 'Puerto UDP que sera utilizado; modificar aqui si se prefiere otro diferente al 7777 
    Dim publisher As New Sockets.UdpClient(0)
    Dim subscriber As New Sockets.UdpClient(puerto)



    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        publisher.Connect(DireccionIP.Text, puerto)
        Dim sendbytes() As Byte = ASCII.GetBytes(Envio.Text + Chr(10) + Chr(13))
        publisher.Send(sendbytes, sendbytes.Length)
    End Sub

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        DireccionIP.Text = "192.168.43.39" 'Direccion IP del Host de destino 
        subscriber.Client.ReceiveTimeout = 100
        subscriber.Client.Blocking = False
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Try
            Dim ep As IPEndPoint = New IPEndPoint(IPAddress.Any, 0)
            Dim rcvbytes() As Byte = subscriber.Receive(ep)
            Recibo.Text = ASCII.GetString(rcvbytes)
        Catch ex As Exception
        End Try
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        publisher.Connect(DireccionIP.Text, puerto)
        Dim sendbytes() As Byte = ASCII.GetBytes("1" + Chr(10) + Chr(13))
        publisher.Send(sendbytes, sendbytes.Length)
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        publisher.Connect(DireccionIP.Text, puerto)
        Dim sendbytes() As Byte = ASCII.GetBytes("4" + Chr(10) + Chr(13))
        publisher.Send(sendbytes, sendbytes.Length)
    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        publisher.Connect(DireccionIP.Text, puerto)
        Dim sendbytes() As Byte = ASCII.GetBytes("2" + Chr(10) + Chr(13))
        publisher.Send(sendbytes, sendbytes.Length)
    End Sub

    Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
        publisher.Connect(DireccionIP.Text, puerto)
        Dim sendbytes() As Byte = ASCII.GetBytes("3" + Chr(10) + Chr(13))
        publisher.Send(sendbytes, sendbytes.Length)
    End Sub
End Class
 
Hola, dejo anexado todo el proyecto en visual basic con la finalidad de poder despejar las dudas que pudiesen surgir ya que es entendible que aunque deje el listado en la aportación; es mejor tener todo el proyecto y así poder ver de manera meticulosa cada una de las propiedades de cada uno de los elementos que componen a la aplicación.

Saludos
 

Adjuntos

  • UDPDEMO.rar
    104.5 KB · Visitas: 130
Saludos a todos los del foro, en esta ocasión me ocupa el intentar seguir enriqueciendo el aporte original del Tema iniciado por mí. Para tal fin vamos a seguir trabajando con el Modulo Esp8266 y el protocolo de comunicación TCP/IP UDP pero con la variante de programar el Modulo ESP8266 desde el IDE Arduino; anexándole a este ambiente de desarrollo, el “CORE” del ESP8266 con el Gestor de tarjetas que viene anexado en el propio IDE Arduino, para lo cual necesitaremos lo siguiente:

-----Hardware----

Módulo ESP8266
Modulo UBS-RS232 TTL (CP2102 o similar)
78L03 (regulador 3.3 volts)
Electrolítico de 220 uF/16 volts
Resistencia de 330 ohms
Dos Resistencias de 10 kohms
Micro Boton (servirá como “reset”)
Jumper (servirá para configurar el modulo en modo programación)
Cables Varios

-----Software----

IDE desarrollo Arduino (la última versión)
Arduino Core para ESP8266 (seguir instrucciones mas adelante)
UDPDEMO (se encuentra anexado en el primer post de este Tema)

Preparando el Hardware

Armar el montaje de la siguiente figura para poder dejar preparado todo el hardware necesario y poder pasar a revisar lo que concierne al software

G1xTBbWVh9xnbGHmtAz0CtnzAGVi5QEMS_0jR3hsWWJaVTmJRvcZ4ehn5CRO7vESeKzNhg60IZ0sWdX7N2LPmZNA_-_z3kSipEldgMNDUKzcU2oDUV1TiAMq2cqTLawD66CuA6Q_afVF6ZhJz6f_Y0uESwM3n2_NbxEJ0ohX3gyENIt9dKwtm-u3SpTTogPi02d_VWnKjBd-mfh7r2K4VmfyH7gZE6KDh1giFtFmDbtMDXBlmAEhrlJ497t6RObOFhD8q6stdaglrLMW0BsQF3OJX1S9lJMWnRXDdO3OGlZ72gFoS3NctRJbSavNuyAbSG1sq6Ps7J8Fc2qZygHioqSOuVcczmKQpZdmlbfNg2YWk3sja5y8hLeLuf-M4uS10iN-ZeN-VK3jVDFQmLg3pC4fPEG6fE5pM1g-7tHyrDDp7WzRP-JFmlOiI4h6zTAkVxLPezlBbJGP2Q3zb7P8STcmhlGZ3Klo1xpEm2HejEc0j_jb5VJxikERbtSWh5Q53YA_L_-iQV3fxLBnhCP9pNebS-EHFuEcXFdQ9r8VShe0-hqlKQMy9iUpXNZqDr9jwhC57PQ9kV5djCjRiWLHQyAdi8agI5k=w960-h540-no


Preparando el software

Descargar La última versión del IDE Arduino de su sitio oficial e instalarla con los parámetros por omisión que trae la propia instalación del producto.

Una vez Instalada procedemos a abrir la El IDE de Arduino y ya estando en ella, accesamos al menú de Archivo y luego a preferencias; configuramos el parámetro mostrado en la siguiente figura en el círculo rojo con el siguiente parámetro y damos Aceptar:

http://arduino.esp8266.com/stable/package_esp8266com_index.json

GT7i-4VP05Ix-iNOuWIRT-UyKgUtEQOabJmsEoN4mOD8cqa72XbgtBtyERASg1sYfsseKwHbaMD43d3KV_E70xO_trhBW0iL32FIumSOJ-8Z_-KkR4_OrBe2jjDhBnYZ9OvzI81_U71YE3JQ60w_RbiWV5xHntQ1mv6mI3N-JTbfIflO1RENVp48_w8dncQcq2_PGphbMeh1Mz5Xv4l6OVLOdX4NngWa-GaK6ZpYEYiYKwafWHRV7n-_DVmQqosx2arM4yFL-wL-kAVuaMl9nFMu30X8j-k9Ee-PHfUgtOnqzbaKu6mmcKoRWUHsOY0t4ApAacfuO2kekq1gVG0c4Pf_AiU1i9FcCwjIGQ35-1qpJo2oDlY1MuTaCbrIAN-PanPPTp01wdixFbCTPnthSjjg59PAnmd2Yqm_ux9zoJlOBQeJN9Bkjh-gyWC49FeixyPH4YcOgH1nVkrxHygQy_pGhPCc2cq8QhAkoUOLtKzSZrW9zTt8E8hszGuDCrbH91hRXivFnaqZQau2dSVuiA2bQqXV7nade7ew09_WAbYi1pYKzXpjj2Jno5ZUt-0Jr7bk-N1MslTpS3JHsGwPFybmrwxgolo=w1421-h799-no


Ahora nos toca ir a descargar el Core para ESP8266, para tal efecto en el menú del IDE Arduino vamos a Herramientas>Placa>gestor de Placas, como se muestra en la siguiente figura:

98RtC-m2fZzY6muOqtWgIjLo1DJFKXGzERIO5FRTrgWwQBnK1FEf8xRDd5cMCD_top49fa9xsudjUMKDbf_n-aOE3qyOcfeBMNq72hg6iQmaxeo-IIPkMrd_B_rLJjxnTq4ROWIX1GpVaZJVU8lc_zDmERj_2ZABCrthAhmamA228h1aYFCCoPY90lSp_UJgpyW4uEZJ2O2NudYYmSX6f0O_sGG3TVcWIxgJccMbcWcH-Eg-OK5oFUBlyHJWkQLFNHcfJeLIawi8qVOQEgUXDusWTxkuvBwC_3OlJYezs6vlDtah-yySYGKQO9Jska3wMAD7L6XNGvS3c2U3aIdBPRnHQ3PmQyrx6XJ7iBCq9MiqIMtqErWbPxBnlAmqRVMMWvWbbNoXQHoHnN6Ii6ZFaHpfx1UO3j5ogL1XAMa2ezFJbeaYf0Enp-u-Od_Qw1xE2Uhl4hRZ1JORlgdqk0PA2WuspeUDqNx8MQCEDuhpw8VjFXUu6jGL-FkIq4e6qzNhCbJXGOotrzGc8UsE0a4FAST9BrSjTfMjXA742Wnj_Xe70TY0CKD-10ey1ZdYgdPXA4fYOpqUv_tAAyJMO1PIjRAED4j2yn4=w1421-h799-no


Ya estando en esta opción, nos compete descargar el CORE para ESP8266, tecleando en la barra de “búsqueda” esp8266, con lo que nos mostrara lo que nos interesa y procedemos a instalarla (ver la siguiente Figura); como es un servicio WEB, no omito comentar que este paso requiere estar conectado a internet y que el proceso puede tardar tanto como ancho de banda esté disponible.

BWRhjRnCykEPZxtzZQ866ktyR7FaYsh_Tjqagu5WJUVBxu4n_K411REBbXbmByKrstRDnbOb9r_EtpZ4NeD-61GAHecMHB0GZSZflENNo6-UAQGoQW5_RZLr_a-iQt-9WCyckDsYAlUW3ANrv9X3EljVE3TB3UwIOJ_WrwaREKOwdoyL_cnrrauUyZcXBuKmpPJpw1C8BufbHG52QzqNKw3xUYwFhg4k3aGPxKWtq4rYja8Lxj-08Ek_dJPgFXMPGulj-EIRlQ5xTEEsqBYRhuT7UmTRTiXGCDd44O3fm5ybOkma-16BtR9ERNGDTH-UM-Eh9g26z8OWbyI1ZExURQOh5ZoK--YZWT5mqEh4LG9e6z7v4g-ipnyj6zpE9jtr5M3NUDw2PF-d-SNwCm4aAzKGU8W7QmyxZSd_TzPW4ElCReHQFK5gzuwfLvGszgkB4eFRQ3nXarGgviqLRcXrAIWQDaxfqzt0sqFkP0jBGzm8LP49_R61bQJZqSvSELaTw-eJBID-YY4j9MaLMkLmpTFcXsVfYjoi4nWhmfnd_02uuIyEPocfG_FvL-0gruGk4TGefjk0lqGJBucio5vATW3oK7eAiAo=w1421-h799-no


Una vez instalado el CORE ESP8266, notaremos que ya se han añadido una buena cantidad de placas ESP8266 como lo muestra la siguiente Figura:

y5TzQ3PqRhjW2NYfUYB1E0FQDuyqR7tXKSOTyM8OrgJKvoqZAgDmSq23gSrfO9FT5o5F_ELatWomFSBR6MXTH1Bv_A2pSB3dixsYDCtOpLcEg92UJtGH1-8TI-i5zEmfJj_Qx7kxxJjjG5lkGd2AvQf8tIfckJq1tMivSXtjqbMRtxR0bA6JcA-eszWX8XMg7QoFJURhVrBNo-H-Hedg30_zQizFbNRo2vTgEF0bHOBGn_T2Npr_kH3BP8yUANCtJFuC7ZLp6yZzDtUvsEnOcT8ltpzSLvv3ybLkAy8nq-T55nynivknvhYHa2MwR6iE3pnqV5f55QCZC_ImkrTU_pb2tgHO3jqYxDvqaT93Jj4uu4DS3yJ0oZvq74eQWx9Ijs-1I8j5fZGfmEJNJYR0wYskoGPWnz6CYUZcQtVDY81bC2M0Ai9x0y7NkDSXWchsfhB4Ih9MZAhEpVMECEAWXYA9Au6qxIg6EjLdwfZ30yoOV4rR9LO2n8l54EIFq8crarCrJ98fAJP8cNmFXzTcJENausD8ojlZLVWyvN3ghuWQlEUQzYFMJ_S7G7JDY7Uu73BMlNVAx2V16WAZ4q282MxKowe0Sic=w1421-h799-no


Con todo este proceso damos por terminada la preparación de todo lo necesario para poder compilar el primer programa y cargarlo a nuestro módulo ESP8266 lo cual nos ocupara en el siguiente paso que consiste en conectar nuestro circuito a la computadora en un puerto USB y esperamos a que se carguen los drivers y verificamos que puerto Serial dejo anexado el sistema por medio del “Administrador de dispositivos” tal como lo muestra la siguiente Figura:

5LNIQ29IHQbts-u6_3w9I9ykSAbLN8D-oxp-BEp7XS6GOZhreeHazMCvxenpI_btEn5sQO1-vH7DPGzOM4CC5nb9K-5ubG7jqIF_2oZAQU9bY1O8BA69CtyjQhcwWh9-qQ1RqrRMg1JIDB5VByv_HGiN1MA1MPR8NP_Wo81uyxlh3Bq_N9FMkWSkDxFytKhaAuFE48DSOoO6LFhipKn8DteXOzje-GFUuIFiWq-_9gWzInw790N1eMzqCK7pvWswcAZVKkclAotHdsCtO9zBDHnsNS7i7zFNxBXas8XonE7-GvbHhgFLkhKhey0YP9jNxpaQ7CWo7_adUM2fLTQlNdW3b4Ak_Id4jh_2VP9c5tdg2ZCKYQX9JKAISZSaLh5pwjYCFzUtIWNj1lewI0LTE1nWHhmN-XFZduTRh0Ytpz74gBza_XZ8Kf_nNHNB7RyGqUAyV4iS_St5Okn_s88VspPfqkWuH8h5ddy3oS7-9zbVvMwXOCmnxyx6i117EI1etaddst3iG4XhmtyNq5o4WuHoh_99eg9gUJl3FzFz-Weo4FsreBijJFk70F8wa59OOwTYHVPL-NpBjBtb36Yv4HuGL3G2Roc=w421-h533-no


Una vez que verificamos que todo está debidamente reconocido, regresamos al IDE Arduino cargamos el programa "BLINK para esp8266" y una vez en pantalla:

uS8TW2Wc2YZh6tZUxiV803Ad3k_NG-kFocKN9W9QoUlO9s8m86FMVSFg7r7ToTG2j6fvGqsTvX8l9pVSXhejznzLJYyBeEgENRioWlsQB1P5j5usdqdZKl39LuIMuhKRvC1MJNeQcMlVpJHfqzMEzh0pGLq9FdhMWUVCWEjJw4Dms2EytNhlPbYhLGAtUIW9mBQC2aJjmSnX0Hp8n2keW2HLLVqE8Rv8ahScQnp-Qz-Twi0XzMkD6vJdfjn2onJn8R3HEWtXGNFGgytl42PMMvGOXZ0sj6SgXG3U1e2JglahIQ2-R31vV5f9LhO6Ho01Lqird2eSBVwmTEr1QGo8WHf8TSFiiHAUuKFYjvj6NveJhReDkYp-3zw02VASEbjNRwQgEALPOYTnrHZ2LTPNCeCE69tKEQ4OAd4nfV195qcKYGyFEleXajRLH6-Im1JCHCM-7PtRLfANmngwZz7vP7Dkz-A1WCqjNrmVD4c80bTl1S8sK29rg139Y1oFAOc9ehXujIvrCpsn_t0oZ_gC2NetoTk9eYuX1UFtzsbRRsc_53G-ZDby-Cl-VKMSAp_8m3z41iC9-XO9y-fKDt4PrYXPEj7zHyo=w1421-h799-no


Procedemos a colocar el Jumper en nuestro circuito y presionamos el botón de reset para que así el módulo ESP8266 entre en modo de Programación y esté listo para recibir el programa BLINK una vez compilado por el IDE Arduino; para tal efecto simplemente Oprimimos “como es habitual en Arduino” el Boton de subir con lo que se compilara el programa, a su vez lo cargara en el módulo ESP8266 y por último se ejecutara el programa:

V_5nXMt58PMUB8UeipF2SNfTOigVtEPkDDaEad_1bgeTljAf0FjOOFskrEFVLmpSme2jGRDkoCm2dY74UI_R5uipt1gptNsfGAhycfF_PbZcAjuYrrGcJnh-QdOhev8hbNovB0BGSZ2VbRWvq2yp0VohjOj4QfvwRMRGFAMx7Hgv_EpnYs6_JMWSfrqmyTrsXwfgdy-GbiHqSOcN9eo0GClYXIEndvOmq_oQ7SkmnkCvsNvYr5lxjW8D9_qVxwdrJXxFcagxQ89tFS5T1Bj1mVGe4oIXVt1sSrPhDEoDD1rCxjaVWfm5ztgiB1vRwRXS3eT4u9BVwGCWqwU4TXqDlMrz874gL5S31WZW7AcqGaC4MFWgmjJ-qrvj3CkQoR1EvfFu6Jn_8VU1eg15r5AFdSiEG50eiMjoJONXQK9zPUo3nBbX69A2CSO9RbT_K0dmIPfMh_oNmX-QZoKh5wNuFei0udUI6QBlw8fvK81HaLikTmuVf1R1423a3N5lYxLifQncWcMCbFKCUh1SLlxOnsfUbDS5NEVPmR4ybm8vUt4kWJEo5QAtORvCXWxuUVKjeZ7nxpJCoTmA6l7Om-ryjxE8n49J28w=w489-h600-no




Si todo ha salido bien; veremos Titilar el pequeño led que viene implementado en el módulo.

Y con esto tenemos Instalado y probado todo lo necesario para poder programar desde el IDE Arduino nuestro Modulo ESP8266 sin depender de un microcontrolador ya que todo corre en el propio microcontrolador embebido, así que lo que resta es estudiar y comprender todas las características que nos ofrece el modulo desde este ambiente.

En mi caso sigo enfrascado en aprovechar el modulo en su modalidad de comunicación TCP/IP UDP ya que debido a las características de su procesador no considero apto delegarle tareas como WEB server o cosas demasiado sofisticadas tal como lo he planteado en el aporte con el que inicie el Tema de este aporte… Y regresando al tema que nos ocupa, me resta dejar el listado del siguiente programa para cargar en el módulo ESP8266 que no hace otra cosa que Fungir como un Servidor del protocolo UDP (puerto 7777) en la dirección IP obtenida por medio del servicio DHCP del router al que se conecte, como siempre he intentado comentar la mayoría de las líneas para su mejor comprensión.

Código:
// Demostracion del Modulo ESP8266 para Escuchar/enviar mensages por un puerto UDP

#include <ESP8266WiFi.h>
#include <WiFiUdp.h>

WiFiUDP port;

char packetBuffer[255]; //variable que contendra los mensages recibidos desde la red
unsigned int localPort = 7777; //Puerto UDP para recibir/mandar mensages
String comando; //Variable donde sera almacenado el comando recibido en el mensage

void setup() {
  
  pinMode(LED_BUILTIN, OUTPUT); //en algunos ESP8266 el led integrado en el Modulo es usado para otro proposito (TX/RX) y simplemente no se aprecia la operacion del mismo cuando esta conectado a un router
  
  Serial.begin(115200); //Inicializamos el puerto serie del modulo ESP8266
  
  WiFi.begin("PELICULAS", "B215809010"); //nos conectamos al router con el SSID y password correspondientes
  port.begin(localPort); //inicamos la escucha del puerto udp
  Serial.println("");

int intentos=0;
  while (WiFi.status() != WL_CONNECTED) { //Mientras no se logre la conexion seguiremos intentando
    delay(500);
    Serial.print(".");
    intentos++;
    if (intentos > 30){
      break;
    }
  }

Serial.println("");
Serial.print("Escuchando puerto UDP en IP:"); //Mostarmos la IP asignada por el router al ESP8266
Serial.println(WiFi.localIP());
  }

void loop() {
  
  int packetSize = port.parsePacket(); //variable local que es utilizada para saber el tamaño del mensage UDP
   
   //Serial.println(packetSize); //esta linea sirve como depuracion
  
  
  if (packetSize) {// si existe un paquete de datos UDP pendiente iniciamos proceso General
    int len = port.read(packetBuffer, 255);
    if (len > 0) packetBuffer[len-1] = 0;
    
    //Serial.println(packetBuffer); //esta linea sirve como depuracion 
    
// una ves recibido el buffer mandamos un mensage de agradecimiento al remitente y el comando recibido
    port.beginPacket(port.remoteIP(),localPort);
    port.write("mensage:");
    port.write(packetBuffer);
    port.endPacket();

    comando=""; // limpiamos el contenido del string.
    
  for (int i=0;i<=packetSize;i++)// concatenamos el contenido del buffer en el string comando para su posterior procesamiento
    {
      //Serial.println(packetBuffer[i],DEC);// este comando solo sirve para depuracion para ver el contenido del buufer en decimal
     comando.concat(packetBuffer[i]);
    } // fin del for

Serial.println(comando); //mostramos el "comando" recibido

  // procesamos el comando recibido por medio de IF´s o como mejor paresca al programador
if (comando=="comando1\n") {

      Serial.println("se Ejecuto correctamente el primer comando");
    
    for (int i=0;i<=10;i++){
      digitalWrite(LED_BUILTIN, HIGH); //en algunos ESP8266 el led integrado en el Modulo es usado para otro proposito (TX/RX) y simplemente no se aprecia la operacion del mismo  cuando esta conectado a un router
        delay(10);
      digitalWrite(LED_BUILTIN, LOW);
      delay(10);
    }
      }

if (comando=="comando2\n") {
    
      Serial.println("Se Ejecuto correctamente el segundo comando");
    
    for (int i=0;i<=5;i++){
      digitalWrite(LED_BUILTIN, HIGH);
        delay(10);
      digitalWrite(LED_BUILTIN, LOW);
      delay(10);
    }
  }  
// fin del proceso de los  comandos recibidos
  
  }//final del if principal
 
 // delay(500);      
} //final de loop


Como se podrá apreciar, de manera global, el programa hace las siguientes tareas:

• Inicializar el modulo
• Conectarse a un router con un SSID y su respectiva clave de seguridad
• Especificar que estará en escucha del protocolo UDP en la IP asignada
• En caso de llegar un mensaje UDP almacenarlo en un buffer
• Avisar al remitente que se recibió el mensaje y regresarlo como agradecimiento.
• Procesar el buffer recibido con la finalidad de obtener un posible comando
• Ejecutar el comando en caso de haberlo encontrado
• Volver a la escucha del puerto UDP

Para probar el correcto funcionamiento del programa utilice como herramienta el programa UDPDEMO que deje también anexado en el primer Tema de este aporte y en la siguiente figura se puede apreciar que se cumple con el propósito principal de todo este largo escrito.

-387BStnLIO_5ixhP7mCXTAbhLZWs_WFAuf5aTBavIdoLOqAELMAdIr3MtYPJkuxz0exzQezO0s0HIgR4-l5aFgJXHmLLqNrNtsHYwoK-0isZcR7ESCrdL36jBf1kUS55JzGCopKMfY0GqW3BgIxfO97PKX5hHVlDtShqRKt43aalIC7GGcmVBVrap6zxj87Z7yZieo8ZR72Va9RDQviveeRPsbk_0M7i1i4qdrpAPX8LL0FP-1ESX-Nj-BhAbHqKr0A6d_f7DNQ7D-6kDIG8Yt5ZJHlXRvrTyThVlnSRI_JnNVFp28qhCSG8giFmnjAbRUNTn69pTW6pxmKz5c9KDT9XRylDLsbafe_0AniAEueQU4_yi_F3sZeHe_yCD-zzUcIEJf8fav761kaKOiBgYRU6Z1GE-tsQJFNPQ9bx5Mvc8687s3Xf4p6ckmI_WtS3fn6RlJvXLekty76XOVEeD66WzosItZq7Vm9A5CkZcjYig64wERzCG8mDUz5dKL3KmP4rafsLcMZzlAU3bEHt2gDOWDxe6axrB4bG7NEL7s7c1j4dkTkrnnPWNKUq8KbGZ2KJo2NBdUZ7msWyGaEW2-GsIidbgo=w934-h533-no


En el caso de la Figura anterior el Modulo ESP8266 utilizado recibió la IP 192.168.0.11 como se muestra en el “Monitor Serie” del IDE Arduino, misma que en mi programa UDPDEMO fue utilizada como dirección de destino y al escribir el “comando2” este se ejecutó como es debido.

Así que sin más explicación de mi parte, no me queda más que dejarles un cordial saludo esperando no haber causado demasiadas dudas en cuyo caso intentare despejar en la medida de mis posibilidades.

¡Hasta Pronto!
 
Última edición:
Guardar datos desde módulo ESP8266 en MySQL.

En esta ocasión es mi intención dejar documentado en el foro la manera como vengo resolviendo la necesidad de guardar datos en una base de datos MySQL desde un módulo ESP8266 el cual está programado desde el IDE de desarrollo Arduino con el CORE ESP8266 insertado en el ambiente.

Para tal fin es necesario tener un entorno o servidor el cual tenga disponibles los siguientes servicios ya sean de manera local (intranet) o en un hosting abierto (WWW):

• WEB Server
• MySQL Server
• PHP 5.6
• PhpMyAdmin

El entorno puede ser Microsoft (IIS), Linux (Apache) o cualquier combinación que se quiera (WAMPSERVER por ejemplo), en realidad lo importante es tener la disponibilidad de los servicios, en mi caso particular he probado estos tres entornos que comento para asegurar compatibilidad y he comprobado que en los tres funciona igual de bien.

php+mysqlapache.png


Ahora me corresponde indicar que la parte neurálgica del entorno será un programa en PHP que se encarga de interactuar con el servidor MySQL para poder escribir los datos, en la base de datos Mysql, que reciba desde nuestro(s) módulo(s) ESP8266 vía una petición al servidor WEB. Para tal efecto debemos comenzar por preparar nuestro entorno con los siguientes elementos:

• Base de datos en el servidor MySQL
• Programa PHP
• Programa Arduino compilado y cargado en el módulo ESP8266


Comenzamos por la base de datos, ver figura anexa, en el servidor Mysql llevara el nombre de “iot” y la tabla se llamara “esp8266” ; la tabla lleva 4 campos que son:

• direccion
• salida
• entrada
• fecha

phmyadmin.png

Toda la creación de la base datos y tabla fue realizada desde la herramienta phpMyadmin la cual facilita enormemente esta tarea.

Como segundo punto, se creó el siguiente programa “escribe.php” que se encarga de interactuar, como ya se dijo, entre las peticiones al servidor WEB y el servidor Mysql y se encuentra alojado dentro de la carpeta IOT del servidor web.

wwwiot.jpg


Y este es el listado del mismo:

PHP:
<?php

error_reporting(0); // SE DESACTIVAN LOS ERRORES con la finalidad de que si se producen no se informe al peticionario


$db = new mysqli('localhost', 'root', 'yxhjkcnm', 'iot');// nos conectamos al servidor mysql como usuario "root" contraseña "yxhjkcnm" e indicamos la base de datos "iot"


if($db->connect_errno > 0){ // verificamos si se logro la conexion de manera exitosa
    die('Imposible conectar [' . $db->connect_error . ']');
}
$direccionip = $_SERVER['REMOTE_ADDR']; //TOMAMOS LA IP DEL CLIENTE


$salida = $_GET['salida'];// se toman las variables desde el entorno de la URL (escribe.php?entrada=999&salida=000)
$entrada = $_GET['entrada'];

if ($salida==NULL) { //si desde el entorno no vienen precisada las variables entonces de inicializan en 0
	$salida=0;
}

if ($entrada==NULL) {
	$entrada=0;
}

	$sql = "SELECT * FROM `esp8266`";// seleccionamos la tabla y mandamos los parametros sql para escribir en ella
	$sql = "INSERT INTO esp8266 (direccion, salida, entrada, fecha ) VALUES('$direccionip', '$salida', '$entrada', CURRENT_TIMESTAMP )";

if(!$resultado = $db->query($sql)){ // preguntamos si se ejecutaron los comandos sql
    die('Ocurrio un error ejecutando el query [' . $db->error . ']');
}

echo "Tu IP es:$direccionip  DatoEntrada=$entrada DatoSalida=$salida"; //se imprimen los datos a manera de agradecimiento.
//echo "Dato de salida=$salida<br />";
//echo "Dato de entrada=$entrada<br />";




$db->close();// se cierra la conexion al servidor Mysql
?>



Por ultimo nos queda programar el módulo ESP8266 con el siguiente programa desde el entorno Arduino:


Código:
/*
 *  Con este programa prototipo
 *  se  puede invocar un programa PHP hospedado en un servidor web apache 
 *  enviandole las variables como parametros
 *  en este programa en particular se estara enviando las variables:
 *  salida y entrada como parametro de la requisicion URL al Servidor
 */

#include <ESP8266WiFi.h>

const char* ssid     = "PELICULAS"; //Nombre de la antena del router 
const char* password = "xyz123yxz";//Contraseña del router
const char* host = "192.168.0.8";// Servidor Apache que contiene programa PHP
int salida=0;
int entrada=0;

void setup() {
  Serial.begin(115200);
  delay(10);

  // Comenzamos por conectarnos al Router que dara servicio de Internet

  Serial.println();
  Serial.println();
  Serial.print("Conectandose a ");
  Serial.println(ssid);
  
  WiFi.begin(ssid, password);
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");

  Serial.println("Direccion IP Local: ");
  Serial.println(WiFi.localIP());
}



void loop() {
  delay(500);
  

 entrada++;
 salida++;
if (entrada>=256){
  entrada=0;
}

if (salida>=256){
  salida=0;
}



  Serial.print("Intentando conexion ");
  Serial.println(host);
  
  // utilizamos la clase WiFiClient para crear conexiones TCP
  WiFiClient client;
  const int httpPort = 80;//utilizamos el puerto 80 por default de la mayoria de los servidores web
  if (!client.connect(host, httpPort)) {
    Serial.println("conexion fallida");
    return;
  }
  
  // Ahora creamos la requisicion URL (Programa PHP que sera solicitado con sus respectivas Variables
  String url = "/iot/escribe.php?entrada="+String(entrada,DEC)+"&salida="+String(salida,DEC);
  
  Serial.print("Solicitud URL: ");
  Serial.println(url);
  
  // Hacemos la Solicitud  con los parametros necesarios al Servidor como si fuera una peticion desde un navegador
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" + 
               "Connection: close\r\n\r\n");
  unsigned long timeout = millis();
  while (client.available() == 0) {// una ves realizada la peticion esperamos por respuesta del servidor web
    if (millis() - timeout > 5000) {// si no hay respuesta por parte del servidor  detenemos la conexion
      Serial.println(">>> No hubo respuesta del host !");
      client.stop();
      return;
    }
  }
  
  // mientras exista una conexion con el servidor WEB procedemos a leer las lineas de replica y las mandamos al puerto serial 
  while(client.available()){
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }
  
  Serial.println();
  Serial.println();
  Serial.println("Conexion finalizada");
  Serial.println();
}



Con todo el entorno preparado solo nos resta comenzar a hacer pruebas de que todo esté funcionando de manera adecuada, es importante tomar en cuenta que deben adecuarse las líneas de programación en cada uno de los programas aquí mencionados con los parámetros locales de cada quien como son:

• Nombre o dirección IP del servidor WEB, MySQL, PHP
• SSID y contraseña del router inalámbrico
• Usuario y password del usuario en el servidor Mysql

En cada programa, me he tomado el detenimiento de dejar comentadas las líneas referentes a estos parámetros y deberán ser contemplados para que todo funcione de manera armoniosa, no omito también destacar que cada uno de los programas tienen comentarios casi línea a línea para saber que se está haciendo y así facilitar el entendimiento de estos a todos los compañeros foristas.

Por ultimo me corresponde indicar que la interacción real entre el módulo ESP8266 y el programa PHP es gracias a que se pueden mandar parámetros o variables dentro de una petición URL, las cuales el programa PHP obtiene y utiliza, en este caso, para dejarlas dentro de la tabla MySQL; lo que quiero decir es que una vez montados los servicios WEB+PHP+Mysql y el programa “escribe.php” alojado de manera adecuada y se invoca desde la barra de direcciones de cualquier navegador, lograre escribir en la tabla “esp8266” los valores de 999 y 000

//192.168.0.8/iot/escribe.php?entrada=999&salida=000

Una vez que se entiende lo anterior, solo me resta decir que desde el programa en arduino la línea que dice:

String url = "/iot/escribe.php?entrada="+String(entrada,DEC)+"&salida="+String(salida,DEC);

Es la que invoca al programa “escribe.php” con los parámetros que se quieran.

En este programa ejemplo solo se escriben las variables, entradas y salida desde 0 al 255 con incrementos de uno en uno de manera reiterativa, con la finalidad de hacer un test exhausto a la base de datos y así verificar que no hay pérdida de datos. Este mismo programa lo he montado hasta en 10 módulos ESP8266 (que son con los que cuento) los cuales he colocado en diferentes lugares, no solo de mi taller sino que gracias a que tengo disponible un servicio WWW, los he montado en casas de amigos y familiares con muy buenos resultados, cada módulo lo identifico por la IP de origen y la hora (del servidor) en que fue recibida y que guarda el programa PHP, lo cual es sobreentendida la utilidad de esto.

Sin más, dejo mis más cordiales saludos.
 
Última edición:
Que tal tengo un ESP8266, integrado en el módulo NodeMCU v1.0.

El problema es que no tengo el controlador del dispositivo, en el administrado de dispositivos me dice que no están instalado los controladores del dispositivo (código 28)y en el ide de arduino no me deja asignarle un puerto

instale estos drivers para windows de est link https://github.com/nodemcu/nodemcu-devkit/tree/master/Drivers
el modulo si funciona ya que lo he probado en una laptop de un compañero, pero mi compu no lo lee agradecería mucho su ayuda, lo que se me ocurre es que no intale bien los drivers pero cualquier sugerencia se agradece
 
Que tal tengo un ESP8266, integrado en el módulo NodeMCU v1.0.

El problema es que no tengo el controlador del dispositivo, en el administrado de dispositivos me dice que no están instalado los controladores del dispositivo (código 28)y en el ide de arduino no me deja asignarle un puerto

instale estos drivers para windows de est link https://github.com/nodemcu/nodemcu-devkit/tree/master/Drivers
el modulo si funciona ya que lo he probado en una laptop de un compañero, pero mi compu no lo lee agradecería mucho su ayuda, lo que se me ocurre es que no intale bien los drivers pero cualquier sugerencia se agradece

En el caso de contar con windows 8 y 10, automáticamente instala los drivers desde internet, comentas que en en la laptop de tu compañero funciona OK ¿que hizo tu compañero o tu para que funcionara?

En el administrador de dispositivos de windows (de donde obtuviste la información del código 28) esta la pestaña de "detalles" y luego en propiedades puedes obtener el ID de hardward; con ese dato buscar en san GOOGLE y de ahí tendrás la pauta de saber que tipo de puerto USB-Serial tiene tu modulo y conseguir el driver correspondiente.

Saludos
 
Buenas.

Primero que nada, muchísimas gracias por el aporte me está sirviendo mucho para aprender.

Te quería hacer una consulta, hice toda la conexión PIC 16F628A -> ESP8266 pero resulta que en cuanto manda el primer comando AT no recibe nunca el "OK", me estoy volviendo loco.

Ya probé de todo. Lo ultimo que hice fue poner el ESP8266 en 9600 bauds porque antes lo tenia en 115200 aunque no debería haber diferencia siempre y cuando lo cambie en el código. Algún consejo o ayuda de que puede estar pasando? El Cristal que usas es de 4Mhz?

Gracias!

Saludos.
 
Hola ZeroVB, te comento que me paso lo mismo y probe ya todo lo que hiciste, el error lo encontre en este codigo que esta invertido: va 13 ,10 en lugar de 10,13 , hace la prueba con los primeros comandos y te vas a dar cuenta, hace un parpadeo de leds entre cada linea. Espero que te sirva.

HSerOut ["AT", 13,10]'Enviamos comando de Atencion "AT" para verificar comunicacion con modulo ESP8266
' anule HSerOut ["AT",10, 13]'Enviamos comando de Atencion "AT" para verificar comunicacion con modulo ESP8266

HSerIn [Wait ("OK"), DATOEN]' Esperamos agradecimiento "OK" del modulo
HSerOut ["AT+CWMODE=3",13,10]'Enviamos comando para colocar el modulo ESP8266 en modo "BOTH"
HSerIn [Wait ("OK"), DATOEN]' Esperamos agradecimiento "OK" del modulo
 
Hola ZeroVB, te comento que me paso lo mismo y probe ya todo lo que hiciste, el error lo encontre en este codigo que esta invertido: va 13 ,10 en lugar de 10,13 , hace la prueba con los primeros comandos y te vas a dar cuenta, hace un parpadeo de leds entre cada linea. Espero que te sirva.

HSerOut ["AT", 13,10]'Enviamos comando de Atencion "AT" para verificar comunicacion con modulo ESP8266
' anule HSerOut ["AT",10, 13]'Enviamos comando de Atencion "AT" para verificar comunicacion con modulo ESP8266

HSerIn [Wait ("OK"), DATOEN]' Esperamos agradecimiento "OK" del modulo
HSerOut ["AT+CWMODE=3",13,10]'Enviamos comando para colocar el modulo ESP8266 en modo "BOTH"
HSerIn [Wait ("OK"), DATOEN]' Esperamos agradecimiento "OK" del modulo

Buenas.

Muchas gracias por la respuesta!

Lo acabo de hacer y ahora veo que el ESP8266 hace un parpadeo en el led azul indicando pero no me pasa por el HSerIn "OK".

De que manera tenés conectado el modulo wifi?

Yo así sin el GPIO0 a masa y sin todo el tema ese del switch, solo el CH_PD a Vcc y bueno, con el RX al TX del Pic y el TX al TX mediante una resistencia de 100ohm como está en el circuito.

esp8266-push-button-web.png


Saludos.
 
Hola, te tiene que hacer la secuencia de leds al final de este comando
HSerOut ["AT+CIPSEND", 13,10]' Comenzamos inicio de transmicion y recepcion de datos
si hace la secuencia de led es que programo correctamente el esp8266.
La forma de conexion es segun el esquema si.
Te recomiendo que hagas un parpadeo de leds entre cada instruccion para saber si esta pasando a la siguiente.
 
Hola, te tiene que hacer la secuencia de leds al final de este comando
HSerOut ["AT+CIPSEND", 13,10]' Comenzamos inicio de transmicion y recepcion de datos
si hace la secuencia de led es que programo correctamente el esp8266.
La forma de conexion es segun el esquema si.
Te recomiendo que hagas un parpadeo de leds entre cada instruccion para saber si esta pasando a la siguiente.

Lo que hice fue poner una parpadeo de LED en estas lineas:

HSerOut ["AT", 13,10]

Hight LED1
DelayMS 1000
Low LED1

HSerIn [Wait ("OK"), DATOEN]
HSerOut ["AT+CWMODE=3", 13,10]

Hight LED1
DelayMS 1000
Low LED1

HSerIn [Wait ("OK"), DATOEN]

Por el primer "AT" pasa pero no llega al segundo, es como que se quedara esperando el Wait que nunca llega, supongo que será porque no lo está leyendo bien, pero la verdad que no encuentro cual es el problema.
 
No estas recibiendo la respuesta del esp8266 o esta mal la velocidad y devuelve cualquier cosa menos ok, yo lo puse a los 2 a 9600 baudios, mas tarde te paso fotos de como lo conecte.
 
No estas recibiendo la respuesta del esp8266 o esta mal la velocidad y devuelve cualquier cosa menos ok, yo lo puse a los 2 a 9600 baudios, mas tarde te paso fotos de como lo conecte.

Como tenés conectados los pines del ESP8266?

Otra cosa que estuve viendo son los firmwares del ESP8266, se necesita alguno en particular?

Gracias!
 
Última edición:
Con el firmware que viene ya funciona con comandos AT, te adjunto fotos, yo use con un par de resistencias en rx y tx de 220 ohm, si tenes dudas podes invertir para provar esos dos cables nomas, no vas a quemar nada, eso si no inviertas la corriente de negativo y positivo porque quemas el esp8266.
 
Última edición:
No us cristal, uso oscilador interno a 4Mhz, y a 9600 baudios el serial, las conexiones son tal cual el ejemplo y forma de conectar el esp8266, y ch_pd a vcc sino no prende.
Podes ver como tomar en la pc en el puerto serial lo que devuelve el esp8266, yo hice eso para saber que estaba pasando, y entonces ver si te devuelve ok despues de cada instruccion, solo anula la instrucción HSerIn despues de cada instruccion.
Saludos
 
Atrás
Arriba