This is a program that turns your mbed device into a FireFly gateway, that publishes data from FireFly BLE modules to the IBM Watson IoT Platform.

Dependencies:   C12832 EthernetInterface MQTT mbed-rtos mbed

Fork of IBMIoTClientEthernetExample by IBM Watson IoT

Files at this revision

API Documentation at this revision

Comitter:
skoda
Date:
Tue Mar 01 06:20:45 2016 +0000
Parent:
22:e6b69714b59a
Child:
25:93368e752d2d
Commit message:
before MODSERIAL

Changed in this revision

C027.h Show annotated file Show diff for this revision Revisions of this file
K64F.h Show annotated file Show diff for this revision Revisions of this file
LPC1768.h Show annotated file Show diff for this revision Revisions of this file
MODSERIAL-RTOS.lib 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
--- a/C027.h	Mon Nov 30 09:12:22 2015 +0000
+++ b/C027.h	Tue Mar 01 06:20:45 2016 +0000
@@ -26,6 +26,9 @@
 LM75B sensor(D14,D15);
 DigitalIn Up(A2); DigitalIn Down(A3); DigitalIn Left(A4); DigitalIn Right(A5); DigitalIn Click(D4);
 AnalogIn ain1 (A0); AnalogIn ain2 (A1);
+Serial pc(USBTX, USBRX);
+Serial xbee(P4_28,P4_29);
+
 
 #define LED2_OFF 0
 #define LED2_ON 1
--- a/K64F.h	Mon Nov 30 09:12:22 2015 +0000
+++ b/K64F.h	Tue Mar 01 06:20:45 2016 +0000
@@ -30,7 +30,9 @@
 
 //Matjaz
 //I2C masterI2C(PTE25,PTE24);        //I2C (PinName sda, PinName scl) 
-I2CSlave slave(PTE25, PTE24);
+//I2CSlave slave(PTE25, PTE24);
+Serial pc(USBTX, USBRX);
+Serial xbee(PTC17,PTC16);
 
 
 
--- a/LPC1768.h	Mon Nov 30 09:12:22 2015 +0000
+++ b/LPC1768.h	Tue Mar 01 06:20:45 2016 +0000
@@ -34,7 +34,10 @@
 AnalogIn ain2(p20);
 //Matjaz
 //I2CSlave slave(p28, p27); //p9sda p10scl
-I2CSlave slave(p9, p10);
+//I2CSlave slave(p9, p10);
+Serial pc(USBTX, USBRX);
+Serial xbee(p9,p10);
+//Serial xbee(p13,p14);
 
 #define LED2_OFF 0
 #define LED2_ON 1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MODSERIAL-RTOS.lib	Tue Mar 01 06:20:45 2016 +0000
@@ -0,0 +1,1 @@
+http://developer.mbed.org/users/Sissors/code/MODSERIAL-RTOS/#913b04338760
--- a/main.cpp	Mon Nov 30 09:12:22 2015 +0000
+++ b/main.cpp	Tue Mar 01 06:20:45 2016 +0000
@@ -22,7 +22,7 @@
  *    Add magnetometer sensor output to IoT data stream
  *
  *******************************************************************************/
-
+#include "mbed.h"
 #include "LM75B.h"
 #include "MMA7660.h"
 #include "MQTTClient.h"
@@ -35,8 +35,8 @@
 #define __APP_SW_REVISION__ "18"
 
 // Configuration values needed to connect to IBM IoT Cloud
-#define ORG "jfzeoz"             // For a registered connection, replace with your org
-#define ID "mbedGateway"                        // For a registered connection, replace with your id
+#define ORG "gpr4zb"             // For a registered connection, replace with your org
+#define ID "FFtesting"                        // For a registered connection, replace with your id
 #define AUTH_TOKEN "123456789"                // For a registered connection, replace with your auth-token
 #define TYPE "FireFly"       // For a registered connection, replace with your type
 
@@ -95,13 +95,12 @@
 int indexBufWrite = 0;
 int indexBufRead = 0;
 char IoTbuffer[BUFFER_SIZE][DATA_LENGTH];
+int SerialMessageLength = 142;
+char data[142];
 
 int DELETE = 0;
 
-
-Serial pc(USBTX, USBRX);
-
-
+Thread        *RX_THREAD_POINTER;
 
 
 // If we wanted to manually set the MAC address,
