Published project at https://os.mbed.com/users/vlasov01/code/Watson-IoT-MQTT-WiFi-MEMS/
Dependencies: Watson-IoT-MQTT-WiFi-MEMS NDefLib NetworkSocketAPI X_NUCLEO_IDW01M1v2 X_NUCLEO_IKS01A2 mbed
main.cpp@1:cc2d7fc65713, 2017-11-07 (annotated)
- Committer:
- vlasov01
- Date:
- Tue Nov 07 00:36:16 2017 +0000
- Revision:
- 1:cc2d7fc65713
- Parent:
- 0:a17fde465867
published project as public
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
vlasov01 | 0:a17fde465867 | 1 | /* SpwfInterface NetworkSocketAPI Example Program |
vlasov01 | 0:a17fde465867 | 2 | * Copyright (c) 2015 ARM Limited |
vlasov01 | 0:a17fde465867 | 3 | * |
vlasov01 | 0:a17fde465867 | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
vlasov01 | 0:a17fde465867 | 5 | * you may not use this file except in compliance with the License. |
vlasov01 | 0:a17fde465867 | 6 | * You may obtain a copy of the License at |
vlasov01 | 0:a17fde465867 | 7 | * |
vlasov01 | 0:a17fde465867 | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
vlasov01 | 0:a17fde465867 | 9 | * |
vlasov01 | 0:a17fde465867 | 10 | * Unless required by applicable law or agreed to in writing, software |
vlasov01 | 0:a17fde465867 | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
vlasov01 | 0:a17fde465867 | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
vlasov01 | 0:a17fde465867 | 13 | * See the License for the specific language governing permissions and |
vlasov01 | 0:a17fde465867 | 14 | * limitations under the License. |
vlasov01 | 0:a17fde465867 | 15 | */ |
vlasov01 | 0:a17fde465867 | 16 | |
vlasov01 | 0:a17fde465867 | 17 | #include "mbed.h" |
vlasov01 | 0:a17fde465867 | 18 | #include "SpwfInterface.h" |
vlasov01 | 0:a17fde465867 | 19 | #include "TCPSocket.h" |
vlasov01 | 0:a17fde465867 | 20 | #include "MQTTClient.h" |
vlasov01 | 0:a17fde465867 | 21 | #include "MQTTWiFi.h" |
vlasov01 | 0:a17fde465867 | 22 | #include <ctype.h> |
vlasov01 | 0:a17fde465867 | 23 | #include "XNucleoIKS01A2.h" |
vlasov01 | 0:a17fde465867 | 24 | //#include "x_nucleo_iks01a1.h" |
vlasov01 | 0:a17fde465867 | 25 | //#include "X_NUCLEO_NFC01A1.h" |
vlasov01 | 0:a17fde465867 | 26 | #include "NDefLib/NDefNfcTag.h" |
vlasov01 | 0:a17fde465867 | 27 | #include "NDefLib/RecordType/RecordURI.h" |
vlasov01 | 0:a17fde465867 | 28 | |
vlasov01 | 0:a17fde465867 | 29 | //------------------------------------ |
vlasov01 | 0:a17fde465867 | 30 | // Hyperterminal configuration |
vlasov01 | 0:a17fde465867 | 31 | // 9600 bauds, 8-bit data, no parity |
vlasov01 | 0:a17fde465867 | 32 | //------------------------------------ |
vlasov01 | 0:a17fde465867 | 33 | Serial pc(SERIAL_TX, SERIAL_RX); |
vlasov01 | 0:a17fde465867 | 34 | DigitalOut myled(LED1); |
vlasov01 | 0:a17fde465867 | 35 | bool quickstartMode = true; |
vlasov01 | 0:a17fde465867 | 36 | |
vlasov01 | 0:a17fde465867 | 37 | #define ORG_QUICKSTART // comment to connect to play.internetofthings.ibmcloud.com |
vlasov01 | 0:a17fde465867 | 38 | //#define SUBSCRIBE // uncomment to subscribe to broker msgs (not to be used with IBM broker) |
vlasov01 | 0:a17fde465867 | 39 | //#define X_NUCLEO_NFC01A1_PRESENT // uncomment to add NFC support |
vlasov01 | 0:a17fde465867 | 40 | |
vlasov01 | 0:a17fde465867 | 41 | #define MQTT_MAX_PACKET_SIZE 250 |
vlasov01 | 0:a17fde465867 | 42 | #define MQTT_MAX_PAYLOAD_SIZE 300 |
vlasov01 | 0:a17fde465867 | 43 | |
vlasov01 | 0:a17fde465867 | 44 | // Configuration values needed to connect to IBM IoT Cloud |
vlasov01 | 0:a17fde465867 | 45 | #define BROKER_URL ".messaging.internetofthings.ibmcloud.com"; |
vlasov01 | 0:a17fde465867 | 46 | #ifdef ORG_QUICKSTART |
vlasov01 | 0:a17fde465867 | 47 | #define ORG "quickstart" // connect to quickstart.internetofthings.ibmcloud.com/ For a registered connection, replace with your org |
vlasov01 | 0:a17fde465867 | 48 | #define ID "" |
vlasov01 | 0:a17fde465867 | 49 | #define AUTH_TOKEN "" |
vlasov01 | 0:a17fde465867 | 50 | #define DEFAULT_TYPE_NAME "iotsample-mbed-Nucleo" |
vlasov01 | 0:a17fde465867 | 51 | #else // not def ORG_QUICKSTART |
vlasov01 | 0:a17fde465867 | 52 | #define ORG "play" // connect to play.internetofthings.ibmcloud.com/ For a registered connection, replace with your org |
vlasov01 | 0:a17fde465867 | 53 | #define ID "" // For a registered connection, replace with your id |
vlasov01 | 0:a17fde465867 | 54 | #define AUTH_TOKEN ""// For a registered connection, replace with your auth-token |
vlasov01 | 0:a17fde465867 | 55 | #define DEFAULT_TYPE_NAME "sensor" |
vlasov01 | 0:a17fde465867 | 56 | #endif |
vlasov01 | 0:a17fde465867 | 57 | #define TOPIC "iot-2/evt/status/fmt/json" |
vlasov01 | 0:a17fde465867 | 58 | |
vlasov01 | 0:a17fde465867 | 59 | #define TYPE DEFAULT_TYPE_NAME // For a registered connection, replace with your type |
vlasov01 | 0:a17fde465867 | 60 | #define MQTT_PORT 1883 |
vlasov01 | 0:a17fde465867 | 61 | #define MQTT_TLS_PORT 8883 |
vlasov01 | 0:a17fde465867 | 62 | #define IBM_IOT_PORT MQTT_PORT |
vlasov01 | 0:a17fde465867 | 63 | // WiFi network credential |
vlasov01 | 0:a17fde465867 | 64 | #define SSID "" // Network must be visible otherwise it can't connect |
vlasov01 | 0:a17fde465867 | 65 | #define PASSW "" |
vlasov01 | 0:a17fde465867 | 66 | #warning "Wifi SSID & password empty" |
vlasov01 | 0:a17fde465867 | 67 | |
vlasov01 | 0:a17fde465867 | 68 | char id[30] = ID; // mac without colons |
vlasov01 | 0:a17fde465867 | 69 | char org[12] = ORG; |
vlasov01 | 0:a17fde465867 | 70 | int connack_rc = 0; // MQTT connack return code |
vlasov01 | 0:a17fde465867 | 71 | const char* ip_addr = ""; |
vlasov01 | 0:a17fde465867 | 72 | char* host_addr = ""; |
vlasov01 | 0:a17fde465867 | 73 | char type[30] = TYPE; |
vlasov01 | 0:a17fde465867 | 74 | char auth_token[30] = AUTH_TOKEN; // Auth_token is only used in non-quickstart mode |
vlasov01 | 0:a17fde465867 | 75 | bool netConnecting = false; |
vlasov01 | 0:a17fde465867 | 76 | int connectTimeout = 1000; |
vlasov01 | 0:a17fde465867 | 77 | bool mqttConnecting = false; |
vlasov01 | 0:a17fde465867 | 78 | bool netConnected = false; |
vlasov01 | 0:a17fde465867 | 79 | bool connected = false; |
vlasov01 | 0:a17fde465867 | 80 | int retryAttempt = 0; |
vlasov01 | 0:a17fde465867 | 81 | char subscription_url[MQTT_MAX_PAYLOAD_SIZE]; |
vlasov01 | 0:a17fde465867 | 82 | /* |
vlasov01 | 0:a17fde465867 | 83 | PressureSensor *pressure_sensor; |
vlasov01 | 0:a17fde465867 | 84 | HumiditySensor *humidity_sensor; |
vlasov01 | 0:a17fde465867 | 85 | TempSensor *temp_sensor1; |
vlasov01 | 0:a17fde465867 | 86 | */ |
vlasov01 | 0:a17fde465867 | 87 | |
vlasov01 | 0:a17fde465867 | 88 | /* Instantiate the expansion board */ |
vlasov01 | 0:a17fde465867 | 89 | static XNucleoIKS01A2 *mems_expansion_board = XNucleoIKS01A2::instance(D14, D15, D4, D5); |
vlasov01 | 0:a17fde465867 | 90 | |
vlasov01 | 0:a17fde465867 | 91 | /* Retrieve the composing elements of the expansion board */ |
vlasov01 | 0:a17fde465867 | 92 | static LSM303AGRMagSensor *magnetometer = mems_expansion_board->magnetometer; |
vlasov01 | 0:a17fde465867 | 93 | static HTS221Sensor *hum_temp = mems_expansion_board->ht_sensor; |
vlasov01 | 0:a17fde465867 | 94 | static LPS22HBSensor *press_temp = mems_expansion_board->pt_sensor; |
vlasov01 | 0:a17fde465867 | 95 | static LSM6DSLSensor *acc_gyro = mems_expansion_board->acc_gyro; |
vlasov01 | 0:a17fde465867 | 96 | static LSM303AGRAccSensor *accelerometer = mems_expansion_board->accelerometer; |
vlasov01 | 0:a17fde465867 | 97 | |
vlasov01 | 0:a17fde465867 | 98 | InterruptIn mybutton(USER_BUTTON); |
vlasov01 | 0:a17fde465867 | 99 | |
vlasov01 | 0:a17fde465867 | 100 | volatile int mems_event = 0; |
vlasov01 | 0:a17fde465867 | 101 | volatile int toggle_hw_event_enable = 0; |
vlasov01 | 0:a17fde465867 | 102 | static int hw_event_is_enabled = 1; |
vlasov01 | 0:a17fde465867 | 103 | uint16_t step_count = 0; |
vlasov01 | 0:a17fde465867 | 104 | |
vlasov01 | 0:a17fde465867 | 105 | /* User button callback. */ |
vlasov01 | 0:a17fde465867 | 106 | void pressed_cb() { |
vlasov01 | 0:a17fde465867 | 107 | toggle_hw_event_enable = 1; |
vlasov01 | 0:a17fde465867 | 108 | } |
vlasov01 | 0:a17fde465867 | 109 | |
vlasov01 | 0:a17fde465867 | 110 | /* Interrupt 1 callback. */ |
vlasov01 | 0:a17fde465867 | 111 | void int1_cb() { |
vlasov01 | 0:a17fde465867 | 112 | mems_event = 1; |
vlasov01 | 0:a17fde465867 | 113 | } |
vlasov01 | 0:a17fde465867 | 114 | |
vlasov01 | 0:a17fde465867 | 115 | /* Interrupt 2 callback. */ |
vlasov01 | 0:a17fde465867 | 116 | void int2_cb() { |
vlasov01 | 0:a17fde465867 | 117 | mems_event = 1; |
vlasov01 | 0:a17fde465867 | 118 | } |
vlasov01 | 0:a17fde465867 | 119 | |
vlasov01 | 0:a17fde465867 | 120 | /* Print the orientation. */ |
vlasov01 | 0:a17fde465867 | 121 | void send_orientation() { |
vlasov01 | 0:a17fde465867 | 122 | uint8_t xl = 0; |
vlasov01 | 0:a17fde465867 | 123 | uint8_t xh = 0; |
vlasov01 | 0:a17fde465867 | 124 | uint8_t yl = 0; |
vlasov01 | 0:a17fde465867 | 125 | uint8_t yh = 0; |
vlasov01 | 0:a17fde465867 | 126 | uint8_t zl = 0; |
vlasov01 | 0:a17fde465867 | 127 | uint8_t zh = 0; |
vlasov01 | 0:a17fde465867 | 128 | |
vlasov01 | 0:a17fde465867 | 129 | acc_gyro->get_6d_orientation_xl(&xl); |
vlasov01 | 0:a17fde465867 | 130 | acc_gyro->get_6d_orientation_xh(&xh); |
vlasov01 | 0:a17fde465867 | 131 | acc_gyro->get_6d_orientation_yl(&yl); |
vlasov01 | 0:a17fde465867 | 132 | acc_gyro->get_6d_orientation_yh(&yh); |
vlasov01 | 0:a17fde465867 | 133 | acc_gyro->get_6d_orientation_zl(&zl); |
vlasov01 | 0:a17fde465867 | 134 | acc_gyro->get_6d_orientation_zh(&zh); |
vlasov01 | 0:a17fde465867 | 135 | |
vlasov01 | 0:a17fde465867 | 136 | if ( xl == 0 && yl == 0 && zl == 0 && xh == 0 && yh == 1 && zh == 0 ) { |
vlasov01 | 0:a17fde465867 | 137 | printf( "\r\n ________________ " \ |
vlasov01 | 0:a17fde465867 | 138 | "\r\n | | " \ |
vlasov01 | 0:a17fde465867 | 139 | "\r\n | * | " \ |
vlasov01 | 0:a17fde465867 | 140 | "\r\n | | " \ |
vlasov01 | 0:a17fde465867 | 141 | "\r\n | | " \ |
vlasov01 | 0:a17fde465867 | 142 | "\r\n | | " \ |
vlasov01 | 0:a17fde465867 | 143 | "\r\n | | " \ |
vlasov01 | 0:a17fde465867 | 144 | "\r\n |________________| \r\n" ); |
vlasov01 | 0:a17fde465867 | 145 | } |
vlasov01 | 0:a17fde465867 | 146 | |
vlasov01 | 0:a17fde465867 | 147 | else if ( xl == 1 && yl == 0 && zl == 0 && xh == 0 && yh == 0 && zh == 0 ) { |
vlasov01 | 0:a17fde465867 | 148 | printf( "\r\n ________________ " \ |
vlasov01 | 0:a17fde465867 | 149 | "\r\n | | " \ |
vlasov01 | 0:a17fde465867 | 150 | "\r\n | * | " \ |
vlasov01 | 0:a17fde465867 | 151 | "\r\n | | " \ |
vlasov01 | 0:a17fde465867 | 152 | "\r\n | | " \ |
vlasov01 | 0:a17fde465867 | 153 | "\r\n | | " \ |
vlasov01 | 0:a17fde465867 | 154 | "\r\n | | " \ |
vlasov01 | 0:a17fde465867 | 155 | "\r\n |________________| \r\n" ); |
vlasov01 | 0:a17fde465867 | 156 | } |
vlasov01 | 0:a17fde465867 | 157 | |
vlasov01 | 0:a17fde465867 | 158 | else if ( xl == 0 && yl == 0 && zl == 0 && xh == 1 && yh == 0 && zh == 0 ) { |
vlasov01 | 0:a17fde465867 | 159 | printf( "\r\n ________________ " \ |
vlasov01 | 0:a17fde465867 | 160 | "\r\n | | " \ |
vlasov01 | 0:a17fde465867 | 161 | "\r\n | | " \ |
vlasov01 | 0:a17fde465867 | 162 | "\r\n | | " \ |
vlasov01 | 0:a17fde465867 | 163 | "\r\n | | " \ |
vlasov01 | 0:a17fde465867 | 164 | "\r\n | | " \ |
vlasov01 | 0:a17fde465867 | 165 | "\r\n | * | " \ |
vlasov01 | 0:a17fde465867 | 166 | "\r\n |________________| \r\n" ); |
vlasov01 | 0:a17fde465867 | 167 | } |
vlasov01 | 0:a17fde465867 | 168 | |
vlasov01 | 0:a17fde465867 | 169 | else if ( xl == 0 && yl == 1 && zl == 0 && xh == 0 && yh == 0 && zh == 0 ) { |
vlasov01 | 0:a17fde465867 | 170 | printf( "\r\n ________________ " \ |
vlasov01 | 0:a17fde465867 | 171 | "\r\n | | " \ |
vlasov01 | 0:a17fde465867 | 172 | "\r\n | | " \ |
vlasov01 | 0:a17fde465867 | 173 | "\r\n | | " \ |
vlasov01 | 0:a17fde465867 | 174 | "\r\n | | " \ |
vlasov01 | 0:a17fde465867 | 175 | "\r\n | | " \ |
vlasov01 | 0:a17fde465867 | 176 | "\r\n | * | " \ |
vlasov01 | 0:a17fde465867 | 177 | "\r\n |________________| \r\n" ); |
vlasov01 | 0:a17fde465867 | 178 | } |
vlasov01 | 0:a17fde465867 | 179 | |
vlasov01 | 0:a17fde465867 | 180 | else if ( xl == 0 && yl == 0 && zl == 0 && xh == 0 && yh == 0 && zh == 1 ) { |
vlasov01 | 0:a17fde465867 | 181 | printf( "\r\n __*_____________ " \ |
vlasov01 | 0:a17fde465867 | 182 | "\r\n |________________| \r\n" ); |
vlasov01 | 0:a17fde465867 | 183 | } |
vlasov01 | 0:a17fde465867 | 184 | |
vlasov01 | 0:a17fde465867 | 185 | else if ( xl == 0 && yl == 0 && zl == 1 && xh == 0 && yh == 0 && zh == 0 ) { |
vlasov01 | 0:a17fde465867 | 186 | printf( "\r\n ________________ " \ |
vlasov01 | 0:a17fde465867 | 187 | "\r\n |________________| " \ |
vlasov01 | 0:a17fde465867 | 188 | "\r\n * \r\n" ); |
vlasov01 | 0:a17fde465867 | 189 | } |
vlasov01 | 0:a17fde465867 | 190 | |
vlasov01 | 0:a17fde465867 | 191 | else { |
vlasov01 | 0:a17fde465867 | 192 | printf( "None of the 6D orientation axes is set in LSM6DSL - accelerometer.\r\n" ); |
vlasov01 | 0:a17fde465867 | 193 | } |
vlasov01 | 0:a17fde465867 | 194 | } |
vlasov01 | 0:a17fde465867 | 195 | |
vlasov01 | 0:a17fde465867 | 196 | |
vlasov01 | 0:a17fde465867 | 197 | MQTT::Message message; |
vlasov01 | 0:a17fde465867 | 198 | MQTTString TopicName={TOPIC}; |
vlasov01 | 0:a17fde465867 | 199 | MQTT::MessageData MsgData(TopicName, message); |
vlasov01 | 0:a17fde465867 | 200 | |
vlasov01 | 0:a17fde465867 | 201 | void subscribe_cb(MQTT::MessageData & msgMQTT) { |
vlasov01 | 0:a17fde465867 | 202 | char msg[MQTT_MAX_PAYLOAD_SIZE]; |
vlasov01 | 0:a17fde465867 | 203 | msg[0]='\0'; |
vlasov01 | 0:a17fde465867 | 204 | strncat (msg, (char*)msgMQTT.message.payload, msgMQTT.message.payloadlen); |
vlasov01 | 0:a17fde465867 | 205 | printf ("--->>> subscribe_cb msg: %s\n\r", msg); |
vlasov01 | 0:a17fde465867 | 206 | } |
vlasov01 | 0:a17fde465867 | 207 | |
vlasov01 | 0:a17fde465867 | 208 | int subscribe(MQTT::Client<MQTTWiFi, Countdown, MQTT_MAX_PACKET_SIZE>* client, MQTTWiFi* ipstack) |
vlasov01 | 0:a17fde465867 | 209 | { |
vlasov01 | 0:a17fde465867 | 210 | char* pubTopic = TOPIC; |
vlasov01 | 0:a17fde465867 | 211 | return client->subscribe(pubTopic, MQTT::QOS1, subscribe_cb); |
vlasov01 | 0:a17fde465867 | 212 | } |
vlasov01 | 0:a17fde465867 | 213 | |
vlasov01 | 0:a17fde465867 | 214 | int connect(MQTT::Client<MQTTWiFi, Countdown, MQTT_MAX_PACKET_SIZE>* client, MQTTWiFi* ipstack) |
vlasov01 | 0:a17fde465867 | 215 | { |
vlasov01 | 0:a17fde465867 | 216 | const char* iot_ibm = BROKER_URL; |
vlasov01 | 0:a17fde465867 | 217 | |
vlasov01 | 0:a17fde465867 | 218 | |
vlasov01 | 0:a17fde465867 | 219 | char hostname[strlen(org) + strlen(iot_ibm) + 1]; |
vlasov01 | 0:a17fde465867 | 220 | sprintf(hostname, "%s%s", org, iot_ibm); |
vlasov01 | 0:a17fde465867 | 221 | SpwfSAInterface& WiFi = ipstack->getWiFi(); |
vlasov01 | 0:a17fde465867 | 222 | // ip_addr = WiFi.get_ip_address(); |
vlasov01 | 0:a17fde465867 | 223 | // Construct clientId - d:org:type:id |
vlasov01 | 0:a17fde465867 | 224 | char clientId[strlen(org) + strlen(type) + strlen(id) + 5]; |
vlasov01 | 0:a17fde465867 | 225 | sprintf(clientId, "d:%s:%s:%s", org, type, id); |
vlasov01 | 0:a17fde465867 | 226 | sprintf(subscription_url, "%s.%s/#/device/%s/sensor/", org, "internetofthings.ibmcloud.com",id); |
vlasov01 | 0:a17fde465867 | 227 | |
vlasov01 | 0:a17fde465867 | 228 | // Network debug statements |
vlasov01 | 0:a17fde465867 | 229 | LOG("=====================================\n\r"); |
vlasov01 | 0:a17fde465867 | 230 | LOG("Connecting WiFi.\n\r"); |
vlasov01 | 0:a17fde465867 | 231 | LOG("Nucleo IP ADDRESS: %s\n\r", WiFi.get_ip_address()); |
vlasov01 | 0:a17fde465867 | 232 | LOG("Nucleo MAC ADDRESS: %s\n\r", WiFi.get_mac_address()); |
vlasov01 | 0:a17fde465867 | 233 | LOG("Server Hostname: %s port: %d\n\r", hostname, IBM_IOT_PORT); |
vlasov01 | 0:a17fde465867 | 234 | // for(int i = 0; clientId[i]; i++){ // set lowercase mac |
vlasov01 | 0:a17fde465867 | 235 | // clientId[i] = tolower(clientId[i]); |
vlasov01 | 0:a17fde465867 | 236 | // } |
vlasov01 | 0:a17fde465867 | 237 | LOG("Client ID: %s\n\r", clientId); |
vlasov01 | 0:a17fde465867 | 238 | LOG("Topic: %s\n\r",TOPIC); |
vlasov01 | 0:a17fde465867 | 239 | LOG("Subscription URL: %s\n\r", subscription_url); |
vlasov01 | 0:a17fde465867 | 240 | LOG("=====================================\n\r"); |
vlasov01 | 0:a17fde465867 | 241 | |
vlasov01 | 0:a17fde465867 | 242 | netConnecting = true; |
vlasov01 | 0:a17fde465867 | 243 | ipstack->open(&ipstack->getWiFi()); |
vlasov01 | 0:a17fde465867 | 244 | int rc = ipstack->connect(hostname, IBM_IOT_PORT, connectTimeout); |
vlasov01 | 0:a17fde465867 | 245 | if (rc != 0) |
vlasov01 | 0:a17fde465867 | 246 | { |
vlasov01 | 0:a17fde465867 | 247 | WARN("IP Stack connect returned: %d\n", rc); |
vlasov01 | 0:a17fde465867 | 248 | return rc; |
vlasov01 | 0:a17fde465867 | 249 | } |
vlasov01 | 0:a17fde465867 | 250 | printf ("--->TCP Connected\n\r"); |
vlasov01 | 0:a17fde465867 | 251 | netConnected = true; |
vlasov01 | 0:a17fde465867 | 252 | netConnecting = false; |
vlasov01 | 0:a17fde465867 | 253 | |
vlasov01 | 0:a17fde465867 | 254 | // MQTT Connect |
vlasov01 | 0:a17fde465867 | 255 | mqttConnecting = true; |
vlasov01 | 0:a17fde465867 | 256 | MQTTPacket_connectData data = MQTTPacket_connectData_initializer; |
vlasov01 | 0:a17fde465867 | 257 | data.MQTTVersion = 4; |
vlasov01 | 0:a17fde465867 | 258 | data.struct_version=0; |
vlasov01 | 0:a17fde465867 | 259 | data.clientID.cstring = clientId; |
vlasov01 | 0:a17fde465867 | 260 | |
vlasov01 | 0:a17fde465867 | 261 | if (!quickstartMode) |
vlasov01 | 0:a17fde465867 | 262 | { |
vlasov01 | 0:a17fde465867 | 263 | data.username.cstring = "use-token-auth"; |
vlasov01 | 0:a17fde465867 | 264 | data.password.cstring = auth_token; |
vlasov01 | 0:a17fde465867 | 265 | } |
vlasov01 | 0:a17fde465867 | 266 | if ((rc = client->connect(data)) == 0) |
vlasov01 | 0:a17fde465867 | 267 | { |
vlasov01 | 0:a17fde465867 | 268 | connected = true; |
vlasov01 | 0:a17fde465867 | 269 | printf ("--->MQTT Connected\n\r"); |
vlasov01 | 0:a17fde465867 | 270 | #ifdef SUBSCRIBE |
vlasov01 | 0:a17fde465867 | 271 | if (!subscribe(client, ipstack)) printf ("--->>>MQTT subscribed to: %s\n\r",TOPIC); |
vlasov01 | 0:a17fde465867 | 272 | #endif |
vlasov01 | 0:a17fde465867 | 273 | } |
vlasov01 | 0:a17fde465867 | 274 | else { |
vlasov01 | 0:a17fde465867 | 275 | WARN("MQTT connect returned %d\n", rc); |
vlasov01 | 0:a17fde465867 | 276 | } |
vlasov01 | 0:a17fde465867 | 277 | if (rc >= 0) |
vlasov01 | 0:a17fde465867 | 278 | connack_rc = rc; |
vlasov01 | 0:a17fde465867 | 279 | mqttConnecting = false; |
vlasov01 | 0:a17fde465867 | 280 | return rc; |
vlasov01 | 0:a17fde465867 | 281 | } |
vlasov01 | 0:a17fde465867 | 282 | |
vlasov01 | 0:a17fde465867 | 283 | int getConnTimeout(int attemptNumber) |
vlasov01 | 0:a17fde465867 | 284 | { // First 10 attempts try within 3 seconds, next 10 attempts retry after every 1 minute |
vlasov01 | 0:a17fde465867 | 285 | // after 20 attempts, retry every 10 minutes |
vlasov01 | 0:a17fde465867 | 286 | return (attemptNumber < 10) ? 3 : (attemptNumber < 20) ? 60 : 600; |
vlasov01 | 0:a17fde465867 | 287 | } |
vlasov01 | 0:a17fde465867 | 288 | |
vlasov01 | 0:a17fde465867 | 289 | void attemptConnect(MQTT::Client<MQTTWiFi, Countdown, MQTT_MAX_PACKET_SIZE>* client, MQTTWiFi* ipstack) |
vlasov01 | 0:a17fde465867 | 290 | { |
vlasov01 | 0:a17fde465867 | 291 | connected = false; |
vlasov01 | 0:a17fde465867 | 292 | |
vlasov01 | 0:a17fde465867 | 293 | while (connect(client, ipstack) != MQTT_CONNECTION_ACCEPTED) |
vlasov01 | 0:a17fde465867 | 294 | { |
vlasov01 | 0:a17fde465867 | 295 | if (connack_rc == MQTT_NOT_AUTHORIZED || connack_rc == MQTT_BAD_USERNAME_OR_PASSWORD) { |
vlasov01 | 0:a17fde465867 | 296 | printf ("File: %s, Line: %d Error: %d\n\r",__FILE__,__LINE__, connack_rc); |
vlasov01 | 0:a17fde465867 | 297 | return; // don't reattempt to connect if credentials are wrong |
vlasov01 | 0:a17fde465867 | 298 | } |
vlasov01 | 0:a17fde465867 | 299 | int timeout = getConnTimeout(++retryAttempt); |
vlasov01 | 0:a17fde465867 | 300 | WARN("Retry attempt number %d waiting %d\n", retryAttempt, timeout); |
vlasov01 | 0:a17fde465867 | 301 | |
vlasov01 | 0:a17fde465867 | 302 | // if ipstack and client were on the heap we could deconstruct and goto a label where they are constructed |
vlasov01 | 0:a17fde465867 | 303 | // or maybe just add the proper members to do this disconnect and call attemptConnect(...) |
vlasov01 | 0:a17fde465867 | 304 | // this works - reset the system when the retry count gets to a threshold |
vlasov01 | 0:a17fde465867 | 305 | if (retryAttempt == 5) |
vlasov01 | 0:a17fde465867 | 306 | NVIC_SystemReset(); |
vlasov01 | 0:a17fde465867 | 307 | else |
vlasov01 | 0:a17fde465867 | 308 | wait(timeout); |
vlasov01 | 0:a17fde465867 | 309 | } |
vlasov01 | 0:a17fde465867 | 310 | } |
vlasov01 | 0:a17fde465867 | 311 | |
vlasov01 | 0:a17fde465867 | 312 | int publish(MQTT::Client<MQTTWiFi, Countdown, MQTT_MAX_PACKET_SIZE>* client, MQTTWiFi* ipstack) |
vlasov01 | 0:a17fde465867 | 313 | { |
vlasov01 | 0:a17fde465867 | 314 | MQTT::Message message; |
vlasov01 | 0:a17fde465867 | 315 | char* pubTopic = TOPIC; |
vlasov01 | 0:a17fde465867 | 316 | |
vlasov01 | 0:a17fde465867 | 317 | char buf[MQTT_MAX_PAYLOAD_SIZE]; |
vlasov01 | 0:a17fde465867 | 318 | float temp, press, hum; |
vlasov01 | 0:a17fde465867 | 319 | |
vlasov01 | 0:a17fde465867 | 320 | LSM6DSL_Event_Status_t status; |
vlasov01 | 0:a17fde465867 | 321 | if (mems_event) { |
vlasov01 | 0:a17fde465867 | 322 | mems_event = 0; |
vlasov01 | 0:a17fde465867 | 323 | acc_gyro->get_event_status(&status); |
vlasov01 | 0:a17fde465867 | 324 | if (status.StepStatus) { |
vlasov01 | 0:a17fde465867 | 325 | /* New step detected, so print the step counter */ |
vlasov01 | 0:a17fde465867 | 326 | acc_gyro->get_step_counter(&step_count); |
vlasov01 | 0:a17fde465867 | 327 | printf("Step counter: %d\r\n", step_count); |
vlasov01 | 0:a17fde465867 | 328 | } |
vlasov01 | 0:a17fde465867 | 329 | |
vlasov01 | 0:a17fde465867 | 330 | if (status.FreeFallStatus) { |
vlasov01 | 0:a17fde465867 | 331 | /* Output data. */ |
vlasov01 | 0:a17fde465867 | 332 | printf("Free Fall Detected!\r\n"); |
vlasov01 | 0:a17fde465867 | 333 | } |
vlasov01 | 0:a17fde465867 | 334 | |
vlasov01 | 0:a17fde465867 | 335 | if (status.TapStatus) { |
vlasov01 | 0:a17fde465867 | 336 | /* Output data. */ |
vlasov01 | 0:a17fde465867 | 337 | printf("Single Tap Detected!\r\n"); |
vlasov01 | 0:a17fde465867 | 338 | } |
vlasov01 | 0:a17fde465867 | 339 | |
vlasov01 | 0:a17fde465867 | 340 | if (status.DoubleTapStatus) { |
vlasov01 | 0:a17fde465867 | 341 | /* Output data. */ |
vlasov01 | 0:a17fde465867 | 342 | printf("Double Tap Detected!\r\n"); |
vlasov01 | 0:a17fde465867 | 343 | } |
vlasov01 | 0:a17fde465867 | 344 | |
vlasov01 | 0:a17fde465867 | 345 | if (status.D6DOrientationStatus) { |
vlasov01 | 0:a17fde465867 | 346 | /* Send 6D Orientation */ |
vlasov01 | 0:a17fde465867 | 347 | send_orientation(); |
vlasov01 | 0:a17fde465867 | 348 | } |
vlasov01 | 0:a17fde465867 | 349 | |
vlasov01 | 0:a17fde465867 | 350 | if (status.TiltStatus) { |
vlasov01 | 0:a17fde465867 | 351 | /* Output data. */ |
vlasov01 | 0:a17fde465867 | 352 | printf("Tilt Detected!\r\n"); |
vlasov01 | 0:a17fde465867 | 353 | } |
vlasov01 | 0:a17fde465867 | 354 | |
vlasov01 | 0:a17fde465867 | 355 | if (status.WakeUpStatus) { |
vlasov01 | 0:a17fde465867 | 356 | /* Output data. */ |
vlasov01 | 0:a17fde465867 | 357 | printf("Wake Up Detected!\r\n"); |
vlasov01 | 0:a17fde465867 | 358 | } |
vlasov01 | 0:a17fde465867 | 359 | } |
vlasov01 | 0:a17fde465867 | 360 | |
vlasov01 | 0:a17fde465867 | 361 | if (toggle_hw_event_enable) { |
vlasov01 | 0:a17fde465867 | 362 | toggle_hw_event_enable = 0; |
vlasov01 | 0:a17fde465867 | 363 | if (hw_event_is_enabled == 0) { |
vlasov01 | 0:a17fde465867 | 364 | /* Enable HW events. */ |
vlasov01 | 0:a17fde465867 | 365 | acc_gyro->enable_pedometer(); |
vlasov01 | 0:a17fde465867 | 366 | acc_gyro->enable_tilt_detection(); |
vlasov01 | 0:a17fde465867 | 367 | acc_gyro->enable_free_fall_detection(); |
vlasov01 | 0:a17fde465867 | 368 | acc_gyro->enable_single_tap_detection(); |
vlasov01 | 0:a17fde465867 | 369 | acc_gyro->enable_double_tap_detection(); |
vlasov01 | 0:a17fde465867 | 370 | acc_gyro->enable_6d_orientation(); |
vlasov01 | 0:a17fde465867 | 371 | acc_gyro->enable_wake_up_detection(); |
vlasov01 | 0:a17fde465867 | 372 | hw_event_is_enabled = 1; |
vlasov01 | 0:a17fde465867 | 373 | } else { |
vlasov01 | 0:a17fde465867 | 374 | acc_gyro->disable_pedometer(); |
vlasov01 | 0:a17fde465867 | 375 | acc_gyro->disable_tilt_detection(); |
vlasov01 | 0:a17fde465867 | 376 | acc_gyro->disable_free_fall_detection(); |
vlasov01 | 0:a17fde465867 | 377 | acc_gyro->disable_single_tap_detection(); |
vlasov01 | 0:a17fde465867 | 378 | acc_gyro->disable_double_tap_detection(); |
vlasov01 | 0:a17fde465867 | 379 | acc_gyro->disable_6d_orientation(); |
vlasov01 | 0:a17fde465867 | 380 | acc_gyro->disable_wake_up_detection(); |
vlasov01 | 0:a17fde465867 | 381 | hw_event_is_enabled = 0; |
vlasov01 | 0:a17fde465867 | 382 | } |
vlasov01 | 0:a17fde465867 | 383 | } |
vlasov01 | 0:a17fde465867 | 384 | |
vlasov01 | 0:a17fde465867 | 385 | hum_temp->get_temperature(&temp); |
vlasov01 | 0:a17fde465867 | 386 | //press_temp->get_temperature(&temp); |
vlasov01 | 0:a17fde465867 | 387 | hum_temp->get_humidity(&hum); |
vlasov01 | 0:a17fde465867 | 388 | press_temp->get_pressure(&press); |
vlasov01 | 0:a17fde465867 | 389 | |
vlasov01 | 0:a17fde465867 | 390 | sprintf(buf, |
vlasov01 | 0:a17fde465867 | 391 | "{\"d\":{\"ST\":\"Nucleo-IoT-mbed\",\"Temp\":%0.4f,\"Pressure\":%0.4f,\"Humidity\":%0.4f,\"FreeFall\":%i,\"DoubleTap\":%i,\"TiltStatus\":%i}}", |
vlasov01 | 0:a17fde465867 | 392 | temp, press, hum, status.FreeFallStatus, status.DoubleTapStatus, status.TiltStatus); |
vlasov01 | 0:a17fde465867 | 393 | message.qos = MQTT::QOS0; |
vlasov01 | 0:a17fde465867 | 394 | message.retained = false; |
vlasov01 | 0:a17fde465867 | 395 | message.dup = false; |
vlasov01 | 0:a17fde465867 | 396 | message.payload = (void*)buf; |
vlasov01 | 0:a17fde465867 | 397 | message.payloadlen = strlen(buf); |
vlasov01 | 0:a17fde465867 | 398 | |
vlasov01 | 0:a17fde465867 | 399 | // LOG("Publishing %s\n\r", buf); |
vlasov01 | 0:a17fde465867 | 400 | printf("Publishing %s\n\r", buf); |
vlasov01 | 0:a17fde465867 | 401 | return client->publish(pubTopic, message); |
vlasov01 | 0:a17fde465867 | 402 | } |
vlasov01 | 0:a17fde465867 | 403 | |
vlasov01 | 0:a17fde465867 | 404 | void initSensors(){ |
vlasov01 | 0:a17fde465867 | 405 | // A2 start |
vlasov01 | 0:a17fde465867 | 406 | uint8_t id; |
vlasov01 | 0:a17fde465867 | 407 | //float value1, value2; |
vlasov01 | 0:a17fde465867 | 408 | //char buffer1[32], buffer2[32]; |
vlasov01 | 0:a17fde465867 | 409 | //int32_t axes[3]; |
vlasov01 | 0:a17fde465867 | 410 | |
vlasov01 | 0:a17fde465867 | 411 | /* Enable all sensors */ |
vlasov01 | 0:a17fde465867 | 412 | hum_temp->enable(); |
vlasov01 | 0:a17fde465867 | 413 | press_temp->enable(); |
vlasov01 | 0:a17fde465867 | 414 | magnetometer->enable(); |
vlasov01 | 0:a17fde465867 | 415 | accelerometer->enable(); |
vlasov01 | 0:a17fde465867 | 416 | acc_gyro->enable_x(); |
vlasov01 | 0:a17fde465867 | 417 | acc_gyro->enable_g(); |
vlasov01 | 0:a17fde465867 | 418 | |
vlasov01 | 0:a17fde465867 | 419 | printf("\r\n--- Starting new run ---\r\n"); |
vlasov01 | 0:a17fde465867 | 420 | |
vlasov01 | 0:a17fde465867 | 421 | hum_temp->read_id(&id); |
vlasov01 | 0:a17fde465867 | 422 | printf("HTS221 humidity & temperature = 0x%X\r\n", id); |
vlasov01 | 0:a17fde465867 | 423 | press_temp->read_id(&id); |
vlasov01 | 0:a17fde465867 | 424 | printf("LPS22HB pressure & temperature = 0x%X\r\n", id); |
vlasov01 | 0:a17fde465867 | 425 | magnetometer->read_id(&id); |
vlasov01 | 0:a17fde465867 | 426 | printf("LSM303AGR magnetometer = 0x%X\r\n", id); |
vlasov01 | 0:a17fde465867 | 427 | accelerometer->read_id(&id); |
vlasov01 | 0:a17fde465867 | 428 | printf("LSM303AGR accelerometer = 0x%X\r\n", id); |
vlasov01 | 0:a17fde465867 | 429 | acc_gyro->read_id(&id); |
vlasov01 | 0:a17fde465867 | 430 | printf("LSM6DSL accelerometer & gyroscope = 0x%X\r\n", id); |
vlasov01 | 0:a17fde465867 | 431 | |
vlasov01 | 0:a17fde465867 | 432 | // A2 end |
vlasov01 | 0:a17fde465867 | 433 | } |
vlasov01 | 0:a17fde465867 | 434 | |
vlasov01 | 0:a17fde465867 | 435 | |
vlasov01 | 0:a17fde465867 | 436 | int main() |
vlasov01 | 0:a17fde465867 | 437 | { |
vlasov01 | 0:a17fde465867 | 438 | /* Attach callback to User button press */ |
vlasov01 | 0:a17fde465867 | 439 | mybutton.fall(&pressed_cb); |
vlasov01 | 0:a17fde465867 | 440 | /* Attach callback to LSM6DSL INT1 */ |
vlasov01 | 0:a17fde465867 | 441 | acc_gyro->attach_int1_irq(&int1_cb); |
vlasov01 | 0:a17fde465867 | 442 | /* Attach callback to LSM6DSL INT2 */ |
vlasov01 | 0:a17fde465867 | 443 | acc_gyro->attach_int2_irq(&int2_cb); |
vlasov01 | 0:a17fde465867 | 444 | |
vlasov01 | 0:a17fde465867 | 445 | /* Enable LSM6DSL accelerometer */ |
vlasov01 | 0:a17fde465867 | 446 | acc_gyro->enable_x(); |
vlasov01 | 0:a17fde465867 | 447 | /* Enable HW events. */ |
vlasov01 | 0:a17fde465867 | 448 | acc_gyro->enable_pedometer(); |
vlasov01 | 0:a17fde465867 | 449 | acc_gyro->enable_tilt_detection(); |
vlasov01 | 0:a17fde465867 | 450 | acc_gyro->enable_free_fall_detection(); |
vlasov01 | 0:a17fde465867 | 451 | acc_gyro->enable_single_tap_detection(); |
vlasov01 | 0:a17fde465867 | 452 | acc_gyro->enable_double_tap_detection(); |
vlasov01 | 0:a17fde465867 | 453 | acc_gyro->enable_6d_orientation(); |
vlasov01 | 0:a17fde465867 | 454 | acc_gyro->enable_wake_up_detection(); |
vlasov01 | 0:a17fde465867 | 455 | |
vlasov01 | 0:a17fde465867 | 456 | |
vlasov01 | 0:a17fde465867 | 457 | |
vlasov01 | 0:a17fde465867 | 458 | const char * ssid = SSID; // Network must be visible otherwise it can't connect |
vlasov01 | 0:a17fde465867 | 459 | const char * seckey = PASSW; |
vlasov01 | 0:a17fde465867 | 460 | SpwfSAInterface spwf(D8, D2, false); |
vlasov01 | 0:a17fde465867 | 461 | |
vlasov01 | 0:a17fde465867 | 462 | // Timer tyeld; |
vlasov01 | 0:a17fde465867 | 463 | myled=0; |
vlasov01 | 0:a17fde465867 | 464 | DevI2C *i2c = new DevI2C(I2C_SDA, I2C_SCL); |
vlasov01 | 0:a17fde465867 | 465 | i2c->frequency(400000); |
vlasov01 | 0:a17fde465867 | 466 | |
vlasov01 | 0:a17fde465867 | 467 | //X_NUCLEO_IKS01A2 |
vlasov01 | 0:a17fde465867 | 468 | initSensors(); |
vlasov01 | 0:a17fde465867 | 469 | /* |
vlasov01 | 0:a17fde465867 | 470 | X_NUCLEO_IKS01A1 *mems_expansion_board = X_NUCLEO_IKS01A1::Instance(i2c); |
vlasov01 | 0:a17fde465867 | 471 | pressure_sensor = mems_expansion_board->pt_sensor; |
vlasov01 | 0:a17fde465867 | 472 | temp_sensor1 = mems_expansion_board->ht_sensor; |
vlasov01 | 0:a17fde465867 | 473 | humidity_sensor = mems_expansion_board->ht_sensor; |
vlasov01 | 0:a17fde465867 | 474 | */ |
vlasov01 | 0:a17fde465867 | 475 | pc.printf("\r\nX-NUCLEO-IDW01M1 mbed Application\r\n"); |
vlasov01 | 0:a17fde465867 | 476 | pc.printf("\r\nconnecting to AP\r\n"); |
vlasov01 | 0:a17fde465867 | 477 | |
vlasov01 | 0:a17fde465867 | 478 | quickstartMode=false; |
vlasov01 | 0:a17fde465867 | 479 | if (strcmp(org, "quickstart") == 0){quickstartMode = true;} |
vlasov01 | 0:a17fde465867 | 480 | MQTTWiFi ipstack(spwf, ssid, seckey, NSAPI_SECURITY_WPA2); |
vlasov01 | 0:a17fde465867 | 481 | MQTT::Client<MQTTWiFi, Countdown, MQTT_MAX_PACKET_SIZE> client(ipstack); |
vlasov01 | 0:a17fde465867 | 482 | if (quickstartMode){ |
vlasov01 | 0:a17fde465867 | 483 | char mac[50]; // remove all : from mac |
vlasov01 | 0:a17fde465867 | 484 | char *digit=NULL; |
vlasov01 | 0:a17fde465867 | 485 | sprintf (id,"%s", ""); |
vlasov01 | 0:a17fde465867 | 486 | sprintf (mac,"%s",ipstack.getWiFi().get_mac_address()); |
vlasov01 | 0:a17fde465867 | 487 | digit = strtok (mac,":"); |
vlasov01 | 0:a17fde465867 | 488 | while (digit != NULL) |
vlasov01 | 0:a17fde465867 | 489 | { |
vlasov01 | 0:a17fde465867 | 490 | strcat (id, digit); |
vlasov01 | 0:a17fde465867 | 491 | digit = strtok (NULL, ":"); |
vlasov01 | 0:a17fde465867 | 492 | } |
vlasov01 | 0:a17fde465867 | 493 | } |
vlasov01 | 0:a17fde465867 | 494 | attemptConnect(&client, &ipstack); |
vlasov01 | 0:a17fde465867 | 495 | if (connack_rc == MQTT_NOT_AUTHORIZED || connack_rc == MQTT_BAD_USERNAME_OR_PASSWORD) |
vlasov01 | 0:a17fde465867 | 496 | { |
vlasov01 | 0:a17fde465867 | 497 | while (true) |
vlasov01 | 0:a17fde465867 | 498 | wait(1.0); // Permanent failures - don't retry |
vlasov01 | 0:a17fde465867 | 499 | } |
vlasov01 | 0:a17fde465867 | 500 | #ifdef X_NUCLEO_NFC01A1_PRESENT |
vlasov01 | 0:a17fde465867 | 501 | // program NFC with broker URL |
vlasov01 | 0:a17fde465867 | 502 | 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); |
vlasov01 | 0:a17fde465867 | 503 | NDefLib::NDefNfcTag& tag = nfcNucleo->getM24SR().getNDefTag(); |
vlasov01 | 0:a17fde465867 | 504 | printf("NFC Init done: !\r\n"); |
vlasov01 | 0:a17fde465867 | 505 | //open the i2c session with the nfc chip |
vlasov01 | 0:a17fde465867 | 506 | if(tag.openSession()){ |
vlasov01 | 0:a17fde465867 | 507 | //create the NDef message and record |
vlasov01 | 0:a17fde465867 | 508 | NDefLib::Message msg; |
vlasov01 | 0:a17fde465867 | 509 | NDefLib::RecordURI rUri(NDefLib::RecordURI::HTTPS, subscription_url); |
vlasov01 | 0:a17fde465867 | 510 | msg.addRecord(&rUri); |
vlasov01 | 0:a17fde465867 | 511 | //write the tag |
vlasov01 | 0:a17fde465867 | 512 | if(tag.write(msg)){ |
vlasov01 | 0:a17fde465867 | 513 | printf("Tag writed \r\n"); |
vlasov01 | 0:a17fde465867 | 514 | } |
vlasov01 | 0:a17fde465867 | 515 | //close the i2c session |
vlasov01 | 0:a17fde465867 | 516 | if(!tag.closeSession()){ |
vlasov01 | 0:a17fde465867 | 517 | printf("Error Closing the session\r\n"); |
vlasov01 | 0:a17fde465867 | 518 | } |
vlasov01 | 0:a17fde465867 | 519 | }else printf("Error open Session\r\n"); |
vlasov01 | 0:a17fde465867 | 520 | #endif |
vlasov01 | 0:a17fde465867 | 521 | myled=1; |
vlasov01 | 0:a17fde465867 | 522 | int count = 0; |
vlasov01 | 0:a17fde465867 | 523 | // tyeld.start(); |
vlasov01 | 0:a17fde465867 | 524 | while (true) |
vlasov01 | 0:a17fde465867 | 525 | { |
vlasov01 | 0:a17fde465867 | 526 | if (++count == 100) |
vlasov01 | 0:a17fde465867 | 527 | { // Publish a message every second |
vlasov01 | 0:a17fde465867 | 528 | if (publish(&client, &ipstack) != 0) { |
vlasov01 | 0:a17fde465867 | 529 | myled=0; |
vlasov01 | 0:a17fde465867 | 530 | attemptConnect(&client, &ipstack); // if we have lost the connection |
vlasov01 | 0:a17fde465867 | 531 | } else myled=1; |
vlasov01 | 0:a17fde465867 | 532 | count = 0; |
vlasov01 | 0:a17fde465867 | 533 | } |
vlasov01 | 0:a17fde465867 | 534 | // int start = tyeld.read_ms(); |
vlasov01 | 0:a17fde465867 | 535 | client.yield(10); // allow the MQTT client to receive messages |
vlasov01 | 0:a17fde465867 | 536 | // printf ("tyeld: %d\n\r",tyeld.read_ms()-start); |
vlasov01 | 0:a17fde465867 | 537 | } |
vlasov01 | 0:a17fde465867 | 538 | } |