使用AVR微控制器控制GSM模块实现发送和接收短信

发布者:火星叔叔最新更新时间:2022-07-28 来源: csdn关键字:AVR微控制器  GSM模  发送  接收短信 手机看文章 扫描二维码
随时随地手机看文章

当我们的项目需要远程访问时,GSM模块就会很有用。通过这些模块可以完成我们普通手机可以执行的所有操作,例如拨打/接听电话、发送/接收短信、使用GPRS连接到互联网等。您还可以将普通麦克风和扬声器连接到此模块,实现与您的手机进行通话。如果将其与微控制器连接,这将为许多创意项目打开大门。因此,在本篇文章中,我们将学习如何将GSM模块(SIM900A)与AVR微控制器ATmega16进行连接,并演示如何使用GSM模块发送和接收短信。


所需的材料

●    ATmega16控制器

●    GSM模块(SIM900)

●    液晶显示器

●    按键

●    10k电阻,电位器

●    连接导线

●    12V适配器

●    USBASP programmer

●    10针FRC电缆


使用的软件

我们将使用CodeVisionAVR软件编写代码,使用SinaProg软件和USBASP programmer将代码上传到Atmega16。

您可以从下面的链接下载这些软件:

●    CodeVisionAVR:http://www.hpinfotech.ro/cvavr_download.html

●    SinaProg:http://www.ablab.in/sinaprog-hex ... ler/#inline_content


在开始设计原理图和编写代码之前,我们将先了解GSM模块及其工作原理。


GSM模块



通过使用AT命令模式,即使没有连接任何微控制器,也可以使用GSM模块。如上图所示,GSM模块带有一个USART适配器,可通过MAX232模块直接连接到计算机,或者Tx和Rx引脚可用于将其连接到微控制器。您还可以注意到MIC +、MIC-、SP +、SP-等其他引脚,可以连接麦克风或扬声器。该模块可通过在普通DC插座插入12V适配器的方式供电。


将SIM卡插入模块的插槽并打开电源,您应该注意到电源LED指示灯亮。现在等待一分钟左右,您应该看到红色LED每3秒闪烁一次。这意味着您的模块能够与您的SIM卡建立连接。现在,您可以继续将模块与电话或任何微控制器连接。


使用AT命令与GSM模块通信

正如您猜到的那样,GSM模块可以通过串行通信进行通信,并且只能理解一种语言,即“AT命令”。无论您想告诉或询问GSM模块,它都应该只通过AT命令。例如,如果您想知道您的模块是否处于活动状态。你应该询问(发送)像“AT”这样的命令,你的模块将回复“OK”。


这些AT命令在其数据手册中有详细说明,可以在其官方数据手册中找到。这是一份271页的数据手册,您可能需要几天的时间来阅读它们。所以我给出了一些最重要的AT命令,以便您尽快了解这些指令。

AT回复OK确认
AT+CPIN?
检查信号质量
AT + COPS?查找服务提供商名称
ATD96XXXXXXXX;拨打特定号码,以分号结尾
AT + CNUM查找SIM卡的数量
ATA接听来电
ATH挂断当前的来电
AT + COLP显示来电号码
AT + VTS =(数字)
发送DTMF号码。您可以在移动键盘上使用任意数字(数字)
AT + CMGRAT + CMGR = 1在第一个位置读取消息
AT + CMGD = 1删除第一个位置的消息
AT+CMGDA=”DEL ALL”
删除SIM中的所有消息
AT + CMGL =” ALL”阅读所有来自SIM的消息
AT + CMGF = 1设置SMS配置。 “1”仅用于纯文本模式
AT + CMGS =“+ 91 968837XXXX”
> TEXT
在这里发送短信到特定号码968837XXXX。当您看到“>”开始输入文本时。按Ctrl + Z发送文本。
AT + CGATT?检查SIM卡上的互联网连接
AT + CIPSHUT关闭TCP连接,意味着断开互联网连接
AT+CSTT = “APN”,”username”,”Pass”使用您的APN和密钥连接到GPRS。可以从Network Provider获得。
AT + CIICR检查SIM卡是否有数据包
AT + CIFSR获取SIM网络的IP
AT + CIPSTART =“TCP”,“SERVER IP”,“PORT”用于设置TCP IP连接
AT + CIPSEND此命令用于将数据发送到服务器


本篇文章中,我们将使用AT + CMGF和AT + CMGS命令发送短信。


如果您同时使用了Arduino和GSM模块,在接收消息时可以使用+ CMT:命令查看串行监视器上的手机号码和短信。短信出现在第二行,如图所示。




我们将扫描此+ CMT:命令以检查是否有短信。


ATMega16与GSM模块的连接电路图



1.  GSM模块的Tx和Rx分别连接到Atmega16的Rx(Pin14)和Tx(Pin15)。

2.  将按钮按到PD5(Pin19)和PD6(Pin20)。

3.  LCD连接:

     ◼  RS - PA0

     ◼  R / W - PA1

     ◼  EN - PA2

     ◼  D4 - PA4

     ◼  D5 - PA5

     ◼  D6 - PA6

     ◼  D7 - PA7



使用CodeVision创建ATmega16项目

安装CodeVisionAVR和SinaProg软件后,按照以下步骤创建项目和编写代码:

第1步、  打开CodeVision,单击File -> New -> Project。将出现确认对话框。单击YES。



第2步、  将打开CodeWizard向导。单击第一个选项,即AT90,然后单击“OK”。



第3步、 - 选择你的微控制器芯片,这里我们将选择Atmega16L,如图所示。



第4步、 - 单击USART。在上面选择Receiver and Transmitter。如下所示:



步骤5: - 单击Alphanumeric LCD,并勾选Enable Alphanumeric LCD support。



第6步、 - 单击Program -> Generate, Save and Exit。现在,我们一多半的工作已经完成。



第7步: - 在桌面上创建一个新文件夹,以便我们的文件保留在文件夹中,否则我们将分散在整个桌面窗口中。根据需要命名您的文件夹,我建议使用相同的名称来保存程序文件。

我们将陆续有三个对话框来保存文件。



保存第一个后会出现的其他两个对话框也一样。


现在,您的工作区看起来像这样。

我们的大部分工作都是在向导的帮助下完成的。现在,我们需要为GSM模块编写代码。


关键字:AVR微控制器  GSM模  发送  接收短信 引用地址:使用AVR微控制器控制GSM模块实现发送和接收短信

上一篇:基于ATtiny85轻松制作一款智能手表
下一篇:AVR基础知识:ATMEGA的SPI总线 - 第2部分

推荐阅读最新更新时间:2024-11-12 11:13

修改HAL标准库用printf函数发送数据直接输出
主函数文件,请直接关注自己写上去的代码: 直接看43行代码:#include stdio.h //要添加这个头文件 还有97行到112行:实现用HAL库函数和printf函数发送数据 1 /** 2 ****************************************************************************** 3 * File Name : main.c 4 * Description : Main program body 5 *************************************************************
[单片机]
修改HAL标准库用printf函数<font color='red'>发送</font>数据直接输出
简述AVR单片机定时器
AVR定时器的要点介绍 M16的T1 16位定时器一共有15种工作模式,其他2个8位定时器(T0/T2)相对简单,除了T2有异步工作模式用于RTC应用外 (可以利用溢出中断和比较匹配中断作定时功能) 分5种工作类型 1 普通模式 WGM1=0 跟51的普通模式差不多,有TOV1溢出中断,发生于TOP时 1 采用内部计数时钟 用于 ICP捕捉输入场合---测量脉宽/红外解码 (捕捉输入功能可以工作在多种模式下,而不单单只是普通模式) 2 采用外部计数脉冲输入 用于 计数,测频 其他的应用,采用其他模式更为方便,不需要像51般费神 2 CTC模式 WGM1=4,12 跟51的自动重载模式差
[单片机]
AVR单片机8位数码管显示的程序实现
我们接着来完成8位数码管的显示实验。现在我们开始动手编写程序; 根据前面的介绍,我们应该已经能够知道编写一个 AVR单片机 的C语言程序的基本步骤和方法了。 下面给出这个程序的主程序文件,在这个程序中我们应该能够知道这个程序都包含了那几块,具体来说我们应该能够在这个程序中把以下几个部分找出来:预编译语句、全局变量的定义、函数的声明、主函数、函数定义。如果你还不能够准确找出这几部分,那么需要把前面的内容再详细阅读一下。 主程序代码 #include avr/io.h //io端口寄存器配置文件,必须包含 #include util/delay.h //GCC中的延时函数头文件 #include hc595.h //u
[单片机]
AVR单片机atmega16串口中断接收发送程序
// Target : M16 // Crystal: 8.0000Mhz // AVR单片机 atmega16串口中断接收和发送程序。接收到字符后再发送出去 #include iom16v.h #include macros.h unsigned char com_in_buf ; void port_init(void) { PORTA = 0xFF; DDRA = 0xFF; PORTB = 0x00; DDRB = 0x00; PORTC = 0x00; DDRC = 0x00; PORTD = 0x00; DDRD = 0x00; } //UART0 initialize // desired ba
[单片机]
AVR单片机中未用的I/O口设置
如果有引脚未被使用,建议给这些引脚赋予一个确定电平。虽然在深层休眠模式下大多数数字输入被禁用,但还是需要避免因引脚没有确定的电平而造成悬空引脚在其它数字输入使能模式( 复位、工作模式、空闲模式) 消耗电流。 最简单的保证未用引脚具有确定电平的方法是使能内部上拉电阻。但要注意的是复位时 上拉电阻将被禁用。如果复位时的功耗也有严格要求则建议使用外部上拉或下拉电阻。不推荐直接将未用引脚与VCC 或GND 连接,因为这样可能会在引脚偶然作为输出时出现冲击电流。
[单片机]
C51 中断接收 查询发送
C51 中断接收 查询发送 #include REGX51.H volatile unsigned char rx_data; volatile bit rx_flag = 0; void dalay_1ms(unsigned short n) { unsigned short i,j; for(i=0; i n; i++) { for(j=60000; j 0; j--); } } void send_char(unsigned char ch) { SBUF = ch; while(!TI); T
[单片机]
AVR单片机控制的开关电源
单片机 控制开关电源,单从对电源输出的控制来说,可以有几种控制方式。 其一是 单片机 输出一个电压(经DA芯片或PWM方式),用作电源的基准电压。这种方式仅仅是用单片机代替了原来的基准电压,可以用按键输入电源的输出电压值,单片机并没有加入电源的反馈环,电源电路并没有什么改动。这种方式最简单。 其二是 单片机 扩展AD,不断检测电源的输出电压,根据电源输出电压与设定值之差,调整DA的输出,控制PWM芯片,间接控制电源的工作。这种方式单片机已加入到电源的反馈环中,代替原来的比较放大环节,单片机的程序要采用比较复杂的PID算法。 其三是 单片机 扩展AD,不断检测电源的输出电压,根据电源输出电压与设定值之差,输
[单片机]
AVR单片机的中断和中断键盘的使用
一、 中断的过程就不再赘言,功能,一般用于 实时处理程序 :快速执行 -中断键盘 分时操作 :进行另外的功能模块 -uart spi 故障处理 :也算实时处理的一部分 -掉电处理 待机唤醒 :可工作在低功耗下 使用的名词 : 中断源 中断标志 中断响应 请求信号 服务程序 中断使用的过程: 全局中断运行 本模块中断的允许 本中断标志出现了 AVR中断向量(地址)需要占用空间的,一般占用1-2个字 ATMEGA128有35个中断源 二、 中断响应过程 需要将
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved