This is an old revision of the document!
Datele colectate de la senzorii wireless pot fi agregate la nivel de gateway și trimise spre vizualizare și procesare pe o platformă din Cloud. Există o serie de asftel de servicii disponibile, cum ar fi DeviceHub, ThingSpeak, SmartLiving, NimBits, Xively, etc.
Pentru această lucrare de laborator vom folosi AllThingsTalk pentru a agrega datele de la mai multe noduri Sparrow, apoi vom folosi API-ul AllThingsTalk pentru a controla nodurile senzoriale.
Pentru a avea acces la resurse, trebuie să vă creați mai întâi un cont pe platformă. După înregistrare și crearea contului, selectați Devices→Connect a device și alegeți Your own din listă. Dați-i numele Sparrow. Din butonul Settings→Authentication rețineți Device ID și Device Token care îl vor identifica unic pe platformă.
Pentru început, atașați un senzor nou dispozitivului vostru cu New Asset. Denumiți-l Temperature, tipul senzorului ar trebui să fie Number.
AllThingsTalk pune la dispoziție un API prin care diverse platforme IoT se pot conecta direct la server-ul din cloud. Din cauză că nodurile Sparrow nu au posibilitatea de a se conecta la WiFi sau Ethernet, vom folosi un PC pe post de client AllThingsTalk. Nodul Sparrow va trimite datele prin interfața serială către PC, iar acesta va rula un mic program scris în Python pentru a parsa datele primite și a le trimite AllThingsTalk.
Pentru aceasta, trebuie să vă instalați Python 3.x pe mașina voastră și biblioteca allthingstalk, care se poate face rapid din linia de comandă folosind utilitarul pip3:
> sudo pip3 install allthingstalk
Vom scrie un mic program Python pentru a trimite date în contul nostru de DeviceHub. Folosiți drept referință exemplul de mai jos, în care treubie să completați datele contului vostru:
from devicehub import Sensor, Device, Project from time import sleep from random import randint PROJECT_ID = 'your project ID' DEVICE_UUID = 'your Device UUID' API_KEY = 'your API KEY' AN_SENSOR_NAME = 'Temperature' #make sure your sensor has the same name on DeviceHub! def analog_input(dev, sensor): value = randint(0, 1023) sensor.addValue(value) dev.send() print value return project = Project(PROJECT_ID, ssl_verify=False) device = Device(project, DEVICE_UUID, API_KEY) AN1 = Sensor(Sensor.ANALOG, AN_SENSOR_NAME) device.addSensor(AN1) while True: analog_input(device, AN1) sleep(5.0)
Pentru a trimite date reale, trebuie să programăm nodurile senzoriale să trimită valoarea temperaturii pe interfața serială, pentru a fi citită mai apoi de către programul Python.
În Python, folosiți următorul exemplu pentru a deschide o conexiune serială cu placa Sparrow și a citi datele:
from time import sleep import serial # Make sure you have the correct port and baud rate selected # For Windows, use COMx instead of ttyUSB ser=serial.Serial('/dev/ttyUSB0', 9600) while True: line = ser.readline() print line sleep(1.0)
Putem să trimitem și comenzi din interfața DeviceHub. Pentru aceasta, trebuie să ne întoarcem în interfața web și să adaugăm un actuator device-ului nostru. Denumiți actuatorul LED și alegeți sa fie de tip Digital.
Rulați următorul exemplu Python pentru a citi starea actuatorului vostru din DeviceHub.
from devicehub import Sensor, Actuator, Device, Project from time import sleep PROJECT_ID = 'your project ID' DEVICE_UUID = 'your Device UUID' API_KEY = 'your API KEY' AN_SENSOR_NAME = 'LED' #make sure your actuator has the same name on DeviceHub! def act1_callback(payload): """ :param payload: mqtt payload message """ print ACT1.state project = Project(PROJECT_ID) device = Device(project, DEVICE_UUID, API_KEY) ACT1 = Actuator(Actuator.DIGITAL, ACTUATOR_NAME1) device.addActuator(ACT1, act1_callback) try: while True: pass except KeyboardInterrupt: print 'Goodbye!'
În mod similar, puteți să adăugați un actuator cu input analogic din interfața web DeviceHub. Denumiți-l RED. Folosiți următorul exemplu de cod pentru a-l testa:
from devicehub import Sensor, Actuator, Device, Project from time import sleep PROJECT_ID = 'your project ID' DEVICE_UUID = 'your Device UUID' API_KEY = 'your API KEY' AN_SENSOR_NAME = 'RED' #make sure your actuator has the same name on DeviceHub! def act1_callback(payload): """ :param payload: mqtt payload message """ print ACT1.state project = Project(PROJECT_ID) device = Device(project, DEVICE_UUID, API_KEY) ACT1 = Actuator(Actuator.ANALOG, ACTUATOR_NAME1) device.addActuator(ACT1, act1_callback) try: while True: pass except KeyboardInterrupt: print 'Goodbye!'