|
本帖最后由 jerry840922 于 2014-9-29 14:06 编辑
文档主要阐述使用51单片机(STC15F2K60S2)通过嵌入式GPRS模块将温湿度及电池电压数据上传到乐联网平台的过程,主要应用于农业生产园区提供简易小型气象站数据的采集与记录。整个模块使用3.7V锂电池供电,为了实现低功耗工作,通过STC15F2K60S2内部掉电唤醒定时器来计时实现间歇工作,工作间隔时长以15min为单位增加,经过测试4000MA电池满电的状态下,30MIN分钟发一次数据可工作15-20天左右,同时有太阳能板供电接口,接入5V太阳能板可长时间工作。
需要准备的硬件材料:1、GPRS模块;2、手机流量卡;3、传感器:DS18B20,AM2303/AM2302;4、STC15F2K60S2模块;5、锂电池(或者其他电源);6、5V太阳能板(可选)。
需要准备的上位机平台:注册乐联网(www.lewei50.com)账号并获取userkey,添加相应的传感器设备
一、 通过GPRS模块发送数据到乐联网的实现原理
为了说明原理这里借用一张图:(来源文档《基于 TCP 的数据上传和反向控制流程的分析-V1.1》,感谢作者Wicy001。)
实现的原理就是通过GPRS模块以TCP Client模式连接乐联网WEB服务器(www.lewei50.com:80),以HTTP协议POST方式向乐联网数据平台发送数据,GPRS模块要做的工作就是透传,不带任何条件的透传,STC15F2K60S2的任务就是串口发送HTTP协议字符,是不是觉得51这老古董平台能轻易搭上TCP,HTTP这些名词有些不可以思议?最开始我也不相信,不管你信不信,现在反正我信了。
为了验证数据能否正确上传,我们可以使用socket tool这个调试工具测试一下(当然首先你必须注册有乐联网账号,获取了userkey并在平台上添加了相关传感器),发送的HTTP协议字符格式如下:
POST /api/V1/gateway/UpdateSensors/02 HTTP/1.1 //注意是你的设备标志
userkey:****************************************//你的USERKEY
Host: open.lewei50.com
Content-Length: 117 //下面绿色字体的字符长度
Connection: close //这一行结束后必须两次回车换行
[{"Name":"Y1","Value":" 218"},{"Name":"Y2","Value":" 898"},{"Name":"Y3","Value":" 208"},{"Name":"Y4","Value":" 408"}]
以上就是模拟发送数据的过程。
二、 硬件平台的搭建
1、 GPRS模块的设置
我测试过两个品牌的嵌入式GPRS DTU模块,分别是厦门四信的F2113模块和山东有人科技的USR-GPRS-7s2,其中F2113是一开始测试采购的模块,价格相当高大上,人民币500+,淘宝没有相关卖家销售,有人科技的USR-GPRS-7s2模块价格就相对亲民多了,淘宝商城有售,人民币148元。在此不得不吐槽一下,这两款产品测试过程中都遇到了一些问题,有几个问题一直追到他们研发那才得以解答,最后究其原因还是因为相对应的文档功能参数描述不清楚或者驴唇不对马嘴。
GPRS模块设置需要强调的一点就是针对乐联网发送数据,必须使用纯纯的透传模式,GPRS模块运行后不能发送注册包,心跳包等,不然乐联网服务器绝对会给你好看。
厦门四信F2113模块参数设置
有人科技 USR-GPRS-7s2参数设置
2、下位机51平台的搭建
传感器接口:整个电路有两个传感器接口,一个是单线接口,支持AM2302/AM2303,DS18B20等单总线器件,另一个为双线接口,支持单总线和I2C接口,除了可以使用单总线器件外,还可以接入如SHT系列的传感器。
电源部分:电源可以使用锂电池供电,采用LDO SP6201为整个系统提供3.3V电源,同时有TP4056芯片可以为锂电池充电。
电池电量检测部分:使用电阻分压与TL431基准配合,通过51内部ADC检测电池工作状态下电压,可以一定程度上反映电池的电量情况。
GPRS模块供电部分:由于低功耗的要求致使GPRS模块必须间歇性的工作,因此采用PMOS FDN304来对GPRS模块电源进行通断管理,在此需要特别说明是:USR-GPRS-7s2必须在电源回路上并接一个470uf以上的电容来提供稳定的电源,否则模块间不能正常工作,这点我耗费了1天的时间。
单片机与GPRS接口电路:两个模块之间采用串口连接,同时单片机需要检测GPRS模式上线指示信号来决定是否需要发送数据
三、 下位机软件实现简要介绍
1、51工作流程图如下:
下位机软件部分主要核心工作是采集数据并通过串口向GPRS模块发送,程序编译下载到单片机之前需要设置userkey,设备标志,传感器数量等参数
我使用的是AM2303和DS1BB20两个传感器,AM2303测量环境温湿度,DS18B20测量土壤温湿度,如果使用其他传感器如SHT系列,只需要在程序中添加删除相应的驱动即可。
传感器接口定义在文件config.h里面可以更改定义
串口发送的数据个数在文件uart.c中有详细的注释,如果发送数据需要调整,只需要修改函数http_send_data(void)相应的行既可。
通过上面的过程可以得出,不论什么单片机平台,只要能实现字符数据的串口输出即可通过GPRS模块透传向乐联网平台发送数据,同时也可以得出这样一个结论,不论你是使用透传功能,还是AT指令操作GPRS模块,只要能模拟http协议post方式发送数据,就能向乐联网发送数据,一切皆有可能!
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|