Hur man skapar en smart enhet med Arduino och Node.js Använda PubNub

Med ökningen av tillverkarens rörelse-Maker Faire, 3D-skrivare, DIY-robotar, droner och så vidare-populariteten hos Arduino, en open-source mikrocontroller-baserad kit, har gjort många programvaruingenjörer till hårdvara hackare. Du kan ansluta en Arduino till din dator med en USB-kabel, ladda ner IDE och boom: du är redo att gå.

Men jag ser att många webbingenjörer känner sig borta eftersom Sketch, det C-baserade språket som krävs för att programmera ett Arduino-kort, är inte något webutvecklare känner sig bekväma med. Men vad händer om du kan använda JavaScript, ett språk du redan är bekant med? Vill du inte leka med en?

I den här handledningen visar jag dig hur du kommer igång med Arduino med Node.js, och jag går igenom prototypning av en Internet of Things-applikation med hjälp av PubNubs JavaScript APIs.

Johnny-Five: JavaScript Robotics Framework

Nu vill jag presentera Johnny-Five, en JavaScript Robotics programmeringsram. Johnny-Five är öppen källkod och har växande utvecklingssamhällen, eftersom vi har börjat se community-driven NodeBots Days över hela världen.

Så låt oss börja med Johnny-Five för att programmera Arduino Uno!

1. Ställa in Arduino

Hårdvara och programvara du behöver:

  • Arduino (Genuino) Uno 
  • Arduino IDE
  • Node.js

Anslut först din Arduino Uno till din dator med en USB-kabel. Ladda ner Arduino IDE och installera den på din dator. Du behöver bara IDE för den ursprungliga inställningen.

På Arduino IDE, gå till Verktyg> Port och se till att du har rätt styrelse, Arduino Uno, är ansluten till rätt port (tty.usbmodem ... för Mac, cu.usbmodem ... för Windows).

Johnny-Five kommunicerar med Arduino med Firmata-protokollet, så du måste installera StandardFirmata:

  • På IDE, öppna Arkiv> Exempel> Firmata> StandardFirmata.
  • Klicka på uppladdningsknappen (pilknappen).
  • Vänta tills fönstret IDE-meddelande säger "Klar uppladdning".
  • Stäng IDE. Du behöver inte IDE längre om du inte vill fortsätta använda den för kodning.

2. Hej världen

Se till att Node.js är installerat på din maskin. Skapa en lämplig katalog som js-hej, och då CD i katalogen och installera Johnny-Five med hjälp av npm paketchef.

$ npm installera johnny-fem

Nu, låt oss skriva Hello World med Johnny-Five. Eftersom du har lite glänsande hårdvara kommer du att skapa "Hej världen" av hårdvara, vilket är en blinkande LED-lampa!

Hårdvara du behöver

  • 1 Arduino Uno
  • 1 LED
  • 1 brödbräda
  • 2 man / manbygel (1 röd, 1 svart)
  • 1 motstånd (200 - 330Ω)

Känn dina lysdioder

LED, kort för ljusdioder, polariseras: den positiva (+) sidan kallas anoden, och den negativa sidan kallas katoden. Vanligtvis har varje LED två ben, och längre ben är en anodstift. Detta är viktigt när du bygger en krets.

Montering av en krets

Låt oss använda en färgkonvention för att undvika förvirring:

  • Svarta ledningar för jord
  • Röda ledningar för spänning

Dina kablar behöver inte vara röda och svarta, men använda två olika färger så att du inte förvirrar dig själv. Den bästa praxisen är att använda rött för att ansluta till den positiva änden (i denna övning, använd stift 13) och blockera till jord (GND-stift).

Du kan lära dig mer om breadboards, motstånd och alla grunderna i delarna på Adafruit!

Blinkar en LED med Johnny-Five

Nu ska du jobba på programsidan.

Skapa en fil, blink.js och klistra in koden nedan:

