Skip to content

Instantly share code, notes, and snippets.

@berkedel
Created October 18, 2015 00:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save berkedel/25f3ded5138725331f3f to your computer and use it in GitHub Desktop.
Save berkedel/25f3ded5138725331f3f to your computer and use it in GitHub Desktop.
Smart Table
#include <iostream>
#include <cmath>
#include <sstream>
#include <string>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <mraa.hpp>
using namespace std;
// define constant
const int TEMPERATURE_SENSOR_PIN = 0; // A0
const int AIRQUALITY_SENSOR_PIN = 1; // A1
const int FLAME_SENSOR_PIN = 3; // D3
// define enum
enum AirQuality {
AirFresh = 0,
LowPollution,
HighPollution
};
enum FireState {
NoFire = 0,
Fire
};
// define socket
int sockfd;
struct sockaddr_in servaddr;
// define sensors
mraa::Aio *temperatureSensor;
mraa::Aio *airQualitySensor;
mraa::Gpio *flameSensor;
string toString(float number) {
ostringstream buff;
buff << number;
return buff.str();
}
string toString(int number) {
ostringstream buff;
buff << number;
return buff.str();
}
bool init() {
temperatureSensor = new mraa::Aio(TEMPERATURE_SENSOR_PIN);
if (temperatureSensor == NULL) {
printf("Error: Temperature sensor could not be initialized\n");
return MRAA_ERROR_UNSPECIFIED;
}
airQualitySensor = new mraa::Aio(AIRQUALITY_SENSOR_PIN);
if (airQualitySensor == NULL) {
printf("Error: Air quality sensor could not be initialized\n");
return MRAA_ERROR_UNSPECIFIED;
}
flameSensor = new mraa::Gpio(FLAME_SENSOR_PIN);
if (flameSensor == NULL) {
printf("Error: Flame sensor could not be initialized\n");
return MRAA_ERROR_UNSPECIFIED;
}
return MRAA_SUCCESS;
}
void deinit() {
if (temperatureSensor != NULL) {
delete temperatureSensor;
}
if (airQualitySensor != NULL) {
delete airQualitySensor;
}
if (flameSensor != NULL) {
delete flameSensor;
}
}
float getTemperature() {
int adcVal;
float resistance;
float temperature;
adcVal = temperatureSensor->read();
resistance = (1023 - adcVal) * 10000 / adcVal;
temperature = 1 / (log(resistance/10000) / 3975 + 1/298.15) - 273.15;
return temperature;
}
AirQuality getAirQuality() {
int sensorVal;
sensorVal = airQualitySensor->read();
if (sensorVal > 700) {
return HighPollution;
}
else if (sensorVal > 300) {
return LowPollution;
}
return AirFresh;
}
FireState getFireState() {
int sensorVal;
sensorVal = flameSensor->read();
if (!sensorVal) {
return Fire;
}
return NoFire;
}
// START cloud block
void initSocket() {
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr=inet_addr("127.0.0.1");
servaddr.sin_port=htons(41234);
}
string makeJson(string componentAlias, float dataValue) {
string res;
res = "{\"n\": \"" + componentAlias + "\", \"v\": " + toString(dataValue) + "}\n";
return res;
}
void pushData(string data) {
// if socket is not initialized yet
if (sockfd == 0) {
printf("Info: Trying to initialized socket\n");
initSocket();
}
if (sockfd == -1) {
printf("Warning: Socket is not ready\n");
}
sendto(sockfd, data.c_str(), data.length(), 0, (struct sockaddr *)& servaddr, sizeof(servaddr));
}
// END cloud block
int main() {
bool initResponse;
float temperatureVal;
AirQuality airQualityVal;
FireState fireDetectionVal;
string data;
initResponse = init();
if (initResponse) {
printf("Error: The device is not reqdy\n");
return MRAA_ERROR_UNSPECIFIED;
}
for (;;) {
// temperature
temperatureVal = getTemperature();
data = makeJson("temperature", temperatureVal);
pushData(data);
printf("Sent: %s\n", data.c_str());
// air quality
airQualityVal = getAirQuality();
data = makeJson("air_quality", airQualityVal);
pushData(data);
printf("Sent: %s\n", data.c_str());
// fire detection
fireDetectionVal = getFireState();
data = makeJson("fire_detection", fireDetectionVal);
pushData(data);
printf("Send: %s\n", data.c_str());
// wait for 1s
usleep(1000000);
}
deinit();
return MRAA_SUCCESS;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment