You are viewing an older revision! See the latest version

Bluetooth Android Controlled MBED

Remote control MBED applications using Bluetooth as wireless protocol

There have been several blogs on how to communicate with MBED using a Bluetooth module (HC-05 ) module. I will try to bring all the information on one page from android application development to firmware on MBED. Hope this helps :)

Ingredients of the experiment

Connecting HC05 with MBED

Pin- HC05Pin-MBED
1-TxP10 - Rx
2 - RxP9 - Tx
12 - 3.3VVout - 3.3V
13 - GNDGND
31 - PIO8--
32 - PIO9- -
34 - PIO11GND or 3.3V

Hardware

Building Android App

Main Screen

There are 4 buttons which are by default assigned values as follows .

ButtonAssigned Value
Button#149
Button#250
Button#351
Button#452

The assigned value is sent once and is seen in "send" box ! The values assigned to button#x can be modified by updating the text box at the bottom of the application .

/media/uploads/prabhuvd/application_snapshot.jpg

Button Logic

/media/uploads/prabhuvd/button_logic.png Finally the button logic logic is same for all the four buttons , the data is read from the text box and sent over bluetooth , the data is entered in italic .csv format bold 11,22,33 or simply bold 11 for a single byte .

The text box is updated !! Followed , by the send operation , one byte of data (length byte) is read and indicates the total byte that will be sent by MBED . Once the length byte is received , the bluetooth module reads so many bytes of information.

LengthByte 1Byte 2Byte 3Byte 4.....
n11223344..n bytes

Check out the video

Firmware for MBED

include the mbed library with this snippet

#include "mbed.h"

Serial device(p9, p10);
 
DigitalOut led1(LED1);
DigitalOut led2(LED2);
DigitalOut led3(LED3);
DigitalOut led4(LED4);
 

void send_bytes(uint8_t len ,uint8_t data)
{
    device.putc(len);
    while(len>0) {
        device.putc(data);
        len--;
    }
}

int main()
{
    unsigned char rx;
    device.baud(9600);
    while(1) {

        if(device.readable()) {
            rx =device.getc();
            pc.printf("\n Received %x \nSending : %x",rx,rx);
            switch (rx) {
                case 49:
                    /* Turn on LED#1 on receiving 49 */
                    led1 = !led1;
                    send_bytes(1,rx);
                    break;
                case 50:
                   /* Turn on LED#2 on receiving 50 and send 2 bytes of acknowledgment */
                    send_bytes(2,rx);
                    led2 = !led2;
                    break;
                case 51:
                   /* Turn on LED#3  on receiving 51 and send 3 bytes of acknowledgment */
                    led3 = !led3;
                    send_bytes(3,rx);
                    break;
                case 52:
                     /* Turn on LED#4  on receiving 53 and send 4 bytes of acknowledgment */
                    led4 = !led4;
                    send_bytes(4,rx);
                    break;
            }

        }
    }
}


All wikipages