ATT example code
Dependencies: WNCInterface mbed-rtos mbed
main.cpp
- Committer:
- surajdagar
- Date:
- 2017-05-22
- Revision:
- 0:2bfa06d10e28
File content as of revision 0:2bfa06d10e28:
#include "mbed.h" #include "MQTTClient.h" #include "MQTTFormat.h" #include "MQTTWNCInterface.h" #include "rtos.h" #include "k64f.h" #include "HTS221.h" #include "MODSERIAL.h" I2C i2c(PTC11, PTC10); //SDA, SCL -- define the I2C pins being used MODSERIAL pc(USBTX, USBRX); MODSERIAL pump(PTC15, PTC14);//TX, RX to connect pump #include "hardware.h" /* #define ORG_ID "44a8w4" #define DEVICE_TYPE "IoT-Moog-1" #define DEVICE_NAME "IoT-Moog-Device1" #define USERNAME "use-token-auth" #define PASSWORD "ih*SKz2AyUSt+I*L0N" */ #define ORG_ID "hpy42p" #define DEVICE_TYPE "PumpTest" #define DEVICE_NAME "SomethingOtherThanPumpTest" #define USERNAME "use-token-auth" #define PASSWORD "SLD21utaPZP7TE8Vgk" #define URL ORG_ID ".messaging.internetofthings.ibmcloud.com" #define CLIENTSTR "d:" ORG_ID ":" DEVICE_TYPE ":%s" #define PORT 1883 // MQTT broker port number #define PUBLISH_TOPIC "iot-2/evt/status/fmt/json" // MQTT topic #define SUBSCRIBTOPIC "iot-2/cmd/+/fmt/+" /// Largest msg possible is 111 bytes - header, 99 data bytes, CheckSum, LF/CR #define PDMS_MAX_COMMAND_SIZE 111 Thread serial_thread; volatile int key_reader =0; volatile int old_Key =0; char command_str[PDMS_MAX_COMMAND_SIZE]; unsigned char AIL_Enable=0; Queue<uint32_t, 6> messageQ; // LED color control function void controlLED(color_t led_color) { switch(led_color) { case red : greenLED = blueLED = 1; redLED = 0.7; break; case green : redLED = blueLED = 1; greenLED = 0.7; break; case blue : redLED = greenLED = 1; blueLED = 0.7; break; case off : redLED = greenLED = blueLED = 1; break; } } // Switch 2 interrupt handler void sw2_ISR(void) { messageQ.put((uint32_t*)22); } // Switch3 interrupt handler void sw3_ISR(void) { messageQ.put((uint32_t*)33); } // MQTT message arrived callback function void messageArrived(MQTT::MessageData& md) { MQTT::Message &message = md.message; PRINTF("Receiving MQTT message: %.*s\r\n", message.payloadlen, (char*)message.payload); if (message.payloadlen == 3) { if (strncmp((char*)message.payload, "red", 3) == 0) controlLED(red); else if(strncmp((char*)message.payload, "grn", 3) == 0) controlLED(green); else if(strncmp((char*)message.payload, "blu", 3) == 0) controlLED(blue); else if(strncmp((char*)message.payload, "off", 3) == 0) controlLED(off); } } void alla_serial() { printf("Enter Thread alla_serial"); while(1) { memset(command_str, 0x00,PDMS_MAX_COMMAND_SIZE); pump.gets(command_str, PDMS_MAX_COMMAND_SIZE); printf("%s", command_str); //print data received from Pump if(strstr(command_str, "Standby")) { key_reader=8; } else if(strstr(command_str, "Paused")) { if(AIL_Enable == 0) key_reader=1; else AIL_Enable--; } else if(strstr(command_str, "AIR IN LINE")) { key_reader=2; AIL_Enable=2; } else if(strstr(command_str, "Run Interval")) { key_reader=3; } else if(strstr(command_str, "Run Continous")) { key_reader=4; } else if(strstr(command_str, "DOOR OPEN")) { key_reader=5; AIL_Enable=2; } else if(strstr(command_str, "Priming")) { key_reader=6; } else if(strstr(command_str, "PUMP WAITING")) { key_reader=7; } else if(strstr(command_str, "Cleared")) { key_reader=9; } else { printf("\n %s", command_str); } } } int main() { ////////////////////////////////////////////////////// pump.baud(115200); // pump.format(8, SerialBase::Even, 1); serial_thread.start(&alla_serial); ////////////////////////////////////////////////////// int rc, pSW2=0, txSel=0, good = 0; Timer tmr; char* topic = PUBLISH_TOPIC; char clientID[100], buf[100]; string st, uniqueID; HTS221 hts221; pc.baud(115200); rc = hts221.init(); if ( rc ) { PRINTF(BLU "HTS221 Detected (0x%02X)\n\r",rc); PRINTF(" Temp is: %0.2f F \r\n Huumid is: %02d %%\r\n\r\n", CTOF(hts221.readTemperature()), hts221.readHumidity()/10); } else { PRINTF(RED "HTS221 NOT DETECTED!\n\r"); } controlLED(green); // set SW2 and SW3 to generate interrupt on falling edge switch2.fall(&sw2_ISR); switch3.fall(&sw3_ISR); // initialize ethernet interface MQTTwnc ipstack = MQTTwnc(); // get and display client network info WNCInterface& eth = ipstack.getEth(); // construct the MQTT client MQTT::Client<MQTTwnc, Countdown> client = MQTT::Client<MQTTwnc, Countdown>(ipstack); controlLED(blue); char* hostname = URL; int port = PORT; // uniqueID = "IoT-Moog-Device1"; //Guru Device uniqueID = "SomethingOtherThanPumpTest"; // Suraj Device sprintf(clientID, CLIENTSTR, uniqueID.c_str()); PRINTF("Local network info...\r\n"); PRINTF("IP address is %s\r\n", eth.getIPAddress()); PRINTF("MAC address is %s\r\n", eth.getMACAddress()); PRINTF("Gateway address is %s\r\n", eth.getGateway()); PRINTF("Your <uniqueID> is: %s\r\n", uniqueID.c_str()); PRINTF("---------------------------------------------------------------\r\n"); MQTTPacket_connectData data = MQTTPacket_connectData_initializer; int tries; while( !good ) { tries=0; // connect to TCP socket and check return code tmr.start(); rc = 1; while( rc && tries < 3) { PRINTF("\r\n\r\n(%d) Attempting TCP connect to %s:%d: ", tries++, hostname, port); rc = ipstack.connect(hostname, port); if( rc ) { PRINTF("Failed (%d)!\r\n",rc); while( tmr.read_ms() < 5000 ) ; tmr.reset(); } else { PRINTF("Success!\r\n"); rc = 0; } } if( tries < 3 ) tries = 0; else continue; data.willFlag = 0; data.MQTTVersion = 3; data.clientID.cstring = clientID; data.username.cstring = USERNAME; data.password.cstring = PASSWORD; data.keepAliveInterval = 10; data.cleansession = 1; rc = 1; tmr.reset(); while( !client.isConnected() && rc && tries < 3) { PRINTF("(%d) Attempting MQTT connect to '%s': ", tries++, clientID); rc = client.connect(data); if( rc ) { PRINTF("Failed (%d)!\r\n",rc); while( tmr.read_ms() < 5000 ); tmr.reset(); } else PRINTF("Success!\r\n"); } if( tries < 3 ) tries = 0; else continue; // subscribe to MQTT topic tmr.reset(); rc = 1; while( rc && client.isConnected() && tries < 3) { PRINTF("(%d) Attempting to subscribing to MQTT topic '%s': ", tries, SUBSCRIBTOPIC); rc = client.subscribe(SUBSCRIBTOPIC, MQTT::QOS0, messageArrived); if( rc ) { PRINTF("Failed (%d)!\r\n", rc); while( tmr.read_ms() < 5000 ); tries++; tmr.reset(); } else { good=1; PRINTF("Subscribe successful!\r\n"); } } while (!good); } MQTT::Message message; message.qos = MQTT::QOS0; message.retained = false; message.dup = false; message.payload = (void*)buf; while(true) { osEvent switchEvent = messageQ.get(100); if(key_reader != old_Key) { old_Key = key_reader; memset(buf,0x00,sizeof(buf)); //sprintf(buf, "{\"d\" : {\"Key\" : %d }}", key_reader); sprintf(buf, "{\"Key\":\"%d\"}", key_reader); PRINTF("Publishing MQTT message '%s' ", (char*)message.payload); message.payloadlen = strlen(buf); PRINTF("\n payloadlen:(%d)\r\n",message.payloadlen); rc = client.publish(topic, message); if( rc ) { PRINTF("Publish request failed! (%d)\r\n",rc); FATAL_WNC_ERROR(resume); } } else { client.yield(1000); } } }