- 所需材料
- 使用的软件
- GSM模块
- 使用AT命令与GSM模块通讯
- ATMega16 GSM模块接口电路图
- 使用CodeVision为ATmega16创建项目
- 代码和解释
- 建立项目
- 将代码上传到Atmega16
GSM模块 非常有趣,特别是当我们的项目需要远程访问时。这些模块可以执行普通手机可以执行的所有操作,例如拨打/接听电话,发送/接收短信,使用GPRS连接到互联网等。您也可以将普通的麦克风和扬声器连接到此模块,然后在自己的设备上进行通话手机通话。如果可以与微控制器接口,这将为许多创意项目打开大门。因此,在本教程中,我们将学习如何 将GSM模块(SIM900A)与AVR微控制器ATmega16接口, 并通过使用GSM模块发送和接收消息来演示它。
所需材料
- Atmega16
- GSM模块(SIM900或其他任何模块)
- 液晶显示器
- 按按钮
- 10k电阻,电位计
- 连接线
- 12V适配器
- USBasp编程器
- 10针FRC电缆
使用的软件
我们将使用CodeVisionAVR软件编写我们的代码和SinaProg软件使用USBASP程序员上传我们的代码到ATmega16。
您可以从给定的链接下载这些软件:
CodeVisionAVR: http : //www.hpinfotech.ro/cvavr_download.html
SinaProg: http ://www.ablab.in/sinaprog-hex-file-downloader-software-to-download-code-to-avr-microcontroller/#inline_content
在研究原理图和代码之前,我们了解GSM模块及其工作原理。
GSM模块
通过使用AT命令模式,即使没有任何微控制器,也可以使用GSM模块。如上图所示,GSM模块带有USART适配器,可以通过使用MAX232模块直接将其连接到计算机,或者可以使用Tx和Rx引脚将其连接到微控制器。您还可以注意到可以连接麦克风或扬声器的其他引脚,例如MIC +,MIC-,SP +,SP-等。该模块可以通过普通的DC桶式插座由12V适配器供电。
将SIM卡插入模块的插槽中并打开电源,您会注意到电源LED亮起。现在等待一分钟左右,您应该会看到红色(或任何其他颜色)的LED每3秒闪烁一次。这意味着您的模块能够与SIM卡建立连接。现在,您可以继续将模块与Phone或任何微控制器连接。
您可以使用GSM模块构建许多很棒的项目,例如:
- 使用GSM和Arduino的无线公告板
- 使用Arduino和GSM模块的自动呼叫答录机
- 使用Arduino的基于GSM的家庭自动化
- PIR传感器和基于GSM的安全系统
还要在此处检查所有与GSM相关的项目。
使用AT命令与GSM模块通讯
您可能已经猜到了,GSM模块可以通过串行通信进行通信,并且只能理解一种语言,即“ AT命令”。无论您想告诉或询问GSM模块什么,都只能通过AT命令进行。例如,如果您想知道模块是否处于活动状态。您应该询问(发送)“ AT”之类的命令,模块将回答“ OK”。
这些AT命令在其数据表中已作了很好的解释,可以在其官方数据表中找到。好的!好的!它是一个271页的数据表,您可能需要花费数天才能通读它们。因此,我在下面给出了一些最重要的AT命令,以帮助您快速启动并运行。
在 |
用OK进行确认答复 |
AT + CPIN? |
检查信号质量 |
AT + COPS? |
查找服务提供商名称 |
ATD96XXXXXXXX; |
呼叫特定号码,以分号结尾 |
AT + CNUM |
查找SIM卡的号码(对于某些SIM卡可能不起作用) |
ATA |
接听来电 |
ATH |
挂断当前的来电 |
电话+电话 |
显示来电号码 |
AT + VTS =(数字) |
发送DTMF号码。您可以在移动键盘上使用任何数字作为(数字) |
AT + CMGR |
AT + CMGR = 1在第一个位置读取消息 |
AT + CMGD = 1 |
删除第一个位置的消息 |
AT + CMGDA =“全部删除” |
删除SIM中的所有消息 |
AT + CMGL =“全部” |
阅读所有来自SIM卡的消息 |
AT + CMGF = 1 |
设置短信配置。“ 1”表示纯文本模式 |
AT + CMGS =“ + 91 968837XXXX” > CircuitDigest文字
|
将短信发送到此处的特定号码968837XXXX。当您看到“>”时,开始输入文本。按Ctrl + Z发送文本。 |
AT + CGATT? |
检查SIM卡上的互联网连接 |
AT + CIPSHUT |
关闭TCP连接,意味着断开与Internet的连接 |
AT + CSTT =“ APN”,“用户名”,“通过” |
使用APN和Pass键连接到GPRS。可以从网络提供商处获得。 |
AT + CIICR |
检查SIM卡是否有数据包 |
AT + CIFSR |
获取SIM网络的IP |
AT + CIPSTART =“ TCP”,“服务器IP”,“端口” |
用于设置TCP IP连接 |
AT + CIPSEND |
此命令用于将数据发送到服务器 |
在这里,我们将使用AT + CMGF和AT + CMGS命令发送消息。
如果您已将GSM模块与Arduino一起使用,则在接收消息时可以使用+ CMT:命令在串行监视器上查看手机号码和短信。短信位于第二行,如图所示。
我们将扫描此+ CMT:命令以检查消息是否可用。
ATMega16 GSM模块接口电路图
连接如下
- GSM模块的Tx和Rx分别到Atmega16的Rx(Pin14)和Tx(Pin15)。
- 按下PD5(Pin19)和PD6(Pin20)的按钮。
- LCD连接:
- RS-PA 0
- 读/写-PA1
- ZH-PA2
- D4-PA4
- D5-PA5
- D6-PA6
- D7-PA7
使用CodeVision为ATmega16创建项目
安装完成后CodeVisionAVR 和 SinaProg软件, 按照下面的步骤来创建项目,并编写代码:
已上传
步骤1。打开CodeVision单击 File-> New- > Project 。确认对话框将出现。点击是
步骤2. CodeWizard将打开。单击第一个选项,即 AT90 ,然后单击确定。
步骤3:-选择您的微控制器芯片,在这里我们将使用Atmega16L,如图所示。
步骤4:-点击 USART 。通过单击选择 接收器 和 发送器 。如下所示:
步骤5:-单击 字母数字LCD 并选择 启用字母数字LCD支持 。
第6步:-单击 程序->生成,保存并退出 。现在,我们一半以上的工作已经完成
步骤7:-在桌面上创建一个新文件夹,以便我们的文件保留在该文件夹中,否则我们将分散在整个桌面窗口中。根据需要命名文件夹,我建议使用相同的名称保存程序文件。
我们将一个接一个的三个对话框来保存文件。
保存另两个对话框后,对其他两个对话框执行相同的操作。
现在,您的工作区看起来像这样。
我们的大部分工作都是在向导的帮助下完成的。现在,我们只需要编写GSM的代码。
代码和解释
创建项目后,所有头文件都会自动附加,您只需要包含 delay.h 头文件并声明所有变量即可。本教程末尾提供了完整的代码。
#包括
使从UDR寄存器接收数据的功能。该函数将返回接收到的数据。
unsigned char receive_value(void) { while(!(UCSRA&(1 <
进入 while 循环,在其中创建两个 if 语句,一个用于发送消息,另一个用于接收。发送按钮与ATmega的PIND6连接,接收消息按钮与PIND5连接。
如果首先执行PIND6(发送按钮),则 if 语句将执行,并且所有发送消息的命令将一个接一个地执行。
while(1){ // lcd_clear(); lcd_putsf(“ Send-> bttn 1”); lcd_gotoxy(0,1); lcd_putsf(“ Receive-> buttn2”); if(PIND.6 == 1){ lcd_clear(); lcd_gotoxy(0,0); lcd_putsf(“正在发送消息…”); for(z = 0; cmd_1!=''; z ++) { UDR = cmd_1; delay_ms(100); } UDR =('\ r'); delay_ms(500); for(z = 0; cmd_2!=''; z ++) { UDR = cmd_2; delay_ms(100); }…
如果按下接收消息按钮, 则(b!='+') 循环时将检查是否存在CMT命令。如果存在,则执行第二个 while 循环,并转到命令的第二行,并将消息一一打印在LCD上。
while(PIND.5 == 1){ lcd_clear(); lcd_gotoxy(0,0); lcd_putsf(“正在接收消息…”); b =接收值(); 而(b!='+'){ b =接收值(); } b = Received_value(); if(b =='C') { b =接收值(); … ..
此循环将程序带到命令的第二行,并将消息存储在数组中。
而(b!= 0x0a) { b =接收值(); } for(b = 0; b <3; b ++){ c = received_value(); msg = c; } .. ..
该 for 循环用于在LCD上显示消息。
for(z = 0; z <3; z ++) { a = msg; lcd_putchar(a); //打印输入LCD delay_ms(10); }
演示视频的完整代码如下,现在我们必须构建我们的项目。
建立项目
单击 构建项目 图标,如图所示。
生成项目后,将在 Debug-> Exe 文件夹中生成一个HEX文件,该 文件位于 您之前保存文件的文件夹中。我们将使用此HEX文件通过Sinaprog软件将其 上传到Atmega16中。
将代码上传到Atmega16
根据给定的图将电路连接到程序Atmega16。将FRC电缆的一侧连接到USBASP编程器,另一侧将连接到微控制器的SPI引脚,如下所述:
- FRC母连接器的Pin1-> Atmega16的MOSI的Pin 6
- 引脚2连接到atmega16的Vcc,即引脚10
- 引脚5连接到atmega16的复位,即引脚9
- 引脚7连接到atmega16的SCK,即引脚8
- 引脚9连接到atmega16的MISO,即引脚7
- 引脚8连接到atmega16的GND,即引脚11
我们将使用Sinaprog上传上面生成的Hex文件,因此将其打开,然后从Device下拉菜单中选择Atmega16。如图所示,从Debug-> Exe文件夹中选择HEX文件。
现在,单击“程序”,您的代码将在ATmega16微控制器中刻录。
完成后,对单片机进行了编程。只需按下按钮即可通过GSM和ATmega16微控制器发送和接收消息。
完整的代码和演示视频 如下。