ArduCAMMini OV2640 2MP サンプルで動かない



  • お世話になります。
    問題がありましたので、ご確認上教えていただければ幸いです。
    下記に実行したプログラムとログです。
    spiのclock(プログラムではfrequency、ログ上ではclockと表示している)を1000000に変更してみましたがprogram内指定の4000000で変更されていません。defaultでは3vのdrive()のパラメータを5vに変更してみましたが、Obnizeがsendした内容では変更されていません。

    恐縮ですが、オシロはありませんので、現物信号をみてはいません。
    宜しくお願い申しあげます。

    石井@行田

    <!-- HTML Example -->
    <html>
    <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>
    <script src="https://unpkg.com/obniz@latest/obniz.js"></script>
    </head>
    <body>

    <div id="obniz-debug"></div>
    <img id="image">

    <script>
    var obniz = new Obniz("OBNIZ_ID_HERE");
    obniz.debugprint = true;
    obniz.onconnect = async function () {
    obniz.io11.output(true);
    var cam = obniz.wired("ArduCAMMini", { cs:0, mosi:1, miso:2, sclk:3,frequency:1000000, drive:"5v", gnd:4, vcc:5, sda:6, scl:7 });
    await cam.spi_pingpongWait()
    }
    </script>
    </body>
    </html>

    Obniz: connected to ws://192.168.10.8
    Obniz: send: [{"io11":true}]
    Obniz: send: [{"io5":{"output_type":"push-pull5v"}}]
    Obniz: send: [{"io5":true}]
    Obniz: send: [{"io4":{"output_type":"push-pull5v"}}]
    Obniz: send: [{"io4":false}]
    Obniz: send: [{"io0":true}]
    Obniz: send: [{"system":{"wait":100}}]
    Obniz: send: [{"io3":{"output_type":"push-pull3v"}}] !!! push-pull5vに変更されていない!!!!
    Obniz: send: [{"io1":{"output_type":"push-pull3v"}}] !!! push-pull5vに変更されていない!!!!
    Obniz: send: [{"io2":{"output_type":"push-pull3v"}}] !!! push-pull5vに変更されていない!!!!
    Obniz: send: [{"io3":{"pull_type":"float"}}]
    Obniz: send: [{"io1":{"pull_type":"float"}}]
    Obniz: send: [{"io2":{"pull_type":"float"}}]
    Obniz: send: [{"io4":false}]
    Obniz: send: [{"display":{"pin_assign":{"4":{"module_name":"spi0","pin_name":"gnd"}}}}]
    Obniz: send: [{"spi0":{"mode":"master","clock":4000000,"clk":3,"mosi":1,"miso":2}}]
                            !!!! clock:1000000に変更されていない!!!
    Obniz: send: [{"io6":{"output_type":"open-drain"}}]
    Obniz: send: [{"io7":{"output_type":"open-drain"}}]
    Obniz: send: [{"io6":{"pull_type":"pull-up5v"}}]
    Obniz: send: [{"io7":{"pull_type":"pull-up5v"}}]
    Obniz: send: [{"io4":false}]
    Obniz: send: [{"display":{"pin_assign":{"4":{"module_name":"i2c0","pin_name":"gnd"}}}}]
    Obniz: send: [{"i2c0":{"sda":6,"scl":7,"mode":"master","clock":100000}}]
    Obniz: send: [{"display":{"pin_assign":{"0":{"module_name":"Cam","pin_name":"cs"},"1":{"module_name":"Cam","pin_name":"mosi"},"2":{"module_name":"Cam","pin_name":"miso"},"3":{"module_name":"Cam","pin_name":"sclk"},"4":{"module_name":"Cam","pin_name":"gnd"},"5":{"module_name":"Cam","pin_name":"vcc"},"6":{"module_name":"Cam","pin_name":"sda"},"7":{"module_name":"Cam","pin_name":"scl"}}}}]
    Obniz: send: [{"io0":false}]
    Obniz: send: [{"spi0":{"data":[128,85],"read":false}}]
    Obniz: send: [{"io0":true}]
    Obniz: send: [{"io0":false}]
    Obniz: send: [{"spi0":{"data":[0,0],"read":true}}]
    Obniz: send via local
    Obniz: recvd via local
    Obniz: {"spi0":{"data":[31,255]}}
    Obniz: send: [{"io0":true}]
    Error: spi bus fail
    Obniz: send via local

    以上


  • administrators

    @Yuichi-Ishii
    返事が遅くなってしまい申し訳ありません。

    1度は動いたとのこと良かったです。おっしゃる通り、何かが不安定な可能性があります。
    弊社の環境で今いくつか試していたのですが、これよりもさらにクロック速度を上げても動作していますので、固有差がなにかあるのかもしれません。
    spiのモードですが、転送モードはmode0なのであっているかと思います。(ちなみにmodeの変更機能もはこれから追加の予定があります)

    ご報告の通り、ライブラリ側でfrequencyが受け取れていないバグがありました。これから修正致します。
    以下のように自分でspiを用意して渡すことが可能なので以下で試していただけないでしょうか。

    var spi = obniz.getFreeSpi();
    spi.start({mode:"master", clk :3, mosi:1, miso:2, frequency:1000000, drive:"5v"}); 
    
    var cam = obniz.wired("ArduCAMMini", { cs:0, spi:spi, gnd:4, vcc:5, sda:6, scl:7 });
    

    こちらで5vかつ1Mhzの条件での動作が可能です。

    よろしくお願いします。


  • administrators

    spiの周波数ですが、バグではなくもともと周波数を変更できないようにしておりました。
    変更する場合は上記のようにspiオブジェクトを作って渡す方式が正しくなりますので、そちらでお願い致します。



  • ありがとうございます。
    getFreeSPI()の関数にテストしました。
    frequency : "4M", drive:"5v" ではloopbalkでエラーでしたが、
    drive:"3v",の場合frequency:"2M","1M"で動作確認できました。

    先日オシロ(100Mhz,1Ghzサンプル,2ch)が調達できましたので、いろいろ条件を変えた所、4Mhz時は専用の5V電源のほうが安定。オシロプローブを付けたほうが成功確率が高いなど、不安定要素があるようです。ArduCAMMiniのいろいろ関数を個別に使ってみましたが、4Mhz, 3V でも不安定になるよです。しかし残念ながら、本質的なタイミング上の問題を再現、理解でいていません。
    ご指摘のようにspiオブジェクトを使ってみます。ただ初心者なので、少し勉強しながら進めていきます。
    ご支援ありがとうございます。

    石井@行田


  • administrators

    @Yuichi-Ishii 検証ありがとうございます。不安定な場合があるということだったので、ArduiCamライブラリにおいて周波数変更などできる機能や、不安定な場合は周波数などを変更するようにとdocumentを更新しようと思います。

    また何かありましたらご連絡下さい。



  • お世話になっています。
    ファームウエアのバージョンアップありがとうございます。
    ArduCamMiniでの関連部分につきまして、確認してみました。
    1)Frequency及びdriveの確認:frequenctについては2MでSPIのregisterへのwrite/readはOKになりました。(まだ不安定なんで今のところ、1Mに設定しています。)driveは電圧確認でOKです。ご対応ありがとうございました。
    2)ただ、画像を表示する、最初のサンプルコードは、htmlへの表示ができませんでした。個別のサンプルプログラムでチェックしましたところ、[await]isCaptureDoneWait()関数でエラーとなっています。
    GoogleChrome F12でのLog表示で(TypeError: this.isCaptureDoneWait is not a function at Obniz.obniz.onconnect)。
    できる範囲での確認ですが、取り急ぎご報告いたしました。

    石井@行田


  • administrators

    @Yuichi-Ishii すみません、ドキュメントが間違っておりました。

    await this.isCaptureDoneWait()
    

    となっている部分ですが

    await cam.isCaptureDoneWait()
    

    が正しいです。obniz.jsのドキュメントですのでこれから修正して更新いたします。

    ありがとうございます。


  • administrators

    また、ドキュメント中にある

    const chipid = await this.getChipIdWait();
    

    const chipid = await cam.getChipIdWait();
    

    が正しい記載となります。



  • 早々のreplyありがとうございます。
    sampleプログラムを以下のように修正し、TypeErrorはなくなり、SPIのデータ転送が行われました。
    しかしhtmlにimageは表示されませんでした。
    また転送byte数表示は image size=8200byte。 init()ではsetsize(320x240)なので少々少ないのでは。(よくわかっていません) もう少し追いかけてみます。できることがありましたらコメントいただければ幸いです。
    石井@行田

    <!-- HTML Example -->
    <html>
    <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>
    <script src="https://unpkg.com/obniz@2.0.0/obniz.js"></script>
    </head>
    <body>

    <div id="obniz-debug"></div>
    <img id="image">

    <script>
    var obniz = new Obniz("OBNIZ_ID_HERE");
    obniz.onconnect = async function () {
    obniz.io11.output(true);
    var cam = obniz.wired("ArduCAMMini", { cs:0, mosi:1, miso:2, sclk:3, gnd:4, vcc:5, sda:6, scl:7, spi_frequency:1000000 });

    await cam.spi_pingpongWait();
    cam.setMode('MCU2LCD');
    const chipid = await cam.getChipIdWait();
    if (chipid != 0x2642) {
    throw new Error('unknown chip ' + chipid)
    }
    cam.init();

    cam.flushFIFO();
    cam.flushFIFO();
    cam.startCapture();
    while (true) {
    if ((await cam.isCaptureDoneWait())) { break; }
    }
    const jpegData = await cam.readFIFOWait();

    console.log("image size = " + jpegData.length + " bytes");

    const base64 = cam.arrayToBase64(jpegData);
    document.getElementById("image").src = "data:image/jpeg;base64, " + base64;

    }
    </script>
    </body>
    </html>


  • administrators

    @Yuichi-Ishii こちらのプログラムそのままで動かしたところ、以下のように画像として表示されました

    0_1550623248955_Screen Shot 2019-02-20 at 9.39.32.png

    jpegですので、この解像度なら3kbyteや8kbyteでもおかしくはないかと思います。
    カメラが起動できていなければチップIDが読み取れずI2Cの通信エラーが起こるはずですが、それが起きていないので通信自体はうまく行ってそうです。

    画像として表示する部分になにか問題があるのかもしれません。
    今お使いのOSやブラウザは何を使われていますでしょうか。



  • ありがとうございます。
    OS :win10  64bit Web:Google Chromになります。
    どうもおかしいので、自己診断をしてみたところ、
    obniz idを入れたところ、テスト結果にIDを出力して何も表示されませんでした。browserでF-12キーでログ表示したころ以下のようなエラーメッセージを表示。再現します。

    どこか壊したのかもしれませんので、少し整理して考えてみたいと思います。
    (1)自己診断結果については、以前は、各ポートごとに問題がないか表示されていたように記憶しています。こちらのハードの不具合化しているのかの確認。
    何か確認すべきことがあればコメントお願いします。

    (2)Obniz本体のI2c通信での不具合の可能性については、一度Arduinoでの動作確認等を行ってみたいと思います。その後は、動くところと動かないところの確認を進めていきます。

    お世話をおかけいたします。

    石井@行田

    --- log by F12 key on Google Chrome ---

    Uncaught Error: Error: firmware 2.0.0 needs obniz.js version 2.0.0 or higher. see https://obniz.io/doc/hw_firmware
    at Obniz.error (obniz.js:8553)
    at Obniz.notifyToModule (obniz.js:8519)
    at Obniz.wsOnMessage (obniz.js:7660)
    at Obniz.<anonymous> (obniz.js:7742)
    error @ obniz.js:8553
    notifyToModule @ obniz.js:8519
    wsOnMessage @ obniz.js:7660
    (anonymous) @ obniz.js:7742



  • お世話になっています。

    さきほど、Aruduinoにて動作確認を行ったとろろ、エラーが発生しました。以前から、何度か動作確認を行っていますので、Arducom Mini 2MP側で不具合があるということになります。
    申し訳ありませんが、一旦これでこの課題は終了とさせていただきたいと思います。
    大変ありがとうございました。
    また、なにかありましたらご相談させていただきます。

    石井@行田


 

