0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何將GSM模與ATmega16連接實(shí)現(xiàn)發(fā)送和接收消息

科技觀察員 ? 來(lái)源:circuitdigest ? 作者:里沙布·耆那教 ? 2022-11-10 15:57 ? 次閱讀

GSM模塊使用起來(lái)很有趣,特別是當(dāng)我們的項(xiàng)目需要遠(yuǎn)程訪問(wèn)時(shí)。這些模塊可以執(zhí)行我們普通手機(jī)可以執(zhí)行的所有操作,例如撥打/接聽(tīng)電話,發(fā)送/接收短信,使用GPRS連接到互聯(lián)網(wǎng)等。您還可以將普通麥克風(fēng)和揚(yáng)聲器連接到此模塊,并在移動(dòng)通話中交談。如果它可以與微控制器連接,這將為許多創(chuàng)意項(xiàng)目打開(kāi)大門(mén)。因此,在本教程中,我們將學(xué)習(xí)如何將GSM模塊(SIM900A)與AVR微控制器ATmega16連接,并通過(guò)使用GSM模塊發(fā)送和接收消息來(lái)演示它。

所需材料

阿特梅加16

GSM 模塊(SIM900 或任何其他)

液晶顯示屏

按鈕

10k 電阻器,電位計(jì)

連接線

12V 適配器

USBasp 編程

10 針 FRC 電纜

使用的軟件

我們將使用CodeVisionAVR軟件編寫(xiě)代碼,并使用SinaProg軟件使用USBASP編程器將代碼上傳到Atmega16。

在進(jìn)入原理圖和代碼之前,我們了解GSM模塊及其工作原理。

GSM 模塊

poYBAGNsrvyAI7JoAAD9m9py3ck983.JPG

即使沒(méi)有任何微控制器,也可以通過(guò)使用AT命令模式使用GSM模塊。如上所示,GSM模塊帶有USART適配器,可以使用MAX232模塊直接連接到計(jì)算機(jī),或者Tx和Rx引腳可用于將其連接到微控制器。您還可以注意到可以連接麥克風(fēng)或揚(yáng)聲器的其他引腳,如MIC +,MIC-,SP+,SP-等。該模塊可以通過(guò)普通的直流桶形插孔由 12V 適配器供電

將SIM卡插入模塊插槽并打開(kāi)電源,您應(yīng)該注意到電源指示燈亮起。現(xiàn)在等待一分鐘左右,您應(yīng)該會(huì)看到紅色(或任何其他顏色)LED 每 3 秒閃爍一次。這意味著您的模塊能夠與您的SIM卡建立連接?,F(xiàn)在,您可以繼續(xù)將模塊與手機(jī)或任何微控制器連接。

使用 AT 命令與 GSM 模塊通信

正如您可能已經(jīng)猜到的那樣,GSM模塊可以通過(guò)串行通信進(jìn)行通信,并且只能理解一種語(yǔ)言,即“AT命令”。無(wú)論您想告訴或詢問(wèn)GSM模塊什么,都只能通過(guò)AT命令進(jìn)行。例如,如果您想知道模塊是否處于活動(dòng)狀態(tài)。您應(yīng)該詢問(wèn)(發(fā)送)像“AT”這樣的命令,您的模塊將回答“確定”。

這些AT命令在其數(shù)據(jù)手冊(cè)中有很好的解釋,可以在其官方數(shù)據(jù)手冊(cè)中找到。好!好!這是一份 271 頁(yè)的數(shù)據(jù)表,您可能需要幾天時(shí)間才能通讀它們。因此,我在下面給出了一些最重要的AT命令,以便您盡快啟動(dòng)并運(yùn)行它。

回復(fù)“確定”進(jìn)行確認(rèn)
AT+CPIN? 檢查信號(hào)質(zhì)量
AT+COPS? 查找服務(wù)提供商名稱
ATD96XXXXXXXX; 撥打特定號(hào)碼,以分號(hào)結(jié)尾
AT+CNUM 查找SIM卡的數(shù)量(可能不適用于某些SIM卡)
ATA 接聽(tīng)來(lái)電
阿特 掛斷當(dāng)前來(lái)電
AT+COLP 顯示來(lái)電號(hào)碼
AT+VTS=(數(shù)字) 發(fā)送 DTMF 編號(hào)。您可以使用移動(dòng)鍵盤(pán)上的任意數(shù)字(數(shù)字)
AT+CMGR AT+CMGR=1 在第一個(gè)位置讀取消息
AT+CMGD=1 刪除第一個(gè)位置的消息
AT+CMGDA=“DEL ALL” 從SIM卡中刪除所有郵件
AT+CMGL=“ALL” 讀取來(lái)自 SIM 卡的所有消息
AT+CMGF=1 設(shè)置短信配置?!?”表示純文本模式
AT+CMGS = “+91 968837XXXX”
>電路摘要文本
在此處向特定號(hào)碼發(fā)送短信 968837XXXX。當(dāng)您看到“>”時(shí),請(qǐng)開(kāi)始輸入文本。按 Ctrl+Z 發(fā)送文本。
AT+CGATT? 檢查SIM卡上的互聯(lián)網(wǎng)連接
AT+CIPSHUT 關(guān)閉TCP連接,意味著斷開(kāi)互聯(lián)網(wǎng)
AT+CSTT = “APN”,“用戶名”,“通行證” 使用您的 APN 和通行密鑰連接到 GPRS??梢詮?a href="http://srfitnesspt.com/v/tag/1722/" target="_blank">網(wǎng)絡(luò)提供商處獲得。
AT+CIICR 檢查SIM卡是否有數(shù)據(jù)包
AT+CIFSR 獲取 SIM 卡網(wǎng)絡(luò)的 IP
AT+CIPSTART = “TCP”,“服務(wù)器 IP”,“端口 用于設(shè)置 TCP IP 連接
AT+CIPSEND 此命令用于將數(shù)據(jù)發(fā)送到服務(wù)器

在這里,我們將使用 AT+CMGF 和 AT+CMGS命令來(lái)發(fā)送消息。

如果您已將GSM模塊與Arduino一起使用,則在接收消息時(shí)可以使用+ CMT:命令在串行監(jiān)視器上查看手機(jī)號(hào)碼和短信。短信出現(xiàn)在第二行,如圖所示。

pYYBAGNsrv6AOhN6AABdEJ8Vowg444.png

我們將掃描此 +CMT: 命令以檢查消息是否可用。

ATMega16 GSM 模塊接口電路圖

pYYBAGNsrwCAYSBvAADMzX0IwC0024.png

連接將如下所示

GSM模塊的Tx和Rx分別到Atmega16的Rx(引腳14)和Tx(引腳15)。

將按鈕按鈕推至 PD5(引腳 19)和 PD6(引腳 20)。

液晶連接:

RS - PA 0

R/W - PA1

英文 - PA2

D4 - PA4

D5 - PA5

D6 - PA6

D7 - PA7

poYBAGNsrwKAOo_uAAF9-x-Dl28242.jpg

使用 CodeVision 為 ATmega16 創(chuàng)建項(xiàng)目

安裝CodeVisionAVR和SinaProg軟件后,請(qǐng)按照以下步驟創(chuàng)建項(xiàng)目并編寫(xiě)代碼:

已上傳

第 1 步。打開(kāi) CodeVision 單擊“文件 -> 新建”-> 項(xiàng)目。將出現(xiàn)確認(rèn)對(duì)話框。點(diǎn)擊是

pYYBAGNsrwOAWYYmAACSmU93eSM309.png

第 2 步。代碼向?qū)⒋蜷_(kāi)。單擊第一個(gè)選項(xiàng),即 AT90,然后單擊確定。

poYBAGNsrwWAMrP8AAC8vZSNJSE599.png

第 3 步:-選擇您的微控制器芯片,在這里我們將采用Atmega16L,如圖所示。

poYBAGNsrwuAHwELAACn3AGlTK4886.png

第 4 步:-點(diǎn)擊 USART。選擇 接收器 和 發(fā)射器 通過(guò)單擊它。如下圖所示:

poYBAGNsrwyABNKAAACQQjvlETg957.png

第 5 步:-單擊字母數(shù)字 LCD,然后選擇啟用字母數(shù)字 LCD 支持。

pYYBAGNsrw2ASAeNAACCgPtnOKs284.png

第 6 步:-單擊程序 - >生成,保存并退出?,F(xiàn)在,我們一半以上的工作已經(jīng)完成

poYBAGNsrw-AKrSUAACKBkwvfRU197.png

第 7 步:-在桌面上創(chuàng)建一個(gè)新文件夾,以便我們的文件保留在文件夾中,否則我們將分散在整個(gè)桌面窗口中。根據(jù)需要命名您的文件夾,我建議使用相同的名稱來(lái)保存程序文件。

我們將有一個(gè)接一個(gè)的三個(gè)對(duì)話框來(lái)保存文件。

poYBAGNsrxCAL9wcAACOz4VNrzg473.png

對(duì)保存第一個(gè)對(duì)話框后將出現(xiàn)的其他兩個(gè)對(duì)話框執(zhí)行相同的操作。

現(xiàn)在,您的工作區(qū)如下所示。

poYBAGNsrxOABtS1AADie_Din-E288.png

我們的大部分工作都是在向?qū)У膸椭峦瓿傻摹,F(xiàn)在,我們只需要為 GSM 編寫(xiě)代碼。

代碼和說(shuō)明

創(chuàng)建項(xiàng)目后,所有頭文件都會(huì)自動(dòng)附加,您只需包含 delay.h 頭文件并聲明所有變量。本教程末尾給出了完整的代碼。

#include

// Alphanumeric LCD functions

#include

#include

// Standard Input/Output functions

#include

unsigned char received_value(void);

unsigned char received_data,a,b,c;

unsigned int z;

unsigned char msg[15];

unsigned char cmd_1[]={"AT"};

unsigned char cmd_2[]={"AT+CMGF=1"};

unsigned char cmd_3[]={"AT+CMGS="};

unsigned char cmd_4[]={"Call me"};

unsigned char cmd_5[]={"Receiver mobile number"};

創(chuàng)建一個(gè)函數(shù)以從 UDR 寄存器接收數(shù)據(jù)。此函數(shù)將返回接收到的數(shù)據(jù)。

unsigned char received_value(void)

