IR Temperature Agent

#include <Adafruit_MLX90614.h>
#include <MKRGSM.h>
#include <SPI.h>
#include <vrpc.h>

// APN and GSM data for the SIM used
const char PINNUMBER[] = "<PIN NUMBER>";  // Leave "" when there is no pin
const char GPRS_APN[] = "<APN>";
const char GPRS_LOGIN[] = "<LOGIN>";
const char GPRS_PASSWORD[] = "<PASSWORD>";

// instantiation of utility libraries
GSMClient client;
GPRS gprs;
GSM gsm;
GSMModem modem;
GSMScanner scan;
GSMLocation location;
VrpcAgent agent;
Adafruit_MLX90614 mlx;

// last values cached for location information
float lat = 0;
float lng = 0;
long alt = 0;
long acc = 0;
unsigned long timeout = 0;

void connectGsm() {
  digitalWrite(LED_BUILTIN, HIGH);
  gprs.setTimeout(180000);
  gsm.setTimeout(180000);
  Serial.println("Connecting GSM...");
  while (gsm.begin(PINNUMBER) != GSM_READY ||
         gprs.attachGPRS(GPRS_APN, GPRS_LOGIN, GPRS_PASSWORD) != GPRS_READY) {
    Serial.println("GSM Connection [FAILED]");
    delay(1000);
  }
  Serial.println("GSM Connection [OK]");
  Serial.println(scan.getCurrentCarrier());
  digitalWrite(LED_BUILTIN, LOW);
}

void setup() {
  Serial.begin(115200);
  pinMode(LED_BUILTIN, OUTPUT);
  connectGsm();
  location.begin();
  modem.begin();
  String token = modem.getIMEI();
  while (token == NULL) {
    delay(1000);
    token = modem.getIMEI();
  }
  agent.begin(client);
  mlx.begin();
}

void measureLocation() {
  if (location.available()) {
    lat = location.latitude();
    lng = location.longitude();
    alt = location.altitude();
    acc = location.accuracy();
  }
}

void loop() {
  if (gsm.isAccessAlive()) {
    if (gprs.status() != GPRS_READY) {
      if (gprs.attachGPRS(GPRS_APN, GPRS_LOGIN, GPRS_PASSWORD) != GPRS_READY) {
        Serial.println("GRPS not ready!");
        delay(1000);
        return;
      }
    }
  } else {
    Serial.println("Reconnect to GSM...");
    connectGsm();
    return;
  }
  if (millis() - timeout > 2000) {
    measureLocation();
    timeout = millis();
  }
  agent.loop();
}

float getObjectTemperature() {
  return mlx.readObjectTempC();
}

float getAmbientTemperature() {
  return mlx.readAmbientTempC();
}

String getGSMCarrier() {
  return scan.getCurrentCarrier();
}

String getSignalStrength() {
  return scan.getSignalStrength();
}

String getLocation() {
  return String(lat, 7) + "," + String(lng, 7);
}

long getAltitude() {
  return alt;
}

long getAccuracy() {
  return acc;
}

VRPC_GLOBAL_FUNCTION(float, getObjectTemperature);
VRPC_GLOBAL_FUNCTION(float, getAmbientTemperature);
VRPC_GLOBAL_FUNCTION(String, getGSMCarrier);
VRPC_GLOBAL_FUNCTION(String, getSignalStrength);
VRPC_GLOBAL_FUNCTION(String, getLocation);
VRPC_GLOBAL_FUNCTION(long, getAltitude);
VRPC_GLOBAL_FUNCTION(long, getAccuracy);

Last updated