Arduino + Linux + php

Masz problem z Arduino? Tutaj możesz szukać pomocy.
ODPOWIEDZ
norman
Młodszy majsterkowicz
Posty: 8
Rejestracja: 4 lip 2013, 21:09

Arduino + Linux + php

Post autor: norman » 4 lip 2013, 21:24

Witajcie,

Zakupiłem dziś Arduino Mega, podłączyłem pod Raspberry Pi, doinstalowałem apache + php i ustawiłem takie pliczki :

kod na arduino :

Kod: Zaznacz cały

int led = 13;
void setup() {                
  pinMode(led, OUTPUT);  
  Serial.begin(9600);  
}

void loop() {
  while (Serial.available() > 0) {
    int state = Serial.parseInt(); 
    if (Serial.read() == '\n') {
    switch (state) {
    case '2':
      digitalWrite(led, HIGH);
      break;
    case '1':
      digitalWrite(led, LOW);
      break;
    default :
      break;
    }
    }
  }
}
Kod na led.php :

Kod: Zaznacz cały

<?php
if (isset($_GET['led']))
{
 shell_exec('echo '.$_GET['led'].' > /dev/ttyACM0');
}
?>
<html>
<body>
<table border='0' width='100%'>
					<tr>
					<td><a href="led.php?led=2"><img src="on.png"></img</a></td>
					<td><a href="led.php?led=1"><img src="off.png"></img></a></td>
					</tr></table>
</body>
</html>
Oczywiście musiałem dać uprawnienia (aby się nie bawić poszedłem na łatwiznę) :

Kod: Zaznacz cały

chmod 777 /dev/ttyACM0
i ustawiłem tty programem stty komendą z sieci :

Kod: Zaznacz cały

stty -F /dev/ttyACM0 cs8 9600 ignbrk -brkint -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts
I działa to tak :
Jak kliknę na off, na on czy dam

Kod: Zaznacz cały

echo 1 > /dev/ttyACM0
lub

Kod: Zaznacz cały

echo 2 > /dev/ttyUSB0
(w sumie cokolwiek po echo daje taki wynik) to dioda się włączy/wyłączy/włączy/wyłączy (mrugnie dwa razy).
Nie ważny czy dam delay'e po zgaszeniu/włączeniu nie działa nic.

Działa w momencie kiedy dam polecenie w shellu

Kod: Zaznacz cały

tail -f /dev/ttyUSB0
. Wtedy ze strony czy z echo z innego terminala mogę gasić/włączać diodę - działa rewela.
Co jest nie tak ? Czy dobrze interpretuję że echo inicjalizuje port wysyłając do niego jakieś komendy a arduino je interpretuje jako sygnały właczenia/wyłączenia ? W momencie kiedy tail'em otworzę plik inicjalizacja nie jest już potrzebna i wszelkie komendy działają ok bez zakłóceń ?
Da się jakoś ustawić port tak aby przy otwieraniu nic nie było wysyłane do kontrolera ? Albo jak zakodować kontroler aby reagował na string typu "on" "off" - jestem słaby w C więc ciężko to widzę.


pozdrawiam

Norman

Co miesiąc do wygrania nagrody o wartości ponad 1600 zł!


Awatar użytkownika
Santyago
Młodszy majsterkowicz
Posty: 22
Rejestracja: 18 cze 2013, 14:07
Lokalizacja: Bytom
Kontakt:

Re: Arduino + Linux + php

Post autor: Santyago » 5 lip 2013, 00:52

Sytuacja, którą opisujesz (miganie diody podczas wysłania czegoś na serial) jest restart. Sytuacja zamierzona w Arduino wymagana do łatwiejszego wgrywania programu

Można to rozwiązać na trzy sposoby.

1) Trzymać cały czas otwarty port, korzystając np. z klasy PHP. np.: https://code.google.com/p/php-serial/

2) Wyłączyć autoreset sprzętowo podciągając pin reset do zasilania: http://playground.arduino.cc/Main/Disab ... Connection

3) Lub programowo (przykład na Mega/UNO): http://www.tinkerin.gs/2011/03/arduino- ... e-fix.html
norman
Młodszy majsterkowicz
Posty: 8
Rejestracja: 4 lip 2013, 21:09

Re: Arduino + Linux + php

Post autor: norman » 6 lip 2013, 19:09

Wielkie dzięki. Sprawdze metody i dam znac

Doczytałem na stronie Arduino o Mega :
"The Mega2560 contains a trace that can be cut to disable the auto-reset. The pads on either side of the trace can be soldered together to re-enable it. It's labeled "RESET-EN"."
Wszystko jasne :) Temat można zamknąć
ODPOWIEDZ

Strony partnerskie: