开源第七周 GPRS模块+yeelink+nginx服务器数据传输测试
来源:互联网 发布:微页制作软件 编辑:程序博客网 时间:2024/05/05 18:42
开源第七周:
现在这个项目也进入了尾声,前期数据也基本处理完成,现在只差最后一步--将数据传送到服务器之上。现在我打算暂时将数据通过GPRS模块上传到yeelink平台,将我所需要的数据全部进行处理。下一周再构建服务器和上传数据到构建的服务器。
GPRS模块现在基本上是没有问题了,可以通过设置GPRS模块的目标IP和端口来设定目标网络。当然也可以使用域名透析,使用ip+端口的方式相对要简单一丁点,只需要获取服务器的ip地址,在获得相应的传输通信端口就可以直接向服务器上传数据。而使用域名解析还要对SIM900模块进行设置,设置为URL域名透析模式,而且还有有域名才可以。不过域名解析也有一个比IP+端口传输更好的好处:如果服务器拥有公网ip,那么它的ip并不会有任何的变化,而如果服务器处于网络的内层,通过nat向上层传输数据,那么服务器的公网IP则有可能发生变化,所以还得多次获取服务器的公网IP并在SIM900程序中做出相应的设置修改。
在阶段测试的时候如果没有服务器可以自己构建一个虚拟服务器,也可以只构建一个映射,在本地建立一个TCP/UDP service来监控数据。
一、数据发送:
源代码在此:
#include<SoftwareSerial.h>SoftwareSerial serial1(6,7);long previousMillis = 0; // will store last time LED was updatedlong interval = 17000; // interval at which to get (milliseconds)String a = "";void setup() { Serial.begin(9600); serial1.begin(9600); serial1.listen(); while(!gprsINI());}void loop(){ unsigned long currentMillis = millis(); while(serial1.available()) { char c =serial1.read(); Serial.print(c); } if(currentMillis - previousMillis > interval) { previousMillis = currentMillis; sim800MSG("AT+CIPSTART=\"TCP\",\"api.yeelink.net\",\"80\""); delay(3500); sim800MSG("AT+CIPSEND"); delay(200); int i=a.length()+12; String ss; ss= "POST /v1.1/device/13452/sensor/22398/datapoints HTTP/1.1\r\n"; ss += "Host: api.yeelink.net\r\n"; ss += "Accept: *"; ss += "/"; ss += "*\r\n"; ss += "U-ApiKey:075e0a5ec9ed624a65678f424f1d3427\r\n"; ss += "Content-Length: "; ss += i; ss += "\r\n"; ss += "Content-Type: application/x-www-form-urlencoded\r\n"; ss += "Connection: close\r\n\r\n"; ss += "{\"value\":\""; ss += a; ss += "\"}\r\n"; ss += "\x1A"; Serial.println(sim800MSG(ss)); }}boolean gprsINI(){ String msg; msg = sim800MSG("AT+SAPBR=2,1"); Serial.println(msg); sim800MSG("ATE"); if(msg.indexOf("OK") > 0) if(msg.indexOf("0.0.0.0") > 0) { sim800MSG("AT+SAPBR=3,1,\"Contype\",\"GPRS\""); sim800MSG("AT+SAPBR=3,1,\"APN\",\"CMNET\""); sim800MSG("AT+SAPBR=1,1"); } else return 1; delay(2000); return 0;}String sim800MSG(String msg){ String str; boolean ActionFlag = false; if(msg.indexOf("HTTPACTION")>0) ActionFlag = true; serial1.println(msg); while(!serial1.available()) delay(10); while(serial1.available()) { char c = serial1.read(); str += c; delayMicroseconds(1200); // delay(2); } if(ActionFlag) { while(!serial1.available()) delay(10); while(serial1.available()) { char c = serial1.read(); str += c; delay(2); } }// Serial.println(str); return str;}
二、服务器端:
●请求行,例如GET /images/logo.gif HTTP/1.1,表示从/images目录下请求logo.gif这个文件。
●(请求)头,例如Accept-Language: en
●空行
●可选的消息体 请求行和标题必须以<CR><LF>作为结尾(也就是,回车然后换行)。空行内必须只有<CR><LF>而无其他空格。在HTTP/1.1协议中,所有的请求头,除host外,都是可选的。
OPTIONS - 返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送'*'的请求来测试服务器的功能性。
HEAD- 向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。
GET - 向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中,例如在web app.中。其中一个原因是GET可能会被网络蜘蛛等随意访问。
POST - 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
PUT - 向指定资源位置上传其最新内容。
DELETE - 请求服务器删除Request-URI所标识的资源。
TRACE- 回显服务器收到的请求,主要用于测试或诊断。
CONNECT - HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
PATCH - 用来将局部修改应用于某一资源,添加于规范RFC5789。
方法名称是区分大小写的。当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Method Not Allowed);当服务器不认识或者不支持对应的请求方法的时候,应当返回状态码501(Not Implemented)。
HTTP服务器至少应该实现GET和HEAD方法,其他方法都是可选的。当然,所有的方法支持的实现都应当符合下述的方法各自的语义定义。此外,除了上述方法,特定的HTTP服务器还能够扩展自定义的方法。
2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
3. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
4. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
5. get安全性非常低,post安全性较高。但是执行效率却比Post方法好。
建议:
一些服务器操作系统在处理可以立即传递给应用程序的命令行参数时,会限制其数目和长度,在这种情况下,对那些有许多字段或是很长的文本域的表单来说,就应该采用 POST 方法来发送。
2、如果你在编写服务器端的表单处理应用程序方面经验不足,应该选择 GET 方法。如果采用 POST 方法,就要在读取和解码方法做些额外的工作,也许这并不很难,但是也许你不太愿意去处理这些问题。
3、如果安全性是个问题,那么我们建议选用 POST 方法。GET 方法将表单参数直接放在应用程序的 URL 中,这样网络窥探者可以很轻松地捕获它们,还可以从服务器的日志文件中进行摘录。如果参数中包含了信用卡帐号这样的敏感信息,就会在不知不觉中危及用户的安全。而 POST 应用程序就没有安全方面的漏洞,在将参数作为单独的事务传输给服务器进行处理时,至少还可以采用加密的方法。
4、如果想在表单之外调用服务器端的应用程序,而且包括向其传递参数的过程,就要采用 GET 方法,因为该方法允许把表单这样的参数包括进来作为 URL 的一部分。而另一方面,使用 POST 样式的应用程序却希望在 URL 后还能有一个来自浏览器额外的传输过程,其中传输的内容不能作为传统 <a> 标签的内容。
这里就是服务器上收到的数据:
117.136.62.114 - - [20/Aug/2014:12:25:11 +0800] "POST/v1.1/DH22TemperatureC/12.3/DH22Humidity/23/Light/123/ultraviolet/0/temperature/23/humidity/25/dewpoint/28/Wind/2.3/Dust/234.5/" 400 166 "-" "-" -
、
这里由于我只是做一个数据上传的测试,所以用的'/'做数据提示分割,并没有用分割参数,如果要使用分割参数,最好在数据里对分割参数做好处理,因为分隔参数所用的 & 符号也是字符实体中的插入符号。如果在 <a> 标签的 href 属性中放入一个 & 符号,浏览器就会将其后面的字符替换成相应的字符实体。可以用其他的符号如';'代替&或者用它的实体对等物来替换 & 符号,也就是用 "&" 或 "&" 来替换。
- 开源第七周 GPRS模块+yeelink+nginx服务器数据传输测试
- 开源第六周 ethernet shield数据传输+yeelink
- GSM模块_STM32实现GPRS与服务器数据传输经验总结
- GPRS模块与STM32的数据传输
- GPRS 数据传输
- GPRS模块与Internet上主机的连接、数据传输过程
- GSM900模块的GPRS数据传输技术的研究
- GPRS模块与Internet上主机的连接、数据传输过程
- GPRS数据处理-MOOC第七周
- 用电脑测试GPRS模块的好坏
- ARM里面GPRS数据传输
- GPRS数据传输平面
- GPRS MG301数据传输设置
- 用hurl测试yeelink
- 开源第五周 SIM900模块指令调试+数据传输—乐联平台
- sim300 GPRS模块与服务器TCP通信完成
- GPRS模块的使用与相应SOCKET服务器的搭建
- SIM9000A SIM模块GPRS测试--记录这一路的喜乐
- CVSS漏洞风险评估影响影子
- Ionic框架支持Vagrant镜像方式建立虚拟开发环境了
- Cocos2d-x之getVisibleSize,getContentSize,boundingBox,getContentSizeInPixels,convertToGL,convertToUI
- ZooKeeper客户端 和服务器连接时版本问题
- linux查看hostname
- 开源第七周 GPRS模块+yeelink+nginx服务器数据传输测试
- (转)ym—— Android网络框架Volley(实战篇)
- 静态联编和动态联编
- ubuntu 14 install QQ
- C# 无法立即完成一个非阻挡性套接字操作
- hdu 4965(矩阵乘法 )
- 网站的日常维护
- linux上源码安装MySQL详解
- 一站式学习Wireshark(八):应用Wireshark过滤条件抓取特定数据流