Creazione programma lato Arduino
Benvenuti in questo nuovo tutorial, In questa nostra nuova puntata andremo a imparare come creare un collegamento tra il nostro smartphone (Android) e la nostra scheda Arduino. Non vi nascondo che alle prime volte che usavo questo codice spesso mi dava qualche problema, ma non spaventatevi, dopotutto questo codice una volta capito è molto semplice.
Inoltre ricordo che per funzionare tutto ciò necessitiamo di un modulo bluetooth come il modulo HC-05.
Visto che siamo in un tutorial di Arduino partiamo subito con il lato di codice che lo riguarda. Inanzitutto dobbiamo dichiarare la libreria Softwareserial,
#include <SoftwareSerial.h>
questa libreria ci permette di creare delle connessioni seriali su Pin digitali, inoltre ci permette di creare più connessioni con un baud di 115200.
Proseguiamo con andare a dichiarare la funzione costruttrice e come parametro gli passiamo 2 valori, che sono rispettivamente RX e il TX della nostra comunicazione.
SoftwareSerial mySerial(52,53);
Come precedentemente detto, possiamo usare anche dei Pin digitali come se fossero di comunicazione, purtroppo non tutti i Pin sono accettati. (Link per scoprire quali Pin sono accettati).
Tutto questo noi lo andremo a fare nella parte globale del nostro sketch, ma ora ci incentreremo nelle singole funzioni. Startiamo (Gergo personale sinonimo di partiamo) con la funzione setup.
void setup() { pinMode(key,OUTPUT);//key per il bluetooth serve per configuralo pinMode(btLed,OUTPUT);//notifica la ricezione di qualcosa digitalWrite(key,HIGH);//attiva key ma serve solo in fase iniziale
Nel setup andiamo semplicemente a dichiarare dei Pin per la key(o Wakeup) e il btLed. Il Pin key serve generalmente per entrare in AT mode (entrare in AT mode e i comandi) così da poter configurare il nostro modulo bluetooth. Invece il Pin assegnato alla variabile btLed è un Pin che verrà collegato a un led che si accenderà ogni qualvolta che la nostra scheda riceverà delle informazioni tramite bluetooth.
Inoltre creiamo una comunicazione seriale a un baud 38400 (ma la si può creare a differenti baud), sia per il monitor seriale che per la comunicazione bluetooth.
//inizializzazione porta seriale definendo il baud Serial.begin(38400); Serial.println("Type AT commands!"); // SoftwareSerial "com port" mySerial.begin(38400); }
Passando alla funzione loop la logica è molto semplice, viene fatto un controllo sulla variabile myserial ovvero sul bluetooth controllando se è disponibile.
Se il bluetooth risulta disponibile significa che sta ricevendo delle informazioni, di seguito Arduino accende il led sopra citato ed entra in un ciclo while per acquisire il valore ricevuto, questo succede perché il nostro bluetooth riceve byte per byte l’ informazione, di seguito ricostruisce il comando (o stringa) ricevuta facendo una somma di caratteri.
if (mySerial.available()) { digitalWrite(btLed,HIGH); while(mySerial.available()){ //leggo i valori ricevuti dal bluetooth command += (char)mySerial.read(); }
la seconda If presente nella nostra funzione serve per inviare dei comandi tramite la nostra scheda. questa if viene utilizzata principalmente per mandare comandi AT per configurare il modulo , ma può essere utiliazata anche per mandare dei parametri al nostro dispositivo.
// manda linput scritto dall' utente if (Serial.available()){ delay(10); // The DELAY! mySerial.write(Serial.read()); }
Questo codice è utilizzabile con bluetooth come HC-05, costruito per ricevere e inviare stringe, ma anche con moduli bluetooth come XS3868, costruito per l’invio e il controllo della musica.
Creazione programma lato Android
In questa seconda pagina andremo a a creare l’ applicazione Android per comunicare con la nostra scheda. Nello specifico vedremo come comunicare con il modulo bluetooth e quali modifiche andranno fatte nei vari file creati dal nostro IDE.
Per creare la nostra applicazione useremo, come ambiente di sviluppo, l’ IDE ufficiale di mamma google ovvero Android Studio (Download Android Studio).
Una piccola premessa non faró vedere come creare un nuovo progetto con questo IDE, visto che parto dal presupposto che le basi di questo software già le conosciate.
Inanzitutto creiamo un nuovo progetto in android studio e lo creiamo con la Blank Activity (con la schermata vuota).
una volta creato il progetto, andiamo nel file di configurazione chiamato AndroidManifest.xml e qui andremo aggiungere le seguenti righe all’interno del tag manifest.
<uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
Queste righe danno i permessi alla nostra applicazione per poter interagire con il modulo bluetooth che è presente sul nostro dispositivo.
Ora passiamo all’interfaccia e inseriamo un toggleButton all’interno della nostra app. questo button ci permetterà di connettere in nostro dispositivo con il modulo bluetooth collegato ad Arduino o a una scheda equivalente.
Una volta che abbiamo posizionato il toggleButton andiamo nel file MainActivity.java e dichiariamo le seguenti librerie
import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothSocket; import java.io.IOException; import java.io.OutputStream; import java.util.UUID;
di seguito dentro la classe andiamo a dichiarare le seguenti variabili
//per bluetooth public UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); BluetoothAdapter mBluetoothAdapter=null; BluetoothSocket mmSocket=null; BluetoothDevice mmDevice=null; OutputStream outStream;
Ora per connetterci al bluetooth creiamo un evento del toggle button dentro la funzione onCreate, l’evento in questione è il setOnClickListener.
//evento: tap sul togglebutton per la connessione del bluetooth tgb.setOnClickListener(new View.OnClickListener(){ public void onClick(View view){ if(tgb.isChecked())//controlla che sia attivo il toggle button{ mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); if (mBluetoothAdapter == null)//controlla se il devices è supportato{ // IL BLUETOOTH NON E' SUPPORTATO Toast.makeText(MainActivity.this, "BlueTooth non supportato", Toast.LENGTH_LONG).show(); tgb.setChecked(false); } else{ if (!mBluetoothAdapter.isEnabled())//controlla che sia abilitato il devices { // NON E' ABILITATO IL BLUETOOTH Toast.makeText(MainActivity.this, "BlueTooth non abilitato", Toast.LENGTH_LONG).show(); tgb.setChecked(false); } else{ // IL BLUETOOTH E' ABILITATO mmDevice=mBluetoothAdapter.getRemoteDevice(<MAC>);//MAC address del bluetooth di arduino try{ mmSocket=mmDevice.createRfcommSocketToServiceRecord(uuid); } catch (IOException e){ tgb.setChecked(false); } try{ // CONNETTE IL DISPOSITIVO TRAMITE IL SOCKET mmSocket mmSocket.connect(); outStream = mmSocket.getOutputStream(); Toast.makeText(MainActivity.this, "ON", Toast.LENGTH_SHORT).show();//bluetooth è connesso } catch (IOException closeException){ tgb.setChecked(false); try{ //TENTA DI CHIUDERE IL SOCKET mmSocket.close(); } catch (IOException ceXC){ } Toast.makeText(MainActivity.this, "connessione non rieuscita", Toast.LENGTH_SHORT).show(); } } //CHIUDE l'else di isEnabled } //CHIUDE l'else di mBluetoothAdapter == null } // CHIUDE if (tgb.isChecked()) else{ try{ //TENTA DI CHIUDERE IL SOCKET outStream.close(); mmSocket.close(); } catch (IOException ceXC){} } } // CHIUDE public void OnClick(View view) });//chiude il tgb.listener
Tutte le spiegazioni di quello che fa questa funzione è scritto nei commenti tra il codice, ma ora vi faccio vedere come scrivere qualcosa nello stream di connessione tra i bluetooth. Tutto si basa su una funzione molto semplice, essa dovrà essere richiamata qual’ora, una volta connesso il bluetooth, si vogliano trasferire delle informazioni.
private void sendMessageBluetooth(String message) { if (outStream == null) { return; } byte[] msgBuffer = message.getBytes(); try { outStream.write(msgBuffer); } catch (IOException e) { Toast.makeText(MainActivity.this, "Messaggio non Inviato", Toast.LENGTH_SHORT).show(); } }
Lascia un commento
Devi essere connesso per inviare un commento.