Paso 5: Obtener el código listo
Abajo se encuentra un snipet de código utilizado. Tenga en cuenta que también es un LED y botón en el código junto con la integración con bases avanzadas.
Completo código para el GPS, sensor de pasillo y LEDs sus en https://github.com/tsmilesagain/safety_holster
#include "mraa.hpp"
#include "UdpClient.hpp"
#include < grove.h >
#include < signal.h >
#include < ublox6.h >
#include < a110x.h >
#include < stdio.h >
#include < curl/curl.h >
#include < iostream >
#include < sstream >
#include < cadena >
uso de espacio de nombres upm; usar namespace std;
const size_t bufferLength = 256;
definir el nodo "localhost"
#define servicio "41234"
#define COMP_NAME "temperatura"
int main() {}
Crear el objeto Grove LED usando pin GPIO 4
UPM::GroveLed * LEDPlataforma = new upm::GroveLed(4);
UPM::GroveLed * LEDUFO = nuevo upm::GroveLed(3);
crear un objeto de entrada analógico de MRAA usando pin A0
MRAA::AIO * a_pin = new mraa::Aio(0);
Crear el objeto de botón mediante pin GPIO 8
UPM::GroveButton * botón = nuevo upm::GroveButton(8);
Crear una instancia de un dispositivo de Ublox6 en el uart 0.
UPM::Ublox6 * nmea = nuevo upm::Ublox6(0);
int gunDrawn = 100;
int magFieldAvg = 0;
int magFieldCurrent = 0;
int magField [10];
int tempIndex = 0;
int numSamples = 2;
tempData cadena;
comprobar que estamos corriendo en Galileo o Edison
plataforma de mraa_platform_t = mraa_get_platform_type();
Si ((plataforma! = MRAA_INTEL_GALILEO_GEN1) & & (plataforma! = MRAA_INTEL_GALILEO_GEN2) & & (plataforma! = MRAA_INTEL_EDISON_FAB_C))
{std::cerr << "Plataforma no soportado, saliendo" << std::endl;
volver MRAA_ERROR_INVALID_PLATFORM; }
Leer datos del sensor hall
Si (a_pin == NULL)
{std::cerr << "No puede crear el objeto mraa::Aio, salir" << std::endl;
volver MRAA_ERROR_UNSPECIFIED; }
Instalación GPS
Asegúrese de que el puerto se inicializa correctamente. 9600 baudios es la opción predeterminada.
Si (! nmea -> setupTty(B9600))
{cerr << "Error de parámetros de configuración tty puerto" << endl;
retorno 1; }
Instalación de rizo
siguió este ejemplo rizo: http://curl.haxx.se/libcurl/c/http-post.html
CURL * curl;
Res de CURLcode;
En windows, esto será init lo winsock
curl_global_init(CURL_GLOBAL_ALL);
obtener un identificador de enrollamiento
Curl = curl_easy_init();
En primer lugar configurar la URL que está a punto de recibir nuestros correos. Esta URL puede
al igual que un http://curl.haxx.se/libcurl/c/http-post.html si eso es lo que debe recibir el
datos.
curl_easy_setopt (Rizo, CURLOPT_URL, "https://flickering-inferno-5440.firebaseio.com/data.json");
Esto sólo se pretende recoger los datos NMEA y no procesarlo
debe ver la salida en consola
char nmeaBuffer [bufferLength];
while(1)
{uint16_t pin_value = a_pin -> read();
magFieldAvg = 0;
magField [magFieldCurrent ++] = pin_value;
Si (magFieldCurrent > = numSamples)
{magFieldCurrent = 0;}
para (int i = 0; i < numSamples; i ++
{magFieldAvg += magField [i];}
magFieldAvg = numSamples;
Sleep(1);
if(magFieldAvg < gunDrawn)
{LEDPlataforma -> off();
LEDUFO -> on(); }
Else {}
Si (nmea -> {dataAvailable())}
int rv = nmea -> readData (nmeaBuffer, bufferLength);
Si (rv > 0) {}
escribir (1, nmeaBuffer, rv);
macros << nmeaBuffer << std::endl; }
Else {}
algunos especie de lectura error de
cerr << "Lee puerto" error. << endl;
rotura;
}
curl_easy_setopt (Rizo, CURLOPT_POSTFIELDS, "{\"gunDrawn\":\"true\ "}");
Realizar la solicitud, res obtendrá el código de retorno
res = curl_easy_perform(curl);
Comprobación de errores
Si (res! = CURLE_OK)
fprintf (stderr, "error de curl_easy_perform(): %s\n", curl_easy_strerror(res));
}
Añadir algunos LED
LEDPlataforma -> on();
LEDUFO -> off(); }
Si (botón -> value() == 1)
{break;}
}
Eliminar el objeto Grove LED
LEDUFO -> off();
LEDPlataforma -> off();
eliminar LEDUFO;
eliminar LEDPlataforma;
eliminar a_pin;
eliminar botón;
eliminar nmea;
volver MRAA_SUCCESS; }