2017-11-22 9 views
0

Ich habe eine Skizze mit einem Arduino Uno und einem Ethernet Shield arbeiten - und es funktioniert gut. Jetzt habe ich ein paar Arduino Uno WiFi in die Hände bekommen, und ich möchte die Skizze von Ethernet auf WiFi portieren - aber ich bin jetzt in eine Wand gerannt. Die meisten Anleitungen/FAQ/Hilfe, die ich finden kann, sind für ein WiFi Shield und nicht für ein WiFi Arduino, also stecke ich hier fest.Portierung von Arduino Sketch von Ethernet zu Wifi

Unten ist mein (ursprünglicher Ethernet) Code. Ich kann meinen etwas modifizierten Wifi-Code posten, aber ich kann ihn nicht ohne Fehler kompilieren.

// Hartmann fugtighedsmåler v 0.1 
// Lavet af Jan Andreasen 
// Skriver til DB på FDKTO517 

#include <Ethernet.h> 
#include <SPI.h> 
#include <DHT.h> 
#define DHTPIN 2 // Siger sig selv 
#define DHTTYPE DHT11 // Typen af sensor. 

float h = 0; 
float t = 0; 
byte mac[] = {0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02}; // Macadresse på kortet 
IPAddress server(10,16,9,229); // Server adressen på SQL'en 

EthernetClient client; 
DHT dht(DHTPIN, DHTTYPE); 

void setup() { 
    Serial.begin(9600); 
    Serial.println("Starting..."); 
    Ethernet.begin(mac); 
    dht.begin(); 
} 

void loop() { 
    readTempHum(); 
    delay(300000); // Loop timer i millis - 5 minutter 
} 

void get_request(float t, float h) { 
    Serial.println("Connecting to Client..."); 
    if (client.connect(server, 10080)) { 
    Serial.println("--> connection ok\n"); 
    client.print("GET /test.php?"); 
    // Placering af PHP script til upload til DB 
    client.print("t="); // Temp 
    client.print(t); 
    client.print("&h="); // Fugtighed 
    client.print(h); 
    client.println(" HTTP/1.1"); 
    client.print("Host: "); 
    client.println(server); 
    client.println("Connection: close"); 
    client.println(); 
    client.println(); 
    client.stop(); 
    Serial.println("--> finished transmission\n"); 
    } else { 
    Serial.println("--> connection failed\n"); 
    } 
} 

void readTempHum() { 
    h = dht.readHumidity(); 
    t = dht.readTemperature(); 
    { 
    Serial.print("Humidity: "); 
    Serial.print(h); 
    Serial.print("%\t"); 
    Serial.print("Temperature:"); 
    Serial.print(t); 
    Serial.println("*C"); 
    get_request(t,h); 
    } 
} 

Ich habe auch diese on the Arduino Forum gepostet. Es tut mir leid, wenn Sie meine Doppelpost sehen, und ich werde auch hier die Lösung für mein Problem veröffentlichen.

Neue Skizze:

#include <Wire.h> 
#include <UnoWiFiDevEd.h> 
#include <DHT.h> 
#define DHTPIN 4 
#define DHTTYPE DHT11 

float h = 0; 
float t = 0; 

DHT dht(DHTPIN, DHTTYPE); 

void setup() { 

    const char* connector = "rest"; 
    const char* server = "10.16.9.229"; 
    const char* method = "GET"; 
    const char* resource = "/test.php?t="; 

    Serial.begin(9600); 
    Ciao.begin(); 
    dht.begin(); 

    pinMode(2, INPUT); 

    delay(10000); 
} 

void loop() { 

    readTempHum(); 
// doRequest(connector, server, resource, method); 
    delay(300000); 
} 

void doRequest(const char* conn, const char* server, const char* command, const char* method, float t, float h){ 
    CiaoData data = Ciao.write(conn, server, command, method); 
} 

void readTempHum() { 
    h = dht.readHumidity(); 
    t = dht.readTemperature(); 
    const char* connector = "rest"; 
    const char* server = "10.16.9.229"; 
    const char* method = "GET"; 
    const char* resource = "/test.php?t="; 

    { 
    doRequest(connector, server, resource, method,t,h); 
    } 
    } 

Jetzt habe ich in ein neues Problem lief. Der Wert vom Sensor (t und h) soll im HTTP/GET-Befehl wie folgt ausgegeben werden: test.php? T = 1 & h = 2 Aber ich kann nicht scheinen, dass das funktioniert. Wenn ich versuche, die Ressource so zu definieren const char * resource = "/test.php?t="+t+" & h = "+ h; Ich bekomme einen Fehler (offensichtlich), aber wenn ich versuche, es als eine Zeichenfolge zu deklarieren, habe ich den gleichen Fehler erneut.

