Переподсоединение WiFi при ошибке

Тема в разделе "Arduino & Shields", создана пользователем SerRay, 16 мар 2015.

  1. SerRay

    SerRay Нерд

    Привет всем! Для проекта использую WiFi Shield. При включении устройства происходит подсоединение к домашней сети WiFi, соответственно "Ардуинка" находится в сети как сервер. По запросу клиента (Raspberry Pi по крону раз в 30 минут) отдает показания с датчиков, которые кладутся в БД...

    Проблема в том, что время от времени соединение WiFi шилда отлетает..все функционирует, но сервер (Arduino) не отвечает клиенту в нужный момент. И больше вообще не отвечает, пока не перезагрузишь Ардуинку...

    Каким образом можно производить переподсоединение к сети WiFi шилда?

    Я дошел до того, что хотел при отсутствии соединения перезагружать плату :

    Код (Text):
    // Раз в 5 минут прогоняется процедура WiFiCheck

    if (WiFiCheckCount == 3000) {WiFiCheck(); WiFiCheckCount=0;}

    void WiFiCheck()
    {
    if ( status != WL_CONNECTED ) { resetFunc(); }
    }

    void(* resetFunc) (void) = 0;
    Но когда на WiFi шилде горит светодиод Error, перезагрузки не происходит. Вроде как соединение есть, но шилд не отвечает всеравно. Как его (WiFi Shield) перезапускать или переподсоединять тогда?
    У кого какие идеи?
     
  2. SerRay

    SerRay Нерд

    Эй! Не все сразу. Я аж растерялся чью идею опробовать первой :D
     
  3. Alex19

    Alex19 Гуру

    Возможно, нет пользователей данной платы и Вы являетесь первопроходцем, или они сейчас не на сайте.

    Начну, с вариантов, которые рассматривал бы сам. Надеюсь потом подтянутся более опытные
    1. Изучить библиотеку.

    2. Если это не поможет, можно попробовать переписать библиотеку, если сам чип поддерживает такие возможности.
    http://arduino.cc/en/Main/ArduinoWiFiShield - сам модуль
    http://arduino.cc/en/Guide/ArduinoWiFiShield - гайд
    http://arduino.cc/en/Hacking/WiFiShield32USerial - команды сериал порта
    http://pub.ucpros.com/download/1451_hdg204_datasheet_pa4.pdf?osCsid=mcrh728ovgeg6ub4ka6mccrso5s - чип

    3. Если в прошивке нет такой возможности, но есть в чипе, посмотреть последние прошивки, он позволяет заливать прошивки, ведь там настоящий AVR. О том как это сделать описано тут http://arduino.cc/en/Hacking/WiFiShieldFirmwareUpgrading.

    А вот с переподключением, не совсем понятно, завтра постараюсь глянуть.

    UPD. Было немного времени, понял, что проблема не только у Вас, на форумах, часто пишут о них, но решений пока не нашел.
     
    Последнее редактирование: 18 мар 2015
    SerRay нравится это.
  4. SerRay

    SerRay Нерд

    Спасибо за конструктивные советы! :)
    Прошивку последнюю залил..значит придется химичить с библиотекой..:rolleyes:
     
  5. Alex19

    Alex19 Гуру

    Не за что, тут все помогают, по возможностям. Да и самому любопытен данный шилд.

    Но с начало, попробуйте посмотреть с помощью отладки по сериал порту (ссылка чуть выше - команды сериал порта), и файл отладки debug.h, он загружается автоматом, нужно просто выставить нужные константы, к примеру _DEBUG_, о том, что выставлять можно бегло увидеть в файле Arduino\libraries\WiFi\utility\debug.h.

    Поищите информацию, на http://forum.arduino.cc/, по этому шилду. К примеру, любопытная информация http://forum.arduino.cc/index.php?topic=128424.0. Так же у некоторых вообще не работает с версиями IDE выше 1.0.3 (с каким-то номером прошивки) и еще много "интересного" можно узнать.

    Переподключение должно работать по простой схеме, примерно так wifi.disconnect(), затем wifi.begin(). Но если нет статуса, то все бесполезно.

    Главное, чтобы прошивка была правильная - работала корректно и отправляла по SPI верную информацию, остальное можно подправить/переписать вопрос времени.
     
    Последнее редактирование: 18 мар 2015
    SerRay нравится это.