Created
October 18, 2015 00:52
-
-
Save berkedel/25f3ded5138725331f3f to your computer and use it in GitHub Desktop.
Smart Table
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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