Introduction: PcDuino As Networked Device to Feed Data to Xively (Internet of Things)
Xively (formerly Cosm and before that Pachube (pronounced Patch bay)) is an on-line database service allowing developers to connect sensor-derived data (e.g. energy and environment data from objects, devices & buildings) to the Web and to build their own applications based on that data. It was created in 2007 by architect Usman Haque. Following the nuclear accidents in Japan in 2011, Xively was used by volunteers to interlink Geiger counters across the country to monitor the fallout.
In this post, we will show how to network pcDuino to Xively and feed data to it.
In this post, we will show how to network pcDuino to Xively and feed data to it.
Step 1: Parts List
1 x pcDuino v2
1 x Analog temperature sensor LM35 (part of Advanced Learning Kit for Arduino)
Several Jumper Wires
1 x Plastic mounting plate for pcDuino/Arduino w rubber feet
1 x Breadboard
1 x Analog temperature sensor LM35 (part of Advanced Learning Kit for Arduino)
Several Jumper Wires
1 x Plastic mounting plate for pcDuino/Arduino w rubber feet
1 x Breadboard
Step 2: Wire Diagram
We wire the analog temperature sensor according to the following way:
VCC of LM35 -> 3.3V of pcDuino
GND of LM35 -> Ground of pcDuino
Output of LM35 -> A5 of pcDuino
The whole setup is shown below:
VCC of LM35 -> 3.3V of pcDuino
GND of LM35 -> Ground of pcDuino
Output of LM35 -> A5 of pcDuino
The whole setup is shown below:
Step 3: Install Software Package
We will use Python to develop the project. First, we will need to install the tools:
1. Install Python
$ sudo apt-get install python-dev
2. Install python-pip (python-pip is a package that can be used to install and manage python software)
$ sudo apt-get install python-pippip
3. Install xively extension:
$sudo pip install xively-python
The Python library for pcDuino can be downloaded from github at: https://github.com/pcduino/python-pcduino using the following command:
$git clone https://github.com/pcduino/python-pcduino
1. Install Python
$ sudo apt-get install python-dev
2. Install python-pip (python-pip is a package that can be used to install and manage python software)
$ sudo apt-get install python-pippip
3. Install xively extension:
$sudo pip install xively-python
The Python library for pcDuino can be downloaded from github at: https://github.com/pcduino/python-pcduino using the following command:
$git clone https://github.com/pcduino/python-pcduino
Step 4: Register at Xively
We need to register at xively.com for a free Developer account.
Step 5: Pyhton Code
The python code can be downloaded at: https://github.com/pcduino/python-pcduino/blob/master/Samples/adc_test/xively-temp.py
# part of the python code is copied from page 82 of Getting Started with BeagleBone, by Matt Richardson
# Jingfeng Liu
# LinkSprite.com/pcDuino.com
from adc import analog_read
import time
import datetime
import xively
from requests import HTTPError
api =xively.XivelyAPIClient("APIKEY")
feed=api.feeds.get(FEEDID)
def delay(ms):
time.sleep(1.0*ms/1000)
def setup():
print "read channel ADC0 value ,the V-REF = 3.3V"
delay(3000)
def loop():
while True:
value = analog_read(5)
temp = value*(3.3/4096*100)
print ("value = %4d"%value)
print ("temperature = %4.3f V" %temp)
now=datetime.datetime.utcnow()
feed.datastreams=[ xively.Datastream(id='office_temp', current_value=temp, at=now)
]
try:
feed.update()
print "Value pushed to Xively: " + str(temp)
except HTTPError as e:
print "Error connecting to Xively: " + str (e)
time.sleep(20)
def main():
setup()
loop()
main()
To run the code:
$python sively-temp.py
We can see the data posted at xively.com webpage:
# part of the python code is copied from page 82 of Getting Started with BeagleBone, by Matt Richardson
# Jingfeng Liu
# LinkSprite.com/pcDuino.com
from adc import analog_read
import time
import datetime
import xively
from requests import HTTPError
api =xively.XivelyAPIClient("APIKEY")
feed=api.feeds.get(FEEDID)
def delay(ms):
time.sleep(1.0*ms/1000)
def setup():
print "read channel ADC0 value ,the V-REF = 3.3V"
delay(3000)
def loop():
while True:
value = analog_read(5)
temp = value*(3.3/4096*100)
print ("value = %4d"%value)
print ("temperature = %4.3f V" %temp)
now=datetime.datetime.utcnow()
feed.datastreams=[ xively.Datastream(id='office_temp', current_value=temp, at=now)
]
try:
feed.update()
print "Value pushed to Xively: " + str(temp)
except HTTPError as e:
print "Error connecting to Xively: " + str (e)
time.sleep(20)
def main():
setup()
loop()
main()
To run the code:
$python sively-temp.py
We can see the data posted at xively.com webpage: