Arduino και Bluetooth με το HC-05

Η επικοινωνία του Arduino με άλλες συσκευές όπως υπολογιστές, smartphones, tablets καθώς και άλλα Arduino είναι ιδιαίτερα χρήσιμη και μας δίνει δυνατότητες να κατασκευάσουμε πολύ ενδιαφέροντα project.

Με ένα απλό καλώδιο USB έχουμε έτσι και αλλιώς την επικοινωνία του Arduino με τον υπολογιστή, όχι μόνο για να το τροφοδοτήσουμε με ρεύμα και για να ανεβάσουμε το πρόγραμμα μας, αλλά και για να ανταλλάσσουμε δεδομένα μέσω σειριακής επικοινωνίας. Μπορούμε να χρησιμοποιήσουμε την σειριακή οθόνη (Serial Monitor) που περιλαμβάνεται στο Arduino IDE ή να γράψουμε τα δικά μας προγράμματα τα οποία θα στέλνουν και θα δέχονται δεδομένα από την σειριακή θύρα.

Την σειριακή επικοινωνία μπορούμε να την αξιοποιήσουμε και σε ασύρματες συνδέσεις μέσω Bluetooth. Έτσι μπορούμε να φτιάξουμε οχήματα που ελέγχονται από το κινητό μας τηλέφωνο, φώτα που θα ανάβουν από το tablet μας, αισθητήρες που θα στέλνουν τα δεδομένα τους στο laptop μας κ.ο.κ.

Για να το πετύχουμε αυτό θα χρειαστεί να αγοράσουμε κάποια μονάδα Bluetooth που να συνδέεται στο Arduino. Η πιο δημοφιλής είναι το HC-05 Wireless Bluetooth Transceiver. Η χαμηλή του τιμή (περίπου 7 ευρώ από ελληνικά καταστήματα και 2-3 ευρώ από το eBay), η ευκολία χρήσης και η δυνατότητα του να λειτουργεί ως master και slave, σε αντίθεση με το παρόμοιο HC-06 που λειτουργεί μόνο ως slave, το φέρνουν πρώτο στις προτιμήσεις των αγοραστών. Αυτό σημαίνει πως υπάρχει και αρκετή υποστήριξη στο διαδίκτυο από tutorials και βοήθεια σε φόρουμ συζητήσεων. Έναν βασικό οδηγός σύγκρισης των διαφόρων μονάδων Bluetooth για το Arduino στα αγγλικά μπορείτε να βρείτε εδώ ενώ ένα πολύ πιο αναλυτικό εδώ.

Οι δυο πιο δημοφιλείς μονάδες Bluetooth της αγοράς. Το HC-05 το ξεχωρίζουμε από το HC-06 από τα 2 παραπάνω pins που διαθέτει.

Ανατομία του HC-05

Η μονάδα HC-05 με το Breakout board zs-040

Η μονάδα HC-05 έχει 6 pins:

  • VCC (2), στο οποίο συνδέουμε την τροφοδοσία από το Arduino.
  • GND (3), στο οποίο συνδέουμε την γείωση.
  • RX (5), στο οποίο έρχονται τα δεδομένα από το Arduino.
  • ΤΧ (4), από το οποίο αποστέλλονται τα δεδομένα που λαμβάνει η μονάδα Bluetooth προς το Arduino.
  • STATE (6), το οποίο είναι απλά συνδεδεμένο με το LED της μονάδας Bluetooth και όταν αυτό ανάβει βγάζει έξοδο HIGH αλλιώς βγάζει έξοδο LOW.
  • ENABLED ή KEY (1) το οποίο μας επιτρέπει να αλλάζουμε την κατάσταση της μονάδας μεταξύ δύο:
    • Κατάσταση δεδομένων, όπου το HC-05 λειτουργεί κανονικά για να μεταφέρει δεδομένα.
    • Κατάσταση ρυθμίσεων, όπου μπορούμε να δίνουμε εντολές στο HC-05 για να αλλάζουμε τις ρυθμίσεις του.

Επίσης διαθέτει μια ένδειξη LED (8) η οποία ανάλογα με τον ρυθμό που αναβοσβήνει μας πληροφορεί για την κατάσταση της μονάδας, καθώς και ένα πλήκτρο (7) το οποίο μας επιτρέπει να αλλάζουμε την κατάσταση της μονάδας.

Σύνδεση με Arduino

Για να συνδεθεί το HC-05 με το Arduino χρειάζεται να στέλνει και να λαμβάνει δεδομένα αξιοποιώντας τα pins 0 και 1 του Arduino τα οποία έχουν την ειδική σήμανση RX και TX αντίστοιχα. Το pin 0 (RX) του Arduino δέχεται (Receive) δεδομένα από την μονάδα Bluetooth, ενώ το pin 1 (TX) του Arduino στέλνει (Transmit) δεδομένα στην μονάδα Bluetooth. Η σύνδεση λοιπόν που πρέπει να κάνουμε είναι η εξής:

  • HC-05 VCC –> Arduino 5V
  • HC-05 GND –> Arduino GND
  • HC-05 TX –> Arduino RX (pin 0)
  • HC-05 RX –> Arduino TX (pin 1)
Η βασική σύνδεση της μονάδας HC-05 με το Arduino, η οποία δεν είναι απόλυτα ασφαλής.

Ένα θέμα που προκύπτει εδώ είναι ότι η μονάδα HC-05 λειτουργεί στα 3.3V σε αντίθεση με το Arduino που λειτουργεί στα 5V. Ευτυχώς το HC-05 έχει ρυθμιστή τάσης στο VCC ο οποίος δέχεται μέχρι και 6V τα οποία μετατρέπει σε 3.3V και μπορούμε άφοβα εκεί να συνδέσουμε τα 5V του Arduino. Δεν ισχύει όμως το ίδιο για τα RX και ΤΧ pins, τα οποία λειτουργούν αποκλειστικά με 3,3V.

  • Όσον αφορά την σύνδεση του TX pin του HC-05 με το RX pin του Arduino δεν υπάρχει πρόβλημα αφού εκεί το ρεύμα ταξιδεύει από το HC-05 προς το Arduino το οποίο μπορεί να διαβάσει τα 3.3V που στέλνονται χωρίς κίνδυνο.
  • Το RX pin όμως του HC-05 ενώ απαιτεί 3.3V ως είσοδο δέχεται 5V από το Arduino και μπορεί να παρουσιάσει πρόβλημα αν το έχουμε απευθείας συνδεδεμένο για πολύ ώρα.

Για να λυθεί αυτό το πρόβλημα θα πρέπει να μετατρέπουμε τα 5V που έχει η έξοδος του ΤX pin του Arduino σε 3,3V πριν φτάσουν στο RX pin του Bluetooth δημιουργώντας ένα απλό  κύκλωμα διαιρέτη τάσης με δυο αντιστάσεις, όπου η μία είναι διπλάσια της άλλης, όπως φαίνεται στο παρακάτω σχέδιο.

Ο σωστός τρόπος σύνδεσης της μονάδας HC-05 στο Arduino ώστε το RX του HC-05 να δέχεται 3.3V με την χρήση δυο αντιστάσεων.

Αν έχουμε κάνει σωστά την σύνδεση μας, με το που δώσουμε ρεύμα στο Arduino θα δούμε το κόκκινο LED στην μονάδα Bluetooth να ανάβει και να συνεχίσει να αναβοσβήνει γρήγορα (αρκετές φορές το δευτερόλεπτο). Η συσκευή μπορεί πλέον να εντοπιστεί από άλλες συσκευές όπως το κινητό μας τηλέφωνο με το όνομα HC-05 και κωδικό σύζευξης 1234. Μόλις η σύζευξη επιτευχθεί τότε το LED αρχίζει να αναβοσβήνει πιο αργά.

Μεταφέροντας το πρόγραμμα στο Arduino

Μπορούμε πλέον να γράφουμε προγράμματα στο Arduino τα οποία να στέλνουν και να δέχονται δεδομένα μέσω Bluetooth χρησιμοποιώντας τις εντολές της σειριακής επικοινωνίας που περιλαμβάνονται στην βιβλιοθήκη Serial. Οι ίδιες εντολές χρησιμοποιούνται και για την επικοινωνία μέσω USB (και αυτή σειριακή είναι).

Όταν θέλουμε να ανεβάσουμε το πρόγραμμα στο Arduino από τον υπολογιστή μας χρησιμοποιώντας την θύρα USB θα πρέπει να προσέξουμε να απενεργοποιήσουμε προσωρινά την μονάδα Bluetooth (απλά αποσυνδέστε το καλώδιο στο pin VCC, ή τα καλώδια στο RX και TX pins) για να μπορέσει να ανέβει το πρόγραμμα μας. Αν ξεχάσουμε να αποσυνδέσουμε το Bluetooth, το Arduino IDE θα μας ειδοποιήσει ότι η σειριακή θύρα του Arduino είναι απασχολημένη (αφού την έχει δεσμεύσει το Bluetooth) και δεν θα ανεβάσει το πρόγραμμα. Αφού ανεβάσουμε το πρόγραμμα μας στο Arduino μπορούμε να συνδέσουμε και πάλι την μονάδα HC-05 ώστε να λειτουργήσει κανονικά.

Αν ξεχάσουμε να αποσυνδέσουμε το HC-05 από το Arduino κατά την φάση ανεβάσματος που προγράμματος μας, θα μας βγάλει μηνύματα λάθους αφού η θύρα USB χρησιμοποιεί τα RX και TX pins που είναι κατειλημμένα.

Αλλάζοντας τις ρυθμίσεις

Όλες οι μονάδες HC-05 όταν ενεργοποιούνται έχουν το ίδιο όνομα (HC-05) και τον ίδιο κωδικό σύζευξης (1234). Αν θέλουμε να αλλάξουμε αυτές και άλλες ρυθμίσεις, όπως η ταχύτητα σύνδεσης, μπορούμε να το κάνουμε χρησιμοποιώντας εντολές AT (AT commands).

Για να στείλουμε εντολές AT στην μονάδα Bluetooth μπορούμε να χρησιμοποιήσουμε την σειριακή οθόνη που είναι ενσωματωμένη στο Arduino IDE και να «πούμε» στο Arduino να μεταφέρει τις εντολές που του στέλνουμε σειριακά μέσω USB, στην μονάδα HC-05 με ένα πρόγραμμα.

Για να το πετύχουμε αυτό θα πρέπει αρχικά να αποδεσμεύσουμε τα pin 0 και 1 του Arduino από το HC-05, αφού θα απασχολούνται από το Serial monitor. Η λύση είναι να χρησιμοποιήσουμε δυο άλλα Digital pins του Arduino μαζί με την βιβλιοθήκη Software Serial μετατρέποντας τα προσωρινά σε Software RX και TX pins. Άρα οι συνδέσεις μας τώρα θα είναι ως εξής:

  • HC-05 VCC –> Arduino 5V
  • HC-05 GND –> Arduino GND
  • HC-05 TX –> Arduino Digital pin 8
  • HC-05 RX –> Arduino Digital pin 9 (με την χρήση διαιρέτη τάσης)
Αντικατάσταση των pins 0 (RX) και 1 (TX) του Arduino με δυο άλλα Digital pins αξιοποιώντας την βιβλιοθήκη Software Serial

Τώρα χρειάζεται να φορτώσουμε στο Arduino ένα πρόγραμμα το οποίο θα δέχεται σειριακά από την θύρα USB τις εντολές AT και θα τις μεταφέρει στο HC-05 από τα δυο pin που έχουμε ορίσει. Έτσι ότι στέλνουμε από το Serial Monitor θα μεταφέρεται στο Arduino και από εκεί στο Bluetooth. Χρησιμοποιώ το πρόγραμμα που έχει γράψει στο πολύ ωραίο άρθρο του για το HC-05 ο Martyn Currey, το οποίο φαίνεται παρακάτω.

Το μόνο που μένει πλέον, αφού φορτώσουμε το πρόγραμμα στο Arduino, είναι να αλλάξουμε την κατάσταση του HC-05 ώστε από την λειτουργία δεδομένων να περάσει στην λειτουργία ρυθμίσεων.

