Phone and Arduino Bluetooth Communication
We have seen some nice arduino board with embedded Bluetooth functions, now we make a simple tutorial about how to use our LC-05 Module directly with phone.
What you will need
- Our LC-05 Module
- Your cell phone, if you use android, install the bluetooth UART communication software like BluetoothSPP.
- Your arduino board.
Make the connection like below
Bluetooth Module | Arduino | Description |
---|---|---|
3.3V | 3.3V | - |
5V | - | Do not connect, it will not burn the BT module, but will burn other side, which could be UART connector (like pl2303 module), arduino, etc |
GND | GND | - |
RX | D3 | - |
TX | D2 | - |
KEY | - | No need to connect |
How it work
To illustrate the connection between the Arduino the tablet we will be sending simple text messages back and forth between them. However, since the Arduino doesn’t really have a keyboard, we are going to plug the arduino into our pc and talk to it via a serial connection using usb.
The arduino code is fairly simple. In a nutshell is opens a serial connection to the computer, and a serial connection to the bluetooth mate. Any data received on one is written to the other and vice versa. Since we are going to be using the Arduino’s regular RX and TX lines for talking to the PC, we are going to have to use a software based serial connection on two other digital pins using the NewSoftSerial Arduino library which can be downloaded here. Just copy the folder in the zip to the libraries folder under your Arduno folder (for me it is at C:\Program Files\arduino-1.0\libraries)
Demo code
#include <SoftwareSerial.h>
int bluetoothTx = 2; // TX-O pin of bluetooth mate, Arduino D2
int bluetoothRx = 3; // RX-I pin of bluetooth mate, Arduino D3
SoftwareSerial bluetooth(bluetoothTx, bluetoothRx);
void setup()
{
Serial.begin(9600); // Begin the serial monitor at 9600bps
bluetooth.begin(9600); // Start bluetooth serial at 9600
}
void loop()
{
if(bluetooth.available()) // If the bluetooth sent any characters
{
// Send any characters the bluetooth prints to the serial monitor
Serial.print((char)bluetooth.read());
}
if(Serial.available()) // If stuff was typed in the serial monitor
{
// Send any characters the Serial monitor prints to the bluetooth
bluetooth.print((char)Serial.read());
}
// and loop forever and ever!
}
Note
The following part is not necessary for our module, already removed from demo code:
bluetooth.begin(115200); // The Bluetooth Mate defaults to 115200bps
bluetooth.print("$$$"); // Enter command mode
delay(100); // Short delay, wait for the Mate to send back CMD
bluetooth.println("U,9600,N"); // Temporarily Change the baudrate to 9600, no parity
// 115200 can be too fast at times for NewSoftSerial to relay the data reliably
Replace to this code to read value and print on serial monitor
#include <SoftwareSerial.h>
char ReadFromBT;
SoftwareSerial mySerial(2, 3); // RX, TX
void setup()
{
// Open serial communications and wait for port to open:
Serial.begin(9600);
Serial.println("Goodnight moon!");
// set the data rate for the SoftwareSerial port
mySerial.begin(9600);
mySerial.println("Hello, world?");
}
void loop() // run over and over
{
if (mySerial.available())
ReadFromBT = mySerial.read();
Serial.write(ReadFromBT);
delay(500);
if (Serial.available())
mySerial.write(Serial.read());
}
Result
That takes care of the Arduino side of things. The Android bits are little bit tougher.
The Android project we are going to write is going to have to do a few things:
- Open a bluetooth connection
- Send data
- Listen for incoming data
- Close the connection