obnizのフォーラムは新しいシステムに移行しております。

新しいフォーラムはこちらになります

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



  • お世話になります
    AuduCAMMiniのサンプルが、応答がなく動きませんので調査しています。
    関数テストが色々ご用意されていますが、課題を代表的に表している(と思っています)
    [await] spi_pingpongWait() の関数テストにて再現しますのでこれにてご説明します。
    「obniz.debugprint = true」を追加して実行、Chromのconsoleでの表示をおこなうと
    下記のようになります。

    Obnizのdebugprint()は、エラー表示等はありませんが、ChromeのWeb consoleには、
    「Uncaught (in promise) TypeError: n.stack.match is not a function」以下エラー発生表示になっています。

    なお、ArduCAMMini OV2640 2MPについて、Camera TutorialのサイトからArduino Uno R3,Win10の環境にて、
    functions testとVdeo_streamingのスケッチを入れて実行、正常動作を確認しました。

    疑問点があります。問題でしょうか?

    CS=false状態でspi0へデータを送っている。
    02:23:56 Obniz: send: [{"io0":true}]
    02:23:56 Obniz: send: [{"io0":false}]
    02:23:56 Obniz: send: [{"spi0":{"data":[0,0],"read":true}}]

    また、事前に確認すべきことがありましたら、教えていただきたいとおもいます。
    まだ不慣れですができるだけ対応していきます。

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

    石井@行田

    -------- [1] Obniz debugprint log -------------------------------

    02:23:56 Obniz: send: [{"io4":false}]
    02:23:56 Obniz: send: [{"io0":true}]
    02:23:56 Obniz: send: [{"system":{"wait":100}}]
    02:23:56 Obniz: send: [{"io3":{"output_type":"push-pull3v"}}]
    02:23:56 Obniz: send: [{"io1":{"output_type":"push-pull3v"}}]
    02:23:56 Obniz: send: [{"io2":{"output_type":"push-pull3v"}}]
    02:23:56 Obniz: send: [{"io3":{"pull_type":"float"}}]
    02:23:56 Obniz: send: [{"io1":{"pull_type":"float"}}]
    02:23:56 Obniz: send: [{"io2":{"pull_type":"float"}}]
    02:23:56 Obniz: send: [{"io4":false}]
    02:23:56 Obniz: send: [{"display":{"pin_assign":{"4":{"module_name":"spi0","pin_name":"gnd"}}}}]
    02:23:56 Obniz: send: [{"spi0":{"mode":"master","clock":4000000,"clk":3,"mosi":1,"miso":2}}]
    02:23:56 Obniz: send: [{"io6":{"output_type":"open-drain"}}]
    02:23:56 Obniz: send: [{"io7":{"output_type":"open-drain"}}]
    02:23:56 Obniz: send: [{"io6":{"pull_type":"pull-up5v"}}]
    02:23:56 Obniz: send: [{"io7":{"pull_type":"pull-up5v"}}]
    02:23:56 Obniz: send: [{"io4":false}]
    02:23:56 Obniz: send: [{"display":{"pin_assign":{"4":{"module_name":"i2c0","pin_name":"gnd"}}}}]
    02:23:56 Obniz: send: [{"i2c0":{"sda":6,"scl":7,"mode":"master","clock":100000}}]
    02:23:56 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"}}}}]
    02:23:56 Obniz: send: [{"io0":false}]
    02:23:56 Obniz: send: [{"spi0":{"data":[128,85],"read":false}}]
    02:23:56 Obniz: send: [{"io0":true}]
    02:23:56 Obniz: send: [{"io0":false}]
    02:23:56 Obniz: send: [{"spi0":{"data":[0,0],"read":true}}]
    02:23:56 Obniz: send via local
    02:23:56 Obniz: recvd via local
    02:23:56 Obniz: {"spi0":{"data":[0,106]}}
    02:23:56 Obniz: send: [{"io0":true}]
    02:23:56 Obniz: send via local

    ------- [2] log on console of Chrome ---------------------------------

    Obniz: connecting to wss://1.ws.obniz.io/obniz/xxxx-xxxx/ws/1?obnizjs=1.15.2&accept_binary=true
    Obniz: ws connected
    Obniz: {"ws":{"ready":true,"obniz":{"firmware":"1.1.0"},"local_connect":{"ip":"192.168.10.8"}}}
    Obniz: send: [{"ws":{"reset_obniz_on_ws_disconnection":true}}]
    Obniz: local connect to ws://192.168.10.8
    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"}}]
    Obniz: send: [{"io1":{"output_type":"push-pull3v"}}]
    Obniz: send: [{"io2":{"output_type":"push-pull3v"}}]
    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}}]
    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":[0,106]}}
    Obniz: send: [{"io0":true}]

    Uncaught (in promise) TypeError: n.stack.match is not a function
    at Object.parse (logger.min.js?rev=b4a1fcd13b763a55cbf867530711284c4a212284:1)
    at logChecker.<anonymous> (logger.min.js?rev=b4a1fcd13b763a55cbf867530711284c4a212284:1)
    at promise.catch.err (VM894 obniz.js:8044)
    parse @ logger.min.js?rev=b4a1fcd13b763a55cbf867530711284c4a212284:1
    (anonymous) @ logger.min.js?rev=b4a1fcd13b763a55cbf867530711284c4a212284:1
    promise.catch.err @ obniz.js:8044
    Promise.catch (async)
    _callOnConnect @ obniz.js:8043
    _callOnConnect @ obniz.js:8525
    _callOnConnect @ obniz.js:8649
    ws.onopen @ obniz.js:7940

    Obniz: send via local



  • @Yuichi-Ishii ご連絡ありがとうございます。

    カメラ自体はarduinoと使えているのに、obnizだとエラーとなってしまうのですね。

    現在chromeでエラーの詳細が見えなくなっています。こちらは数日中に治る予定です。

    このエラーはiFrameで動いているプログラム画面の中だけのものとなります。一度「ツール」から「新しいタブで開く」で開いていただけますでしょうか。
    そして、chromeのconsoleを開いていただき( https://sites.google.com/site/webdeshinri/jspsych-wo-shimeru-qianni/chrome-de-javascript-konsoruwo-kaiku )出力されるエラーを教えて頂ければ原因が分かるかもしれません。

    csがlowになることですが、このcsはlow activeとなります。
    つまり、低いときだけカメラはspiの信号を受け付けますので、これであっております。

    ちなみにArduCAMMini miniの電源ですが、 https://obniz.io/sdk/parts/ArduCAMMini/README.md?iframe=false にありますように2箇所以上のioか、もしくは外部電源から供給されていますか?



  • 早々にありがとうございます。

    昨日までの進捗をまずはご連絡いたします
    1)csの件:理解しました。aruduinoのスケッチからLOW true信号と判断して進めました。

    2)プログラムからの問題調査

    下記のプログラムを実行すると、await cam.spi_pingpongWait()関数でエラーになります。
    spi_pingpongWait()関数では、spiのtest register(0x00)へ0x55をwriteしてreadして正しいかどうかのテストをしています。
    この時readで0x55ではない値のため、throw new ERROR('spi bus error')となります。帰ってくるreadデータは、不定。
    直接原因は分かりました。

    <!-- 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, gnd:4, vcc:5, sda:6, scl:7 });
    await cam.spi_pingpongWait()
    }
    </script>
    </body>
    </html>

    3)ご指摘の通り、電源周りの問題がありようなので、ご指示通りおこなう。
    3-1) IO11をvccに接続。
    何度か、電源投入手順等変更しながらですが、一度成功しましたが、それ以外は失敗。

    3-2) Obnizのvcc/gndのスルーホールにピンを立て、そこからArduCamMiniへcvv/gnd供給をする。
    すべて失敗でした。

    現状での結論
    プログラムとしては問題はないと思います。(一度成功している)
    SPI接続のハード上の問題(漠然としていますが)

    これから
    Obniz + ArduCamMinの+5Vの供給は2Aあり電流計測では02A程度ですので容量的に問題ありません
    オシロスコープとか持っておりませんので、いろいろトライしてみますが、進捗は期待できません。

    原因推定の想定から知りたいことでは、
    spi通信も転送モードはあっているのか?(arducamminiはmode0)
    現象から、クロックとデータのマージンが少ない、あるいはgndレベルが上がっているとの想定です。

    確認していただきたいことがあれば指示いただければ、やってみたいとおもいますのでよろしくお願いします。

    石井@行田



  • お世話になります。
    問題がありましたので、ご確認上教えていただければ幸いです。
    下記に実行したプログラムとログです。
    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

    以上



  • @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の条件での動作が可能です。

    よろしくお願いします。



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



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

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

    石井@行田



  • @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)。
    できる範囲での確認ですが、取り急ぎご報告いたしました。

    石井@行田



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

    await this.isCaptureDoneWait()
    

    となっている部分ですが

    await cam.isCaptureDoneWait()
    

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

    ありがとうございます。



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

    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>



  • @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側で不具合があるということになります。
    申し訳ありませんが、一旦これでこの課題は終了とさせていただきたいと思います。
    大変ありがとうございました。
    また、なにかありましたらご相談させていただきます。

    石井@行田



SUGGESTED TOPICS