Note: this article has been archived and it is not longer updated. Instructions may not be totally up to date.
Looking for something simple? This tutorial is very complete and contains a lot of detail. If you want something quick and simple, try one of these:
This page contains technical information to help you get familiar with Azure IoT using the Azure IoT Starter Kit - Adafruit Feather Huzzah ESP8266 (Arduino-compatible). You will find two tutorials that will walk you through different scenarios: the first tutorial will show you how to connect your Azure IoT Starter kit to our Remote Monitoring preconfigured solution from Azure IoT Suite. In the second tutorial, you will leverage Azure IoT services to create your own IoT architecture.
You can choose to start with whichever tutorial you want to. If you've never worked with Azure IoT services before, we encourage you to start with the Remote Monitoring solution tutorial, because all of the Azure services will be provisioned for you in a built-in preconfigured solution. Then you can explore how each of the services work by going through the second tutorial.
We hope you enjoy the process. Please provide feedback if there's anything that we can improve.
Don't have a kit yet?: Click here
This tutorial describes the process of taking your Adafruit Feather Huzzah ESP8266 kit, and using it to develop a temperature, humidity and pressure reader that can communicate with the cloud using the Microsoft Azure IoT SDK.
In this tutorial, you'll be doing the following:
Note: Column on the left corresponds to sensor and on the Right to board. On the image, the board is place between 10 and 30, with the RST pin connected to row 30, and sensor between 1 and 9, with the VDD pin connected to the row 1.
Start | End | Connector |
---|---|---|
Huzzah RST (Pin 30i) | Huzzah CHPD (Pin 15i) | Huzzah ESP8266 |
DHT22 (Pin 1J) | DHT22 (Pin 4J) | DHT22 |
Pin 2I | Pin 1F | 10k Ohm Resistor |
Start | End | Cable Color |
---|---|---|
VDD (Pin 1G) | Pin 29J | Red cable |
DATA (Pin 2G) | Pin 17B | White cable |
GND (Pin 4G) | Pin 27J | Black cable |
At the end of your work, your Adafruit Feather Huzzah ESP8266 should be connected with a working sensor.
Note: For first time users, click here to get your Azure free trial which gives you $200 of credit to get started.
select
button in the Remote Monitoring option
Note: You may be asked to log back in. This is to ensure your solution has proper permissions associated with your account.
device ID
. In this case we’ll use _“Huzzah_wDHT22”, and then click Check ID
IMPORTANT NOTE: Write down your device ID
, Device Key
, and IoT Hub Hostname
to enter into the code you’ll run on your device later
Make sure your device displays in the devices section. The device status is Pending until the device establishes a connection to the remote monitoring solution.
In this step, we will be using the Arduino IDE. If you have not downloaded the IDE, please download it from the Arduino website.
You will need to install the Adafruit Feather Huzzah ESP8266 board extension for the Arduino IDE. In our steps below, we will be following the same instructions as in this link, which you can also use for troubleshooting. After going through the following steps, you should have a working sample with a blinking light on your board.
Open the Arduino IDE and go to File -> Preferences
Go to the field titled "Additional Boards Manager URLs:"
and type http://arduino.esp8266.com/stable/package_esp8266com_index.json
Click on Tools -> Board -> Boards Manager
Search for esp8266
, left click on the result titled esp8266 by ESP8266 Community
and click on install
After the board is installed select Tools -> Board -> Adafruit HUZZAH ESP8266
Set the CPU frequency to 80MHz by clicking on Tools -> CPU Frequency -> 80MHz
Set the upload speed to 115200 by clicking on Tools -> Upload Speed -> 115200
Set the COM port by clicking on Tools -> Port -> COMx
. If you see multiple COM ports, then you will have to experiment, in order to find the one that corresponds to your device. One way to do that is to disconnect your device, check the list of COM ports, reconnect the device and then find which port was not there before.
In order to verify that you've set the correct COM port, you can click on Tools -> Get Board Info
. If you see the message "Native serial port, can't obtain port info", then you have not selected the correct port. You can change the COM port using the step above and retry this step, until you see a message similar to:
If you run into any connection issues, unplug the board, hold the reset button, and while still holding it, plug the board back in. This will flash to board to try again.
For this project, we'll also need the following libraries:
To install these libraries, click on the Sketch -> Include Library -> Manage Libraries
.
Search for each of these libraries using the box in the upper-right to filter your search, click on the found library, and click the "Install" button.
If you have any problems while installing the libraries, you can find more instructions here.
Note: Starting on version 1.0.17, AzureIoTHub
required the AzureIoTUtility
and one of the available protocols. These samples use the AzureIoTProtocol_MQTT
, but it is prepared to work with AzureIoTProtocol_HTTP
too.
remote_monitoring
directory and double-click the file remote_monitoring.ino
to open the project in the Arduino IDE.iot_configs.h
, look for the following lines of code:#define IOT_CONFIG_WIFI_SSID "<Your WiFi network SSID or name>"
#define IOT_CONFIG_WIFI_PASSWORD "<Your WiFi network WPA password or WEP key>"
If you cannot find this data, then you can go to your Remote Monitoring Solution in Azure IoT Suite, click on Devices and then select your device. Check the device properties section at the right part of the page for the DEVICEID, HOSTNAME and Authentication Keys (bottom right of the page). Click on "View Authentication keys" and copy "KEY 1" as your deviceKey.
#define IOT_CONFIG_CONNECTION_STRING "HostName=<host_name>.azure-devices.net;DeviceId=<device_id>;SharedAccessKey=<device_key>"
Control-s
If your code is correct and all libraries was properly installed, you will receive something like the following message in the IDE.
Sketch uses 376,409 bytes (36%) of program storage space. Maximum is 1,044,464 bytes.
Global variables use 50,220 bytes (61%) of dynamic memory, leaving 31,700 bytes for
local variables. Maximum is 81,920 bytes.
While the code is being downloaded, there should be a blue blinking LED on your Adafruit Feather Huzzah ESP8266.
After the deployment is done and you see 100% in the output console, then go to Tools -> Serial Monitor in the Arduino IDE to watch the live data being sent. After 15 seconds you should see a measurements update.
Note: When first starting you will likely see a “Fetching NTP epoch time failed” error – This is normal, and it trying to sync with Azure. This can take even up to 30 seconds to find a NTP server to sync with. One it is synced, it should start transmitting from there.
Warning: The Remote Monitoring solution provisions a set of Azure IoT Services in your Azure account. It is meant to reflect a real enterprise architecture and thus its Azure consumption is quite heavy.
To avoid unnecessary Azure consumption, you can delete, stop or downsize your Azure IoT Suite. We recommend you delete the preconfigured solution in azureiotsuite.com once you are done with your work (since it is easy to recreate).
If you want to read additional information about the Azure IoT Suite, you can go the following websites:
Go to https://www.azureiotsuite.com, click on your existing solution (not on the "Launch" button) and then click the red button Delete Solution
in the right pane
In the Microsoft Azure Portal
Alternatively, if you want to keep it up and running you can do two things to reduce consumption:
1) Visit this guide to run the solution in demo mode and reduce the Azure consumption.
2) Disable the simulated devices created with the solution (Go to Devices>>Select the device>> on the device details menu on the right, clich on Disable Device. Repeat with all the simulated devices).
Please visit our Azure IoT Dev Center for more samples and documentation on Azure IoT.
This tutorial describes the process of taking your Microsoft Azure IoT Starter Kit for the Adafruit Feather Huzzah ESP8266, and using it to develop a temperature and humidity reader that can communicate with the cloud using the Microsoft Azure IoT SDK.
This tutorial has the following steps:
Here is a breakdown of the data flow:
The end result will be a functional command center where you can view the history of your device's sensor data, a history of alerts, and send commands back to the device.
Note: Column on the left corresponds to sensor and on the Right to board. On the image, the board is place between 10 and 30 and sensor between 1 and 9. Additionally, when counting the - pins, start from the right and count in, as these do not align with the numbers indicated on the board.
Note: The resistor can change a little from one kit to another, e.g. it can be 330 Ohm (orange, orange, brown) or 560 Ohm (green, blue, brown). Both will work with success.
Start | End | Connector |
---|---|---|
Huzzah RST (Pin 30i) | Huzzah CHPD (Pin 15i) | Huzzah ESP8266 |
DHT22 (Pin 1J) | DHT22 (Pin 4J) | DHT22 |
NULL (Pin 2I) | Pin 1F | 10k Ohm Resistor |
Pin 2- | Pin 2A | 330 Ohm Resistor |
Pin 4- | Pin 5A | 330 Ohm Resistor |
GRN LED (Pin 2C) | Pin 3C | Green LED |
RED LED (Pin 5C) | Pin 6C | Red LED |
Start | End | Cable Color | Connected to |
---|---|---|---|
VDD (Pin 1G) | Pin 29J | Red cable | DHT22 |
DATA (Pin 2G) | Pin 17B | White cable | DHT22 |
GND (Pin 4G) | Pin 9- | Black cable | DHT22 |
GND (Pin 27J) | Pin 25- | Black cable | Huzzah ESP8266 |
Pin 22B | Pin 6A | Red cable | Red LED |
Pin 21B | Pin 3A | Green cable | Green LED |
At the end of your work, your Adafruit Feather Huzzah ESP8266 should be connected with a working sensor.
Event Hub is an Azure IoT publish-subscribe service that can ingest millions of events per second and stream them into multiple applications, services or devices.
Your choice
(we chose Huzzah2Suite
)Basic
Your choice
Your choice
Your choice
Huzzah2Suite
Event Hub Namespace (or pick any other name that you used)huzzahEventHub
huzzahEventHub
eventhub and go in the Configure tab in the Shared Access Policies section, add a new policy:
readwrite
Send, Listen
readwrite
policy you created.Now we will create a service to store our data in the cloud.
Your choice
(we chose huzzahstorage
)Classic
Standard
Read-access geo-redundant storage (RA-GRS)
Your choice
Your choice
Your choice
Stream Analytics is an Azure IoT service that streams and analyzes data in the cloud. We'll use it to process data coming from your device.
Log on to the Microsoft Azure Portal
In the menu, click New, then click Internet of Things, and then click Stream Analytics Job
Enter a name for the job (We chose “HuzzahStorageJob”), a preferred region, then choose your subscription. At this stage you are also offered to create a new or to use an existing resource group. Choose the resource group you created earlier.
Once the job is created, open your Job’s blade or click on the pinned tile, and find the section titled “Job Topology” and click the Inputs tile. In the Inputs blade, click on Add
Enter the following settings:
TempSensors
Data Stream
IoT Hub
Huzzah2Suite
(use the name for the IoT Hub you create before)iothubowner
iothubowner
primary key can be found in your IoT Hub Settings -> Shared access policiesJSON
UTF-8
Back to the Stream Analytics Job blade, click on the Query tile (next to the Inputs tile). In the Query settings blade, type in the below query and click Save:
SELECT
DeviceId,
EventTime,
MTemperature as TemperatureReading
INTO
TemperatureTableStorage
from TempSensors
WHERE
DeviceId is not null
and EventTime is not null
SELECT
DeviceId,
EventTime,
MTemperature as TemperatureReading
INTO
TemperatureAlertToEventHub
FROM
TempSensors
WHERE MTemperature>25
Note: You can change the 25
to 0
when you're ready to generate alerts to look at. This number represents the temperature in degrees celsius to check for when creating alerts. 25 degrees celsius is 77 degrees fahrenheit.
TemperatureTableStorage
Table Storage
Provide table settings storage manually
huzzahstorage
(The storage account you created earlier)TemperatureRecords
(Your choice - If the table doesn’t already exist, Local Storage will create it)DeviceId
EventTime
1
TemperatureAlertToEventHub
Event Hub
Provide table settings storage manually
Huzzah2Suite
huzzaheventhub
(The Event Hub you made earlier)readwrite
Primary Key for readwrite Policy name
(That's the one you wrote down after creating the event hub)0
JSON
UTF-8
Line separated
Note: Make sure to stop your Command Center jobs once you have when you take a break or finish to avoid unnecessary Azure consumption! (See: Troubleshooting)
sudo apt-get update
sudo apt-get install nodejs
sudo apt-get install npm
git clone https://github.com/Azure-Samples/iot-hub-c-huzzah-getstartedkit.git
command_center_node
folder in your command prompt (cd <path to locally cloned repro>/command_center_node
) and install the required modules by running the following:npm install -g bower
npm install
bower install
Open the config.json
file and replace the information with your project. See the following for instructions on how to retrieve those values.
TemperatureRecords
{
"port": "3000",
"eventHubName": "event-hub-name",
"ehConnString": "Endpoint=sb://name.servicebus.windows.net/;SharedAccessKeyName=readwrite;SharedAccessKey=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa=",
"deviceConnString": "HostName=name.azure-devices.net;DeviceId=device-id;SharedAccessKey=aaaaaaaaaaaaaaaaaaaaaa=="
"iotHubConnString": "HostName=iot-hub-name.azure-devices.net;SharedAccessKeyName=service;SharedAccessKey=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa=",
"storageAcountName": "aaaaaaaaaaa",
"storageAccountKey": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa==",
"storageTable": "TemperatureRecords"
}
node server.js
app running on http://localhost:3000
client connected
To deploy this project to the cloud using Azure, you can reference Creating a Node.js web app in Azure App Service.
Next, we will update your device so that it can interact with all the things you just created.
You will need to install the Adafruit Feather Huzzah ESP8266 board extension for the Arduino IDE:
For this project, we'll also need the the following libraries:
To install them, click on the Sketch -> Include Library -> Manage Libraries
. Search for each library using the box in the upper-right to filter your search, click on the found library, and click the "Install" button.
The Adafruit Unified Sensor library is also needed. This can be downloaded here. Instructions for manually installing a library can be found here.
command_center.ino
to open the project in the Arduino IDE.static const char ssid[] = "[Your WiFi network SSID or name]";
static const char pass[] = "[Your WiFi network WPA password or WEP key]";
static const char* connectionString = "[Device Connection String]";
Replace the placeholders with your WiFi name (SSID), WiFi password, and the device connection string you created at the beginning of this tutorial.
Save with Control-s
In the same project, click on the command_center.c
tab to see that file.
Look for the following lines of code:
static const char DeviceId[] = "[Device Name]";
static const char connectionString[] = "[Device Connection String]";
Control-s
Note: As of 1.6.8, the Arduino IDE doesn't properly show "Upload Completed", even when it succeeds.
Head back to your Node application and you will have a fully functional command center, complete with a history of sensor data, alerts that display when the temperature got outside a certain range, and commands that you can send to your device remotely.
Note: Make sure to stop your Command Center jobs once you have when you finish to avoid unnecessary Azure consumption! (See: Troubleshooting)
Please visit our Azure IoT Dev Center for more samples and documentation on Azure IoT.
In this section we will explain how to see the data flowing from the Arduino application to the Node.js application: