今天我們?cè)谶@里有一個(gè)有趣的項(xiàng)目,我們將 使用Arduino和GPRS將數(shù)據(jù)發(fā)送到SparkFun服務(wù)器 。這是一個(gè)基于物聯(lián)網(wǎng)的項(xiàng)目,我們將使用 GPRS, 存在于 GSM 模塊 SIM900A 板上, 將一些數(shù)據(jù)發(fā)送到互聯(lián)網(wǎng)上的網(wǎng)絡(luò)服務(wù).
在這個(gè)項(xiàng)目中,我們將簡(jiǎn)單地使用4x4字母數(shù)字鍵盤輸入一些文本,并使用Arduino和GPRS將其發(fā)送到SparkFun網(wǎng)站,從那里您可以通過互聯(lián)網(wǎng)從任何地方看到這些數(shù)據(jù)。在這里,我們還附加了一個(gè)16x2 LCD以在本地查看數(shù)據(jù)。這種數(shù)據(jù)發(fā)送技術(shù)在物聯(lián)網(wǎng)項(xiàng)目中非常有用,您希望從世界任何地方監(jiān)控事物,例如監(jiān)控溫度和濕度,監(jiān)控車輛位置,監(jiān)控心跳,監(jiān)控空氣污染水平等。
所需組件:
- 阿杜伊諾
- GSM模塊SIM900A
- 16x2 液晶顯示器
- 4x4 矩陣鍵盤
- 面包板或印刷電路板
- 連接跳線
- 電源 12v
- SIM卡
在GSM模塊中使用GPRS:
在這里,我們使用帶有SIM卡的普通GSM模塊進(jìn)行GPRS連接。在這個(gè)項(xiàng)目中,GPRS負(fù)責(zé)將數(shù)據(jù)發(fā)送到Sparkfun服務(wù)器。以前我們做過很多項(xiàng)目,使用 Wi-Fi 模塊 ESP8266 通過互聯(lián)網(wǎng)將數(shù)據(jù)發(fā)送到不同的服務(wù)器。但這次我們使用了GPRS。
GPRS代表通用分組無線電服務(wù),它是一種基于分組的無線通信服務(wù),其數(shù)據(jù)速率為56-114kbps,并提供與互聯(lián)網(wǎng)的連接。
對(duì)于GPRS,我們不需要購買任何特殊的模塊或硬件,因?yàn)镚SM已經(jīng)內(nèi)置了GPRS設(shè)施。
現(xiàn)在為了使用GPRS將數(shù)據(jù)發(fā)送到服務(wù)器,首先我們需要初始化GSM模塊。
初始化 GSM 的命令:
AT :- this command is used to check whether GSM module is responding or not.
AT+CPIN? :- this command is used to check whether SIM card is inserted in GSM Module or not.
ATE0 :- is used for disabling echo
ATE1 :- is used for enabling echo
用于初始化 GPRS 互聯(lián)網(wǎng)連接的命令:
AT+CIPSHUT :- to close TCP Port Explicitly means disconnect connection if any
AT+CGATT? :- Checking SIM card has internet connection or not
AT+CSTT = "APN","userName","Pass" :- connect to internet
(ex; AT+CSTT="airtelgprs.com","","")
AT+CIICR :- bring up with the wireless network. Checking SIM card has data pack or balance
AT+CIFSR :- get IP (sometimes without this command GSM do not work so use this command)
AT+CIPSTART = ”TCP”,”SERVER IP”,”PORT” :- is used for creating TCP connection with the server that we provide in place of SERVER IP
AT+CIPSEND :- this command is used for sending data to the server. After input, this command server asks for data.
輸入數(shù)據(jù)后,我們將 26 發(fā)送到服務(wù)器。如果一切正常,則數(shù)據(jù)將成功發(fā)布到服務(wù)器, SparkFun服務(wù)器以通過或失敗字符串進(jìn)行響應(yīng) 。
工作說明:
從GSM模塊的GPRS發(fā)送數(shù)據(jù)的過程很容易。在這個(gè)項(xiàng)目中,我們將通過使用鍵盤鍵入來向服務(wù)器發(fā)送一些字符串或單詞。LCD上將出現(xiàn)相同的字符串或單詞,然后按D/OK將輸入字符串發(fā)送到服務(wù)器。在這里,我們創(chuàng)建了一個(gè)字母數(shù)字鍵盤,用于將字符或數(shù)值輸入Arduino或LCD。C/clear被編程為退格鍵。
字母數(shù)字是一種使用相同的 4x4 矩陣 Kepad 鍵盤輸入數(shù)字和字母的方法。在這里,我們?yōu)?a href="http://www.wenjunhu.com/outside?redirect=https://circuitdigest.com/microcontroller-projects/keypad-interfacing-with-arduino-uno" target="_blank">Arduino編寫了相同的4x4鍵盤以接受字母表。檢查文章末尾的完整代碼。
電路說明:
為了 將數(shù)據(jù)發(fā)送到SparkFun Server ,我們需要將鍵盤和GSM模塊連接到Arduino。在這個(gè)項(xiàng)目中,我們使用Arduino從鍵盤獲取輸入字符串,并將命令發(fā)送到GSM / GPRS模塊。GSM/GPRS用于與互聯(lián)網(wǎng)通信,以便將數(shù)據(jù)發(fā)送到Sparkfun服務(wù)器。GSM模塊的Rx和Tx引腳分別與Arduino的引腳D3和D2直接連接(Arduino和GSM的接地必須相互連接)。16x2 LCD 用于顯示輸入字符串以及顯示歡迎消息和數(shù)據(jù)發(fā)送狀態(tài)。此 16x2 LCD 的引腳(即 Rs、en、d4、d5、d6 和 d7)分別與 Arduino 的引腳編號(hào) 14、15、16、17、18 和 19 連接。4x4鍵盤用于Arduino的輸入字符串,其行引腳R1,R2,R3,R4直接鏈接到Arduino的引腳編號(hào)11,10,9,8,鍵盤C1,C2,C3的Colum引腳與Arduino的引腳編號(hào)7,6,5,4鏈接。
在這里,我們還將GSM Tx引腳連接到Arduino的Tx,以通過串行監(jiān)視器獲取響應(yīng)數(shù)據(jù)。
編程說明:
這個(gè)項(xiàng)目的編程部分對(duì)于初學(xué)者來說有點(diǎn)復(fù)雜,但通過做一點(diǎn)練習(xí)和注意,你可以理解它。在此代碼中,我們使用鍵盤庫來連接用于輸入數(shù)字的簡(jiǎn)單鍵盤。對(duì)于輸入字母表,我們使用相同的庫和鍵盤,但使用了另一個(gè)功能來使其成為字母數(shù)字鍵盤。意味著我們已經(jīng)使每個(gè)鍵都具有多功能性,并且只需使用 10 個(gè)鍵即可輸入所有字符和整數(shù)。
如果我們按鍵 2 (ABC2),它將顯示“A”,如果我們?cè)俅伟聪滤?,那么它將用“B”替換“A”,如果我們?cè)俅伟聪滤?,那么它將?LCD 中的同一位置顯示“C”。如果我們?cè)诎聪履硞€(gè)鍵后等待一段時(shí)間,光標(biāo)將自動(dòng)移動(dòng)到LCD中的下一個(gè)位置?,F(xiàn)在我們可以輸入下一個(gè)字符或數(shù)字。相同的過程應(yīng)用于其他鍵。它的工作原理與舊手機(jī)中的鍵盤相同。
下面我們包含了 Keypad.h 庫并為鍵定義數(shù)組矩陣:
#include // keypad library for interfacing keypad
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
int x=0;
int y=0;
int n=0;
int minValue=0;
int maxValue=0;
char keyPress=0;
int keyPressTime=100;
String msg="";
char hexaKeys[ROWS][COLS] =
{
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {11, 10, 9, 8}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {7, 6, 5, 4}; //connect to the column pinouts of the keypad
給定的 void getkey 函數(shù)用于輸入字母表
void getkey(int minValue, int maxValue, char keyPress)
{
int ch=minValue;
int pressed=1;
char key=keyPress;
lcd.noBlink();
for(int i=0;iif(key==keyPress)
{
lcd.setCursor(x,y);
lcd.print(alpha[ch]);
ch++;
if(ch>maxValue)
ch=minValue;
i=0;
}
....
.....
下面的 void initGSM( ) 和 void initGPRS() 函數(shù)用于初始化 GSM 模塊和 GPRS
void initGSM()
{
connectGSM("AT","OK");
connectGSM("ATE1","OK");
connectGSM("AT+CPIN?","READY");
}
void initGPRS()
{
connectGSM("AT+CIPSHUT","OK");
connectGSM("AT+CGATT=1","OK");
connectGSM("AT+CSTT=\"airtelgprs.com\\",\"\\",\"\\"","OK");
connectGSM("AT+CIICR","OK");
delay(1000);
Serial1.println("AT+CIFSR");
delay(1000);
}
下面的部分代碼用于創(chuàng)建 URL 并通過 URL 將數(shù)據(jù)發(fā)送到服務(wù)器。
else if(key == 'D')
{
lcd.clear();
lcd.noBlink();
lcd.print("Sending Data");
lcd.setCursor(0,1);
lcd.print("To Server");
url="GET /input/";
url+=publicKey;
url+="?private_key=";
url+=pvtKey;
url+="&log=";
url+=msg;
url+=" HTTP/1.0\\r\\n\\r\\n";
String svr=Start+","+ip+","+port;
delay(1000);
connectGSM(svr,"CONNECT");
delay(1000);
int len = url.length();
String str="";
str=SendCmd+len;
sendToServer(str);
因此,這就是我們?nèi)绾瓮ㄟ^GPRS在SparkFun服務(wù)器上發(fā)送任何數(shù)據(jù),以便從世界任何地方進(jìn)行監(jiān)控。
-
服務(wù)器
+關(guān)注
關(guān)注
12文章
9234瀏覽量
85643 -
GPRS
+關(guān)注
關(guān)注
21文章
984瀏覽量
129490 -
Arduino
+關(guān)注
關(guān)注
188文章
6472瀏覽量
187331
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論