Hoe maak je een Windows 10 Arduino-app (voor absolute beginners)

Hoe maak je een Windows 10 Arduino-app (voor absolute beginners) / DIY

Microsoft gaat all-in voor Windows 10 en realiseert eindelijk de droom van het hebben van apps die platformoverschrijdend werken. Gecombineerd met officiële ondersteuning voor Arduino, heeft u een krachtige nieuwe tool tot uw beschikking: de mogelijkheid om eenvoudig universele Windows-apps te maken die een hardware-verbinding met de echte wereld hebben.

Hier leest u hoe u aan de slag kunt, zelfs als u nog nooit een Windows-app hebt geprogrammeerd.

Lees voordat je verder leest de demo van wat we gaan maken.

Ik moet opmerken dat ik sinds ongeveer 10 jaar geleden geen Visual Studio heb gebruikt of zelfs C # heb aangeraakt. Ik kom hierop vanuit het perspectief van een nieuwe Visual Studio-installatie en ben alles vergeten wat ik weet.

Als je al ervaring hebt met het programmeren van Windows-apps of zelfs op zoek bent naar een eenvoudige manier om te beginnen met programmeren in Windows zonder deze Arduino-dingen, probeer Ryan's handleiding voor het maken van een eenvoudige Visual Basic-app. Hoe je je eigen eenvoudige app kunt maken met VBA Hoe u uw eigen eenvoudige app kunt maken met VBA Voor degenen onder u die echt graag uw eigen applicatie willen schrijven, maar nog nooit een enkele regel code hebben getypt, zal ik u begeleiden bij het maken van uw eigen … Lees verder . Absolute programmeren van beginners kan mijn programma bekijken 101 De basisbeginselen van computerprogrammeren 101 - Variabelen en datatypen De basisprincipes van computerprogrammering 101 - Variabelen en datatypen Na een introductie en bespreking van Object Oriented Programming voor en waar de naamgever vandaan komt, ik vond het tijd dat we de absolute basis van programmeren op een niet-taalspecifieke manier doornemen. This ... Lees meer (en deel 2 De absolute basis van programmeren voor beginners (deel 2) De absolute basis van programmeren voor beginners (deel 2) In deel 2 van onze absolute beginnershandleiding voor programmeren, behandel ik de basisbeginselen van functies , retourneer waarden, loops en conditionals.Zorg ervoor dat je deel 1 gelezen hebt voordat je dit aanpakt, waar ik het ... Lees meer uitlegde).

Je moet bekend zijn met Arduino-projecten voor beginners. 15 Great Arduino Projects for Beginners 15 Great Arduino Projects for Beginners Interesse in Arduino, maar niet zeker waar te beginnen? Hier zijn enkele van onze beste Arduino-projecten voor beginners om mee te beginnen! Meer lezen (en misschien zelfs onze Arduino-handleiding lezen Aan de slag met Arduino: een beginnershandleiding Aan de slag met Arduino: een beginnersgids Arduino is een prototype-platform met open source-elektronica op basis van flexibele, eenvoudig te gebruiken hardware en software. artiesten, ontwerpers, hobbyisten en iedereen die geïnteresseerd is in het maken van interactieve objecten of omgevingen. Lees Meer), maar dit zal waarschijnlijk de eerste keer zijn dat je hebt geprobeerd een heel klein beetje computersoftware te maken om ermee te communiceren.

downloads

Ten eerste: u moet deelnemen aan het Windows Insider-programma om de nieuwste preview-editie van te krijgen Visual Studio 2015, en de nieuwste build van Windows 10 Preview. Doe dat nu - het is gratis. Windows 10 is een voorbeeld van een ontwikkelaar en zou niet als uw hoofdbesturingssysteem moeten worden geïnstalleerd. Het is buggy als een hel.

  • Sluit u aan bij het Windows Insider-programma en download de technische preview van Windows 10
  • Download de preview van Visual Studio 2015 Community Edition [niet meer beschikbaar].

Visuele studio is de eigen ontwikkelomgeving van Microsoft die we zullen gebruiken om een ​​C # Windows-applicatie te maken.

Waarom C#? Met sterke gelijkenissen met Java is het een relatief eenvoudige programmeertaal voor beginners om een ​​werkende app in gebruik te krijgen, maar toch krachtig genoeg om prachtige applicaties te maken (zelfs games: C # is de Unity-scriptingtaal naar keuze - vink aan uit ons gratis eBook, Beginnersgids voor het programmeren van een spel met eenheid Een spel programmeren met eenheid: een gids voor beginners Een spel met eenheid programmeren: een gids voor beginners In het zich ontwikkelende landschap van de ontwikkeling van indiegames is Unity als een de-facto ontstaan standaard: de lage kosten, het gebruiksgemak en de brede functies maken hem ideaal voor de snelle ontwikkeling van spellen Lees meer).

Download het, als u dat nog niet hebt gedaan Arduino IDE van de officiële Arduino.cc-site en installeer de standaard firmata op het bord. Je zult het onder vinden Voorbeelden -> Firmata -> Standaard Firmata. Dit maakt het gewoon een “stom” serieel apparaat, dat doet wat onze app zegt - er is geen app-logica op het bord zelf, alleen een interface tussen onze app en alle sensoren of uitvoerapparaten die op de Arduino zijn aangesloten.

In termen van bedrading, kunt u een LED direct op pin 13 en GND steken, zoals hieronder, of de ingebouwde LED gebruiken. Je hebt ook een variabele weerstand nodig (ik heb een lineaire potentiometer van 10k gebruikt) die naar A0 gaat (uiteraard met de juiste poten op GND en + 5v).

Download ten slotte het Remote Wiring-pakket van GitHub [No Longer Available]. Dit is de laag die we moeten toevoegen om onze Windows-app in staat te stellen met de Arduino te praten.

Maak een applicatie

Ga je gang en open Visual Studio. Als dit de eerste keer is dat u het programma uitvoert, krijgt u de mogelijkheid om in te loggen. Negeer dat als u dat wilt. Kiezen Visual C # als de ontwikkelingsoptie en ga verder; Hoe dan ook, het kost een paar minuten om Visual Studio voor te bereiden voor het eerste gebruik.

Maak een nieuw project met behulp van de sjabloon Visual C # -> Lege app (Windows Universal). Ik heb de mijne gebeld “Arduino-test”, maar dat doet er niet toe.

Op dit moment stuitte ik op een foutmelding over het moeten overschakelen van Windows 10 naar de ontwikkelaarsmodus als ik de app daadwerkelijk wilde uitvoeren. Ga je gang en doe dit, maar als je merkt dat je build van Windows 10 crasht op die instelling, is het een bekende bug en moet je de groepsbeleid-editor gebruiken om de ontwikkelaarsmodus in te schakelen.

Klik vervolgens met de rechtermuisknop ergens in de Solution Explorer (dat is het ding rechts) en selecteer Toevoegen -> Bestaand project.

Navigeer naar waar je de Remote Wiring-bestanden hebt gedownload vanuit Github - als het is uitgepakt, zou het een map moeten zijn remote-bedrading ontwikkeling. Daarbinnen zult u vinden Microsoft.Maker.win10; en daarbinnen vind je nog 3 mappen. Voeg ze op hun beurt toe door binnen die drie mappen te navigeren en het projectbestand te vinden.

Als u fouten ontvangt over “XAML 8.2-bestand niet gevonden”, je hebt de verkeerde versie van Visual Studio of je hebt nog geen ontwikkelaarstools geïnstalleerd. Ga terug naar het begin van dit artikel en zorg ervoor dat u beide gekoppelde Visual Studio-bestanden hebt gedownload en geïnstalleerd.

Deze 3 projecten die je zojuist hebt toegevoegd, zijn slechts verschillende lagen van de Arduino-interface. Vanuit de oplossingsverkenner, als u met de rechtermuisknop klikt en selecteert afhankelijkheden -> Bouw afhankelijkheden, je kunt zien welke lagen afhankelijk zijn van welke (serie- is nergens van afhankelijk; Firmata hangt af van het serienummer; RemoteWiring hangt van beide af). De enige verandering die u hier moet aanbrengen, is uw project selecteren in de vervolgkeuzelijst en elk vakje aanvinken om aan te geven dat uw project afhankelijk is van al deze andere projecten..

Nog een laatste stap: klik vanuit de oplossingsverkenner nogmaals met de rechtermuisknop op de Referenties item onder uw project en selecteer Referentie toevoegen. Navigeer van links naar Windows Universal, vink vervolgens het vakje naast aan Microsoft Visual C ++ AppLocal Runtime Package. Sluit de dialoog nog niet.

Navigeer vervolgens naar projecten (ook in hetzelfde dialoogvenster, in de lijst aan de linkerkant) en vink het vakje naast elk van de drie aan Microsoft.Maker projecten.

Dat was moeilijker dan het zou moeten zijn, maar je hoeft het maar één keer te doen; nu kunnen we plezier hebben met de programmering - ik beloof dat het niet zo beangstigend is.

Programming

Als u problemen ondervindt bij het volgen, is de volledige code beschikbaar op Pastebin. Ik raad ten sterkste aan de onderstaande opmerkingen toch door te lezen, zodat ik kan uitleggen wat de code feitelijk doet.

