Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: X_NUCLEO_IKS01A1 mbed FP MQTTPacket DnsQuery ATParser
Revision 1:042ca9148926, committed 2017-10-19
- Comitter:
- PavelSavyhin
- Date:
- Thu Oct 19 11:36:41 2017 +0000
- Parent:
- 0:4cdaf9b1e7d0
- Commit message:
- Connection times are optimized and logging is extended.
Changed in this revision
--- a/MQTT/MQTTSocket.h Wed Sep 27 14:40:52 2017 +0300 +++ b/MQTT/MQTTSocket.h Thu Oct 19 11:36:41 2017 +0000 @@ -23,6 +23,7 @@ int getNTPtime(int timeout=1000) { int err; + int attempts = 0; uint8_t timedata[4]; @@ -34,6 +35,9 @@ if (err != 0) { LOG("ERROR resolving ntp server IP and connecting to it! \r\n"); + attempts++; + if (attempts == 3) + return err; } } while (err != 0);
--- a/NetworkSocketAPI/NetworkStack.cpp Wed Sep 27 14:40:52 2017 +0300 +++ b/NetworkSocketAPI/NetworkStack.cpp Thu Oct 19 11:36:41 2017 +0000 @@ -20,8 +20,14 @@ int NetworkStack::gethostbyname(SocketAddress *address, const char *name) { char buffer[NSAPI_IP_SIZE]; - int err = dnsQuery(this, name, buffer); - if (err) { + UDPSocket sock(this); + + sock.set_timeout(3000); + + int err = dnsQuery(&sock, name, buffer); + + if (err) + { return err; }
--- a/X_NUCLEO_IDW01M1v2/SPWF01SA/SPWFSA01.cpp Wed Sep 27 14:40:52 2017 +0300 +++ b/X_NUCLEO_IDW01M1v2/SPWF01SA/SPWFSA01.cpp Thu Oct 19 11:36:41 2017 +0000 @@ -19,7 +19,7 @@ #include "stdint.h" #define SPWFSA01_CONNECT_TIMEOUT 15000 -#define SPWFSA01_SEND_TIMEOUT 500 +#define SPWFSA01_SEND_TIMEOUT 5000 #define SPWFSA01_RECV_TIMEOUT 1500//some commands like AT&F/W takes some time to get the result back! #define SPWFSA01_MISC_TIMEOUT 500 #define SPWFSA01_SOCKQ_TIMEOUT 3000
--- a/X_NUCLEO_IDW01M1v2/SPWF01SA/SPWFSA01.h Wed Sep 27 14:40:52 2017 +0300 +++ b/X_NUCLEO_IDW01M1v2/SPWF01SA/SPWFSA01.h Thu Oct 19 11:36:41 2017 +0000 @@ -149,6 +149,9 @@ * Checks if data can be written */ bool writeable(); + + /** Sets debug mode */ + inline void set_debug(bool state) { dbg_on = state;_parser.debugOn(state);}; private: BufferedSerial _serial;
--- a/X_NUCLEO_IDW01M1v2/SpwfInterface.h Wed Sep 27 14:40:52 2017 +0300 +++ b/X_NUCLEO_IDW01M1v2/SpwfInterface.h Thu Oct 19 11:36:41 2017 +0000 @@ -66,6 +66,7 @@ virtual const char *get_mac_address(); void debug(const char * string); inline bool reset_chip() {return _spwf.hw_reset();}; + inline void set_debug(bool state) {_spwf.set_debug(state); }; //Implementation of NetworkStack virtual const char *get_ip_address();
--- a/main.cpp Wed Sep 27 14:40:52 2017 +0300 +++ b/main.cpp Thu Oct 19 11:36:41 2017 +0000 @@ -41,7 +41,7 @@ #define MQTT_MAX_PACKET_SIZE 350 #define MQTT_MAX_PAYLOAD_SIZE 300 -#define AWS_IOT_MQTT_HOST "xxxxxxxxxx.iot.us-east-1.amazonaws.com" //Use your own host. +#define AWS_IOT_MQTT_HOST "a3t8vwpkw3sltg.iot.us-east-2.amazonaws.com" //Use your own host. #define AWS_IOT_MQTT_PORT 8883 #define AWS_IOT_MQTT_CLIENT_ID "Nucleo" //Should be kept if you are using same device clent. #define AWS_IOT_MY_THING_NAME "Nucleo" //Should be kept if you are using same device thing name. @@ -109,23 +109,22 @@ //This Client cert is example. Use own instead. const uint8_t clientCRT[] = "\ -----BEGIN CERTIFICATE-----\n\ -MIIDBjCCAe6gAwIBAgIUVph856omeIxW3UPioq+UrX1DbwowDQYJKoZIhvcNAQEL\ -BQAwTTFLMEkGA1UECwxCQW1hem9uIFdlYiBTZXJ2aWNlcyBPPUFtYXpvbi5jb20g\ -SW5jLiBMPVNlYXR0bGUgU1Q9V2FzaGluZ3RvbiBDPVVTMB4XDTE3MDUyNTExNTEy\ -OVoXDEQ5MTIzMEIzNTk1OVowgZUxCzAJBgNVBAETAkJZMQ4wDAYDVQQIDAVNaW5z\ -azEOMAwGA1UEBwwFTWluc2sxFzAVBgNVBAoMDktsaWthLVRlY2ggTExDMRcwFQYD\ -VQQLDA5LbGlrYS1UZWNoIExMQzEMMAoGA1UEAwwDUm5EMSYwJAYJKoZIhvcNAQkB\ -FhdtdmF0YExldUBrbGlrYS10ZWNoLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEH\ -A0IABCJgOQJmoTBJVPfEi9Hm/JVixaxkY5rtlgrYO3hSl633A2hg0P/ue0wXDbF3\ -aQ0X57IRFE4k4FEbr3UXjT/IczKjYDBeMB8GA1UdIwQYMBaAFK3YzTUPlYB2Li75\ -i/z8rEogr1d6MB0GA1UdDgQWBBT18HXBaXFJuER/0SwegnxJ+pyJ6TAMBgNVHRMB\ -Af8EAjAAMA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG9w0BAQsFAAOCAQEAb0Ux1aH5\ -RLxjrfGqXN6rPVqh8QQRS+AyBfzmaQN8HaPZMkX5WxXLvcn0A3uWlwQxPPkcZ4zf\ -51GHtFFQWB4YZ8dx8mUQ0v/j7onHjCJgZ8iDgwOyKMGtnsDEWCakQw+a6cj+NrMZ\ -tzhjwCzEEP6EPcbXwErI5OOzLuWns2L/JEr2wWNkokgRuS8ewr/SQ9OLWIWa2rFM\ -ahPNTb3y/qBeWdjeJmhI+TOxdqIpsF8roWP25zwo/zkzCHCjXFBrL+0CA4MpxIl9\ -x02i7aAhlJ6ys80lDxdeWeeQJXRKkGknP8mcmKn3iEqqJ5s1dQePj2b5d3ldatya\ -wsxQBqqZXzIWEw==\ +MIIC8jCCAdqgAwIBAgIVAJrIfpHLnCshC2j/Tp0dBJlSgaFnMA0GCSqGSIb3DQEB\ +CwUAME0xSzBJBgNVBAsMQkFtYXpvbiBXZWIgU2VydmljZXMgTz1BbWF6b24uY29t\ +IEluYy4gTD1TZWF0dGxlIFNUPVdhc2hpbmd0b24gQz1VUzAeFw0xNzA5MTUxMjQ3\ +NDBaFw00OTEyMzEyMzU5NTlaMIGAMQswCQYDVQQGEwJERTENMAsGA1UECBMERGVt\ +bzENMAsGA1UEBxMERGVtbzENMAsGA1UEChMERGVtbzENMAsGA1UECxMERGVtbzEN\ +MAsGA1UEAxMERGVtbzEmMCQGCSqGSIb3DQEJARYXcHNhdnloaW5Aa2xpa2EtdGVj\ +aC5jb20wWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAT5IihA21BQZFW0vSdVxNuD\ +VKXAN7rI3Op3/MiWOlXqHEGHZeYs5ug8qEYkDZDkafhO87LNC0xhNSnGsNnNmyPI\ +o2AwXjAfBgNVHSMEGDAWgBRF1n2grhwmYjwSZmF74bVqm/enfjAdBgNVHQ4EFgQU\ +qSNNYMI1XGRMnnLenZlU1h/WNAkwDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMC\ +B4AwDQYJKoZIhvcNAQELBQADggEBADTAhidWjd+MD6sLqr8+ZTdIcka0kT0tnMGy\ +Chz5ixaDpNI/OS9fi+SfOAd1Dd+/panpNtvJ5OfN0wkYJRd+lhBaN8M5lWsIF7EM\ +FvFtc+UV2cvGyYmSW47fFaV3DOv8vL068cmpNkd/HF8q9r0QNd0h2o97G99Xkk9k\ +90DIOgzu0C3sSTy5xDankCvfWIM2ibh5Laz3NmIqVW9jnnkMpQ00xViR8IdnfR4g\ +ke1C33ZQh1yTGNEE94nVGRMB2cPY62ChrM/ffgmUo4De0M45tX8ucFVL+ZwaCc3E\ +pmjMxFza6yZU50a74zZESmWGR5HYp0PSovglr9Xc5jvktqSugKM=\ \n\ -----END CERTIFICATE-----\n"; @@ -144,12 +143,12 @@ //This Client Key is example. Use own instead. const uint8_t clientKey[] ="\ -----BEGIN EC PARAMETERS-----\n\ -BggqhEEOPQMBEw==\ +BggqhkjOPQMBBw==\ -----END EC PARAMETERS-----\n\ -----BEGIN EC PRIVATE KEY-----\n\ -MHcCAQEEIHPRfWSC8/k/BsqDWKuP15dXsI9fGwpkTIsLZe6mIrAEoAoGCCqGSM49\ -AwEHoUQDQEAEImAEAEahMElU9+WL0eb8lWLFrGRjmu2WCtg7eFKXrfcDaGDQ/+57\ -TBcNsXdpDRfnshEETiTgURuvdReNP8hEMg==\ +MHcCAQEEIByuPtqukIClJ35+FA0gdvlMs7FmSFiOJGpaYsyQs4wwoAoGCCqGSM49\ +AwEHoUQDQgAE+SIoQNtQUGRVtL0nVcTbg1SlwDe6yNzqd/zIljpV6hxBh2XmLObo\ +PKhGJA2Q5Gn4TvOyzQtMYTUpxrDZzZsjyA==\ -----END EC PRIVATE KEY-----\n"; int connack_rc = 0; // MQTT connack return code @@ -201,7 +200,7 @@ if (rc != 0) { - ERROR("Get NTP time error: %d\n", rc); + WARN("Get NTP time error: %d\n", rc); return rc; } @@ -209,7 +208,7 @@ if (rc != 0) { - ERROR("Set security params error: %d\n", rc); + WARN("Set security params error: %d\n", rc); return rc; } @@ -217,7 +216,7 @@ if (rc != 0) { - WARN("IP Stack connect returned: %d\n", rc); + WARN("IP Stack connect returned: %d\n\r", rc); return rc; } @@ -263,12 +262,12 @@ } int timeout = getConnTimeout(++retryAttempt); - WARN("Retry attempt number %d waiting %d\n", retryAttempt, timeout); + WARN("Retry attempt number %d waiting %d\n\r", retryAttempt, timeout); // if ipstack and client were on the heap we could deconstruct and goto a label where they are constructed // or maybe just add the proper members to do this disconnect and call attemptConnect(...) // this works - reset the system when the retry count gets to a threshold - if (retryAttempt == 5) + if (retryAttempt == 2) { ipstack->getWiFi().reset_chip(); NVIC_SystemReset(); @@ -295,11 +294,7 @@ magnetic_sensor->Get_M_Axes(magnet); gyro_sensor->Get_G_Axes(gyro); accel_sensor->Get_X_Axes(accel); - - /*sprintf(buf, - "{\"d\":{\"ST\":\"Nucleo-IoT-mbed\",\"Temp\":%0.4f,\"Pressure\":%0.4f,\"Humidity\":%0.4f}}", - temp, press, hum);*/ - + if (!myButtonPressed) { butled = 1; @@ -339,7 +334,7 @@ pc.baud(115200); - SpwfSAInterface spwf(D8, D2, false); + SpwfSAInterface spwf(D8, D2, true); myled=0; DevI2C *i2c = new DevI2C(I2C_SDA, I2C_SCL); @@ -355,14 +350,23 @@ gyro_sensor = mems_expansion_board->GetGyroscope(); accel_sensor = mems_expansion_board->GetAccelerometer(); + // Due to bug in mbed this workaround is needed to avoid Nucleo hang up when lsm6ds3 is absent + if (mems_expansion_board->gyro_lsm6ds3 == NULL) + { + NVIC_DisableIRQ(EXTI4_IRQn); + NVIC_ClearPendingIRQ(EXTI4_IRQn); + } + pc.printf("\r\nX-NUCLEO-IDW01M1 mbed Application\r\n"); pc.printf("\r\nconnecting to AP\r\n"); MQTTWiFi ipstack(spwf, ssid, seckey, NSAPI_SECURITY_WPA2); LOG("Connected to WiFI.\r\n"); + + spwf.set_debug(false); - MQTT::Client<MQTTWiFi, Countdown, MQTT_MAX_PACKET_SIZE> client(ipstack); + MQTT::Client<MQTTWiFi, Countdown, MQTT_MAX_PACKET_SIZE> client(ipstack, 5000); attemptConnect(&client, &ipstack); @@ -378,7 +382,7 @@ while (true) { - if (++count == 100) + if (++count == 1) { myled = 0; // Publish a message every second @@ -394,6 +398,6 @@ count = 0; } - client.yield(10); // allow the MQTT client to receive messages + client.yield(1000); // allow the MQTT client to receive messages } }