Tag Archives: Pubnub

How to connect an Arduino to a real-time network in two steps

Arduino is a microcontroller and development environment that can be used, just like Raspberry Pi, to read information from its sensors and control other devices.

Programming on the Arduino is extremely simple, which has led to its widespread use in interactive environments. As with the Raspberry Pi, it’s a great (and low cost) starting point for experimenting with the world of embedded wearables and the Internet of Things.

This blog walks you through the steps to connect an Arduino to the PubNub Data Stream Network. This enables you to connect with a high volume of other devices at a global scale and start sending and receiving data between a wide variety of devices, including other Arduino and Raspberry Pi devices.

PubNub acts as your communication layer for signaling and data transfer between embedded devices. Some of the advantages of using the PubNub Data Stream Network over a custom, open source solution is reliability and speed. PubNub takes care of the backend infrastructure that you’d have to set up otherwise to create a signaling network between Arduino and other connected devices. You can find the Arduino PubNub extensions here. For additional resources, check out the PubNub Arduino documentation page. Arduino

Basics of Connecting the Arduino to The PubNub Data Stream Network

Really, all it takes is two steps to get your Arduino up and running. Follow these steps to get connected:

STEP 1: Connect the Arduino to a monitor, keyboard, mouse and ethernet cable. You’ll also have to sign up for a PubNub account to get your unique keys. PubNub is entirely free in the sandbox tier, which gives you more than enough bandwidth to test and play with your Arduino.

STEP 2: Open a new window and paste the following code.

#include 
#include 
#include "string.h"
#include "iotconnector.h"
 
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
 
char pubkey[] = "demo";char subkey[] = "demo";char channel[] = "iotchannel";char uuid[] = "Arduino";
 
iotbridge arduino;
 
void initialize(){
    Serial.begin(9600);
    Serial.println("Serial set up");
 
    while (!Ethernet.begin(mac)) {
        Serial.println("Ethernet setup error");
        delay(1000);
    }
    Serial.println("Ethernet set up");
}
 
void do_something(String value){
    Serial.println("in the callback");
    Serial.println(value);
   }
void setup()
{
    initialize();
    arduino.init( pubkey, subkey, uuid);
}
 
void loop()
{
    String returnmessage;
    Ethernet.maintain();

    //Publish
    arduino.send(channel,""Hey There"");
 
    //Subscribe
    returnmessage = arduino.connect(channel);

    //callback function of sorts, to work with the received message
    do_something(returnmessage);
    Serial.println();
}

The above code lets you set the following :

  • publish key using “pubkey”
  • subscribe key using “subkey”
  • UUID using “uuid”
  • channel you wish to subscribe and publish to using “channel”

For all of you who are familiar with Arduino, you will notice that this is in fact only a few additional lines of code in loop(). The remaining code sets up the Ethernet connection to the Arduino. The keys lines of code are just three lines:

  • arduino.init() that lets you initialize variables
  • arduino.send() that lets you send a message over the specified channel
  • arduino.connect() that lets you subscribe to a channel to receive messages

We create an instance of the iotbridge called “arduino” and we can use the SEND and CONNECT methods belonging to that class. SEND: This invokes the publish() API to send any message over a desired channel.

bool iotbridge::send(const char *channel, const char *message){
  EthernetClient *client;
  client = PubNub.publish(channel,message);
  return client;
}

CONNECT: This invokes the subscribe() API to listen for messages from other embedded devices connected to the same channel. NOTE: The call back function receive is invoked when subscribe runs. Connect() will block on subscribe, waiting for a message to be sent to the device. You can write your own simple task scheduler and bounce between tasks according to their timing requirements.

