Ir al contenido principal
Todas las coleccionesConecta tus dispositivos
Conectar la placa de desarrollo STM32 Nucleo-64 a Ubidots a través de Wi-Fi
Conectar la placa de desarrollo STM32 Nucleo-64 a Ubidots a través de Wi-Fi

Conecta tu STM32 Nucleo-64 a Ubidots y lanza tus soluciones de seguimiento y monitoreo de activos.

Sergio M avatar
Escrito por Sergio M
Actualizado hace más de 2 meses

La STM32 Nucleo-64 es una placa asequible y flexible que combina diversas combinaciones de rendimiento, consumo de energía y características para optimizar sus aplicaciones conectadas. El soporte de conectividad Arduino™ Uno V3 y los conectores ST morpho le permiten expandir fácilmente la funcionalidad de la plataforma de desarrollo abierta de STM32 para implementar dispositivos para el seguimiento y monitoreo de carga o proyectos simples de automatización del hogar como medidores de flujo de agua o monitoreo eléctrico.

La familia STM32 ofrece un menú extraordinario de opciones, incluidos núcleos ARM Cortex-M, lo que nos brinda la flexibilidad para encontrar el STM32 perfecto para nuestras aplicaciones. Y las diversas series de MCU de la familia STM32 permiten varias opciones de alto rendimiento, de uso general y de ultra bajo consumo.

En la siguiente guía, presentaremos el NucleoL476RG de la serie de MCU STM32L4, que ofrece una excelente opción para ABC SOLUTIONs. Para obtener información adicional sobre la serie de MCU STM32L4, consulte los materiales del producto.

Requisitos

Configuración

Para programar el microcontrolador, simplemente acceda al compilador en línea MBed OS; para acceder a su cuenta o regístrese, haga clic aquí.

  1. Adjunte el X-Nucleo-IDW01M1 (escudo Wi-Fi) sobre la placa NucleoL476RG con el conector Morpho:

Su ensamblaje de dispositivo completo se verá como sigue:

NOTA IMPORTANTE: Algunos escudos X-Nucleo-IDW01M1 requieren una pequeña modificación adicional para conectar completamente el hardware. ¿Verifique si su dispositivo tiene un resistor R21? Si es así, es posible que deba quitar el resistor R21 para conectar completamente el escudo con la placa.

2. Vaya al sitio de desarrolladores de Mbed OS, presione Hardware > Componentes. Luego, en el menú de comunicación, presione Wi-Fi para filtrar la búsqueda y seleccione el X-Nucleo-IDW01M1.

3. Luego, "Importar programa" del ejemplo Hola Mundo.

Espere un par de segundos hasta que se abra el compilador. Luego, en la ventana de importación del proyecto, cambie el nombre de importación a "Ubidots_test" y marque "Actualizar todas las bibliotecas a la última revisión", para completar presione el botón de importación:

4. Para verificar, compruebe si la placa Nucleo-L476RG está disponible en el panel superior derecho del compilador.

5. A continuación, verifique que las bibliotecas "NetworkSocketAPI" y "X_NUCLEO_IDW01M1v2" estén importadas en el proyecto.

6. Luego, abra el archivo main.cpp y reemplácelo todo el contenido de main.cpp con el código proporcionado a continuación:

Una vez que haya reemplazado correctamente el código con el de abajo, actualice sus credenciales de Wi-Fi, asigne su TOKEN de Ubidots, y asigne el "NucleoL476" como la etiqueta del dispositivo donde se indica en el código. Tenga en cuenta que este código es solo para fines de ejemplo y debe desarrollarse según sus especificaciones exactas. En este código enviaremos

