Arduino Server + Client

Всё, что не подходит под вышеперечисленные разделы

Модератор: immortal

Аватара пользователя
Amarok
Сообщения: 1427
Зарегистрирован: Пт дек 14, 2012 12:24 pm
Откуда: Россия, Нижняя Тура
Благодарил (а): 460 раз
Поблагодарили: 126 раз
Контактная информация:

Re: Arduino Server + Client

Сообщение Amarok » Вс июн 18, 2017 10:47 am

xor писал(а):А разве не так делается:
контроллер как сервер - слушает и исполняет внешние команды
если надо что-то сказать, переключается в режим клиента, говорит и возвращается в режим сервера?
Дык как это сделать то?
Моя Алиска живёт на Proxmox в Debian 12
Аватара пользователя
xor
Сообщения: 2045
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 289 раз
Поблагодарили: 633 раза

Re: Arduino Server + Client

Сообщение xor » Вс июн 18, 2017 1:17 pm

В своё время мне не понравилось, как мои контроллеры работали через arduinogw. Я городил мост на vb6 прокладку на 2 мс контролах- один сервер, другой- клиент. Потом мне понравилась идея Сергея с универсальным мостом усарт-вайфай через esp. Единственно, переписал на еспбейсике, добавив вызов со стороны контроллера.

Отправлено с моего Nexus 5 через Tapatalk
Аватара пользователя
xor
Сообщения: 2045
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 289 раз
Поблагодарили: 633 раза

Re: Arduino Server + Client

Сообщение xor » Вс июн 18, 2017 6:04 pm

к моему посту более подробно -viewtopic.php?f=8&t=3252&p=53668#p53668
Аватара пользователя
xor
Сообщения: 2045
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 289 раз
Поблагодарили: 633 раза

Re: Arduino Server + Client

Сообщение xor » Вс июн 18, 2017 10:51 pm

Наверное, здесь лучше отвечу.
Вот настройки на есп-бридже. Поставьте свои
2017-06-18_22-21-11.png
Настройки в есп
2017-06-18_22-21-11.png (39.74 КБ) 4304 просмотра
Загрузите в default.bas первый код из моего поста по ссылке
Создайте в скриптах новый, назовите его myesp
myespПоказать

Код: Выделить всё

if(isset($params['p1'])){
 $p1 = $params['p1'];
 //debmes('p1='.$p1);
 if(substr($p1,0,3)=="esp"){
  $id = substr($p1,3);
  callMethod('esp'.$id.'.input');
 }
}
$status='OK';
if(isset($params['p2'])){ $p2=$params['p2'];}
if(isset($params['c'])){ $cmd=$params['c'];} 
if(isset($params['m'])) { $mod=$params['m'];} 
if(isset($params['a'])) { $adr=$params['a'];} 
if(isset($params['s'])) { $status=$params['s'];} 
if(isset($params['v'])) { $value=$params['v'];}
if(isset($params['t'])) { $t=$params['t'];} 
//if(isset($params['m'])) {
 debmes('from esp'.$id.' p2='.$p2.' cmd='.$cmd.' mod='.$mod.' adr='.$adr.' v='.$value.' st='.$status.' t='.$t);
//}
if($p2=="uart"){
  sg('mod240.alive',1);
  if($cmd=="Noo"&&$status=="OK"){
   ClearTimeOut("noo_".$t);
   //тк вызывается дважды, уберем при сработке и второй вызов
   setTimeOut('clear_2_noo_'.$t,"ClearTimeOut('noo_".$t."');",5);
  }
  if(isset($mod)){
   if($status=='Err'){
    sg('mod'.$mod.'.alive',0);
   }else{
    sg('mod'.$mod.'.alive',1);
    if($cmd<>"Say"){
     ClearTimeOut("mod_".$t);
    //тк вызывается дважды, уберем при сработке и второй вызов
    setTimeOut('clear_2_mod_'.$t,"ClearTimeOut('mod_".$t."');",5);   
    }
   }  
    if(($adr%4==0)&&isset($value)){ 
       sg("mod".$mod.".adr".$adr,$value);
   } 
  }
  if(($mod=='5')&&($adr=='56')){callMethod('motiondetect5.statusChanged',array('status'=>$value));}
  if(($mod=='5')&&($adr=='88')){//check temperature
   if($value>-100&&$value<>85){callMethod('tempMod5.tempChanged',array('t'=>$value));
   }else{debmes('Err tempMod5='.$value);}
  }
  if(($mod=='5')&&($adr=='92')){callMethod('humSensor02.humChanged',array('h'=>$value));}
 
}

 
после строки debmes('from esp'.$id.' p2='.$p2.' cmd='.$cmd.' mod='.$mod.' adr='.$adr.' v='.$value.' st='.$status.' t='.$t);
мои внутренние заморочки, туда лучше не смотреть.
из есп приходит строка, формирующаяся здесь:
"192.168.1.7/objects/?script=myesp&p1=esp" & id() & "&p2=" & p2$ & "&c=" & p3$
пример:
"192.168.1.7/objects/?script=myesp&p1=esp8920510&p2=uart&c=Get&m=5&a=56&v=0&t=1259"

скрипт myesp осуществляет ее разбор
чтобы отправить команду модулю, использую такой код

Код: Выделить всё

$ip=$this->getProperty("IP"); // в моем случае 192,168,1,40
if(!isset($params['out'])){                //тут команда модулю
 $dt=$this->getProperty("data_out");//или тут команда модулю
}else{
 $dt=$params['out'];
 $this->setProperty("data_out",$dt);
}

$s = getURL("http://".$ip."/msg?cmd=<".$dt.">",0);  // у меня формат команды <a/b/c/d/e/>
//проверим на ошибку
$pos=strpos( $s,'uart ok');
if($pos===false){ //повторим
 $s = getURL("http://".$ip."/msg?cmd=<".$dt.">",0);
}
$this->setProperty("data_in",$s);
debmes('to esp -><'.$dt.'>') 
PS/посмотрите у меня в коннекте объект ESP ещё.
Для описанного выше должен существовать, конечно, объект esp8920510
За это сообщение автора xor поблагодарил:
Amarok (Пн июн 19, 2017 8:07 am)
Рейтинг: 1.16%
Ответить