Demo application for using the AT&T IoT Starter Kit Powered by AWS.

Dependencies:   SDFileSystem

Fork of ATT_AWS_IoT_demo by Anthony Phillips

IoT Starter Kit Powered by AWS Demo

This program demonstrates the AT&T IoT Starter Kit sending data directly into AWS IoT. It's explained and used in the Getting Started with the IoT Starter Kit Powered by AWS on starterkit.att.com.

What's required

  • AT&T IoT LTE Add-on (also known as the Cellular Shield)
  • NXP K64F - for programming
  • microSD card - used to store your AWS security credentials
  • AWS account
  • Python, locally installed

If you don't already have an IoT Starter Kit, you can purchase a kit here. The IoT Starter Kit Powered by AWS includes the LTE cellular shield, K64F, and a microSD card.

Committer:
ampembeng
Date:
Thu Dec 15 18:05:09 2016 +0000
Revision:
23:b9ff83dc965f
Parent:
18:6370da1de572
Child:
24:224c07ec3bd0
Added an alternate demo that publishes JSON data to a topic instead of using the device shadow.  The topic (rule) is intended to be used along with DynamoDB and S3 (a static website).

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ampembeng 15:6f2798e45099 1 /*
ampembeng 15:6f2798e45099 2 * Copyright 2010-2015 Amazon.com, Inc. or its affiliates. All Rights Reserved.
ampembeng 15:6f2798e45099 3 *
ampembeng 15:6f2798e45099 4 * Licensed under the Apache License, Version 2.0 (the "License").
ampembeng 15:6f2798e45099 5 * You may not use this file except in compliance with the License.
ampembeng 15:6f2798e45099 6 * A copy of the License is located at
ampembeng 15:6f2798e45099 7 *
ampembeng 15:6f2798e45099 8 * http://aws.amazon.com/apache2.0
ampembeng 15:6f2798e45099 9 *
ampembeng 15:6f2798e45099 10 * or in the "license" file accompanying this file. This file is distributed
ampembeng 15:6f2798e45099 11 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
ampembeng 15:6f2798e45099 12 * express or implied. See the License for the specific language governing
ampembeng 15:6f2798e45099 13 * permissions and limitations under the License.
ampembeng 15:6f2798e45099 14 */
ampembeng 15:6f2798e45099 15
ampembeng 15:6f2798e45099 16 /**
ampembeng 15:6f2798e45099 17 * @file aws_iot_config.h
ampembeng 15:6f2798e45099 18 * @brief AWS IoT specific configuration file
ampembeng 15:6f2798e45099 19 */
ampembeng 15:6f2798e45099 20
ampembeng 15:6f2798e45099 21 #ifndef SRC_SHADOW_IOT_SHADOW_CONFIG_H_
ampembeng 15:6f2798e45099 22 #define SRC_SHADOW_IOT_SHADOW_CONFIG_H_
ampembeng 15:6f2798e45099 23
ampembeng 18:6370da1de572 24 //=====================================================================================================================
ampembeng 18:6370da1de572 25 //
ampembeng 18:6370da1de572 26 // NOTE: This defines where we pull our cert/config information from. The options are:
ampembeng 18:6370da1de572 27 // a) Hard code MQTT defines below and in certs.cpp
ampembeng 18:6370da1de572 28 // b) Pull certs and MQTT information from SD card.
ampembeng 18:6370da1de572 29 //
ampembeng 18:6370da1de572 30 // Pull information from SD card
ampembeng 23:b9ff83dc965f 31 //#define USING_SD_CARD
ampembeng 18:6370da1de572 32 //=====================================================================================================================
ampembeng 18:6370da1de572 33
ampembeng 15:6f2798e45099 34 // =================================================
ampembeng 18:6370da1de572 35 // USER ENTERED VALUES (only used when not using SD card)
ampembeng 15:6f2798e45099 36 #define AWS_IOT_MQTT_HOST "TODO" ///< Customer specific MQTT HOST. The same will be used for Thing Shadow
ampembeng 18:6370da1de572 37 #define AWS_IOT_MQTT_PORT 8883 ///< default port for MQTT/S
ampembeng 15:6f2798e45099 38 #define AWS_IOT_MQTT_CLIENT_ID "TODO" ///< MQTT client ID should be unique for every device
ampembeng 15:6f2798e45099 39 #define AWS_IOT_MY_THING_NAME "TODO" ///< Thing Name of the Shadow this device is associated with
ampembeng 23:b9ff83dc965f 40 #define AWS_IOT_MY_TOPIC "TODO/%s" ///< Topic name to publish to (used with alternate demo)
ampembeng 15:6f2798e45099 41
ampembeng 23:b9ff83dc965f 42 //#ifdef USING_SD_CARD // These files are only valid when SD card is being used
ampembeng 18:6370da1de572 43 // Example format for mqtt_config.txt:
ampembeng 18:6370da1de572 44 /*
ampembeng 18:6370da1de572 45 AWS_IOT_MQTT_HOST=1234asdf.iot.us-west-2.amazonaws.com
ampembeng 18:6370da1de572 46 AWS_IOT_MQTT_PORT=8883
ampembeng 18:6370da1de572 47 AWS_IOT_MQTT_CLIENT_ID=MyThingName
ampembeng 18:6370da1de572 48 WS_IOT_MY_THING_NAME=MyThingName
ampembeng 18:6370da1de572 49 */
ampembeng 18:6370da1de572 50 #define AWS_MQTT_CONFIG_FILENAME "/sd/certs/mqtt_config.txt" ///< Contains the info for the four defines above
ampembeng 18:6370da1de572 51 #define AWS_IOT_ROOT_CA_FILENAME "/sd/certs/rootCA-certificate.crt" ///< Root CA file name
ampembeng 18:6370da1de572 52 #define AWS_IOT_CERTIFICATE_FILENAME "/sd/certs/certificate.pem.crt" ///< device signed certificate file name
ampembeng 18:6370da1de572 53 #define AWS_IOT_PRIVATE_KEY_FILENAME "/sd/certs/private.pem.key" ///< Device private key filename
ampembeng 23:b9ff83dc965f 54 //#endif
ampembeng 15:6f2798e45099 55 // =================================================
ampembeng 15:6f2798e45099 56
ampembeng 15:6f2798e45099 57 // MQTT PubSub
ampembeng 15:6f2798e45099 58 #define AWS_IOT_MQTT_TX_BUF_LEN 512 ///< Any time a message is sent out through the MQTT layer. The message is copied into this buffer anytime a publish is done. This will also be used in the case of Thing Shadow
ampembeng 15:6f2798e45099 59 #define AWS_IOT_MQTT_RX_BUF_LEN 512 ///< Any message that comes into the device should be less than this buffer size. If a received message is bigger than this buffer size the message will be dropped.
ampembeng 15:6f2798e45099 60 #define AWS_IOT_MQTT_NUM_SUBSCRIBE_HANDLERS 5 ///< Maximum number of topic filters the MQTT client can handle at any given time. This should be increased appropriately when using Thing Shadow
ampembeng 15:6f2798e45099 61
ampembeng 15:6f2798e45099 62 // Thing Shadow specific configs
ampembeng 15:6f2798e45099 63 #define SHADOW_MAX_SIZE_OF_RX_BUFFER AWS_IOT_MQTT_RX_BUF_LEN+1 ///< Maximum size of the SHADOW buffer to store the received Shadow message
ampembeng 15:6f2798e45099 64 #define MAX_SIZE_OF_UNIQUE_CLIENT_ID_BYTES 80 ///< Maximum size of the Unique Client Id. For More info on the Client Id refer \ref response "Acknowledgments"
ampembeng 15:6f2798e45099 65 #define MAX_SIZE_CLIENT_ID_WITH_SEQUENCE MAX_SIZE_OF_UNIQUE_CLIENT_ID_BYTES + 10 ///< This is size of the extra sequence number that will be appended to the Unique client Id
ampembeng 15:6f2798e45099 66 #define MAX_SIZE_CLIENT_TOKEN_CLIENT_SEQUENCE MAX_SIZE_CLIENT_ID_WITH_SEQUENCE + 20 ///< This is size of the the total clientToken key and value pair in the JSON
ampembeng 15:6f2798e45099 67 #define MAX_ACKS_TO_COMEIN_AT_ANY_GIVEN_TIME 10 ///< At Any given time we will wait for this many responses. This will correlate to the rate at which the shadow actions are requested
ampembeng 15:6f2798e45099 68 #define MAX_THINGNAME_HANDLED_AT_ANY_GIVEN_TIME 10 ///< We could perform shadow action on any thing Name and this is maximum Thing Names we can act on at any given time
ampembeng 15:6f2798e45099 69 #define MAX_JSON_TOKEN_EXPECTED 120 ///< These are the max tokens that is expected to be in the Shadow JSON document. Include the metadata that gets published
ampembeng 15:6f2798e45099 70 #define MAX_SHADOW_TOPIC_LENGTH_WITHOUT_THINGNAME 60 ///< All shadow actions have to be published or subscribed to a topic which is of the format $aws/things/{thingName}/shadow/update/accepted. This refers to the size of the topic without the Thing Name
ampembeng 15:6f2798e45099 71 #define MAX_SIZE_OF_THING_NAME 20 ///< The Thing Name should not be bigger than this value. Modify this if the Thing Name needs to be bigger
ampembeng 15:6f2798e45099 72 #define MAX_SHADOW_TOPIC_LENGTH_BYTES MAX_SHADOW_TOPIC_LENGTH_WITHOUT_THINGNAME + MAX_SIZE_OF_THING_NAME ///< This size includes the length of topic with Thing Name
ampembeng 15:6f2798e45099 73
ampembeng 15:6f2798e45099 74 // Auto Reconnect specific config
ampembeng 15:6f2798e45099 75 #define AWS_IOT_MQTT_MIN_RECONNECT_WAIT_INTERVAL 1000 ///< Minimum time before the First reconnect attempt is made as part of the exponential back-off algorithm
ampembeng 15:6f2798e45099 76 #define AWS_IOT_MQTT_MAX_RECONNECT_WAIT_INTERVAL 8000 ///< Maximum time interval after which exponential back-off will stop attempting to reconnect.
ampembeng 15:6f2798e45099 77
ampembeng 15:6f2798e45099 78 // Links to our certs from certs.cpp
ampembeng 15:6f2798e45099 79 extern const unsigned char AWS_IOT_ROOT_CA[];
ampembeng 15:6f2798e45099 80 extern const unsigned char AWS_IOT_CERTIFICATE[];
ampembeng 15:6f2798e45099 81 extern const unsigned char AWS_IOT_PRIVATE_KEY[];
ampembeng 15:6f2798e45099 82
ampembeng 15:6f2798e45099 83 #endif /* SRC_SHADOW_IOT_SHADOW_CONFIG_H_ */
ampembeng 15:6f2798e45099 84
ampembeng 15:6f2798e45099 85