Клиентское соединение Arduino (Uno) Ethernet не удается после многих распечаток клиента - PullRequest
5 голосов
/ 15 сентября 2011

Я использую Arduino Uno с Ethernet Shield.

После отправки многих HTTP-запросов, client.println (...) , клиент начинает сбой при подключении.Время до отказа кажется случайным, и считывание последовательности из цикла может варьироваться где-то между ~ 1000 и ~ 7000.

Ошибка не связана с переполнением буфера передачи Ethernet (после этосовет )

Вот код, который не работает:

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

// Network constants
byte mac[] = {0x00, 0x23, 0xdf, 0x82, 0xd4, 0x01};
byte ip[] = {/*REDACTED*/};
byte server[] = {/*REDACTED*/};
int port = /*REDACTED*/;
Client client(server, port);

// State
int sequence;

void setup(){
    Ethernet.begin(mac, ip);
    Serial.begin(9600);
    sequence = 0;

    delay(1000);
}

void loop(){
    httpPut("/topic/:test/publish?sessionId=SESenanhygrp");
    Serial.println(sequence++);
}

void httpPut(char* url){
    if (!client.connect()) {
        Serial.println("EXCEPTION: during HTTP PUT. Could not connect");
        return;
    }

    client.print("PUT");
    client.print(" ");
    client.print(url);
    client.println(" HTTP/1.0");
    client.println();

    while(!client.available()){
        delay(1);
    }

    while(client.available()) {
        char c = client.read();
        Serial.print(c);
    }

    while(client.connected()){
        Serial.println("Waiting for server to disconnect");
    }

    client.stop();
}

Ошибка возникает в следующем сегменте

if (!client.connect()) {
    Serial.println("EXCEPTION: during HTTP PUT. Could not connect");
    return;
}

Ответы [ 2 ]

1 голос
/ 21 сентября 2011

В библиотеке Arduino Ethernet в версии 22 имеется ошибка (как обсуждено в Linux / Windows V0022 / 1.0. Проблема Ethernet решена ).я должен был использовать библиотеку Ethernet2 (Питер из tinker.it).Коду нужно было немного поработать, но теперь все работает нормально.Мне удалось получить более 40000+ HTTP-сообщений, отправленных без проблем.(Иногда отдельные сообщения не могут быть отправлены, но частота ошибок составляет менее 4%.)

0 голосов
/ 20 сентября 2011

Я бы замедлил скорость связи, увеличив время между сообщениями в 10 раз.Тогда, если вы не получите сообщение об ошибке между 1000 и 7000 сообщений, это, вероятно, будет означать, что вы слишком быстро общаетесь со своим маленьким Arduino, и его буфер переполняется, и, к сожалению, библиотека связи не может его восстановить.Я бы также следил за свободными байтами Arduino в буфере через последовательный порт после каждого сообщения.Вы также можете проверить это поведение, посылая сообщения с ПК так быстро, как только сможете, и посмотрите, не замерзнет ли это через некоторое время.Если это так, вы можете запретить сообщения, пока буфер не превысит некоторый лимит.

...