2016-11-29 3 views
0

Je suis assez nouveau à Arduino alors peut-être que c'est un problème simple, mais je n'ai pas été en mesure de trouver une solution.La réponse du serveur Web Arduino est "ça marche!"

J'ai une carte Intel Galileo Gen. 2. J'essaye d'écrire un programme simple qui offre un serveur Web où, sur demande, il renvoie la valeur obtenue d'un capteur (n'importe quel texte ferait pour mon problème). J'ai configuré avec succès le réseau et obtenu la valeur mais chaque demande au serveur obtient un "Cela fonctionne!" message en réponse. J'ai essayé avec différents navigateurs (de chromw à lynx) et différents endroits nework.

C'est le code que je me sers:

#include <SPI.h> 
#include <Ethernet.h> 

byte mac[] = { 0x98, 0x4F, 0xEE, 0x05, 0x65, 0x02 }; 
char SENSORNAME[ ] = "galileo01"; 
IPAddress ip(192, 168, 15, 177); 
IPAddress dnServer(8, 8, 8, 8); 

EthernetServer server(80); 

int sensorPin = A0; // select the input pin for the potentiometer 
int readValue = 0; 
int prevValue = 0; 

void setup() { 
    Serial.begin(9600); 

    system("ifconfig enp0s20f6 down "); 
    system("ip link set enp0s20f6 name eth0"); 
    system("ifconfig eth0 up"); 
    Ethernet.begin(mac, ip, dnServer); 
    server.begin(); 

} 

void loop() { 
    readValue = analogRead(sensorPin); 
    EthernetClient client = server.available(); 
    if (client) { 
    boolean currentLineIsBlank = true; 
    while (client.connected()) { 
     if (client.available()) { 
     char c = client.read(); 
     Serial.write(c); 
     if (c == '\n' && currentLineIsBlank) { 
      client.println("HTTP/1.1 200 OK"); 
      client.println("Content-Type: text/html"); 
      client.println("Connection: close"); 
      client.println(); 
      client.print("{\"sensor\":\""); 
      client.print(SENSORNAME); 
      client.print("\",\"value\":\""); 
      client.print(readValue); 
      client.println("\"}"); 
      break; 
     } 
     if (c == '\n') { 
      // you're starting a new line 
      currentLineIsBlank = true; 
     } 
     else if (c != '\r') { 
      // you've gotten a character on the current line 
      currentLineIsBlank = false; 
     } 
     } 
    } 
    // give the web browser time to receive the data 
    delay(1); 
    // close the connection: 
    client.stop(); 
    Serial.println("client disonnected"); 
    } 
} 

Qu'est-ce que je fais mal?

Merci.


MISE À JOUR:

Ce que je vois est que lors de la demande est la manipulation non la fonction boucle() il. Je peux voir les résultats de lecture du capteur, mais il ne passe jamais par la clause if:

EthernetClient client = server.available(); 
    if (client) { 

Y a-t-il un serveur Web interne? Comment puis-je le définir?

+0

vous êtes-vous sûr que vous avez flashé ce code dans Arduino? – shazin

+0

Je le crois bien. J'ai mis quelques traces dans le code et je peux voir mes messages dans le moniteur série. En outre, je vois que l'adresse IP est correctement définie, car il répond aux messages. – jordi

Répondre

0

Je l'ai enfin trouvé. système par défaut est livré avec un serveur Web en cours d'exécution qui ne permettait pas d'établir un nouveau serveur sur le port 80. L'ajout de ce code a résolu le isue:

system("systemctl stop lighttpd > /dev/ttyGS0"); 
system("systemctl stop disable > /dev/ttyGS0");