miao zhicheng
/
DragonflyMQTT
Using MQTT on Dragonfly
Diff: main.cpp
- Revision:
- 5:ded8fe5991a2
- Parent:
- 3:0a48c984e15b
- Child:
- 6:4a25f3b9caef
--- a/main.cpp Fri Aug 18 08:40:35 2017 +0000 +++ b/main.cpp Tue Sep 05 15:00:17 2017 +0000 @@ -1,4 +1,5 @@ #include "MTSCellularManager.hpp" +#include "TripDataReader.hpp" #include "TlsMQTTClient.hpp" #include "Certificates.h" #include "config.hpp" @@ -10,15 +11,27 @@ // BC_NCE = 0 enables the battery charger // BC_NCE = 1 disables the battery charger DigitalOut bc_nce(PB_2); + DigitalOut ledMQTTYield(D5); + DigitalOut ledGPS(D8); -static const int VEHICLE_DATA_POLLING_PERIOD_MS = 5000; +MTSSerial obd(D1, D0); +DigitalOut ledOBD(D6); + +static const int VEHICLE_DATA_SAMPLING_PERIOD_MS = 50; +static Ticker vehicleDataSamplingTicker; +static TripDataReader* pTripDataReader = NULL; +static void vehicleDataSamplingCallback(); + +static const int VEHICLE_DATA_REPORTING_PERIOD_MS = 3000; static bool exitCmd = false; -static void sendVehicleData(MTSCellularManager::GPSStatus& gpsStatus); -static void test2Handler(MQTT::MessageData& data); +static void sendVehicleData(const MTSCellularManager::GPSStatus& gpsStatus, + const TripDataReader::TripData& tripData); + +//static void test2Handler(MQTT::MessageData& data); int main() { // Disable the battery charger unless a battery is attached. @@ -52,18 +65,37 @@ logInfo("GPS Initialized"); } + TripDataReader tripDataReader(obd, ledOBD); + pTripDataReader = &tripDataReader; + while (true) { + logInfo("Initializing OBD"); + int r = tripDataReader.init(); + logInfo("OBD Initialization result: %d", r); + if (0 == r) { + logInfo("Initializing OBD sampling ticker"); + vehicleDataSamplingTicker.attach( + &vehicleDataSamplingCallback, + VEHICLE_DATA_SAMPLING_PERIOD_MS / 1000.); + logInfo("OBD sampling ticker initialized"); + break; + } + wait_ms(100); + } + logInfo("Initializing CyaSSL"); CyaSSL_Init(); while (!exitCmd) { + wait_ms(VEHICLE_DATA_REPORTING_PERIOD_MS); + TripDataReader::TripData tripData = tripDataReader.getTripData(); + tripDataReader.resetAverageWindow(); MTSCellularManager::GPSStatus gpsStatus = cellularManager.gpsPollStatus(); if (gpsStatus.success) { ledGPS = 0; - sendVehicleData(gpsStatus); + sendVehicleData(gpsStatus, tripData); } else { ledGPS = 1; } - wait_ms(VEHICLE_DATA_POLLING_PERIOD_MS); } logInfo("Cleaning up CyaSSL"); @@ -77,7 +109,12 @@ return 0; } -static void sendVehicleData(MTSCellularManager::GPSStatus& gpsStatus) { +static void vehicleDataSamplingCallback() { + pTripDataReader->sample(); +} + +static void sendVehicleData(const MTSCellularManager::GPSStatus& gpsStatus, + const TripDataReader::TripData& tripData) { ledMQTTYield = 0; logInfo("Connecting MQTT Client"); @@ -94,19 +131,27 @@ logInfo("MQTT connected"); sprintf(buf, "{" - "\"driver_id\": 1," - "\"runtime\": 10," - "\"miles\": 10," + "\"driver_id\": %s," + "\"runtime\": %d," + "\"miles\": %d," "\"speed\": %f," - "\"minT\": 40," - "\"maxT\": 60," - "\"avgT\": 50," - "\"fuel\": 50," - "\"brake\": 0," + "\"minT\": %f," + "\"maxT\": %f," + "\"avgT\": %f," + "\"fuel\": %d," + "\"brake\": %d," "\"lat\": %lf," "\"lon\": %lf" "}", - gpsStatus.speedVal, + VEHICLE_ID, + tripData.runtime, + tripData.distance, + tripData.averageSpeed, + tripData.minimumThrottle, + tripData.maximumThrottle, + tripData.averageThrottle, + tripData.fuel, + tripData.hardBrakeCount, gpsStatus.latitudeVal, gpsStatus.longitudeVal); message.qos = MQTT::QOS1;