hwsdf

Dependencies:   C12832 hw4f HW4 MQTT

Dependents:   HW4

Fork of HW4 by Hyoeun Choi

main.cpp

Committer:
Hyoeunchoi
Date:
2018-01-06
Revision:
24:4b8390b87ab3
Parent:
23:d508f2806faa

File content as of revision 24:4b8390b87ab3:

 // change this to 1 to output messages to LCD instead of serial
#define logMessage printf
#define MQTTCLIENT_QOS2 1

#include <string>
#include "mbed.h"
#include "easy-connect.h"
#include "MQTTNetwork.h"
#include "MQTTmbed.h"
#include "MQTTClient.h"
#include "TCPSocket.h"
//#include "DHT22.h"
#include "DHT_2.h"

#define WIFI_HW_RESET_PIN D4

#define MQTT_BROKER_ADDR "192.168.0.8"
#define MQTT_BROKER_PORT 1883

DigitalOut wifiHwResetPin(WIFI_HW_RESET_PIN);
DigitalOut led2(LED2);
DHT sensor(D7,DHT22);
Serial pc(USBTX, USBRX, 115200);
volatile bool flag = false;
Mutex mqttMtx;
char* topic1 = "LED";
char* topic2 = "TEMPER";
char* topic3 = "LEDS";

void messageArrived(MQTT::MessageData& md)
{
  MQTT::Message &message = md.message;
//  logMessage("Message arrived: qos %d, retained %d, dup %d, packetid %d\r\n",
//  message.qos, message.retained, message.dup, message.id);
  logMessage("Payload %.*s\r\n", message.payloadlen, (char*)message.payload);
 
  char fwdTarget = ((char *)message.payload)[0];
  switch(fwdTarget)
  {
  case '0': // turn off
    led2 = 0;
    break;
  case '1': //turn on
    led2 = 1;
    break;
  case '2': //LED status
    flag = true;
    break;
  default:
    pc.printf("Unknown MQTT message\n");
    break;
  }
}
int main(int argc, char* argv[])
{       //network setting
      float version = 0.5;
      pc.baud(115200);
      logMessage("MQTT example: version is %.2f\r\n", version);
      wait(0.2); //delay startup
      pc.printf("Resetting ESP8266 Hardware...\r\n");
      pc.printf("Attempting to connect to access point...\r\n");
     
      NetworkInterface* network = easy_connect(true);
        if (!network) {
        pc.printf("Error in east connection\r\n");
        return -1;
        }
 
       MQTTNetwork mqttNetwork(network);
       MQTT::Client<MQTTNetwork, Countdown> client(mqttNetwork);
       logMessage("Connecting to %s:%d\r\n", MQTT_BROKER_ADDR, MQTT_BROKER_PORT);
       int rc = mqttNetwork.connect(MQTT_BROKER_ADDR, MQTT_BROKER_PORT);
       if (rc != 0)
          logMessage("rc from TCP connect is %d\r\n", rc);
        
        
        MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
        data.MQTTVersion = 3;
        data.clientID.cstring = "mbed-jcm";
        data.username.cstring = "user-jcm";
        data.password.cstring = "testpassword";
        if ((rc = client.connect(data)) != 0)
        logMessage("rc from MQTT connect is %d\r\n", rc);
        if ((rc = client.subscribe(topic1, MQTT::QOS0, messageArrived)) != 0)
        logMessage("rc from MQTT subscribe is %d\r\n", rc);

        float c = 0;
        int error = 0;
        int count =0;
        pc.printf("starting to read temperature...\r\n");
        
        while(1){
            Thread::wait(1000);
            char buf[100];

            error = sensor.readData();
            
            if (count == 5) {
                pc.printf("5 secs over!");  
                pc.printf("Publish: TEMPER\r\n");
                if (0 == error) {
                    c   = sensor.ReadTemperature(CELCIUS);
                    printf("Temperature: %.1f\r\n", c);
                } else if(error == 6){
                    printf("CheckSum Error\r\n");

                sprintf(buf, "%3.1f", c);
                message.qos = MQTT::QOS2;
                message.retained = false;
                message.dup = false;
                message.payload = (void*)buf;
                message.payloadlen = strlen(buf)+1;
                mqttMtx.lock();
                rc = client.publish(topic2, message);
                mqttMtx.unlock();  
            
                count = 0;
                }
            if(!client.isConnected())
                NVIC_SystemReset(); // soft reset
                 
            client.yield(10);
            count++;
            pc.printf("%d\r\n",count); 

            }
    }
    
    return 0;
}