Browse Source

initial commit

master
commit
c16f5a9284
6 changed files with 174 additions and 0 deletions
  1. +2
    -0
      build
  2. +23
    -0
      example_crontab/crontab-backup
  3. +72
    -0
      network/SocketClient.cpp
  4. +33
    -0
      network/SocketClient.h
  5. BIN
      thingSpeak
  6. +44
    -0
      thingSpeak.cpp

+ 2
- 0
build View File

@ -0,0 +1,2 @@
#!/bin/bash
g++ thingSpeak.cpp network/SocketClient.cpp -o thingSpeak

+ 23
- 0
example_crontab/crontab-backup View File

@ -0,0 +1,23 @@
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
*/30 * * * * ~/exploringBB/chp11/thingSpeak/thingSpeak > /dev/null 2>&1

+ 72
- 0
network/SocketClient.cpp View File

@ -0,0 +1,72 @@
#include "SocketClient.h"
#include <stdio.h>
#include <string.h>
#include <unistd.h>
using namespace std;
namespace exploringBB {
SocketClient::SocketClient(std::string serverName, int portNumber) {
this->socketfd = -1;
this->server = NULL;
this->serverName = serverName;
this->portNumber = portNumber;
this->isConnected = false;
}
int SocketClient::connectToServer(){
socketfd = socket(AF_INET, SOCK_STREAM, 0);
if (socketfd < 0){
perror("Socket Client: error opening socket.\n");
return 1;
}
server = gethostbyname(serverName.data());
if (server == NULL) {
perror("Socket Client: error - no such host.\n");
return 1;
}
bzero((char *) &serverAddress, sizeof(serverAddress));
serverAddress.sin_family = AF_INET;
bcopy((char *)server->h_addr,(char *)&serverAddress.sin_addr.s_addr, server->h_length);
serverAddress.sin_port = htons(portNumber);
if (connect(socketfd, (struct sockaddr *) &serverAddress, sizeof(serverAddress)) < 0){
perror("Socket Client: error connecting to the server.\n");
return 1;
}
this->isConnected = true;
return 0;
}
int SocketClient::send(std::string message){
const char *writeBuffer = message.data();
int length = message.length();
int n = write(this->socketfd, writeBuffer, length);
if (n < 0){
perror("Socket Client: error writing to socket");
return 1;
}
return 0;
}
string SocketClient::receive(int size=1024){
char readBuffer[size];
int n = read(this->socketfd, readBuffer, sizeof(readBuffer));
if (n < 0){
perror("Socket Client: error reading from socket");
}
return string(readBuffer);
}
int SocketClient::disconnectFromServer(){
this->isConnected = false;
close(this->socketfd);
return 0;
}
SocketClient::~SocketClient() {
if (this->isConnected == true){
disconnectFromServer();
}
}
}

+ 33
- 0
network/SocketClient.h View File

@ -0,0 +1,33 @@
#ifndef SOCKETCLIENT_H_
#define SOCKETCLIENT_H_
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <netdb.h>
#include <string>
namespace exploringBB {
class SocketClient {
private:
int socketfd;
struct sockaddr_in serverAddress;
struct hostent *server;
std::string serverName;
int portNumber;
bool isConnected;
public:
SocketClient(std::string serverName, int portNumber);
virtual int connectToServer();
virtual int disconnectFromServer();
virtual int send(std::string message);
virtual std::string receive(int size);
bool isClientConnected() { return this->isConnected; }
virtual ~SocketClient();
};
}
#endif /* SOCKETCLIENT_H_ */

BIN
thingSpeak View File


+ 44
- 0
thingSpeak.cpp View File

@ -0,0 +1,44 @@
#include <iostream>
#include <sstream>
#include <fstream>
#include "network/SocketClient.h"
#define ADC_PATH "/sys/bus/iio/devices/iio:device0/in_voltage"
#define ADC 0
using namespace std;
using namespace exploringBB;
float getTemperature(int adc_value) { // from the TMP36 datasheet
float cur_voltage = adc_value * (1.80f/4096.0f); // Vcc = 1.8V, 12-bit
float diff_degreesC = (cur_voltage-0.75f)/0.01f;
return (25.0f + diff_degreesC);
}
int readAnalog(int number){
stringstream ss;
ss << ADC_PATH << number << "_raw";
fstream fs;
fs.open(ss.str().c_str(), fstream::in);
fs >> number;
fs.close();
return number;
}
int main() {
ostringstream head, data;
cout << "Starting ThingSpeak Example" << endl;
SocketClient sc("api.thingspeak.com",80);
data << "field1=" << getTemperature(readAnalog(ADC)) << endl;
cout << "Sending the temperature: " << getTemperature(readAnalog(ADC)) << endl;
sc.connectToServer();
head << "POST /update HTTP/1.1\n"
<< "Host: api.thingspeak.com\n"
<< "Connection: close\n"
<< "X-THINGSPEAKAPIKEY: Z7PNWRYKDEBRX5F7\n"
<< "Content-Type: application/x-www-form-urlencoded\n"
<< "Content-Length:" << string(data.str()).length() << "\n\n";
sc.send(string(head.str()));
sc.send(string(data.str()));
string rec = sc.receive(1024);
cout << "[" << rec << "]" << endl;
cout << "End of ThingSpeak Example" << endl;
}

Loading…
Cancel
Save