@@ -177,100 +176,43 @@
     }
 }
 
-//matjaz dodamo nit za komunikacijo preko i2c
-void firefly_com (void const *args)
-{
 
-    char buf[100];                     
-    int i = 0;
-
-
-    
+void rx_thread(void const *argument){
 
-    LOG("Slave here i am ready to punish me\r\n");
-    
-/*    
-    while(1){
-        
-        masterI2C.write(addr, send_test_byte, 1);    //write (int address, const char *data, int length, bool repeated=false)
-        Thread::wait(100);                          //da ima cas slave odgovorit
-        masterI2C.read(addr, recv_test_byte, 1); 
-        LOG("I2C send 0x56 slave reflect 0x%x:\n", recv_test_byte[0]);
-        Thread::wait(1000);
-    }
-*/
-
-    while(1){
-
-
-         i = slave.receive();
-         DELETE++;
-         /*if(i>0)
-            LOG("i: %d\r\n",i);*/
-            
-         switch (i) 
-         {
-             case I2CSlave::ReadAddressed:
-                if(indexBufRead != indexBufWrite){
-                    slave.write(IoTbuffer[indexBufRead],20);                 
-                    LOG("Slave sent mesage: %s\r\n",IoTbuffer[indexBufRead]);
-                    indexBufRead++;
-                    if(indexBufRead == BUFFER_SIZE){
-                        indexBufRead = 0;
-                    }
+    while(true){
+        int index = 0;
+        bool cloudSend = false;
+        while(xbee.readable()){
+            if(index < SerialMessageLength){
+                data[index] = xbee.getc();
+                pc.printf("%c",data[index]);
+                if(index == 0){
+                  if(data[index] == '!'){
+                    data[index] = ' ';
+                    index++;//somehow delete the \nfrom beginning and \r from the end
+                  }
                 }else{
-                    response = "00000000000000000000"; 
-                    slave.write(response,20);                 
-                    //LOG("Slave sent mesage: %s\r\n",response);
-                }          
-                 break;
-                 
-             case I2CSlave::WriteGeneral:
-             
-                 slave.read(buf, 20);
-                 //LOG("Napacen case\r\n");
-                 break;
-                 
-             case I2CSlave::WriteAddressed:
-             
-                 slave.read(buf, 20);
-                 //parsanje
-                 lux  = ((uint16_t)buf[11] << 8) | buf[12];       //že skalirano v luxe
-                 t    = ((uint16_t)buf[13] << 8) | buf[14];       //raw
-
-                //buf[4] = 0x55;
-                //buf[5] = 0xff;
-                 ax   = ((uint16_t)buf[15] << 8) | buf[16];       //pospeškometer ay                 ax   = (((buf[4]&0xFF) << 8) | (buf[5]&0xFF));       //pospeškometer ax
-                 ax = (ax >> 6);                
-                 ay   = ((uint16_t)buf[17] << 8) | buf[18];       //pospeškometer ay
-                 ay = (ay >> 6);
-                 az   = ((uint16_t)buf[19] << 8) | buf[20];       //pospeškometer az
-                 az = (az >> 6);
-                 
-                 int tmp = 48;
-                 deviceID = 0;
-                 //sprintf(tmp, "%c%c", buf[3],buf[4]);
-                 deviceID   =  (buf[3]-tmp)*10;      //device ID from whom the message was received 
-                 deviceID += (buf[4]-tmp);
-                 respond = 1;
-                 //rh   = ((uint16_t)buf[4] << 8) | buf[5];
-                 
-                 if(deviceID == 12){
-                    respond = 0;
+                  if(data[index] == '?'){
+                    data[index] = ' ';
+                    index = 0;
+                    cloudSend = true;
+                  }else{
+                    index++;
+                  }
                 }
-
-                 //LOG("Slave read 0x:%d\r\n", lux);
-                 //LOG("Slave read 0x:%x%x%x%x\r\n", buf[0],buf[1],buf[2],buf[3]);
-                 LOG("Slave Received %s \r\n", buf);
+              }else{
+                index = 0;
+              }
+              if(cloudSend == true){
+                cloudSend = false;
+                pc.printf(data);
+                pc.printf("\r");
                 
-                 break;
-                 
-         } // switch .. 
-         //Thread::wait(1);   
-        
+                //if (publish(&client, &ipstack) != 0) 
+                  //  attemptConnect(&client, &ipstack);   // if we have lost the connection
+            }
+        }
     }
-
-
 }
 
 
@@ -465,7 +407,6 @@
     {       
         connected = true;
         //green();    
-        //matjaz zelja je da je off
         off();   
         displayMessage("Connected");
         wait(1);
@@ -606,29 +547,38 @@
                 blink_interval = (blink_rate <= 0) ? 0 : (blink_rate > 50 ? 1 : 50/blink_rate);
             }
         }
-    }else if (memcmp(start, "respond", len) == 0)
+    }else if (memcmp(start, "cmd1", len) == 0)
     {
         char payload[message.payloadlen + 1];
         sprintf(payload, "%.*s", message.payloadlen, (char*)message.payload);
-    
-        char* pos = strchr(payload, '}');
+        
+          xbee.putc('\n');
+          pc.putc('\n');
+          
+          int msgLen = 0;
+          for (int i=8;i<message.payloadlen-2;i++) { //reading only the command from the payload
+            xbee.putc((char)payload[i]);
+            pc.putc((char)payload[i]);
+            msgLen++;
+          }
+          
+          while(msgLen < 7){
+            msgLen++;
+            xbee.putc('x');
+            pc.putc('x');
+          }
+          xbee.putc('\r');
+          pc.putc('\r');
+        /*char* pos = strchr(payload, '}');
         if (pos != NULL)
         {
             *pos = '\0';
             if ((pos = strchr(payload, ':')) != NULL)
             {
-                response = (pos+1);
-                
-                strcpy(IoTbuffer[indexBufWrite], response);
-                //LOG("%d sporocilo v bufferju: %s size of IoTbuffer: %d \r\n", indexBufWrite, IoTbuffer[indexBufWrite], response);
-                indexBufWrite++;
-                if(indexBufWrite == BUFFER_SIZE){
-                    indexBufWrite = 0;
-                }
-
-                //LOG("%s \n", response);
+                response = (pos+2);
+                xbee.puts(response);
             }
-        }
+        }*/
     }else
         WARN("Unsupported command: %.*s\n", len, start);
 }
