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
}
}