与xively进行GPRS通信

时间:2014-09-01 06:45:35

标签: gprs xively

我是xively的新手。我打算将一些设备(可能称为物联网)连接到互联网。我的所有设备都有GPRS连接。这些设备收集的数据将上传到网络并存储在某些电子表格中。我发现xively是个不错的选择。任何人都可以为这种项目提供教程吗?我搜索了很多但却找不到它。

1 个答案:

答案 0 :(得分:0)

我一直在做这种应用。 Xively相当不错。 data.sparkfun.com也是一个很棒的免费数据记录服务。

那里有大量的资源,但我还没有找到任何优秀的教程'专门解决GPRS连接问题。就个人而言,我使用arduino进行GPRS连接。如果您还没有使用arduino,我推荐书籍#34;开始使用arduino"和#34;编程arduino。"

我还建议您熟悉sparkfun.com,instructables.com和adafruit.com,它们提供有关各种物联网应用程序的免费教程,项目和信息。

这是我用于制作GPRS温度计的代码。硬件设置与本教程中显示的基本相同。我提出了几条评论,这些评论将帮助你解决我花费数月时间解决的一些小问题。

我最好的建议是继续做教程,首先,在投入任何单一创作之前,专注于学习和复制大量项目。有一个的东西要了解这一点。祝你好运。

 #include <GPRSClient.h>
  #include <Xively.h>
  #include <SoftwareSerial.h>

  #define numSamples 5
  #define sensor  0 // select the input pin for the thermistor

  int samples[numSamples];

  #define PIN_TX 7
  #define PIN_RX 8

  char xivelyKey[] = "[your api key]";  // API key
  char sensorId[] = "sensor";  // Define the strings for our datastream IDs
  XivelyDatastream datastreams[] = {
    XivelyDatastream(sensorId, strlen(sensorId), DATASTREAM_FLOAT),
  };
  XivelyFeed feed([your feed id], datastreams, 1); //  # of Datastreams

  char apn[] = "wap.cingular";  //depends on what sim card you are using.  I used an att gophone.  make sure you have a data plan
  GPRSClient gprs(PIN_TX,PIN_RX,19200,apn,NULL,NULL);
  XivelyClient xivelyclient(gprs);


  void setup() {
    Serial.begin(19200);
    Serial.println("Starting single datastream upload to Xively...");
    Serial.println();
    gprs.init();

    while(false == gprs.join()) {
      Serial.println("connect error");
      delay(2000);
    }
    // successful DHCP
    Serial.print("IP = ");
    Serial.println(gprs.getIPAddress());
  }

  void loop() {

    //int sensorValue = 333;  // for debugging

    float averageADC = getADC();
    float temp = convertToTemp(averageADC);

    datastreams[0].setFloat(temp);
    Serial.print("Read sensor value ");
    Serial.println(datastreams[0].getFloat());
    Serial.println("Uploading it to Xively");

    int ret = xivelyclient.put(feed, xivelyKey);
    if(true == ret){
      Serial.println("update success!");
    }else{
      Serial.println("update failed!");
    }
    Serial.println();
    delay(10*1000);
  }


  float getADC()
  {
    for(int i = 0; i < numSamples; i++) {
      samples[i]= analogRead(sensor);
      Serial.print("sample reading: ");
      Serial.println(samples[i]);
      delay(2000);
    }

    float averageADC = 0;
    for (int i = 0; i < numSamples; i++) {
      averageADC += samples[i];
    }
    averageADC /= numSamples;
    Serial.print("averageADC = : ");
    Serial.println(averageADC);
    return averageADC;
  }

  float convertToTemp(float analogReading) //
  {

    float seriesResistance = 100000.0;
    float thermistance = seriesResistance / (1023.0 / analogReading - 1.0);
    Serial.print("thermistance: ");
    Serial.println(thermistance);
    float temp = 0.00650 - 0.00026322 * log(thermistance) + .00000003402782 * log(thermistance)*log(thermistance)*log(thermistance); //these coefficients come from solving the steinhart hart equation
    Serial.println(temp);
    temp = 1.0/temp;
    Serial.println(temp);
    temp = (temp - 273.15) * 1.8000 + 32.0;
    Serial.println(temp);
    return temp;
  }