Thermometer connected to internet

Dependencies:   BME280 EthernetInterface FXOS8700Q HTTPClient-wolfSSL NTPClient NetworkAPI OAuth4Tw TSL2561_I2C eCompass_FPU_Lib mbed-rtos mbed wolfSSL

Fork of TCP_Server_Example by Roy van Dam

Revision:
12:12369ee344ab
Parent:
11:90554d22ade5
--- a/main.cpp	Sat Nov 15 21:46:59 2014 +0000
+++ b/main.cpp	Sun Sep 27 11:04:54 2015 +0000
@@ -1,108 +1,58 @@
 #include "mbed.h"
+#include "rtos.h"
 #include "EthernetInterface.h"
- 
-#include "NetworkAPI/buffer.hpp"
-#include "NetworkAPI/select.hpp"
-#include "NetworkAPI/ip/address.hpp"
-#include "NetworkAPI/tcp/socket.hpp"
-using namespace network;
- 
-#define MAX_CLIENTS 5
- 
-int
-main()
+
+#include "Port.h"
+#include "EnvServer.h"
+#include "StatusLED.h"
+#include "Sensor.h"
+#include "Twitter.h"
+
+extern EthernetInterface eth;
+extern Serial pc;
+
+Serial pc(USBTX, USBRX);
+EthernetInterface eth;
+
+int main()
 {
-    EthernetInterface interface;
-    interface.init();
-    interface.connect();
-    printf("IP Address is %s\n\r", interface.getIPAddress());
-     
-    Select select;
-    tcp::Socket server;
-    tcp::Socket client[MAX_CLIENTS];
-    tcp::Socket *socket = NULL;
-     
-    int result = 0;
-    int index = 0;
-     
-    network::Buffer buffer(256);
-    std::string message("Hello world!");
-     
-    // Configure the server socket (assume everty thing works)
-    server.open();
-    server.bind(1234);
-    server.listen(MAX_CLIENTS);
-   
-    // Add sockets to the select api
-    select.set(&server, Select::Read);
-    for (index = 0; index < MAX_CLIENTS; index++) {
-        select.set(&client[index], Select::Read);
+    int ret;
+
+    // Timer for Hearbeat LED
+    RtosTimer HBLEDTickTimer(HBLedTicker,osTimerPeriodic);
+        
+    // Initialize COM Port
+    pc.baud(115200);
+
+    // Initialize Status LED
+    pOBStatusLED=new StatusLED(new DigitalOut(LED_G),new DigitalOut(LED_R),new DigitalOut(LED_B));
+
+    // Initialize Sensor with I2C port
+    pSensor=new BME280(PTE25, PTE24);
+    pLumSensor=new TSL2561_I2C(PTE25, PTE24);
+    pLumSensor->enablePower();
+
+    //Initialize ethernet interface
+    eth.init(); //Use DHCP
+    printf("Initialized, MAC: %s\n", eth.getMACAddress());
+    while ((ret = eth.connect()) != 0) {
+        printf("Error eth.connect() - ret = %d\n", ret);
     }
-     
-    do {
-        // Wait for activity
-        result = select.wait();
-        if (result < -1) {
-            printf("Failed to select\n\r");
-            break;
-        }
-         
-        // Get the first socket
-        socket = (tcp::Socket *)select.getReadable();
-         
-        for (; socket != NULL; socket = (tcp::Socket *)select.getReadable()) {
-            // Check if there was a connection request.
-            if (socket->getHandle() == server.getHandle()) {                
-                // Find an unused client
-                for (index = 0; index < MAX_CLIENTS; index++) {
-                    if (client[index].getStatus() == network::Socket::Closed) {
-                        break;
-                    }
-                }
-                 
-                // Maximum connections reached
-                if (index == MAX_CLIENTS) {
-                    printf("Maximum connections reached\n\r");
-                    continue;
-                }
-             
-                // Accept the client
-                socket->accept(client[index]);
-                printf("Client connected %s:%d\n\r",
-                    client[index].getRemoteEndpoint().getAddress().toString().c_str(),
-                    client[index].getRemoteEndpoint().getPort());
-                     
-                // Send a nice message to the client
-                client[index].write((void *)message.data(), message.size());
-                continue;
-            }
-             
-            // It was not the server socket, so it must be a client talking to us.
-            switch (socket->read(buffer)) {
-                case 0:
-                    // Remote end disconnected
-                    printf("Client disconnected %s:%d\n\r",
-                        socket->getRemoteEndpoint().getAddress().toString().c_str(),
-                        socket->getRemoteEndpoint().getPort());
-                     
-                    // Close socket
-                    socket->close();
-                    break;
-                 
-                case -1:
-                    printf("Error while reading data from socket\n\r");
-                    socket->close();
-                    break;
-                 
-                default:
-                    printf("Message from %s:%d\n\r",
-                        socket->getRemoteEndpoint().getAddress().toString().c_str(),
-                        socket->getRemoteEndpoint().getPort());
-                         
-                    printf("%s\n\r", (char *)buffer.data());
-                    break;
-            }
-        }
-             
-    } while (server.getStatus() == network::Socket::Listening);
+    printf("Connected, IP: %s, MASK: %s, GW: %s\n",
+           eth.getIPAddress(), eth.getNetworkMask(), eth.getGateway());
+
+    // Correct internal RTC by connecting NTP Server
+    updateTime();
+
+    // Start Heartbeat LED Tick Thread
+    HBLEDTickTimer.start(HBLED_CYCLE);
+
+    // Start Server Thread
+    Thread ThServer(EnvServer);
+
+    // Start Twitter Client Thread
+    Thread TwetterClientTh(TwitterClient,NULL,osPriorityNormal,16384);
+    
+    // wait forever
+    Thread::wait(osWaitForever);
 }
\ No newline at end of file