Arduino odeslání http get

Raspberry, Arduino, Mini-PC a další

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
sidbin
Příspěvky: 13
Registrován: 07 lis 2013, 01:00

Arduino odeslání http get

#1 Příspěvek od sidbin »

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?

p32
Příspěvky: 15069
Registrován: 13 led 2007, 01:00
Bydliště: Olomouc

#2 Příspěvek od p32 »

Jak poznáš, že 123456 je číslo a ne něco jiného ?

Uživatelský avatar
sidbin
Příspěvky: 13
Registrován: 07 lis 2013, 01:00

#3 Příspěvek od sidbin »

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é

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);
  }
 
// 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í :-D

Uživatelský avatar
sidbin
Příspěvky: 13
Registrován: 07 lis 2013, 01:00

#4 Příspěvek od sidbin »

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.

Uživatelský avatar
toMajstr
Příspěvky: 332
Registrován: 10 lis 2013, 01:00

#5 Příspěvek od toMajstr »

Proč ty řetezce nesečteš? Tohle se posílá jako 2 samostatný texty.

Odpovědět

Zpět na „Miniaturní počítače (Arduino, Raspberry a další)“