This project shows you how to take the ESP8266 module and connect it directly to AWS IOT using Mongoose OS. Mongoose OS is an open source operating system for microcontrollers that emphasizes cloud connectivity. It was developed by Cesanta, a Dublin-based embedded software company and at the end of the project, you should be able to measure the temperature and the humidity values from the DHT11 temperature sensor and publish it on the AWS IOT platform
For this project, we’ll need:
An ESP8266-based NodeMCU board
DHT 11 temperature sensor
The Mongoose OS flashing tool
A USB cable to connect the NodeMCU board to computer
AWS account that you intend to use
Step 1: An ESP8266-based NodeMCU Board
The ESP8266 is the name of a micro controller designed by Espressif Systems. The ESP8266 itself is a self-contained Wi Fi networking solution offering as a bridge from existing micro controller to Wi Fi and is also capable of running self-contained applications. This module comes with a built in USB connector and a rich assortment of pin-outs. With a micro USB cable, you can connect NodeMCU devkit to your laptop and flash it without any trouble, just like Arduino
• Voltage: 3.3V.
• Wi-Fi Direct (P2P), soft-AP.
• Current consumption: 10uA~170mA.
• Flash memory attachable: 16MB max (512K normal).
• Integrated TCP/IP protocol stack.
• Processor: Tensilica L106 32-bit.
• Processor speed: 80~160MHz.
• RAM: 32K + 80K.
• GPIOs: 17 (multiplexed with other functions).
• Analog to Digital: 1 input with 1024 step resolution.
• +19.5dBm output power in 802.11b mode
• 802.11 support: b/g/n.
• Maximum concurrent TCP connections: 5
Step 2: Pin Diagram
Step 3: DHT11 - Humidity and Temperature Sensor
The DHT11 is a basic, low-cost digital temperature and humidity sensor. It uses a capacitive humidity sensor and a thermistor to measure the surrounding air, and spits out a digital signal on the data pin (no analog input pins needed).It’s fairly simple to use, but requires careful timing to grab data. The only real downside of this sensor is you can only get new data from it once every 2 seconds
Full range temperature compensated
Relative humidity and temperature measurement
Calibrated digital signal
Outstanding long-term stability
Extra components not needed
Long transmission distance
Low power consumption
Communication Process (Single-Wire Two-Way)
The interesting thing in this module is the protocol that uses to transfer data. All the sensor readings are sent using a single wire bus which reduces the cost and extends the distance. In order to send data over a bus you have to describe the way the data will be transferred, so that transmitter and receiver can understand what says each other. This is what a protocol does. It describes the way the data are transmitted. On DHT-11 the 1-wire data bus is pulled up with a resistor to VCC. So if nothing is occurred the voltage on the bus is equal to VCC.
Communication Format can be separated into three stages
3) Data Reading
Step 4: Introduction to Mongoose OS
Mongoose OS Flashing tool
Flashing tool is used to flash the Mongoose OS in ESP8266 .First, get one of the supported boards, like the ESP8266 NodeMCU, and connect it to your computer, then follow these steps:
Navigate to the Mongoose OS download web page and download the Mos tool. (But in this Project, we are going to use the older version of Mongoose OS)
Run the Mos (Mongoose OS) setup file and follow the setup wizard:
Step 5: The Mongoose Setup Wizard
Step 6: Device Status - Online
After completing the three steps, you will get the message in given below and the Device status becomes online. Now our ESP8266 Module is able to communicate with any remote devices
Step 7: Provision Device on AWS IOT
Before we can send events to AWS we need to be able to make a secure connection to AWS IOT. In order to do so we need to provision the ESP with the AWS certificates. In the Mongoose OS setup wizard choose the Device Config menu then Choose the appropriate AWS region and the AWS policy for your AWS environment. Click the Provision with AWS IOT button. The device will be set-up with the correct information to connect to the AWS service. The certificates will be installed automatically.
User can select the appropriate AWS region and AWS policy.In our scenario,we selected AWS region as ap-southeast-1 and AWS policy as mos-default
After the completion of the provision device on AWS IOT, now the esp8266 Wi-Fi module can be able to communicate with AWS -IOT
Step 8: Loading the Sample Code Into NodeMCU Board
After you run the Mongoose setup wizard, if you click the device files menu, there is a file called init.js.Inside that file there is sample code .If you click the Save +Reboot button, the sample code will be loaded and the output can be viewed from the Device Logs
Step 9: Getting Started With AWS Account
What is AWS?
Amazon Web Services (AWS) is a cloud service provider from Amazon, which provides services in the form of building blocks, these building blocks can be used to create and deploy any type of application in the cloud. These services or building blocks are designed to work with each other, and result in applications which are sophisticated and highly scalable.
How to setup?
There are two ways to set up AWS services
Using AWS CLI command line utility
Using AWS GUI
Step 10: AWS CLI Command Line Utility (Optional)
First we need to install AWS CLI. AWS CLI is a command line tool that provides commands for interacting with AWS services. It enables you to use the functionality provided by the AWS Management Console from the terminal. Mongoose uses this tool to Provision the IOT device on AWS IOT. The AWS CLI needs your credentials to be able to connect to AWS. To setup run aws configure from the command line and enter your access information(your credentials). In simple words, you can access and manage Amazon Web Services through a simple and intuitive web-based user interface. If your concern is accessing some of the features using mobile phone, then AWS Console mobile app lets you quickly view resources on the go.
Step 11: Amazon Web Services ( GUI )
After provision with AWS, we can log into the AWS management console, under the services tab we have different categories. Before we start exploring the features of this console, you need to create an account on AWS. For people who do not have an account can visit AWS website and create a free account. You must enter your credit/debit card details. AWS would not charge you during your free subscription as long as you use the services as per the specified limits.
Step 12: AWS IOT Core
After the log in, you will be directed to the following page and under the Internet of things select the IOT core
Step 13: AWS IOT - Monitor
Once you select the IOT core the above page will appear then select the test menu
Step 14: AWS IOT - Subscriptions
After selecting the Test menu you will be directed to Subscriptions .In the subscription topic specify the appropriate topic that you are using and click the Subscribe to topic button
Step 15: Publishing the Default Message
After that you will be directed to the above page. If you click Publish to topic, we will have the sample message which will be displayed here by default
If you want to write a new code and load into NodeMCU board (The code that we write should be loaded in the device file manager > init.js file then you should include the topic name in the code. After including the topic name, you have to use the same topic name in the subscriptions section in order to be publish the output
Step 16: Publishing the Button Pressed Information
Step 17: Publish the Temperature and Humidity Values to the AWS IOT Platform
Step 18: Task
Connect the circuit as shown below
Flash the mongoose OS on the ESP8266 module
Provision device on AWS IOT
Load the programming code into the NodeMCU board
Check the output in the device logs (see figure 9)
Log into the AWS account
Select the IOT core sub menu
Select the Test option from the MQTT client section
Specify the appropriate topic in the subscriptions
Click the publish to topic button
Make sure that whenever you press the flash button you are getting the temperature, humidity values as messages