trash over HTTP

Dependencies:   C027_Support HTTPClient TrashSensors mbed Crypto

Fork of SLOTrashHTTP by Corey Ford

Collects sensor readings and sends them to https://trash.coreyford.name/

Server code: https://github.com/coyotebush/trash-map

main.cpp

Committer:
coyotebush
Date:
2015-05-27
Revision:
3:1e5d19eb7c9a
Parent:
2:ecc029c53752
Child:
4:1acb5d26ec21

File content as of revision 3:1e5d19eb7c9a:

#include "mbed.h"
#include "HTTPClient.h"

#include "hcsr04.h"
#include "GPS.h"

#define TRIG_PIN D6
#define ECHO_PIN D5
#define SENSOR_NAME "Throop"

#define CELLULAR_NETWORK 1

#ifdef CELLULAR_NETWORK
#include "MDM.h"
#define SIMPIN      NULL
#define APN         "Broadband"
#define USERNAME    NULL
#define PASSWORD    NULL 
#else
#include "EthernetInterface.h"
#endif

int main() 
{   
    GPSSerial gps;

#ifdef CELLULAR_NETWORK
    MDMSerial mdm;
    //mdm.setDebug(4);
    if (!mdm.connect(SIMPIN, APN,USERNAME,PASSWORD))
        return -1;
#else
    EthernetInterface ethernet;
    ethernet.init(); // DHCP
    if (ethernet.connect() != 0)
        return -1;
#endif
    HTTPClient http;
    
    int gpsRet;
    char gpsBuf[512];
    double lat = 0, lon = 0;
    char latStr[10] = "", lonStr[10] = "";
    
    HCSR04 distS(TRIG_PIN, ECHO_PIN);
    double distV;
    char distStr[10] = "";
    char str[512];
    
    while (true) {
        // Distance sensor
        distS.start();
        wait_ms(500); 
        distV = distS.get_dist_cm();
        snprintf(distStr, 10, "%0.2f", distV);
        printf("sensor reading: %s\r\n", distStr);
        
        // GPS
        printf("trying GPS\r\n");
        while ((gpsRet = gps.getMessage(gpsBuf, sizeof(gpsBuf))) > 0)
        {
            int len = LENGTH(gpsRet);
            char ch;
            //printf("NMEA: %.*s\r\n", len-2, gpsBuf); 
            if ((PROTOCOL(gpsRet) == GPSParser::NMEA) && (len > 6)
             && strncmp(gpsBuf, "$G", 2) == 0
             && strncmp(gpsBuf + 3, "GLL", 3) == 0
             && gps.getNmeaAngle(1,gpsBuf,len,lat)
             && gps.getNmeaAngle(3,gpsBuf,len,lon)
             && gps.getNmeaItem(6,gpsBuf,len,ch)
             && ch == 'A')
            {
                printf("GPS Location: %.5f %.5f\r\n", lat, lon);
                snprintf(latStr, 10, "%0.5f", lat);
                snprintf(lonStr, 10, "%0.5f", lon);
                break;
            }
        }
        
        //POST data
        HTTPMap map;
        HTTPText inText(str, 512);
        map.put("name", SENSOR_NAME);
        map.put("value", distStr);
        map.put("latitude", latStr);
        map.put("longitude", lonStr);
        printf("\r\nTrying to post data...\r\n");
        int ret = http.post("http://trash.coreyford.name/sensor", map, &inText);
        if (!ret)
        {
          printf("Executed POST successfully - read %d characters\r\n", strlen(str));
          printf("Result: %s\r\n", str);
        }
        else
        {
          printf("Error - ret = %d - HTTP return code = %d\r\n", ret, http.getHTTPResponseCode());
        }
        
        wait_ms(10000);
    }
}