本帖最后由 shuxulala 于 2015-5-13 11:06 编辑
在网上买了SIM900A模块,让OCROBOT MANGO II通过GPRS接入网络,上传数据至OneNet平台,SIM900A与OCROBOT MANGO II通过串口进行AT指令通信,与服务器建立TCP连接。
在调试过程中遇到一个问题,网上搜索了一下,也是在使用SIM900A模块过程中出现最普遍的问题之一,就是插上SIM卡,当SIM900A模块上电后,发现模块开始一段时间可以正常找到SIM卡,并搜索到运营商网络信号,过一两分钟后出现掉卡现象,最后发现是天线RF干扰,导致模块不能正常找到SIM卡,所以干脆拿掉天线,没想到也能正常工作了。该问题也算是一个硬件上的设计问题了,对天线放的位置不当。所以买模块还是要买质量好一点的啊,不然浪费时间,这里给大家分享,希望对大家调试有用。
开始前需要准备的材料:
SIM900A 模块 1块
SIM卡 1张
杜邦线 若干
OCROBOT MANGO II 1块
下面切入正题,先上两张GPRS模块实物图:
模块详细介绍:
电脑调试硬件接线图:
SIM900A模块与Ardiuno连线示意:
SIM900A OCROBOT MANGO II
VCC------------------------------5V
GND-----------------------------GND
TX--------------------------------PIN1
RX--------------------------------PIN0
实物连接图如下:
示例代码(改代码产生随机数模拟传感器实测数据):
#include
#define RET_OK 0
#define RET_ERR 1
#define TRYTIMES 1
#define DEVICE_ID "your device id"//替换成你的设备ID
#define API_KEY "your api key"//替换成你的API KEY
void setup()
{
Serial.begin(115200);
while (!Serial)
{
; // wait for serial port to connect. Needed for Leonardo only
}
while (1)
{
Serial.println("AT+COPS?\r");
delay(200);//延时
if (Serial.find("CHINA MOBILE") == true ) //检测是否收到 CHINA MOBILE 服务商信息。如果收到证明是连接上网络了
{
break;
}
}
sendCmd("AT+CLPORT=\"TCP\",\"2000\"\r");//发送指令指定本地端口
}
void loop()
{
int cnt = 178; //这个是JSON串里面的固定不变的部分的字符长度,后面再加上要传的数据的长度,就是整个串的长度了。
int temp = 0, hum = 0;
int noise = 0;
int light = 0;
String tmpString = "";
temp = random(100);//产生随机数温度数据
tmpString = String(temp);
cnt += tmpString.length();//加上温度数据的长度
hum = random(100);//产生随机数湿度数据
tmpString = String(hum);
cnt += tmpString.length();//加上湿度数据长度
noise = random(500);//产生随机数噪声数据
tmpString = String(noise);
cnt += tmpString.length();//加上噪音数据长度
light = random(2000);
tmpString = String(light);
cnt += tmpString.length();
establishTCPConnect("AT+CIPSTART=\"TCP\",\"183.230.40.33\",\"80\"\r");//此处修改你建立服务器的IP,服务器端口号80
startSendData("AT+CIPSEND\r");//开始发送数据
Serial.print("POST /devices/" + String(DEVICE_ID) + "/datapoints HTTP/1.1\r\n");
Serial.print("Host:api.heclouds.com\r\n");
Serial.print("api-key:" + String(API_KEY) + "\r\n");
Serial.print("Content-Length:" + String(cnt) + "\r\n");
Serial.println();
//JSON串
Serial.print("{\"datastreams\":[");
Serial.print("{\"id\":\"temp\",\"datapoints\":[{\"value\":" + String(temp) + "}]},");
Serial.print("{\"id\":\"hum\",\"datapoints\":[{\"value\":" + String(hum) + "}]},");
Serial.print("{\"id\":\"light\",\"datapoints\":[{\"value\":" + String(light) + "}]},");
Serial.print("{\"id\":\"noise\",\"datapoints\":[{\"value\":" + String(noise) + "}]}");
Serial.print("]}" );
Serial.println("复制代码