NTP client app setting system time and X-NUCLEO-IDW01M1 Wi-Fi board time connecting to internet NTP UTC time server.
Dependencies: NTPClient NetworkSocketAPI X_NUCLEO_IDW01M1v2 mbed
Fork of NTPClient_HelloWorld by
Example of retrieval of current time using an NTP server.
Time is then used to perform a TLS secure connection to https://mbed.org.
The application is meant to be used with mbed OS 2 ("Classic") only (no mbedOS 5 support).
main.cpp@4:11f2b556765b, 2017-01-02 (annotated)
- Committer:
- mapellil
- Date:
- Mon Jan 02 15:46:54 2017 +0000
- Revision:
- 4:11f2b556765b
- Parent:
- 3:ca8860f482e0
- Child:
- 5:88cece84fb6e
Added secure socket connection example exploiting NTP client. Updated libraries.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
donatien | 0:0e0debc29569 | 1 | #include "mbed.h" |
mapellil | 3:ca8860f482e0 | 2 | #include "SpwfInterface.h" |
donatien | 2:bf7dc5f5bca9 | 3 | #include "NTPClient.h" |
mapellil | 4:11f2b556765b | 4 | #include "TCPSocket.h" |
mapellil | 4:11f2b556765b | 5 | |
mapellil | 4:11f2b556765b | 6 | //www.amazon.it certificate in PEM format |
mapellil | 4:11f2b556765b | 7 | char cert []="-----BEGIN CERTIFICATE-----\r\n" |
mapellil | 4:11f2b556765b | 8 | "MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB\r\n" |
mapellil | 4:11f2b556765b | 9 | "yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL\r\n" |
mapellil | 4:11f2b556765b | 10 | "ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp\r\n" |
mapellil | 4:11f2b556765b | 11 | "U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW\r\n" |
mapellil | 4:11f2b556765b | 12 | "ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0\r\n" |
mapellil | 4:11f2b556765b | 13 | "aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL\r\n" |
mapellil | 4:11f2b556765b | 14 | "MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW\r\n" |
mapellil | 4:11f2b556765b | 15 | "ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln\r\n" |
mapellil | 4:11f2b556765b | 16 | "biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp\r\n" |
mapellil | 4:11f2b556765b | 17 | "U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y\r\n" |
mapellil | 4:11f2b556765b | 18 | "aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1\r\n" |
mapellil | 4:11f2b556765b | 19 | "nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex\r\n" |
mapellil | 4:11f2b556765b | 20 | "t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz\r\n" |
mapellil | 4:11f2b556765b | 21 | "SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG\r\n" |
mapellil | 4:11f2b556765b | 22 | "BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+\r\n" |
mapellil | 4:11f2b556765b | 23 | "rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/\r\n" |
mapellil | 4:11f2b556765b | 24 | "NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E\r\n" |
mapellil | 4:11f2b556765b | 25 | "BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH\r\n" |
mapellil | 4:11f2b556765b | 26 | "BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy\r\n" |
mapellil | 4:11f2b556765b | 27 | "aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv\r\n" |
mapellil | 4:11f2b556765b | 28 | "MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE\r\n" |
mapellil | 4:11f2b556765b | 29 | "p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y\r\n" |
mapellil | 4:11f2b556765b | 30 | "5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK\r\n" |
mapellil | 4:11f2b556765b | 31 | "WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ\r\n" |
mapellil | 4:11f2b556765b | 32 | "4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N\r\n" |
mapellil | 4:11f2b556765b | 33 | "hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq\r\n" |
mapellil | 4:11f2b556765b | 34 | "-----END CERTIFICATE-----\r\n"; |
mapellil | 4:11f2b556765b | 35 | |
mapellil | 4:11f2b556765b | 36 | SpwfSAInterface spwf(D8, D2, false); // Wifi interface |
donatien | 0:0e0debc29569 | 37 | |
donatien | 0:0e0debc29569 | 38 | int main() |
donatien | 0:0e0debc29569 | 39 | { |
mapellil | 3:ca8860f482e0 | 40 | time_t ctTime; |
mapellil | 3:ca8860f482e0 | 41 | ctTime = time(NULL); |
mapellil | 3:ca8860f482e0 | 42 | |
mapellil | 3:ca8860f482e0 | 43 | printf ("\n\rConnecting to WiFi ...\n\r"); |
mapellil | 4:11f2b556765b | 44 | spwf.connect("crespan","Elfrontal1", NSAPI_SECURITY_WPA2); |
mapellil | 3:ca8860f482e0 | 45 | NTPClient ntp(spwf); |
donatien | 0:0e0debc29569 | 46 | |
mapellil | 3:ca8860f482e0 | 47 | printf("Initial System Time is: %s\r\n", ctime(&ctTime)); |
donatien | 2:bf7dc5f5bca9 | 48 | printf("Trying to update time...\r\n"); |
donatien | 2:bf7dc5f5bca9 | 49 | if (ntp.setTime("0.pool.ntp.org") == 0) |
donatien | 0:0e0debc29569 | 50 | { |
donatien | 2:bf7dc5f5bca9 | 51 | printf("Set time successfully\r\n"); |
donatien | 2:bf7dc5f5bca9 | 52 | ctTime = time(NULL); |
donatien | 2:bf7dc5f5bca9 | 53 | printf("Time is set to (UTC): %s\r\n", ctime(&ctTime)); |
mapellil | 4:11f2b556765b | 54 | if (!spwf.set_time(ctTime)) printf ("ERROR set_time\n\r"); |
mapellil | 4:11f2b556765b | 55 | if (!spwf.clean_TLS_certificate(ALL)) printf ("ERROR clean_TLS_certificate\n\r"); |
mapellil | 4:11f2b556765b | 56 | if (!spwf.set_TLS_certificate(cert, sizeof(cert), FLASH_CA_ROOT_CERT)) printf ("ERROR set_TLS_certificate\n\r"); |
mapellil | 4:11f2b556765b | 57 | if (!spwf.set_TLS_SRV_domain("www.amazon.it",FLASH_DOMAIN)) printf ("ERROR set_TLS_CA_domain\n\r"); |
mapellil | 4:11f2b556765b | 58 | // NOTE: DNS requires UDP socket. DNS is invoked while connecting a secure socket to resolve URL to IP, |
mapellil | 4:11f2b556765b | 59 | // so DNS doesnt answer as it requires unsecure UDP socket connection. |
mapellil | 4:11f2b556765b | 60 | // workaroud: convert URL to IP quering DNS before secure socket creation, then connect |
mapellil | 4:11f2b556765b | 61 | // the secure socket created to the retrieved IP. |
mapellil | 4:11f2b556765b | 62 | SocketAddress addr(&spwf, "www.amazon.it"); |
mapellil | 4:11f2b556765b | 63 | const char *ip=addr.get_ip_address(); |
mapellil | 4:11f2b556765b | 64 | printf ("www.amazon.it resolved to: %s\n\r", ip); |
mapellil | 4:11f2b556765b | 65 | spwf.set_secure_sockets(); |
mapellil | 4:11f2b556765b | 66 | TCPSocket socket(&spwf); |
mapellil | 4:11f2b556765b | 67 | int err = socket.connect(ip,443); |
mapellil | 4:11f2b556765b | 68 | if (err != 0 )printf ("ERROR opening %d\n\r", err); |
mapellil | 4:11f2b556765b | 69 | else printf ("--->>> Secure socket CONNECTED to: %s\n\r", ip); |
mapellil | 4:11f2b556765b | 70 | spwf.set_unsecure_sockets(); |
mapellil | 4:11f2b556765b | 71 | socket.close(); |
mapellil | 4:11f2b556765b | 72 | printf ("Socket closed\n\r"); |
mapellil | 4:11f2b556765b | 73 | } |
donatien | 0:0e0debc29569 | 74 | else |
donatien | 0:0e0debc29569 | 75 | { |
mapellil | 4:11f2b556765b | 76 | printf("Error: NTP could not contact server\r\n"); |
mapellil | 3:ca8860f482e0 | 77 | } |
mapellil | 3:ca8860f482e0 | 78 | spwf.disconnect(); |
mapellil | 4:11f2b556765b | 79 | printf ("WIFI disconnected, exiting ...\n\r"); |
donatien | 0:0e0debc29569 | 80 | } |