ChipKIT Uno32 es una plataforma de prototipado de hardware de código abierto basada en Arduino, pero con un microcontrolador Microchip PIC32. Es compatible con muchas placas de expansión de Arduino, ejemplos de código, materiales de referencia y otros recursos, lo que la convierte en una placa fácil de usar y fácilmente ajustable para POCs y aplicaciones de IoT industrial de bajo impacto.
Al final de esta guía, podrás enviar datos a Ubidots utilizando el chipKIT Uno32.
Requisitos
Algunos cables de hembra a macho.
Paso a Paso
Configurando el IDE de Arduino
Enviando (POST) datos a Ubidots
Resumen
1. Configurando el IDE de Arduino
1. Para poder trabajar con la plataforma chipKIT en el IDE de Arduino, necesitarás instalar la plataforma chipKIT utilizando el Administrador de Placas preconfigurado de Arduino. Si no estás familiarizado con la adición de una placa en el IDE de Arduino, simplemente consulta este artículo para obtener orientación adicional.
La URL del Administrador de Placas para chipKIT es:
https://github.com/chipKIT32/chipKIT-core/raw/master/package_chipkit_index.json
2. Con la plataforma chipKIT instalada, selecciona el dispositivo chipKIT con el que estás trabajando. En este tutorial, estamos trabajando con un “chipKIT UNO”. Para seleccionar tu placa desde el IDE de Arduino, selecciona Herramientas –> Placa “chipKIT UNO”.
2. Enviando (POST) datos a Ubidots
Con el siguiente código de ejemplo podrás publicar las lecturas tomadas del pin ANALOG A0 del chipKIT UNO a la Plataforma de Desarrollo de Aplicaciones IoT de Ubidots.
1. Para POSTear tu primer valor en Ubidots, abre el IDE de Arduino y pega el código de ejemplo a continuación. Una vez que hayas pegado el código, necesitarás asignar los siguientes parámetros:
El SSID del WiFi y la Contraseña de la red
El ID de Variable de las variables que estarás actualizando en Ubidots. Si no tienes los IDs de las variables, simplemente crea variables de shell y luego actualiza tu firmware para contener los IDs de Variable correctos. Para localizar los IDs de variable, simplemente haz clic aquí.
#include <Wprogram.h>#include <Wire.h>#include <WiFiShieldOrPmodWiFi_G.h> // Esto es para el MRF24WGxx en un pmodWiFi o WiFiShield#include <DNETcK.h>#include <DWIFIcK.h>String token="xxxxxxxxxxx";String idPot="xxxxxxxxxxx";char * szIPServer = "industrial.api.ubidots.com"; // servidor al que conectarseunsigned short portServer = 80;const char * szSsid = "xxxxxx";//SSIDconst char * szPassPhrase = "atommed2014";//frase de contraseña#define USE_WPA2_PASSPHRASE //Elige la seguridad que usa tu red. //#define USE_WPA2_KEY //#define USE_WEP40 //#define USE_WEP104 //#define USE_WF_CONFIG_H#if defined(USE_WPA2_PASSPHRASE) #define WiFiConnectMacro() DWIFIcK::connect(szSsid, szPassPhrase, &status)#elif defined(USE_WPA2_KEY) DWIFIcK::WPA2KEY key = { 0x27, 0x2C, 0x89, 0xCC, 0xE9, 0x56, 0x31, 0x1E, 0x3B, 0xAD, 0x79, 0xF7, 0x1D, 0xC4, 0xB9, 0x05, 0x7A, 0x34, 0x4C, 0x3E, 0xB5, 0xFA, 0x38, 0xC2, 0x0F, 0x0A, 0xB0, 0x90, 0xDC, 0x62, 0xAD, 0x58 }; #define WiFiConnectMacro() DWIFIcK::connect(szSsid, key, &status)#elif defined(USE_WEP40) const int iWEPKey = 0; DWIFIcK::WEP40KEY keySet = { 0xBE, 0xC9, 0x58, 0x06, 0x97, // Clave 0 0x00, 0x00, 0x00, 0x00, 0x00, // Clave 1 0x00, 0x00, 0x00, 0x00, 0x00, // Clave 2 0x00, 0x00, 0x00, 0x00, 0x00 }; // Clave 3 #define WiFiConnectMacro() DWIFIcK::connect(szSsid, keySet, iWEPKey, &status)#elif defined(USE_WEP104) const int iWEPKey = 0; DWIFIcK::WEP104KEY keySet = { 0x3E, 0xCD, 0x30, 0xB2, 0x55, 0x2D, 0x3C, 0x50, 0x52, 0x71, 0xE8, 0x83, 0x91, // Clave 0 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Clave 1 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Clave 2 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; // Clave 3 #define WiFiConnectMacro() DWIFIcK::connect(szSsid, keySet, iWEPKey, &status)#elif defined(USE_WF_CONFIG_H) #define WiFiConnectMacro() DWIFIcK::connect(0, &status)#else // sin seguridad - ABIERTO #define WiFiConnectMacro() DWIFIcK::connect(szSsid, &status)#endifconst int sampleWindow=50;unsigned tStart = 0;double value;typedef enum //Estados de la máquina de estados{ NONE = 0, CONNECT, TCPCONNECT, WRITE, READ, CLOSE, DONE,} STATE;STATE state = CONNECT;TcpClient tcpClient;void setup() { Serial.begin(9600); Serial.println("WiFiTCPEchoClient 1.0"); Serial.println("Digilent, Copyright 2012"); Serial.println("Espera unos segundos");}void loop() { unsigned long startMillis= millis(); // Inicio de la ventana de muestreo double peakToPeak = 0; // nivel pico a pico double signalMax = 0; double signalMin = 1024; while (millis() - startMillis < sampleWindow) { value = analogRead(A0); if (value < 1024) // descartar lecturas espurias { if (value > signalMax) { signalMax = value; // guardar solo los niveles máximos } else if (value < signalMin) { signalMin = value; // guardar solo los niveles mínimos } } } value = ((signalMax - signalMin)* 3.3) / 1024; //a voltios value=20*log10(value*50000);//a dBs if(save_value(String(int(value)),idPot)) { Serial.println("valor del potenciómetro en Ubidots:"); Serial.println(value); } delay(1000);}boolean save_value(String value,String idvariable)//Enviar valor a Ubidots{ int cbRead=0; String var = "{\"value\":"+ value + "}"; int num = var.length(); String le = String(num); String message = "POST /api/v1.6/variables/"+idvariable+"/values HTTP/1.1\nContent-Type: application/json\nContent-Length: "+le+"\nX-Auth-Token: "+token+"\nHost: industrial.api.ubidots.com\n\n"+var+"\n\n"; byte rgbWriteStream[message.length()] ; message.getBytes(rgbWriteStream,message.length() + 1); int cbWriteStream = sizeof(rgbWriteStream); state_machine(rgbWriteStream,cbWriteStream); return true;}boolean state_machine(byte rgbWriteStream[], int cbWriteStream)//Manejar la conexión TCP{ byte rgbRead[1024]; int conID = DWIFIcK::INVALID_CONNECTION_ID; DNETcK::STATUS status; for(;;) { int cbRead = 0; switch(state) { case CONNECT: if((conID = WiFiConnectMacro()) != DWIFIcK::INVALID_CONNECTION_ID) { Serial.print("Conexión creada, ConID = "); Serial.println(conID, DEC); state = TCPCONNECT; } else { Serial.print("No se pudo conectar, estado: "); Serial.println(status, DEC); state = CLOSE; } break; case TCPCONNECT: DNETcK::begin(); tcpClient.connect(szIPServer, portServer); state = WRITE; break; case WRITE: if(tcpClient.isConnected()) { Serial.println("Conexión establecida"); tcpClient.writeStream(rgbWriteStream, cbWriteStream); Serial.println("Bytes leídos de vuelta:"); state = CLOSE; tStart = (unsigned) millis(); } break; case CLOSE: tcpClient.close(); state = DONE; break; case DONE: state = TCPCONNECT; return cbRead; default: break; } DNETcK::periodicTasks(); // mantener la pila viva en cada paso del bucle() }}
2. A continuación, Verifica tu código dentro del IDE de Arduino. Para hacer esto, en la esquina superior izquierda de nuestro IDE de Arduino verás el ícono de "Marca de Verificación"; presiónalo para verificar tu código.
3. Sube el código a tu chipKIT UNO. Para hacer esto, elige el ícono de "flecha derecha" junto al ícono de "marca de verificación".
4. Para verificar la conectividad del dispositivo y los datos enviados, abre el monitor serial seleccionando el ícono de "lupa" en la esquina superior derecha del IDE de Arduino para ver los registros de conectividad.
NOTA: Si no se ve ninguna respuesta en el monitor serial, intenta desconectar el dispositivo y luego volver a conectarlo. Además, asegúrate de que la velocidad de baudios del monitor serial esté configurada a la misma que se especifica en tu código 9600
En este punto, las variables asignadas en el código estarán actualizando las lecturas analógicas tomadas de la placa.
3. Resumen
Con este simple tutorial puedes POSTear datos a Ubidots con la facilidad del IDE de Arduino y un chipKIT UNO.
¡Ahora es momento de crear Tableros de Ubidots para visualizar tus datos y desplegar tu solución IoT! :)
Otros lectores también han encontrado útil...