• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Решено Обработка события устройство подключилось к сети

nomeron

New member
Большая просьба, подскажите, где можно посмотреть пример для реализации следующей функции.
Нужно отслеживать появление клиента точки. Т.е. я хочу сделать автоматическое подключение к сети клиента и отслеживать его нахождение в зоне покрытия сети.
 

nomeron

New member
Интересует пример кода на Arduino IDE. Можно ли такое реализовать.
Я не знаю структуру стека протокола WIFI и времени разбираться нет.
Отслеживание- это наличие в зоне покрытия клиента. Как я понимаю клиенты wifi должны с определенной периодичностью отправлять определенные пакеты. Нет пакетов - нет клиента поблизости.
 

sally555

New member
то есть одна точка доступа стационарная, на чем организована, тоже на espшке или на раоутере или на компьютере? Если на espшке, то она автономная или связана с компьютером или роутером? Если связана то каким образом, по WIFI или кабелем по USB? Вообщем конкретики бы хотелось:). Клиент, я так понимаю на espшке автономный?
 

nomeron

New member
то есть одна точка доступа стационарная, на чем организована, тоже на espшке или на раоутере или на компьютере? Если на espшке, то она автономная или связана с компьютером или роутером? Если связана то каким образом, по WIFI или кабелем по USB? Вообщем конкретики бы хотелось:). Клиент, я так понимаю на espшке автономный?
Есть светодиодный прожектор, espшка, DC-DC преобразователь и твердотельное реле. Нужно сделать, чтобы прожектор включался, когда я подхожу к нему со своим смартфоном с включенным wifi (на котором сохранена сеть espшки) без всяких лишних действий (запуска программ, нажатия кнопок и тп). В режиме точки доступа кочечно работает espшка
 

Vitaly

Member
при работе через sdk есть функция wifi_softap_get_station_num
в ардуине на момент 2.0.0-rc2 ее еще не добавили
 

sally555

New member
Из ide Arduino, подключаем внешнюю функцию из SDK:
Код:
extern "C" {
#include "user_interface.h"
uint8 wifi_softap_get_station_num(void);
}
Выводим результат в терминал, количество подключенных клиентов:
Код:
Serial.println(wifi_softap_get_station_num());
 

tretyakov_sa

Moderator
Команда форума
Отлично работает. Можно подойти и с несколькими смартфонами.
 

nomeron

New member
Из ide Arduino, подключаем внешнюю функцию из SDK:
Код:
extern "C" {
#include "user_interface.h"
uint8 wifi_softap_get_station_num(void);
}
Выводим результат в терминал, количество подключенных клиентов:
Код:
Serial.println(wifi_softap_get_station_num());
Большое спасибо. Отлично работает.
 

ave

New member
На форуме нашел такой пример:
Код:
// Count of stations which are connected to ESP8266 soft-AP
void client_status() {
  unsigned char number_client;
  struct station_info *stat_info;
  struct ip_addr *IPaddress;
  IPAddress address;
  int i=1;
  number_client = wifi_softap_get_station_num();
  stat_info = wifi_softap_get_station_info();
  Serial.println();
  Serial.print("Total connected_client are = ");
  Serial.println(number_client);

  while (stat_info != NULL) {
    IPaddress = &stat_info->ip;
    address = IPaddress->addr;
    Serial.print("client= ");
    Serial.print(i);
    Serial.print(" ip adress is = ");
    Serial.print((address));
    Serial.print(" with mac adress is = ");
    Serial.print(stat_info->bssid[0],HEX);
    Serial.print(stat_info->bssid[1],HEX);
    Serial.print(stat_info->bssid[2],HEX);
    Serial.print(stat_info->bssid[3],HEX);
    Serial.print(stat_info->bssid[4],HEX);
    Serial.print(stat_info->bssid[5],HEX);
    Serial.println();
    stat_info = STAILQ_NEXT(stat_info,next);
    i++;
  }
}
В примере используется еще функция wifi_softap_get_station_info(). Как её огласить?
Код:
extern "C" {
  #include "user_interface.h"
  unsigned char wifi_softap_get_station_num(void);
  struct wifi_softap_get_station_info(void);
}
Такая вставка выдает ошибку.
 

ave

New member
struct wifi_softap_get_station_info(void);

Vitaly
, может подскажете, как правильно огласить эту функцию чтобы она не выдавала ошибку. Если комментирую эту функцию - без нее программа компилируется и работает. Там проблема в оглашении переменной. Это больше вопрос к знатокам СИ.
Код:
unsignedchar wifi_softap_get_station_num(void); // работает
struct wifi_softap_get_station_info(void); // не работает, выдает ошибку

unsignedchar number_client;  // работает
struct station_info *stat_info;  // работает
number_client = wifi_softap_get_station_num();  // работает
stat_info = wifi_softap_get_station_info();  // работает
 

Юрий Ботов

Moderator
Команда форума
вариант 1: вообще убрать ее из extern:
  1. extern "C" {
  2. #include "user_interface.h"
  3. }
по идее ее объявление и так должно быть внутри "user_interface.h"

вариант 2: записать ее как:
struct stat_info* wifi_softap_get_station_info(void);
 

ave

New member
Юрий Ботов, спасибо. Сработал 1 вариант.
 
Последнее редактирование:
Сверху Снизу