Dansk Elektronik Forum

Generel Elektronik => Arduino & Lign. => Emne startet af: Danni-Hansen efter April 05, 2014, 11:57:00

Titel: arduino mega 2560 + ethernet shield (W5100) + DHT11 + tilhørende kode
Indlæg af: Danni-Hansen efter April 05, 2014, 11:57:00
Hej.

Står med overstående MCU (Arduino mega 2560) et Ethernet Shield der passer i, også en DHT11 temperatur og Fugtigheds sensor, og skal have modificeret koden dertil. Jeg er blevet elendig til at kode Arduino har jeg fundet ud af, kan godt noget af selve stilen, men, har af en underlig grund fået besvær med at sætte mig ind i existerende kode til nye enheder til MCU'en...

Jeg fandt denne kode:

Kode:
#include <Ethernet.h>
#include <SPI.h>


byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 140 };
byte server[] = { 192, 168, 1, 105 }; // RaspberryPI

EthernetClient client;

void setup()
{
  Ethernet.begin(mac, ip);
  Serial.begin(9600);

  delay(1000);

  Serial.println("connecting...");

  if (client.connect(server, 80)) {
    Serial.println("connected");
    client.println("GET /?str="+ temperatur +":"+ fugt +" HTTP/1.0"); //Sender variabel temperatur og fugt til GET-Variabel str (str = string)
    client.println();
  } else {
    Serial.println("connection failed");
  }
}

void loop()
{
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    for(;;)
      ;
  }
}

Det skal jo gøres rigtigt, lave koden så den bruger DHT libraryet til at sende temp og fugtighed til mit Raspberry PI server.

Nogen der kan forklare mig eller vise mig den rigtige måde at lave koden på?
Jeg har modificeret koden lidt.

Tak.
Titel: Sv: arduino mega 2560 + ethernet shield (W5100) + DHT11 + tilhørende kode
Indlæg af: Danni-Hansen efter April 05, 2014, 12:44:27
Så blev den lavet om til at skulle fungere med DHT lib..

Kode:
#include <Ethernet.h>
#include <SPI.h>
#include "DHT.h"

//Ethernet Below
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 140 };
byte server[] = { 192, 168, 1, 105 }; // RaspberryPI

EthernetClient client;
//Ethernet Above

//DHT Below
DHT dht;
float temperature;
//DHT Above


void setup()

  Ethernet.begin(mac, ip);
  Serial.begin(9600);

  delay(dht.getMinimumSamplingPeriod());
  float temperature = dht.getTemperature();
  float fugt = dht.getHumidity();
 
  Serial.println("connecting...");

  if (client.connect(server, 80)) {
    Serial.println("connected");
    client.println("GET /?str="+ temperatur +":"+ fugt +" HTTP/1.0");
    client.println();
  } else {
    Serial.println("connection failed");
  }
 
  dht.setup(8); // data pin 2

}

void loop()
{
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    for(;;)
      ;
  }
}

Har dog problemer pt med flg linje:

Kode:
    client.println("GET /?str="+ temperatur +":"+ fugt +" HTTP/1.0");

Fejlen siger:
sketch_apr05a.ino: In function 'void setup()':
sketch_apr05a:32: error: invalid operands of types 'const char [12]' and 'float' to binary 'operator+'
Titel: Sv: arduino mega 2560 + ethernet shield (W5100) + DHT11 + tilhørende kode
Indlæg af: gerd efter April 05, 2014, 15:48:51
Hej Danni,
ja .. i C kan du ikke ikke tilføje en string (tekst) og numre.
En C-string (tekst) er bare en array af tegn (char).

Men du kan gøre med printf eller sprintf: (link (http://playground.arduino.cc/Main/Printf#.U0AEU6b8jqg))

1. Reservere en char array med plads til 50 tegn:
Kode:
 char s[50]; 

2. tilføje tekst og numre med sprintf:
Kode:
sprintf(s, "GET /?str=%f:%f HTTP/1.0",temperature ,fugt);

3. nu kan du sende det:
Kode:
client.println(s);

Jeg er ikke sikker på, om float vil gør.
Also note that by default the Arduino IDE does not set the AVR linker options to support floating point in the xxprintf() routines.

Hvis ikke, så kan du gøre det med int:
Kode:
int temperature_as_int = temperature * 10; // 25.2° is converted to 252
int fugt_as_int = fugt * 10; // 70.5% is converted to 705
sprintf(s, "GET /?str=%d:%d HTTP/1.0",temperature_as_int ,fugt_as_int);

gerd
Titel: Sv: arduino mega 2560 + ethernet shield (W5100) + DHT11 + tilhørende kode
Indlæg af: Danni-Hansen efter April 05, 2014, 18:55:18
Hej Gerd.

Det du skriver i er rent C ikke?

Det jeg bruger er Arduino IDE's kode sprog som er lidt anderledes... :(

Mvh. Danni.
Titel: Sv: arduino mega 2560 + ethernet shield (W5100) + DHT11 + tilhørende kode
Indlæg af: gerd efter April 05, 2014, 22:51:42
Hej Danni,

nej, i Arduino's IDE:

Kode:
#include <Ethernet.h>
#include <SPI.h>
#include "DHT.h"

//Ethernet Below
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 140 };
byte server[] = { 192, 168, 1, 105 }; // RaspberryPI

EthernetClient client;
//Ethernet Above

//DHT Below
DHT dht;
float temperature;
//DHT Above
char s[50];

void setup()

  Ethernet.begin(mac, ip);
  Serial.begin(9600);

  delay(dht.getMinimumSamplingPeriod());
  float temperature = dht.getTemperature();
  float fugt = dht.getHumidity();
 
  Serial.println("connecting...");

  if (client.connect(server, 80)) {
    Serial.println("connected");
    //client.println("GET /?str="+ temperature +":"+ fugt +" HTTP/1.0");
    sprintf(s, "GET /?str=%f:%f HTTP/1.0",temperature ,fugt);
    client.println(s);
    client.println();
  } else {
    Serial.println("connection failed");
  }
 
  dht.setup(8); // data pin 2

}

void loop()
{
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    for(;;)
      ;
  }
}

Men jeg har ingen Arduino (hardware) her - og kan ikke teste det.

gerd