Ένας τρόπος είναι να χρησιμοποιήσουμε το push button (7) που υπάρχει πάνω στο HC-05. Πριν δώσουμε ρεύμα στην μονάδα το κρατάμε πατημένο και μόλις το HC-05 πάρει ρεύμα και ανάψει το led αφήνουμε το push button. Τώρα παρατηρούμε ότι το led αναβοσβήνει αργά (όπως όταν βρίσκεται σε σύζευξη) και μπορούμε να του στέλνουμε AT εντολές. Όχι όμως όλες! Για αυτές που χρειαζόμαστε (αλλαγή ονόματος και αλλαγή κωδικού) θα πρέπει πάλι να κρατάμε πατημένο το push button κάθε φορά που στέλνουμε την εντολή!

Αντί να πατάμε το push button μπορούμε να αξιοποιήσουμε το pin ENABLED ή KEY (1). Όταν είναι LOW (εξ’ορισμού) τότε η μονάδα είναι στην κατάσταση DATA και λειτουργεί κανονικά (δέχεται και μεταδίδει δεδομένα). Όταν είναι HIGH τότε το HC-05 είναι στην κατάσταση Full AT Command και μπορεί να δέχεται όλες τις εντολές για να την ρυθμίσουμε (αλλαγή ονόματος, κωδικού κλπ). Προσοχή όμως! Το συγκεκριμένο pin δεν διαθέτει ρυθμιστή τάσης και δεν μπορούμε να του στείλουμε 5V αλλά 3.3V. Για αυτό θα συνδέσουμε ένα καλώδιο από τα 3.3V του Arduino στο ENABLED του HC-05, όπως φαίνεται παρακάτω.

Σύνδεση του HC-05 με το Arduino για αλλαγή ρυθμίσεων. Αντί για τα pins 0 και 1 χρησιμοποιούμε δυο άλλα digital pins με την Software Serial ενώ δίνουμε 3.3V και στον pin ENABLED για να αλλάξουμε την κατάσταση του HC-05 σε Full AT COMMAND

Αφού λοιπόν έχουμε κάνει την σύνδεση σύμφωνα με το παραπάνω σχηματικό και αφού φορτώσουμε το παραπάνω πρόγραμμα στο Arduino, μπορούμε να αλλάξουμε τις ρυθμίσεις τους χρησιμοποιώντας το Serial Monitor.

Ανοίγουμε το Serial Monitor

Μόλις ανοίξουμε την σειριακή οθόνη θα εμφανιστούν αρχικά οι πληροφορίες που έχουμε βάλει στην συνάρτηση setup του προγράμματος. Για να ελέγξουμε αν όλα έχουν συνδεθεί σωστά και μπορεί το HC-05 να δεχτεί εντολές μπορούμε να στείλουμε την εντολή AT, η οποία θα πρέπει να μας επιστρέψει OK.

Αν όλα πάνε καλά η εντολή AT θα μας επιστρέψει ΟΚ

Για να δούμε το όνομα που έχει ήδη η μονάδα HC-05 πληκτρολογούμε την εντολή AT+NAME.

Το όνομα της μονάδας είναι αυτή τη στιγμή HC-05

Για να αλλάξουμε το όνομα γράφουμε την εντολή AT+NAME=Νέο όνομα. Έτσι, αν για παράδειγμα φτιάχνουμε έναν έξυπνο κήπο όπου θα συνδέεται με το κινητό μας μέσω Bluetooth για να στέλνει δεδομένα, μπορούμε να δώσουμε την εντολή AT+NAME=Smart Garden.

Αλλάζουμε το όνομα του HC-05 σε Smart Garden

Για να ελέγξουμε αν όντως έγινε η αλλαγή, μπορούμε να δώσουμε ξανά την εντολή AT+NAME για να δούμε το όνομα της μονάδας.

Δίνοντας την εντολή AT+NAME βλέπουμε πως το όνομα του HC-05 έχει πλέον αλλάξει

Για να αλλάξουμε τον κωδικό της μονάδας όταν γίνεται η σύζευξη με άλλες συσκευές Bluetooth χρησιμοποιούμε την εντολή AT+PSWD=Νέος κωδικός

Δίνοντας την εντολή AT+PSWD βλέπουμε τον τρέχοντα κωδικό της μονάδας
Αλλάζουμε τον κωδικό σε 0000 με την εντολή AT+PSWD=0000