【发布时间】:2015-02-17 23:39:34
【问题描述】:
我是 xively 的新手。我打算将一些设备(可能称为物联网)连接到互联网。我所有的设备都将有 GPRS 进行连接。这些设备收集的数据将上传到网络并以类似电子表格的形式存储。我发现 xively 是一个不错的选择。任何人都可以为这种项目提供教程吗?找了好久都没找到。
【问题讨论】:
我是 xively 的新手。我打算将一些设备(可能称为物联网)连接到互联网。我所有的设备都将有 GPRS 进行连接。这些设备收集的数据将上传到网络并以类似电子表格的形式存储。我发现 xively 是一个不错的选择。任何人都可以为这种项目提供教程吗?找了好久都没找到。
【问题讨论】:
我一直在做这种申请。 Xively 还不错。 data.sparkfun.com 也是一个很棒的免费数据记录服务。
那里有大量资源,但我还没有找到任何专门针对 GPRS 连接的出色“教程”。就个人而言,我使用 arduino 与设备进行 GPRS 连接。如果你没用过 arduino,我推荐《arduino 入门》和《arduino 编程》这两本书。
我还建议您熟悉 sparkfun.com、instructables.com 和 adafruit.com,它们提供有关各种物联网应用程序的免费教程、项目和信息。
这是我用于制作的 GPRS 温度计的代码。硬件设置与本教程中显示的基本相同。我提供了几个 cmets,它们可以帮助您解决我花了几个月才弄清楚的一些小问题。
我最好的建议是继续做教程,首先,专注于学习和复制大量项目,然后再对任何单一的创作投入过多。有很多东西需要了解。祝你好运。
#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;
}
【讨论】: