Отправлять данные с помощью Arduino GSM shield GET/POST/PUT?
Я пытаюсь изменить пример библиотеки Arduino GSM Xively, чтобы geeknesia.com. В сериале было написано "успешное подключение". но я не получил никакого изменения стоимости на веб-сайте. Я допустил ошибку с этим кодом?
//Project Name Test sensor
#include <GSM.h>
#define PINNUMBER ""
//APIkey untuk Geeknesia
#define APIKEY "c3ce75cc23386ca4ca663c0ed11653c5"
#define GPRS_APN "xlunlimited"
#define GPRS_LOGIN ""
#define GPRS_PASSWORD ""
GSMClient client;
GPRS gprs;
GSM gsmAccess;
GSMServer server(80);
char IPserver[]="geeknesia.com";
unsigned long lastConnectionTime = 0;
boolean lastConnected = false;
const unsigned long postingInterval = 10*1000;
int ldr1;
char ldr1_ar[10];
void setup() {
Serial.begin(9600);
boolean notConnected = true;
Serial.println("try to connect...");
while (notConnected) {
if ((gsmAccess.begin(PINNUMBER) == GSM_READY) &
(gprs.attachGPRS(GPRS_APN, GPRS_LOGIN, GPRS_PASSWORD) == GPRS_READY))
notConnected = false;
else {
Serial.println("can't connect");
delay(1000);
}
}
Serial.println("connected");
}
void sendData(int thisData) {
if (client.connect(IPserver, 80)) {
Serial.println("connecting...");
client.print("GET /api/data?api_key=c3ce75cc23386ca4ca663c******&attributes={");
client.print("\"ldr1\":" + String(ldr1));
client.print("}");
client.print("\r\n\r\n");
client.print("Content-Length: ");
int thisLength = 8 + getLength(thisData);
client.println(thisLength);
client.println("Connection: close");
client.println();
//client.print("cahaya,");
client.println(thisData);
} else {
Serial.println("connection failed");
Serial.println();
Serial.println("disconnecting.");
client.stop();
}
lastConnectionTime = millis();
}
int getLength(int someValue) {
int digits = 1;
int dividend = someValue /10;
while (dividend > 0) {
dividend = dividend /10;
digits++;
}
return digits;
}
void loop() {
ldr1 = analogRead(A0);
//sendData(ldr1);
if (client.available()) {
char c = client.read();
Serial.print(c);
}
if (!client.connected() && lastConnected) {
client.stop();
}
if(!client.connected() && ((millis() - lastConnectionTime) > postingInterval)) {
sendData(ldr1);
}
lastConnected = client.connected();
}
@ZkyHigh, 👍1
1 ответ
Ваш запрос на получение неверно сформирован. Основываясь на документах API вашего сервера, вместо этого он должен выглядеть следующим образом:
Serial.println("connecting...");
client.print("GET /api/data?api_key=c3ce75cc23386ca4ca663c******&attributes={");
client.print("\"ldr1\":" + String(ldr1));
client.print("}");
client.println(" HTTP/1.1");
client.println("Host: api.geeknesia.com");
client.println();
Хотя технически не является незаконным иметь тело в запросе GET, в соответствии со спецификациями HTTP 1.1, тело не должно влиять на ответ сервера, т. Е. оно должно быть в основном бессмысленным. Документы API вашего сервера указывают, что тело не требуется/поддерживается при отправке данных с помощью GET, как в случае с большинством других серверов.
Вам следует подумать о замене строк Arduino массивами символов C; они намного безопаснее и надежнее.
- Онлайн-проблема подключения Arduino к базе данных MySQL
- Подключение датчика давления к Arduino для сбора данных о давлении и времени
- Загрузить данные ультразвукового датчика в реальном времени в pubnub, используя arduino и esp8266
- Использовать Data Logger Shield с Arduino Sensor shield V5.0
- Датчики/регистрация данных Температура и влажность на расстоянии 50 футов
- Arduino используется в качестве мультисенсорного контроллера, а затем отправляет результаты на ноутбук для публикации на веб-странице.
- Какова работа pulseIn?
- Как увеличить скорость записи на SD-карту в Ардуино
Привет, спасибо за ответ, не могли бы вы объяснить мне проще, я действительно новичок в HTTP world XD, так что это самый простой способ загрузить данные в этот API. Я решил проблему, но данные выглядят как временные, я имею в виду, что они не сохранены в базе данных, а история графиков не отображается., @ZkyHigh
@ZkyHigh Были ли данные отправлены на сервер? Какие-нибудь изменения вообще?, @SoreDakeNoKoto