Archivi categoria: Visual Basic

Windows Remote Arduino e Visual Studio 2017

Se siete interessati al mondo IoT (Internet of Things) e avete acquistato un microcontroller per fare qualche esperimento pratico e magari per realizzare qualche progetto trovato sulla Rete, prima o poi avrete la necessità di controllare il vostro dispositivo da remoto. È facile immaginare alcune applicazioni utili per voi e la vostra famiglia: apertura di portoni e cancelli con uno smartphone, sorveglianza di ambienti anche da remoto, telecontrollo e telesoccorso, domotica (controllo del riscaldamento, irrigazione del giardino, accensione e spegnimento di luci…) e molte altre soluzioni, il cui unico limite è l’immaginazione.

Le opzioni non mancano: infatti possiamo scegliere tra varie possibilità, tra le quali Windows Remote Arduino, Virtual Shields per Arduino e anche Arduino Wiring per Windows 10 IoT Core. Alcune di queste soluzioni sono utilizzabili anche o preferibilmente con Raspberry, ma per questa scheda (dovremmo forse dire mini PC) abbiamo un’ampia gamma di altre soluzioni che passano anche per Raspbian (la distribuzione Linux dedicata a Raspberry) e per Python. Si tratta solo di capire da dove iniziare, perché non c’è ancora una documentazione sufficiente su questi strumenti e quindi chi si avvicina per la prima volta può rimanerne un po’ disorientato.

In questo articolo cercheremo di fare un po’ di chiarezza in un ambito ben preciso: infatti utilizzeremo una scheda Arduino UNO perché probabilmente è quella più diffusa e poi anche perché la libreria Windows Remote Arduino, come purtroppo anche altre librerie, non funziona con Arduino Mega 2560. In prima battuta utilizzeremo direttamente l’applicazione Windows Remote Arduino Experience per Windows 10 per pilotare manualmente dei LED collegati alla scheda. In seguito proveremo a sviluppare un’applicazione con Visual Studio 2017 per avere maggiore flessibilità e maggiore controllo sull’accensione dei LED o su qualsiasi cosa che potrebbe essere collegata alla scheda. La prima accortezza che bisogna avere, comune a tutti i tool, è quella di aver aggiornato il sistema operativo all’ultima build di Windows 10.

Windows Remote Arduino

Per la prima prova predisponiamo il nostro progetto sulla scheda Arduino: l’obiettivo che ci accingiamo di raggiungere è quello di realizzare un sistema per accendere alcuni LED, simulando un controllo a distanza dell’illuminazione di alcuni locali.

Per realizzare questo progetto, colleghiamo dieci LED ai pin dal 3 al 12, con altrettanti resistori da 220 Ω, come potete vedere dalla Fig.1. Il pin 13 è già collegato al LED interno alla scheda, mentre non bisogna mai utilizzare i pin 0 e 1 dedicati alla comunicazione via seriale; il pin 2 resta libero.


Immagine01

Fig. 1 – La realizzazione del modello di sistema di illuminazione comandato da remoto.


Con la libreria open source Windows Remote Arduino possiamo controllare una scheda Arduino per mezzo di connessioni via USB, Bluetooth, Ethernet e Wi-fi e, in particolare, possiamo attivare o disattivare pin digitali e analogici, ma anche ricevere eventi, quando i sensori si accorgono che è successo qualcosa. Naturalmente dipende da quali sensori sono presenti.

Per utilizzare Windows Remote Arduino abbiamo tre possibilità che vi elenchiamo, da quella più semplice a quella più complessa:

1. utilizzare l’app gratuita Windows Remote Arduino Experience;

2. creare un progetto Visual Studio 2017 installando un pacchetto NuGet;

3. aggiungere manualmente i file di Windows Remote Arduino a una soluzione Visual Studio 2017.

Come abbiamo già anticipato, esamineremo in dettaglio solo le prime due opzioni, perché la terza è un po’ più complessa e richiede un articolo tutto per sé.


Metodo 1: App gratuita Windows Remote Arduino Experience

Potete scaricare e installare l’applicazione dallo Store di Microsoft cercando il nome completo della stessa oppure visitando la seguente pagina informativa sul web: http://bit.ly/winremotearduinoexperience. Prima di poter utilizzare questa applicazione, però, dovete preparare Arduino in modo che sia pronto per comunicare in remoto. Per mantenere semplice il progetto utilizzeremo la connessione USB impostandola come segue:

1) collegate Arduino UNO al PC via cavo USB;

2) avviate l’IDE di Arduino (se non l’avete ancora installato, scaricatelo da arduino.cc);

3) verificate che nell’IDE siano impostati correttamente la porta COM e la scheda;

4) aprite il menu File > Esempi > Firmata e cliccate sullo sketch StandardFirmata;

5) caricate lo sketch nella scheda cliccando sull’apposito pulsante Carica;

6) avviate l’applicazione Windows Remote Arduino Experience installata in precedenza: apparirà una finestra simile a quella mostrata nella Fig.2.


Immagine02

Fig.2: L’applicazione Windows Remote Arduino Experience prima della connessione alla scheda.


Con la scheda Arduino collegata alla porta USB, selezionate la voce Connection impostandola a USB e scegliete il baud rate appropriato (deve essere uguale al valore del baud rate inserito nello scketch StandardFirmata). Se la sezione Devices discovered riporta la dicitura “No items found.” oppure riporta alcune porte USB ma senza l’indicazione della porta a cui abbiamo collegato Arduino, cliccate sul pulsante Refresh: con questa operazione dovrebbe apparire la scritta Arduino Uno (COMx), dove “x” è il numero della porta COM associata alla porta USB. Selezionate la riga con tale indicazione e poi cliccate sul pulsante Connect.

A questo punto dovreste poter gestire in remoto la scheda Arduino, ma potrebbe esserci qualche problema con il baud rate, cioè la velocità di comunicazione. Se la connessione non funziona, verificate che la velocità impostata nello sketch StandardFirmata corrisponda con la velocità del dispositivo di comunicazione che avete collegato: lo trovate cercando nello sketch l’istruzione Firmata.begin(<baud rate>). Se modificate il baud rate di StandardFirmata, poi dovrete caricare di nuovo lo sketch sulla scheda; in alternativa potete impostare il baud rate di Windows Remote Arduino Experience allo stesso valore, l’importante è che i due valori siano uguali. Se è stato fatto tutto correttamente, dopo pochi istanti dovrebbe apparire la finestra che potete vedere nella Fig.3.


Immagine03

Fig. 3 – La scheda Digital con i pin digitali da 0 a 13 e da A0 ad A5.


Se ora provate a cliccare sugli interruttori di destra (che riportano la tensione 0V), nei numeri da 3 a 13, vedrete accendere i LED corrispondenti e vedrete che sarà riportata la tensione di 5V; cliccando di nuovo lo stesso interruttore sarà abbassata la tensione, spegnendo il LED. Gli interruttori di sinistra, invece, servono per indicare la direzione verso la quale deve lavorare il pin corrispondente: in input o in output. Per esempio, per accendere un LED bisogna attivare il pin in output, mentre per leggere un sensore (per esempio un DHT11 per rilevare la temperatura ambientale), bisognerà impostare il pin in input.

Forse avrete notato che ci sono anche altre schede: la scheda Analog con i pin analogici da A0 ad A5 e la scheda PWM con i pin 3, 5, 6, 9, 10 e 11. I pin da A0 ad A5 appaiono sia nella scheda Digital, sia nella scheda Analog, perché possono essere attivati in entrambe le modalità. Ovviamente se vengono attivati in modalità digitale potranno avere solo i valori 0V o 5V, mentre in modalità analogica non possono essere attivati in modalità di output, potendo solo leggere valori discreti corrispondenti ai valori intermedi tra 0 e 5 Volt.

Per quanto riguarda la scheda PWM possiamo notare una curiosità: se attiviamo uno dei sei pin, abbiamo a disposizione una barra di scorrimento con la quale possiamo accendere i LED collegati ai pin stessi, con gradazioni di luminosità crescente da 0 a 5 V.


Metodo 2: Applicazione Visual Studio 2017 e NuGet

Il secondo metodo è più adatto ai programmatori, dato che permette di realizzare con Visual Studio 2017 un’applicazione in grado di connettersi alla scheda Arduino. Nell’esempio noi opteremo ancora per la connessione via USB, ma anche in questo caso sono disponibili le connessioni via Bluetooth o rete Ethernet/WiFi. Procedete come segue:

1. aprite Visual Studio 2017 e create un nuovo progetto dal menu File > New > Project;

2. tra i template di Visual Basic selezionate Windows Universal > Blank App (Universal Windows), modificate il nome del progetto in “WRA” (cambierà automaticamente anche il nome della soluzione) e, se lo desiderate, cambiate la cartella di destinazione della soluzione, poi confermate cliccando sul pulsante OK (Fig.4).


Immagine04

Fig.4: Creazione della soluzione Visual Basic in Visual Studio 2017.


3. Apparirà una finestra di selezione della versione minima e massima di Windows 10 che devono essere supportate dall’applicazione UWP: modificate questi valori solo se necessario e confermate con OK.

Non appena sarà creata l’applicazione vuota, procedete in questo modo per aggiungere la libreria da NuGet:

4. selezionate il menu Tools > NuGet Package Manager > Package Manager Console;

5. nella Console di NuGet digitate il seguente comando e confermate con un invio:


Install-package Windows-Remote-Arduino


Pochi secondi dopo lo scorrimento di varie scritte sulla Console vedrete terminare l’installazione e, se sarà andato tutto come previsto, dovrebbe essere apparsa anche la riga seguente:


Successfully installed ‘Windows-Remote-Arduino 1.4.0’ to WRA


Inoltre, nella finestra Solution Explorer dovrebbe essere apparsa la voce Windows-Remote-Arduino nel nodo References (Fig.5).


Immagine05

Fig.5: Il riferimento a Windows-Remote-Arduino nella finestra Solution Explorer.


A questo punto dobbiamo modificare il codice che ci serve per modificare lo stato dei LED.

6. Aprite il file MainPage.xaml.vb e all’inizio del codice inserite le seguenti dichiarazioni per importare le funzioni della libreria Windows Remote Arduino:


Imports Microsoft.Maker.RemoteWiring

Imports Microsoft.Maker.Serial


7. Appena prima della dichiarazione del metodo New() inserite le seguenti dichiarazioni di variabili:


Dim connection As UsbSerial

Dim arduino As RemoteDevice


8. Nel metodo New(), dopo l’istruzione InitializeComponent(), inserite il seguente codice:


connection = New UsbSerial(“VID_2A03”, “PID_0043”)

arduino = New RemoteDevice(connection)

AddHandler connection.ConnectionEstablished, AddressOf OnConnectionEstablished

connection.begin(57600, Microsoft.Maker.Serial.SerialConfig.SERIAL_8N1)


La prima istruzione definisce un nuovo oggetto di tipo UsbSerial, passandogli due parametri: “VID_2A03” e “PID_0043”. Questi due parametri non sono sempre uguali, dipendono dalla configurazione sul vostro PC. Per rilevare quali sono i vostri parametri, premete la combinazione di tasti “Windows”+X, selezionate Gestione dispositivi, espandete il nodo Porte (COM e LPT) e trovate la porta di comunicazione (COMx) di Arduino UNO. Cliccate sul nome della porta con il tasto destro del mouse e selezionate Proprietà: nella finestra delle proprietà passate alla scheda Eventi, dove potrete vedere i due parametri nel riquadro Informazioni. I due parametri sono concatenati ad altre informazioni in una unica stringa, ma sono facilmente identificabili (Fig.6).


Immagine06

Fig.6: La finestra delle proprietà della porta COM collegata ad Arduino.


La seconda istruzione crea un oggetto di tipo RemoteDevice per avviare la connessione al dispositivo. La terza istruzione aggiunge un gestore di evento secondo lo schema


AddHandler evento, AddressOf nome_subroutine


dove in questo caso l’evento che viene rilevato è quello che scatta quando viene stabilita la connessione al dispositivo, mentre il nome_subroutine indica il metodo Sub che viene invocato al verificarsi dell’evento stesso.

La quarta istruzione avvia effettivamente la connessione, indicando il baud rate e la modalità di comunicazione: SERIAL_8N1 indica una comunicazione seriale, con (8) bit di dati, (N)essun bit di parità e (1) bit di stop.

9. Ora dobbiamo creare il metodo OnConnectionEstablished() per gestire l’evento di avvenuta connessione e quindi scriviamo quanto segue:


Private Sub OnConnectionEstablished()

   Dim action = Dispatcher.RunAsync(

      Windows.UI.Core.CoreDispatcherPriority.Normal,

      New Windows.UI.Core.DispatchedHandler(

         Sub()

            OnButton.IsEnabled = True

         End Sub))

End Sub


Utilizziamo quindi un Dispatcher in asincrono per abilitare il pulsante OnButton che così potrà essere premuto per accendere un LED. Ovviamente le istruzioni che potete inserire all’interno del blocco Sub() … End Sub possono essere le più varie, per eseguire qualsiasi funzione che abbiate deciso.

10. Nella fase di scrittura del codice vedrete che OnButton non viene riconosciuto. Il motivo è ovvio: non abbiamo ancora creato i pulsanti nell’interfaccia utente. Aprite il file MainPage.xaml e inserite tre pulsanti, ai quali darete i nomi OnButton (descrizione “On”), OffButton (descrizione “Off”) e Sequence (descrizione “Sequenza”). Eseguite un doppio-click su ogni pulsante e inserite il seguente codice:


Private Sub OnButton_Click(sender As Object, e As RoutedEventArgs) Handles OnButton.Click

   Dim i As Byte

   For i = 3 To 13

      arduino.digitalWrite(i, PinState.HIGH)

   Next

End Sub

Private Sub OffButton_Click(sender As Object, e As RoutedEventArgs) Handles OffButton.Click

   Dim i As Byte

   For i = 3 To 13

      arduino.digitalWrite(i, PinState.LOW)

   Next

End Sub

Private Sub Sequence_Click(sender As Object, e As RoutedEventArgs) Handles Sequence.Click

   Dim i, j As Byte

   ‘ CICLO di accensione/spegnimento alternati

   For j = 1 To 10

      For i = 3 To 13 Step 2

         arduino.digitalWrite(i, PinState.HIGH)

      Next

      For i = 4 To 12 Step 2

         arduino.digitalWrite(i, PinState.LOW)

      Next

      Task.Delay(250).Wait()

      For i = 3 To 13 Step 2

         arduino.digitalWrite(i, PinState.LOW)

      Next

      For i = 4 To 12 Step 2

         arduino.digitalWrite(i, PinState.HIGH)

      Next

      Task.Delay(250).Wait()

   Next

   ‘ spegnimento di tutti i LED

   For i = 3 To 13

      arduino.digitalWrite(i, PinState.LOW)

   Next

End Sub


Questo codice è molto semplice da comprendere e ricalca anche la struttura di un ipotetico sketch caricato sulla scheda Arduino, quindi non riteniamo necessario dare ulteriori specifiche. L’unica particolarità degna di nota è l’utilizzo dell’istruzione Task.Delay(250).Wait() anziché di Thread.Sleep. Trattandosi di un’applicazione UWP non possiamo utilizzare quest’ultimo e quindi dobbiamo optare per l’oggetto Task per ottenere un tempo di attesa di 250 millisecondi: in caso contrario non vedremmo lampeggiare i LED, ma li vedremmo accesi solo per un istante, prima dello spegnimento completo.

11. L’ultima modifica che dobbiamo apportare è quella al file di manifesto, Package.appxmanifest, precisamente nella sezione <Capabilities>:


<Capabilities>

   <Capability Name=”internetClient” />

   <DeviceCapability Name=”serialcommunication”>

      <Device Id=”any”>

         <Function Type=”name:serialPort”/>

      </Device>

   </DeviceCapability>

</Capabilities>


In questo modo avremo aggiunto l’abilitazione all’utilizzo del dispositivo sulla porta seriale.

L’applicazione finale, molto semplice, è visibile nella Fig.7.


Immagine07

Fig.7: L’applicazione WRA in fase di esecuzione.


Il gestore dell’evento Click del pulsante OnButton accende tutti i LED, mentre quello del pulsante OffButton li spegne tutti. Invece, l’evento Click del pulsante Sequence accende e spegne dieci volte i LED, alternandoli tra di loro.


Conclusione

In questo articolo abbiamo visto l’utilizzo di Windows Remote Arduino Experience, sia con un’interfaccia fornita da una app distribuita via Microsoft Store (per Windows 10), sia con una applicazione creata con Visual Studio 2017.

Quest’ultima opzione è estremamente interessante perché è molto più flessibile e ci consente di agire sulla scheda remota e di leggere i valori rilevati dai pin della scheda, premessa importante per realizzare le nostre soluzioni IoT nel modo migliore.

Rispondo alla richiesta di un lettore…

Un mio lettore mi ha inviato un’e-mail con una serie di domande … visto che ogni tanto capita che ci siano delle domande ricorrenti sull’acquisto di Visual Studio, su un mio libro introvabile, sull’eventualità che io scriva e pubblichi altri libri, su consigli di altri libri sullo stesso argomento per principianti e così via, ho pensato di pubblicare la mia risposta (chiaramente senza nome del destinatario) in modo da aiutare chiunque avesse gli stessi problemi. Spero che vi possa essere utile! Winking smile


Buonasera …

Prima di rispondere alle domande, vorrei segnalare che non è necessario acquistare la licenza di Visual Studio 2017: infatti da un po’ di tempo (non ricordo se dalla versione 2013 o dalla 2015) esiste “Visual Studio Community 2017”, equivalente in tutto e per tutto alla versione Professional di Visual Studio 2017. Manca qualcosa che serve solo ai team di sviluppo e che quindi non è significativo per gli sviluppatori individuali, quindi può tranquillamente installarlo “a tempo indeterminato”, con licenza che autorizza anche alla produzione di applicazioni destinate alla vendita, quindi non ci sono problemi. Unica accortezza è che non può essere utilizzato da gruppi di oltre 5 sviluppatori oppure all’interno di aziende di medio-grande dimensione (il riferimento se non sbaglio è a 1.000.000 di dollari di fatturato). Per scaricarlo può utilizzare questo link: https://www.visualstudio.com/it/thank-you-downloading-visual-studio/?sku=Community&rel=15.

Per quanto riguarda il mio libro “Visual Basic 2010 spiegato a mia nonna”, è un “tomo” di circa 800 pagine che inizia praticamente dal “livello zero” della programmazione per poi andare gradualmente in crescita, sia per impegno che per difficoltà, fino a un livello medio-avanzato. Leggendo con attenzione i capitoli iniziali e sperimentando in prima persona i programmi sono sicuro che si può raggiungere un livello soddisfacente di autonomia, anche per chi parte da zero.

Il libro in versione cartacea è ormai quasi introvabile, qualche volta vedo che ci sono singoli “resi” all’editore, quindi periodicamente si potrebbe provare a contattarli per vedere se ne è tornato indietro almeno uno. In alternativa è sempre possibile acquistare il libro in versione “ebook”, cioè digitale. Può essere una soluzione per risparmiare qualcosa, anche se io stesso avrei un po’ di difficoltà a leggere a lungo un libro sullo schermo di un PC… con un Kindle potrebbe andare meglio, la versione Kindle è acquistabile da Amazon qui: https://www.amazon.it/Visual-Basic-2010-spiegato-nonna-ebook/dp/B006B1Y6XO. Come vedrà ci sono commenti discordanti: per qualcuno è troppo difficile, per qualcun altro è adatto ai principianti… la valutazione è assolutamente personale ed è difficile affermare con certezza una cosa o l’altra perché dipende anche dall’impegno e dalla costanza che ci si mette e dalle conoscenze acquisite in precedenza.

