Hvordan lage en Windows 10 Arduino App (For Absolutt Beginners)

Slik kommer du i gang med å bygge en Windows 10-applikasjon for en Arduino, selv om du aldri har programmert en Windows-app før.

Slik kommer du i gang med å bygge en Windows 10-applikasjon for en Arduino, selv om du aldri har programmert en Windows-app før.
Annonse

Microsoft går inn i Windows 10, og drømmer endelig om å ha apps som kjører på tvers av plattformen. Kombinert med den offisielle støtten til Arduino, har du et kraftig nytt verktøy til din disposisjon: muligheten til å enkelt lage universelle Windows-apper som har en maskinvareforbindelse til den virkelige verden.

Slik kommer du i gang, selv om du aldri har programmert en Windows-app før.

Før du leser på, sjekk demo av hva vi skal gjøre.

Jeg burde merke, jeg har ikke brukt Visual Studio, eller til og med berørt C #, siden for ca 10 år siden. Jeg kommer på dette fra perspektivet til en ny Visual Studio installasjon, og har glemt alt jeg vet.

Hvis du allerede er ganske erfaren med Windows appprogrammering, eller til og med på utkikk etter en enkel måte å komme i gang med programmering i Windows uten dette Arduino-materialet, kan du prøve Ryans guide til å lage en enkel Visual Basic-app. Slik kan du lage din egen enkle app med VBA Hvordan kan du lage din egen enkle app med VBA For de av dere som virkelig vil elske å kunne skrive din egen applikasjon, men aldri har tastet en enkelt kodekode før, skal jeg gå deg gjennom å lage din egen ... Les mer . Absolute programmeringsbegynnere vil kanskje sjekke ut programmeringen 101 Grunnleggende om dataprogrammering 101 - Variabler og datatyper Grunnleggende om dataprogrammering 101 - Variabler og datatyper Etter å ha introdusert og snakket litt om Objektorientert Programmering før og hvor navnene kommer fra, jeg trodde det er på tide at vi går gjennom det absolutt grunnleggende for programmering på en ikke-språklig måte. Dette ... Les mer (og del 2 Absolute grunnleggende programmering for nybegynnere (del 2) Absolutt grunnleggende om programmering for nybegynnere (del 2) I del 2 av vår absolutte nybegynnereguide til programmering vil jeg dekke det grunnleggende av funksjoner, returverdier, looper og conditionals. Pass på at du har lest del 1 før du takler dette, hvor jeg forklarte ... Les mer) artikkelen først.

Du bør være kjent med noen nybegynners Arduino-prosjekter. 10 Great Arduino-prosjekter for nybegynnere. 10 Great Arduino-prosjekter for nybegynnere. Å fullføre et Arduino-prosjekt gir deg en følelse av tilfredshet som ingen andre. De fleste nybegynnere er ikke sikker på hvor du skal begynne, og selv begynnerprosjekter kan virke ganske skremmende. Les mer (og kanskje til og med les vår Arduino Guide Komme i gang med Arduino: En nybegynners guide Komme i gang med Arduino: En nybegynnersguide Arduino er en åpen prototypeplan for åpen kildekode basert på fleksibel, brukervennlig maskinvare og programvare. Den er beregnet på kunstnere, designere, hobbyister og alle som er interessert i å lage interaktive objekter eller miljøer. Les mer), men dette vil trolig være første gang du har prøvd å lage en ekte bit av dataprogramvare for å kommunisere med den.

Nedlastinger

Først: Du må være med i Windows Insider Program for å få den nyeste forhåndsvisning utgaven av Visual Studio 2015, og den nyeste versjonen av Windows 10 Preview . Gjør det nå - det er gratis. Windows 10 er et forhåndsvisningsprogram for utviklere, og bør ikke installeres som hovedoperativsystemet. Det er buggy som helvete.

  • Bli med i Windows Insider-programmet, og last ned Windows 10 Technical Preview
  • Få forhåndsvisning av Visual Studio 2015 Community Edition (komplett med Windows 10 utviklingsverktøy).

Visual Studio er Microsofts eget utviklingsmiljø som vi skal bruke til å lage et C # Windows-program.

Hvorfor C #? Med sterke likheter med Java, er det et relativt enkelt programmeringsspråk for nybegynnere å få en fungerende app oppe og i gang, men likevel kraftig nok til at du kan fortsette å lage noen flotte applikasjoner (like spill: C # er valgskriften for Unity-skriptspråk - sjekk ut vår gratis eBok, nybegynners guide til å programmere et spill med enhet Programmering av et spill med enhet: en nybegynners guide Programmering av et spill med enighet: en nybegynners guide I det utviklende landskapet med indie spillutvikling har Unity dukket opp som noe av en de facto standard: lav pris, brukervennlighet og bred funksjonssett gjør det ideelt for rask spillutvikling. Les mer).

Hvis du ikke allerede har, last ned Arduino IDE fra det offisielle Arduino.cc nettstedet, og installer standard firmata på brettet. Du finner det under Eksempler -> Firmata -> Standard Firmata . Dette gjør det bare til en "dum" seriell enhet, som vil gjøre hva vår app forteller det til - det vil ikke være noen applogikk på selve platen, bare et grensesnitt mellom vår app og eventuelle sensorer eller utgangsenheter som er koblet til Arduino .

Når det gjelder ledninger, kan du enten holde en LED direkte til pin 13 og GND som nedenfor, eller bruk LED-lampen. Du vil også trenge en variabel motstand (jeg har brukt et 10k lineært potensiometer) går inn i A0 (med passende ben på GND og + 5v også, selvsagt).

Arduino-Windows 10-demo

Last ned den eksterne kablingspakken fra GitHub. Dette er laget vi må legge til som gjør at Windows appen kan snakke med Arduino.

Opprett et program

Gå videre og åpne Visual Studio. Hvis dette er første gang du har kjørt det, får du muligheten til å logge på. Ignorer det hvis du vil. Velg Visual C # som utviklingsalternativet og fortsett; Uansett, det tar noen minutter å forberede Visual Studio til første gang.

Opprett et nytt prosjekt ved hjelp av malen Visual C # -> Blank App (Windows Universal) . Jeg ringte min "Arduino Test", men det spiller ingen rolle.

nye c skarpe universelle vinduer app

På dette punktet oppdaget jeg en feil om å måtte bytte Windows 10 til utviklermodus hvis jeg faktisk ville kjøre appen. Gå videre og gjør dette, men hvis du finner at byggingen av Windows 10 krasjer på den innstillingen, er det en kjent feil, og du må bruke gruppepolicyredigereren for å aktivere utviklermodus.

Deretter høyreklikker du hvor som helst i Solution Explorer (det er tingen til høyre), og velg Legg til -> Eksisterende prosjekt .

Løsningsutforsker legger til prosjekter

Naviger til hvor du lastet ned Remote Wiring-filene fra Github - hvis den er blitt utpakket, bør den være en mappe som heter fjernkontakt-utvikle . Inne der finner du Microsoft.Maker.win10 ; og innsiden av det finner du ytterligere 3 mapper. Til slutt legger du til hver enkelt ved å navigere i de tre mappene og finne prosjektfilen.

Hvis du får feil om "XAML 8.2-filen ikke funnet", har du feil versjon av Visual Studio, eller har ikke utviklerverktøyene installert ennå. Gå tilbake til starten av denne artikkelen, og sørg for at du har lastet ned og installert begge de koblede Visual Studio-filene.

Disse 3 prosjektene du nettopp har lagt til er bare forskjellige lag av Arduino-grensesnittet. Fra løsningsoppdageren, hvis du høyreklikker og velger Avhengigheter -> Bygg avhengigheter, kan du se hvilke lag som er avhengige av hvilket ( Serial er ikke avhengig av noe; Firmata avhenger av Serial; RemoteWiring avhenger av begge) . Den eneste forandringen du må gjøre her er å velge prosjektet fra rullegardinmenyen, og merk av hver boks for å indikere at prosjektet ditt avhenger av alle disse andre prosjektene.

sjekk avhengigheter

Ett siste skritt: Fra løsningsutforskeren igjen, høyreklikk på Referanser- elementet under prosjektet ditt, og velg Legg til referanse . Fra venstre, naviger til Windows Universal, merk av i boksen ved siden av Microsoft Visual C ++ AppLocal Runtime-pakken . Ikke lukk dialogboksen ennå.