var fem = kräver ('johnny-fem'); var styrelse = nytt fem. Bord (); board.on ("redo", funktion () var ledde = nya fem. Led (13); // pin 13 led.blink (500); // 500ms intervall); 

Springa:

$ sudo nod blink.js

Lysdioden ska blinka med ett intervall på 500 ms, annars kontrolleras både kretskoden och koden.

Du har lärt dig grunderna, så låt oss gå vidare och lära dig hur du gör maskinvaran till Internet och prototyper din första smarta enhet!

3. Prototyper ett Smart Lighting System

Det finns sorter av smarta LED-lampor på marknaden, som Philips HUE och LIFX. De låter dig ändra ljusstyrka och färg från dina smartphones och tabletter.

Nu ska du prototypa något liknande som låter dig fjärrkontroll från en webbläsare med Arduino och en LED!

Internet av saker med JavaScript

En viktig punkt här gör din hårdvara till en IoT-enhet (Internet of Things) genom att ansluta den till Internet. Till skillnad från Bluetooth, när saker är anslutna på Internet kan du använda din LED från var som helst i världen. För att göra det lätt att kommunicera med en uttag, använder vi PubNub JavaScript API!

PubNub Data Stream Network (DSN) tillhandahåller global infrastruktur, och låter dig enkelt bygga och skala realtidsprogram och IoT-enheter. Den smarta LED du ska skapa fungerar som följer:

Till exempel, när en användare i San Francisco kontrollerar en Arduino i Tokyo:

  1. Användaren publicerar ett meddelande, "Gör ljuset grönt", från en mobiltelefon.
  2. Meddelandet skickas till ett datacenter i San Francisco.
  3. Datan är synkroniserad över hela datacentret.
  4. Arduino abonnerar data från Tokyo datacenter och ändrar ljusfärgen.

Operationen är klar på bara en fjärdedel av en sekund.

I den här handledningen ska du göra en prototyp. Men om du använder den inbyggda SDK-enheten, kan du faktiskt bygga riktiga konsumentprodukter, som Emberlights smarta ljusplattform.

Hårdvara du behöver

  • 1 Arduino Uno
  • 1 RGB-LED (vanlig katod)
  • 1 brödbräda
  • 4 manliga / manliga dragkedjor (röd, grön, blå, svart)
  • 1 Motstånd (220Ω x 2, 330Ω x 1)

Känn din LED

En RGB-LED är en tre-i-ett-LED som rymmer röda, gröna och blå färger i en enda förpackning. RGB-lysdioder kombinerar dessa färger för att producera miljontals nyanser. Varje LED kommer med fyra ben - ett ben per färg - och en vanlig katod (eller anod). I denna handledning kommer du att använda en med en vanlig katod.

Montering av kretsen

Försök bygga kretsen enligt följande. Till skillnad från i tidigare "LED blink" -övning, använder du PWM (Pulse Width Modulation) stiften, som betecknas med "~" på ditt Arduino board.

Skillnaden mellan dessa stiften är i grunden skillnaden mellan analoga och digitala resultat. Till exempel, när du ansluter en LED till en digital stift, får du bara två tillstånd: På eller av. Blinkande LED lyser bara de två tillstånden. Men för att generera miljontals nyanser med en RGB-LED behöver du mellan stater, så du måste använda analoga PWM-stiften.

Anslut RGB-ledningen med ledningar och brödbräda till Arduino-stift 6, 5 och 3 för rött, grönt och blått respektive. Den gemensamma stiftet är anslutet till GND.

I det här diagrammet använde jag 220Ω (för rött) och 330Ω (för gröna och blå) motstånd, eftersom rött ljus blir för intensivt när du använder samma motstånd med grönt och blått. Du kan justera när du jobbar. Om du vill lära dig mer om motstånd och hur man beräknar med Ohms lag rekommenderar jag att du lär mig från Adafruit.

Skapa webbgränssnittet

Nu ska du bygga ett webgränssnitt för att styra LED-lampan.

Använd HTML5-elementet att rita en glider för att låta en användare ändra värdet för varje "R", "G" och "B". Varje färg har värdena från 0 till 255 (min = "0" max = "255") och använder endast heltalsvärden genom att ställa in ökningen med 1 (steg = "1").

Detta styr intensiteten i den röda färgen. Jag kommer inte prata om styling med CSS i denna handledning, men du kan se källkoden på GitHub på gh-sidoföretaget för att se hur jag utformar UI-visuella komponenter.

Därefter kommer vi lära oss hur du använder PubNub JavaScript API för att återspegla färgdata från UI till Arduino.

Hämta egna API-nycklar, och importera sedan JavaScript-biblioteket från CDN eller lokalt.

Initiera förekomsten:

var pubnub = PUBNUB (subscribe_key: 'you_subscribe_key', publish_key: 'your_publish_key');

Låt oss skicka data för att ändra LED-lampans färg, eftersom UI-händelsen är avfyrade.

Lyssna på förändringshändelsen för skjutreglaget DOM och skicka eventuella ändringar till PubNub med publicera metod.

var röd = document.getElementById ('röd'); red.addEventListener ('change', function () pubnub.publish (kanal: 'smart-led', meddelande: färg: 'röd', ljusstyrka: + this.value);, false);

Du kan använda någon kanalisera namn i strängen, men kom ihåg att använda samma namn när du mottar data senare.

Därefter kommer du att använda Node.js för att ta emot data med maskinvara!

IoT-ifying Arduino med Johnny-Five och PubNub

Det är väldigt lätt att tända RGB-LED-lampor med Johnny-Five. Att installera johnny-five med npm, prova den här koden nedan:

var fem = kräver ('johnny-fem'); var led; 5.Board (). på ('redo', funktion () console.log ('redo'); // Initialisera RGB LED ledde = nya five.Led.RGB (pins: // pin nummer rött: 6, grön: 5, blå: 3; // test led.color (röd: 255, blå: 0, grön: 0); led.on ();); 

Är din LED släckt i rött? Om inte, kontrollera din kod och krets. Om det fortfarande inte fungerar kan du använda en vanlig anod LED, istället för katod. Prova att ta bort ping till GND och koppla till 5V pin.

Se nu linjen under kommentaren, // test. Du kommer märka att färgmetoden anger färgen. I det här fallet är värdet för rött 255, och de andra är 0, så att din LED är i ren röd.

Med Johnny-Five kan du ange RGB-värdena i 0 till 255, precis som CSS-färgegenskapen. Försök ändra värdena och experimentera med din LEDs färg!

Därefter ändrar du värdet dynamiskt med data som skickas från webbläsarens användargränssnitt.

För att ta emot data, använd PubNub prenumerera metod.

Installera pubnub använder sig av npm:

$ npm installera pubnub

Initiera förekomsten, precis som webbläsarsidan:

var pubnub = kräver ('pubnub'). init (subscribe_key: 'your_subscribe_key', publish_key: 'your_publish_key');

Du kan läsa data genom att komma åt samma kanal som du skickar data från. När data har tagits emot kallas återuppringningsfunktionen så att du kan återspegla värdet till LED.

pubnub.subscribe (kanal: 'smart-led', återuppringning: funktion (m) om (led) r = (m.color === 'röd')? m.brightness: r; g = (m. färg === 'grön')? m.brightness: g; b = (m.color === 'blå')? m.brightness: b; led.färg (röd: r, blå: b, grön: g); console.log ("färgbyte till ..."); console.log (led.color ()); fel: funktion (err) console.log (err););

Det returnerade objektet m är ett meddelande som kommer från webbläsarsidan. Till exempel, när värdet av blått är 150 får du färg: 'blå', ljusstyrka: 150, och då när nästa data är färg: 'röd', ljusstyrka: 150, den röda = 150 lägger till den blåa = 150, för att göra en lila färg.

För att se hela källkoden, se /node/index.js på GitHubs huvudgren.

Ta-da! Du prototyper bara din första IoT smart LED!

Du kan använda andra mikrokontroller som Raspberry Pi med Johnny-Five och PubNub, så du borde försöka skapa fler IoT-appar!

referenser

  • Johnny-Five: Den ursprungliga JavaScript Robotics programmeringsramen
  • PubNub: Realtime Data Stream Network som gör det möjligt för utvecklare att bygga och skala realtidsprogram för IoT-, mobil- och webbapplikationer