Перейти к содержанию
    

Беспроводная связь нескольких узлов.

У меня есть сеть датчиков которые подсоединяются к базовой станции. В случае CAN, LAN(UDP) всё ясно. А если я хочу связать по WIFI, какие мои действия?

Все подключаются к общему Access Point и получают IP? А потом что? Я должен знать IP каждого узла чтобы обратиться  к нему? А может отконфигурировать базовую станцию как Access Point? И что тогда, поднимать сервер на ней?

 

 

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, jenya7 said:

Все подключаются к общему Access Point и получают IP? А потом что? Я должен знать IP каждого узла чтобы обратиться  к нему?

Имя, не IP. Курите маны на тему DHCP

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

взял борд с вай-фай, подключился к AP. с лэптопом подключился к тому же AP. пингую в обе стороны, пинга нет. что не так?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 hours ago, jenya7 said:

что не так?

А 'борд с wifi' весь стек TCP/IP поддерживает? В частности DHCP (используется для получения IP) и ICMP ECHO (который для Ping используется)

Ещё можно посмотреть на AP список подключённых клиентов - есть ли там ваша борда (и выдан ли её DHCP адрес)?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Just now, xvr said:

А 'борд с wifi' весь стек TCP/IP поддерживает? В частности DHCP (используется для получения IP) и ICMP ECHO (который для Ping используется)

Ещё можно посмотреть на AP список подключённых клиентов - есть ли там ваша борда (и выдан ли её DHCP адрес)?

 

AP выдал IP и тому и другому. борд Ping поддерживает. у него в API есть функция WIFI_Ping(uint8_t *ip_addr, uint32_t count, uint32_t delay, int32_t * status).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 hours ago, jenya7 said:

борд Ping поддерживает. у него в API есть функция WIFI_Ping(uint8_t *ip_addr, uint32_t count, uint32_t delay, int32_t * status).

Это пинг с борда наружу, а нужен в другую сторону

Для чистоты эксперимента попробуйте пинг с самой АП (у них обычно в сервисном меню есть), ну и пинг по IP

12 hours ago, gosha-z said:

Курим multicast вообще и mDNS в частности

АП обычно включает DNS сервер, который подхватывает локально розданные DHCP клиенты.

Но кто знает, может у ТС на ноуте руками DNS прописан (на провайдера). Тогда работать не будет

 

Кстати, а что ping на ноуте пишет? Он не может достучаться до борды или вообще её не знает?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 6/25/2021 at 11:08 AM, xvr said:

Кстати, а что ping на ноуте пишет? Он не может достучаться до борды или вообще её не знает?

Отвечает - Destination host unreachable. Со стороны контроллера возвращает статус -1.

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

О - у меня такая же проблема !

Взял плату с WiFi. Включил питание - лампочка моргает, а пинга нет.

Что мне делать ? Кто-то сможет дать совет ? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

подключил еще один лэптоп к тому же AP. оба лэптопа пингуются. похоже WIFI модуль дерьмовый.

убрал из кода

if (WIFI_STATUS_OK == WIFI_ReceiveData(SOCKET, udp_rx_buf, 1000, &udp_rx_len, 0 ))
{
  if (udp_rx_len > 0)
      USART_SendInt(SYS_USART, udp_rx_len, 1);
}

и пинг пошел.

вопрос теперь кто есть кто. датчики клиенты а база сервер?

 

С TCP геморой. нужно коннектится к IP которого я не знаю. Может открыть UDP и посылать мультикаст?

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пытаюсь открыть UDP сервер. API категорически игнорирует UDP поэтоиу по описанию сделал ф-цию.

Quote

How to setup a UDP Comm Sever

1. Set Protocol to UDP
2. Set Local port number

3. Start UDP Comm Sever

Spoiler

ES_WIFI_Status_t ES_WIFI_UdpServer(ES_WIFIObject_t *Obj, uint32_t socket, uint16_t port)
{
    ES_WIFI_Status_t ret = ES_WIFI_STATUS_OK;
    LOCK_WIFI();
    
    //Open a socket
    sprintf((char*)Obj->CmdData,"P0=%d\r", socket);
    ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
    if(ret != ES_WIFI_STATUS_OK)
    {
        UNLOCK_WIFI();
        return ret;
    }
    
    //Select UDP Protocol
    sprintf((char*)Obj->CmdData,"P1=1\r"); 
    ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
    if(ret != ES_WIFI_STATUS_OK)
    {
        UNLOCK_WIFI();
        return ret;
    }
    
    sprintf((char*)Obj->CmdData,"P2=%d\r", port); 
    ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
    if(ret != ES_WIFI_STATUS_OK)
    {
        UNLOCK_WIFI();
        return ret;
    }
    
    //Start UDP Comm Server
    sprintf((char*)Obj->CmdData,"P5=1\r");
    ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
    if(ret != ES_WIFI_STATUS_OK)
    {
        UNLOCK_WIFI();
        return ret;
    }
    
    return ret;
}

 

