Uploading sensor data (voltage divider, MAX4172, INA219) over Ethernet to Thing Speak service. Uses old mbed revision that is compatible with NetServices library. I2C communication is made with I2CR library.

Dependencies:   C12832 I2CR INA219 NetServices mbed

Fork of NetServices_HelloWorld by Segundo Equipo

Files at this revision

API Documentation at this revision

Comitter:
tsoic
Date:
Fri Nov 20 08:28:11 2015 +0000
Parent:
5:1e77bdd1a639
Child:
7:1da0a084cd69
Commit message:
Uploading sensor data ( Voltage divider, MAX4172, INA219) over ethernet to Thing Speak service.

Changed in this revision

C12832.lib Show annotated file Show diff for this revision Revisions of this file
I2CR.lib Show annotated file Show diff for this revision Revisions of this file
INA219.lib Show annotated file Show diff for this revision Revisions of this file
RPCInterface.lib Show diff for this revision Revisions of this file
Sensor.cpp Show annotated file Show diff for this revision Revisions of this file
Sensor.h Show annotated file Show diff for this revision Revisions of this file
ThingSpeak.cpp Show annotated file Show diff for this revision Revisions of this file
ThingSpeak.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/C12832.lib	Fri Nov 20 08:28:11 2015 +0000
@@ -0,0 +1,1 @@
+http://developer.mbed.org/users/chris/code/C12832/#7de323fa46fe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/I2CR.lib	Fri Nov 20 08:28:11 2015 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/ShockSoc/code/I2CR/#375ecd0ed73d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/INA219.lib	Fri Nov 20 08:28:11 2015 +0000
@@ -0,0 +1,1 @@
+https://developer.mbed.org/users/tsoic/code/INA219/#cdfbda214bee
--- a/RPCInterface.lib	Wed Dec 15 18:03:19 2010 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-http://mbed.org/users/MichaelW/code/RPCInterface/#f15d3610ddbe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Sensor.cpp	Fri Nov 20 08:28:11 2015 +0000
@@ -0,0 +1,20 @@
+#include "Sensor.h"
+#include "mbed.h"
+
+Sensor::Sensor(PinName sensorPin, float Koef) : sensorInput(sensorPin), K(Koef) { 
+//* Implementacija kontruktora kako bi spojio dani ulazni pin i koeficijent množenja sa privatnim varijablama klase Sensor
+} 
+
+void Sensor::read() {
+       //* Očitvanje vrijednosti analognom ulaza 10 puta i spremanje vrijednosti u float polje readVal[]
+       readVal[0] = sensorInput;
+         
+}
+
+float Sensor::calc() { 
+  //* Potrebno je postaviti 0 u lokalnu varijablu sum 0kako se u njoj nebi pojavili neki neočekivani brojevi
+
+    realVal = readVal[0]; //* Računanje srednje vrijednosti
+    return realVal  *= K; //* Vračanje stvarne vrijednosti za daljnu obradu
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Sensor.h	Fri Nov 20 08:28:11 2015 +0000
@@ -0,0 +1,20 @@
+#ifndef _SENSOR_H
+#define SENSOR_H  
+#include "mbed.h"
+
+class Sensor {
+     
+     public:
+     
+        Sensor(PinName, float);    //* Konsturktor klase Sensor koji uzima kao argument pin na kojem je spojen senzor može biti od p15-p20 *//
+                                    //* i varijablu float kao koeficijent množenja vrijednosti dobivene ADC pretvorbom
+        void read();                 //* Funkcija read() bez povratnog argumenta ocitava vrijednost 10 puta i spremaju u float polje
+        float calc();                 //* Fukcija calac() raćuna srednju vrijednost readVal polja te vraća float varijablu sa stvarnom vrijednosti 
+                                       //* mjernog signala 
+     private:
+     
+        AnalogIn sensorInput;           
+        float readVal[], realVal, K;
+};
+
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ThingSpeak.cpp	Fri Nov 20 08:28:11 2015 +0000
@@ -0,0 +1,48 @@
+#include "mbed.h"
+#include "EthernetNetIf.h"
+#include "HTTPClient.h"
+#include "ThingSpeak.h"
+
+Serial pc(USBTX, USBRX);
+
+ThingSpeak::ThingSpeak(char* Key, const int Qt) : thingSpeakKey(Key) {      
+    thingSpeakUrl = "https://api.thingspeak.com/update";
+    urlBuffer[0] = 0;
+    fieldBuffer[0] = 0;
+}
+
+void ThingSpeak::connect() {
+    pc.printf("Setting up Ethernet...\r\n");
+    EthernetErr ethErr = eth.setup();
+    if(ethErr){
+        pc.printf("Error %d in ethernet setup.\r\n", ethErr);  
+       //* connect();
+        }
+    pc.printf("Ethernet setup OK\r\n");
+}
+
+void ThingSpeak::getIP() {
+   
+}
+
+void ThingSpeak::setField(float field, int i) {
+    char fieldi;
+    char fieldShortBuff[8];
+    sprintf(fieldShortBuff, "%f", field);
+    sprintf(&fieldi, "%i", i);
+    strncat(fieldBuffer, "&field", 6 );
+    strncat(fieldBuffer, &fieldi , 1);
+    strncat(fieldBuffer, "=", 1);
+    strncat(fieldBuffer, fieldShortBuff , 4);    
+}
+
+void ThingSpeak::putUp() {
+    sprintf(urlBuffer, "%s?key=%s%s", thingSpeakUrl, thingSpeakKey, fieldBuffer);
+    pc.printf("URL Buffer request: %s ", urlBuffer); 
+    res = http.get(urlBuffer, &resp);
+    if (res == HTTP_OK)
+        pc.printf(" Result :\"%s\"\r\n", resp.gets());
+    else
+        pc.printf(" Error %d\r\n", res); 
+    fieldBuffer[0] = 0;         
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ThingSpeak.h	Fri Nov 20 08:28:11 2015 +0000
@@ -0,0 +1,32 @@
+#ifndef THINGSPEAK_H
+#define THINGSPEAK_H
+#define HOSTNAME "mbed"
+#include "mbed.h"
+#include "EthernetNetIf.h"
+#include "HTTPClient.h"
+
+
+class ThingSpeak {
+    
+    public:
+    
+        ThingSpeak(char*, const int);
+        void connect();
+        void getIP();
+        void putUp();
+        void setField(float, int);   
+    private:
+        
+        char* thingSpeakUrl;
+        char* thingSpeakKey;
+        char urlBuffer[511];
+        char fieldBuffer[255];  
+        EthernetNetIf eth;
+        EthernetErr ethErr;
+        HTTPClient http; 
+        IpAddr ethIp;
+        HTTPText resp;
+        HTTPResult res;  
+};
+
+#endif   
\ No newline at end of file
--- a/main.cpp	Wed Dec 15 18:03:19 2010 +0000
+++ b/main.cpp	Fri Nov 20 08:28:11 2015 +0000
@@ -1,96 +1,59 @@
 #include "mbed.h"
-#include "EthernetNetIf.h"
-#include "HTTPClient.h"
-#include "NTPClient.h"
-#include "HTTPServer.h"
-#include "RPCFunction.h"
+#include "iostream"
+#include "ThingSpeak.h"
+#include "Sensor.h"
+#include "C12832.h"
+#include "INA219.h"
 
-#define HOSTNAME "mbedSE"
 
-EthernetNetIf eth(HOSTNAME);
-HTTPClient http;
-NTPClient ntp;
-HTTPServer svr;
 
-DigitalOut led1(LED1, "led1");
-DigitalOut led2(LED2, "led2");
-DigitalOut led3(LED3, "led3");
-DigitalOut led4(LED4, "led4");
+    ThingSpeak ts("074MPWFODR7JHD1K", 6); 
+    C12832 lcd(p5, p7, p6, p8, p11);
+    Sensor current(p19,4);
+    Sensor voltage(p20,24);
+   
 
-void DoEcho(char* input, char* output);
-RPCFunction Echo(&DoEcho, "echo");
-
-void DoEcho(char* input, char* output) {
-    printf("%s\n", input);
-    strcpy(output, input);
-}
 
 int main() {
-
-    printf("\n\n/* Segundo Equipo NetServices library demonstration */\n");
-    printf("Try starting the program with the network disconnected and then connect after a few timeouts reported\n\n");
-    EthernetErr ethErr;
-    int count = 0;
-    do {
-        printf("Setting up %d...\n", ++count);
-        ethErr = eth.setup();
-        if (ethErr) printf("Timeout\n", ethErr);
-    } while (ethErr != ETH_OK);
-
-    printf("Connected OK\n");
-    const char* hwAddr = eth.getHwAddr();
-    printf("HW address : %02x:%02x:%02x:%02x:%02x:%02x\n",
-           hwAddr[0], hwAddr[1], hwAddr[2],
-           hwAddr[3], hwAddr[4], hwAddr[5]);
-
-    IpAddr ethIp = eth.getIp();
-    printf("IP address : %d.%d.%d.%d\n", ethIp[0], ethIp[1], ethIp[2], ethIp[3]);
-    printf("Check router DHCP table for name : %s\n", eth.getHostname());
-
-    printf("\nHTTPClient get...\n");
-    HTTPText txt;
-    HTTPResult r = http.get("http://mbed.org/media/uploads/donatien/hello.txt", &txt);
-    if (r==HTTP_OK) {
-        printf("Result ok : %s\n", txt.gets());
-    } else {
-        printf("Error %d\n", r);
-    }
-
-    time_t ctTime;
-    ctTime = time(NULL);
-    printf("\nCurrent time is (UTC): %d %s\n", ctTime, ctime(&ctTime));
-    printf("NTP setTime...\n");
-    Host server(IpAddr(), 123, "pool.ntp.org");
-    printf("Result : %d\n", ntp.setTime(server));
-
-    ctTime = time(NULL);
-    printf("\nTime is now (UTC): %d %s\n", ctTime, ctime(&ctTime));
-
-    printf("NTP setTime to a deliberately incorrect server...\n");
-    server.setName("www.google.com");
-    printf("Result : %d\n", ntp.setTime(server));
-
-    ctTime = time(NULL);
-    printf("\nTime should still be correct (UTC): %d %s\n", ctTime, ctime(&ctTime));
+    INA219 ina219;
+    float U, I, ina[3];
+    int i;
+    
+    lcd.cls();
+    lcd.locate(0,3);    
+    ts.connect();
+    lcd.printf("Ethernet Connected ! \n");
+    ts.getIP();
+    
+    wait(1);
     
-    char ip[16];
-    sprintf(ip, "%d.%d.%d.%d", ethIp[0], ethIp[1], ethIp[2], ethIp[3]);
-    
-#define PORT 80
-    svr.addHandler<RPCHandler>("/rpc");
-    svr.bind(PORT);
-    printf("Server listening (port %d)\n", PORT);
-    printf("- LED1 should flash\n");
-    printf("- type into browser to test url decode : %s/rpc/echo/run \"quoted string with <>\" or http://192.168.1.103/rpc/echo/run%%20%%22quoted%%20string%%20with%%20%%3C%%3E%%22\n", ip);
-
-    Timer tm;
-    tm.start();
-
-    while (true) {
-        Net::poll();
-        if (tm.read() > 0.5) {
-            led1 = !led1;
-            tm.start();
-        }
+    while(1){
+           
+        voltage.read();
+        current.read();           
+        U = voltage.calc();       
+        I = current.calc();
+        ina[0] = ina219.readRawReg(0x04); //* Current *//
+        ina[1] = ina219.readRawReg(0x02); //* Bus Voltage *//
+        ina[2] = ina219.readRawReg(0x03); //* Power *// 
+        
+        lcd.cls();
+        lcd.locate(0,3);
+        lcd.printf("V = %.2f V \n",U);
+        lcd.printf("I = %.2f A \n",I);
+        lcd.printf("P = %.2f W \n", U*I);
+        lcd.locate(0,14);        
+        lcd.printf("V = %.2f V \n",ina[1]);
+        lcd.printf("I = %.2f A \n",ina[0]);
+        lcd.printf("P = %.2f W \n",ina[2]);
+        
+        i = 1;
+        ts.setField(U, i++);
+        ts.setField(I, i++); 
+        for(int j = 0 ; j<= 3; j++)
+            ts.setField(ina[j], i++);
+            
+        ts.putUp();
+        wait(15);                    
     }
 }
\ No newline at end of file
--- a/mbed.bld	Wed Dec 15 18:03:19 2010 +0000
+++ b/mbed.bld	Fri Nov 20 08:28:11 2015 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/mbed_official/code/mbed/builds/e2ac27c8e93e
+http://mbed.org/users/mbed_official/code/mbed/builds/63bcd7ba4912