Nel 2017 avevo ipotizzato di scrivere una versione aggiornata del libro con un nuovo editore (LSWR.it) … senza la nonna, perché il ramo d’azienda è stato acquistato appunto da LSWR.it dove non sono più interessati a questa tipologia di testo (cioè alla nonna!). Con loro ho pubblicato il mio nuovo libro su SQL Server 2016 che però non ha avuto fortuna come i libri precedenti e quindi ho deciso di rinunciare. Non ha senso lavorare un anno per poi raccogliere poco più che “spiccioli”, non so se mi spiego. In futuro non si può mai dire, è possibile che io riveda il testo e lo pubblichi in autonomia su Amazon.it, in modo da avere io qualche guadagno in più e di ridurre il costo del libro per il lettore che lo acquista. Sto anche cercando di sperimentare una applicazione per Microsoft Store, destinata ai PC desktop o portatili con Windows 10, ma il progetto è ancora in corso.

Libri alternativi ne conosco, ma la stragrande maggioranza è in lingua inglese. Per l’Italia io “mi sono ritirato”, l’amico Francesco Balena anche (per gli stessi miei motivi)… gli unici che resistono sono quelli del gruppo di ASPItalia.com che periodicamente escono con un libro scritto in più programmatori, come questo libro su Visual Basic 2015 scritto da ben 6 programmatori: https://www.amazon.it/Visual-basic-2015-completa-sviluppatore/dp/8820371006. Anche in questo caso non mi risulta che sia uscita la versione 2017. Non so se ci stanno lavorando o se hanno rinunciato anche loro, considerato che Visual Studio ormai cambia troppo velocemente: non si fa in tempo a finire di scrivere un libro che esce la nuova versione!

C’è però da dire che per quanto riguarda le basi del linguaggio e la programmazione orientata agli oggetti (OOP) le tecniche sono più o meno le stesse dalla prima versione di VB.NET in poi: sono state aggiunte nuove tecniche, ma la base è la stessa, quindi anche un libro sulla versione 2010 o sulla versione 2015 può andare bene per imparare il linguaggio. Molto spesso cambia l’interfaccia grafica e vengono aggiunte nuove funzionalità a Visual Studio, quindi potrebbero esserci delle differenze sui menu, sulle finestre e su qualche caratteristica modificata o introdotta con la nuova versione.

Spero di aver risposto chiaramente a tutte le domande e spero che lei possa trovare il modo per soddisfare il suo desiderio di imparare Visual Basic!


Un mio nuovo articolo su ioProgrammo di questo mese (n. 222)

Nel n. 222 di IoProgrammo, in edicola a gennaio, potete trovare un mio articolo sulla conversione di applicazioni “Desktop” (Windows Forms o WPF) per Microsoft Store, in modo da poterle veicolare su una piattaforma mondiale che ci permette di vendere i nostri prodotti in modo facile e ben visibile. Non solo: Microsoft Store gestisce i pagamenti dai clienti che installano le nostre app e gestisce i compensi agli autori delle app, fornisce uno strumento facile e trasparente per gli aggiornamenti, via via che li pubblichiamo, e ci permette di monitorare il numero di visitatori alla pagina della app, le installazioni, l’utilizzo e gli eventuali blocchi improvvisi (crash).

Nell’immagine seguente potete vedere la prima di copertina con il titolo del mio articolo evidenziato con un riquadro blu:


IoProgrammo


L’articolo evidenziato in giallo, invece, è stato scritto da Antonio Pelleriti (https://www.facebook.com/antonio.pelleriti) che segnalo perché è un argomento assolutamente interessante.

Buona lettura! Winking smile


Arduino & C. – Un mio articolo su ioProgrammo

Volete creare un pianoforte elettronico con Arduino e Visual Studio?

Su ioProgrammo in edicola in questi giorni (“Novembre 2017”) c’è il mio articolo con programmazione in Visual Basic e in C# (ved. riquadro in basso a destra).

Buona lettura e buon divertimento! Winking smile

ioprogrammo_november2017