2017-10-16 1 views
1

Je construis une application simple où je veux envoyer une requête GET depuis mon Arduino en utilisant l'enc28j60 vers un script php situé dans mon hébergement en ligne. Tout semble fonctionner parfaitement, sauf de ne rien voir dans ma base de données.Impossible d'envoyer une requête GET depuis arduino en utilisant enc28j60

broches:

ENC SO -> broches Arduino 12

ENC SI -> broches Arduino 11

ENC SCK -> broches Arduino 13

ENC CS -> broches Arduino 10

ENC VCC -> Arduino 3V3 broche

ENC GND -> A rduino Gnd pin

ici est le code arduino:

#include <EtherCard.h> 



#define PATH "index.php" 
#define VARIABLE "test" 

// ethernet interface mac address, must be unique on the LAN 
byte mymac[] = { 0x74,0x69,0x69,0x2D,0x30,0x31 }; 

const char website[] PROGMEM = "billyval-com.stackstaging.com"; 

byte Ethernet::buffer[700]; 
uint32_t timer; 
Stash stash; 

void setup() { 
    Serial.begin(57600); 
    Serial.println("\n[webClient]"); 

    if (ether.begin(sizeof Ethernet::buffer, mymac) == 0) 
    Serial.println("Failed to access Ethernet controller"); 
    if (!ether.dhcpSetup()) 
    Serial.println("DHCP failed"); 

    ether.printIp("IP: ", ether.myip); 
    ether.printIp("GW: ", ether.gwip); 
    ether.printIp("DNS: ", ether.dnsip); 

    if (!ether.dnsLookup(website)) 
    Serial.println("DNS failed"); 

    ether.printIp("SRV: ", ether.hisip); 
} 

void loop() { 
    ether.packetLoop(ether.packetReceive()); 

    if (millis() > timer) { 
    timer = millis() + 10000; 

    byte sd = stash.create(); 
    stash.print("variable="); 
    stash.print(VARIABLE); 
    stash.save(); 


      Stash::prepare(PSTR("GET http://$F/$F HTTP/1.1" "\r\n" 
        "Host: $F" "\r\n" 
        "Content-Length: $D" "\r\n" 
        "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" "\r\n" 
        "\r\n" 
        "$H"), 
     website, PSTR(PATH), website, stash.size(), sd); 

    // send the packet - this also releases all stash buffers once done 
    ether.tcpSend(); 

    } 
} 

et voici le script php de base:

<?php 

$link = mysqli_connect("xxxx", "xxx", "xxx", "xxx"); 
if(mysqli_connect_error()){ 
    die("database failed"); 
} 

if(isset($_GET['variable'])){ 

    $query = "INSERT INTO variables (variable) VALUES ('". $_GET['variable'] ."') "; 
    mysqli_query($link, $query); 

} 

?> 

ici est ce que je prends du moniteur série:

[WEBCLIENT ]

IP: 192.168.10.10

GW: xxx

DNS: xxx

SRV: xxx

mais quand je vérifie la base je ne peux pas voir quoi que ce soit inséré. Mais si je le fais manuellement dans un navigateur comme: billyval-com.stackstaging.com/index.php?variable=x je peux voir la valeur insérée (x) dans la base de données. J'ai changé de poste mais je ne vois pas de changement.

Je n'arrive pas à comprendre où est le problème et je l'affiche ici si quelqu'un peut m'aider.

Merci beaucoup.

+0

GET La requête HTTP ne doit pas contenir de corps de message. –

+0

Pouvez-vous s'il vous plaît être plus spécifique? Je suppose que je dois supprimer quelque chose de Stash :: prepare? – kakavia

+0

https://www.w3schools.com/tags/ref_httpmethods.asp –

Répondre

0

Votre GET demande n'est pas ok:

Stash::prepare(PSTR("GET http://$F/$F HTTP/1.1" "\r\n" 
    "Host: $F" "\r\n" 
    "Content-Length: $D" "\r\n" 
    "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" "\r\n" 
    "\r\n" 
    "$H"), 
website, PSTR(PATH), website, stash.size(), sd); 

Il devrait être POST demande, que vous utilisez application/x-www-form-urlencoded. Les POST sont plus adaptés à l'envoi de données.

Une demande POST ressemble à ceci:

POST /index.php HTTP/1.1 
Host: billyval-com.stackstaging.com 
Connection: close 
Content-Length: 200 
Content-Type: application/x-www-form-urlencoded 

variable1=1&variable2=2 

Appliqué à votre code:

Stash::prepare(PSTR("POST /$F HTTP/1.1" "\r\n" 
    "Host: $F" "\r\n" 
    "Content-Length: $D" "\r\n" 
    "Content-Type: application/x-www-form-urlencoded" "\r\n" 
    "\r\n" 
    "$H"), 
PSTR(PATH), website, stash.size(), sd); 

En outre, le code PHP doit changer:

if(isset($_POST['variable'])){ 

    $query = "INSERT INTO variables (variable) VALUES ('". $_POST['variable'] ."') "; 
    mysqli_query($link, $query); 

} 

En outre, read this.