Recent Projects

  • @nak435 かしこまりました。よろしくお願いします。

    read more
  • @Yuki-Sato さん、

    外部の3.3vを使うとはいえ普通にvccやgndを供給して問題なくうごくのであれば、弊社での動作確認後Flick Hatのライブラリとして公開できればと思っているのですがいかがでしょう。

    今週末に確認しますので、お待ちください。

    read more
  • @nak435 時間がかかってすいません、

    なんとか3.3vをgndにつないでFlick Largeを動かしたかったのですが、うまく動かすことができなかったです。
    3.3vをgndを繋がずに接続するというのはライブラリで推奨して伝えることは難しいと思ってます。

    Flick LargeでなくFlick Hatの方で、外部の3.3vを使うとはいえ普通にvccやgndを供給して問題なくうごくのであれば、弊社での動作確認後Flick Hatのライブラリとして公開できればと思っているのですがいかがでしょう。

    よろしくお願い致します。

    read more
  • @nak435 ありがとうございます。
    接続は3.3vのgnd以外同じでした。
    エラーはそのせいかもしれませんが、しかし電気的にはgndを繋がない場合3.3vとしてうまく供給できないはずなのでそこが不思議です。

    教えていただいたプログラムの部分を修正して試してみたいと思います。
    また少し時間がかかりそうなのですが、早めに試したいと思います。

    引き続きよろしくお願い致します。

    read more