開発について

開発者

oasynnoumが開発しています。
API の見直し・拡張、バグ修正、ドキュメントの整備などを行なっています。
このモジュールで一緒に遊んでくれる仲間がほしいです。

開発に至った経緯・動機

元々は arduino で少し遊びはじめた事がきっかけでした。
当初、 arduino をシリアルポート経由で制御するために Ruby を用いていました。
Ruby で出来るのならば、ということでシリアル通信のための PHP ライブラリが無いか調べました。
結果的には pecl の公式パッケージ Direct IO を含めいくつかのモジュール・ライブラリが在りました。
しかしそれらは Windows でしか動かなかったり、あるいは Linux でしか動かなかったり、ソースは非公開などと、なにか一つが欠け落ちていました。
個人的に欲しかったのは以下のようなもので、そういったものが見当たらなかったので Gorilla の開発を始めました。

  • シリアル通信プログラミングのための PHP インタフェース
  • Windows でも POSIX システムどちらでも動く
  • ソースコードが公開されている

バージョン 0.1.0 をリリースしている現時点での私の動機づけは、「 PHP でできることの幅を広げることが出来れば」という思いが強いです。

フィードバック・バグ報告

フィードバックを頂けるととても嬉しいです。
フィードバックの宛先は私のツイッターアカウントもしくは GitHub 、あるいはこのページのコメント欄でもどこでも構いません。
どうぞお気軽にあなたの感想を私にお教えください。よろしくおねがいします。


 

