在本教程中,讓我們學習如何將HC-05藍牙模塊與AVR ATmega8微控制器連接。我們將通過藍牙模塊在Android移動和Atmega8之間建立通信,藍牙模塊通過UART串行通信協(xié)議進行。在這個項目中,我們將使用智能手機的藍牙控制LED。
所需材料:
AVR Atmega8
HC-05 藍牙模塊
發(fā)光二極管
10 針 FRC 電纜
跳線
面包板
使用的軟件:
我們將使用CodeVisionAVR軟件編寫代碼,并使用SinaProg軟件使用USBASP程序員將代碼上傳到Atmega8。
藍牙模塊 HC-06:
藍牙可以在以下兩種模式下運行:
命令模式
操作模式
在命令模式下,我們將能夠配置藍牙屬性,例如藍牙信號的名稱,密碼,操作波特率等。操作模式是我們能夠在PIC微控制器和藍牙模塊之間發(fā)送和接收數(shù)據(jù)的模式。因此,在本教程中,我們將只玩弄操作模式。命令模式將保留默認設置。設備名稱將是HC-05(我正在使用HC-06),密碼將是0000或1234,最重要的是,所有藍牙模塊的默認波特率為9600。
模塊采用 5V 電源供電,信號引腳工作在 3.3V,因此模塊本身存在一個 3.3V 穩(wěn)壓器。因此,我們不必擔心。在六個引腳中,只有四個將在操作模式下使用。引腳連接表如下所示
S.No | HC-05/HC-06 上的引腳 | MCU 上的引腳名稱 | PIC 中的引腳編號 |
1 | Vcc | Vdd | 31圣針 |
2 | Vcc | 格德 | 32德·針 |
3 | 德克薩斯 | RC6/Tx/CK | 25千針 |
4 | 接收 | RC7/Rx/DT | 26千針 |
5 | 州 | 數(shù)控 | 數(shù)控 |
6 | 英文(使能) | 數(shù)控 | 數(shù)控 |
使用 CodeVision 為 Atmega 8 創(chuàng)建項目:
安裝這些軟件后,請按照以下步驟創(chuàng)建項目并編寫代碼:
第 1 步。打開 CodeVision 單擊“文件 -> 新建”-> 項目。將出現(xiàn)確認對話框。點擊是
第 2 步。代碼向?qū)⒋蜷_。單擊第一個選項,即 AT90,然后單擊確定。
第 3 步。選擇您的微控制器芯片,在這里我們將采用如圖所示的Atmega8。
第 4 步。單擊端口。在我們的項目中,我們將使用端口 C4 和 C5 進行 LED 接口。因此,通過單擊將位 4 和位 5 作為輸出。如下圖所示:
第5步。我們將使用 USART 用于 Rx 和 Tx。因此,單擊USART選項,然后單擊接收器選項,然后保持原樣。
第 6 步。單擊程序 - >生成,保存并退出。現(xiàn)在,我們一半以上的工作已經(jīng)完成
步驟 7.在桌面上創(chuàng)建一個新文件夾,以便我們的文件保留在文件夾中,否則我們將分散在整個桌面窗口中。根據(jù)需要命名您的文件夾,我建議使用相同的名稱來保存程序文件。
我們將有一個接一個的對話框來保存文件。
對保存第一個對話框后將出現(xiàn)的其他兩個對話框執(zhí)行相同的操作。
現(xiàn)在,您的工作區(qū)如下所示。
我們的大部分工作都是在向?qū)У膸椭峦瓿傻摹,F(xiàn)在, 我們只需要編寫幾行代碼來連接藍牙模塊并控制 LED.
電路圖:
下面給出了藍牙HC-05與AVR接口的電路圖。
將FRC電纜的一端連接到USBASP編程器,另一端將連接到微控制器的SPI引腳,如下所述:
FRC 母連接器引腳 1 -> 引腳 17,Atmega8 的 MOSI
引腳 2 連接到 atmega8 的 Vcc,即引腳 7
引腳 5 連接到 atmega8 的復位,即引腳 1
引腳 7 連接到 atmega8 的 SCK,即引腳 19
引腳 9 連接到 atmega8 的 MISO,即引腳 18
引腳 8 連接到 atmega8 的 GND,即引腳 8
按照電路圖連接試驗板上的其余組件。
代碼和說明:
文章末尾給出了帶有演示視頻的完整 AVR 代碼。
在這里,我們在void main函數(shù)中聲明了一個變量,用于存儲來自藍牙模塊的傳入字符。
#include
// Declare your global variables here
// Standard Input/Output functions
#include
void main(void)
{
char var; // Declare your local variables here
其余代碼很簡單,很容易理解。現(xiàn)在,進入代碼的最后一行,您將在其中找到一個while循環(huán)。我們的主代碼將在此循環(huán)中。在這里,我們不斷檢查來自藍牙模塊的傳入字符并相應地打開或關(guān)閉 LED.
while (1)
{
scanf("%c",&var); //this function is to used to check any character coming from our android app .
if (var == 'a') // We will send ‘a(chǎn)’ from Bluetooth Terminal to ON the LED and ‘b’ to OFF the LED
{
PORTC.5 = 1;
PORTC.4 = 0;
}
if (var == 'b')
{
PORTC.5 = 0;
PORTC.4 = 0;
}
}
我們的代碼完成了。現(xiàn)在,我們必須構(gòu)建我們的項目。單擊“構(gòu)建項目”圖標,如下所示。
生成項目后,將在調(diào)試> Exe 文件夾中生成一個十六進制文件,該文件可以在您之前為保存項目而創(chuàng)建的文件夾中找到。我們將使用此十六進制文件通過Sinaprog軟件上傳到atmega8中。
使用 Sinaprog 將代碼上傳到 Atmega 8:
我們將使用Sinaprog上傳上面生成的十六進制文件,因此打開它并從設備下拉菜單中選擇 Atmega8。從調(diào)試> Exe 文件夾中選擇十六進制文件,如下所示。
現(xiàn)在,單擊程序。
您的微控制器已編程?,F(xiàn)在,我們需要一個Android應用程序來連接我們的模塊。我們將使用“藍牙終端應用程序”來控制LED燈。
安卓應用程序,用于使用 AVR 控制 LED:
我們將使用智能手機中的“藍牙終端應用程序”與另一端的HC-05通話以控制LED燈。
您可以通過將電路插入PC來使用相同的usbap為電路供電,也可以將外部5V(不超過5!!!!!)施加到Atmega8 Vcc引腳。
安裝后.打開應用程序并將其與藍牙模塊連接(HC-05,默認密碼為1234)。
現(xiàn)在,發(fā)送“a”,看到 LED 會發(fā)光。發(fā)送“b”,指示燈將熄滅。
因此,現(xiàn)在通過發(fā)送字符“a”和“b”,您可以使用智能手機無線控制 LED。如果您將語音鍵盤與藍牙應用程序一起使用,那么您甚至不需要輸入字符“a”和“b”,您只需說出它們,就可以使用語音控制 LED。
#include
#include
void main(void)
{
char var;
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRA=(0<
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTA=(0<
// Port B initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRB=(0<
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTB=(0<
// Port C initialization
// Function: Bit7=In Bit6=In Bit5=Out Bit4=Out Bit3=In Bit2=In Bit1=In Bit0=In
DDRC=(0<
// State: Bit7=T Bit6=T Bit5=0 Bit4=0 Bit3=T Bit2=T Bit1=T Bit0=T
PORTC=(0<
// Port D initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In
DDRD=(0<
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T
PORTD=(0<
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=(0<
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Disconnected
// OC1B output: Disconnected
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=(0<
TCCR1B=(0<
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0<
TCNT2=0x00;
OCR2=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=(0<
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=(0<
MCUCSR=(0<
UCSRB=(0<
UCSRC=(1<
UBRRH=0x00;
UBRRL=0x33;
// Analog Comparator initialization
// Analog Comparator: Off
// The Analog Comparator's positive input is
// connected to the AIN0 pin
// The Analog Comparator's negative input is
// connected to the AIN1 pin
ACSR=(1<
SFIOR=(0<
// SPI initialization
// SPI disabled
SPCR=(0<
// TWI initialization
// TWI disabled
TWCR=(0<
while (1)
{
scanf("%c",&var);
if (var == 'a')
{
PORTC.5 = 1;
PORTC.4 = 0;
}
if (var == 'b')
{
PORTC.5 = 0;
PORTC.4 = 0;
}
}
}
-
微控制器
+關(guān)注
關(guān)注
48文章
7455瀏覽量
150858 -
ATmega8
+關(guān)注
關(guān)注
4文章
106瀏覽量
49913 -
藍牙模塊
+關(guān)注
關(guān)注
30文章
561瀏覽量
55652 -
HC-05
+關(guān)注
關(guān)注
0文章
34瀏覽量
16900
發(fā)布評論請先 登錄
相關(guān)推薦
評論