When developing IoT applications,enterprises need to integrate several different components for launching a service – cellular connectivity to connect the devices,security,message brokering,firmware updates,data management and analysis, and applicationlogic.Amazon Web Services (AWS) have become a standard for developing IoT applications because all components are offered as easy-to-integrate services that provide fast time-to-market, supported by a scalable, reliable backend. This article describes howa NB-IoT / CAT-M device withEMnifyIoT SIMs can be integrated in AWS IoTCore and is accompanied by an example of using a dash button.
What is AWS IoT Core?
AWS IoT Core is a management platform for IoT devices that uses MQTT (a pub/sub protocol) orWebsockets. Itprovides the entry point for IoT devices to the AWS domain,so that other services can be integrated; such as:
RunningLambdafunctions based on dataoccurrenceor content
Service and infrastructuremonitoring inCloudWatch
Storing data inDynamoDB
Using IOT Analyticsfor real-time surveillance
To demonstrate the integration of devices enabled with EMnify SIMs into the AWS IoT Core, weusedaCAT-M/ NB-IoTprototype device which connects via mobile networks to trigger AWS Lambda functions whenever the user presses a button.
Before setting up network communication, we have to first configure hardware and device settings. In this case, we use the STM32 discovery pack by ST Microelectronics. This kit includes a development board and a Quectel BG96 modem with an embedded EMnify SIM card. The modem supports connectivity via LTE CAT-M1, LTE CAT-NB1 (NB-IoT) and EGPRS (2G)1.
For communication with AWS IoT Core, the device has to connect to a mobile network. Using Espruino simplifies this step as libraries for modem communication are included and compatible with the Quectel BG96. The Espruino documentation contains examples for communicating with the BG96 and other Quectel modem modules.
One noteworthy step in this process is the configuration of APN settings. This is a common device configuration step but also a potential stumbling block when getting started. When using EMnify SIMs to connect, the APN should be setto “em” while the username and password inputs should be blank (or set to empty values).
AWS IoT Core Configuration
In AWS IoT Core, physical devices are represented as ‘Things’ that can be managed via a GUI. In order to have our device registered and managed in the GUI, create a ‘Thing’ by logging in to AWS, navigate to IoT Core and, under “Manage -> Things”, click Create.
After choosing a name, you will be asked to add a certificate to the device, which is necessary for establishing a TLS encrypted connection to AWS IoT Core. The simplest way to get a certificate is by choosing “One-click certificate creation”. This generates a certificate, a public key and a private key for the device; all of which need to be downloaded.
Finally, the device needs a policy within the AWS IoT Core with the necessary permissions to communicate with the AWS MQTT Message Broker by establish a TLS-encrypted connection to it. Espruino proves useful again, with libraries for handling TLS and MQTT.The certificate, private key and root CA downloaded from the previous step must then be passed as the options for the TLS session.
Trigger Lambdas at the touch of a button
To have other events triggered on button press, we make use of Espruino’s built-in function setWatch. These ‘watches’ monitor changes in the signal of a pin on development boards (button presses in our case), and execute a callback function2. There are watch functions for each direction that the built-in button can be pressed; when triggered, the device publishes an MQTT message containing the button-press direction.
For testing, IoT Core provides an MQTT client that can be used to:
Publish to topics with dummy data in order to mock the MQTT messages sent by our device
Subscribe to the topic the device is publishing to and verify that messages are visible in the console
After communication between the device and AWS IoT Core is verified, rules should be created in the ‘Act’ tab in the form of SQL queries:
SELECT * FROM 'cpt-1/invoke' WHERE buttonPress = 'up'
Any number of actions can be attached to this clause, but what we are interested in is forwarding the incoming MQTT message to a Lambda function:
When pressing the ‘up’ button, a Lambda functionto turn on or off any remote lights (that isalso managed in AWS IOT Core) will be triggered.Another example would beto senda POST request to the EMnify API with the relevant data for a SIM orderor extending the Quota Limit.All ofthe basics are now in place for acustomizablecloud button using an EMnify SIM and integrated in AWS IoT Core.
IntegratingEMnifyConnectivity and AWS IoT is the first steptoallow data andcellularIoT devices to be managed withscalable, reliable AWS services.While just a prototype, the cloud button is already quite powerful due to the capabilities of triggeringactionson AWS IoT Core from a cellular device. Possible alternatives to calling a Lambda function include inserting data directly into a DynamoDB table, sending SMS notifications or even triggering CloudWatch alarms. Devicesfitted with sensorsused to triggerdifferentactions without the need for user input can also be adapted to fit any use case when empowered with cellular connectivity.
1) Firmware updates and binaries for device testing can be found at the STM32 C2C portal listed on the device packaging. If you cannot establish a connection to the mobile network using this device, you might want to check out the “BG96 Cellular Sweep Configurator” binary package. In areas with no LTE Cat M1 or NB-IoT available,it’s recommended to reflash the device to connect only via EGPRS which solved connectivity problems with this device.
2) More information about how to use this feature can be found in the Espruino documentation on Buttons and setWatch.
Are you searching for the right IoT solutionfor your business?
Check out our Introductory Guide to Wireless Connectivity to make the best decision for your IoT use case.