17 Responses to 開発について

  1. 石川 和正 より:

    Windows環境にてXAMPP配下に「Gorilla」をインストールしようとしてますが、「php_Gorilla.dll」をディレクトリ「ext」配下にコピーして、
    「php.ini」の中に「extension=php_Gorilla.dll」を追記しても、
    その結果が、phpinfo()の中に現れません。
    XAMPP環境にはインストールできないということはないとは思うのですが、
    悩んでおります。

    • admin より:

      コメントありがとうございます。

      お使いいただいている環境がどの様なものか教えて下さるとありがたいです。
      phpinfo() に結果が現れない原因として、
      お使いの XAMPP に同梱されている PHP と、このサイトからダウンロードしていただいた DLL の属性がマッチしていない可能性が考えられます。
      phpinfo() の以下の項目の確認をおねがいします。

      * PHPのバージョン
      * Architecture (記載があれば)
      * Thread Safety

      ダウンロードのページにも記載していますが、これらの属性は PHP 本体のものとマッチしている必要があります。
      これらの属性がマッチしていないと Gorilla のロードに失敗します。
      また、Apache Web サーバーを用いる際には、 Gorilla を再ロードするために Web サーバーの再起動も必要になります。

      以上、宜しくお願いします。

  2. 石川 和正 より:

    早速のアドバイスに感謝申し上げます。
    原因が解りました。
    これまでは誤って「Gorilla-0.5.0-5.5-nts-x86」を用いていました。
    「Gorilla-0.5.0-5.5-ts-x86」を用いることで、phpinfo()の中に「Gorilla (API for talking to serialport)」が現れるようになりました。
    因みに、PC環境ですが、
    Windows7
    XAMPP 1.8.3
    Apache 2.4.7
    PHP 5.5.9
    です。
    これから本格的に検討したいと思ってますが、「GitHub」に公開されているソースファイルのどれを、どこに格納するかが今一つ理解できていません。
    デレクトリは「phpmake_serialport」なのか「PHPMake\SerialPort」なのか?
    宜しくお願いします。

  3. admin より:

    お返事ありがとうございます。
    解決できたようでよかったです。

    PHP ファイルを置くディレクトリは特に制限はありません。
    例えば次のような PHP ファイルをドキュメントルート以下に置けばブラウザからアクセスでき、デバイスをコントロール出来るはずです。

    web2tty.php
    https://github.com/oasynnoum/phpmake_serialport/blob/master/examples/web2tty.php

    これからこのライブラリを検討していただくという事ですが、なにか問題等ありましたらご報告下さい。
    私自身 Gorilla を用いて開発を行なっていますが、現在のところ私が扱ったことのあるデバイスは USB UART 変換モジュールの載ったものや Arduino などで、実際の RS-232 制御線(RTSやDTSなど)の制御を行ったことがありません。
    率直に申し上げますとその辺に不安はありますが、出来る限り問題・不具合には対応していくつもりです。

    また、メーリングリストもありますので、こちらの方に投稿していただけると幸いです。
    https://groups.google.com/forum/?pli=1#!forum/phpmake

    宜しくお願いします。

  4. 石川 和正 より:

    examples の中にある”web2tty.php”をコピペしてXAMPPにて実行しました。
    deviceName: COM3
    data:適当な数値
    で「submit」すると、
    failed to CreateFile()
    になってしまいます。
    思い当たることありますか?
    それから、 “SerialPort.php”は同一ディレクトリ内に置いておけば良いですよネ?

    • admin より:

      私から申し上げられる事は、COMポートの名前の確認ぐらいです。
      この辺はすでに確認されてることとは思いますが、今一度デバイスマネージャーからCOMポートの確認をお願いします。

      examples にある SerialPort.php は web2tty.php をはじめとして、スクリプトを実行する際に必要なものではありません。
      このファイルは phpDocumentor をもちいてAPIリファレンスを作成する際に用いるものですので、このファイルを require もしくは include する必要はありません。

      • 石川 和正 より:

        返信できるシステムだったのですネ!
        失礼しました。
        さて、新たな疑問が湧いてきました。
        「SerialPort.php」は必要ないとのことですが、その中には「クラス」が定義されています。
        では一体、「クラス」はどのように読み込んでいますでしょうか?
        ”web2tty.php”の中には、そのような記述がないもので、、、。

        • admin より:

          クラスの定義はインストールしていただいた拡張モジュール、 php_Gorilla.dll により行われています。

          拡張モジュールの実装方法については以下のリンクが参考になると思います。
          拡張モジュールづくりは楽しいですよ。ぜひお試しください。

          例で学ぶPHP拡張モジュールの作り方
          http://gihyo.jp/dev/serial/01/php-module/0001

          Extension Writing Part I: Introduction to PHP and Zend
          http://devzone.zend.com/303/extension-writing-part-i-introduction-to-php-and-zend/

          CodeGen_PECL – the PHP extension generator
          http://php-baustelle.de/CodeGen_PECL/manual.html

          • 石川 和正 より:

            そうでしたか?
            なんか、すごく難しそうですネ!
            ところで、「examples」に収められたサンプルプログラムの中に、
            変数$argc が現れますが、これは何処からか継承されてくる変数でしょうか?
            このようなことが解説されているサイトなどございましたら紹介いただけると助かります。
            現在は、「USBタイプのRS-422/485」を用いてブラウザ画面からPC-PC間でのデータ通信を目論んでます。

          • 石川 和正 より:

            下記の返信をしたのですが、追伸します。
            変数$statusは上位プログラムに対して、例外処理(Exceptions)の状態を継承する変数でしょうか?
            もしそうだとすれば、それを扱う上位プログラムはどれですか?
            それから、「$e->getMessage()」で表示される内容は、どのプログラムで定義してますでしょうか?
            いろいろと聞いてますが、お許しください。

          • admin より:

            うーん、 $argc や Exception の扱いなど、単なる PHP プログラミングについては PHP の入門書や公式マニュアルをご覧いただくほうが良いです。
            というよりも、その辺りについて私から都度説明申し上げるのは時間的にかなりの無理があります。

            以下 URL は PHP の勉強に際して非常に参考になるかと思います。

            PHP マニュアル
            http://www.php.net/manual/ja/

            PHP: The Right Way
            http://ja.phptherightway.com/

          • 石川 和正 より:

            いろいろとアドバイスをありがとうございます。
            どうにか、PC間での通信ができるようになりました。
            今回は監視カメラ(PTZカメラ)用PCと上位PCとのデータのやり取りにXAMPP経由で利用させていただきます。
            監視カメラ(PTZカメラ)のコントロールや画像取得はHTML言語ベースなので、PHPを用いてのシリアル通信機能がどうしても必要です。
            まだテストプログラム段階ですが、肝の部分は解って参りました。
            先ずはお礼まで。

  5. 山下哲也 より:

    現在Fedora 21、Linux4.11,においてJAVAを利用してシリアルポート経由で
    気温、湿度、気圧などのデータをを観測装置より得て利用しています。
    PHP環境にても同様のデータを得て利用したいと考えています。
    そこでPHPよりシリアルデータを得るためのインターフェースを探しておりましたところ
    Gorillaを知りましたので早速インストールして、USB UART変換モジュールを経由して$device = ‘/dev/ttyUSB0′にて
    接続を試みましたが$openで”Permission denied ”のメッセージが帰ってきました。
    原因がわからず困ってしまいました。何かアドバイスがありましたらよろしくお願いします。

    • admin より:

      山下さま
      コメントありがとうございます。

      ‘Permission Denied’ というエラーメッセージが戻ってきたということですが、 PHP を実行したユーザーにデバイスファイル(/dev/ttyUSB0)を読み書きする権限が無かったと思われますので、その点ご確認下さい。

      そのエラーが出た際、 PHP をどのように実行されましたか?
      Webサーバーにスクリプトを置いて http 経由で実行したならその時の PHP 実行ユーザーはWebサーバーを実行しているユーザーになります。(Fedora/Apache だと apache だったような気がします)
      コマンドラインからスクリプトを実行したのであれば、その時コマンドラインにログインしたユーザーになります。

      以下に私の Ubuntu/Apache での例を示します。
      www-data はWebサーバー実行ユーザーを示し、 /dev/ttyACM0 はシリアルポートを指すデバイスファイルを示します。

      $ ls -l /dev/ttyACM0 
      crw-rw---- 1 root dialout 166, 0  7月 16 19:56 /dev/ttyACM0
      

      デバイスファイルのユーザー:グループは root:dialout となっていて root, dialout いずれでもこのデバイスファイルに対して読み書きが出来ます。
      Apache Webサーバーにこのファイルに対する権限を与える場合、 Webサーバー実行ユーザーのグループに dialout を付与するという方法があります。

      $ id www-data
      uid=33(www-data) gid=33(www-data) groups=33(www-data)
      $ sudo gpasswd -a www-data dialout
      ユーザ www-data をグループ dialout に追加
      $ id www-data
      uid=33(www-data) gid=33(www-data) groups=33(www-data),20(dialout)
      

      以上のように www-datadialout を付与することで、Webサーバーが /dev/ttyACM0 に対して読み書きを行えるようになります。

  6. 山下哲也 より:

    早速のご返事ありがとうございます。
    さて、アドバイスの通りdialoutグループを追加しました。
    uid=48(apache) gid=48(apache) groups=48(apache),18(dialout)
    Webサーバーにスクリプトを置いて http 経由で実行しましたが
    結果は同じでした。

  7. 山下哲也 より:

    失礼しました。
    アドバイスの通りでデータゲット出来ました。
    ありがとうございました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Set your Twitter account name in your settings to use the TwitterBar Section.