ATT example code

Dependencies:   WNCInterface mbed-rtos mbed

Committer:
surajdagar
Date:
Mon May 22 19:50:26 2017 +0000
Revision:
0:2bfa06d10e28
Wireless solution ATT kit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
surajdagar 0:2bfa06d10e28 1 #include "mbed.h"
surajdagar 0:2bfa06d10e28 2 #include "MQTTClient.h"
surajdagar 0:2bfa06d10e28 3 #include "MQTTFormat.h"
surajdagar 0:2bfa06d10e28 4 #include "MQTTWNCInterface.h"
surajdagar 0:2bfa06d10e28 5 #include "rtos.h"
surajdagar 0:2bfa06d10e28 6 #include "k64f.h"
surajdagar 0:2bfa06d10e28 7 #include "HTS221.h"
surajdagar 0:2bfa06d10e28 8 #include "MODSERIAL.h"
surajdagar 0:2bfa06d10e28 9
surajdagar 0:2bfa06d10e28 10 I2C i2c(PTC11, PTC10); //SDA, SCL -- define the I2C pins being used
surajdagar 0:2bfa06d10e28 11 MODSERIAL pc(USBTX, USBRX);
surajdagar 0:2bfa06d10e28 12 MODSERIAL pump(PTC15, PTC14);//TX, RX to connect pump
surajdagar 0:2bfa06d10e28 13
surajdagar 0:2bfa06d10e28 14 #include "hardware.h"
surajdagar 0:2bfa06d10e28 15 /*
surajdagar 0:2bfa06d10e28 16 #define ORG_ID "44a8w4"
surajdagar 0:2bfa06d10e28 17 #define DEVICE_TYPE "IoT-Moog-1"
surajdagar 0:2bfa06d10e28 18 #define DEVICE_NAME "IoT-Moog-Device1"
surajdagar 0:2bfa06d10e28 19 #define USERNAME "use-token-auth"
surajdagar 0:2bfa06d10e28 20 #define PASSWORD "ih*SKz2AyUSt+I*L0N"
surajdagar 0:2bfa06d10e28 21 */
surajdagar 0:2bfa06d10e28 22
surajdagar 0:2bfa06d10e28 23 #define ORG_ID "hpy42p"
surajdagar 0:2bfa06d10e28 24 #define DEVICE_TYPE "PumpTest"
surajdagar 0:2bfa06d10e28 25 #define DEVICE_NAME "SomethingOtherThanPumpTest"
surajdagar 0:2bfa06d10e28 26 #define USERNAME "use-token-auth"
surajdagar 0:2bfa06d10e28 27 #define PASSWORD "SLD21utaPZP7TE8Vgk"
surajdagar 0:2bfa06d10e28 28
surajdagar 0:2bfa06d10e28 29 #define URL ORG_ID ".messaging.internetofthings.ibmcloud.com"
surajdagar 0:2bfa06d10e28 30 #define CLIENTSTR "d:" ORG_ID ":" DEVICE_TYPE ":%s"
surajdagar 0:2bfa06d10e28 31
surajdagar 0:2bfa06d10e28 32 #define PORT 1883 // MQTT broker port number
surajdagar 0:2bfa06d10e28 33 #define PUBLISH_TOPIC "iot-2/evt/status/fmt/json" // MQTT topic
surajdagar 0:2bfa06d10e28 34 #define SUBSCRIBTOPIC "iot-2/cmd/+/fmt/+"
surajdagar 0:2bfa06d10e28 35 /// Largest msg possible is 111 bytes - header, 99 data bytes, CheckSum, LF/CR
surajdagar 0:2bfa06d10e28 36 #define PDMS_MAX_COMMAND_SIZE 111
surajdagar 0:2bfa06d10e28 37 Thread serial_thread;
surajdagar 0:2bfa06d10e28 38 volatile int key_reader =0;
surajdagar 0:2bfa06d10e28 39 volatile int old_Key =0;
surajdagar 0:2bfa06d10e28 40 char command_str[PDMS_MAX_COMMAND_SIZE];
surajdagar 0:2bfa06d10e28 41 unsigned char AIL_Enable=0;
surajdagar 0:2bfa06d10e28 42 Queue<uint32_t, 6> messageQ;
surajdagar 0:2bfa06d10e28 43
surajdagar 0:2bfa06d10e28 44 // LED color control function
surajdagar 0:2bfa06d10e28 45 void controlLED(color_t led_color) {
surajdagar 0:2bfa06d10e28 46 switch(led_color) {
surajdagar 0:2bfa06d10e28 47 case red :
surajdagar 0:2bfa06d10e28 48 greenLED = blueLED = 1;
surajdagar 0:2bfa06d10e28 49 redLED = 0.7;
surajdagar 0:2bfa06d10e28 50 break;
surajdagar 0:2bfa06d10e28 51 case green :
surajdagar 0:2bfa06d10e28 52 redLED = blueLED = 1;
surajdagar 0:2bfa06d10e28 53 greenLED = 0.7;
surajdagar 0:2bfa06d10e28 54 break;
surajdagar 0:2bfa06d10e28 55 case blue :
surajdagar 0:2bfa06d10e28 56 redLED = greenLED = 1;
surajdagar 0:2bfa06d10e28 57 blueLED = 0.7;
surajdagar 0:2bfa06d10e28 58 break;
surajdagar 0:2bfa06d10e28 59 case off :
surajdagar 0:2bfa06d10e28 60 redLED = greenLED = blueLED = 1;
surajdagar 0:2bfa06d10e28 61 break;
surajdagar 0:2bfa06d10e28 62 }
surajdagar 0:2bfa06d10e28 63 }
surajdagar 0:2bfa06d10e28 64
surajdagar 0:2bfa06d10e28 65 // Switch 2 interrupt handler
surajdagar 0:2bfa06d10e28 66 void sw2_ISR(void) {
surajdagar 0:2bfa06d10e28 67 messageQ.put((uint32_t*)22);
surajdagar 0:2bfa06d10e28 68 }
surajdagar 0:2bfa06d10e28 69
surajdagar 0:2bfa06d10e28 70 // Switch3 interrupt handler
surajdagar 0:2bfa06d10e28 71 void sw3_ISR(void) {
surajdagar 0:2bfa06d10e28 72 messageQ.put((uint32_t*)33);
surajdagar 0:2bfa06d10e28 73 }
surajdagar 0:2bfa06d10e28 74
surajdagar 0:2bfa06d10e28 75 // MQTT message arrived callback function
surajdagar 0:2bfa06d10e28 76 void messageArrived(MQTT::MessageData& md) {
surajdagar 0:2bfa06d10e28 77 MQTT::Message &message = md.message;
surajdagar 0:2bfa06d10e28 78 PRINTF("Receiving MQTT message: %.*s\r\n", message.payloadlen, (char*)message.payload);
surajdagar 0:2bfa06d10e28 79
surajdagar 0:2bfa06d10e28 80 if (message.payloadlen == 3) {
surajdagar 0:2bfa06d10e28 81 if (strncmp((char*)message.payload, "red", 3) == 0)
surajdagar 0:2bfa06d10e28 82 controlLED(red);
surajdagar 0:2bfa06d10e28 83
surajdagar 0:2bfa06d10e28 84 else if(strncmp((char*)message.payload, "grn", 3) == 0)
surajdagar 0:2bfa06d10e28 85 controlLED(green);
surajdagar 0:2bfa06d10e28 86
surajdagar 0:2bfa06d10e28 87 else if(strncmp((char*)message.payload, "blu", 3) == 0)
surajdagar 0:2bfa06d10e28 88 controlLED(blue);
surajdagar 0:2bfa06d10e28 89
surajdagar 0:2bfa06d10e28 90 else if(strncmp((char*)message.payload, "off", 3) == 0)
surajdagar 0:2bfa06d10e28 91 controlLED(off);
surajdagar 0:2bfa06d10e28 92 }
surajdagar 0:2bfa06d10e28 93 }
surajdagar 0:2bfa06d10e28 94
surajdagar 0:2bfa06d10e28 95 void alla_serial()
surajdagar 0:2bfa06d10e28 96 {
surajdagar 0:2bfa06d10e28 97 printf("Enter Thread alla_serial");
surajdagar 0:2bfa06d10e28 98 while(1)
surajdagar 0:2bfa06d10e28 99 {
surajdagar 0:2bfa06d10e28 100 memset(command_str, 0x00,PDMS_MAX_COMMAND_SIZE);
surajdagar 0:2bfa06d10e28 101 pump.gets(command_str, PDMS_MAX_COMMAND_SIZE);
surajdagar 0:2bfa06d10e28 102 printf("%s", command_str); //print data received from Pump
surajdagar 0:2bfa06d10e28 103 if(strstr(command_str, "Standby"))
surajdagar 0:2bfa06d10e28 104 {
surajdagar 0:2bfa06d10e28 105 key_reader=8;
surajdagar 0:2bfa06d10e28 106 }
surajdagar 0:2bfa06d10e28 107 else if(strstr(command_str, "Paused"))
surajdagar 0:2bfa06d10e28 108 {
surajdagar 0:2bfa06d10e28 109 if(AIL_Enable == 0)
surajdagar 0:2bfa06d10e28 110 key_reader=1;
surajdagar 0:2bfa06d10e28 111 else
surajdagar 0:2bfa06d10e28 112 AIL_Enable--;
surajdagar 0:2bfa06d10e28 113 }
surajdagar 0:2bfa06d10e28 114 else if(strstr(command_str, "AIR IN LINE"))
surajdagar 0:2bfa06d10e28 115 {
surajdagar 0:2bfa06d10e28 116 key_reader=2;
surajdagar 0:2bfa06d10e28 117 AIL_Enable=2;
surajdagar 0:2bfa06d10e28 118 }
surajdagar 0:2bfa06d10e28 119 else if(strstr(command_str, "Run Interval"))
surajdagar 0:2bfa06d10e28 120 {
surajdagar 0:2bfa06d10e28 121 key_reader=3;
surajdagar 0:2bfa06d10e28 122 }
surajdagar 0:2bfa06d10e28 123 else if(strstr(command_str, "Run Continous"))
surajdagar 0:2bfa06d10e28 124 {
surajdagar 0:2bfa06d10e28 125 key_reader=4;
surajdagar 0:2bfa06d10e28 126 }
surajdagar 0:2bfa06d10e28 127 else if(strstr(command_str, "DOOR OPEN"))
surajdagar 0:2bfa06d10e28 128 {
surajdagar 0:2bfa06d10e28 129 key_reader=5;
surajdagar 0:2bfa06d10e28 130 AIL_Enable=2;
surajdagar 0:2bfa06d10e28 131 }
surajdagar 0:2bfa06d10e28 132 else if(strstr(command_str, "Priming"))
surajdagar 0:2bfa06d10e28 133 {
surajdagar 0:2bfa06d10e28 134 key_reader=6;
surajdagar 0:2bfa06d10e28 135 }
surajdagar 0:2bfa06d10e28 136 else if(strstr(command_str, "PUMP WAITING"))
surajdagar 0:2bfa06d10e28 137 {
surajdagar 0:2bfa06d10e28 138 key_reader=7;
surajdagar 0:2bfa06d10e28 139 }
surajdagar 0:2bfa06d10e28 140 else if(strstr(command_str, "Cleared"))
surajdagar 0:2bfa06d10e28 141 {
surajdagar 0:2bfa06d10e28 142 key_reader=9;
surajdagar 0:2bfa06d10e28 143 }
surajdagar 0:2bfa06d10e28 144 else
surajdagar 0:2bfa06d10e28 145 {
surajdagar 0:2bfa06d10e28 146 printf("\n %s", command_str);
surajdagar 0:2bfa06d10e28 147 }
surajdagar 0:2bfa06d10e28 148 }
surajdagar 0:2bfa06d10e28 149 }
surajdagar 0:2bfa06d10e28 150 int main() {
surajdagar 0:2bfa06d10e28 151 //////////////////////////////////////////////////////
surajdagar 0:2bfa06d10e28 152 pump.baud(115200);
surajdagar 0:2bfa06d10e28 153 // pump.format(8, SerialBase::Even, 1);
surajdagar 0:2bfa06d10e28 154 serial_thread.start(&alla_serial);
surajdagar 0:2bfa06d10e28 155 //////////////////////////////////////////////////////
surajdagar 0:2bfa06d10e28 156
surajdagar 0:2bfa06d10e28 157 int rc, pSW2=0, txSel=0, good = 0;
surajdagar 0:2bfa06d10e28 158 Timer tmr;
surajdagar 0:2bfa06d10e28 159 char* topic = PUBLISH_TOPIC;
surajdagar 0:2bfa06d10e28 160 char clientID[100], buf[100];
surajdagar 0:2bfa06d10e28 161 string st, uniqueID;
surajdagar 0:2bfa06d10e28 162
surajdagar 0:2bfa06d10e28 163 HTS221 hts221;
surajdagar 0:2bfa06d10e28 164
surajdagar 0:2bfa06d10e28 165 pc.baud(115200);
surajdagar 0:2bfa06d10e28 166 rc = hts221.init();
surajdagar 0:2bfa06d10e28 167 if ( rc ) {
surajdagar 0:2bfa06d10e28 168 PRINTF(BLU "HTS221 Detected (0x%02X)\n\r",rc);
surajdagar 0:2bfa06d10e28 169 PRINTF(" Temp is: %0.2f F \r\n Huumid is: %02d %%\r\n\r\n",
surajdagar 0:2bfa06d10e28 170 CTOF(hts221.readTemperature()), hts221.readHumidity()/10);
surajdagar 0:2bfa06d10e28 171 }
surajdagar 0:2bfa06d10e28 172 else {
surajdagar 0:2bfa06d10e28 173 PRINTF(RED "HTS221 NOT DETECTED!\n\r");
surajdagar 0:2bfa06d10e28 174 }
surajdagar 0:2bfa06d10e28 175
surajdagar 0:2bfa06d10e28 176 controlLED(green);
surajdagar 0:2bfa06d10e28 177
surajdagar 0:2bfa06d10e28 178 // set SW2 and SW3 to generate interrupt on falling edge
surajdagar 0:2bfa06d10e28 179 switch2.fall(&sw2_ISR);
surajdagar 0:2bfa06d10e28 180 switch3.fall(&sw3_ISR);
surajdagar 0:2bfa06d10e28 181
surajdagar 0:2bfa06d10e28 182 // initialize ethernet interface
surajdagar 0:2bfa06d10e28 183 MQTTwnc ipstack = MQTTwnc();
surajdagar 0:2bfa06d10e28 184
surajdagar 0:2bfa06d10e28 185 // get and display client network info
surajdagar 0:2bfa06d10e28 186 WNCInterface& eth = ipstack.getEth();
surajdagar 0:2bfa06d10e28 187
surajdagar 0:2bfa06d10e28 188 // construct the MQTT client
surajdagar 0:2bfa06d10e28 189 MQTT::Client<MQTTwnc, Countdown> client = MQTT::Client<MQTTwnc, Countdown>(ipstack);
surajdagar 0:2bfa06d10e28 190
surajdagar 0:2bfa06d10e28 191 controlLED(blue);
surajdagar 0:2bfa06d10e28 192
surajdagar 0:2bfa06d10e28 193 char* hostname = URL;
surajdagar 0:2bfa06d10e28 194 int port = PORT;
surajdagar 0:2bfa06d10e28 195 // uniqueID = "IoT-Moog-Device1"; //Guru Device
surajdagar 0:2bfa06d10e28 196 uniqueID = "SomethingOtherThanPumpTest"; // Suraj Device
surajdagar 0:2bfa06d10e28 197 sprintf(clientID, CLIENTSTR, uniqueID.c_str());
surajdagar 0:2bfa06d10e28 198
surajdagar 0:2bfa06d10e28 199 PRINTF("Local network info...\r\n");
surajdagar 0:2bfa06d10e28 200 PRINTF("IP address is %s\r\n", eth.getIPAddress());
surajdagar 0:2bfa06d10e28 201 PRINTF("MAC address is %s\r\n", eth.getMACAddress());
surajdagar 0:2bfa06d10e28 202 PRINTF("Gateway address is %s\r\n", eth.getGateway());
surajdagar 0:2bfa06d10e28 203 PRINTF("Your <uniqueID> is: %s\r\n", uniqueID.c_str());
surajdagar 0:2bfa06d10e28 204 PRINTF("---------------------------------------------------------------\r\n");
surajdagar 0:2bfa06d10e28 205
surajdagar 0:2bfa06d10e28 206 MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
surajdagar 0:2bfa06d10e28 207
surajdagar 0:2bfa06d10e28 208 int tries;
surajdagar 0:2bfa06d10e28 209
surajdagar 0:2bfa06d10e28 210 while( !good ) {
surajdagar 0:2bfa06d10e28 211
surajdagar 0:2bfa06d10e28 212 tries=0;
surajdagar 0:2bfa06d10e28 213 // connect to TCP socket and check return code
surajdagar 0:2bfa06d10e28 214 tmr.start();
surajdagar 0:2bfa06d10e28 215 rc = 1;
surajdagar 0:2bfa06d10e28 216 while( rc && tries < 3) {
surajdagar 0:2bfa06d10e28 217 PRINTF("\r\n\r\n(%d) Attempting TCP connect to %s:%d: ", tries++, hostname, port);
surajdagar 0:2bfa06d10e28 218 rc = ipstack.connect(hostname, port);
surajdagar 0:2bfa06d10e28 219 if( rc ) {
surajdagar 0:2bfa06d10e28 220 PRINTF("Failed (%d)!\r\n",rc);
surajdagar 0:2bfa06d10e28 221 while( tmr.read_ms() < 5000 ) ;
surajdagar 0:2bfa06d10e28 222 tmr.reset();
surajdagar 0:2bfa06d10e28 223 }
surajdagar 0:2bfa06d10e28 224 else {
surajdagar 0:2bfa06d10e28 225 PRINTF("Success!\r\n");
surajdagar 0:2bfa06d10e28 226 rc = 0;
surajdagar 0:2bfa06d10e28 227 }
surajdagar 0:2bfa06d10e28 228 }
surajdagar 0:2bfa06d10e28 229 if( tries < 3 )
surajdagar 0:2bfa06d10e28 230 tries = 0;
surajdagar 0:2bfa06d10e28 231 else
surajdagar 0:2bfa06d10e28 232 continue;
surajdagar 0:2bfa06d10e28 233
surajdagar 0:2bfa06d10e28 234 data.willFlag = 0;
surajdagar 0:2bfa06d10e28 235 data.MQTTVersion = 3;
surajdagar 0:2bfa06d10e28 236
surajdagar 0:2bfa06d10e28 237 data.clientID.cstring = clientID;
surajdagar 0:2bfa06d10e28 238 data.username.cstring = USERNAME;
surajdagar 0:2bfa06d10e28 239 data.password.cstring = PASSWORD;
surajdagar 0:2bfa06d10e28 240 data.keepAliveInterval = 10;
surajdagar 0:2bfa06d10e28 241 data.cleansession = 1;
surajdagar 0:2bfa06d10e28 242
surajdagar 0:2bfa06d10e28 243 rc = 1;
surajdagar 0:2bfa06d10e28 244 tmr.reset();
surajdagar 0:2bfa06d10e28 245 while( !client.isConnected() && rc && tries < 3) {
surajdagar 0:2bfa06d10e28 246 PRINTF("(%d) Attempting MQTT connect to '%s': ", tries++, clientID);
surajdagar 0:2bfa06d10e28 247 rc = client.connect(data);
surajdagar 0:2bfa06d10e28 248 if( rc ) {
surajdagar 0:2bfa06d10e28 249 PRINTF("Failed (%d)!\r\n",rc);
surajdagar 0:2bfa06d10e28 250 while( tmr.read_ms() < 5000 );
surajdagar 0:2bfa06d10e28 251 tmr.reset();
surajdagar 0:2bfa06d10e28 252 }
surajdagar 0:2bfa06d10e28 253 else
surajdagar 0:2bfa06d10e28 254 PRINTF("Success!\r\n");
surajdagar 0:2bfa06d10e28 255 }
surajdagar 0:2bfa06d10e28 256
surajdagar 0:2bfa06d10e28 257 if( tries < 3 )
surajdagar 0:2bfa06d10e28 258 tries = 0;
surajdagar 0:2bfa06d10e28 259 else
surajdagar 0:2bfa06d10e28 260 continue;
surajdagar 0:2bfa06d10e28 261
surajdagar 0:2bfa06d10e28 262 // subscribe to MQTT topic
surajdagar 0:2bfa06d10e28 263 tmr.reset();
surajdagar 0:2bfa06d10e28 264 rc = 1;
surajdagar 0:2bfa06d10e28 265 while( rc && client.isConnected() && tries < 3) {
surajdagar 0:2bfa06d10e28 266 PRINTF("(%d) Attempting to subscribing to MQTT topic '%s': ", tries, SUBSCRIBTOPIC);
surajdagar 0:2bfa06d10e28 267 rc = client.subscribe(SUBSCRIBTOPIC, MQTT::QOS0, messageArrived);
surajdagar 0:2bfa06d10e28 268 if( rc ) {
surajdagar 0:2bfa06d10e28 269 PRINTF("Failed (%d)!\r\n", rc);
surajdagar 0:2bfa06d10e28 270 while( tmr.read_ms() < 5000 );
surajdagar 0:2bfa06d10e28 271 tries++;
surajdagar 0:2bfa06d10e28 272 tmr.reset();
surajdagar 0:2bfa06d10e28 273 }
surajdagar 0:2bfa06d10e28 274 else {
surajdagar 0:2bfa06d10e28 275 good=1;
surajdagar 0:2bfa06d10e28 276 PRINTF("Subscribe successful!\r\n");
surajdagar 0:2bfa06d10e28 277 }
surajdagar 0:2bfa06d10e28 278 }
surajdagar 0:2bfa06d10e28 279 while (!good);
surajdagar 0:2bfa06d10e28 280 }
surajdagar 0:2bfa06d10e28 281
surajdagar 0:2bfa06d10e28 282 MQTT::Message message;
surajdagar 0:2bfa06d10e28 283 message.qos = MQTT::QOS0;
surajdagar 0:2bfa06d10e28 284 message.retained = false;
surajdagar 0:2bfa06d10e28 285 message.dup = false;
surajdagar 0:2bfa06d10e28 286 message.payload = (void*)buf;
surajdagar 0:2bfa06d10e28 287
surajdagar 0:2bfa06d10e28 288 while(true)
surajdagar 0:2bfa06d10e28 289 {
surajdagar 0:2bfa06d10e28 290 osEvent switchEvent = messageQ.get(100);
surajdagar 0:2bfa06d10e28 291 if(key_reader != old_Key)
surajdagar 0:2bfa06d10e28 292 {
surajdagar 0:2bfa06d10e28 293 old_Key = key_reader;
surajdagar 0:2bfa06d10e28 294 memset(buf,0x00,sizeof(buf));
surajdagar 0:2bfa06d10e28 295 //sprintf(buf, "{\"d\" : {\"Key\" : %d }}", key_reader);
surajdagar 0:2bfa06d10e28 296 sprintf(buf, "{\"Key\":\"%d\"}", key_reader);
surajdagar 0:2bfa06d10e28 297 PRINTF("Publishing MQTT message '%s' ", (char*)message.payload);
surajdagar 0:2bfa06d10e28 298 message.payloadlen = strlen(buf);
surajdagar 0:2bfa06d10e28 299 PRINTF("\n payloadlen:(%d)\r\n",message.payloadlen);
surajdagar 0:2bfa06d10e28 300 rc = client.publish(topic, message);
surajdagar 0:2bfa06d10e28 301 if( rc )
surajdagar 0:2bfa06d10e28 302 {
surajdagar 0:2bfa06d10e28 303 PRINTF("Publish request failed! (%d)\r\n",rc);
surajdagar 0:2bfa06d10e28 304 FATAL_WNC_ERROR(resume);
surajdagar 0:2bfa06d10e28 305 }
surajdagar 0:2bfa06d10e28 306 }
surajdagar 0:2bfa06d10e28 307 else
surajdagar 0:2bfa06d10e28 308 {
surajdagar 0:2bfa06d10e28 309 client.yield(1000);
surajdagar 0:2bfa06d10e28 310 }
surajdagar 0:2bfa06d10e28 311 }
surajdagar 0:2bfa06d10e28 312 }