prosjekt referanser

Deretter navigerer du til Prosjekter (også i samme dialogboks, fra listen til venstre), og merk av i ruten ved siden av hver av de tre Microsoft.Maker- prosjektene.

maker referanser

Det var vanskeligere enn det burde være, men du trenger bare å gjøre det en gang; nå kan vi ha det gøy med programmeringen - jeg lover det er ikke så skummelt.

programmering

Hvis du har problemer med å følge med, er den fulle koden tilgjengelig på Pastebin. Jeg anbefaler sterkt å lese gjennom notatene under allikevel skjønt, så jeg kan forklare hva koden egentlig gjør.

Først må vi legge til litt kode som sier at vi trenger en USB-port for å kommunisere med Arduino. Finn Package.appxmanifest- filen fra løsningsoppdageren, og dobbeltklikk for å redigere den. Vi trenger å lime inn noen kode her - teknisk sett vil vi være "å sette inn en barnekode" fordi det er en XML-fil, men bare erstatte hele delen med koden nedenfor slik at det ser slik ut:

evner

Den nøyaktige koden vil variere hvis du bruker Bluetooth, eller hvis du målretter mot Win8.1 i stedet for 10, men følgende er for en Windows 10, USB-tilkobling.

Gå til Build- menyen -> Rebuild Solution, og sørg for at du ikke får noen feil.

Fra løsningsutforskeren utvider du MainPage.xaml- noden. Dobbeltklikk på det vil laste formdesigneren som vi kommer tilbake til senere, men nå åpner vi MainPage.xaml.cs, som inneholder hovedlogikken bak applikasjonen vår.

Legg til to linjer i den første delen, for å indikere at vi skal "bruke" Arduino-biter.

 using Microsoft.Maker.serial; using Microsoft.Maker.RemoteWiring; 

Jeg har også lagt til en linje for å si at vi skal bruke System.Diagnostics; som gjør at vi kan bruke Debug.WriteLine () -funksjonen til å sende feilsøkingsmeldinger til IDE.

Først av, la oss definere noen få variabler vi skal bruke hele tiden. Legg til disse linjene like før den offentlige MainPage () -funksjonen deklarasjonen.

 UsbSerial connection; RemoteDevice arduino; UInt16 lastvalue; 

Deretter hopper du inn i MainPage () -funksjonen - dette kalles konstruktøren, og det er en funksjon som blir kalt umiddelbart når vår app er opprettet, så vi bruker den til å sette alt opp.

Først legger du til en linje for å etablere USB-seriell tilkobling til en bestemt USB-enhet (Arduino).

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

Merk at USB-IDene til en standard Arduino Uno allerede er kodet inn i blokken, men du kan bekrefte dette fra Enhetsbehandling -> Porter (COM og LPT) -> Arduino Uno -> Detaljer- fanen -> Maskinvare-IDer .

sjekk usb skjulte pid

Legg deretter til følgende linjer like etter det.

 arduino = new RemoteDevice(connection); connection.ConnectionEstablished += OnConnectionEstablished; connection.begin(57600, SerialConfig.SERIAL_8N1); 

Noen ting skjer her. Først oppretter vi et RemoteDevice-objekt - husk, det er laget som gir oss en rekke Arduino-kommandoer - og gir det variabelenavnet "arduino". Neste linje er knyttet til ConnectionEstablished-hendelse, for å si "når USB-tilkoblingen er vellykket, kjør du funksjonen OnConnectionEstablish ()".

Den endelige forteller bare forbindelsen til å starte allerede, med en baud rate på 57600, ved hjelp av 8N1 bit mønster.

