今天我们在这里有一个有趣的项目,我们将 使用Arduino和GPRS将数据发送到SparkFun服务器 。这是一个基于物联网的项目,我们将使用 GPRS, 存在于 GSM 模块 SIM900A 板上, 将一些数据发送到互联网上的网络服务.
在这个项目中,我们将简单地使用4x4字母数字键盘输入一些文本,并使用Arduino和GPRS将其发送到SparkFun网站,从那里您可以通过互联网从任何地方看到这些数据。在这里,我们还附加了一个16x2 LCD以在本地查看数据。这种数据发送技术在物联网项目中非常有用,您希望从世界任何地方监控事物,例如监控温度和湿度,监控车辆位置,监控心跳,监控空气污染水平等。
在这里,我们使用带有SIM卡的普通GSM模块进行GPRS连接。在这个项目中,GPRS负责将数据发送到Sparkfun服务器。以前我们做过很多项目,使用 Wi-Fi 模块 ESP8266 通过互联网将数据发送到不同的服务器。但这次我们使用了GPRS。
GPRS代表通用分组无线电服务,它是一种基于分组的无线通信服务,其数据速率为56-114kbps,并提供与互联网的连接。
对于GPRS,我们不需要购买任何特殊的模块或硬件,因为GSM已经内置了GPRS设施。
现在为了使用GPRS将数据发送到服务器,首先我们需要初始化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 互联网连接的命令:
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.
输入数据后,我们将 26 发送到服务器。如果一切正常,则数据将成功发布到服务器, SparkFun服务器以通过或失败字符串进行响应 。
从GSM模块的GPRS发送数据的过程很容易。在这个项目中,我们将通过使用键盘键入来向服务器发送一些字符串或单词。LCD上将出现相同的字符串或单词,然后按D/OK将输入字符串发送到服务器。在这里,我们创建了一个字母数字键盘,用于将字符或数值输入Arduino或LCD。C/clear被编程为退格键。
字母数字是一种使用相同的 4x4 矩阵 Kepad 键盘输入数字和字母的方法。在这里,我们为Arduino编写了相同的4x4键盘以接受字母表。检查文章末尾的完整代码。
为了 将数据发送到SparkFun Server ,我们需要将键盘和GSM模块连接到Arduino。在这个项目中,我们使用Arduino从键盘获取输入字符串,并将命令发送到GSM / GPRS模块。GSM/GPRS用于与互联网通信,以便将数据发送到Sparkfun服务器。GSM模块的Rx和Tx引脚分别与Arduino的引脚D3和D2直接连接(Arduino和GSM的接地必须相互连接)。16x2 LCD 用于显示输入字符串以及显示欢迎消息和数据发送状态。此 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,以通过串行监视器获取响应数据。
这个项目的编程部分对于初学者来说有点复杂,但通过做一点练习和注意,你可以理解它。在此代码中,我们使用键盘库来连接用于输入数字的简单键盘。对于输入字母表,我们使用相同的库和键盘,但使用了另一个功能来使其成为字母数字键盘。意味着我们已经使每个键都具有多功能性,并且只需使用 10 个键即可输入所有字符和整数。
如果我们按键 2 (ABC2),它将显示“A”,如果我们再次按下它,那么它将用“B”替换“A”,如果我们再次按下它,那么它将在 LCD 中的同一位置显示“C”。如果我们在按下某个键后等待一段时间,光标将自动移动到LCD中的下一个位置。现在我们可以输入下一个字符或数字。相同的过程应用于其他键。它的工作原理与旧手机中的键盘相同。
下面我们包含了 Keypad.h 库并为键定义数组矩阵:
#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 函数用于输入字母表
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() 函数用于初始化 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);
}
下面的部分代码用于创建 URL 并通过 URL 将数据发送到服务器。
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服务器上发送任何数据,以便从世界任何地方进行监控。
全部0条评论
快来发表一下你的评论吧 !