Test

Dependencies:   mbed X_NUCLEO_IDW01M1v2 NetworkSocketAPI NDefLib MQTT X_NUCLEO_IKS01A1 X_NUCLEO_NFC01A1

Committer:
krajiiva
Date:
Mon Apr 26 08:48:32 2021 +0000
Revision:
0:a7eae6598aa6
Test

Who changed what in which revision?

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