Du må også opprette den OnConnectionEstablished () -funksjonen nå, så gå utenfor MainPage () -funksjonen og bare lage en tom funksjon som følger.

 private void OnConnectionEstablished() { // LOGIC HERE } 

Gå tilbake til skjemadesigneren jeg nevnte tidligere (hvis du har glemt hvordan: dobbeltklikk på MainPage.xaml fra løsningsoppdageren). Lag to knapper. For å gjøre dette, åpne fanen Verktøykasse som du finner fast vertikalt på venstre side av skjermen. Dra to knapper på siden, merk deretter en og en av .

form designer legge til knapper

Velg den første knappen, og deretter fra Egenskaper-boksen nederst til høyre, navngi den "OnButton". Klikk på det lille lynikonet - dette er hendelses- og handlingslisten som brukes til å angi hva som skjer når formelementene samhandles med. Skriv "OnButtonClick" i klikkfeltet.

Når du trykker på enter, oppretter den automatisk koden for den aktuelle knapphendelsen og laster standard kodesyn. Bytt tilbake til skjemaformgiveren for nå og gjør det samme for Av-knappen, men denne gangen kalles det "OffButton" og "OffButtonClick". Mens du er der, fortsett og navngi hovedvinduet bak det som «Side» - vi bruker det senere. Du bør nå ha noe som ligner skjermbildet nedenfor:

designer skaper hendelser

Bytt tilbake til designeren igjen et øyeblikk, og igjen for hver av knappene, sett egenskapen isEnabled til False . Du gjør heller dette ved å skrive inn eiendommen direkte inn i XAML-kodevisningen, eller du kan finne det i avkrysningsruten i Egenskaper-boksen (klikk på tasten hvis du fortsatt er i handlingsvisningen) - den er under den utvidede felleskategorien Egenskaper.

Dette er ikke viktig, men det er god praksis å deaktivere knappene til vi er sikre på at Arduino er koblet til og koblet til.

For å aktivere dem igjen, legg til følgende i funksjonen OnConnectionEstablished (). Ikke bekymre deg for mye om den nøyaktige betydningen av koden for nå, det er bare måten du skal håndtere skjemaoppdateringer i moderne Windows-apper for å sikre god ytelse. Når vi har koblet til Arduino, setter vi IsEnabled- egenskapen til knappene til ekte.

 private void OnConnectionEstablished() { // enable the on off buttons 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)); } 

Du vil også se en mer kjent pinMode () setning, for å si at vi har en analog inngang på pin 14 (det er 13 digitale pinner, så A0 begynner å telle fra 14). Da har vi en annen hendelsesdeklarasjon - når den analoge pinverdien oppdateres, ring funksjonen MyAnalogPinUpdateCallback.

Til slutt må vi redigere knappeklikk hendelsene og bestemme hva som skjer når den analoge inngangen endres. La oss starte med knappene. Vi kan samhandle med Arduino ved hjelp av lignende funksjonsnavn som vanlig Arduino-kode, som følger:

 arduino.digitalWrite(13, PinState.HIGH); 

Lim inn det for onButton-hendelsen, og dette for offButton:

 arduino.digitalWrite(13, PinState.LOW); 

Enkel. Den analoge inngangen fra Arduino er litt vanskeligere, men her er det jeg kom opp med.

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

Legg merke til at jeg lagrer den forrige verdien vi mottok fra pinnen i en variabel som heter lastValue; Dette gjør at vi kan kontrollere hvor mye verdien endres, og bare reagere hvis forskjellen er signifikant (en slags signalutjevning). Hvis det endres i begge retninger, er mer enn 5 (0-1024 det totale spekteret av verdier), så reagerer vi ved å endre RGB-bakgrunnsfargen på sideelementet.

Siden vi bare har ett nummer å jobbe med, og jeg var i et rush, fudged jeg ting litt her med de 3 tallene som kreves for å lage R, G og B. Du kan nok komme opp med noe mye finere.

ferdig

Arduino Windows 10 fullført

Det er det - kjør koden, og du bør se noe som ligner skjermbildet over. Knappene vil slå lysdioden på og av, og variabellmotstanden vil endre bakgrunnen. Hvis du hadde problemer, ikke glem at hele koden er her.

Nå som du kan skrive dine egne Windows 10-apper som samhandler med Arduino, hva vil du gjøre? Kanskje en hjemmautomatiseringscontroller Hjemmautomatiseringsguide Med Hempebønner Pi og Arduino Hjemmautomatiseringsguide Med Raspberry Pi og Arduino Hjemmautomatiseringsmarkedet er oversvømmet med dyre forbrukersystemer, inkompatible med hverandre og kostbart å installere. Hvis du har en Raspberry Pi og en Arduino, kan du i utgangspunktet oppnå det samme ved ... Les mer? Gi meg beskjed i kommentarene.

In this article