GPRS模組SIM300的使用
使用GPRS首先需要開啟串列埠,設定好串列埠的各項引數。
一、AT+CMGL 讀取所有簡訊
A、讀取所有的資訊:
第一步:at+cmgf=1 如果返回ok則繼續。
說明:AT+CMGF SELECT SMS MESSAGE FORMAT
第二步:at+cmgl=”all”
成功返回OK否則ERROR
+CMGL: 1,"REC READ","+8613702936376",,"05/12/16,09:04:43+00"
test
OK
B、讀取未讀的資訊
第一步:at+cmgf=1
如果返回ok則繼續。
第二步:at+cmgl=” rec unread”
成功返回OK否則ERROR
C、讀取已讀的資訊
第一步:at+cmgf=1
如果返回ok則繼續。
第二步:at+cmgl=” rec read”
成功返回OK否則ERROR
AT+CMGL引數:
1) If text mode:
"REC UNREAD" Received unread messages (default)
"REC READ" Received read messages
"STO UNSENT" Stored unsent messages
"STO SENT" Stored sent messages
"ALL" All messages
2) If PDU mode:
0 Received unread messages (default)
1 Received read messages
2 Stored unsent messages
3 Stored sent messages
4 All messages
二、AT+CMGR Read SMS message
從X儲存區讀短訊息:
第一步:at+cmgf=1 如果返回ok則繼續。
第二步:at+cmgl=x
三、AT+CMGD Delete SMS message
刪除資訊:
第一步:at+cmgf=1
如果返回ok則繼續。
第二步:at+cmgd= 數字號
成功返回OK否則ERROR
四、AT+CSCA SMS service centre address(設定簡訊中心號碼)
設定簡訊中心號碼:
第一步:at+cmgf=1
如果返回ok則繼續。
第二步:at+csca=”簡訊中心號碼” (比如+8613800546500)
成功返回OK否則ERROR
五、AT+CMGS Send SMS message (傳送資訊)
傳送資訊:
第一步:at+cmgf=1
如果返回ok則繼續。
第二步:AT+CMGS=“+8613xxxxxxxxx”<回車>
>輸入短訊息。Crtl+Z結束併傳送。
注:此只能傳送英文與數字
六、查詢
查詢裝置:
命令:AT+CGMI<回車>
返回:SIEMENS
返回:OK
命令:AT+CGMM<回車>
返回:MC35i
返回:OK
命令:AT+CMEE=1<回車>
返回:具體的錯誤程式碼
ATZ;E 回車 Echo OFF
ATZ;E1回車 Echo ON
AT+CREG?回車 回答x(X=2脫網,X=1註冊,X=0狀態不明)
AT+COPS?回車 表示SIM卡是否被網路接受
AT+COPS=?回車 顯示所有可用的網路。
AT+CREG?回車(是否網路註冊)
AT+CSQ SIGNAL QUALITY REPORT
AT+IPR=2400 回車(改變RS232口的速率至2400bps)
AT&W 回車 (儲存已改引數)
輸入PIN碼:AT+CPIN=“xxxx”
七、網路是否註冊(AT+CREG?)
命令:at+cmgf=1
返回:at+cmgf=1 返回:OK
命令:AT+CREG?
返回:AT+CREG? 返回:+CREG: 0,1
注:( 2脫網, 1註冊, 0狀態不明)
返回:OK
八、SIM卡是否被網路接受(AT+COPS?)
命令:at+cmgf=1
返回:at+cmgf=1
返回:OK
命令:at+cops?
返回:+COPS: 0,0,"China Mobile"
返回:OK
九、顯示所有可用的網路(AT+COPS=?)
命令:at+cmgf=1
返回:at+cmgf=1
返回:OK
命令:at+cops=?
返回:+COPS: (2,"China Mobile",,"46000"),(3,"China Unicom",,"46001"),,(0-4),(0,2)
返回:OK
十、打電話
Demonstration Syntax Expect Result
Make a voice call ATD6241xxxx; OK MS makes a voice call
Hang up a call ATH OK Call dropped
問題解決
採用sim300傳送簡訊時採用下面的格式
AT+CMGF=1 設定文字格式
AT+CMGS=”13245678912” 注意這塊一定要加上雙引號。否則返回ERROR
另外如果傳送不出去,有可能是簡訊中心號碼設定的不正確。
完整的程式
// this is a test about GPRS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <fcntl.h> // open() close()
#include <unistd.h> // read() write()
#include <termios.h> // set baud rate
#include <fcntl.h>
#include <sys/select.h>
#include <sys/time.h>
#include <sys/types.h>
#define FUNC_RUN 0
#define FUNC_NOT_RUN 1
#define SIMPLE_TEST 1
#define READ_SIM_CARD_ID 2
#define GSM_GPRS_SIGNAL 3
#define MAKE_A_CALL 4
#define WAIT_A_CALL 5
#define SHORT_MESSAGE 6
#define POWER_MANAGE 7
#define FUNC_QUIT 8
#define SEND_SHORT_MESSAGE 1
#define READ_SHORT_MESSAGE 2
#define CONFIG_SHORT_MESSAGE_ENV 3
#define QUIT_SHORT_MESSAGE 4
#define DEVICE_TTYS "/dev/ttySAC1"
#define MAX_LEN_OF_SHORT_MESSAGE 140
#define RECEIVE_BUF_WAIT_1S 1
#define RECEIVE_BUF_WAIT_2S 2
#define RECEIVE_BUF_WAIT_3S 3
#define RECEIVE_BUF_WAIT_4S 4
#define RECEIVE_BUF_WAIT_5S 5
#define VERSION "YHPDA_GSM_1.0.0"
void showversion(void)
{
printf("*********************************************\n");
printf("\t %s \t\n", VERSION);
printf("*********************************************\n\n");
}
//------------------------------------- read datas from GSM/GPRS --------------------------------------------
// succese return 1
// error return 0
int read_GSM_GPRS_datas(int fd, char *rcv_buf,int rcv_wait)
{
int retval;
fd_set rfds;
struct timeval tv;
int ret,pos;
tv.tv_sec = rcv_wait; // wait 2.5s
tv.tv_usec = 0;
pos = 0; // point to rceeive buf
while (1)
{
FD_ZERO(&rfds);
FD_SET(fd, &rfds);
retval = select(fd+1 , &rfds, NULL, NULL, &tv);
if (retval == -1)
{
perror("select()");
break;
}
else if (retval)
{// pan duan shi fou hai you shu ju
ret = read(fd, rcv_buf+pos, 2048);
pos += ret;
if (rcv_buf[pos-2] == '\r' && rcv_buf[pos-1] == '\n')
{
FD_ZERO(&rfds);
FD_SET(fd, &rfds);
retval = select(fd+1 , &rfds, NULL, NULL, &tv);
if (!retval) break;// no datas, break
}
}
else
{
printf("No data\n");
break;
}
}
return 1;
} // end read_GSM_GPRS_datas
//------------------------------------- send cmd ------------------------------------------------------------
// succese return 1
// error return 0
int send_GSM_GPRS_cmd(int fd, char *send_buf)
{
ssize_t ret;
ret = write(fd,send_buf,strlen(send_buf));
if (ret == -1)
{
printf ("write device %s error\n", DEVICE_TTYS);
return -1;
}
return 1;
} // end send_GSM_GPRS_cmd
//------------------------------------- send cmd and read back result ---------------------------------------
void GSM_GPRS_send_cmd_read_result(int fd, char *send_buf, int rcv_wait)
{
char rcv_buf[2048];
if((send_buf==NULL) || (send_GSM_GPRS_cmd(fd,send_buf)))
{ // send success , then read
bzero(rcv_buf,sizeof(rcv_buf));
if (read_GSM_GPRS_datas(fd,rcv_buf,rcv_wait))
{
printf ("%s\n",rcv_buf);
}
else
{
printf ("read error\n");
}
}
else
{
printf("write error\n");
}
} // end GSM_GPRS_send_cmd_read_result
//------------------------------------- send cmd : "at" to GSM/GPRS MODEM -----------------------------------
void GSM_simple_test(int fd)
{
char *send_buf="at\r";
GSM_GPRS_send_cmd_read_result(fd,send_buf,RECEIVE_BUF_WAIT_1S);
} // end GSM_simple_test
//------------------------------------- send cmd : "at+ccid" to GSM/GPRS MODEM ------------------------------
void GSM_read_sim_card_id(int fd)
{
char *send_buf="at+ccid\r";
GSM_GPRS_send_cmd_read_result(fd,send_buf,RECEIVE_BUF_WAIT_1S);
} // end GSM_read_sim_card_id
//------------------------------------- send cmd : "at+ccid" to GSM/GPRS MODEM ------------------------------
void GSM_gprs_signal(int fd)
{
char *send_buf="at+creg?\r";
GSM_GPRS_send_cmd_read_result(fd,send_buf,RECEIVE_BUF_WAIT_1S);
send_buf="at+cgreg?\r";
GSM_GPRS_send_cmd_read_result(fd,send_buf,RECEIVE_BUF_WAIT_1S);
send_buf="at+csq\r";
GSM_GPRS_send_cmd_read_result(fd,send_buf,RECEIVE_BUF_WAIT_1S);
send_buf="at+cops?\r";
GSM_GPRS_send_cmd_read_result(fd,send_buf,RECEIVE_BUF_WAIT_1S);
} // end GSM_read_sim_card_id
//------------------------------------- send cmd : "atd<tel_num>;" to GSM/GPRS MODEM ------------------------
//------------------------------------- finish call, send cmd: "ath" to GSM MODEM --------------------------
void GSM_call(int fd)
{
char send_buf[17];
char *send_cmd_ath = "ath\r";
int i;
// input telephone number
bzero(send_buf,sizeof(send_buf));
send_buf[0]='a';
send_buf[1]='t';
send_buf[2]='d';
send_buf[16] = '\0';
printf("please input telephone number:");
i = 3;
while (1)
{
send_buf[i]=getchar();
if (send_buf[i]=='\n') break;
i++;
}
send_buf[i]=';';
send_buf[i+1]='\r';
// end input telphone number
// send cmd
GSM_GPRS_send_cmd_read_result(fd,send_buf,RECEIVE_BUF_WAIT_1S);
//quit call
printf("press ENTER for quit:");
getchar();
// send cmd
GSM_GPRS_send_cmd_read_result(fd,send_cmd_ath,RECEIVE_BUF_WAIT_1S);
} // end GSM_call
//------------------------------------- wait for GSM/GPRS call signal ---------------------------------------
void GSM_wait_call(int fd)
{
char rcv_buf[2048];
char *send_cmd_ath = "ath\r";
int wait_RING;
wait_RING = 10;
while (wait_RING!=0)
{
bzero(rcv_buf,sizeof(rcv_buf));
if (read_GSM_GPRS_datas(fd,rcv_buf,RECEIVE_BUF_WAIT_1S))
{
printf ("%s\n",rcv_buf);
}
else
{
printf ("read error\n");
}
wait_RING--;
}
GSM_GPRS_send_cmd_read_result(fd,send_cmd_ath,RECEIVE_BUF_WAIT_1S);
printf("quit wait_call\n");
} // end GSM_wait_call
//------------------------------------- GSM/GPRS Config short message env -----------------------------------
void GSM_Power_Manage(int fd)
{
char *send_buf="AT+CPOWD\r";// power off
GSM_GPRS_send_cmd_read_result(fd,send_buf,RECEIVE_BUF_WAIT_1S);
} // end GSM_Conf_Message
//------------------------------------- GSM/GPRS send short message -----------------------------------------
void GSM_Send_Message(int fd)
{
char cmd_buf[23];
char short_message_buf[MAX_LEN_OF_SHORT_MESSAGE];
int i;
char rcv_buf;
bzero(cmd_buf,sizeof(cmd_buf));
bzero(short_message_buf,sizeof(short_message_buf));
printf ("send short message:\n");
cmd_buf[0]='a';
cmd_buf[1]='t';
cmd_buf[2]='+';
cmd_buf[3]='c';
cmd_buf[4]='m';
cmd_buf[5]='g';
cmd_buf[6]='s';
cmd_buf[7]='=';
cmd_buf[8]='"';
printf ("please input telephone number:");
i = 9;
while (1)
{
cmd_buf[i]=getchar();
if (cmd_buf[i]=='\n') break;
i++;
}
cmd_buf[i]='"';
cmd_buf[i+1]='\r';
cmd_buf[i+2]='\0';
// send cmd : at+cmgs="(telephone number)"
GSM_GPRS_send_cmd_read_result(fd,cmd_buf,RECEIVE_BUF_WAIT_1S);
// input short message
printf("please input short message:");
i = 0;
while(i < MAX_LEN_OF_SHORT_MESSAGE-2)
{
short_message_buf[i] = getchar();
if (short_message_buf[i]=='\n') break;
i++;
}
short_message_buf[i] = 0x1A;
short_message_buf[i+1] = '\r';
short_message_buf[i+2] = '\0';
// send short message
GSM_GPRS_send_cmd_read_result(fd, short_message_buf,RECEIVE_BUF_WAIT_4S);
printf("\nend send short message\n");
} // end GSM_Send_Message
//------------------------------------- GSM/GPRS read all short message -------------------------------------
void GSM_Read_Message(int fd)
{
char *send_buf="at+cmgl=\"ALL\"\r";
char rcv_buf[2048];
GSM_GPRS_send_cmd_read_result(fd,send_buf,RECEIVE_BUF_WAIT_3S);
printf("end read all short message\n");
} // end GSM_Read_Message
//------------------------------------- GSM/GPRS Config short message env -----------------------------------
void GSM_Conf_Message(int fd)
{
char *send_buf="at+cmgf=1\r";
char *send_center_buf="at+csca=\"+8613800571500\"\r";
GSM_GPRS_send_cmd_read_result(fd,send_buf,RECEIVE_BUF_WAIT_1S);
// set short message center number
GSM_GPRS_send_cmd_read_result(fd,send_center_buf,RECEIVE_BUF_WAIT_1S);
printf("end config short message env\n");
} // end GSM_Conf_Message
//------------------------------------- GSM/GPRS short message ----------------------------------------------
void GSM_short_mesg(int fd)
{
int flag_sm_run, flag_sm_select;
flag_sm_run = FUNC_RUN;
while (flag_sm_run == FUNC_RUN)
{
printf ("\n Select:\n");
printf ("1 : Send short message \n");
printf ("2 : Read all short message \n");
printf ("3 : Config short message env\n");
printf ("4 : quit\n");
printf (">");
scanf("%d",&flag_sm_select);
getchar();
// temp
// printf ("input select:%d\n",flag_sm_select);
// end temp
switch (flag_sm_select)
{
case SEND_SHORT_MESSAGE : { GSM_Send_Message(fd); break; }
case READ_SHORT_MESSAGE : { GSM_Read_Message(fd); break; }
case CONFIG_SHORT_MESSAGE_ENV : { GSM_Conf_Message(fd); break; }
case QUIT_SHORT_MESSAGE : { flag_sm_run = FUNC_NOT_RUN; break; }
default :
{
printf("please input your select use 1 to 3\n");
}
}
}
printf ("\n");
} // end GSM_send_mesg
//------------------------------------- print ---------------------------------------------------------------
void print_prompt(void)
{
printf ("Select what you want to do:\n");
printf ("1 : Simple Test\n");
printf ("2 : Read SIM CARD ID\n");
printf ("3 : Test GSM/GPRS signal\n");
printf ("4 : Make A Call\n");
printf ("5 : Wait A Call\n");
printf ("6 : Short message\n");
printf ("7 : Power manage\n");
printf ("8 : Quit\n");
printf (">");
} // end print_prompt
//------------------------------------- Control GSM/GPRS MODULE ---------------------------------------------
void func_GSM(int fd)
{
int flag_func_run;
int flag_select_func;
ssize_t ret;
flag_func_run = FUNC_RUN;
while (flag_func_run == FUNC_RUN)
{
print_prompt(); // print select functions
scanf("%d",&flag_select_func); // user input select
getchar();
switch(flag_select_func)
{
case SIMPLE_TEST : {GSM_simple_test(fd); break;}
case READ_SIM_CARD_ID : {GSM_read_sim_card_id(fd); break;}
case GSM_GPRS_SIGNAL : {GSM_gprs_signal(fd); break;}
case MAKE_A_CALL : {GSM_call(fd); break;}
case WAIT_A_CALL : {GSM_wait_call(fd); break;}
case SHORT_MESSAGE : {GSM_short_mesg(fd); break;}
case POWER_MANAGE : {GSM_Power_Manage(fd); break;}
case FUNC_QUIT :
{
flag_func_run = FUNC_NOT_RUN;
printf("Quit GSM/GPRS function. byebye\n");
break;
}
default :
{
printf("please input your select use 1 to 7\n");
}
}
}
}// end func_GPRS
//------------------------------------- init seriel port ---------------------------------------------------
void init_ttyS(int fd)
{
struct termios options;
bzero(&options, sizeof(options)); // clear options
cfsetispeed(&options,B115200); // setup baud rate
cfsetospeed(&options,B115200);
options.c_cflag |= (CS8 | CREAD);
options.c_iflag = IGNPAR;
tcflush(fd, TCIFLUSH);
tcsetattr(fd, TCSANOW, &options);
}//end init_ttyS
//------------------------------------- main ----------------------------------------------------------------
int main(void)
{
int fd;
showversion();
printf("\nGSM/GPRS TESTS\n\n");
// open seriel port
fd = open(DEVICE_TTYS, O_RDWR);
if (fd == -1)
{
printf("open device %s error\n",DEVICE_TTYS);
}
else
{
init_ttyS(fd); // init device
func_GSM(fd); // GSM/GPRS functions
// close ttyS0
if (close(fd)!=0) printf("close device %s error",DEVICE_TTYS);
}
return 0;
}// end main
該程式目前的問題如下,在接受簡訊的時候無法顯示簡訊的內容,而只是顯示一個“~p”,誰有這個問題的解決方法,歡迎與我探討。
相關文章
- linux gprs模組 sim800a 晶片 ppp撥號上網Linux晶片
- 初步實現使用pppd連線GPRS上網
- 基於嵌入式GPRS DTU模組在共享按摩椅系統中應用
- 發起GPRS撥號請求
- 在ARM+LINUX上使用pppd拔號上網(GPRS)流程Linux
- pymysql模組的使用MySql
- wtforms模組的使用ORM
- Flask:sqlalchemy模組的使用FlaskSQL
- glom模組的使用(一)
- glom模組的使用(二)
- BeautifulSoup模組的使用方法
- Python中模組的使用Python
- Day24:IO模組的使用
- Python 中argparse模組的使用Python
- 爬蟲-urllib模組的使用爬蟲
- odoo的Aeroo Reports模組使用。Odoo
- ruby_expect模組的使用..薦
- 手機開發實戰20——GPRS區域定義
- 使用SecureLink模組
- 使用typescript開發angular模組(編寫模組)TypeScriptAngular
- node.js之path模組的使用Node.js
- Tengine新增nginx upstream模組的使用Nginx
- 【python基礎】os模組的使用Python
- python非同步asyncio模組的使用Python非同步
- BOM模組的介面表使用總結
- Python模組 adorner 的使用示例Python
- Python中yaml模組的使用教程PythonYAML
- GPRS與4G網路的技術差異與應用選擇
- OpenCV中GPU模組使用OpenCVGPU
- Drupal 模組使用心得
- VNPY 價差交易模組的使用學習
- nodejs 日誌模組 winston 的使用NodeJS
- 非同步網路模組之aiohttp的使用非同步AIHTTP
- 快速獲取昨天的日期(time模組使用)
- Python logging模組的使用Python
- Fabric-CA1.0模組的搭建與使用
- 爬蟲-urllib3模組的使用爬蟲
- python中的itertools模組簡單使用Python