Ten eerste moeten we een stukje code toevoegen dat zegt dat we een USB-poort nodig hebben om met de Arduino te communiceren. Vind de Package.appxmanifest bestand uit de oplossingsverkenner en dubbelklik om het te bewerken. We moeten hier wat code in plakken - technisch gezien zullen we dat zijn “een kindknoop invoegen” omdat het een XML-bestand is, maar gewoon het hele bestand vervangt sectie met de onderstaande code zodat het er zo uitziet:

De exacte code varieert als u Bluetooth gebruikt of als u Win8.1 target in plaats van 10, maar het volgende is voor een Windows 10, USB-verbinding.

       

Ga naar de Bouwen menu -> Rebuild Solution, en zorg ervoor dat je geen fouten krijgt.

Breid de oplossingenverkenner uit met de MainPage.xaml knooppunt. Als u hierop dubbelklikt, wordt de formulierontwerper geladen waar we later op terugkomen, maar voor nu open MainPage.xaml.cs, welke de hoofdlogica achter onze applicatie bevat.

Voeg twee regels toe in het eerste gedeelte om aan te geven dat we dat zullen zijn “gebruik makend van” de Arduino-bits.

met behulp van Microsoft.Maker.serial; met behulp van Microsoft.Maker.RemoteWiring;

Ik heb ook een regel toegevoegd om te zeggen dat we deze zullen gebruiken System.Diagnostics; waardoor we de Debug.WriteLine () functie om foutopsporingsberichten naar de IDE uit te voeren.

Laten we eerst een paar variabelen definiëren die we in de loop van de tijd zullen gebruiken. Voeg deze regels toe net voor de public MainPage () functie verklaring.

UsbSerial-verbinding; RemoteDevice arduino; UInt16 laatste waarde;

Spring vervolgens in de functie MainPage () - dit wordt de constructor genoemd en het is een functie die onmiddellijk wordt gebeld wanneer onze app wordt gemaakt, dus we gebruiken deze om alles in te stellen.

Voeg eerst een regel toe om de USB-seriële verbinding tot stand te brengen met een specifiek USB-apparaat (de Arduino).

connection = new UsbSerial ("VID_2341", "PID_0043");

Merk op dat de USB-ID's van een standaard Arduino Uno al in het blok zijn gecodeerd, maar u kunt dit verifiëren Apparaat beheerder -> Poorten (COM en LPT) -> Arduino Uno -> Details tab -> Hardware-ID's.

Voeg daarna de volgende regels toe.

arduino = nieuw RemoteDevice (verbinding); connection.ConnectionEstlished + = OnConnectionEstablished; connection.begin (57600, SerialConfig.SERIAL_8N1);

Hier gebeurt een paar dingen. Eerst maken we een RemoteDevice-object - denk eraan, dat is de laag die ons een aantal Arduino-commando's geeft - en geef hem de naam van de variabele “arduino”. De volgende regel houdt verband met de gebeurtenis ConnectionEstlished, om te zeggen “Zodra de USB-verbinding met succes tot stand is gebracht, voert u de functie uit genaamd OnConnectionEstablish ()”.

De finale vertelt gewoon dat de verbinding al begint, met een baudrate van 57600, met behulp van het 8N1-bitpatroon.

Je moet ook die OnConnectionEstablished () -functie nu maken, dus ga buiten de MainPage () -functie en maak gewoon een blanco-functie als volgt.

private void OnConnectionEstabllished () // LOGIC HERE

Ga terug naar de vormontwerper die ik eerder heb genoemd (als je bent vergeten hoe: dubbelklik op MainPage.xaml van de oplossingsverkenner). Maak twee knoppen. Open hiervoor het tabblad Toolbox dat u aan de linkerkant van het scherm verticaal kunt vastzetten. Sleep twee knoppen naar de pagina en label er een Op en een Uit.

Selecteer de eerste knop en geef deze een naam in het vak Eigenschappen rechtsonder “OnButton”. Klik op het kleine bliksempictogram - dit is de lijst met gebeurtenissen en acties die werd gebruikt om aan te geven wat er gebeurt wanneer de formulierelementen worden gebruikt. Type “OnButtonClick” in de Klik veld-.

Wanneer u op Enter drukt, wordt automatisch de code voor die bepaalde knopgebeurtenis gemaakt en wordt de standaardcodeweergave geladen. Schakel voor nu terug naar de formulierontwerper en doe hetzelfde voor de knop Uit, maar deze keer bellen “OFF-”, en “OffButtonClick”. Terwijl je daar bent, ga je gang en noem het hoofdvenster erachter als “Pagina” - we zullen dat later gebruiken. Je zou nu iets moeten hebben dat lijkt op de onderstaande screenshot:

