Simpele URL verzenden

Arduino specifieke Software
Berichten: 3
Geregistreerd: 13 Aug 2018, 20:11

Simpele URL verzenden

Berichtdoor timbiesmans » 13 Aug 2018, 20:58

Hallo

Ik heb een drukknop met een RGB LED in. Onderstaand is de code die ik van de fabrikant ontvangen heb en ook reeds geïnstalleerd is.

Ik zou graag de code aanpassen zodat deze enkele vaste gegevens POST in het script.
Ik ben al enkele weken aan het proberen, maar krijg het niet gefixt.

Graag jullie hulp.

de URL is: https://app.q-r-s.eu/kitchen/callwaiterkitchen_new.php
de data is: c=t, v=16 en r=113

Dit is de code:

Code: Alles selecteren
#include <FS.h>                   //this needs to be first, or it all crashes and burns...
#include <ESP8266WiFi.h>          //ESP8266 Core WiFi Library (you most likely already have this in your sketch)

#include <DNSServer.h>            //Local DNS Server used for redirecting all requests to the configuration portal
#include <ESP8266WebServer.h>     //Local WebServer used to serve the configuration portal
#include <ESP8266HTTPClient.h>
#include <ESP8266HTTPUpdateServer.h>
#include <WiFiManager.h> 

#include <Adafruit_NeoPixel.h>
#include <ArduinoJson.h>
#include <Ticker.h>

#define EN_PIN         4
#define LED_PIN         5
#define NUMPIXELS       1

const char CONFIG_FILE[] = "config.json";

//define your default values here, if there are different values in config.json, they are overwritten.
char customUrl[128];
uint32_t mLedColor;
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, LED_PIN, NEO_GRB + NEO_KHZ800);
ESP8266HTTPUpdateServer httpUpdater;
ESP8266WebServer server(80);
WiFiManagerParameter customUrlParam("url", "custom url", customUrl, 128, "");
Ticker mBlink;
Ticker mBlinkOnce;

//flag for saving data
bool shouldSaveConfig = false;

//callback notifying us of the need to save config
void saveConfigCallback () {
    Serial.println("Should save config");
    shouldSaveConfig = true;
}

void factoryReset(WiFiManager &wifiManager) {
    wifiManager.resetSettings();
    SPIFFS.remove(CONFIG_FILE);
}

void loadConfig() {
    SPIFFS.begin();
    if (!SPIFFS.exists(CONFIG_FILE)) {
        Serial.println("Could not find config file");
        return;
    }

    File configFile = SPIFFS.open(CONFIG_FILE, "r");
    size_t size = configFile.size();
    // Allocate a buffer to store contents of the file.
    std::unique_ptr<char[]> buf(new char[size]);

    configFile.readBytes(buf.get(), size);
    DynamicJsonBuffer jsonBuffer;
    JsonObject& json = jsonBuffer.parseObject(buf.get());
    json.printTo(Serial);
    configFile.close();

    if (json.success()) {
        Serial.println("\nparsed json");
        strcpy(customUrl, json["url"]);
        Serial.println("Parsed config");
    }
}

void saveConfig() {
    strcpy(customUrl, customUrlParam.getValue());

    Serial.println("saving config");
    DynamicJsonBuffer jsonBuffer;
    JsonObject& json = jsonBuffer.createObject();
    json["url"] = customUrl;

    File configFile = SPIFFS.open(CONFIG_FILE, "w+");
    json.printTo(Serial);
    json.printTo(configFile);
    configFile.close();
    shouldSaveConfig = false;
}

void setLed(int state) {
    if (state) {
        pixels.setPixelColor(0, mLedColor);
    } else {
        pixels.setPixelColor(0, pixels.Color(0,0,0));
    }
    pixels.show();
}

void blinkHandler() {
    setLed(1);
    mBlinkOnce.once_ms(25, setLed, 0);
}

void setup() {
    // Boot up
    // Send a HIGH signal through a diode to CH_EN
    pinMode(EN_PIN, OUTPUT);
    digitalWrite(EN_PIN, HIGH);
    Serial.begin(115200);
    Serial.println("\r\nStart AButton");
    loadConfig();

    WiFiManager wifiManager;

    //set config save notify callback
    wifiManager.setSaveConfigCallback(saveConfigCallback);
    wifiManager.setAPStaticIPConfig(IPAddress(192,168,1,1), IPAddress(192,168,1,1), IPAddress(255,255,255,0));

    // The extra parameters to be configured (can be either global or just in the setup)
    // After connecting, parameter.getValue() will get you the configured value
    // id/name placeholder/prompt default length
    wifiManager.addParameter(&customUrlParam);

    pixels.begin();
    mLedColor = pixels.Color(255, 0, 0);
    mBlink.attach(1, blinkHandler);
    wifiManager.autoConnect("AButton");
    mLedColor = pixels.Color(0, 0, 255);

    if (shouldSaveConfig) {
        saveConfig();
    }

    Serial.print("local ip: ");
    Serial.println(WiFi.localIP());

    if (strlen(customUrl)) {
        HTTPClient http;
        Serial.print("request url: ");
        Serial.println(customUrl);
        http.begin(customUrl);
        int httpCode = http.GET();

        Serial.printf("http code %d\r\n", httpCode);
        // httpCode will be negative on error
        if(httpCode > 0) {
            // HTTP header has been send and Server response header has been handled
            Serial.printf("[HTTP] GET... code: %d\n", httpCode);

            // file found at server
            if(httpCode == HTTP_CODE_OK) {
                String payload = http.getString();
                Serial.println(payload);
                mLedColor = pixels.Color(0, 255, 0);
            }
        } else {
            Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
        }

        http.end();
        delay(2000);
        setLed(0);
        // turn off
        digitalWrite(EN_PIN, LOW);
    }

    // should not go here or button hold
    // factory reset
    mLedColor = pixels.Color(255, 0, 0);
    delay(1500);
    factoryReset(wifiManager);
    wifiManager.autoConnect("AButton");
    if (shouldSaveConfig) {
        saveConfig();
    }
    Serial.println("\r\nstart OTA server\r\n");
    httpUpdater.setup(&server);
    server.begin();
}

void loop() {
    Serial.println("loop");
    server.handleClient();
    delay(1000);
}

Advertisement

Gebruikers-avatar
Berichten: 188
Geregistreerd: 03 Sep 2013, 10:03
Woonplaats: Katwijk ZH

Re: Simpele URL verzenden

Berichtdoor baco1978 » 14 Aug 2018, 10:11

denk dat dit voor voor de url is

//define your default values here, if there are different values in config.json, they are overwritten.
char customUrl[128] = " https://app.q-r-s.eu/kitchen/callwaiterkitchen_new.php";


staat er verder niks in onderstaande bestand die hier genoemd wordt?
const char CONFIG_FILE[] = "config.json";


heb je hier nog een verdere toelichting van : de data is: c=t, v=16 en r=113
zo zegt het me niks
Met vriendelijke groet Arjan

Berichten: 3
Geregistreerd: 13 Aug 2018, 20:11

Re: Simpele URL verzenden

Berichtdoor timbiesmans » 14 Aug 2018, 10:42

Dank je wel alvast om het even te willen bekijken.

Ik heb dit zo ontvangen van de fabrikant.

Van die CONFIG_FILE trek ik me momenteel nog niet te veel aan. Het voornaamste is dat die POST werkt.

De data die verzonden moet worden naar de URL via POST is:

categorie: "t"
vestiging = 16
restaurant = 113

Ik zoek via Google waarschijnlijk ook niet naar de juiste termen, daarom dat ik het niet direct vind.

Gebruikers-avatar
Berichten: 188
Geregistreerd: 03 Sep 2013, 10:03
Woonplaats: Katwijk ZH

Re: Simpele URL verzenden

Berichtdoor baco1978 » 15 Aug 2018, 08:27

tot zover ik in de code kan zien,
staat er verder geen stuk data waarmee vervolgens naar die URL verzenden.

dat zal je er eerst bij moeten verzinnen.


wordt de data op specifieke plekken verwacht? ik neem aan dat de andere kant ook een bepaalde format verwacht
Met vriendelijke groet Arjan

Berichten: 3
Geregistreerd: 13 Aug 2018, 20:11

Re: Simpele URL verzenden

Berichtdoor timbiesmans » 15 Aug 2018, 08:47

Nee, deze staat er inderdaad niet in omdat deze zo geprogrammeerd is om een IFTTT-app uit te voeren als er op gedrukt wordt.

Dit stuk dien ik dus te vervangen:

Code: Alles selecteren
if (strlen(customUrl)) {
        HTTPClient http;
        Serial.print("request url: ");
        Serial.println(customUrl);
        http.begin(customUrl);
        int httpCode = http.GET();

        Serial.printf("http code %d\r\n", httpCode);
        // httpCode will be negative on error
        if(httpCode > 0) {
            // HTTP header has been send and Server response header has been handled
            Serial.printf("[HTTP] GET... code: %d\n", httpCode);

            // file found at server
            if(httpCode == HTTP_CODE_OK) {
                String payload = http.getString();
                Serial.println(payload);
                mLedColor = pixels.Color(0, 255, 0);
            }
        } else {
            Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
        }

        http.end();
        delay(2000);
        setLed(0);
        // turn off
        digitalWrite(EN_PIN, LOW);
    }


De gegeven data (die vast geprogrammeerd wordt) moet gewoon via een POST naar die webpagina, gewoon als string of integer.

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 3 gasten