Дык как это сделать то?xor писал(а):А разве не так делается:
контроллер как сервер - слушает и исполняет внешние команды
если надо что-то сказать, переключается в режим клиента, говорит и возвращается в режим сервера?
Arduino Server + Client
Модератор: immortal
- Amarok
- Сообщения: 1427
- Зарегистрирован: Пт дек 14, 2012 12:24 pm
- Откуда: Россия, Нижняя Тура
- Благодарил (а): 460 раз
- Поблагодарили: 126 раз
- Контактная информация:
Re: Arduino Server + Client
Моя Алиска живёт на Proxmox в Debian 12
- xor
- Сообщения: 2045
- Зарегистрирован: Сб ноя 22, 2014 8:45 pm
- Благодарил (а): 289 раз
- Поблагодарили: 633 раза
Re: Arduino Server + Client
В своё время мне не понравилось, как мои контроллеры работали через arduinogw. Я городил мост на vb6 прокладку на 2 мс контролах- один сервер, другой- клиент. Потом мне понравилась идея Сергея с универсальным мостом усарт-вайфай через esp. Единственно, переписал на еспбейсике, добавив вызов со стороны контроллера.
Отправлено с моего Nexus 5 через Tapatalk
Отправлено с моего Nexus 5 через Tapatalk
win10 connect https://connect.smartliving.ru/profile/303
- xor
- Сообщения: 2045
- Зарегистрирован: Сб ноя 22, 2014 8:45 pm
- Благодарил (а): 289 раз
- Поблагодарили: 633 раза
Re: Arduino Server + Client
к моему посту более подробно -viewtopic.php?f=8&t=3252&p=53668#p53668
win10 connect https://connect.smartliving.ru/profile/303
- xor
- Сообщения: 2045
- Зарегистрирован: Сб ноя 22, 2014 8:45 pm
- Благодарил (а): 289 раз
- Поблагодарили: 633 раза
Re: Arduino Server + Client
Наверное, здесь лучше отвечу.
Вот настройки на есп-бридже. Поставьте свои Загрузите в default.bas первый код из моего поста по ссылке
Создайте в скриптах новый, назовите его myesp
после строки 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 осуществляет ее разбор
чтобы отправить команду модулю, использую такой код
PS/посмотрите у меня в коннекте объект ESP ещё.
Для описанного выше должен существовать, конечно, объект esp8920510
Вот настройки на есп-бридже. Поставьте свои Загрузите в 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));}
}
мои внутренние заморочки, туда лучше не смотреть.
из есп приходит строка, формирующаяся здесь:
"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.'>')
Для описанного выше должен существовать, конечно, объект esp8920510
- Рейтинг: 1.16%
win10 connect https://connect.smartliving.ru/profile/303