Fehler:

HumidSQL3_Wifi_master:24: error: invalid operands of types 'const char [13]' and 'float' to binary 'operator+' 

const char* resource = "/test.php?t="+t+"&h="+h; 

Nun, ich hoffe, dass einige von euch mir hier ein wenig helfen könnte:/

+0

Sind wir angeblich ein Ratespiel über das, was der Compilerfehler sagt? Und verschwenden Sie auch unsere Zeit und wiederholen Sie alles, was bereits auf Arduino Forum gesagt wurde? Wenn Sie Antworten wollen, müssen Sie es uns leicht machen. –

+0

Danke, dass du dich bis zum Cross-Posting beworben hast. Es wird im Allgemeinen nicht gut empfangen, weil es dazu führen kann, dass jemand andere Kopien der gleichen Frage nicht kennt, und sie bemühen sich sehr um eine Antwort, die im Wesentlichen eine bereits existierende Antwort auf eine andere Kopie dupliziert. Zumindest fügen Sie allen Ihren Cross-Posts Links zu allen anderen hinzu, so dass die anderen Posts überprüfen können, welche Antworten bereits gemacht wurden. Würdest du das bearbeiten? – halfer

+0

@halfer Nun, ich komme nicht weiter, wenn ich nicht ehrlich bin. Ich weiß, dass einige von euch beide Foren benutzen, aber wenn X bei Y sucht und nicht die Antwort findet, naja, was, dann werde ich die Antwort im Forum posten, das nicht darauf gekommen ist (mit Kredit ofc) - macht es Sinn? Naja - ich habe die Frage mit Compilerfehler und dem Link zum Arduino.cc Forum bearbeitet. Obwohl ich denke, dass ich mit Jurajs Antwort von vorne anfangen werde. –

Antwort

1

Wenn es die Arduino.org Arduino UNO WiFi Developer Edition ist, dann WiFi verwenden Link mit UNO WiFi Serial1 library

+0

Danke, ich werde das untersuchen. Ist es einfach, auf neue Firmware zu flashen, oder besteht ein großes Risiko für Bricks? –

+0

sehr einfach. Quellcode erstellen und von der IDE hochladen.Es gibt eine Option für die AT-Firmware, aber ich empfehle Ihnen WiFi Link – Juraj

+0

, wenn es funktioniert, bitte akzeptieren Sie die Antwort – Juraj

0

Okay - so habe ich es geschafft. Ich musste bei Null anfangen, und mit der Hilfe von Juraj (ich akzeptiere deine Antwort) funktioniert es jetzt.

Im Folgenden sind die letzte Skizze ("final", wie der DHT11 Sensor nur für Testzwecke waren, als Proof-of-concept)

// Hartmann fugtighedsmåler v 0.2.2 
// Lavet af Jan Andreasen 
// Skriver til DB på FDKTO517 
// WiFi udgave, testversion 


#include <Wire.h> 
#include <UnoWiFiDevEd.h> 
#include <DHT.h> 
#define DHTPIN 4 
#define DHTTYPE DHT11 
#define CONNECTOR "rest" 
#define SERVER_ADDR "10.16.9.229" 


float h = 0; 
float t = 0; 

DHT dht(DHTPIN, DHTTYPE); 

void setup() { 

    Serial.begin(9600); 
    Ciao.begin(); 
    dht.begin(); 

    pinMode(2, INPUT); // I'm not sure if this is required, just saw it now 

    delay(10000); // A 10 second delay from start to initialization 
} 

void loop() { 

    readTempHum(); 
    delay(300000); // A 5 minute delay between measurements 
} 

void readTempHum() { 
    h = dht.readHumidity(); // Reads the humidity from sensor 
    t = dht.readTemperature(); // Reads the temperature from sensor 
    String uri = "/test.php?t="; // URL to the PHP-file 
    uri += t; // Insert the T-value 
    uri +="&h="; 
    uri += h; // Insert the H-value 

    CiaoData data = Ciao.write(CONNECTOR, SERVER_ADDR, uri); // Make a basic HTTP request to the specified server using REST and the URL specified above 
    } 

Vielleicht nicht das hübscheste Code, den Sie jedoch gesehen haben, , es funktioniert jetzt. Vielen Dank für all Ihre Eingaben :)

Verwandte Themen