Schakel een moment terug naar de ontwerper en stel voor elke knop opnieuw de is ingeschakeld eigendom aan vals. U doet dit door de eigenschap rechtstreeks in de XAML-codeweergave in te voeren, of u kunt dat selectievakje in het vak Eigenschappen vinden (klik op de moersleutel als u nog steeds in de actiesweergave staat) - deze bevindt zich onder de uitgevouwen lijst Gemeenschappelijk categorie van eigenschappen.

Dit is niet essentieel, maar het is een goede gewoonte om de knoppen uit te schakelen totdat we zeker weten dat de Arduino is aangesloten en aangesloten.

Als u deze opnieuw wilt inschakelen, voegt u het volgende toe aan de functie OnConnectionEstablished (). Maak je niet al te veel zorgen over de exacte betekenis van de code, het is gewoon de manier waarop je in moderne Windows-apps formulierupdates moet verwerken om goede prestaties te garanderen. Zodra we verbinding hebben gemaakt met de Arduino, stellen we de Is ingeschakeld eigendom van de knoppen naar true.

private void OnConnectionEstablished () // schakel de aan-uitknoppen in var action = Dispatcher.RunAsync (Windows.UI.Core.CoreDispatcherPriority.Normal, new Windows.UI.Core.DispatchedHandler (() => OnButton.IsEnabled = true; OffButton.IsEnabled = true;)); arduino.pinMode (14, PinMode.ANALOG); arduino.AnalogPinUpdatedEvent + = MyAnalogPinUpdateCallback; Debug.WriteLine (arduino.analogRead (14)); 

U zult ook een meer bekende pinMode () -instructie zien, om te zeggen dat we een analoge input hebben op pin 14 (er zijn 13 digitale pinnen, dus A0 begint met 14). Dan hebben we nog een gebeurtenisverklaring - wanneer de waarde van de analoge pin wordt bijgewerkt, bel dan de functie MyAnalogPinUpdateCallback.

Ten slotte moeten we de knopkliksgebeurtenissen bewerken en beslissen wat er gebeurt wanneer de analoge invoer verandert. Laten we beginnen met de knoppen. We kunnen als volgt communiceren met de Arduino met soortgelijke functienamen als gewone Arduino-code:

arduino.digitalWrite (13, PinState.HIGH);

Plak dat voor de onButton-gebeurtenis en dit voor de offButton:

arduino.digitalWrite (13, PinState.LOW);

Eenvoudig. De analoge input van de Arduino is een beetje lastiger, maar hier is wat ik bedacht.

public void MyAnalogPinUpdateCallback (byte-pin, UInt16-waarde) if (value-lastvalue> 5 || lastvalue-value> 5) 
Debug.WriteLine ("Pin A" + pin + "is nu" + waarde); var action = Dispatcher.RunAsync (Windows.UI.Core.CoreDispatcherPriority.Normal, nieuw Windows.UI.Core.DispatchedHandler (() => byte num = Convert.ToByte (value / 4); Page.Background = new SolidColorBrush ( Windows.UI.Color.FromArgb (255, num, num, Convert.ToByte (255 -um));));  lastvalue = waarde; 

Merk op dat ik de vorige waarde die we van de pin hebben ontvangen in een variabele met de naam lastValue opslaat; dit stelt ons in staat om te controleren hoeveel de waarde is veranderd en alleen te reageren als het verschil significant is (een soort signaalvereffening). Als het in beide richtingen meer dan 5 verandert (0-1024 is het volledige bereik van waarden), reageren we door de RGB-achtergrondkleurwaarde van het pagina-element te wijzigen.

Omdat we maar één nummer hebben om mee te werken en ik haast had, futte ik het hier een beetje met de 3 nummers die nodig zijn om R, G en B te maken. Je kunt waarschijnlijk iets mooiers verzinnen.

Afgewerkt

Dat is het - voer de code uit, en je zou iets moeten zien dat lijkt op het screenshot hierboven. De knoppen zullen de LED aan en uit zetten en de variabele weerstand zal de achtergrond veranderen. Als u problemen had, vergeet dan niet dat de volledige code hier staat.

Nu dat u uw eigen Windows 10-apps kunt schrijven die communiceren met Arduino, wat gaat u doen? Misschien een huisautomatiseringscontroller Home Automation Guide met Raspberry Pi en Arduino Home Automation Guide met Raspberry Pi en Arduino De domotica-markt wordt overspoeld met dure consumentensystemen, incompatibel met elkaar en kostbaar om te installeren. Als je een Raspberry Pi en een Arduino hebt, kun je eigenlijk hetzelfde bereiken op ... Lees meer? Laat het me weten in de comments.

Ontdek meer over: Arduino, programmeren.