Alexander (HH): Com Schnittstelle unter Linux / php ansprechen (HB628)

Beitrag lesen

Moin Moin!

Analogeingang A6 eingelesen:

echo "c06" > /dev/ttyACM0

cat /dev/ttyACM0

uw
sollten eigentlich 3 Byte sein

Probier mal

od -t x1 < /dev/ttyACM0

Das sollte dir die Daten hexadezimal, Byte für Byte anzeigen. Mehr dazu in od(1).

alle 8 Analogeingänge eingelesen:

echo "c09" > /dev/ttyACM0

root@raspberry:~# cat /dev/ttyACM0
²sMÚ*h
sollten eigentlich 17 Byte sein

Vielleicht. Auch da hilft od.

jetzt gehts ans php
hier bin ich noch nicht weiter - ich kann ja auch schlecht alles exec()en

exec hilft Dir auch nicht unbedingt weiter, aber du brauchst statt des mode zwingend einen Aufruf von stty, weil PHP wie gesagt für ioctl zu doof ist. Und der Aufruf von stty muß vor dem open auf das Device stattfinden.

//mode $com: 'BAUD=$bautrate PARITY=N data=8 stop=1 xon=off`;
Dir ist schon klar, dass die Zeile etwas tun solle, aber nichts tun kann? Das ist erstens auskommentiert, zweitens DOS/Windows-spezifisch und unter Linux garantiert nicht lauffähig, und drittens kann man nicht einfach Shell-Kommandos in ein PHP-Script reinkopieren und hoffen, dass PHP die an die Shell weitergibt.

der komplete code ist von jemanden, der mit purebasic geschrieben hat - bei ihm hats auch nicht funktioniert.

Und warum glaubst Du, dass nicht funktionierender PureBasic-Code in PHP plötzlich funktioniert?

die windows-zeile hab ich nur auskommentiert und nicht gelösch, um sie nur als errinerungsstütze zu behalten, weil ich die einstellungen noch setzen wollte.

So lange Du die serielle Schnittstelle nicht korrekt konfigurierst, wird GAR NICHTS funktionieren.

Hmm, anscheinend kann PHP keine ioctls. Faszinierend.
wie schon erwähnt - phpinfo() zeigt mir das modul nicht

Von welchem Modul redest Du? ioctl ist eine Funktion, die in der libc noch vorhanden ist, von PHP aber nicht weitergereicht wird.

Oder Du benutzt eben etwas anderes als PHP.
c++ und java bin ich zu doof, pascal ist schon knapp 2 Jahrzehnte her und basic weiß nicht.

Klassisches C reicht. Perl kann ioctl und hat fertige Libraries für den Zugriff auf serielle Schnittstellen unter Unix und Windows. Python kann ioctl und hat vermutlich auch Libraries für serielle Schnittstellen. Lua kann man ioctl beibringen. Selbst MUMPS kann mit seriellen Schnittstellen umgehen (auch wenn das alles andere als hübsch aussieht), und das ist mittlerweile 47 Jahre alt.

bei so vielen php gurus in dem forum, wird sich doch hoffentlich noch einer erbarmen ;-)

Klar, wenn Du Dir die Hose unbedingt mit glühenden Kneifzangen anziehen willst, ist das Deine Sache. Ich würde ein Projekt, bei dem ich fast zwingend auf ioctl angewiesen bin, nicht in einer Sprache angehen, die ioctl nicht kann.

Alexander

--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".