2016-11-29 7 views
0

Я новичок в Arduino, поэтому, возможно, это простая проблема, но я не смог найти решение.Ответ сервера Arduino - «Это работает!»

У меня есть плата Intel Galileo Gen. 2. Я пытаюсь написать простую программу, предлагающую веб-сервер, где по запросу он возвращает значение, полученное от датчика (любой текст будет делать для моей проблемы). Я успешно настроил сеть и получил значение, но каждый запрос на сервер получает «Он работает!». сообщение как ответ. Я пробовал работать с разными браузерами (от chromw до lynx) и разными точками nework.

Это код, я использую:

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

Что я делаю неправильно?

Спасибо.


UPDATE:

Что я вижу в том, что при выполнении запроса функция цикла() не обрабатывает его. Я вижу результаты считывания сенсора, но он никогда не проходит через предложение if:

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

Есть ли какой-либо внутренний веб-сервер? Как мне настроить его?

+0

вы уверены, есть ли у вас мелькнула этот код в Arduino? – shazin

+0

Я верю. Я установил некоторые следы в коде, и я могу видеть мои сообщения в последовательном мониторе. Кроме того, я вижу, что IP правильно установлен, так как он отвечает на сообщения. – jordi

ответ

0

Я, наконец, нашел его. По умолчанию система поставляется с управлением веб-сервера, не позволяя установить новый сервер на порту 80. Добавление этого кода разрешал isue:

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