@@ -644,14 +594,18 @@
     
     led2 = LED2_OFF; // K64F: turn off the main board LED 
     
-    //matjaz set I2C parameters
-    slave.address(0xC2);
-    slave.frequency(400000);
+    xbee.baud(38400);
+    pc.baud(115200);
+    xbee.puts("\nRDYxxxx\r");
+    wait(5);
+    xbee.puts("\nRDYxxxx\r");
+    pc.printf("i sent RDY to FireFly\r\n");
     
     displayMessage("Connecting");
     Thread yellow_thread(flashing_yellow);
     Thread menu_thread(menu_loop);  
-    Thread firefly (firefly_com);
+    Thread t_rx(rx_thread);
+    
     
     LOG("***** IBM IoT Client Ethernet Example *****\n");
     MQTTEthernet ipstack;
@@ -680,8 +634,7 @@
     
     blink_interval = 0;
     int count = 0;
-
-    pc.baud(115200);
+    
     while (true)
     {
         if (respond>0)
@@ -691,51 +644,9 @@
             respond = 0;
         }
         
-        /*if (blink_interval == 0)
-            led2 = LED2_OFF;
-        else if (count % blink_interval == 0)
-            led2 = !led2;*/
+        wait(3);
             
         client.yield(10);  // allow the MQTT client to receive messages
     }
-
-
-/*
-    while(1){
-         static int i;
-         static char buf[20];
-         uint16_t lux;
-         
-         i = slave.receive();
-         
-         if(i>0)
-            LOG("i: %d\r\n",i);
-            
-         switch (i) 
-         {
-             case I2CSlave::ReadAddressed:
-                                      
-                 slave.write(buf,2);                 
-                 LOG("Slave send mesage0x%x\r\n",buf[0]);                              
-                 break;
-                 
-             case I2CSlave::WriteGeneral:
-             
-                 slave.read(buf, 10);
-                 LOG("Napacen case\r\n");
-                 break;
-                 
-             case I2CSlave::WriteAddressed:
-             
-                 slave.read(buf, 19);
-                 lux = ((uint16_t)buf[0] << 8) | buf[1];
-
-                 LOG("Slave read 0x:%d\r\n", lux);
-
-                 break;
-                 
-         } // switch ..    
-        
-    }
-*/    
+  
 }