我对西弗利是新手。我计划将一些设备(可能称为物联网)连接到互联网。我所有的设备都将有GPRS连接。这些设备收集的数据将被上传到网络上,并以类似电子表格的形式存储。我发现xively是一个很好的选择。有人能为这类项目提供教程吗?我找了很多,但还是没找到。
发布于 2014-10-22 03:16:26
我一直都在做这种应用程序。西弗利是相当不错的。data.sparkfun.com也是一个很棒的免费数据记录服务。
有大量的资源,但我还没有找到任何伟大的‘教程’,专门解决GPRS连接。就我个人而言,我使用arduino连接设备的GPRS。如果您还没有使用过arduino,我推荐“arduino入门”和"programming 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;
}https://stackoverflow.com/questions/25600209
复制相似问题