納雷科技CEO周坤明:24GHz毫米波雷達傳感器批量出貨 服務四大目標市場
SIM900A是一個比較實用的GPRS模塊,進行簡單的配置就可以進行用于數(shù)據(jù)傳輸,配置使用AT指令進行交互,用GPRS遠程傳輸數(shù)據(jù)時,有兩種方式,一種是正常的模式,沒法送一次要發(fā)送0x1a來開啟數(shù)據(jù)發(fā)送,另一種方式透傳模式,設置好了之后,可以一直往模塊來發(fā)送數(shù)據(jù),模塊會自動將緩沖區(qū)中的數(shù)據(jù)發(fā)送出去,但最后還要發(fā)送+++來退出透傳數(shù)據(jù)模式,回到正常模式。
SIM900A模塊主要特點:SMT封裝:易于客戶生產(chǎn)加工;尺寸?。?24*24*3mm;功耗低:待機模式電流低于18mA、sleep模式低于2mA;供電范圍寬:3.2~4.8V;支持頻段:GSM/GPRS 900/1800MHz;語音編碼:支持半速率、全速率、增強型速率;支持回聲抑制算法,可以基于不同客戶設備通過AT命令調(diào)節(jié)回音抑制消除。
基于SIM900A-GPRS模塊的遠程文件傳輸實例第一種方式
sim900a模塊上面有電源引腳,串口引腳,上位機通過串口和模塊進行交互,最簡單的是用一塊usb轉(zhuǎn)串口的USB TTL來和上位機的usb端口連接,該模塊支持移動和聯(lián)通sim卡。測試是在linux環(huán)境下進行的,可以使用命令ls /dev/ttyUSB* 來查看模塊是否正常掛載,掛載的話一般顯示有ttyUSB0,發(fā)現(xiàn)在Linux下串口工具不如window下怎么好用,直接用程序來控制讀寫更加方面。
在linux下,設備會被當成文件處理,可以像讀寫文件一樣方便的與設備交互。使用之前最好只用“AT+CSQ”和“AT+COPS”來查詢信號的質(zhì)量和運營商等信息。如果sim卡識別不出,則無法進行下一步。普通模式配置很簡單:
char c, str[BUFFSIZE];
memset(str, 0, sizeof(str));
strcpy(str, “AT+CLPORT=”TCP“,”4000“ ”);
i = write(fd, str, strlen(str));
printf(“str= %s ”, str);
sleep(1);
memset(str, 0, sizeof(str));
strcpy(str, “AT+CIPSTART=”TCP“,”115.28.6.76“,”4000“ ”);//連接遠程服務器
i = write(fd, str, strlen(str));
printf(“str= %s ”, str);
sleep(1);
發(fā)送過程可以按照普通的文件方式:
while((file_block_length=fread(buff,sizeof(char),BUFFSIZE,fs))》0)
{
printf(“file_block_length:%d ”, file_block_length);
memset(str, 0, sizeof(str));
strcpy(str, “AT+CIPSEND ”);
i = write(fd, str, strlen(str));
sleep(1);
i = write(fd, buff, strlen(buff));
sleep(1);
i = write(fd, &ctemp, sizeof(ctemp));//啟動發(fā)送標志,ox1a
sleep(1);
memset(buff,0,BUFFSIZE);
}
這種方式比較機械,而且每一次發(fā)送的最大的字節(jié)大概不能超過1300字節(jié),串口速率為115200,發(fā)送的速率還是很慢的,程序中加延時是保證指令執(zhí)行完,實際上要不了這么長時間,使用usleep()函數(shù)可以使用更短的時間延時。
第二種方式
這種方式相比較前一種方式,主要的改進是可以一種往串口寫數(shù)據(jù),模塊會自動發(fā)送緩沖區(qū)中的數(shù)據(jù),但是缺點是剛開始的配置方式有點長,設置好了之后可以直接應用,這種方式測試的時候不是很穩(wěn)定,從數(shù)據(jù)傳輸模式跳回命令模式時,可能失效。
配置的過程如下:
char c, str[BUFFSIZE];
//透傳模式配置過程
memset(str, 0, sizeof(str));
strcpy(str, “AT+IFC=2,2 ”); //
i = write(fd, str, strlen(str));
printf(“str= %s ”, str);
memset(str, 0, sizeof(str));
strcpy(str, “AT+CIPMODE=1 ”); //
i = write(fd, str, strlen(str));
printf(“str= %s ”, str);
memset(str, 0, sizeof(str));
strcpy(str, “AT+CSTT=”CMNET“ ”);
i = write(fd, str, strlen(str));
printf(“str= %s ”, str);
memset(str, 0, sizeof(str));
strcpy(str, “AT+CIICR ”);
i = write(fd, str, strlen(str));
printf(“str= %s ”, str);
memset(str, 0, sizeof(str));
strcpy(str, “AT+CIFSR ”);
i = write(fd, str, strlen(str));
printf(“str= %s ”, str);
memset(str, 0, sizeof(str));
strcpy(str, “AT+CIPSTART=”TCP“,”115.28.6.76“,”4000“ ”);
i = write(fd, str, strlen(str));
printf(“str= %s ”, str);
//省略發(fā)送數(shù)據(jù)部分
sleep(2);
memset(str, 0, sizeof(str));
strcpy(str, “+++”);
i = write(fd, str, strlen(str));《/span》//從透傳模式回到命令模式