目录
介绍
Sim900A GSM模块
全球移动通信系统(GSM)是用于移动设备的数字蜂窝系统。它是一种广泛用于长途通信的移动国际标准。
市场上有各种GSM模块,如SIM900,SIM700,SIM800,SIM808,SIM5320等。
SIM900A模块允许用户通过GPRS发送/接收数据,发送/接收短信和拨打/接听语音电话。
GSM / GPRS模块使用USART通信与微控制器或PC终端通信。AT命令用于以不同的模式配置模块,并执行各种功能,如呼叫,向站点发布数据等。
连接图
Sim900A模块与MSP-EXP430G2 Launchpad连接
注意:对于TI Launchpad板,P1.1是Rx引脚,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);
}
余下程序: