Real-time Arduino-sensorgegevens visualiseren met Johnny-Five en PubNub EON.js

In mijn vorige artikel heb ik je laten zien hoe je een Internet of Things-systeem kunt prototypen met Johnny-Five en PubNub. In die tutorial heb je geleerd hoe je een webgestuurde LED creëert, à la Philips HUE.

Deze keer wil ik je laten zien hoe je gegevens van sensoren die aan een Arduino zijn gekoppeld, kunt lezen en een grafiek op het web kunt plotten!

In deze oefening ga je:

  1. bouw een circuit met een temperatuursensor en lees de waarden van de sensor af
  2. lees de gegevens en breng ze in kaart

voorwaarden

Je hebt een Arduino (Genuino) Uno-board nodig en basiskennis over het instellen van de Arduino voor Johnny-Five. Het is een goed idee om de Arduino instellen sectie in de stapsgewijze zelfstudie, maar u hoeft deze niet te installeren StandardFirmata omdat je deze keer iets anders gaat installeren.

Zorg er ook voor dat Node.js actief is op uw computer.

Eenvoudige en eenvoudige gegevensweergave met EON

Project EON is een open-source JavaScript-framework voor grafieken en mapping, gemaakt door PubNub.

Omdat de grafiek- en grafiekcomponent van EON is gebaseerd op C3.js, een omhulsel voor D3.js, kunt u met EON real-time grafieken maken zonder te weten hoe u de veel gecompliceerdere D3-bibliotheek moet gebruiken.

De basisstappen om de sensorgegevens te visualiseren zijn zo simpel als het volgende:

Publiceer gegevens van een bron:

PUBNUB.publish (channel: 'my-graph', message: 'eon': 'My data 1': 39, 'My data 2': 23); 2. Sluit een grafiek in op internet: eon.chart (channel: 'my-graph', genereer: bindto: '#myGraph');

Ik zal de details van het gebruik van EON doornemen, omdat we hier zowel aan een hardware- als een software-oefening werken. Laten we beginnen!

Bedrading van het circuit met een temperatuursensor

Laten we eerst een circuit voor de temperatuursensor bouwen! De generieke sensor en onderdelen moeten behoorlijk goedkoop zijn.

Hardware die u nodig hebt:

  • 1 Arduino Uno
  • 1 DS18B20 1-draads digitale temperatuursensor
  • 1 weerstand (4,7kΩ)
  • 3 mannelijke / mannelijke springerdraden
  • 1 breadboard

Over de DS18B20 digitale temperatuursensor

Een typische DS18B20 digitale temperatuursensor meet van -55 ° C tot 125 ° C (Celsius) met een nauwkeurigheid van ± 0,5 ° C over een groot deel van het bereik. Een ingebouwde analoog / digitaal-omzetter (ADC) converteert deze analoge temperatuurmeting naar een digitale waarde met maximaal 12 bits precisie.

Laden van Arduino met ConfigurableFirmata

De DS18B20-sensor communiceert via een gepatenteerde 1-draads bus. Wanneer u apparaten met het speciale protocol gebruikt, heeft Johnny-Five de 1-draads specifieke module nodig, die gebruik maakt van de ConfigurableFirmata schetsen.

Dus laten we je Arduino laden met ConfigurableFirmata voor de bedrading van de sensor:

  1. Verbind uw Arduino met uw computer via een USB-kabel.
  2. Ga op Arduino IDE naar Schets> Bibliotheek opnemen> Bibliotheken beheren.
  3. Zoeken naar "ConfigurableFirmata".
  4. Klik op het resultaat, selecteer de nieuwste versie en klik op Installeren.
  5. Ga naar Bestand> Voorbeelden> ConfigurableFirmata.
  6. Upload de code naar het bord.

Een circuit assembleren

Laten we ze nu aansluiten. Het circuit is vrij eenvoudig - zorg ervoor dat je een 4,7kΩ-weerstand gebruikt wanneer je de sensor voedt met de 5V-bron van de Arduino.

De temperatuur van de sensor aflezen

Laten we verder gaan met de software. Het lezen van de digitale waarden van de sensor is supereenvoudig wanneer u Johnny-Five gebruikt.

Zorg ervoor dat Node.js op uw computer is geïnstalleerd. Installeer Johnny-Five in een geschikte dev-directory met behulp van de NPM pakket manager.

$ npm installeer johnny-five

Maak een bestand, temperature.js, en gebruik de onderstaande code om de waarden af ​​te drukken:

var five = require ('johnny-five'); five.Board (). on ('ready', function () var temperature = new five.Thermometer (controller: 'DS18B20', pin: 2); temperature.on ('data', function () console .log (this.celsius + '° C', this.fahrenheit + '° F');););

Voer de code uit vanaf een console met knooppunt temperatuur.js. Zodra het hardwarebord klaar is, ziet u de temperatuurwaarden als volgt op de console afgedrukt:

Laten we nu de gegevens van de temperatuursensor publiceren en de waarden in een grafiek plotten!

De temperatuurgegevens verzenden van de sensor naar PubNub

Eerst moet u de module pubnub Node.js installeren met npm:

$ npm install pubnub

PubNub Data Stream Network (DSN) biedt de wereldwijde infrastructuur en stelt u in staat om real-time apps en IoT-apparaten vrij eenvoudig te bouwen en te schalen. In mijn vorige artikel gebruikte je PubNub om gegevens te ontvangen van een webbrowser, maar deze keer gebruik je PubNub om de sensorgegevens te publiceren die in de browser moeten worden gelezen.

PubNub initialiseren

Nadat u de pubnub-module hebt geïnstalleerd, moet u deze initialiseren met uw API-sleutels.

var pubnub = require ('pubnub') (publication_key: 'pub-c-156a ...', subscribe_key: 'sub-c-f762f ...'); 

Laten we ook een kanaalnaam maken.

var channel = 'temperature-ds18b20';

Wanneer u een grafiek plot, moet u de gepubliceerde gegevens van dezelfde kanaalnaam pakken.

Publiceren van gegevens naar PubNub

Zodra je temperatuurgegevens hebt verzameld over de gegevensgebeurtenis met Johnny-Five die je in het vorige gedeelte van de zelfstudie hebt gemaakt, bewaar de gegevens dan als een variabele, in plaats van alleen console.log.

var temp = 0; temperature.on ('data', function () temp = this.celsius;);

U kunt elk gegevensbestand publiceren in PubNub, maar de sensor kan het evenement te vaak activeren. Dus laten we de gegevens elke drie seconden verzenden.

setInterval (publiceer, 3000);

Gebruik PublicNub in de publiceerfunctie publiceren() methode om de gegevens in object (of JSON) te verzenden.

function publish () var data = 'temperature': temp,; pubnub.publish (channel: channel, message: data,); 

De volledige code voor de Arduino is beschikbaar in deze GitHub-repo.

Een staafdiagram uit de sensorgegevens plotten

Nu vergeet Arduino. U maakt nu een afzonderlijke webpagina om een ​​grafiek te tekenen.

Voeg eerst toe eon.css in je HTML-bestand:

Voeg dan toe pubnub.js:

Maak vervolgens een leeg element met een ID:

Dit is waar de grafiek wordt gegenereerd op uw pagina. Nu moet u PubNub initialiseren, net zoals u deed in de node.js bestand eerder voor Arduino:

var pubnub = PUBNUB.init (publicatienaam: 'pub-c-156a ...', subscribe_key: 'sub-c-f762f ...');

Genereer vervolgens een eenvoudig staafdiagram met behulp van EON's grafiek (), zodra het de gegevens van PubNub ontvangt. U kunt de gegevens ontvangen die zijn verzonden vanaf de temperatuursensor door dezelfde kanaalnaam te gebruiken, temperatuur-DS18B20:

eon.chart (pubnub: pubnub, channel: 'temperature-ds18b20', genereert: bindto: '#chart', transform: function (m) return eon: temperature: m.temperature ); 

De transformeren() De functie past de onbewerkte gegevens aan die door de sensor worden verzonden om in het schema te passen dat EON kan begrijpen.

Voer zowel de HTML- als de Node.js-code uit voor Arduino.

Voilà, je hebt een real-time datavisualisatie in je browser!

U kunt de grafiek verder aanpassen met optionele C3.js-parameters, zoals lijnkleuren en breedte!

Als u bijvoorbeeld de balkkleur in paars wilt wijzigen zoals deze gif-animatie hierboven, kunt u de kleur van de kleur toevoegen gegevens parameter:

... genereren: bindto: '#chart, data: type:' line ', colors: temperature:' # 663399 ',

U kunt de as parameter om ook de x-as en y-as te labelen en op te maken.

Als u een ander soort grafiek wilt, probeer dan de 'lijn', wat een standaardwaarde is voor type, naar 'Spline', en kijk wat er gebeurt.

Raadpleeg de GitHub-repo voor de volledige code. Er zijn nog enkele voorbeelden als u verschillende sensoren zoals een omgevingslichtsensor en verschillende soorten grafieken wilt proberen.

Ik hoop dat je de tutorial leuk vond!

Referenties

  • Een slim apparaat maken met Arduino en Node.js PubNub gebruiken
  • Johnny-Five: het originele JavaScript Robotics-programmeerraamwerk
  • PubNub: het wereldwijde real-time Data Stream Network voor IoT, mobiele en webapplicaties
  • Project EON: Open-source diagram en kaartraamwerk voor real-time gegevens door PubNub