/*	Copyright (C) 2017 romain reicher    Este programa es software libre: puede redistribuirlo y/o modificarlo    bajo los términos de la Licencia Pública General de GNU tal como fue publicada por    la Free Software Foundation, ya sea la versión 3 de la Licencia, o    (a su elección) cualquier versión posterior.    Este programa se distribuye con la esperanza de que sea útil,    pero SIN NINGUNA GARANTÍA; sin siquiera la garantía implícita de    COMERCIABILIDAD o ADECUACIÓN PARA UN PROPÓSITO PARTICULAR.  Vea la    Licencia Pública General de GNU para más detalles.    Debería haber recibido una copia de la Licencia Pública General de GNU    junto con este programa.  Si no, vea <http://www.gnu.org/licenses/>.        Acerca de     ---------------------------------------------------------------------	Enviar valores de sensores a Ubidots.	Este ejemplo envía 3 variables a Ubidots.		- STM32L476 VBAT/3 canal interno en mV		- Sensor de temperatura interno STM32L476 en C		- El estado del botón de usuario a bordo (azul) en NucleoL476RG 	Utilice NucleoL476RG con el escudo wifi X-Nucleo-IDW01M1v2 	Nota importante: Algunos escudos wifi IDW01M1 tenían el resistor R21 montado					que interfiere con el programador STLink/SWD. 					Por favor, desmonte R21 para solucionarlo.     romain reicher    Fecha     :	20/09/2017    Revisión :  v0.1  */#include "mbed.h"#include "SpwfInterface.h"  #include "TCPSocket.h"/* Configuración del Punto de Acceso Wifi */ #define AP_SSID         "YOUR_WIFI_SSID"			#define AP_PASSWORD     "YOUR_WIFI_PASSWORD"#define UBIDOTS_SERVER  "industrial.api.ubidots.com"#define UBIDOTS_PORT    80#define UBIDOTS_TOKEN   "YOUR_UBIDOTS_TOKEN"#define UBIDOTS_DEVICE  "YOUR_UBIDOTS_LABEL_DEVICE"/* Recursos de comunicación */SpwfSAInterface spwf(D8, D2, false);    Serial pc(USBTX, USBRX);/* Recursos digitales */DigitalOut myLed(LED1);DigitalIn myButton(USER_BUTTON);/* Recursos analógicos */AnalogIn adc_vbat(ADC_VBAT);    // VBAT / 3 interno al canal ADCAnalogIn adc_temp(ADC_TEMP);    // Sensor de Temp Interno al Canal ADC/* Variables globales */float temp = adc_temp.read() * 100;		// Convertido en Cfloat batt = adc_vbat.read() * 30000;   // Convertido en mV  bool status = false;/**  * @brief  Programa principal  * @param  Ninguno  * @retval Ninguno  */int main() {    /* Configurar la velocidad de baudios del Serial */    pc.baud(115200);    	/* Actualizar el estado de la variable dependiendo del estado del USER_BUTTON */    if (myButton == 0)        status = true;    else        status = false;        TCPSocket socket(&spwf);    char sendBuffer[256];    char message[64];    int err;	    /* ######################## CONEXIÓN WIFI ######################## */    pc.printf("IDW01M1 NetworkSocketAPI TCP Client Ubidots\r\n");    pc.printf("Conectando a AP\r\n");        //* Conectar al punto de acceso wifi */        if(spwf.connect(AP_SSID, AP_PASSWORD, NSAPI_SECURITY_WPA2))     {              pc.printf("Ahora conectado\r\n");    }     else    {        pc.printf("Error al conectar al AP.\r\n");        return -1;    }           /* #################### OBTENER INFORMACIÓN DE CONEXIÓN ######################## */        /* Obtener e imprimir parámetros de conexión de red ip y dirección mac */       const char *ip = spwf.get_ip_address();    const char *mac = spwf.get_mac_address();        pc.printf("La dirección IP es: %s\r\n", ip ? ip : "Sin IP");    pc.printf("La dirección MAC es: %s\r\n", mac ? mac : "Sin MAC");        /* ##################### UBIDOATS ENVIAR DATOS ######################### */    printf("Enviando datos HTTP a Ubidots...\r\n");     /* Abrir un socket, crear una conexión TCP a Ubidots */    err = socket.connect(UBIDOTS_SERVER, UBIDOTS_PORT);     if (err!=0)     {      pc.printf("\r\nNo se pudo conectar al Socket, err = %d!!\r\n", err);       return -1;    }     else         pc.printf("\r\nconectado al servidor host\r\n");         /* Construir el contenido del comando HTTP */    sprintf(message, "{\"temperature\": %0.2f, \"battery\": %0.2f, \"status\": %d}", temp, batt, (int)status);    printf("Longitud del contenido = %d\r\n", (int)strlen(message));        /* Construir comando HTTP para enviar */    sprintf(sendBuffer, "POST /api/v1.6/devices/%s/?token=%s HTTP/1.1\r\nHost: industrial.api.ubidots.com\r\nContent-Type: application/json\r\nContent-Length: %d\r\n\r\n%s", UBIDOTS_DEVICE, UBIDOTS_TOKEN, (int)strlen(message),message);     pc.printf("Comando HTTP %s\r\n", sendBuffer);    wait(2.0);         /* Enviar solicitud http a Ubidots */     int scount = socket.send(sendBuffer, (int)strlen(sendBuffer));    printf("enviado %d [%.*s]\r\n", scount, strstr(sendBuffer, "\r\n") - sendBuffer, sendBuffer);    /* Recibir una respuesta http simple e imprimir la línea de respuesta */    char respBuffer[64];    int rcount = socket.recv(respBuffer, sizeof respBuffer);    printf("recibido %d [%.*s]\r\n", rcount, strstr(respBuffer, "\r\n") - respBuffer, respBuffer);    /* Cerrar el socket para devolver su memoria y bajar la interfaz de red */    pc.printf("Cerrar Socket\r\n");    socket.close();        /* Desconectar */    pc.printf("Desconectar Wifi\r\n");    spwf.disconnect();    wait(1.0);    pc.printf("Hecho\r\n");    myLed = 0;            while(1)     {		myLed = !myLed;		wait(1.0);    }}

