Användning av GPS, hall sensor, lysdioder och Firebase med Edison (6 / 10 steg)
Steg 6: Redo koden
< stark > den fullständiga koden är listade på < / strong >< en href = "https://github.com/dtorczynski/safety_holster" rel = "nofollow" > https://github.com/dtorczynski/safety_holster</a><br>Bellow är full cpp koden som används för hall och gps-sensor. Observera att det också finns en LED och knappen som används i koden tillsammans med integration med FireBase.
/ * < Br > * författare: Thomas Lyet
< thomas.lyet
*
* Copyright (c) 2015 Intel Corporation.
*
* Tillstånd beviljas härmed, gratis, till någon person
* en kopia av denna programvara och tillhörande dokumentationsfiler (den
* "Programvara"), i programvaran utan begränsning, inklusive
* utan begränsning rättigheter att använda, kopiera, ändra, sammanfoga, publicera,
* fördela, underlicensiera eller sälja kopior av programvaran, och att
* tillåta personer som programvaran är inredda för att göra det, med förbehåll för
* följande villkor:
*
* Ovanstående copyrightmeddelande och detta tillstånd tillkännagivande skall
* ingår i alla kopior eller betydande delar av programvaran.
*
* PROGRAMVARAN TILLHANDAHÅLLS "I BEFINTLIGT SKICK", UTAN GARANTIER AV NÅGOT SLAG,
* UTTRYCKTA ELLER UNDERFÖRSTÅDDA, INKLUSIVE MEN INTE BEGRÄNSAT TILL GARANTIER AVSEENDE
* SÄLJBARHET, LÄMPLIGHET FÖR ETT SÄRSKILT ÄNDAMÅL OCH
* ICKE-INTRÅNG. UNDER INGA OMSTÄNDIGHETER SKALL FÖRFATTARNA ELLER UPPHOVSRÄTTSINNEHAVARE VARA
* ANSVARIG FÖR EVENTUELLA ANSPRÅK, SKADOR ELLER ANNAT ANSVAR, VARE SIG I EN
* AV KONTRAKTET, KRÄNKNING ELLER ANNAT, SOM UPPSTÅR FRÅN, AV ELLER I ANSLUTNING
* MED PROGRAMVARAN ELLER ANVÄNDNING ELLER ANDRA MELLANHAVANDEN I PROGRAMVARAN.
*/
IP-adress 10.60.0.145
#include "mraa.hpp" < /thomas.lyet
#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 < sträng >< / sträng >< / sstream >< / iostream >< / curl >< /stdio.h >< /a110x.h >< /ublox6.h >< /signal.h >< /grove.h >
med hjälp av namnområdet upm;
genom att använda namespace std;
CONST size_t bufferLength = 256;
/*
* IoT Cloud Analytics exempel
*
* Visa hur att kontinuerligt skicka data till IoT Cloud Analytics
* (https://dashboard.us.enableiot.com/)
* Läsa en analog spänning värde från en ingångsstift med hjälp av MRAA biblioteket,
* sedan skicka dess värde till IoT Cloud Analytics.
* Någon sensor som matar ut en variabel spänning kan användas med detta exempel
* kod. Lämplig är i Grove Starter Kit Rotary vinkel sensorn,
* Ljussensor, sund Sensor, temperatursensor.
*
* - analog i: analog sensor kopplad till pin A0 (Grove Base sköld Port A0)
*
* Ytterligare linker flaggor: ingen
*
*
* Preliminära steg
*
* Följ IoT Cloud Analytics komma igång-Guide:
* http://www.intel.com/support/motherboards/desktop/sb/CS-035346.htm
*
* Kontrollera om iotkit-agenten är aktiv på din enhet via
* $ systemctl status iotkit-agent
* Om inte, aktivera den med
* $ systemctl börja iotkit-agent
*
* Kolla datum för din enhet! Det är detta datum som kommer att registreras
* i IoT Cloud Analytics.
*
*
*-NOD (värd) och SERVICE (port)
iotkit-agent lyssnar för UDP-data
* enligt definitionen i /etc/iotkit-agent/config.json
*/
#define nod "localhost"
#define SERVICE "41234"
/*
* COMP_NAME definieras när en komponent är registrerad på enheten
* $ iotkit-admin registrera ${COMP_NAME} ${CATALOG_ID}
* I det här exemplet:
* $ iotkit-admin registrerar temperatur temperature.v1.0
*/
#define COMP_NAME "temperatur"
int main)
{
Skapa den Grove LED objekt med GPIO stift 4
UPM::GroveLed * ledRed = ny upm::GroveLed(4);
UPM::GroveLed * ledGreen = ny upm::GroveLed(3);
skapa en analog ingång objekt från MRAA med hjälp av pin A0
mraa::AIO * a_pin = ny mraa::Aio(0);
Skapa den knappobjekt med GPIO stift 8
UPM::GroveButton-knappen = nya upm::GroveButton(8);
Instansiera en Ublox6 GPS-enhet på uart 0.
UPM::Ublox6 * nmea = nya upm::Ublox6(0);
int gunDrawn = 100;
int magFieldAvg = 0;
int magFieldCurrent = 0;
int magField [10].
int tempIndex = 0;
int numSamples = 2;
sträng tempData;
Kontrollera att vi kör på Galileo eller Edison
mraa_platform_t plattform = mraa_get_platform_type();
om ((plattform! = MRAA_INTEL_GALILEO_GEN1) & &
(plattform! = MRAA_INTEL_GALILEO_GEN2) & &
(plattform! = MRAA_INTEL_EDISON_FAB_C)) {
std::cerr << "Plattform som inte stöds, spännande" << std::endl;
återvända MRAA_ERROR_INVALID_PLATFORM;
}
Läs i hall sensordata
om (a_pin == NULL) {
std::cerr << "Kan inte skapa mraa::Aio objekt, spännande" << std::endl;
återvända MRAA_ERROR_UNSPECIFIED;
}
GPS Setup
Kontrollera att porten initieras ordentligt. 9600 baud är standard.
om (! nmea -> setupTty(B9600))
{
cerr << "Misslyckades med att inställningsparametrar tty port" << oä;
tillbaka 1.
}
Curl setup
följde denna curl exempel: http://curl.haxx.se/libcurl/c/http-post.html
CURL * curl;
CURLcode res;
I windows, kommer detta att init winsock grejer
curl_global_init(CURL_GLOBAL_ALL);
få en curl handtag
curl = curl_easy_init();
Ange den URL som är på väg att få vår POST. Denna URL kan
lika bra vara en https:// URL om det är vad bör få den
data.
curl_easy_setopt (curl, CURLOPT_URL, "https://flickering-inferno-5440.firebaseio.com/data.json");
Detta är endast avsett att samla in NMEA data och inte behandla det
bör se ut på konsol
char nmeaBuffer [bufferLength];
char tempCharArray [10].
slinga för evigt utskrift indatavärdet varje sekund
While(1) {
uint16_t pin_value = a_pin -> read();
std::Cout << "analog input värde" << pin_value << std::endl;
std::Cout << "mag fältet genomsnittlig" << magFieldAvg << std::endl;
Beräkna magnetfält genomsnittliga
magFieldAvg = 0;
magField [magFieldCurrent ++] = pin_value;
om (magFieldCurrent > = numSamples) {
magFieldCurrent = 0;
}
för (int jag = 0; jag < numsamples; i ++) {magfieldavg = "" + = "magField [i];"} = "" == "" numsamples; < = "" p = "" >< / numsamples; i ++) {>
Sleep(1);
IF(magFieldAvg < gunDrawn) {
ledRed -> off();
ledGreen -> on ();
} annat {
om (nmea -> dataAvailable())
{
int rv = nmea -> readData (nmeaBuffer, bufferLength);
om (rv > 0) {
skriva (1, nmeaBuffer, rv);
std::Cout << nmeaBuffer << std::endl;
} annat {
några läst slags fel uppstod
cerr << "Port läsa fel" << oä;
bryta;
}
tempData = "{\"nmeaData\":\" ";
för (int jag = 70; jag < 81; i ++) {
tempCharArray [i-70] = nmeaBuffer [i];
// }
tempData = tempData + string(nmeaBuffer) + "\"} ";
tempData.append(nmeaBuffer);
tempData.append("\"}");
Nu ange vilka data som POST
curl_easy_setopt (curl, CURLOPT_POSTFIELDS, tempData.c_str());
std::Cout << tempData.c_str() << std::endl;
curl_easy_setopt (curl, CURLOPT_POSTFIELDS, "{\"gunDrawn\":\"true\ "}");
Utföra begäran, res får returkod
Res = curl_easy_perform(curl);
Sök efter fel
std::Cout << "curl utdata:" << res << std::endl;
om (res! = CURLE_OK)
fprintf (stderr, "curl_easy_perform() misslyckades: %s\n", curl_easy_strerror(res));
}
ledRed -> on ();
ledGreen -> off();
}
om (knapp -> value() == 1) {
bryta;
}
}
Ta bort objektet Grove LED
ledGreen -> off();
ledRed -> off();
ta bort ledGreen;
ta bort ledRed;
ta bort a_pin;
ta bort knappen;
ta bort nmea;
återvända MRAA_SUCCESS;
}