今天我們在這里有一個有趣的項目,我們將 使用Arduino和GPRS將數(shù)據(jù)發(fā)送到SparkFun服務器 。這是一個基于物聯(lián)網(wǎng)的項目,我們將使用 GPRS, 存在于 GSM 模塊 SIM900A 板上, 將一些數(shù)據(jù)發(fā)送到互聯(lián)網(wǎng)上的網(wǎng)絡服務.
在這個項目中,我們將簡單地使用4x4字母數(shù)字鍵盤輸入一些文本,并使用Arduino和GPRS將其發(fā)送到SparkFun網(wǎng)站,從那里您可以通過互聯(lián)網(wǎng)從任何地方看到這些數(shù)據(jù)。在這里,我們還附加了一個16x2 LCD以在本地查看數(shù)據(jù)。這種數(shù)據(jù)發(fā)送技術在物聯(lián)網(wǎng)項目中非常有用,您希望從世界任何地方監(jiān)控事物,例如監(jiān)控溫度和濕度,監(jiān)控車輛位置,監(jiān)控心跳,監(jiān)控空氣污染水平等。
所需組件:
- 阿杜伊諾
- GSM模塊SIM900A
- 16x2 液晶顯示器
- 4x4 矩陣鍵盤
- 面包板或印刷電路板
- 連接跳線
- 電源 12v
- SIM卡
在GSM模塊中使用GPRS:
在這里,我們使用帶有SIM卡的普通GSM模塊進行GPRS連接。在這個項目中,GPRS負責將數(shù)據(jù)發(fā)送到Sparkfun服務器。以前我們做過很多項目,使用 Wi-Fi 模塊 ESP8266 通過互聯(lián)網(wǎng)將數(shù)據(jù)發(fā)送到不同的服務器。但這次我們使用了GPRS。
GPRS代表通用分組無線電服務,它是一種基于分組的無線通信服務,其數(shù)據(jù)速率為56-114kbps,并提供與互聯(lián)網(wǎng)的連接。
對于GPRS,我們不需要購買任何特殊的模塊或硬件,因為GSM已經內置了GPRS設施。
現(xiàn)在為了使用GPRS將數(shù)據(jù)發(fā)送到服務器,首先我們需要初始化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ā)送到服務器。如果一切正常,則數(shù)據(jù)將成功發(fā)布到服務器, SparkFun服務器以通過或失敗字符串進行響應 。
工作說明:
從GSM模塊的GPRS發(fā)送數(shù)據(jù)的過程很容易。在這個項目中,我們將通過使用鍵盤鍵入來向服務器發(fā)送一些字符串或單詞。LCD上將出現(xiàn)相同的字符串或單詞,然后按D/OK將輸入字符串發(fā)送到服務器。在這里,我們創(chuàng)建了一個字母數(shù)字鍵盤,用于將字符或數(shù)值輸入Arduino或LCD。C/clear被編程為退格鍵。
字母數(shù)字是一種使用相同的 4x4 矩陣 Kepad 鍵盤輸入數(shù)字和字母的方法。在這里,我們?yōu)?a href="http://m.1cnz.cn/outside?redirect=https://circuitdigest.com/microcontroller-projects/keypad-interfacing-with-arduino-uno" target="_blank">Arduino編寫了相同的4x4鍵盤以接受字母表。檢查文章末尾的完整代碼。
電路說明:
為了 將數(shù)據(jù)發(fā)送到SparkFun Server ,我們需要將鍵盤和GSM模塊連接到Arduino。在這個項目中,我們使用Arduino從鍵盤獲取輸入字符串,并將命令發(fā)送到GSM / GPRS模塊。GSM/GPRS用于與互聯(lián)網(wǎng)通信,以便將數(shù)據(jù)發(fā)送到Sparkfun服務器。GSM模塊的Rx和Tx引腳分別與Arduino的引腳D3和D2直接連接(Arduino和GSM的接地必須相互連接)。16x2 LCD 用于顯示輸入字符串以及顯示歡迎消息和數(shù)據(jù)發(fā)送狀態(tài)。此 16x2 LCD 的引腳(即 Rs、en、d4、d5、d6 和 d7)分別與 Arduino 的引腳編號 14、15、16、17、18 和 19 連接。4x4鍵盤用于Arduino的輸入字符串,其行引腳R1,R2,R3,R4直接鏈接到Arduino的引腳編號11,10,9,8,鍵盤C1,C2,C3的Colum引腳與Arduino的引腳編號7,6,5,4鏈接。
在這里,我們還將GSM Tx引腳連接到Arduino的Tx,以通過串行監(jiān)視器獲取響應數(shù)據(jù)。
編程說明:
這個項目的編程部分對于初學者來說有點復雜,但通過做一點練習和注意,你可以理解它。在此代碼中,我們使用鍵盤庫來連接用于輸入數(shù)字的簡單鍵盤。對于輸入字母表,我們使用相同的庫和鍵盤,但使用了另一個功能來使其成為字母數(shù)字鍵盤。意味著我們已經使每個鍵都具有多功能性,并且只需使用 10 個鍵即可輸入所有字符和整數(shù)。
如果我們按鍵 2 (ABC2),它將顯示“A”,如果我們再次按下它,那么它將用“B”替換“A”,如果我們再次按下它,那么它將在 LCD 中的同一位置顯示“C”。如果我們在按下某個鍵后等待一段時間,光標將自動移動到LCD中的下一個位置。現(xiàn)在我們可以輸入下一個字符或數(shù)字。相同的過程應用于其他鍵。它的工作原理與舊手機中的鍵盤相同。
下面我們包含了 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ā)送到服務器。
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);
因此,這就是我們如何通過GPRS在SparkFun服務器上發(fā)送任何數(shù)據(jù),以便從世界任何地方進行監(jiān)控。
-
服務器
+關注
關注
12文章
9184瀏覽量
85479 -
GPRS
+關注
關注
21文章
984瀏覽量
129461 -
Arduino
+關注
關注
188文章
6470瀏覽量
187162
發(fā)布評論請先 登錄
相關推薦
評論