всё проходит на ура но когда получаю данные

Spoiler

ES_WIFI_Status_t ES_WIFI_AltReceiveData(ES_WIFIObject_t *Obj, uint8_t Socket, uint8_t *pdata, uint16_t Reqlen, uint16_t *Receivedlen, uint32_t Timeout)
{
  uint32_t wkgTimeOut;

  ES_WIFI_Status_t ret = ES_WIFI_STATUS_ERROR;

  if (Timeout == 0)
  {
    wkgTimeOut = NET_DEFAULT_NOBLOCKING_READ_TIMEOUT;
  }
  else
  {
    wkgTimeOut = Timeout;
  }

  LOCK_WIFI();

  if(Reqlen <= ES_WIFI_PAYLOAD_SIZE )
  {
      sprintf((char*)Obj->CmdData,"R1=%d\r", Reqlen);
      ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
      if(ret == ES_WIFI_STATUS_OK)
      {
        sprintf((char*)Obj->CmdData,"R2=%lu\r", wkgTimeOut);
        ret = AT_ExecuteCommand(Obj, Obj->CmdData, Obj->CmdData);
        if(ret == ES_WIFI_STATUS_OK)
        {
          sprintf((char*)Obj->CmdData,"R0\r");
          ret = AT_RequestReceiveData(Obj, Obj->CmdData, (char *)pdata, Reqlen, Receivedlen);
          if (ret != ES_WIFI_STATUS_OK)
          {
            DEBUG("AT_RequestReceiveData  failed\n");
          }
        }
        else
        {
         DEBUG("setting timeout failed\n");
        }
      }
      else
      {
        DEBUG("setting requested len failed\n");
        *Receivedlen = 0;
      }
  }
  UNLOCK_WIFI();
  return ret;
}

 

на

sprintf((char*)Obj->CmdData,"R0\r");
ret = AT_RequestReceiveData(Obj, Obj->CmdData, (char *)pdata, Reqlen, Receivedlen);

получаю ошибку ES_WIFI_STATUS_UNEXPECTED_CLOSED_SOCKET. что может быть?

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 6/27/2021 at 9:57 AM, jenya7 said:

убрал из кода


if (WIFI_STATUS_OK == WIFI_ReceiveData(SOCKET, udp_rx_buf, 1000, &udp_rx_len, 0 ))
{
  if (udp_rx_len > 0)
      USART_SendInt(SYS_USART, udp_rx_len, 1);
}

и пинг пошел.

Это странно. Похоже вы как то исчерпали ресурсы WIFI борды, что у неё даже ping отвалился

On 6/27/2021 at 9:57 AM, jenya7 said:

вопрос теперь кто есть кто. датчики клиенты а база сервер?

Датчики клиенты, конечно, а сервер вы должны сами где то запустить (АП сервером не является - она чисто точка коммутации)

On 6/28/2021 at 8:24 AM, jenya7 said:

получаю ошибку ES_WIFI_STATUS_UNEXPECTED_CLOSED_SOCKET. что может быть?

Количество сокетов не переполнилось? Их там совсем не много (штук 5 на всё - если WIFI на ESP8266).

Попробуйте поуправлять WIFI вручную с терминала - можно будет отличить поломанные протоколы от программных ошибок

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Технически в вайфае допустимы vendor-specific frame. Ими можно пулять в эфир и принимать без всякой точки доступа и ip. Останется только в софте реализовать нужный функционал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, xvr said:

Количество сокетов не переполнилось? Их там совсем не много (штук 5 на всё - если WIFI на ESP8266).

Попробуйте поуправлять WIFI вручную с терминала - можно будет отличить поломанные протоколы от программных ошибок

 

А почему 5? ISM43362 вроде как нехилый WIFI MCU.

ESP8266 модули (2$) быстренько подключились к AP, пингуются, посылают, принимают.

Эта скотина ISM43362 (около 20$) раз подключается AP раз нет. когда подключается - AP выдает ему IP, но он не пингуется. WIFI_StartUdpServer(SOCKET, PORT) конечно падает.

категорически разочарован этим модулем.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Just now, jenya7 said:

А почему 5? ISM43362 вроде как нехилый WIFI MCU.

Это у ESP(некоторые идентификаторы в ваших листингах меня в эту сторону настроили). С ISM не работал, увы. Не подскажу

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...