Ahoj, řeším drobný problém. Pomocí arduina odesílám data z DHT22 na sdsmicro a když odešlu testovací GET ve tvaru:
client.print( "GET /sdscep?p=6&sys140=123456");
V zařízení zobrazí jako přijaté číslo 1234562 (poslední číslo je zkrátka navíc)
když chci odeslat:
client.print( "GET /sdscep?p=6&sys140=");
client.println(h1)
Kde h1 je hodnota vlhkosti z DHT22, tak se niz nezapíše, ale seriová linka píše odeslání: /sdscep?p=6&sys140=3200
Do zařízení se zapíše jen nula, což by znamenalo GET ve tvaru /sdscep?p=6&sys140= bez odeslané hodnoty vlhkosti.
Nemá někdo nějaký nápad?
Arduino odeslání http get
Moderátor: Moderátoři
Zkoušel jsem i jiné čísla
Při ručním zadání nějaké hodnoty to tedy skoro funguje.
Vždy se nakonec přidalo nějaké jiné
// Takže další zjištění, pokud pošlu 6ti místné je to OK, ale pokud pošlu 5ti místné, tak se uloží jako 7 místné. 4 místné se uloží jako 4 místné.
Je to záhadné chování![Very Happy :-D](./images/smilies/icon_biggrin.gif)
![Smile :-)](./images/smilies/icon_smile.gif)
Vždy se nakonec přidalo nějaké jiné
Kód: Vybrat vše
#include <SPI.h>
#include <Ethernet.h>
#include "DHT.h"
#define DHTPIN 2 // what pin we're connected to
#define DHTTYPE DHT22 // DHT 22 (AM2302)
byte mac[] = { 0x23, 0x14, 0x41, 0x32, 0x31, 0x44};
EthernetClient client;
char server[] = "192.168.1.10"; // IP SDS
int interval = 3600; // Wait between dumps
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
Ethernet.begin(mac);
dht.begin();
Serial.print("IP Address : ");
Serial.println(Ethernet.localIP());
Serial.print("Subnet Mask : ");
Serial.println(Ethernet.subnetMask());
Serial.print("Default Gateway IP: ");
Serial.println(Ethernet.gatewayIP());
Serial.print("DNS Server IP : ");
Serial.println(Ethernet.dnsServerIP());
}
void loop() {
int h = dht.readHumidity();
int h1 = (dht.readHumidity()*100); // nasobení kvůli sdsku
//Serial.print("Humidity: ");
//Serial.print(h);
Serial.print(h1);
Serial.println();
Serial.println();
delay(1000);
if (client.connect(server, 80)) {
Serial.println("-> Connected140");
client.print( "GET /sdscep?p=6&sys140=123456");
Serial.println( "GET /sdscep?p=6&sys140=123456");
//client.print(h1);
//Serial.println(h1);
Serial.print( " HTTP/1.1 ");
client.println( " HTTP/1.1 ");
Serial.print( "Host: 192.168.1.10" );
client.print( "Host: 192.168.1.10" );
client.println();
Serial.println();
client.println("192.168.1.10");
Serial.print("192.168.1.10");
client.println("User-Agent: Arduino");
Serial.println("User-Agent: Arduino");
client.println("Content-Type: text/html");
Serial.print("Content-Type: text/html");
client.println("Connection: close");
Serial.print("Connection: close");
client.println();
Serial.println();
client.stop();
}
else {
Serial.println("connection failed140");
}
delay(interval);
}
Je to záhadné chování
![Very Happy :-D](./images/smilies/icon_biggrin.gif)
Tak jsem se po týdnu vrátil k tomuto problému a zkusil změnit kód na tohle:
client.print( "GET /sdscep?sys140=1");
Serial.print( "GET /sdscep?sys140=1");
client.print(h1);
Serial.print(h1);
na seriovou linku to zapíše GET /sdscep?sys140=14150
Tedy 1 a 4místnou hodnotu vlhkosti z dht22, ovšem do zařízení se zapíše jen číslo 1.
taky jsem vypozoroval, že se musí poslat jen číslo a žádný znak navíc (mezera, tečka, čárka) jinak se zapíše nula.
client.print( "GET /sdscep?sys140=1");
Serial.print( "GET /sdscep?sys140=1");
client.print(h1);
Serial.print(h1);
na seriovou linku to zapíše GET /sdscep?sys140=14150
Tedy 1 a 4místnou hodnotu vlhkosti z dht22, ovšem do zařízení se zapíše jen číslo 1.
taky jsem vypozoroval, že se musí poslat jen číslo a žádný znak navíc (mezera, tečka, čárka) jinak se zapíše nula.