Étape 5: Prépare le code
Voici un petit bout du code utilisé. Veuillez noter qu’il existe également un voyant et bouton utilisé dans le code ainsi que l’intégration avec la base de feu.
Plein de code pour le GPS, le capteur Hall et LEDs sa à 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 < chaîne >
à l’aide de namespace upm ; à l’aide de namespace std ;
const size_t bufferLength = 256 ;
définir le nœud « localhost »
#define SERVICE « 41234 »
#define nom_ordinateur « température »
int main() {}
Créez l’objet Grove LED en utilisant les broches GPIO 4
UPM::GroveLed * ledRed = new upm::GroveLed(4) ;
UPM::GroveLed * ledGreen = new upm::GroveLed(3) ;
créer un objet d’entrée analogique de MRAA à l’aide de broches A0
MRAA::AIO * a_pin = new mraa::Aio(0) ;
Créez l’objet button à l’aide de broches GPIO 8
bouton de UPM::GroveButton = new upm::GroveButton(8) ;
Instancier un GPS Ublox6 sur uart 0.
UPM::Ublox6 * nmea = new upm::Ublox6(0) ;
int gunDrawn = 100 ;
int magFieldAvg = 0 ;
int magFieldCurrent = 0 ;
int magField [10] ;
int tempIndex = 0 ;
int numSamples = 2 ;
chaîne tempData ;
vérifier que nous sommes en cours d’exécution sur Galileo ou Edison
plateforme de mraa_platform_t = mraa_get_platform_type() ;
Si ((plate-forme! = MRAA_INTEL_GALILEO_GEN1) & & (plate-forme! = MRAA_INTEL_GALILEO_GEN2) & & (plate-forme! = MRAA_INTEL_EDISON_FAB_C))
{std::cerr << « Plate-forme non prise en charge, sortie » << std::endl ;
Return MRAA_ERROR_INVALID_PLATFORM ; }
Lire dans les données du capteur hall
Si (a_pin == NULL)
{std::cerr << « Ne peut pas créer l’objet mraa::Aio, sortant » << std::endl ;
Return MRAA_ERROR_UNSPECIFIED ; }
Installation GPS
Assurez-vous que le port est correctement initialisé. 9600 bauds est la valeur par défaut.
Si (! nmea -> setupTty(B9600))
{cerr << « Echec de paramètres d’installation ATS port » << endl ;
Return 1 ; }
Installation de CURL
suivi cet exemple curl : http://curl.haxx.se/libcurl/c/http-post.html
CURL * curl ;
CURLcode res ;
Dans windows, cela sera init les trucs de winsock
curl_global_init(CURL_GLOBAL_ALL) ;
Obtenez un gestionnaire cURL
curl = curl_easy_init() ;
Tout d’abord définir l’URL qui est sur le point de recevoir notre message. Cette URL peut
tout aussi bien être un http://curl.haxx.se/libcurl/c/http-post.html si c’est ce qui doit recevoir la
données.
curl_easy_setopt (courbure, CURLOPT_URL, "https://flickering-inferno-5440.firebaseio.com/data.json") ;
C’est uniquement destinée à recueillir des données NMEA et pas le traiter
devriez voir sortie sur console
char nmeaBuffer [bufferLength] ;
while(1)
{uint16_t pin_value = a_pin -> read() ;
magFieldAvg = 0 ;
magField [magFieldCurrent ++] = pin_value ;
Si (magFieldCurrent > = numSamples)
{magFieldCurrent = 0;}
pour (int i = 0; i < numSamples; i ++
{magFieldAvg += magField [i];}
magFieldAvg / = numSamples ;
Sleep(1) ;
if(magFieldAvg < gunDrawn)
{ledRed -> off() ;
ledGreen -> on() ; }
else {}
if (nmea -> {dataAvailable())}
int rv = nmea -> readData (nmeaBuffer, bufferLength) ;
Si (rv > 0) {}
écrire (1, nmeaBuffer, rv) ;
std::cout << nmeaBuffer << std::endl ; }
else {}
certains lisent sorte d’erreur s’est produite
CERR << « Port lire erreur. » << endl ;
rupture ;
}
curl_easy_setopt (courbure, CURLOPT_POSTFIELDS, « {\"gunDrawn\":\"true\"} ") ;
Effectuer la demande, res obtiendra le code de retour
res = curl_easy_perform(curl) ;
Recherchez les erreurs
Si (res! = CURLE_OK)
fprintf (stderr, "curl_easy_perform() a échoué : %s\n", curl_easy_strerror(res)) ;
}
ajouter quelques LEDs
ledRed -> on() ;
ledGreen -> off() ; }
Si (bouton -> value() == 1)
{break;}
}
Supprimez l’objet Grove LED
ledGreen -> off() ;
ledRed -> off() ;
supprimer ledGreen ;
supprimer ledRed ;
supprimer a_pin ;
supprimer le bouton ;
supprimer nmea ;
Return MRAA_SUCCESS ; }