Подружим PHP и Arduino

Тема в разделе "Arduino & Shields", создана пользователем Denis.cpp, 9 дек 2012.

  1. Denis.cpp

    Denis.cpp Нерд

    Здраствуйте, люди добрые!!!Вот все никак никак не могу подружить php и arduino, точнее они дружат только на половину=)

    Вообщем у меня получилось отослать значения из php в arduino
    вот так это выглядит
    Код (Text):
    <?
    $fp =fopen("com6", "w");
    fwrite($fp, chr(49));
    fclose($fp);
    ?>
    вообщем так она у меня отсылает "1" и на ардуине, дополнительно делает вот такую штуку -'0' вообщем так у меня происходит преобразование до единицы, по другому научить её работать я не смог( но зато огоньки включает и выключает) покрайней мере понимает какое число пришло, ВОПРОС - КАК СЧИТАТАТЬ ЗНАЧЕНИЯ ПРИХОДЯЩИЕ С COM ПОРТА НА PHP? мне надо прочитать значения с фоторезистора в скетче я их получаю так -

    Serial.println(analogRead(sensor_pin));

    привидите хотябы приблизительный пример как это можно выполнить, или хотя бы ссылочку, на что либо очень похожее, а ещё лучше где можно подробно почитать как работать с com портом!Спасибо!
     
  2. Denis.cpp

    Denis.cpp Нерд

    Вот наверное как то так должно чтение происходить, по крайней мере читает из файла, но мне надо из ком порта(
    Код (Text):
    <?php
    $filename = "c:\\files\\123.txt";
    $handle = fopen($filename, "rb");
    $contents = fread($handle, filesize($filename));
    echo $contents;
    fclose($handle);
    ?>
     
  3. hibiki

    hibiki Гик

    попробуйте задать режим открытия файла "rw" (или "rwb"), и читать в цикле по одному байту.

    только учтите, что чтение синхронное, и если на порт ничего не приходит, то ваш скрипт будет висеть в ожидании
     
  4. Vir

    Vir Гик

    В процессинге всё тоже самое, если я не ошибаюсь. Так что ничего страшного, особенно, если это cli-скрипт.
     
  5. Denis.cpp

    Denis.cpp Нерд

    Люди напишите хоть чуток кода, а то что то вообще не ферштейн, кстати я тут другим методом пошёл я через Hyper Terminal считываю значения из com porta и в HT ест функция писания лога, так вот я этот лог читаю из php всё бы хорошо, но теперь другая проблема, php теперь не может отправить данные в com port так как на нём висит HT вот такая загогулина получается, блин не хватает теории работы с ком портом вот прочитать бы где нибудь как с ним работать в php, пробовал библиотеку phpserial, но она только перезагружает arduiny:mad: по идее эта библиотека должна решить мои проблемы!Heellp!!!:(
     
  6. Denis.cpp

    Denis.cpp Нерд

  7. Denis.cpp

    Denis.cpp Нерд

    Вот ещё походу то что надо только что то я не разобрался ещё, как я понял это из под линукса работает? -
    http://pastebin.com/tHRMmPuJ
     
  8. Denis.cpp

    Denis.cpp Нерд

  9. hibiki

    hibiki Гик

    вот нет у меня сейчас php

    что-то вроде
    Код (Text):

    <?php
    $content = "";
    $handle = fopen("com6", "rb+");
    if (!$handle) die "Печалька! Порт не открылся!";
    while ($c = read($handle,1)) {
      $content .= $c;
    }
    fclose($handle);
    ?>
     
    отработает?

    писать в этот же хэндл, он открыт для чтения и записи
     
  10. Denis.cpp

    Denis.cpp Нерд

    Код (Text):
    <?php
    $content = "";
    $handle = fopen("com6", "rb+");
    if (!$handle) die ("Печалька! Порт не открылся!");
    while ($c = read($handle,1))
    {
      $content .= $c;
    }
    fclose($handle);
    ?>
    Как я понял ты ошибочку сделал вот эту строку надо в скобки взять "Печалька! Порт не открылся!" , далее выскакивает вот такая ошибка -
    Fatal error: Call to undefined function read() in Z:\home\defzone.ru\www\process3.php on line 5

    Как я понял функции read нету и она на неё ругается. пока так вот..
     
  11. hibiki

    hibiki Гик

    fread(), конечно же

    p.s. да, аргумент у die в скобках. Тяжелое наследие perl'а
     
  12. Denis.cpp

    Denis.cpp Нерд

    PHP:
    <?php
    $content = "";
    $handle = fopen("com6", "rb+");
    if (!$handle) die ("Печалька! Порт не открылся!");
    while ($c = fread($handle,1))
    {
      $content .= $c;
    }
    fclose($handle);
    ?>
    Теперь просто чистая страница(, хоть ошибки не выдает:) , вывод надо организовывать как то?? Код скетча на ардуино надо?
     
  13. Витя

    Витя Гик

    Забыли вывести что прочитали.

    Код (Text):
    echo $content;
     
  14. Denis.cpp

    Denis.cpp Нерд

    Да я уже echo $content; вводил и echo $c; вводил и так и этак, но истина всё равно, где то рядом:), не работает...
     
  15. Витя

    Витя Гик

    А в тело самого цикла запихивали echo, туда выполнение вообше переходит? Вдруг там первый байт например ноль приходит, тогда цикл просто не срабатывает и выходит. Там нужно делать проверку на конец данных а не думать что не может прийти ноль.
     
  16. Denis.cpp

    Denis.cpp Нерд

    И в цикле и за циклом пробовал, не работает( как сделать проверку на 0?
     
  17. Витя

    Витя Гик

    По идее проверка должна быть такая: while (!feof($handle))
    Т.е. пока есть данные.

    Но из за нулей еще и переменную возможно нельзя вывести, я не знаю точно как php работает. Значит еще в цикле нужно добавить проверку if ($c == 0) continue; чтобы не добавлять их к данным.
     
  18. Denis.cpp

    Denis.cpp Нерд

    Есть ещё вопрос а что делать если в порт может приходить два значения 0 либо 1?
     
  19. Витя

    Витя Гик

    Так нет разницы. Ноль как я написал просто пропускаится а все остальные символы браузер должен нормально обработать.
     
  20. Denis.cpp

    Denis.cpp Нерд

    Кстати, ещё интересный момент есть, если обратили внимание, когда я посылаю в порт какие либо значения я указываю их тип(функция chr делает это), откуда php знает что ему пришло?, да у переменной в php как я понял мягкая типизация и php сам присваивает тип данных переменной, но возникает другой вопрос что он будет делать если в порт будет приходить 123dfsdf-//****56""" такого типа сообщения? то есть разного типа?