String iotbridge::connect(const char *channel){
  PubSubClient *pclient = PubNub.subscribe(channel);

You can customize the channels you publish/subscribe to, the UUID you assume and also the messages you send by just changing the above fields. And that’s it! You can now talk Arduino to any other device or application subscribing/publishing to the same channel.

IoT’s 7th layer will facilitate scaling and real-time

The spurring growth of the Internet of Things (IoT) has taken rise in business, with a number of startups stemming from the software alley, Maker Movement and crowdfunded space already contributing to the industry. Within idea making and product baking, various origins ferment the constant demand for transparency and community. This reveals strong elements of Conway’s law.

The Internet of Things cannot evolve into what everyone expects it should without the larger open source component. Let’s go back and take a look at Conway’s law.  In perspective of both systems of the individual and organization, we are trying to create and the organization also creates it. Interoperability, integrations and the ability to share across communities hold the vital keys in the system.

An organization looking to build into IoT will need to help mature an open development organization, where we all have the ability to participate in the decisions, code, wiring, funding, and the ramp up of the work. By removing the attachment of intellectual property and changing the dynamics of the development team helps to keep things engaged and promotes the resolve attained by larger communities in moving forward and solving problems.

Partnerships across the breadth of business and enterprise will eventually surface the need to have wider and more comprehensive APIs; these APIs are agile and act as the seamless building blocks for sharing of data and bridging the real-time events into the symphony of various different devices, which can integrate easily into enterprise solutions. The API is the building block and cementing agent for innovative uses of connected devices — the Internet of Things.

For example, partnerships between two companies can quickly enable the creation of smart energy service, opening up opportunities to integrate energy appliances combined with data analytics showing home heating and air conditioning as well as consumer usage. An output like this not only creates added value chain, but also helps unify the customer-centric view for businesses wanting to grow closer with their customers, allowing them choices in their activity and usage.

The connected home market ― even connected consumer devices to energy harvesting ― will all require partnerships between companies, enabling them to deliver a smart energy service that integrates energy devices and appliances with data analytics around air conditioning and home heating systems designed for a device-agnostic platform. The partnership allows pools of expertise (enterprises, startups, or newly-established IoT services) to draw upon energy efficiency algorithms to enhance customers’ home energy use and automation.

Partnerships have already been used to spark and create new services for U.S. households. A growing number of sensors are emerging into the marketplace as well as threading these aggregate sensor results to end-to-end to products/solutions.

PubNub-real-time-IoT

As previously seen on Bits & Pieces, we talk about PubNub. This is a service that is already widely used, distributing traffic to 200 million real-time IoT devices across 14 data centers worldwide, serving 3 millon messages a second all within a ¼ second in latency. That’s close to global real-time one can get with that many tenets/nodes on the cloud. In shear numbers, there are well over 1000s of apps leveraging this solution. In fact, this company has really got big plans for the Internet of Things, as it’s already powering thousands of real-time apps streaming 3 million messages per second to over 100 million devices each month. For example, just take some of their notable customers who are already using their services and technology to scale real-time applications and devices onto their own domain expertise solutions.

Coke_Mirage_Chase_IoT

Coke-Big-Game-VoteApp developers like CBS Outdoor and Coca-Cola are using these integrations with real-time data aggregation transmitted by the sensors to produce some really powerful results. CBS Outdoor integrates sensors on embedded controllers to sync content on real-life digital billboards with online web displays using PubNub. Another IoT integration is found with Coca-Cola enabling friends to chat and annotate live video in real-time on the red carpet at the American Music Awards. The beverage giant has also introduced live voting (“You Decide the Ending”) and IoT experience synchronization using PubNub during their Cokechase.com campaign.

As demonstrated by both Coca-Cola and CBS Outdoor, companies are using/scaling this real-time device connectivity across their services. With their availability of an SDK kits for both Arduino (AVR-based Microcontrollers) and Rasberry Pi, Pubnub is quickly on their way to establishing a hook into the Maker Movement; a class of hackers, crowdfunded makers, creative tinkers, and app coders who can wield the power of this API to help take their ideas from prototype to a product.

cbs-outdoor-iot

This is all done with open code and idea contribution, building a collective number of APIs.

APIs are core to the expansion of IoT. What an inventor needs are the following:

  1. A standard protocol (ie. Restful, CoApp, MQTT, etc)
  2. A set of variables with enough data points to create a sophisticated algorithm that maximizes efficiency or augments information or experience
  3. Arduino SDK (Development and Coding into AVR based Microcontrollers)

nodejs_pubnub_solutionPubnub is enabling their customers to rapidly develop, more importantly, scale real-time applications. Explore solutions to some of these examples they offer ranging from (1) challenges for IoT building, (2) building real-time dashboards to connected devices, (3) bridging devices across networks from lan to wan, (4) connecting the car, and (5) home automation.

Interested in learning more about the Arduino SDK kit? Please visit the PubNub Developer site and then get to IoT exploring. Get ready to jump start the rapid building and connecting of devices for the Internet of Things.