0°

(十四)msp430进阶:Sim900A GSM模块与MSP-EXP430G2 Launchpad连接

介绍

(十四)msp430进阶:Sim900A GSM模块与MSP-EXP430G2 Launchpad连接

Sim900A GSM模块

 

全球移动通信系统(GSM)是用于移动设备的数字蜂窝系统。它是一种广泛用于长途通信的移动国际标准。

市场上有各种GSM模块,如SIM900,SIM700,SIM800,SIM808,SIM5320等。

SIM900A模块允许用户通过GPRS发送/接收数据,发送/接收短信和拨打/接听语音电话。

GSM / GPRS模块使用USART通信与微控制器或PC终端通信。AT命令用于以不同的模式配置模块,并执行各种功能,如呼叫,向站点发布数据等。

 

连接图

(十四)msp430进阶:Sim900A GSM模块与MSP-EXP430G2 Launchpad连接

Sim900A模块与MSP-EXP430G2 Launchpad连接

注意:对于TI Launchpad板,P1.1Rx引脚,P1.2硬件串口时的Tx引脚。这里,我们使用的是硬件串口,因此P1.1是Rx引脚,P1.2是Tx引脚。

当定位于软件串行时,P1.1作为Tx引脚,P1.2作为Rx引脚。

 

监测温度并在温度超过某个值时调用特定数字。如果在拨打电话后的指定时间内收到某条消息,则打开风扇(LED指示灯亮起以进行演示)。

 

这里,LM35用于测量温度。如果测量的温度超过35°C,则拨打指定的号码并在25秒后切断呼叫。如果用户以“Cool down”消息响应,则风扇打开(LED打开以进行演示)。

 

注意: MSP-EXP430G2 TI Launchpad主板具有512字节的RAM,可轻松上传,尤其是在使用不同库时。有时您需要串行缓冲区足够大以包含所需的数据,并且您必须修改串行库的缓冲区大小。在做这些事情时,我们必须确保代码不会使用超过70%的RAM。这可能导致代码以不稳定的方式工作,有时运行良好并且在其他方​​面失败。 

有些时候RAM使用率可能会超过70%并且代码将完全正常工作,并且即使RAM使用率为65%,代码也无法工作。 

在这种情况下,可能需要对缓冲区大小和/或变量进行一些试验和错误。

 

程序

char data[40];

void flush_rx_buffer(void)  /* Flush out the data in the receive buffer*/
{char c;
  while(Serial.available()!=0)
  {
    c = Serial.read();
  }
}

char UnreadSMS(void)
{
  int8_t i=0;
  char *s;
  char rx_buff1[100];  
  memset(rx_buff1,0,100);
  flush_rx_buffer();
  Serial.println("AT+CMGF=1");  /* Select message format as text */
  delay(700);
  flush_rx_buffer();
  Serial.println("AT+CMGL=\"REC UNREAD\",1"); /* List received messages without changing their status */
  delay(700);   
  while(Serial.available()!=0)  /* If data is available on serial port */
   {
     rx_buff1[i] = Serial.read(); /* Copy data to a buffer for later use */
     i++;
   } if(strstr(rx_buff1,"+CMGL:")!=0)  /* If buffer contains +CMGL: */
  {
    s = strstr(rx_buff1,":"); /* Pointer to : */return atoi(s+1); /* Return message index extracted, in int form */
  }return 0;
}

void readSMS(int messageIndex, char *data)
{
  int8_t k = 0;
  char *st;
  char index[4];
  char rx_buff2[100];  
  memset(rx_buff2,0,100);
  flush_rx_buffer();
  Serial.println("AT+CMGF=1");  /* Select message format as text */
  delay(700);
  flush_rx_buffer();
  Serial.print("AT+CMGR="); /* Read message at specified index */
  itoa(messageIndex, index, 10);
  Serial.println(index);
  delay(700);
  while(Serial.available()!=0)  /* If data is available on serial port */
   {
     rx_buff2[k] = Serial.read(); /* Copy data to a buffer for later use */
     k++;
   } if( (st = strstr(rx_buff2,"+CMGR:")) !=0 )  /* If buffer contains +CMGR: */
  {if( (st = strstr(st,"\r\n"))!=0 ) /* If buffer contains \r\n */
    {
      Serial.println(st); /* Print message received */for(int8_t j = 0; j<40 ; j++)
      {
       *(data + j)  = *(st++);  /* Store message received in data buffer */
      }
    }
  }
}

void setup() {
  Serial.begin(9600);	/* Define baud rate for serial communication */
  pinMode(2, OUTPUT); /* LED to show whether fan is on or off */			
  digitalWrite(2, LOW);
}

余下程序

限制以下用户组阅读此隐藏内容

请先登录

您的用户组:
「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论