将Arduino Sketch从以太网移植到Wifi

时间:2017-11-22 13:16:32

标签: arduino arduino-uno arduino-uno-wifi

我有一个使用Arduino Uno和以太网盾的草图 - 它工作正常。现在我已经掌握了一些Arduino Uno WiFi,我想将草图从以太网移植到wifi - 但我现在已经碰壁了。我找到的大多数指南/常见问题/帮助都是针对WiFi Shield,而不是WiFi Arduino,所以我被困在这里。

以下是我的(原始以太网)代码。我可以发布我修改过的Wifi代码,但我甚至无法编译它而没有错误。

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

我还发布了此on the Arduino Forum。对不起,如果你看到我的双重帖子,我也会在这里发布解决方案。

新草图:

#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);
    }
  }

现在,我遇到了一个新问题。来自传感器(t和h)的值应该在HTTP / GET命令中输出,如下所示:     test.php的T = 1&安培; H = 2 但我似乎无法做到这一点。如果我尝试将资源定义为此     const char * resource =&#34; /test.php?t =&#34; + t +&#34;&amp; h =&#34; + h; 我得到一个错误(很明显),但如果我尝试将其声明为字符串,我又会出现同样的错误。

错误:

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;

现在,我希望你们中的一些人可以在这里帮助我:/

2 个答案:

答案 0 :(得分:1)

如果是Arduino.org Arduino UNO WiFi Developer Edition,请使用WiFi链接UNO WiFi Serial1 library

答案 1 :(得分:0)

好的 - 所以我让它成功了。我不得不从头开始,在Juraj的帮助下(我也会接受你的回答)它现在有效。

以下是最终草图(“最终”,因为DHT11传感器仅用于测试目的,作为概念验证)

//  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
  }

也许不是你见过的最漂亮的代码,但它现在有效。感谢您的所有投入:)