arduino mega 2560 + ethernet shield (W5100) + DHT11 + tilhørende kode (Læst 3850x)

Offline Danni-Hansen

  • µProcessoren
  • *
  • Indlæg: 544
  • Antal brugbare Indlæg: 17
    • Vis profil
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.
Mvh. Danni Hansen.

 

Offline Danni-Hansen

  • µProcessoren
  • *
  • Indlæg: 544
  • Antal brugbare Indlæg: 17
    • Vis profil
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+'
Mvh. Danni Hansen.

 

Offline gerd

  • Administrator
  • µProcessoren
  • *****
  • Indlæg: 915
  • Antal brugbare Indlæg: 97
    • Vis profil
    • Hjemmeside med nogle af mine projekter
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)

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

 

Offline Danni-Hansen

  • µProcessoren
  • *
  • Indlæg: 544
  • Antal brugbare Indlæg: 17
    • Vis profil
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.
Mvh. Danni Hansen.

 

Offline gerd

  • Administrator
  • µProcessoren
  • *****
  • Indlæg: 915
  • Antal brugbare Indlæg: 97
    • Vis profil
    • Hjemmeside med nogle af mine projekter
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