Create Your First IoT Application by Connecting Arduino to FAVORIOT Platform

May 1st, 2017 Posted by BLOG, IOT PLATFORM 0 thoughts on “Create Your First IoT Application by Connecting Arduino to FAVORIOT Platform”

Check out the COMPLETE Tutorial How to connect an Arduino to FAVORIOT Platform. You can also download a STEP-by-STEP Tutorial –  TUTORIAL – Cytron Uno with FAVORIOT Platform (59 downloads)

arduino-1128227_1920.jpg

Arduino-to-FAVORIOT Tutorial

code to send data to FAVORIOT platform from Arduino

/*
    This sketch sends streams to FAVORIOT Platform using Ethernet shield
*/
#include <SPI.h>
#include <Ethernet.h>

const int ON = 1;    // Constant to indicate that lights are on
const int OFF = 2;  // Constant to indicate that lights are off
const String APIKEY = "YOUR API KEY HERE"; // Replace with your FAVORIOT apikey
const String DEVICE = "YOUR DEVICE HERE"; // Replace with the id_developer of your device

// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = {  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

// Your IP Address
IPAddress ip(192,168,1,16);

// api.favoriot.com IP Address
IPAddress server(182,54,199,106);

EthernetClient client; // Initialize the library instance
int ledPin = 5;        // Led pin number
int LDRPin = 7;        // LDR sensor pin number
String lights = "OFF";       // Current status
String newLights = "OFF";    // New status

// The setup routine runs once when you press reset
void setup() {
  pinMode(ledPin, OUTPUT);        // Initialize the digital pin as an output
  Serial.begin(9600);             // Start serial port
  Serial.println(F("Starting"));
  Ethernet.begin(mac,ip);         // Start the Ethernet connection
  delay(2000);                    // Give the Ethernet shield a second to initialize
}

// The loop routine runs over and over again forever
void loop() {
  int val = analogRead(LDRPin);   // Read the value from the sensor
  Serial.println(val);
  if (val > 990) {  // This is the value limit between day or night with our LDR sensor. Maybe you need adjust this value.
    newLights = OFF;             // Now it's night. We have to turn on the LED
    digitalWrite(ledPin, HIGH);   // Turn the LED on (HIGH is the voltage level)
  }
  else {
    newLights = ON;               // Now it's day. We have to turn off the LED
    digitalWrite(ledPin, LOW);    // Turn the LED off by making the voltage LOW
  }
  if (lights != newLights) {        // Check if we have a change in status
    Serial.println(F("Send Stream"));
    lights = newLights;             // Status update and send stream
    sendStream();
  }
  delay(500);
  // If there's incoming data from the net connection, send it out the serial port
  // This is for debugging purposes only
  while (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  if (!client.connected()) {
      client.stop();
  }
}
// Send stream to FAVORIOT
void sendStream()
{
  String txt = "";          // Text to send
  if ( lights == OFF ) {   // Alarm OFF
     txt = "OFF";
  } else {                  // Alarm ON
     txt = "ON";
  }
  Serial.println(txt);      // For debugging purpose only

  if (client.connect(server, 80)) {   // If there's a successful connection
    Serial.println(F("connected"));
    // Build the data field
    String json = "{\"device_developer_id\":\""+DEVICE+"\",\"data\":{\"Light\":\""+txt+"\"}}";
    // Make a HTTP request
    client.println("POST /v1/streams HTTP/1.1");
    client.println("Host: api.favoriot.com");
    client.println(F("apikey: YOUR API KEY HERE"));
    client.println("Content-Type: application/json");
    client.print("Content-Length: ");
    int thisLength = json.length();
    client.println(thisLength);
    client.println("Connection: close");

    client.println();
    client.println(json);
  }
  else {
    // If you didn't get a connection to the server:
    Serial.println(F("connection failed"));
  }

}




/*
  FAVORIOT Arduino Code for Wi-Fi shield
 */

#include <SPI.h>
#include <WiFi.h>

char ssid[] = "YOUR WI-FI Network SSID"; //  your network SSID (name)
char pass[] = "WI-FI Password";    // your network password (use for WPA, or use as key for WEP)

const String DEVICE = "DEVICE NAME"; // Replace with the id_developer of your device
String txt = "OFF";          // Text to send

int status = WL_IDLE_STATUS;

char server[] = "api.favoriot.com";    //  address for FAVORIOT Platform

WiFiClient client;

void setup() {
  //Initialize serial and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
  // check for the presence of the shield:
  // attempt to connect to Wifi network:
  while (status != WL_CONNECTED) {
    Serial.print("Attempting to connect to SSID: ");
    Serial.println(ssid);
    // Connect to WPA/WPA2 network. Change this line if using open or WEP network:
    status = WiFi.begin(ssid, pass);
    // wait 10 seconds for connection:
    delay(10000);
  }
  Serial.println("Connected to wifi");
}

void loop() {

  // Json Data to send to Platform
  String json = "{\"device_developer_id\":\"YOUR DEVICE HERE\",\"data\":{\"light\":\""+txt+"\"}}";
  Serial.println(json);
  if (client.connect(server, 80)) {
    // Make a HTTP request:
    client.println("POST /v1/streams HTTP/1.1");
    client.println("Host: api.favoriot.com");
    client.println(F("apikey: YOUR API KEY HERE"));
    client.println("Content-Type: application/json");
    client.println("cache-control: no-cache");
    client.print("Content-Length: ");
    int thisLength = json.length();
    client.println(thisLength);
    client.println("Connection: close");

    client.println();
    client.println(json);
  }
  // if there are incoming bytes available
  // from the server, read them and print them:
  while (client.available()) {
    char c = client.read();
    Serial.write(c);
  }
  // if the server's disconnected, stop the client:
  if (!client.connected()) {
    client.stop();
  }
  delay(10000);
}

This section provide tutorials on connecting various arduino device to FAVORIOT IoT. This easy tutorial helps you build a system for turning LED ON and OFF based in the light sensor reading (LDR sensor) and send an email alert. For this, a Arduino able to measure the light is used. In this tutorial you will learn how to:

  • Connect an Arduino to FAVORIOT to send data streams using FAVORIOT HTTP REST API.
  • Build an Notification system on FAVORIOT by writing Event Rule to send an email.

Components used

  • 1 x Arduino Uno.
  • 1 x Ethernet Shield.
  • 1 x Breadboard
  • 1 x Light sensor (LDR)
  • 1 x Resistance. Value of 10 KΩ
  • 1 x Resistance. Value of 220Ω
  • 1 x Led

Arduino is programmed to send a data stream to FAVORIOT depending on the intensity of light.

All the data streams sent by Arduino is stored in FAVORIOT platform.

In addition to storing data, the true power of FAVORIOT is to let you build Apps quickly with a simple rule based on if-else logic. In this scenario, we are going to build a Alert App that sends an email to you in case that Arduino detects the lights are ON or OFF.

The connections in Arduino are extremely simple. Refer to the diagram below.

Screenshot of Example Documentation created with Slate

If you are registered in FAVORIOT, you have a default device already created for you. Go to the right platform on https://platform.favoriot.com and see the device panel to see the devices that are present. Basically, you need the device_developer_id that might be something like defaultDevice@myusername. But if you want, you can create a new device and use it in this example.

Apikey

Now, go to your “account setting” which is available on the top right corner in the dropdown and check your Apikey. It’s a big alphanumeric token like:
“98346673a6377ef1fde2357ebdcb0da582b150b00cabcd5a0d83045425407ab4”.
You need this apikey to complete the example.

From Arduino you have to build a HTTP request and send the data.

HTTP request
POST /streams HTTP/1.1
Host: api.favoriot.com
Accept: application/json
Content-Type: application/json
apiKey: YOUR APIKEY HERE
Content-Length: YOUR CONTENT LENGTH HERE
Connection: close
Data

{ { "device_developer_id": "deviceDefault@FAVORIOT", "data": {"light":"ON"} } }

Alright then now your device must be sending streams when you turn on and turn off the lights.

It’s time to see whether you can view the data on the platform and check if we have new streams. Login to you account on https://platform.favoriot.com and go to data stream tab.

Screenshot of Example Documentation created with Slate

You will see data like this in the data stream tab.

Screenshot of Example Documentation created with Slate

Great! Now as we are receiving data on our platform let’s send an email whenever new data comes. Go to the Rules tab below the data stream tab.

When inside the Rule tab click on Add New Rule button. A form will appear and fill in the details as described:

FieldDetails
Rule NameShort name for rule (.e.g: Light_rule)
DescriptionDescribe what the rule does (.e.g.: sends email when light turn on or off)
Device NameSelect from the dropdown on which you want to create the rule
Data Field for devicethis is optional field and decribe to which data inside the device you are associating the rule.
RuleDescribe the rule here (see more information below)
Thenselect what to do from dropdown (email or sms. More alert channel coming soon.)
Toenter the email or sms here (based in your previous selection in previous step).
Messageenter the short message you want to be attache with alert.

The rule should be described as follows:

(stream.Light === "ON") || (stream.Light === "OFF")

The syntax should be followed while describing the rule. stream. prefix (adding stream.is required) is followed the data field sent by device which is light in this case (the data sent by the device is temperature then you will write stream.temperature). You can multiple rule using || (OR) && (AND) logical operators.

Now, whenever the data comes to the platform the rule will be triggered and alert will be sent.

Congratulations! you have just created an IoT project from scratch. Now go ahead and let your imagination run wild. Show us what great things you can build.

If you are having trouble with connecting your device to our platform please contact us at support@favoriot.com.

FAVORIOT offered a very affordable pricing plan as shown below:

The Beginner Plan is very suitable for University students who have been assigned or chose IoT project as their Final Year Project. A single device such as Raspberry Pi or Arduino that collects from several connected sensors can stream to the IoT platform. A simple dashboard is provided to visualize the measurements. This plan is also suitable for an individual developer or hobbyist that would like to familiarize with IoT platform, conduct self-learning or participate in IoT Hackathons. At RM 8.33 (or less than USD 2.00) per month, you can become the next Generation-IoT and on your way to be one of the rare talents in the job market today!

The Startup Plan is perfect for Freelancers or SMEs or Startups to provide IoT solution for a medium size project up to 150 devices. In fact, they can also create multiple projects or applications but limited to the total number of 150 devices.

The Business Plan is great for developing big commercial IoT project. It can support up to 300 devices for many smart applications.

However, if a company requires connecting thousands of devices, they may contact/email their customized requirements to sales@favoriot.com

screenshot_02.png

CLICK HERE to Subscribe/Request for Quotation.

Check out the COMPLETE Tutorial How to connect an Arduino to FAVORIOT Platform. You can also download a STEP-by-STEP Tutorial –  TUTORIAL – Cytron Uno with FAVORIOT Platform (59 downloads)

Full documentation and technical tutorial – HERE.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Copyright © 2024 All rights reserved