ARDUINO Esplora
Modulo Bluetooth
Ultimo aggiornamento 24 dicembre 2013


Divertiti e vinci nella prima mostra elettronica di JLCPCB
Idee regalo per questo Natale

 

Componenti del progetto

I principali componenti che compongono il progetto sono

Collegamenti Stazione di controllo

homotix

PCBONLINE

Collegamento stazione ricevente

Programma Master

Passiamo ora ad analizzare il programma da inserire sulla Scheda Arduino Esplora esegue le seguenti funzioni:

Nel dettaglio nel ciclo di setup abbiamo l’Impostazione del modulo bluetooth come Master, per fare questo dopo aver impostato la velocità di trasmissione della seriale a 115200 bbs (che è quella di default del modulo) viene inviato il comando per entrare in command mode rappresentato da print("$$$") a cui deve seguire una breve pausa
Quindi si invia il comando
println("SM,1") che imposta il modulo come Master.
A questo punto indichiamo a quale modulo deve connettersi mediante il comando
println("C,<address>") dove <address>) deve essere sostituito dal codice MAC del vostro modulo slave, questo numero si trova scritto sull’esterno del modulo, ed è formato da 12 cifre.

Dopo una nuova pausa trasmettiamo il comando println("---") che permette l’uscita dal Command Mode.
Sotto le righe di codice corrispondenti

  mySerial.begin(115200);
  mySerial.print("$$$");
  delay(100);
  mySerial.println("SM,1");  
  delay(100);
  //inserire il codice MAC del modulo Slave
  mySerial.println("C,000666464321");
  delay(100);
  mySerial.println("---");
Segue poi una parte di programma per l’impostazione del display TFT
Si passa quindi al programma vero e proprio presente nel ciclo LOOP, questo  legge ciclicamente i tasti impostati 2 e 4 e a seconda di quello premuto accede 
o spegne il led presente sulla scheda e invia tramite la seriale il carattere  “a” o “s” e invio del Feedback al display TTF
/*
 Programma di test per interfaccia SERIALE
 Sezione MASTER - Arduino esplora
 * RX è il pin digitale 11 (da collegarsi al TX del modulo BlueSMiRF)
 * TX è il pin digitale 3 (da collegarsi al RX del modulo BlueSMiRF)
 Questo codice di esempio è di dominio pubblico.
 */

#include <SoftwareSerial.h>
#include <SPI.h>
#include <Esplora.h>
#include <TFT.h>
SoftwareSerial mySerial(11, 3); // RX, TX
int led = 13; // il Pin 13 è collegato al led L sulla scheda esplora

void setup()  
{
  //Imposta il modulo BlueSMiRF SILVER come MASTER
  //e setta il numera MAC del ricevente slave
  mySerial.begin(115200);
  mySerial.print("$$$");
  delay(100);
  mySerial.println("SM,1");  
  delay(100);
  //inserire il codice MAC del modulo Slave
  mySerial.println("C,000666464321");
  delay(100);
  mySerial.println("---");
  //------------------- 
  pinMode(led, OUTPUT);  // initialize il pin digitale come output
  EsploraTFT.begin();
  EsploraTFT.background(0,0,0); //sfondo nero
  EsploraTFT.setTextSize(2);
  EsploraTFT.stroke(0,255,0); //colore del testo verde
  EsploraTFT.text("   Test uso",0,0);
  EsploraTFT.text("    Modulo",0,16);
  EsploraTFT.text("  Bluetooth",0,32);
  EsploraTFT.setTextSize(1);
  EsploraTFT.stroke(255,255,255); //colore del testo bianco
  EsploraTFT.text("  2-Accende  -  4 Spegne",0,60);   
  delay(500);
}

void loop() // LOOP di lettura tasti e invio carattere
{
  int button_2 = Esplora.readButton(SWITCH_2);
  int button_4 = Esplora.readButton(SWITCH_4);
  if (button_2==LOW) {
    digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
    mySerial.print ("a");    //Accende led
    cancellazione ();
    EsploraTFT.stroke(255,0,0); //colore del testo rosso
    EsploraTFT.text("LED ACCESO",30,80);
    EsploraTFT.stroke(255,0,0);
    EsploraTFT.fill(255,0,0);
    EsploraTFT.circle(105,83,10);
  }
  if (button_4==LOW){
    digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
    mySerial.print ("s");   //Spegne led
    cancellazione ();
    EsploraTFT.stroke(255,255,255); //colore del testo bianco
    EsploraTFT.text("LED SPENTO",30,80);
    EsploraTFT.stroke(255,0,0); // Colore rosso
    EsploraTFT.circle(105,83,10); // Disegno cerchio
  }
  delay (100);
}
void cancellazione ()
{
  EsploraTFT.stroke(0,0,0);
  EsploraTFT.fill(0,0,0);
  EsploraTFT.rect(30,80, 80, 8); //Cancellazione valore
}

Programma test_master_code
Programma Slave

Il programma da inserire sulla Scheda ARDUINO UNO esegue le seguenti funzioni:

Nel ciclo di setup abbiamo
Impostazione del modulo bluetooth come SLAVE, la procedura è analoga a quella precedentemente descritta l’unica variazione è per il comando che in questo caso sarà
println("SM,0") che imposta il modulo come Slave.

Si passa quindi al programma vero e proprio presente nel ciclo LOOP, questo legge ciclicamente la porta seriale connessa al modulo bluetooth e quando riceve un carattere, lo analizza e se il carattere è “a” Accende il led, mentre se il carattere è “s” lo spegne.

Segue il listato completo

/*
 Programma di test per interfaccia SERIALE
 Riceve dalla seriale hardware, invia alla seriale del software.
 Riceve daL software seriale , e invia al sesiale hardware.
 Il circuito:
 * TX è il pin digitale 2 (da collegarsi al RX del modulo BlueSMiRF)
 * RX è il pin digitale 3 (da collegarsi al TX del modulo BlueSMiRF)
 Questo codice di esempio è di dominio pubblico.
 */

#include <SoftwareSerial.h>
SoftwareSerial mySerial(3, 2); // RX, TX
const int ledPin =  13;      // the number of the LED pin
void setup()  
{
  //Imposta il modulo BlueSMiRF SILVER come SLAVE
  mySerial.begin(115200);//imposta la porta di comunicazione con il modulo BlueSMiRF
  mySerial.print("$$$");
  delay(100);
  mySerial.println("SM,0");
  delay(100);
  mySerial.println("---");
  delay (1000);
  //-------------------  
  Serial.begin(115200); //imposta la porta di comunicazione seriale
  pinMode(ledPin, OUTPUT);// initialize the LED pin as an output:      
}
void loop() 
{
  while (mySerial.available() < 1) {
  }                         // Attesa sino a quando riceve un carattere
  char val = mySerial.read(); // Legge il carattere dal modulo Bluetooth e lo salva nella variabile val
  Serial.println (val); //per test
  switch(val)        // Eseguie i comandi in base al carattere ricevuto
  {
  case 'a':// Se il carattere ricevuto è 'a' accende il led
    // turn LED on:    
    digitalWrite(ledPin, HIGH); 
    break;
  case 's'://Se il carattere ricevuto è 's' spegen il led
    // turn LED off:
    digitalWrite(ledPin, LOW); 
    break;
  }
}

Programma test_slave_code
Collaudo del dispositivo

Una volta caricati i relativi programmi nelle due schede potremmo passare al collaudo del nostro collegamento.
In questo caso è necessario alimentare la scheda Arduino UNO (modulo slave) con un leggero anticipo, 5 secondi saranno sufficienti prima della scheda Arduino Esplora (modulo Master) .
Se tutti funzionerà dopo un lampeggio dei led rossi (stat) si avrà l’accensione dei led verdi (Connect) che segnalerà l’avvenuta connessione dei due moduli.
A questo punto premendo il tasto “SWITCH 2” si dovrà accendere il led presente sulla scheda Arduino UNO, mentre il tasto “SWITCH 4” lo farà spegnere.

Le istruzione e lo stato del led sono riportate sullo schermo TTF della scheda Arduino.

Prosegue la nostra analisi della scheda Arduino Esplora in quest'articolo in cui vedremo come dotarla di un modulo Bluetooth, che imposteremo come Master. Nell'esempio proposto comanderemo un secondo modulo Bluetooth, impostato come Slave, collegato a una scheda Arduino UNO. Piloteremo un semplice led, ma l'esempio sarà utile per comandare, in futuro, dispositivi più complessi.

Elenco revisioni
24/12/2013 Emissione preliminare