{

while(!(UCSRA&(1<

{

received_data=UDR;

return received_data;

}

}

來(lái)到while循環(huán),在其中我們創(chuàng)建兩個(gè)if語(yǔ)句,一個(gè)用于發(fā)送消息,另一個(gè)用于接收。發(fā)送按鈕與 ATmega 的 PIND6 連接,接收消息按鈕與 PIND5 連接。

當(dāng)首先按下 PIND6(發(fā)送按鈕)時(shí),如果語(yǔ)句將執(zhí)行,并且所有發(fā)送消息的命令將逐個(gè)執(zhí)行。

while(1){

// lcd_clear();

lcd_putsf("Send->bttn 1");

lcd_gotoxy(0,1);

lcd_putsf("Receive->buttn 2");

if(PIND.6 == 1){

lcd_clear();

lcd_gotoxy(0,0);

lcd_putsf("Sending Msg...");

for(z=0;cmd_1[z]!='';z++)

{

UDR = cmd_1[z];

delay_ms(100);

}

UDR = ('r');

delay_ms(500);

for(z=0;cmd_2[z]!='';z++)

{

UDR = cmd_2[z];

delay_ms(100);

}

… ..

如果按下接收消息按鈕,而 (b!='+') 循環(huán)將檢查 CMT 命令是否存在。如果存在,第二個(gè)while循環(huán)將執(zhí)行并轉(zhuǎn)到命令的第二行,并在LCD上逐個(gè)打印消息。

while(PIND.5 == 1){

lcd_clear();

lcd_gotoxy(0,0);

lcd_putsf("Receiving Msg...");

b= received_value ();

while (b!='+') {

b= received_value ();

}

b= received_value ();

if(b=='C')

{

b= received_value ();

..

此循環(huán)將程序帶到第二行命令并將消息存儲(chǔ)在數(shù)組中。

while (b!=0x0a)

{

b= received_value ();

}

for(b=0;b<3;b++) ? {

c=received_value();

msg[b]=c;

}

..

..

此 for 循環(huán)用于在 LCD 上顯示消息。

for(z=0;z<3;z++)

{

a=msg[z];

lcd_putchar(a); // PRINT IN lcd

delay_ms(10);

}

下面給出了帶有演示視頻的完整代碼,現(xiàn)在我們必須構(gòu)建我們的項(xiàng)目。

構(gòu)建項(xiàng)目

單擊“構(gòu)建項(xiàng)目”圖標(biāo),如下所示。

poYBAGNsrxWAPvo4AACrYuMM7gU615.png

生成項(xiàng)目后,將在調(diào)試> Exe文件夾中生成一個(gè)十六進(jìn)制文件,該文件可以在您之前為保存項(xiàng)目而創(chuàng)建的文件夾中找到。我們將使用此十六進(jìn)制文件通過(guò)Sinaprog軟件上傳到Atmega16中。

將代碼上傳到Atmega16

根據(jù)給定的圖表連接電路以編程Atmega16。將FRC電纜的一端連接到USBASP編程器,另一端將連接到微控制器的SPI引腳,如下所述:

poYBAGNsrxiAIFI2AABxP4nGW2o992.png

FRC 母連接器引腳 1 -> 引腳 6,Atmega16 的 MOSI

引腳 2 連接到 atmega16 的 Vcc,即引腳 10

引腳 5 連接到 atmega16 的復(fù)位,即引腳 9

引腳 7 連接到 atmega16 的 SCK,即引腳 8

引腳 9 連接到 atmega16 的 MISO,即引腳 7

引腳 8 連接到 atmega16 的 GND,即引腳 11

我們將使用 Sinaprog 上傳上面生成的十六進(jìn)制文件,因此打開(kāi)它并從設(shè)備下拉菜單中選擇 Atmega16。從調(diào)試> Exe 文件夾中選擇十六進(jìn)制文件,如下所示。

pYYBAGNsrxmATcjDAABJuWZ3p6s729.png

現(xiàn)在,單擊程序,您的代碼將在ATmega16微控制器中刻錄。

您已完成,您的微控制器已編程。只需按下按鈕即可從GSM和ATmega16微控制器發(fā)送和接收消息。

#include

// Alphanumeric LCD functions

#include

#include

// Standard Input/Output functions

#include

unsigned char received_value(void);

unsigned char received_data,a,b,c;

unsigned int z;

unsigned char msg[15];

unsigned char cmd_1[]={"AT"};

unsigned char cmd_2[]={"AT+CMGF=1"};

unsigned char cmd_3[]={"AT+CMGS="};

unsigned char cmd_4[]={"Call me"};

unsigned char cmd_5[]={"Receiver mobile number"};


void main(void)

{

// 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=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In

DDRC=(0<
// State: Bit7=T Bit6=T Bit5=T Bit4=T 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<

// USART initialization

// Communication Parameters: 8 Data, 1 Stop, No Parity

// USART Receiver: On

// USART Transmitter: On

// USART Mode: Asynchronous

// USART Baud Rate: 9600

UCSRA=(0<
UCSRB=(0<
UCSRC=(1<
UBRRH=0x00;

UBRRL=0x33;


lcd_init(16);

lcd_clear();

lcd_gotoxy(0,0);

lcd_putsf("Welcome...");

delay_ms(2000);

lcd_clear();

lcd_putsf("Initialising GSM");

delay_ms(4000);

lcd_clear();


while(1){

lcd_putsf("Send->bttn 1");

lcd_gotoxy(0,1);

lcd_putsf("Receive->buttn 2");


if(PIND.6 == 1){

lcd_clear();

lcd_gotoxy(0,0);

lcd_putsf("Sending Msg...");

for(z=0;cmd_1[z]!='';z++)

{

UDR = cmd_1[z];

delay_ms(100);

}

UDR = ('r');

delay_ms(500);

for(z=0;cmd_2[z]!='';z++)

{

UDR = cmd_2[z];

delay_ms(100);

}

UDR = ('r');

delay_ms(500);

for(z=0;cmd_3[z]!='';z++)

{

UDR = cmd_3[z];

delay_ms(100);

}

UDR = ('"');

delay_ms(100);

for(z=0;cmd_5[z]!='';z++)

{

UDR = cmd_5[z];

delay_ms(100);

}

UDR = ('"');

delay_ms(100);

UDR = ('r');

delay_ms(500);

for(z=0;cmd_4[z]!='';z++)

{

UDR = cmd_4[z];

delay_ms(100);

}

UDR = (26); // ctrlZ-> to send the message

delay_ms(500);

lcd_clear();

lcd_gotoxy(0,0);

lcd_putsf("Message Sent.");

delay_ms(1000);

lcd_clear();

}


while(PIND.5 == 1){

lcd_clear();

lcd_gotoxy(0,0);

lcd_putsf("Receiving Msg...");

b= received_value ();

while (b!='+') // infinite loop when + equal to +. otherwise until the loop infinite

{

b= received_value ();

}

b= received_value ();

if(b=='C')

{

b= received_value ();

if(b=='M')

{

b= received_value ();

if(b=='T')

{

b= received_value ();

if(b==':')

{

b= received_value ();

while (b!=0x0a) // waiting upto next line if no means till loop infinte

{

b= received_value ();

}

for(b=0;b<3;b++) {

c= received_value ();

msg[b]=c;

}

lcd_clear();


for(z=0;z<3;z++)

{

a=msg[z];

lcd_putchar(a); // PRINT IN lcd

delay_ms(10);

}

}

}

}

}

delay_ms(3000);

lcd_clear();

}

}

}

unsigned char received_value(void)

{

while(!(UCSRA&(1<


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • ATmega16
    +關(guān)注

    關(guān)注

    5

    文章

    154

    瀏覽量

    45740
  • GSM
    GSM
    +關(guān)注

    關(guān)注

    9

    文章

    835

    瀏覽量

    122721
  • SIM900A
    +關(guān)注

    關(guān)注

    3

    文章

    54

    瀏覽量

    35206
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何將16x2 LCD與Atmega16 AVR連接并顯示簡(jiǎn)單的歡迎消息

    在本教程中,我們將了解如何將 16x2 LCD 與 Atmega16 AVR 微控制器連接并顯示簡(jiǎn)單的歡迎消息。
    的頭像 發(fā)表于 11-11 17:29 ?3028次閱讀
    <b class='flag-5'>如何將</b><b class='flag-5'>16</b>x2 LCD與<b class='flag-5'>Atmega16</b> AVR<b class='flag-5'>連接</b>并顯示簡(jiǎn)單的歡迎消息

    想在atmega16單片機(jī)上加一個(gè)GSM模塊,請(qǐng)問(wèn)需要選擇哪種GSM模塊???

    `想在atmega16單片機(jī)上加一個(gè)GSM模塊,請(qǐng)問(wèn)需要選擇哪種GSM模塊???如果可以請(qǐng)具體到型號(hào)什么的,跪謝大家?。?!`
    發(fā)表于 04-07 22:27

    如何使用AVR微控制器Atmega16連接伺服電機(jī)的方法

    文章中,我們將使用Atmel Studio 7.0Micro Servo Motor伺服電機(jī)與Atmega16 AVR微控制器連接起來(lái)。伺服電機(jī)的額定工作電壓為4.8-6V。我們可以通過(guò)應(yīng)用脈沖或P...
    發(fā)表于 06-28 06:28

    使用ATMega16單片機(jī)實(shí)現(xiàn)數(shù)碼管00-99顯示 精選資料分享

    使用ATMega16單片機(jī)實(shí)現(xiàn)數(shù)碼管00-99顯示最近學(xué)習(xí)了ATMega16單片機(jī)的中斷系統(tǒng),要求完成單片機(jī)外部中斷的實(shí)踐。利用Mega16單片機(jī)的外部中斷控制數(shù)碼管計(jì)數(shù)顯示。要求:1
    發(fā)表于 07-14 06:46

    如何利用ATmega16實(shí)現(xiàn)KEY點(diǎn)燈?

    如何利用ATmega16實(shí)現(xiàn)KEY點(diǎn)燈?
    發(fā)表于 10-29 07:22

    如何利用atmega16實(shí)現(xiàn)電子鬧鐘的設(shè)計(jì)?

    如何利用atmega16實(shí)現(xiàn)電子鬧鐘的設(shè)計(jì)?
    發(fā)表于 01-24 06:13

    關(guān)于ATmega16知識(shí)教程教程分享

    ATmega16教程11-4
    的頭像 發(fā)表于 07-04 09:47 ?4610次閱讀

    ATmega16教程:鍵盤(pán)原理與應(yīng)用(1)

    ATmega16教程5-1
    的頭像 發(fā)表于 07-11 00:21 ?3078次閱讀

    ATmega16教程:鍵盤(pán)原理與應(yīng)用(2)

    ATmega16教程5-2
    的頭像 發(fā)表于 07-11 00:18 ?3243次閱讀

    ATmega16教程視頻講解(6)

    ATmega16教程第6講
    的頭像 發(fā)表于 07-11 00:25 ?2970次閱讀

    ATmega16教程:DA,AD (1)

    ATmega16教程8-1
    的頭像 發(fā)表于 07-11 00:46 ?4500次閱讀

    ATmega16教程:DA,AD (2)

    ATmega16教程8-2
    的頭像 發(fā)表于 07-11 00:49 ?3898次閱讀

    ATmega16教程:UART(2)

    ATmega16教程10-2
    的頭像 發(fā)表于 07-11 00:29 ?4002次閱讀

    ATmega16教程:UART (1)

    ATmega16教程10-1
    的頭像 發(fā)表于 07-11 00:22 ?4121次閱讀

    如何將16x2 LCD與Raspberry pi4連接

    電子發(fā)燒友網(wǎng)站提供《如何將16x2 LCD與Raspberry pi4連接.zip》資料免費(fèi)下載
    發(fā)表于 06-19 11:45 ?0次下載
    <b class='flag-5'>如何將</b><b class='flag-5'>16</b>x2 LCD與Raspberry pi4<b class='flag-5'>連接</b>