Arduino UNO + PHP интерфейс

vworld
vworld аватар
Offline
Зарегистрирован: 26.09.2011

у меня наблюдается подобная сложность, вызвана она скорее всего тем, что кто то еще "трогает" СОМ порт, у меня этот "кто-то" драйвер адроидотелефона...я выхожу из положения шаманством...

1) в командной строке mode COM3 - мне показывает скорость, как правило 57600

2) включаю/выключаю ардуино

3) перезаливаю скетч

З.Ы. драйвер телефона удалить не могу, потому мирюсь с таким шаманством, а вообще собираюсь придлелать к ардуино модуль блутуса, авось меньше проблем станет

fox7812
Offline
Зарегистрирован: 09.04.2012

Вообще приложения на php, использующие связь с arduino для чтения используют php serial, а это возможно только на линуксе, а на линуксе проблемы - смотри посты выше.

metaforos
Offline
Зарегистрирован: 09.04.2012

С SerProxy у меня получилось читать, но что-то не нравится она мне...

echo '<br/>Значения датчиков - '; Это какие датчики Вы считываете? Я так понимаю, что состояния пинов Ардуины? Если не сложно, покажите скетч Ардуины для этого скрипта. 

Rimidalw
Offline
Зарегистрирован: 04.04.2012

 Написал у себя в блоге небольшую статью. Делюсь своим опытом Arduino и вебинтерфейс. 

vworld
vworld аватар
Offline
Зарегистрирован: 26.09.2011

metaforos пишет:

Это какие датчики Вы считываете? Я так понимаю, что состояния пинов Ардуины?

температуры - ds18b20 и фоторезистор

как бы ничего серьезного...

fox7812
Offline
Зарегистрирован: 09.04.2012

Заработало на линуксе. Удалось передать и прочитать данные.
Проблема заключалось в настройках php - open_basedir. Пришлось поставить там корневой каталог.

morpeh
Offline
Зарегистрирован: 04.04.2012

Rimidalw пишет:

 Написал у себя в блоге небольшую статью. Делюсь своим опытом Arduino и вебинтерфейс. 

Большое спасибо за статью, пошел читать:)

fox7812
Offline
Зарегистрирован: 09.04.2012

http://www.youtube.com/watch?v=tq7lQ4b85VQ&feature=channel&list=UL

Накидал динамику на php. Строит диаграмму данных с Arduino. В данном случае - данные с фоторезистора.

 

Rimidalw
Offline
Зарегистрирован: 04.04.2012

fox7812 пишет:

http://www.youtube.com/watch?v=tq7lQ4b85VQ&feature=channel&list=UL

Накидал динамику на php. Строит диаграмму данных с Arduino. В данном случае - данные с фоторезистора. 

Уважаемый, очень хотелось бы узнать на чем это все написано и исходники если вам не жалко :)

fox7812
Offline
Зарегистрирован: 09.04.2012
HTML:
<html>  
    <head>  
    <meta http-equiv="Content-Type" content="text/html; Charset=UTF-8">
    
    <style type="text/css">
    .elemClass{
			width: 10px;
			position: absolute;
			bottom: 0;
	}
    #dia{
	    height: 600px;
	    position:relative;
	    background-color: #808080;
    }
    </style>
    <script>  
    
		var tm;
		var px = 0;
    
        function createElem(w) {
			var col;
						
			if(parseInt(w) < 300){col="black"}
			else if(parseInt(w) > 500){col="red"}
			else if(parseInt(w) > 300 && parseInt(w) < 500){col="green"};
			
			px=px+10;
			
			var pxt = px + "px";
						
			var parent = document.getElementById('dia');
			var newP = document.createElement('div');
			newP.className = 'elemClass';
			//newP.style.width = '10px';
			newP.style.height = w;
			newP.style.background = col;
			newP.style.color = '#000';
			newP.style.display = 'inline-block';
			newP.style.cssFloat ="left";
			newP.style.left =pxt;
			parent.appendChild(newP);
        };
    
        function showContent() {  
      
            var cont = document.getElementById('contentBody');  
            var loading = document.getElementById('loading');  
      
           cont.innerHTML = loading.innerHTML;  
     
           var http = createRequestObject();  
           if( http )   
           {  
               http.open('get', 'http://localhost/ard/index.php');  
               http.onreadystatechange = function ()   
               {  
                   if(http.readyState == 4)   
                   {  
                       cont.innerHTML = http.responseText;
                       
                       createElem(http.responseText);  
                   }  
               }  
               http.send(null);      
           }  
           else   
           {  
               document.location = link;  
           }  
       }  
     
       // создание ajax объекта  
       function createRequestObject()   
       {  
           try { return new XMLHttpRequest() }  
           catch(e)   
           {  
               try { return new ActiveXObject('Msxml2.XMLHTTP') }  
               catch(e)   
               {  
                   try { return new ActiveXObject('Microsoft.XMLHTTP') }  
                   catch(e) { return null; }  
               }  
           }  
       }  
       
    function stopp(){
			clearInterval(tm);   
	};
	
	function startt(){
			tm = setInterval('showContent();', 500);   
	};
   </script>  
   </head>  
     
   <body>  
     
       <p>Диаграмма Света</p>  
         
       <form>  
           <input onclick="startt();" type="button" value="Старт">  
           <input onclick="stopp();" type="button" value="Стоп">  
       </form>  
         
       <div id="contentBody">  
       </div>  
     
       <div id="loading" style="display: none">  
       Идет загрузка...  
       </div> 
       
       <div id="dia">
       </div> 
         
   </body>  
   </html>  
fox7812
Offline
Зарегистрирован: 09.04.2012

PHP:

include  "php_serial.class.php";
$serial = new phpSerial;
$serial->deviceSet("/dev/ttyACM0");
$serial->confBaudRate(9600);
$serial->confParity("none");
$serial->confCharacterLength(8);
$serial->confStopBits(1);
$serial->confFlowControl("none");
$serial->deviceOpen();

$read = null;

while($read == null){
	
$read = $serial->readPort();

};

echo $read;

$serial->deviceClose();

 

rusel6
Offline
Зарегистрирован: 07.02.2012

А скетч на ардуино не могли бы выложить?

Casper17
Offline
Зарегистрирован: 21.06.2013

А что если с помощью php_serial.class.php открыть порт и после него цикл сделать бесконечный и в нем ждать прием данных и манипулировать с ними! Так получится?

marat10
Offline
Зарегистрирован: 18.05.2015

Тема уже древняя, но, может, кому пригодится. Я тоже решил поиграться с Ардуино UNO, через PHP и локальный сервер на компьютере. У меня Денвер, винда восьмерка, хотелось не только управлять, но и получать с ардуины данные. Короче, нашел PHP Serial Extension, тут  . Судя по всему, написанное специально для работы под  виндой. Все подробно расписано в мануале. Без граблей не обходится, и если рекомендованное для установленной у вас версии PHP расширение не подходит, надо пробовать ближние версии. Во всяком случае, у меня получилось именно так, но после установки все работает, как часы.  Можно передавать и принимать пакеты данных, функции для строк и отдельно для байтов.

marat10
Offline
Зарегистрирован: 18.05.2015

P.S. - пробовать ближние версии расширения, естественно.