989
Dependencies: mbed Servo X_NUCLEO_IKS01A2 X_NUCLEO_IDW01M1v2 NetworkSocketAPI NDefLib MQTT
main.cpp@26:4178c47c785a, 2020-11-04 (annotated)
- Committer:
- fishzhang
- Date:
- Wed Nov 04 02:54:33 2020 +0000
- Revision:
- 26:4178c47c785a
- Parent:
- 25:d7f1e43736cf
879
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mridup | 0:cbf8bc43bc9e | 1 | #include "mbed.h" |
mapellil | 14:641560b57584 | 2 | #include "SpwfInterface.h" |
mridup | 4:1ed7f173eec5 | 3 | #include "TCPSocket.h" |
fabiombed | 13:0b31131bf711 | 4 | #include "MQTTClient.h" |
mapellil | 14:641560b57584 | 5 | #include "MQTTWiFi.h" |
mapellil | 14:641560b57584 | 6 | #include <ctype.h> |
mapellil | 23:43f9e34781f2 | 7 | #include "NDefLib/NDefNfcTag.h" |
mapellil | 23:43f9e34781f2 | 8 | #include "NDefLib/RecordType/RecordURI.h" |
fishzhang | 25:d7f1e43736cf | 9 | #include "Servo.h" |
fishzhang | 25:d7f1e43736cf | 10 | #include"XNucleoIKS01A2.h" |
fishzhang | 25:d7f1e43736cf | 11 | #include "stm32f4xx_hal.h" |
fishzhang | 25:d7f1e43736cf | 12 | Servo servo(D10); |
fabiombed | 13:0b31131bf711 | 13 | |
fishzhang | 25:d7f1e43736cf | 14 | float range = 0.005; |
fishzhang | 25:d7f1e43736cf | 15 | float position = 0.5; |
fishzhang | 25:d7f1e43736cf | 16 | |
mridup | 8:6df01cb43137 | 17 | Serial pc(SERIAL_TX, SERIAL_RX); |
mapellil | 14:641560b57584 | 18 | bool quickstartMode = true; |
mapellil | 17:83d0cd810ed3 | 19 | |
fishzhang | 25:d7f1e43736cf | 20 | #define ORG_QUICKSTART 101.132.47.170 // comment to connect to play.internetofthings.ibmcloud.com |
mapellil | 23:43f9e34781f2 | 21 | //#define SUBSCRIBE // uncomment to subscribe to broker msgs (not to be used with IBM broker) |
mapellil | 14:641560b57584 | 22 | |
mapellil | 14:641560b57584 | 23 | #define MQTT_MAX_PACKET_SIZE 250 |
mapellil | 14:641560b57584 | 24 | #define MQTT_MAX_PAYLOAD_SIZE 300 |
mapellil | 17:83d0cd810ed3 | 25 | |
mapellil | 14:641560b57584 | 26 | // Configuration values needed to connect to IBM IoT Cloud |
fishzhang | 25:d7f1e43736cf | 27 | #define BROKER_URL ".132.47.170"; |
mapellil | 17:83d0cd810ed3 | 28 | #ifdef ORG_QUICKSTART |
fishzhang | 25:d7f1e43736cf | 29 | #define ORG "101" // connect to quickstart.internetofthings.ibmcloud.com/ For a registered connection, replace with your org |
fishzhang | 25:d7f1e43736cf | 30 | #define ID "168" |
fishzhang | 25:d7f1e43736cf | 31 | #define AUTH_TOKEN "10" |
fishzhang | 25:d7f1e43736cf | 32 | #define DEFAULT_TYPE_NAME "145" |
mapellil | 23:43f9e34781f2 | 33 | #else // not def ORG_QUICKSTART |
fishzhang | 25:d7f1e43736cf | 34 | #define ORG "192" // connect to play.internetofthings.ibmcloud.com/ For a registered connection, replace with your org |
fishzhang | 25:d7f1e43736cf | 35 | #define ID "168" // For a registered connection, replace with your id |
fishzhang | 25:d7f1e43736cf | 36 | #define AUTH_TOKEN "10"// For a registered connection, replace with your auth-token |
fishzhang | 25:d7f1e43736cf | 37 | #define DEFAULT_TYPE_NAME "145" |
mapellil | 17:83d0cd810ed3 | 38 | #endif |
fishzhang | 25:d7f1e43736cf | 39 | #define TOPIC "TempA" |
fishzhang | 25:d7f1e43736cf | 40 | #define TOPIC2 "commond" |
fishzhang | 25:d7f1e43736cf | 41 | #define TOPICT_hum "hum" |
fishzhang | 25:d7f1e43736cf | 42 | #define TOPICT_x "x" |
fishzhang | 25:d7f1e43736cf | 43 | #define TOPICT_y "y" |
fishzhang | 25:d7f1e43736cf | 44 | #define TOPICT_z "z" |
fishzhang | 25:d7f1e43736cf | 45 | #define TOPICT_ax "a_x" |
fishzhang | 25:d7f1e43736cf | 46 | #define TOPICT_ay "a_y" |
fishzhang | 25:d7f1e43736cf | 47 | #define TOPICT_az "a_z" |
fishzhang | 25:d7f1e43736cf | 48 | #define TOPICT_bx "b_x" |
fishzhang | 25:d7f1e43736cf | 49 | #define TOPICT_by "b_y" |
fishzhang | 25:d7f1e43736cf | 50 | #define TOPICT_bz "b_z" |
fishzhang | 25:d7f1e43736cf | 51 | |
mapellil | 17:83d0cd810ed3 | 52 | |
mapellil | 14:641560b57584 | 53 | #define TYPE DEFAULT_TYPE_NAME // For a registered connection, replace with your type |
mapellil | 14:641560b57584 | 54 | #define MQTT_PORT 1883 |
mapellil | 14:641560b57584 | 55 | #define MQTT_TLS_PORT 8883 |
mapellil | 14:641560b57584 | 56 | #define IBM_IOT_PORT MQTT_PORT |
mapellil | 16:233b89a6b72f | 57 | // WiFi network credential |
fishzhang | 25:d7f1e43736cf | 58 | #define SSID "LongFreeMoble" // Network must be visible otherwise it can't connect |
fishzhang | 25:d7f1e43736cf | 59 | #define PASSW "iots8230" |
nikapov | 20:517b559ce91d | 60 | #warning "Wifi SSID & password empty" |
fishzhang | 25:d7f1e43736cf | 61 | char* topic = "TempA"; |
mapellil | 14:641560b57584 | 62 | |
mapellil | 14:641560b57584 | 63 | char id[30] = ID; // mac without colons |
mapellil | 14:641560b57584 | 64 | char org[12] = ORG; |
mapellil | 14:641560b57584 | 65 | int connack_rc = 0; // MQTT connack return code |
mapellil | 14:641560b57584 | 66 | const char* ip_addr = ""; |
mapellil | 14:641560b57584 | 67 | char* host_addr = ""; |
mapellil | 14:641560b57584 | 68 | char type[30] = TYPE; |
mapellil | 14:641560b57584 | 69 | char auth_token[30] = AUTH_TOKEN; // Auth_token is only used in non-quickstart mode |
mapellil | 14:641560b57584 | 70 | bool netConnecting = false; |
mapellil | 23:43f9e34781f2 | 71 | int connectTimeout = 1000; |
mapellil | 14:641560b57584 | 72 | bool mqttConnecting = false; |
mapellil | 14:641560b57584 | 73 | bool netConnected = false; |
mapellil | 14:641560b57584 | 74 | bool connected = false; |
mapellil | 14:641560b57584 | 75 | int retryAttempt = 0; |
mapellil | 23:43f9e34781f2 | 76 | char subscription_url[MQTT_MAX_PAYLOAD_SIZE]; |
fishzhang | 25:d7f1e43736cf | 77 | |
fishzhang | 25:d7f1e43736cf | 78 | |
fishzhang | 25:d7f1e43736cf | 79 | static XNucleoIKS01A2 *mems_expansion_board = XNucleoIKS01A2::instance(D14, D15, D4, D5); |
mapellil | 14:641560b57584 | 80 | |
fishzhang | 25:d7f1e43736cf | 81 | /* Retrieve the composing elements of the expansion board */ |
fishzhang | 25:d7f1e43736cf | 82 | static LSM303AGRMagSensor *magnetometer = mems_expansion_board->magnetometer; |
fishzhang | 25:d7f1e43736cf | 83 | static HTS221Sensor *hum_temp = mems_expansion_board->ht_sensor; |
fishzhang | 25:d7f1e43736cf | 84 | static LPS22HBSensor *press_temp = mems_expansion_board->pt_sensor; |
fishzhang | 25:d7f1e43736cf | 85 | static LSM6DSLSensor *acc_gyro = mems_expansion_board->acc_gyro; |
fishzhang | 25:d7f1e43736cf | 86 | static LSM303AGRAccSensor *accelerometer = mems_expansion_board->accelerometer; |
fishzhang | 25:d7f1e43736cf | 87 | |
fishzhang | 25:d7f1e43736cf | 88 | class WatchDog { |
fishzhang | 25:d7f1e43736cf | 89 | |
fishzhang | 25:d7f1e43736cf | 90 | private: |
fishzhang | 25:d7f1e43736cf | 91 | |
fishzhang | 25:d7f1e43736cf | 92 | IWDG_HandleTypeDef hiwdg; |
fishzhang | 25:d7f1e43736cf | 93 | |
fishzhang | 25:d7f1e43736cf | 94 | public: |
fishzhang | 25:d7f1e43736cf | 95 | |
fishzhang | 25:d7f1e43736cf | 96 | WatchDog(uint32_t prescaler = IWDG_PRESCALER_256, uint32_t reload = 0xfff) { |
fishzhang | 25:d7f1e43736cf | 97 | |
fishzhang | 25:d7f1e43736cf | 98 | hiwdg.Instance = IWDG; |
fishzhang | 25:d7f1e43736cf | 99 | |
fishzhang | 25:d7f1e43736cf | 100 | hiwdg.Init.Prescaler = prescaler; |
fishzhang | 25:d7f1e43736cf | 101 | |
fishzhang | 25:d7f1e43736cf | 102 | hiwdg.Init.Reload = reload; |
fishzhang | 25:d7f1e43736cf | 103 | |
fishzhang | 25:d7f1e43736cf | 104 | HAL_IWDG_Init(&hiwdg); |
fishzhang | 25:d7f1e43736cf | 105 | |
fishzhang | 25:d7f1e43736cf | 106 | } |
fishzhang | 25:d7f1e43736cf | 107 | |
fishzhang | 25:d7f1e43736cf | 108 | void feed() { |
fishzhang | 25:d7f1e43736cf | 109 | |
fishzhang | 25:d7f1e43736cf | 110 | HAL_IWDG_Refresh(&hiwdg); |
fishzhang | 25:d7f1e43736cf | 111 | |
fishzhang | 25:d7f1e43736cf | 112 | } |
fishzhang | 25:d7f1e43736cf | 113 | |
fishzhang | 25:d7f1e43736cf | 114 | }; |
fishzhang | 25:d7f1e43736cf | 115 | |
fishzhang | 25:d7f1e43736cf | 116 | |
fishzhang | 25:d7f1e43736cf | 117 | /* Retrieve the composing elements of the expansion board */ |
fishzhang | 25:d7f1e43736cf | 118 | //PressureSensor *pressure_sensor; |
fishzhang | 25:d7f1e43736cf | 119 | //HumiditySensor *humidity_sensor; |
fishzhang | 25:d7f1e43736cf | 120 | //TempSensor *temp_sensor1; |
mapellil | 14:641560b57584 | 121 | |
mapellil | 23:43f9e34781f2 | 122 | MQTT::Message message; |
mapellil | 23:43f9e34781f2 | 123 | MQTTString TopicName={TOPIC}; |
mapellil | 23:43f9e34781f2 | 124 | MQTT::MessageData MsgData(TopicName, message); |
mapellil | 23:43f9e34781f2 | 125 | |
mapellil | 23:43f9e34781f2 | 126 | void subscribe_cb(MQTT::MessageData & msgMQTT) { |
mapellil | 23:43f9e34781f2 | 127 | char msg[MQTT_MAX_PAYLOAD_SIZE]; |
mapellil | 23:43f9e34781f2 | 128 | msg[0]='\0'; |
mapellil | 23:43f9e34781f2 | 129 | strncat (msg, (char*)msgMQTT.message.payload, msgMQTT.message.payloadlen); |
mapellil | 23:43f9e34781f2 | 130 | printf ("--->>> subscribe_cb msg: %s\n\r", msg); |
fishzhang | 25:d7f1e43736cf | 131 | printf("%d\r\n",strlen(msg)); |
fishzhang | 25:d7f1e43736cf | 132 | if(strlen(msg)==2) |
fishzhang | 25:d7f1e43736cf | 133 | { |
fishzhang | 25:d7f1e43736cf | 134 | printf ("I AM WORKING\n\r"); |
fishzhang | 25:d7f1e43736cf | 135 | int i=0; |
fishzhang | 25:d7f1e43736cf | 136 | while(i<500) { |
fishzhang | 25:d7f1e43736cf | 137 | i++; |
fishzhang | 25:d7f1e43736cf | 138 | servo = position; |
fishzhang | 25:d7f1e43736cf | 139 | position += range; |
fishzhang | 25:d7f1e43736cf | 140 | if(position >= 1) { |
fishzhang | 25:d7f1e43736cf | 141 | position = 0; |
fishzhang | 25:d7f1e43736cf | 142 | wait(0.5); |
fishzhang | 25:d7f1e43736cf | 143 | } |
fishzhang | 25:d7f1e43736cf | 144 | wait(0.002); |
fishzhang | 25:d7f1e43736cf | 145 | } |
fishzhang | 25:d7f1e43736cf | 146 | } |
mapellil | 23:43f9e34781f2 | 147 | } |
mapellil | 23:43f9e34781f2 | 148 | |
mapellil | 23:43f9e34781f2 | 149 | int subscribe(MQTT::Client<MQTTWiFi, Countdown, MQTT_MAX_PACKET_SIZE>* client, MQTTWiFi* ipstack) |
mapellil | 23:43f9e34781f2 | 150 | { |
fishzhang | 25:d7f1e43736cf | 151 | char* pubTopic = TOPIC2; |
fishzhang | 25:d7f1e43736cf | 152 | printf("subscribe int finished\r\n"); |
mapellil | 23:43f9e34781f2 | 153 | return client->subscribe(pubTopic, MQTT::QOS1, subscribe_cb); |
mapellil | 23:43f9e34781f2 | 154 | } |
mapellil | 14:641560b57584 | 155 | |
mapellil | 14:641560b57584 | 156 | int connect(MQTT::Client<MQTTWiFi, Countdown, MQTT_MAX_PACKET_SIZE>* client, MQTTWiFi* ipstack) |
mapellil | 23:43f9e34781f2 | 157 | { |
mapellil | 23:43f9e34781f2 | 158 | const char* iot_ibm = BROKER_URL; |
mapellil | 23:43f9e34781f2 | 159 | |
mapellil | 14:641560b57584 | 160 | |
mapellil | 14:641560b57584 | 161 | char hostname[strlen(org) + strlen(iot_ibm) + 1]; |
mapellil | 14:641560b57584 | 162 | sprintf(hostname, "%s%s", org, iot_ibm); |
mapellil | 14:641560b57584 | 163 | SpwfSAInterface& WiFi = ipstack->getWiFi(); |
mapellil | 23:43f9e34781f2 | 164 | char clientId[strlen(org) + strlen(type) + strlen(id) + 5]; |
mapellil | 23:43f9e34781f2 | 165 | sprintf(clientId, "d:%s:%s:%s", org, type, id); |
fishzhang | 25:d7f1e43736cf | 166 | sprintf(subscription_url, "%s.%s/#/device/%s/sensor/", org, "iots",id); |
mapellil | 23:43f9e34781f2 | 167 | |
mapellil | 14:641560b57584 | 168 | // Network debug statements |
fishzhang | 25:d7f1e43736cf | 169 | LOG("\n\r=====================================\n\r"); |
mapellil | 14:641560b57584 | 170 | LOG("Connecting WiFi.\n\r"); |
mapellil | 23:43f9e34781f2 | 171 | LOG("Nucleo IP ADDRESS: %s\n\r", WiFi.get_ip_address()); |
mapellil | 23:43f9e34781f2 | 172 | LOG("Nucleo MAC ADDRESS: %s\n\r", WiFi.get_mac_address()); |
mapellil | 23:43f9e34781f2 | 173 | LOG("Server Hostname: %s port: %d\n\r", hostname, IBM_IOT_PORT); |
mapellil | 24:a59eb8bdc431 | 174 | LOG("Client ID: %s\n\r", clientId); |
mapellil | 23:43f9e34781f2 | 175 | LOG("Topic: %s\n\r",TOPIC); |
mapellil | 23:43f9e34781f2 | 176 | LOG("Subscription URL: %s\n\r", subscription_url); |
mapellil | 14:641560b57584 | 177 | LOG("=====================================\n\r"); |
mapellil | 14:641560b57584 | 178 | |
mapellil | 14:641560b57584 | 179 | netConnecting = true; |
mapellil | 14:641560b57584 | 180 | ipstack->open(&ipstack->getWiFi()); |
mapellil | 23:43f9e34781f2 | 181 | int rc = ipstack->connect(hostname, IBM_IOT_PORT, connectTimeout); |
mapellil | 14:641560b57584 | 182 | if (rc != 0) |
mapellil | 14:641560b57584 | 183 | { |
mapellil | 14:641560b57584 | 184 | WARN("IP Stack connect returned: %d\n", rc); |
mapellil | 14:641560b57584 | 185 | return rc; |
mapellil | 14:641560b57584 | 186 | } |
mapellil | 23:43f9e34781f2 | 187 | printf ("--->TCP Connected\n\r"); |
mapellil | 14:641560b57584 | 188 | netConnected = true; |
mapellil | 14:641560b57584 | 189 | netConnecting = false; |
mapellil | 14:641560b57584 | 190 | |
mapellil | 14:641560b57584 | 191 | // MQTT Connect |
mapellil | 14:641560b57584 | 192 | mqttConnecting = true; |
mapellil | 14:641560b57584 | 193 | MQTTPacket_connectData data = MQTTPacket_connectData_initializer; |
mapellil | 17:83d0cd810ed3 | 194 | data.MQTTVersion = 4; |
mapellil | 17:83d0cd810ed3 | 195 | data.struct_version=0; |
mapellil | 14:641560b57584 | 196 | data.clientID.cstring = clientId; |
mapellil | 14:641560b57584 | 197 | |
mapellil | 14:641560b57584 | 198 | if (!quickstartMode) |
mapellil | 14:641560b57584 | 199 | { |
mapellil | 14:641560b57584 | 200 | data.username.cstring = "use-token-auth"; |
mapellil | 14:641560b57584 | 201 | data.password.cstring = auth_token; |
mapellil | 23:43f9e34781f2 | 202 | } |
mapellil | 14:641560b57584 | 203 | if ((rc = client->connect(data)) == 0) |
mapellil | 14:641560b57584 | 204 | { |
mapellil | 14:641560b57584 | 205 | connected = true; |
mapellil | 23:43f9e34781f2 | 206 | printf ("--->MQTT Connected\n\r"); |
mapellil | 23:43f9e34781f2 | 207 | #ifdef SUBSCRIBE |
mapellil | 23:43f9e34781f2 | 208 | if (!subscribe(client, ipstack)) printf ("--->>>MQTT subscribed to: %s\n\r",TOPIC); |
mapellil | 23:43f9e34781f2 | 209 | #endif |
mapellil | 14:641560b57584 | 210 | } |
mapellil | 14:641560b57584 | 211 | else { |
mapellil | 14:641560b57584 | 212 | WARN("MQTT connect returned %d\n", rc); |
mapellil | 14:641560b57584 | 213 | } |
mapellil | 14:641560b57584 | 214 | if (rc >= 0) |
mapellil | 14:641560b57584 | 215 | connack_rc = rc; |
mapellil | 14:641560b57584 | 216 | mqttConnecting = false; |
mapellil | 14:641560b57584 | 217 | return rc; |
mapellil | 14:641560b57584 | 218 | } |
mapellil | 14:641560b57584 | 219 | |
mapellil | 14:641560b57584 | 220 | int getConnTimeout(int attemptNumber) |
mapellil | 14:641560b57584 | 221 | { // First 10 attempts try within 3 seconds, next 10 attempts retry after every 1 minute |
mapellil | 14:641560b57584 | 222 | // after 20 attempts, retry every 10 minutes |
mapellil | 14:641560b57584 | 223 | return (attemptNumber < 10) ? 3 : (attemptNumber < 20) ? 60 : 600; |
mapellil | 14:641560b57584 | 224 | } |
mapellil | 14:641560b57584 | 225 | |
mapellil | 14:641560b57584 | 226 | void attemptConnect(MQTT::Client<MQTTWiFi, Countdown, MQTT_MAX_PACKET_SIZE>* client, MQTTWiFi* ipstack) |
mapellil | 14:641560b57584 | 227 | { |
mapellil | 14:641560b57584 | 228 | connected = false; |
mapellil | 14:641560b57584 | 229 | |
mapellil | 14:641560b57584 | 230 | while (connect(client, ipstack) != MQTT_CONNECTION_ACCEPTED) |
mapellil | 14:641560b57584 | 231 | { |
mapellil | 14:641560b57584 | 232 | if (connack_rc == MQTT_NOT_AUTHORIZED || connack_rc == MQTT_BAD_USERNAME_OR_PASSWORD) { |
mapellil | 23:43f9e34781f2 | 233 | printf ("File: %s, Line: %d Error: %d\n\r",__FILE__,__LINE__, connack_rc); |
mapellil | 14:641560b57584 | 234 | return; // don't reattempt to connect if credentials are wrong |
mapellil | 23:43f9e34781f2 | 235 | } |
mapellil | 14:641560b57584 | 236 | int timeout = getConnTimeout(++retryAttempt); |
mapellil | 14:641560b57584 | 237 | WARN("Retry attempt number %d waiting %d\n", retryAttempt, timeout); |
mapellil | 14:641560b57584 | 238 | |
mapellil | 14:641560b57584 | 239 | // if ipstack and client were on the heap we could deconstruct and goto a label where they are constructed |
mapellil | 23:43f9e34781f2 | 240 | // or maybe just add the proper members to do this disconnect and call attemptConnect(...) |
mapellil | 14:641560b57584 | 241 | // this works - reset the system when the retry count gets to a threshold |
mapellil | 14:641560b57584 | 242 | if (retryAttempt == 5) |
mapellil | 14:641560b57584 | 243 | NVIC_SystemReset(); |
mapellil | 14:641560b57584 | 244 | else |
mapellil | 14:641560b57584 | 245 | wait(timeout); |
mapellil | 14:641560b57584 | 246 | } |
mapellil | 14:641560b57584 | 247 | } |
mapellil | 14:641560b57584 | 248 | |
mapellil | 14:641560b57584 | 249 | int publish(MQTT::Client<MQTTWiFi, Countdown, MQTT_MAX_PACKET_SIZE>* client, MQTTWiFi* ipstack) |
mapellil | 14:641560b57584 | 250 | { |
mapellil | 14:641560b57584 | 251 | MQTT::Message message; |
mapellil | 23:43f9e34781f2 | 252 | char* pubTopic = TOPIC; |
fishzhang | 25:d7f1e43736cf | 253 | char buf[MQTT_MAX_PAYLOAD_SIZE]; |
fishzhang | 25:d7f1e43736cf | 254 | float temp, press, hum; |
fishzhang | 25:d7f1e43736cf | 255 | printf("%f\r\n",press); |
fishzhang | 25:d7f1e43736cf | 256 | hum_temp->get_temperature(&temp); |
fishzhang | 25:d7f1e43736cf | 257 | hum_temp->get_humidity(&hum); |
fishzhang | 25:d7f1e43736cf | 258 | // temp_sensor1->GetTemperature(&temp); |
fishzhang | 25:d7f1e43736cf | 259 | // humidity_sensor->GetHumidity(&hum); |
fishzhang | 25:d7f1e43736cf | 260 | // pressure_sensor->GetPressure(&press); |
fishzhang | 25:d7f1e43736cf | 261 | |
fishzhang | 25:d7f1e43736cf | 262 | |
fishzhang | 25:d7f1e43736cf | 263 | sprintf(buf,"%0.4f",temp); |
fishzhang | 25:d7f1e43736cf | 264 | message.qos = MQTT::QOS1; |
fishzhang | 25:d7f1e43736cf | 265 | message.retained = false; |
fishzhang | 25:d7f1e43736cf | 266 | message.dup = false; |
fishzhang | 25:d7f1e43736cf | 267 | message.payload = (void*)buf; |
fishzhang | 25:d7f1e43736cf | 268 | message.payloadlen = strlen(buf); |
fishzhang | 25:d7f1e43736cf | 269 | //message.payloadlen = sizeof(temp); |
fishzhang | 25:d7f1e43736cf | 270 | |
fishzhang | 25:d7f1e43736cf | 271 | // LOG("Publishing %s\n\r", buf); |
fishzhang | 25:d7f1e43736cf | 272 | printf("Publishing hum %s\n\r", buf); |
fishzhang | 25:d7f1e43736cf | 273 | return client->publish(pubTopic, message); |
fishzhang | 25:d7f1e43736cf | 274 | } |
fishzhang | 25:d7f1e43736cf | 275 | int publish2(MQTT::Client<MQTTWiFi, Countdown, MQTT_MAX_PACKET_SIZE>* client, MQTTWiFi* ipstack) |
fishzhang | 25:d7f1e43736cf | 276 | { |
fishzhang | 25:d7f1e43736cf | 277 | MQTT::Message message; |
fishzhang | 25:d7f1e43736cf | 278 | char* pubTopic = TOPICT_hum; |
fishzhang | 25:d7f1e43736cf | 279 | uint8_t id; |
fishzhang | 25:d7f1e43736cf | 280 | |
fishzhang | 25:d7f1e43736cf | 281 | char buf[MQTT_MAX_PAYLOAD_SIZE]; |
fishzhang | 25:d7f1e43736cf | 282 | float temp, press, hum; |
fishzhang | 25:d7f1e43736cf | 283 | printf("%f\r\n",press); |
fishzhang | 25:d7f1e43736cf | 284 | hum_temp->get_temperature(&temp); |
fishzhang | 25:d7f1e43736cf | 285 | hum_temp->get_humidity(&hum); |
fishzhang | 25:d7f1e43736cf | 286 | // temp_sensor1->GetTemperature(&temp); |
fishzhang | 25:d7f1e43736cf | 287 | // humidity_sensor->GetHumidity(&hum); |
fishzhang | 25:d7f1e43736cf | 288 | // pressure_sensor->GetPressure(&press); |
fishzhang | 25:d7f1e43736cf | 289 | |
fishzhang | 25:d7f1e43736cf | 290 | |
fishzhang | 25:d7f1e43736cf | 291 | sprintf(buf,"%0.4f",hum); |
fishzhang | 25:d7f1e43736cf | 292 | message.qos = MQTT::QOS1; |
fishzhang | 25:d7f1e43736cf | 293 | message.retained = false; |
fishzhang | 25:d7f1e43736cf | 294 | message.dup = false; |
fishzhang | 25:d7f1e43736cf | 295 | message.payload = (void*)buf; |
fishzhang | 25:d7f1e43736cf | 296 | message.payloadlen = strlen(buf); |
fishzhang | 25:d7f1e43736cf | 297 | //message.payloadlen = sizeof(temp); |
fishzhang | 25:d7f1e43736cf | 298 | |
fishzhang | 25:d7f1e43736cf | 299 | // LOG("Publishing %s\n\r", buf); |
fishzhang | 25:d7f1e43736cf | 300 | printf("Publishing temp %s\n\r", buf); |
fishzhang | 25:d7f1e43736cf | 301 | return client->publish(pubTopic, message); |
fishzhang | 25:d7f1e43736cf | 302 | } |
fishzhang | 25:d7f1e43736cf | 303 | int publish3(MQTT::Client<MQTTWiFi, Countdown, MQTT_MAX_PACKET_SIZE>* client, MQTTWiFi* ipstack) |
fishzhang | 25:d7f1e43736cf | 304 | { |
fishzhang | 25:d7f1e43736cf | 305 | int32_t axes[3]; |
fishzhang | 25:d7f1e43736cf | 306 | MQTT::Message message; |
fishzhang | 25:d7f1e43736cf | 307 | char* pubTopic = TOPICT_x; |
fishzhang | 25:d7f1e43736cf | 308 | uint8_t id; |
mapellil | 14:641560b57584 | 309 | |
mapellil | 14:641560b57584 | 310 | char buf[MQTT_MAX_PAYLOAD_SIZE]; |
mapellil | 14:641560b57584 | 311 | float temp, press, hum; |
fishzhang | 25:d7f1e43736cf | 312 | printf("%f\r\n",press); |
fishzhang | 25:d7f1e43736cf | 313 | hum_temp->get_temperature(&temp); |
fishzhang | 25:d7f1e43736cf | 314 | hum_temp->get_humidity(&hum); |
fishzhang | 25:d7f1e43736cf | 315 | magnetometer->get_m_axes(axes); |
fishzhang | 25:d7f1e43736cf | 316 | |
fishzhang | 25:d7f1e43736cf | 317 | |
fishzhang | 25:d7f1e43736cf | 318 | sprintf(buf,"%0.4d",axes[0]); |
fishzhang | 25:d7f1e43736cf | 319 | message.qos = MQTT::QOS1; |
fishzhang | 25:d7f1e43736cf | 320 | message.retained = false; |
fishzhang | 25:d7f1e43736cf | 321 | message.dup = false; |
fishzhang | 25:d7f1e43736cf | 322 | message.payload = (void*)buf; |
fishzhang | 25:d7f1e43736cf | 323 | message.payloadlen = strlen(buf); |
fishzhang | 25:d7f1e43736cf | 324 | printf("Publishing x %s\n\r", buf); |
fishzhang | 25:d7f1e43736cf | 325 | return client->publish(pubTopic, message); |
fishzhang | 25:d7f1e43736cf | 326 | } |
fishzhang | 25:d7f1e43736cf | 327 | int publish4(MQTT::Client<MQTTWiFi, Countdown, MQTT_MAX_PACKET_SIZE>* client, MQTTWiFi* ipstack) |
fishzhang | 25:d7f1e43736cf | 328 | { |
fishzhang | 25:d7f1e43736cf | 329 | int32_t axes[3]; |
fishzhang | 25:d7f1e43736cf | 330 | MQTT::Message message; |
fishzhang | 25:d7f1e43736cf | 331 | char* pubTopic = TOPICT_y; |
fishzhang | 25:d7f1e43736cf | 332 | uint8_t id; |
fishzhang | 25:d7f1e43736cf | 333 | |
fishzhang | 25:d7f1e43736cf | 334 | char buf[MQTT_MAX_PAYLOAD_SIZE]; |
fishzhang | 25:d7f1e43736cf | 335 | magnetometer->get_m_axes(axes); |
fishzhang | 25:d7f1e43736cf | 336 | |
fishzhang | 25:d7f1e43736cf | 337 | printf("axes's number%d\r\n",axes[1]); |
fishzhang | 25:d7f1e43736cf | 338 | sprintf(buf,"%0.4d",axes[1]); |
fishzhang | 25:d7f1e43736cf | 339 | message.qos = MQTT::QOS1; |
fishzhang | 25:d7f1e43736cf | 340 | message.retained = false; |
fishzhang | 25:d7f1e43736cf | 341 | message.dup = false; |
fishzhang | 25:d7f1e43736cf | 342 | message.payload = (void*)buf; |
fishzhang | 25:d7f1e43736cf | 343 | message.payloadlen = strlen(buf); |
fishzhang | 25:d7f1e43736cf | 344 | printf("Publishing y %s\n\r", buf); |
fishzhang | 25:d7f1e43736cf | 345 | return client->publish(pubTopic, message); |
fishzhang | 25:d7f1e43736cf | 346 | } |
fishzhang | 25:d7f1e43736cf | 347 | int publish5(MQTT::Client<MQTTWiFi, Countdown, MQTT_MAX_PACKET_SIZE>* client, MQTTWiFi* ipstack) |
fishzhang | 25:d7f1e43736cf | 348 | { |
fishzhang | 25:d7f1e43736cf | 349 | int32_t axes[3]; |
fishzhang | 25:d7f1e43736cf | 350 | MQTT::Message message; |
fishzhang | 25:d7f1e43736cf | 351 | char* pubTopic = TOPICT_z; |
fishzhang | 25:d7f1e43736cf | 352 | uint8_t id; |
fishzhang | 25:d7f1e43736cf | 353 | |
fishzhang | 25:d7f1e43736cf | 354 | char buf[MQTT_MAX_PAYLOAD_SIZE]; |
fishzhang | 25:d7f1e43736cf | 355 | float temp, press, hum; |
fishzhang | 25:d7f1e43736cf | 356 | hum_temp->get_temperature(&temp); |
fishzhang | 25:d7f1e43736cf | 357 | hum_temp->get_humidity(&hum); |
fishzhang | 25:d7f1e43736cf | 358 | magnetometer->get_m_axes(axes); |
fishzhang | 25:d7f1e43736cf | 359 | |
fishzhang | 25:d7f1e43736cf | 360 | |
fishzhang | 25:d7f1e43736cf | 361 | sprintf(buf,"%0.4d",axes[2]); |
fishzhang | 25:d7f1e43736cf | 362 | message.qos = MQTT::QOS1; |
fishzhang | 25:d7f1e43736cf | 363 | message.retained = false; |
fishzhang | 25:d7f1e43736cf | 364 | message.dup = false; |
fishzhang | 25:d7f1e43736cf | 365 | message.payload = (void*)buf; |
fishzhang | 25:d7f1e43736cf | 366 | message.payloadlen = strlen(buf); |
fishzhang | 25:d7f1e43736cf | 367 | //message.payloadlen = sizeof(temp); |
fishzhang | 25:d7f1e43736cf | 368 | |
fishzhang | 25:d7f1e43736cf | 369 | // LOG("Publishing %s\n\r", buf); |
fishzhang | 25:d7f1e43736cf | 370 | printf("Publishing z %s\n\r", buf); |
fishzhang | 25:d7f1e43736cf | 371 | return client->publish(pubTopic, message); |
fishzhang | 25:d7f1e43736cf | 372 | } |
fishzhang | 25:d7f1e43736cf | 373 | int publish7(MQTT::Client<MQTTWiFi, Countdown, MQTT_MAX_PACKET_SIZE>* client, MQTTWiFi* ipstack) |
fishzhang | 25:d7f1e43736cf | 374 | { |
fishzhang | 25:d7f1e43736cf | 375 | int32_t axes[3]; |
fishzhang | 25:d7f1e43736cf | 376 | MQTT::Message message; |
fishzhang | 25:d7f1e43736cf | 377 | char* pubTopic = TOPICT_ax; |
fishzhang | 25:d7f1e43736cf | 378 | |
fishzhang | 25:d7f1e43736cf | 379 | char buf[MQTT_MAX_PAYLOAD_SIZE]; |
fishzhang | 25:d7f1e43736cf | 380 | accelerometer->get_x_axes(axes); |
fishzhang | 25:d7f1e43736cf | 381 | sprintf(buf,"%0.4d",axes[0]); |
mapellil | 14:641560b57584 | 382 | message.qos = MQTT::QOS0; |
mapellil | 14:641560b57584 | 383 | message.retained = false; |
mapellil | 14:641560b57584 | 384 | message.dup = false; |
mapellil | 14:641560b57584 | 385 | message.payload = (void*)buf; |
mapellil | 14:641560b57584 | 386 | message.payloadlen = strlen(buf); |
fishzhang | 25:d7f1e43736cf | 387 | printf("Publishing %s\n\r", buf); |
fishzhang | 25:d7f1e43736cf | 388 | return client->publish(pubTopic, message); |
fishzhang | 25:d7f1e43736cf | 389 | } |
fishzhang | 25:d7f1e43736cf | 390 | int publish8(MQTT::Client<MQTTWiFi, Countdown, MQTT_MAX_PACKET_SIZE>* client, MQTTWiFi* ipstack) |
fishzhang | 25:d7f1e43736cf | 391 | { |
fishzhang | 25:d7f1e43736cf | 392 | int32_t axes[3]; |
fishzhang | 25:d7f1e43736cf | 393 | MQTT::Message message; |
fishzhang | 25:d7f1e43736cf | 394 | char* pubTopic = TOPICT_ay; |
fishzhang | 25:d7f1e43736cf | 395 | |
fishzhang | 25:d7f1e43736cf | 396 | char buf[MQTT_MAX_PAYLOAD_SIZE]; |
fishzhang | 25:d7f1e43736cf | 397 | accelerometer->get_x_axes(axes); |
fishzhang | 25:d7f1e43736cf | 398 | sprintf(buf,"%0.4d",axes[1]); |
fishzhang | 25:d7f1e43736cf | 399 | message.qos = MQTT::QOS0; |
fishzhang | 25:d7f1e43736cf | 400 | message.retained = false; |
fishzhang | 25:d7f1e43736cf | 401 | message.dup = false; |
fishzhang | 25:d7f1e43736cf | 402 | message.payload = (void*)buf; |
fishzhang | 25:d7f1e43736cf | 403 | message.payloadlen = strlen(buf); |
fishzhang | 25:d7f1e43736cf | 404 | printf("Publishing %s\n\r", buf); |
fishzhang | 25:d7f1e43736cf | 405 | return client->publish(pubTopic, message); |
fishzhang | 25:d7f1e43736cf | 406 | } |
fishzhang | 25:d7f1e43736cf | 407 | int publish9(MQTT::Client<MQTTWiFi, Countdown, MQTT_MAX_PACKET_SIZE>* client, MQTTWiFi* ipstack) |
fishzhang | 25:d7f1e43736cf | 408 | { |
fishzhang | 25:d7f1e43736cf | 409 | int32_t axes[3]; |
fishzhang | 25:d7f1e43736cf | 410 | MQTT::Message message; |
fishzhang | 25:d7f1e43736cf | 411 | char* pubTopic = TOPICT_az; |
fishzhang | 25:d7f1e43736cf | 412 | |
fishzhang | 25:d7f1e43736cf | 413 | char buf[MQTT_MAX_PAYLOAD_SIZE]; |
fishzhang | 25:d7f1e43736cf | 414 | accelerometer->get_x_axes(axes); |
fishzhang | 25:d7f1e43736cf | 415 | sprintf(buf,"%0.4d",axes[2]); |
fishzhang | 25:d7f1e43736cf | 416 | message.qos = MQTT::QOS0; |
fishzhang | 25:d7f1e43736cf | 417 | message.retained = false; |
fishzhang | 25:d7f1e43736cf | 418 | message.dup = false; |
fishzhang | 25:d7f1e43736cf | 419 | message.payload = (void*)buf; |
fishzhang | 25:d7f1e43736cf | 420 | message.payloadlen = strlen(buf); |
fishzhang | 25:d7f1e43736cf | 421 | printf("Publishing %s\n\r", buf); |
fishzhang | 25:d7f1e43736cf | 422 | return client->publish(pubTopic, message); |
fishzhang | 25:d7f1e43736cf | 423 | } |
fishzhang | 25:d7f1e43736cf | 424 | int publish10(MQTT::Client<MQTTWiFi, Countdown, MQTT_MAX_PACKET_SIZE>* client, MQTTWiFi* ipstack) |
fishzhang | 25:d7f1e43736cf | 425 | { |
fishzhang | 25:d7f1e43736cf | 426 | int32_t axes[3]; |
fishzhang | 25:d7f1e43736cf | 427 | MQTT::Message message; |
fishzhang | 25:d7f1e43736cf | 428 | char* pubTopic = TOPICT_bx; |
fishzhang | 25:d7f1e43736cf | 429 | |
fishzhang | 25:d7f1e43736cf | 430 | char buf[MQTT_MAX_PAYLOAD_SIZE]; |
mapellil | 14:641560b57584 | 431 | |
fishzhang | 25:d7f1e43736cf | 432 | acc_gyro->get_x_axes(axes); |
fishzhang | 25:d7f1e43736cf | 433 | sprintf(buf,"%0.4d",axes[0]); |
fishzhang | 25:d7f1e43736cf | 434 | message.qos = MQTT::QOS0; |
fishzhang | 25:d7f1e43736cf | 435 | message.retained = false; |
fishzhang | 25:d7f1e43736cf | 436 | message.dup = false; |
fishzhang | 25:d7f1e43736cf | 437 | message.payload = (void*)buf; |
fishzhang | 25:d7f1e43736cf | 438 | message.payloadlen = strlen(buf); |
fishzhang | 25:d7f1e43736cf | 439 | printf("Publishing %s\n\r", buf); |
fishzhang | 25:d7f1e43736cf | 440 | return client->publish(pubTopic, message); |
fishzhang | 25:d7f1e43736cf | 441 | } |
fishzhang | 25:d7f1e43736cf | 442 | int publish11(MQTT::Client<MQTTWiFi, Countdown, MQTT_MAX_PACKET_SIZE>* client, MQTTWiFi* ipstack) |
fishzhang | 25:d7f1e43736cf | 443 | { |
fishzhang | 25:d7f1e43736cf | 444 | int32_t axes[3]; |
fishzhang | 25:d7f1e43736cf | 445 | MQTT::Message message; |
fishzhang | 25:d7f1e43736cf | 446 | char* pubTopic = TOPICT_by; |
fishzhang | 25:d7f1e43736cf | 447 | |
fishzhang | 25:d7f1e43736cf | 448 | char buf[MQTT_MAX_PAYLOAD_SIZE]; |
fishzhang | 25:d7f1e43736cf | 449 | |
fishzhang | 25:d7f1e43736cf | 450 | acc_gyro->get_x_axes(axes); |
fishzhang | 25:d7f1e43736cf | 451 | sprintf(buf,"%0.4d",axes[1]); |
fishzhang | 25:d7f1e43736cf | 452 | message.qos = MQTT::QOS0; |
fishzhang | 25:d7f1e43736cf | 453 | message.retained = false; |
fishzhang | 25:d7f1e43736cf | 454 | message.dup = false; |
fishzhang | 25:d7f1e43736cf | 455 | message.payload = (void*)buf; |
fishzhang | 25:d7f1e43736cf | 456 | message.payloadlen = strlen(buf); |
fishzhang | 25:d7f1e43736cf | 457 | printf("Publishing %s\n\r", buf); |
fishzhang | 25:d7f1e43736cf | 458 | return client->publish(pubTopic, message); |
fishzhang | 25:d7f1e43736cf | 459 | } |
fishzhang | 25:d7f1e43736cf | 460 | int publish12(MQTT::Client<MQTTWiFi, Countdown, MQTT_MAX_PACKET_SIZE>* client, MQTTWiFi* ipstack) |
fishzhang | 25:d7f1e43736cf | 461 | { |
fishzhang | 25:d7f1e43736cf | 462 | int32_t axes[3]; |
fishzhang | 25:d7f1e43736cf | 463 | MQTT::Message message; |
fishzhang | 25:d7f1e43736cf | 464 | char* pubTopic = TOPICT_bz; |
fishzhang | 25:d7f1e43736cf | 465 | |
fishzhang | 25:d7f1e43736cf | 466 | char buf[MQTT_MAX_PAYLOAD_SIZE]; |
fishzhang | 25:d7f1e43736cf | 467 | |
fishzhang | 25:d7f1e43736cf | 468 | acc_gyro->get_x_axes(axes); |
fishzhang | 25:d7f1e43736cf | 469 | sprintf(buf,"%0.4d",axes[2]); |
fishzhang | 25:d7f1e43736cf | 470 | message.qos = MQTT::QOS0; |
fishzhang | 25:d7f1e43736cf | 471 | message.retained = false; |
fishzhang | 25:d7f1e43736cf | 472 | message.dup = false; |
fishzhang | 25:d7f1e43736cf | 473 | message.payload = (void*)buf; |
fishzhang | 25:d7f1e43736cf | 474 | message.payloadlen = strlen(buf); |
mapellil | 24:a59eb8bdc431 | 475 | printf("Publishing %s\n\r", buf); |
mapellil | 14:641560b57584 | 476 | return client->publish(pubTopic, message); |
mapellil | 14:641560b57584 | 477 | } |
mridup | 4:1ed7f173eec5 | 478 | |
fishzhang | 25:d7f1e43736cf | 479 | |
fabiombed | 13:0b31131bf711 | 480 | int main() |
fabiombed | 13:0b31131bf711 | 481 | { |
fishzhang | 25:d7f1e43736cf | 482 | |
mapellil | 16:233b89a6b72f | 483 | const char * ssid = SSID; // Network must be visible otherwise it can't connect |
mapellil | 16:233b89a6b72f | 484 | const char * seckey = PASSW; |
mapellil | 24:a59eb8bdc431 | 485 | SpwfSAInterface spwf(D8, D2, false); |
mapellil | 14:641560b57584 | 486 | DevI2C *i2c = new DevI2C(I2C_SDA, I2C_SCL); |
mapellil | 14:641560b57584 | 487 | i2c->frequency(400000); |
mapellil | 14:641560b57584 | 488 | |
fishzhang | 25:d7f1e43736cf | 489 | |
fishzhang | 25:d7f1e43736cf | 490 | |
mridup | 4:1ed7f173eec5 | 491 | |
mridup | 6:0d838d564181 | 492 | pc.printf("\r\nX-NUCLEO-IDW01M1 mbed Application\r\n"); |
mapellil | 14:641560b57584 | 493 | pc.printf("\r\nconnecting to AP\r\n"); |
fishzhang | 25:d7f1e43736cf | 494 | |
fishzhang | 25:d7f1e43736cf | 495 | hum_temp->enable(); |
fishzhang | 25:d7f1e43736cf | 496 | press_temp->enable(); |
fishzhang | 25:d7f1e43736cf | 497 | magnetometer->enable(); |
fishzhang | 25:d7f1e43736cf | 498 | accelerometer->enable(); |
fishzhang | 25:d7f1e43736cf | 499 | acc_gyro->enable_x(); |
fishzhang | 25:d7f1e43736cf | 500 | acc_gyro->enable_g(); |
fabiombed | 13:0b31131bf711 | 501 | |
mapellil | 17:83d0cd810ed3 | 502 | quickstartMode=false; |
mapellil | 16:233b89a6b72f | 503 | if (strcmp(org, "quickstart") == 0){quickstartMode = true;} |
mapellil | 16:233b89a6b72f | 504 | MQTTWiFi ipstack(spwf, ssid, seckey, NSAPI_SECURITY_WPA2); |
mapellil | 16:233b89a6b72f | 505 | MQTT::Client<MQTTWiFi, Countdown, MQTT_MAX_PACKET_SIZE> client(ipstack); |
mapellil | 16:233b89a6b72f | 506 | if (quickstartMode){ |
mapellil | 24:a59eb8bdc431 | 507 | char mac[50]; // remove all : from mac |
mapellil | 17:83d0cd810ed3 | 508 | char *digit=NULL; |
mapellil | 17:83d0cd810ed3 | 509 | sprintf (id,"%s", ""); |
mapellil | 14:641560b57584 | 510 | sprintf (mac,"%s",ipstack.getWiFi().get_mac_address()); |
mapellil | 14:641560b57584 | 511 | digit = strtok (mac,":"); |
mapellil | 14:641560b57584 | 512 | while (digit != NULL) |
mapellil | 14:641560b57584 | 513 | { |
mapellil | 14:641560b57584 | 514 | strcat (id, digit); |
mapellil | 14:641560b57584 | 515 | digit = strtok (NULL, ":"); |
mapellil | 24:a59eb8bdc431 | 516 | } |
mapellil | 16:233b89a6b72f | 517 | } |
mapellil | 16:233b89a6b72f | 518 | attemptConnect(&client, &ipstack); |
mapellil | 16:233b89a6b72f | 519 | if (connack_rc == MQTT_NOT_AUTHORIZED || connack_rc == MQTT_BAD_USERNAME_OR_PASSWORD) |
mapellil | 16:233b89a6b72f | 520 | { |
mapellil | 16:233b89a6b72f | 521 | while (true) |
mapellil | 16:233b89a6b72f | 522 | wait(1.0); // Permanent failures - don't retry |
fishzhang | 25:d7f1e43736cf | 523 | } |
fishzhang | 25:d7f1e43736cf | 524 | WatchDog wdg(IWDG_PRESCALER_64, 62500); |
mapellil | 16:233b89a6b72f | 525 | int count = 0; |
mapellil | 16:233b89a6b72f | 526 | // tyeld.start(); |
mapellil | 14:641560b57584 | 527 | while (true) |
fishzhang | 25:d7f1e43736cf | 528 | { |
fishzhang | 25:d7f1e43736cf | 529 | wdg.feed(); |
fishzhang | 25:d7f1e43736cf | 530 | if (++count == 100) |
fishzhang | 25:d7f1e43736cf | 531 | { |
fishzhang | 25:d7f1e43736cf | 532 | if(subscribe(&client, &ipstack)>30){ |
fishzhang | 25:d7f1e43736cf | 533 | printf("ok \n\r"); |
fishzhang | 25:d7f1e43736cf | 534 | } |
fishzhang | 25:d7f1e43736cf | 535 | publish2(&client, &ipstack); |
fishzhang | 25:d7f1e43736cf | 536 | publish3(&client, &ipstack); |
fishzhang | 25:d7f1e43736cf | 537 | publish4(&client, &ipstack); |
fishzhang | 25:d7f1e43736cf | 538 | publish5(&client, &ipstack); |
fishzhang | 25:d7f1e43736cf | 539 | publish5(&client, &ipstack); |
fishzhang | 25:d7f1e43736cf | 540 | publish7(&client, &ipstack); |
fishzhang | 25:d7f1e43736cf | 541 | publish8(&client, &ipstack); |
fishzhang | 25:d7f1e43736cf | 542 | publish9(&client, &ipstack); |
fishzhang | 25:d7f1e43736cf | 543 | publish10(&client, &ipstack); |
fishzhang | 25:d7f1e43736cf | 544 | publish11(&client, &ipstack); |
fishzhang | 25:d7f1e43736cf | 545 | publish12(&client, &ipstack); |
fishzhang | 25:d7f1e43736cf | 546 | if (publish(&client, &ipstack) != 0) { |
fishzhang | 25:d7f1e43736cf | 547 | attemptConnect(&client, &ipstack); // if we have lost the connection |
fishzhang | 25:d7f1e43736cf | 548 | } |
fishzhang | 25:d7f1e43736cf | 549 | count = 0; |
mapellil | 14:641560b57584 | 550 | } |
fishzhang | 25:d7f1e43736cf | 551 | client.yield(10); |
fishzhang | 25:d7f1e43736cf | 552 | } |
mridup | 4:1ed7f173eec5 | 553 | } |