OpenWrtファームウェアを使用して、TP-Link MR3420ルーターのUSBインターフェイス経由でArduino Unoを制御するPHP Webインターフェイスを作成しようとしています
奇妙なことに、私の PHP スクリプトは、arduino と通信する python スクリプトを実行した後にのみ arduino から応答を得ます。
私のPHPスクリプトはarduinoのLEDをオフにすることができたので動作していると確信していますが、arduinoからの返信はありません
ここに私のPHPコードがあります:
require("lib/php_serial.class.php");
$serial = new phpSerial;
$serial->deviceSet("/dev/ttyACM0");
$serial->confBaudRate(9600);
$serial->deviceOpen();
$serial->sendMessage($cmd);
sleep(1);
$read = $serial->readPort();
$serial->deviceClose();
ここに私のarduinoのスケッチがあります:
int numSerial;
if (Serial.available() > 0)
{
char inByte = Serial.read();
switch (inByte)
{
case 'l':
numSerial = numberFromSerial();
if (numSerial >= 0)
{
Serial.print("LED Mode: ");
switch (numSerial)
{
case 0:
ledMode = 0;
Serial.print("OFF");
break;
case 1:
ledMode = 1;
Serial.print("TEMP");
break;
case 2:
ledMode = 2;
Serial.print("KR");
break;
}
}
else
Serial.print(ledMode);
break;
case 't': //Data request
Serial.print(getTemp());
break;
}
}
そして、ここに私のpythonコードがあります:
import serial
ser = serial.Serial("/dev/ttyACM0", 9600, timeout=3)
ser.open()
ser.write("t")
print ser.readline()
ser.close()
助けてください。ありがとう。
問題の真の原因を発見!
phpSerial クラス:
$ret = $this->_exec("stty -F " . $this->_device . " " . (int) $rate, $out);
と置換する:
$ret = $this->_exec("stty -F " . $this->_device . " raw speed " . (int) $rate, $out);