Я пытаюсь использовать PHP для компиляции и загрузки эскиза Arduino через командную строку. Прямо сейчас пользователь загружает ino
или же pde
файл через форму, и он передается в каталог для последующего использования. Используя местоположение загруженного файла в качестве переменной, я бы хотел, чтобы PHP запустил версию Ardunio для командной строки, чтобы скомпилировать и загрузить ее.
После первоначальной попытки с использованием exec()
а также system()
Я перешел на popen()
, Запустив следующий код, я могу заставить Arduino открыться, а затем закрыть, не загружая скетч:
pclose(popen('"C:\Program Files\Arduino\arduino.exe" --port COM3 --upload "C:\sketches\uploads\cube\a\a.ino"));
Выполнение этого кода и его вариантов через командную строку Windows работает, поэтому я знаю, что входная строка не является проблемой. Кроме того, просмотр диспетчера задач Windows показывает, что он открывается на секунду или около того, а затем закрывается. Может ли кто-нибудь указать мне правильное направление?
За popen
(или любые другие функции процесса) для правильной работы в Windows вам нужно избежать обратной косой черты как это:
pclose(popen('"C:\\Program Files\\Arduino\\arduino.exe" --port COM3 --upload "C:\\sketches\\uploads\\cube\\a\\a.ino"'));
в качестве альтернативы попробуйте заменить обратную косую черту на переднюю. Следующее также должно работать на последних версиях Windows:
pclose(popen('"C:/Program Files/Arduino/arduino.exe" --port COM3 --upload "C:/sketches/uploads/cube/a/a.ino"'));
(В вашем фрагменте кода также отсутствовала завершающая одинарная кавычка, но я подозреваю, что это опечатка.)
Других решений пока нет …