7. Cuando el código esté actualizado con los parámetros mencionados anteriormente, presione el botón "compilar" para finalizar este paso:

  • La compilación generará un archivo BIN, descárguelo y guárdelo para más tarde.

8. A continuación, necesitamos cargar el archivo BIN en la placa. Para hacerlo, debe instalar el controlador STLink según el sistema operativo de su computadora. (Para una descarga rápida, consulte aquí.)

9. Ahora, conecte el mini USB de Nucleo a su computadora.

10. Luego cargue el archivo BIN en la placa. La placa aparecerá como un ícono de unidad USB, así que simplemente arrastre y suelte el archivo BIN previamente descargado en la unidad USB asignada a la placa; para obtener detalles adicionales, consulte esta guía.

Además, podrá depurar cada paso del programa y visualizar la respuesta para la solicitud HTTP utilizando una consola de terminal. Para hacer esto, anote el Puerto Com Virtual asignado por su sistema operativo y abra un Terminal Serial (como Teraterm o Putty) con las especificaciones a continuación:

  • Velocidad de baudios: 115200

  • Bits de datos: 8

  • Bits de parada: 1

  • Xon/Xoff: Deshabilitar

11. Ahora su dispositivo está conectado con Wifi y puede mostrar estado, temperatura y batería. Además, utilizando el código proporcionado, se generará automáticamente un nuevo dispositivo en su cuenta de Ubidots con el nombre asignado desde el código y contendrá estas 3 variables en su panel:

  • La variable de Estado es un booleano y muestra el estado del botón azul del usuario en la placa Nucleo- un 0 en Ubidots significa que la luz azul estará apagada y cuando se presiona el botón, la luz se iluminará y se enviará una variable 1 a Ubidots para visualización.

  • La variable de Temperatura se actualiza con el sensor de temperatura interno STM32 conectado al ADC

  • La variable de Batería se actualiza con el canal ADC interno VBAT / 3

Para visualizar su trabajo, vaya a su cuenta de Ubidots y seleccione "Dispositivos":

Resultados

La placa STM32 Nucleo-64 es una opción versátil para casi cualquier aplicación de IoT. Con la capacidad de conectar diferentes escudos y comprar diferentes especificaciones de memoria y pinout, este hardware puede resolver la mayoría, si no todas, de sus implementaciones de IoT requeridas. Desde el seguimiento de las condiciones de carga mientras se envían a través del país o monitoreando la velocidad de flujo de agua para el hospital local, la STM32 Nucleo-64 puede hacerlo.

Usando este simple tutorial, ahora puede conectar su STM32 Nucleo-64 a Ubidots y desplegar sus aplicaciones con facilidad. Si necesita recursos adicionales para configurar su dispositivo o desplegar sus aplicaciones, consulte el Centro de Ayuda de Ubidots con cualquier duda.

¡Feliz Hackeo! :)

¿Ha quedado contestada tu pregunta?