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
Diff: main.cpp
- 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