top of page
Writer's pictureShubham Ubale

HC-05 Bluetooth Module Interfacing with LPC2148

Introduction



HC-05 is a Bluetooth device used for wireless communication. It works on serial communication (UART).

  • It is a 6-pin module.

  • The device can be used in 2 modes; data mode and command mode.

  • The data mode is used for data transfer between devices whereas command mode is used for changing the settings of the Bluetooth module.

  • AT commands are required in command mode.

  • The module works on 5V or 3.3V. It has an onboard 5V to 3.3V regulator.

  • As HC-05 Bluetooth module has 3.3 V level for RX/TX and the microcontroller can detect 3.3 V level, so, no need to shift transmit level of the HC-05 module. But we need to shift the transmit voltage level from the microcontroller to RX of HC-05 module.

For more information about HC-05 Bluetooth module and how to use it, refer the topic Bluetooth module HC-05 in the sensors and modules section.

For information on UART in LPC2148 and how to use it, refer the topic UART in LPC2148 in the ARM7-LPC2148 inside section.

 

Interfacing Diagram

Interfacing HC-05 Bluetooth Module with LPC2148

 

Note : Default Bluetooth name of the device is “HC-05” and default PIN (password) for connection is either “0000” or “1234”.

 

Example

Let’s develop a small application in which we can control LED (ON-OFF) through a smartphone.

This is done by interfacing LPC2148 with HC-05 Bluetooth module. Data from/to HC-05 is received/transmitted serially by LPC2148.

 

In this application when 1 is sent from the smartphone, LED will turn ON. If 0 is sent, LED will turn OFF. If received data is other than 1 or 0, it will return a message to the smartphone that proper option needs to be selected.

 

Download and install a Bluetooth terminal application on your phone and use it to connect to the HC-05 Bluetooth module.

Data is sent from the Smartphone using the Bluetooth terminal application.

Note :  Make sure that \r and \n are not sent along with data sent by deselecting the \r and \n options in the settings of Bluetooth terminal. If \r and/or \n are sent along with 1/0, you will get Select Proper Option output along with LED ON/OFF on the terminal.

 

Programming Steps

  • Initialize UART0

  • Configure a pin (here we have used P0.4) as output for LED

  • Read data from received from Bluetooth

  • Take decision according to data received ( 1 - ON, 0 - OFF, anything else – Select proper option)

 

Program 

/*
  HC-05 bluetooth interfacing with LPC2148(ARM7)
  http://www.electronicwings.com/arm7/hc-05-bluetooth-module-interfacing-with-lpc2148
*/

#include <lpc214x.h>
#include <stdint.h>

void delay_ms(uint16_t j)
{
    uint16_t x,i;
	for(i=0;i<j;i++)
	{
    for(x=0; x<6000; x++);    /* loop to generate 1 milisecond delay with Cclk = 60MHz */
	}
}

void UART0_init(void)
{
	PINSEL0 = PINSEL0 | 0x00000005;	/* Enable UART0 Rx0 and Tx0 pins of UART0 */
	U0LCR = 0x83;	/* DLAB = 1, 1 stop bit, 8-bit character length */
	U0DLM = 0x00;	/* For baud rate of 9600 with Pclk = 15MHz */
	U0DLL = 0x61;	/* We get these values of U0DLL and U0DLM from formula */
	U0LCR = 0x03; /* DLAB = 0 */
}

void UART0_TxChar(char ch) /* A function to send a byte on UART0 */
{
	U0THR = ch;
	while( (U0LSR & 0x40) == 0 );	/* Wait till THRE bit becomes 1 which tells that transmission is completed */
}

void UART0_SendString(char* str) /* A function to send string on UART0 */
{
	uint8_t i = 0;
	while( str[i] != '\0' )
	{
		UART0_TxChar(str[i]);
		i++;
	}
}

unsigned char UART0_RxChar(void) /* A function to receive a byte on UART0 */
{
	while( (U0LSR & 0x01) == 0);	/* Wait till RDR bit becomes 1 which tells that receiver contains valid data */
		return U0RBR;
}

int main (void)
{
	char data_in;
	UART0_init();
	IO0DIR = IO0DIR | 0x00000010;	/* Configure P0.4 as output */
	while(1)
	{
		data_in = UART0_RxChar();	/* Receive data from bluetooth */
		if ( data_in == '1' )	/* If data received is 1 */
		{
			IO0PIN = ( IO0PIN | 0x00000010 );
			UART0_SendString("LED ON\n");
		}
		else if ( data_in == '0' )	/* If data received is 0 */
		{
			IO0PIN = ( IO0PIN & 0xFFFFFFEF );
			UART0_SendString("LED OFF\n");
		}
		else
			UART0_SendString("Select Proper Option\n");
	}
}

 

0 views0 comments

コメント


bottom of page