nop

Dependencies:   MEMES_MQTT_IBM NDefLib NetworkSocketAPI X_NUCLEO_IDW01M1v2 X_NUCLEO_IKS01A1 mbed

Committer:
Hamdi
Date:
Fri Feb 02 18:50:35 2018 +0000
Revision:
0:fe85f680cc04
nop

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Hamdi 0:fe85f680cc04 1 /* SpwfInterface NetworkSocketAPI Example Program
Hamdi 0:fe85f680cc04 2 * Copyright (c) 2015 ARM Limited
Hamdi 0:fe85f680cc04 3 *
Hamdi 0:fe85f680cc04 4 * Licensed under the Apache License, Version 2.0 (the "License");
Hamdi 0:fe85f680cc04 5 * you may not use this file except in compliance with the License.
Hamdi 0:fe85f680cc04 6 * You may obtain a copy of the License at
Hamdi 0:fe85f680cc04 7 *
Hamdi 0:fe85f680cc04 8 * http://www.apache.org/licenses/LICENSE-2.0
Hamdi 0:fe85f680cc04 9 *
Hamdi 0:fe85f680cc04 10 * Unless required by applicable law or agreed to in writing, software
Hamdi 0:fe85f680cc04 11 * distributed under the License is distributed on an "AS IS" BASIS,
Hamdi 0:fe85f680cc04 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Hamdi 0:fe85f680cc04 13 * See the License for the specific language governing permissions and
Hamdi 0:fe85f680cc04 14 * limitations under the License.
Hamdi 0:fe85f680cc04 15 */
Hamdi 0:fe85f680cc04 16
Hamdi 0:fe85f680cc04 17 #include "mbed.h"
Hamdi 0:fe85f680cc04 18 #include "SpwfInterface.h"
Hamdi 0:fe85f680cc04 19 #include "TCPSocket.h"
Hamdi 0:fe85f680cc04 20 #include "MQTTClient.h"
Hamdi 0:fe85f680cc04 21 #include "MQTTWiFi.h"
Hamdi 0:fe85f680cc04 22 #include <ctype.h>
Hamdi 0:fe85f680cc04 23 #include "x_nucleo_iks01a1.h"
Hamdi 0:fe85f680cc04 24 //#include "X_NUCLEO_NFC01A1.h"
Hamdi 0:fe85f680cc04 25 #include "NDefLib/NDefNfcTag.h"
Hamdi 0:fe85f680cc04 26 #include "NDefLib/RecordType/RecordURI.h"
Hamdi 0:fe85f680cc04 27
Hamdi 0:fe85f680cc04 28 //------------------------------------
Hamdi 0:fe85f680cc04 29 // Hyperterminal configuration
Hamdi 0:fe85f680cc04 30 // 9600 bauds, 8-bit data, no parity
Hamdi 0:fe85f680cc04 31 //------------------------------------
Hamdi 0:fe85f680cc04 32 Serial pc(SERIAL_TX, SERIAL_RX);
Hamdi 0:fe85f680cc04 33 DigitalOut myled(LED1);
Hamdi 0:fe85f680cc04 34 bool quickstartMode = true;
Hamdi 0:fe85f680cc04 35
Hamdi 0:fe85f680cc04 36 #define ORG_QUICKSTART // comment to connect to play.internetofthings.ibmcloud.com
Hamdi 0:fe85f680cc04 37 //#define SUBSCRIBE // uncomment to subscribe to broker msgs (not to be used with IBM broker)
Hamdi 0:fe85f680cc04 38 #define X_NUCLEO_NFC01A1_PRESENT // uncomment to add NFC support
Hamdi 0:fe85f680cc04 39
Hamdi 0:fe85f680cc04 40 #define MQTT_MAX_PACKET_SIZE 250
Hamdi 0:fe85f680cc04 41 #define MQTT_MAX_PAYLOAD_SIZE 300
Hamdi 0:fe85f680cc04 42
Hamdi 0:fe85f680cc04 43 // Configuration values needed to connect to IBM IoT Cloud
Hamdi 0:fe85f680cc04 44 #define BROKER_URL ".messaging.internetofthings.ibmcloud.com";
Hamdi 0:fe85f680cc04 45 #ifdef ORG_QUICKSTART
Hamdi 0:fe85f680cc04 46 #define ORG "quickstart" // connect to quickstart.internetofthings.ibmcloud.com/ For a registered connection, replace with your org
Hamdi 0:fe85f680cc04 47 #define ID ""
Hamdi 0:fe85f680cc04 48 #define AUTH_TOKEN ""
Hamdi 0:fe85f680cc04 49 #define DEFAULT_TYPE_NAME "iotsample-mbed-Nucleo"
Hamdi 0:fe85f680cc04 50 #else // not def ORG_QUICKSTART
Hamdi 0:fe85f680cc04 51 #define ORG "play" // connect to play.internetofthings.ibmcloud.com/ For a registered connection, replace with your org
Hamdi 0:fe85f680cc04 52 #define ID "" // For a registered connection, replace with your id
Hamdi 0:fe85f680cc04 53 #define AUTH_TOKEN ""// For a registered connection, replace with your auth-token
Hamdi 0:fe85f680cc04 54 #define DEFAULT_TYPE_NAME "sensor"
Hamdi 0:fe85f680cc04 55 #endif
Hamdi 0:fe85f680cc04 56 #define TOPIC "iot-2/evt/status/fmt/json"
Hamdi 0:fe85f680cc04 57
Hamdi 0:fe85f680cc04 58 #define TYPE DEFAULT_TYPE_NAME // For a registered connection, replace with your type
Hamdi 0:fe85f680cc04 59 #define MQTT_PORT 1883
Hamdi 0:fe85f680cc04 60 #define MQTT_TLS_PORT 8883
Hamdi 0:fe85f680cc04 61 #define IBM_IOT_PORT MQTT_PORT
Hamdi 0:fe85f680cc04 62 // WiFi network credential
Hamdi 0:fe85f680cc04 63 #define SSID "STM" // Network must be visible otherwise it can't connect
Hamdi 0:fe85f680cc04 64 #define PASSW "STMdemoPWD"
Hamdi 0:fe85f680cc04 65 #warning "Wifi SSID & password empty"
Hamdi 0:fe85f680cc04 66
Hamdi 0:fe85f680cc04 67 char id[30] = ID; // mac without colons
Hamdi 0:fe85f680cc04 68 char org[12] = ORG;
Hamdi 0:fe85f680cc04 69 int connack_rc = 0; // MQTT connack return code
Hamdi 0:fe85f680cc04 70 const char* ip_addr = "";
Hamdi 0:fe85f680cc04 71 char* host_addr = "";
Hamdi 0:fe85f680cc04 72 char type[30] = TYPE;
Hamdi 0:fe85f680cc04 73 char auth_token[30] = AUTH_TOKEN; // Auth_token is only used in non-quickstart mode
Hamdi 0:fe85f680cc04 74 bool netConnecting = false;
Hamdi 0:fe85f680cc04 75 int connectTimeout = 1000;
Hamdi 0:fe85f680cc04 76 bool mqttConnecting = false;
Hamdi 0:fe85f680cc04 77 bool netConnected = false;
Hamdi 0:fe85f680cc04 78 bool connected = false;
Hamdi 0:fe85f680cc04 79 int retryAttempt = 0;
Hamdi 0:fe85f680cc04 80 char subscription_url[MQTT_MAX_PAYLOAD_SIZE];
Hamdi 0:fe85f680cc04 81 static X_NUCLEO_IKS01A1 *mems_expansion_board = X_NUCLEO_IKS01A1::Instance(D14, D15);
Hamdi 0:fe85f680cc04 82 static PressureSensor *pressure_sensor = mems_expansion_board->pt_sensor;
Hamdi 0:fe85f680cc04 83 static TempSensor *temp_sensor1 = mems_expansion_board->ht_sensor;
Hamdi 0:fe85f680cc04 84 static HumiditySensor *humidity_sensor = mems_expansion_board->ht_sensor;
Hamdi 0:fe85f680cc04 85
Hamdi 0:fe85f680cc04 86
Hamdi 0:fe85f680cc04 87 MQTT::Message message;
Hamdi 0:fe85f680cc04 88 MQTTString TopicName={TOPIC};
Hamdi 0:fe85f680cc04 89 MQTT::MessageData MsgData(TopicName, message);
Hamdi 0:fe85f680cc04 90 static GyroSensor *gyroscope = mems_expansion_board->GetGyroscope();
Hamdi 0:fe85f680cc04 91 static MotionSensor *accelerometer = mems_expansion_board->GetAccelerometer();
Hamdi 0:fe85f680cc04 92 static MagneticSensor *magnetometer = mems_expansion_board->magnetometer;
Hamdi 0:fe85f680cc04 93
Hamdi 0:fe85f680cc04 94
Hamdi 0:fe85f680cc04 95 void subscribe_cb(MQTT::MessageData & msgMQTT) {
Hamdi 0:fe85f680cc04 96 char msg[MQTT_MAX_PAYLOAD_SIZE];
Hamdi 0:fe85f680cc04 97 msg[0]='\0';
Hamdi 0:fe85f680cc04 98 strncat (msg, (char*)msgMQTT.message.payload, msgMQTT.message.payloadlen);
Hamdi 0:fe85f680cc04 99 printf ("--->>> subscribe_cb msg: %s\n\r", msg);
Hamdi 0:fe85f680cc04 100 }
Hamdi 0:fe85f680cc04 101
Hamdi 0:fe85f680cc04 102 int subscribe(MQTT::Client<MQTTWiFi, Countdown, MQTT_MAX_PACKET_SIZE>* client, MQTTWiFi* ipstack)
Hamdi 0:fe85f680cc04 103 {
Hamdi 0:fe85f680cc04 104 char* pubTopic = TOPIC;
Hamdi 0:fe85f680cc04 105 return client->subscribe(pubTopic, MQTT::QOS1, subscribe_cb);
Hamdi 0:fe85f680cc04 106 }
Hamdi 0:fe85f680cc04 107
Hamdi 0:fe85f680cc04 108 int connect(MQTT::Client<MQTTWiFi, Countdown, MQTT_MAX_PACKET_SIZE>* client, MQTTWiFi* ipstack)
Hamdi 0:fe85f680cc04 109 {
Hamdi 0:fe85f680cc04 110 const char* iot_ibm = BROKER_URL;
Hamdi 0:fe85f680cc04 111
Hamdi 0:fe85f680cc04 112
Hamdi 0:fe85f680cc04 113 char hostname[strlen(org) + strlen(iot_ibm) + 1];
Hamdi 0:fe85f680cc04 114 sprintf(hostname, "%s%s", org, iot_ibm);
Hamdi 0:fe85f680cc04 115 SpwfSAInterface& WiFi = ipstack->getWiFi();
Hamdi 0:fe85f680cc04 116 // ip_addr = WiFi.get_ip_address();
Hamdi 0:fe85f680cc04 117 // Construct clientId - d:org:type:id
Hamdi 0:fe85f680cc04 118 char clientId[strlen(org) + strlen(type) + strlen(id) + 5];
Hamdi 0:fe85f680cc04 119 sprintf(clientId, "d:%s:%s:%s", org, type, id);
Hamdi 0:fe85f680cc04 120 sprintf(subscription_url, "%s.%s/#/device/%s/sensor/", org, "internetofthings.ibmcloud.com",id);
Hamdi 0:fe85f680cc04 121
Hamdi 0:fe85f680cc04 122 // Network debug statements
Hamdi 0:fe85f680cc04 123 LOG("=====================================\n\r");
Hamdi 0:fe85f680cc04 124 LOG("Connecting WiFi.\n\r");
Hamdi 0:fe85f680cc04 125 LOG("Nucleo IP ADDRESS: %s\n\r", WiFi.get_ip_address());
Hamdi 0:fe85f680cc04 126 LOG("Nucleo MAC ADDRESS: %s\n\r", WiFi.get_mac_address());
Hamdi 0:fe85f680cc04 127 LOG("Server Hostname: %s port: %d\n\r", hostname, IBM_IOT_PORT);
Hamdi 0:fe85f680cc04 128 // for(int i = 0; clientId[i]; i++){ // set lowercase mac
Hamdi 0:fe85f680cc04 129 // clientId[i] = tolower(clientId[i]);
Hamdi 0:fe85f680cc04 130 // }
Hamdi 0:fe85f680cc04 131 LOG("Client ID: %s\n\r", clientId);
Hamdi 0:fe85f680cc04 132 LOG("Topic: %s\n\r",TOPIC);
Hamdi 0:fe85f680cc04 133 LOG("Subscription URL: %s\n\r", subscription_url);
Hamdi 0:fe85f680cc04 134 LOG("=====================================\n\r");
Hamdi 0:fe85f680cc04 135
Hamdi 0:fe85f680cc04 136 netConnecting = true;
Hamdi 0:fe85f680cc04 137 ipstack->open(&ipstack->getWiFi());
Hamdi 0:fe85f680cc04 138 int rc = ipstack->connect(hostname, IBM_IOT_PORT, connectTimeout);
Hamdi 0:fe85f680cc04 139 if (rc != 0)
Hamdi 0:fe85f680cc04 140 {
Hamdi 0:fe85f680cc04 141 WARN("IP Stack connect returned: %d\n", rc);
Hamdi 0:fe85f680cc04 142 return rc;
Hamdi 0:fe85f680cc04 143 }
Hamdi 0:fe85f680cc04 144 printf ("--->TCP Connected\n\r");
Hamdi 0:fe85f680cc04 145 netConnected = true;
Hamdi 0:fe85f680cc04 146 netConnecting = false;
Hamdi 0:fe85f680cc04 147
Hamdi 0:fe85f680cc04 148 // MQTT Connect
Hamdi 0:fe85f680cc04 149 mqttConnecting = true;
Hamdi 0:fe85f680cc04 150 MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
Hamdi 0:fe85f680cc04 151 data.MQTTVersion = 4;
Hamdi 0:fe85f680cc04 152 data.struct_version=0;
Hamdi 0:fe85f680cc04 153 data.clientID.cstring = clientId;
Hamdi 0:fe85f680cc04 154
Hamdi 0:fe85f680cc04 155 if (!quickstartMode)
Hamdi 0:fe85f680cc04 156 {
Hamdi 0:fe85f680cc04 157 data.username.cstring = "use-token-auth";
Hamdi 0:fe85f680cc04 158 data.password.cstring = auth_token;
Hamdi 0:fe85f680cc04 159 }
Hamdi 0:fe85f680cc04 160 if ((rc = client->connect(data)) == 0)
Hamdi 0:fe85f680cc04 161 {
Hamdi 0:fe85f680cc04 162 connected = true;
Hamdi 0:fe85f680cc04 163 printf ("--->MQTT Connected\n\r");
Hamdi 0:fe85f680cc04 164 #ifdef SUBSCRIBE
Hamdi 0:fe85f680cc04 165 if (!subscribe(client, ipstack)) printf ("--->>>MQTT subscribed to: %s\n\r",TOPIC);
Hamdi 0:fe85f680cc04 166 #endif
Hamdi 0:fe85f680cc04 167 }
Hamdi 0:fe85f680cc04 168 else {
Hamdi 0:fe85f680cc04 169 WARN("MQTT connect returned %d\n", rc);
Hamdi 0:fe85f680cc04 170 }
Hamdi 0:fe85f680cc04 171 if (rc >= 0)
Hamdi 0:fe85f680cc04 172 connack_rc = rc;
Hamdi 0:fe85f680cc04 173 mqttConnecting = false;
Hamdi 0:fe85f680cc04 174 return rc;
Hamdi 0:fe85f680cc04 175 }
Hamdi 0:fe85f680cc04 176
Hamdi 0:fe85f680cc04 177 int getConnTimeout(int attemptNumber)
Hamdi 0:fe85f680cc04 178 { // First 10 attempts try within 3 seconds, next 10 attempts retry after every 1 minute
Hamdi 0:fe85f680cc04 179 // after 20 attempts, retry every 10 minutes
Hamdi 0:fe85f680cc04 180 return (attemptNumber < 10) ? 3 : (attemptNumber < 20) ? 60 : 600;
Hamdi 0:fe85f680cc04 181 }
Hamdi 0:fe85f680cc04 182
Hamdi 0:fe85f680cc04 183 void attemptConnect(MQTT::Client<MQTTWiFi, Countdown, MQTT_MAX_PACKET_SIZE>* client, MQTTWiFi* ipstack)
Hamdi 0:fe85f680cc04 184 {
Hamdi 0:fe85f680cc04 185 connected = false;
Hamdi 0:fe85f680cc04 186
Hamdi 0:fe85f680cc04 187 while (connect(client, ipstack) != MQTT_CONNECTION_ACCEPTED)
Hamdi 0:fe85f680cc04 188 {
Hamdi 0:fe85f680cc04 189 if (connack_rc == MQTT_NOT_AUTHORIZED || connack_rc == MQTT_BAD_USERNAME_OR_PASSWORD) {
Hamdi 0:fe85f680cc04 190 printf ("File: %s, Line: %d Error: %d\n\r",__FILE__,__LINE__, connack_rc);
Hamdi 0:fe85f680cc04 191 return; // don't reattempt to connect if credentials are wrong
Hamdi 0:fe85f680cc04 192 }
Hamdi 0:fe85f680cc04 193 int timeout = getConnTimeout(++retryAttempt);
Hamdi 0:fe85f680cc04 194 WARN("Retry attempt number %d waiting %d\n", retryAttempt, timeout);
Hamdi 0:fe85f680cc04 195
Hamdi 0:fe85f680cc04 196 // if ipstack and client were on the heap we could deconstruct and goto a label where they are constructed
Hamdi 0:fe85f680cc04 197 // or maybe just add the proper members to do this disconnect and call attemptConnect(...)
Hamdi 0:fe85f680cc04 198 // this works - reset the system when the retry count gets to a threshold
Hamdi 0:fe85f680cc04 199 if (retryAttempt == 5)
Hamdi 0:fe85f680cc04 200 NVIC_SystemReset();
Hamdi 0:fe85f680cc04 201 else
Hamdi 0:fe85f680cc04 202 wait(timeout);
Hamdi 0:fe85f680cc04 203 }
Hamdi 0:fe85f680cc04 204 }
Hamdi 0:fe85f680cc04 205
Hamdi 0:fe85f680cc04 206 int publish(MQTT::Client<MQTTWiFi, Countdown, MQTT_MAX_PACKET_SIZE>* client, MQTTWiFi* ipstack)
Hamdi 0:fe85f680cc04 207 {
Hamdi 0:fe85f680cc04 208 MQTT::Message message;
Hamdi 0:fe85f680cc04 209 char* pubTopic = TOPIC;
Hamdi 0:fe85f680cc04 210
Hamdi 0:fe85f680cc04 211 char buf[MQTT_MAX_PAYLOAD_SIZE];
Hamdi 0:fe85f680cc04 212 float temp, press, hum;
Hamdi 0:fe85f680cc04 213 int32_t axes[3];
Hamdi 0:fe85f680cc04 214 temp_sensor1->get_temperature(&temp);
Hamdi 0:fe85f680cc04 215 pressure_sensor->get_pressure(&press);
Hamdi 0:fe85f680cc04 216 humidity_sensor->get_humidity(&hum);
Hamdi 0:fe85f680cc04 217 accelerometer->get_x_axes(axes);
Hamdi 0:fe85f680cc04 218 gyroscope->get_g_axes(axes);
Hamdi 0:fe85f680cc04 219 float axesx = axes[0] ;
Hamdi 0:fe85f680cc04 220 float axesy = axes[1];
Hamdi 0:fe85f680cc04 221 float axesz = axes[2];
Hamdi 0:fe85f680cc04 222 gyroscope->get_g_axes(axes);
Hamdi 0:fe85f680cc04 223 float g_axesx= axes[0];
Hamdi 0:fe85f680cc04 224 float g_axesy= axes[1];
Hamdi 0:fe85f680cc04 225
Hamdi 0:fe85f680cc04 226 sprintf(buf,
Hamdi 0:fe85f680cc04 227 "{\"d\":{\"ST\":\"Nucleo-IoT-mbed\",\"Temp\":%0.4f,\"Pressure\":%0.4f,\"Humidity\":%0.4f,\"Accelox\":%0.4f,\"Acceloy\":%0.4f,\"Acceloz\":%0.4f,\"Magnetox\":%0.4f,\"Magnetoy\":%0.4f}}",
Hamdi 0:fe85f680cc04 228 temp, press, hum,axesx,axesy,axesz, g_axesx,g_axesy);
Hamdi 0:fe85f680cc04 229 message.qos = MQTT::QOS0;
Hamdi 0:fe85f680cc04 230 message.retained = false;
Hamdi 0:fe85f680cc04 231 message.dup = false;
Hamdi 0:fe85f680cc04 232 message.payload = (void*)buf;
Hamdi 0:fe85f680cc04 233 message.payloadlen = strlen(buf);
Hamdi 0:fe85f680cc04 234
Hamdi 0:fe85f680cc04 235 // LOG("Publishing %s\n\r", buf);
Hamdi 0:fe85f680cc04 236 printf("Publishing %s\n\r", buf);
Hamdi 0:fe85f680cc04 237 return client->publish(pubTopic, message);
Hamdi 0:fe85f680cc04 238 }
Hamdi 0:fe85f680cc04 239
Hamdi 0:fe85f680cc04 240 int main()
Hamdi 0:fe85f680cc04 241 {
Hamdi 0:fe85f680cc04 242 const char * ssid = SSID; // Network must be visible otherwise it can't connect
Hamdi 0:fe85f680cc04 243 const char * seckey = PASSW;
Hamdi 0:fe85f680cc04 244 SpwfSAInterface spwf(D8, D2, false);
Hamdi 0:fe85f680cc04 245
Hamdi 0:fe85f680cc04 246 // Timer tyeld;
Hamdi 0:fe85f680cc04 247 myled=0;
Hamdi 0:fe85f680cc04 248 DevI2C *i2c = new DevI2C(I2C_SDA, I2C_SCL);
Hamdi 0:fe85f680cc04 249 i2c->frequency(400000);
Hamdi 0:fe85f680cc04 250
Hamdi 0:fe85f680cc04 251
Hamdi 0:fe85f680cc04 252
Hamdi 0:fe85f680cc04 253 pc.printf("\r\nX-NUCLEO-IDW01M1 mbed Application\r\n");
Hamdi 0:fe85f680cc04 254 pc.printf("\r\nconnecting to AP\r\n");
Hamdi 0:fe85f680cc04 255
Hamdi 0:fe85f680cc04 256 quickstartMode=false;
Hamdi 0:fe85f680cc04 257 if (strcmp(org, "quickstart") == 0){quickstartMode = true;}
Hamdi 0:fe85f680cc04 258 MQTTWiFi ipstack(spwf, ssid, seckey, NSAPI_SECURITY_WPA2);
Hamdi 0:fe85f680cc04 259 MQTT::Client<MQTTWiFi, Countdown, MQTT_MAX_PACKET_SIZE> client(ipstack);
Hamdi 0:fe85f680cc04 260 if (quickstartMode){
Hamdi 0:fe85f680cc04 261 char mac[50]; // remove all : from mac
Hamdi 0:fe85f680cc04 262 char *digit=NULL;
Hamdi 0:fe85f680cc04 263 sprintf (id,"%s", "");
Hamdi 0:fe85f680cc04 264 sprintf (mac,"%s",ipstack.getWiFi().get_mac_address());
Hamdi 0:fe85f680cc04 265 digit = strtok (mac,":");
Hamdi 0:fe85f680cc04 266 while (digit != NULL)
Hamdi 0:fe85f680cc04 267 {
Hamdi 0:fe85f680cc04 268 strcat (id, digit);
Hamdi 0:fe85f680cc04 269 digit = strtok (NULL, ":");
Hamdi 0:fe85f680cc04 270 }
Hamdi 0:fe85f680cc04 271 }
Hamdi 0:fe85f680cc04 272 attemptConnect(&client, &ipstack);
Hamdi 0:fe85f680cc04 273 if (connack_rc == MQTT_NOT_AUTHORIZED || connack_rc == MQTT_BAD_USERNAME_OR_PASSWORD)
Hamdi 0:fe85f680cc04 274 {
Hamdi 0:fe85f680cc04 275 while (true)
Hamdi 0:fe85f680cc04 276 wait(1.0); // Permanent failures - don't retry
Hamdi 0:fe85f680cc04 277 }
Hamdi 0:fe85f680cc04 278
Hamdi 0:fe85f680cc04 279 myled=1;
Hamdi 0:fe85f680cc04 280 int count = 0;
Hamdi 0:fe85f680cc04 281 // tyeld.start();
Hamdi 0:fe85f680cc04 282 while (true)
Hamdi 0:fe85f680cc04 283 {
Hamdi 0:fe85f680cc04 284 if (++count == 100)
Hamdi 0:fe85f680cc04 285 { // Publish a message every second
Hamdi 0:fe85f680cc04 286 if (publish(&client, &ipstack) != 0) {
Hamdi 0:fe85f680cc04 287 myled=0;
Hamdi 0:fe85f680cc04 288 attemptConnect(&client, &ipstack); // if we have lost the connection
Hamdi 0:fe85f680cc04 289 } else myled=1;
Hamdi 0:fe85f680cc04 290 count = 0;
Hamdi 0:fe85f680cc04 291 }
Hamdi 0:fe85f680cc04 292 // int start = tyeld.read_ms();
Hamdi 0:fe85f680cc04 293 client.yield(10); // allow the MQTT client to receive messages
Hamdi 0:fe85f680cc04 294 // printf ("tyeld: %d\n\r",tyeld.read_ms()-start);
Hamdi 0:fe85f680cc04 295 }
Hamdi 0:fe85f680cc04 296 }