microSDへのwrite処理をバックグラウンドにできませんか

投稿者: Anonymous Arduinoで開発しています。 100Hz(10ms)でセンサデータ取得しRAMにため込み、10秒ごとに100KB程度のデータをmicroSDにwriteしています。 microSDの処理時間がクロック周波数156 MHzの時、20ms~40msでセンサの周期10msより長いため、microSDにwriteすると、センサ取得時間を逃してしまいます。 質問1.microSDへのwriteを高速化する方法はありませんか。 質問2.microSDへのWriteをノンブロッキング処理に変更する方法はありませんか。 質問3.内蔵FLASHの容量は8MBで間違いありませんか。 解決 質問1.microSDへのwriteを高速化する方法はありませんか。 質問2.microSDへのWriteをノンブロッキング処理に変更する方法はありませんか。 microSDへの書き込みを高速化する方法については知らないのですが、 Arduinoのloop処理だけでは実現できないと思うので、 どうすれば良いかちょっと方法を考えてみました。 マルチタスクで処理する マルチコアを使う (1) マルチタスク化 SPRESENSEのArduino環境は中にOSが搭載されているのでマルチタスクで動かすことができます。 task_create()関数でSD書き込み専用のタスクを作成します。 作成するタスクはsetup/loopよりも優先度を低くしておきます。 setup/loopが優先度100で動作しているので、優先度はそれよりも低い90で作成しておきます。 センサデータ用のRAMはA面/B面のダブルバッファを用意しておいて、 A面->B面->A面->… と順番にバッファリングするようにします。 A面のバッファが溜まった状態で、SD書き込み専用タスクへA面データの書き込み処理を依頼します。 A面をSDカードへ書き込みしている間は、センサーデータをB面に溜め続けます。 以下のようなイメージで並行動作させます。 センサデータ A面→B面→A面->… SDへ書き込み A面→B面->… ざっくりとした実装イメージは以下の通りです。 SDClass SD; File file; sem_t sem; // タスク間通信用セマフォ static int save_task(int argc, FAR char *argv[]) { while (1) { sem_wait(&sem); file.write(buf,…(Continue Reading)

void setup()が繰り返し実行される

投稿者: Anonymous 外部入力情報を検知しLTE通信にて通知する仕組みを制作してます。 void setup()にて初回に外部入力情報をLTE通信にて通知し、その後は外部入力の状態が変わった場合に 通知するようにしたいのですが、起動後数分経過(どれくらいの経過かは傾向を掴めてません)した後に 外部入力の状態が変わった場合に、void setup()の処理が実行されます。 void setup()はあくまでも電源ON時のみ実行としたいのですが、どうすればよいでしょうか? <開発環境> ・Arduino IDE <ソースコード> 暫く時間が経過した後にピンの状態を変化させると、void setup()が処理され、// 監視開始、初期通知送信 notify_process();にて初期通知がされます。void setup()の処理はあくまでも初回のみ実行とする方法があるのでしょうか? #include <ArduinoHttpClient.h> #include <SDHCI.h> #include <LTE.h> // APN data char lte_apn[50]; char lte_user_name[50]; char lte_password[50]; // LINE Token String notify_token; // URL, path & port (for example: httpbin.org) char server[] = “notify-api.line.me”; char postPath[] = “/api/notify”;…(Continue Reading)

spresenseのRAMの使用領域を拡大する方法はあるのでしょうか

投稿者: Anonymous お世話になります。 Arduino IDEを使ってspresenseのプログラムにチャレンジしています。 コンパイルした時に、spresenseのメインメモリは1.5MBのはずなのに、半分ほどしか使われていないことに気づきました。 デフォルト設定のようです。 また、プログラムが大きくなると動作不安定や書き込めないことが起こるようです。 せっかく1.5MBあるので、有効利用したいのですが、使用領域を変更する方法がわかりません。 プログラム書き込みの領域を変更する方法はあるのでしょうか?よろしくお願いいたします。 今後、spresenseがバージョンアップされて、メインメモリが大きくなればいいなと思います。 解決 Arduino IDEの場合、メモリエリアの半分を共有メモリと呼んで、 SubCoreなどに使うようになっているようです。 MulitiCoreのライブラリを使うことで、このエリアを使用るすることができます。 ここを参照すると良いようです。 https://developer.sony.com/develop/spresense/docs/arduino_developer_guide_ja.html#_mp_library MP.AllocSharedMemory() で共有メモリからメモリのエリアをとることができます。 ここに、画像や音声、センサデータや、AIのnnbなどのファイルを置くことで、 かなりのメモリを削減できるようなります。 ご参考になれば。 回答者: Anonymous

SPRESENSEを使った音声認識について

投稿者: Anonymous SPRESENSEに特定の音声が入力された場合にアプリケーションを動作させるようなものを作りたいと思っております。 開発ガイド11.3. Audio Subsystemを見ると、11.3.2. レイヤ構造についてのObject Level SDK APIにRecognition Objectというものを見つけました。 これを使用すると音声認識ができるのでしょうか? もしその場合、これを利用したサンプルプログラム等はございますでしょうか? 解決 ソニーのSPRESENSEサポート担当です。 お問い合わせの件についてお答えいたします。 現在のSpresense SDKでは、 Recognition Object は未対応になります。 今後のリリースで対応を予定しています。 今後ともSPRESENSEをどうぞよろしくお願いいたします。 SPRESENSEサポートチーム 回答者: Anonymous

$QZQSMのStringでの取得方法

投稿者: Anonymous Arduino IDEを用いてプログラミングにチャレンジしています。v1.4.1でサンプルプログラムにより、$QZQSMをシリアルモニターに表示することができました。あとはこれをプログラム上の変数に格納して、どんなメッセージなのかを判別しようとしたのですが、$QZQSMの文字列を取得する方法がわかりませんでした。サンプルプログラムの$QZQSMを出力する部分をString qzqsmに格納してみたのですが、78と出力されました。 どなたかシリアルモニターに表示される$QZQSMの文字列を変数に格納する方法を教えていただけませんでしょうか。可能でしたら、下記の表示例の9AA・・・A24を格納したいです。 表示例 $QZQSM,56,9AADF53C5680050C8AA1F5543ED2880C51022A2EF554E22AA0000012335EA24*7D よろしくお願いいたします。 解決 いきなり答えを書いてしまうようで恐縮ですが、 $QZQSMのメッセージ部をデコードするための自作ライブラリと サンプルスケッチを公開している方がいらっしゃいます。 こちらが参考になるかと思いますのでご紹介しておきます。 みちびき災危通報をデコードしてみる https://qiita.com/baggio/items/497b654cd4ec1bfd74fc 回答者: Anonymous

nuttX、Linuxでのシリアル通信の作法について

投稿者: Anonymous spresense SDK(nuttX)にて、ESP8266とシリアル通信する事でwifiに接続しようとしています。 spresenseとESP8266の間の結線には問題なく、見様見真似でやってみた通信の結果、 ttyS2(spresense側のUARTポート)に対して送出した”AT”に対して、”OK”と返答が返ってくる事は確認済みです。 見様見真似とは、以下の様なコードです。 main() { fd = open(“/dev/ttyS2”, O_RDWR); if (fd < 0) { printf(“%s open error.n”, “/dev/ttyS2″); } write_serial(fd); read_serial(fd); …省略 } write_serial(int fd) { char buffer[30]; memset(buffer,0,sizeof(buffer)); sprintf(buffer,”%srn”,”AT”); write(fd,buffer,sizeof(buffer)); printf(“[write_serial]wrote = %sn”, buffer); } void read_serial(int fd) { char buffer[30]; int len; len = read(fd,&buffer,16); if(len > 0) {…(Continue Reading)

SPRESENSE SDKで 自作ライブラリの作成方法について教えてください

投稿者: Anonymous タイトル通りです。 ■ 環境 ・OS Ubuntu:18.04 ・ツール VSCODE SPRESENSE SDK ■ 状況 VSCODE上でSPRESENS SDKによるプログラミングを楽しんでいますが、 自作した複数アプリケーションで共通で使うライブラリはどのようにしたら使用可能なのでしょうか。 ワークスペース上でフォルダを作成"myDriver"などにライブラリファイルを格納 各アプリケーションからライブラリをインクルードすると、インクルードエラーが出てしまいます。 色々試してみたのですが、上手く行かないので質問させて頂きました。 どなたかご存じの方がいらっしゃれば、ご教授のほどお願いいたします。 解決 過去のスタックオーバーフローの投稿で、既に参照されているかもしれませんが… Spresense SDKに、Static Library (.a)を追加する方法は static library を externals 以下で作成するという方法です。 SDK2.0 から LibTarget.mk -> Library.mk へと若干構成が変わってそうですが、 参考になったりしないでしょうか。 回答者: Anonymous

SPRESENSEのSCUイベント検出機能について

投稿者: Anonymous SPRESENSE開発ガイド、11.8.5. センサーデータへの信号処理に記載されているSCUのイベント検出機能を使用したプログラムを作りたいと考えております。 SDKにシーケンサFIFOを使用したサンプルがあるのを見つけたのですが、イベント検出を使用したサンプルはございますでしょうか? 解決 ソニーのSPRESENSEサポート担当です。 Spresense SDKではBosch Sensortec製のBMI160センサを使用した tiltというサンプルを提供しています。 BMI160についてはこちらが利用可能です。 https://www.switch-science.com/catalog/5258/ SCUイベント検出機能を使って基板の傾きを検出しています。 本サンプルの動作確認方法について簡単にご説明します。 ■コンフィギュレーションファイル作成 Cloneしたリポジトリにて sdk/configs/examples/tilt-defconfig ファイルを作成して以下の内容を記述します。 CONFIG_CXD56_I2C0=y CONFIG_SENSORS=y CONFIG_BMI160=y CONFIG_BMI160_I2C=y CONFIG_EXAMPLES_TILT=y ■コンフィギュレーションとビルド方法 $ cd sdk $ ./tools/config.py examples/tilt $ make ■動作 このプログラムをロードして tilt アプリケーションを起動してください。 基板を傾けると次のように Tilt detected というログが表示されます。 基板の傾きを元に戻してからまた傾けると繰り返し検出を行います。 NuttShell (NSH) NuttX-7.22 nsh> tilt Sensing start… Tilt detected! (Rise) 3 Tilt detected!…(Continue Reading)

spresense Serial2 制御

投稿者: Anonymous 現在使用しているバージョンは1.3.1です。 ・Arduino IDE(VSCode)を使用。 ハードウェアドキュメントを参照しますと、拡張ボード側のUARTは調歩同期式で、メインボードと拡張ボードを組み合わせた場合は、出荷時には自動的に拡張ボードのUARTが使用できる設定となっています。 拡張ボード側のUARTが有効な場合、メインボードのUARTをGPIOとして設定した場合には、D27, D28のみ使用可能です。と記載されています。 UARTの設定等は特に操作していませんので、出荷状態の拡張ボードのUARTが使用できる設定になっていると思います。 D27,D28を入力に設定してプルアップしているのですが、この状態ですとSerial2から何も送信されません。フロー制御が無効になっていないような感じなのですが、D27,D28を使用するには、pinModeの他に何か特別な設定等必要なのでしょうか。 解決 ソニーのSPRESENSEサポート担当です。 お問い合わせいただきましたUART2使用時のピンのモードですが、 ホームページ上のハードウェアドキュメントに誤りがございました。 現在は訂正が済んでおりますので、下記の回答と併せて以下のページをご参照ください。 https://developer.sony.com/develop/spresense/docs/hw_docs_ja.html#_uartの使用方法 UART2をシリアルポートとして使用する場合には、UART2_TX, UART2_RX, UART2_RTS, UART2_CTS の4ピンはまとめてフロー制御付きのシリアルポート動作となりますので、 UART2_RTS, UART2_CTSの2ピンを独立してGPIOとして使用することはできません。 ご迷惑をお掛けしてしまい申し訳ございません。 今後ともSPRESENSEをどうぞよろしくお願いいたします。 SPRESENSEサポートチーム 回答者: Anonymous

Spresense v.1.3.1における[Multicore MP]->[AudioFFT]動作時にSDカードを挿入しているとAssertにて停止してしまう

投稿者: Anonymous Spresenseのファームウェアバージョンv.1.3.1において、サンプルスケッチ[Multicore MP]->[AudioFFT]にある[MainAudio]をメインコア、[SubFFT]をサブコア1に書き込み、デジタルマイクを使用するように以下のように書き換え、 // 「変更前」 //theAudio->setRecorderMode(AS_SETRECDR_STS_INPUTDEVICE_MIC, 210); // 「変更後」 theAudio->setRecorderMode(AS_SETRECDR_STS_INPUTDEVICE_MIC,-7700,SIMPLE_FIFO_BUF_SIZE,true); また、コーデックディレクトリをSPI-FLASHに入れているので以下のように修正 // 「変更前」 //theAudio->initRecorder(AS_CODECTYPE_WAV, “/mnt/sd0/BIN”, AS_SAMPLINGRATE_48000, channel); // 「変更後」 theAudio->initRecorder(AS_CODECTYPE_WAV, “/mnt/spif/BIN”, AS_SAMPLINGRATE_48000, channel); デジタルマイクを接続時、シリアルモニタを立ち上げると、SDカードを挿入していない場合は問題なく動作しますが、SDカードが挿入されていると動作の途中で以下のようなAssertで動作が停止してしまいます。 16:57:17.367 -> Init Audio Library 16:57:17.367 -> Init Audio Recorder 16:57:17.569 -> Rec start! 16:57:17.603 -> 24000 23.460 0.000 0.000 0.000 16:57:17.603 -> 24000 23.460 0.000 0.000 0.000 16:57:17.637 ->…(Continue Reading)

spresenseカメラの解像度の有効な設定について

投稿者: Anonymous 仕様書によると5Mのカメラモジュールを使っているはずなのですが、下記の質問では、「CAM_IMGSIZE_5Mは利用できない」、ということが書いてありました。 Spresense CAM_IMGSIZEについて しかし、私の環境では、CAM_IMGSIZE_5Mだけでなく、CAM_IMGSIZE_FULLHD_H(V) を指定しても、img.isAvailable()で失敗します。 CAM_IMGSIZE_QUADVGAでは撮影ができます。 他にも数多くの解像度が定義されているのですが、オプションのカメラモジュールでは、どの解像度だと利用可能でしょうか。 解決 setStillPictureImageFormat()にCAM_IMGSIZE_FULLHD_H,Vを指定した時点でメモリ不足のエラーが返ってきます。 JPEGを保存するためのメモリが確保できていないようなので、ライブラリの中をみてみました。Camera.cppの ImgBuff::calc_img_size()でバッファサイズが決められていて size_t ImgBuff::calc_img_size(int w, int h, CAM_IMAGE_PIX_FMT fmt) { … case CAM_IMAGE_PIX_FMT_JPG: // In SPRESENSE SDK, JPEG compression quality=80 by default. // In such setting, the maximum actual measured size of JPEG image // is about width * height * 2 / 9.…(Continue Reading)

GitHubからSpresense SDKを取得したが、dnnrt_hand_signが含まれていない

投稿者: Anonymous 初心者で申し訳ありませんが、どなたか助けていただけると幸いです。 雑誌「Interface2019年1月号」を見ながらSpresenseでhand sign認識を進めており、GitHubからSpresense SDKを取得したがdnnrt_hand_signがありません。ファイルは一体どこにあるのでしょうか。 GitHubのSpresense SDKをダウンロードしたリンクです。 https://github.com/sonydevworld/spresense examplesフォルダの中にdnnrt_hand_signファイルがあるとInterface誌には記載されていました。 解決 まったく同じものかどうかはわかりませんが、次のリンクにスケッチが丸ごとありました。 https://github.com/takayoshi-k/algyan_spresense_ai_hands_on/releases/download/tmp_version/rps_sample.zip LCDのドライバなどもありますので、そのまま動かせると思います。 この資料は、ここから引っ張ってきました。 https://algyan.connpass.com/event/128666/ ニューラルネットワークコンソールの資料もあるので、参考になると思います。 回答者: Anonymous

ArduinoIDE環境でライブラリ使用時の未使用関数等の削除について

投稿者: Anonymous Spresense を ArduinoIDE で使用しています。 未使用関数等が多いライブラリを使用時のプログラムサイズ削減の方法について質問します。 U8g2 などの未使用のフォントデータ等が多いライブラリを使用する際、プログラムサイズを超過することがありました。そのため、コンパイル・リンカオプションで未使用関数等の削除を行うよう設定したところ、実行時に異常終了してしまいます。ライブラリを使用しないシリアル出力だけのコードでも異常終了するため、オプションでの削除は不可能のようです。 ライブラリから必要なコードだけ抜き出して使用する以外で、なにか解決方法はありませんでしょうか? ◆”platform.txt” 変更内容 compiler.c.flags : -ffunction-sections -fdata-sections を追加 compiler.cpp.flags : -ffunction-sections -fdata-sections を追加 compiler.c.elf.flags : -Wl,–gc-sections を追加 ◆サンプルコード #include <U8g2lib.h> //あってもなくても異常終了する void setup() { Serial.begin(115200); Serial.println(“START”); } void loop() { } 解決 改めて gc-sections オプションが使えない理由を調べてみました。 ◆”platform.txt” 変更内容 compiler.c.flags : -ffunction-sections -fdata-sections を追加 compiler.cpp.flags : -ffunction-sections -fdata-sections…(Continue Reading)

Spresense-Arduinoにおけるイーサネットモジュールの使用について

投稿者: Anonymous Spresense-ArduinoにおいてイーサネットモジュールWIZ812MJをSPI接続し、イーサネット接続をしようとしていますが、SpresenseにおいてはArduino用のEthernetスケッチサンプルでも動作ができません(イーサネットモジュールが見つからないとエラーになる) SpresenseでイーサネットモジュールWIZ812MJもしくは他の方法でイーサネット接続する方法をご教授いただけないでしょうか よろしくお願いいたします。 ※参考URL:WIZ812MJ https://strawberry-linux.com/catalog/items?code=36003 ※追記※ Yoshino Taroさんご回答ありがとうございます。 ご提案いただいた(1)〜(3)を試しましたがダメでした。 以下に現在の配線とスケッチを示しますのでおかしいところがあればご指摘いただけませんでしょうか。 WebServer.ino /* Web Server A simple web server that shows the value of the analog input pins. using an Arduino Wiznet Ethernet shield. Circuit: * Ethernet shield attached to pins 10, 11, 12, 13 * Analog inputs attached to pins A0 through A5…(Continue Reading)

Spresense SDKに、Static Library (.a)を追加する方法は

投稿者: Anonymous 元はCで書かれた、Static Library (.a)とヘッダーファイルがあり、 これをSpresense SDKで使いたいです どうすれば良いでしょうか? ■(例) Static Library (.a)とヘッダーファイル header_file1.h header_file2.h : header_file5.h myStatic_lib.a   ※ Cortex-M4 hard_float Spresense SDKに追加する場所は、  hellow_worldサンプル内に追加、  Nuttx側のどこか  または、その他 かと思っております Makefileを編集する力があればできるのかも。。 hello ┝ .built ┝ .depend ┝ hello_main.c ┝ hello_main.o ┝ make.deps ┝ make.dep ┗ Makefile ■make.depファイル hello_main.o: hello_main.c /Users/username/spresense/sdk/bsp/include/sdk/config.h  : /Users/username/spresense/nuttx/include/nuttx/addrenv.h インクルードファイルはこのあたりに追加? ■Makefile -include $(TOPDIR)/Make.defs -include $(SDKDIR)/Make.defs CONFIG_HELLO_PRIORITY ?=…(Continue Reading)

Bluetooth®LE Add-onボード SPRESENSE-BLE-EVK-701を用いたBluetooth接続について

投稿者: Anonymous BLEボードと、スマホアプリのBLEToolを使ってSPRESENSEとスマホをBluetooth接続したいのですが、”Connected succesfully”というメッセージが出ません。(要は接続ができない。”waiting for connection”のメッセージまでは出るのですが…) 問題なのが、メインボード単体にBLEボードを繋げた状態でトライするとBluetooth接続ができるのですが、メインボードに拡張ボードを繋げ、メインボードとBLEボードを繋げた状態でトライすると、Bluetooth接続ができなくなります。 メインボード単体では接続できるのでBLEボードのピンをメインボードに差し込む位置や、プログラミングの方に問題があるとは考えてはいないのですが、何か原因が分かる方がいましたら、ご教授お願い致します。 解決 拡張ボードを差した状態でメインボード側のUART2端子(BLEボード)を使用する場合は、 拡張ボードにあるジャンパJP10(UART SWと書かれているやつ)をショートする必要があります。 ドキュメントだと、ここら辺に書かれています。 https://developer.sony.com/develop/spresense/docs/introduction_ja.html#_spresense_拡張ボード https://developer.sony.com/develop/spresense/docs/hw_docs_ja.html#_uartの使用方法 自分も同じ悩みに遭遇したことがあり、ジャンパを接続すればあっさり動きました。 回答者: Anonymous

SPI通信に関する初歩的な質問

投稿者: Anonymous spresenseに関する初歩的な質問です。拡張ボードを使ってSPI通信する確認を行っています。 menuconfigでSPIを有効にしました。 CXD56xx Configuration —> [*] SPI [*] SPI4 nshで/devを確認したところ特に変化は見られなかったのですが、SPI4を使用する準備はこれ以外に何か必要なのでしょうか? 解決 NuttX の Driver Model では、一般的に i2c, spi のような bus driver をそのまま “/dev” に出すのではなく、実際に SPI 通信を使用する「物理センサーデバイス」側のドライバで、”/dev/センサ” という /devインタフェースを作成します。 具体例として、SPI を使った3軸ジャイロセンサ L3GD20 のドライバがこちらにあります。 https://github.com/sonydevworld/spresense-nuttx/blob/master/drivers/sensors/l3gd20.c int l3gd20_register(FAR const char *devpath, FAR struct spi_dev_s *spi, FAR struct l3gd20_config_s *config) このドライバの登録関数が “devpath” で渡された /dev を作成して、 open, close,…(Continue Reading)

Spresenseで高解像度RBG画像データを取得する方法

投稿者: Anonymous SpresenseでSpresenseカメラから1枚の高解像度RBG画像データを取得し、その後に画像処理を行うことが目的です。 「Spresense Arduino Library 開発ガイド」にて 3.2. Camera ライブラリ 第一、第二引数で画像の縦横サイズを指定します。第三引数で画像のピクセルフォーマットを指定します。 現在、画像のピクセルフォーマットはJPEGのみサポートしています。 3.2.6. 取得した画像を変換する。 convertPixformat()は、YUV422からRGB、YUV422からGLAY、の2つのみ対応しています。 つまり、Arduino Libraryでは高解像度RBG画像データは取得できない、と理解しました。 Spresense SDKを使うとできるのでしょうか? サンプルコード参照場所を知りたいです。 解決 Spresense SDKでcameraのサンプルはexamples/cameraにありますが、 このサンプルだと、STILL_CAMTURE場合の設定はJPEGになってますね。 551行目あたりのcamera_prepare()というスタティック関数でフォーマットを指定しているので、これをV4L2_PIX_FMT_RGB565に変更すれば行けるかもしれません。 ただ、そもそもメモリが足りなそうです。 フルHDでさえ1920*1080*2(Byte)=約4MByteなので、Spresenseのメモリサイズ1.5MByteを超えてます。 やりようとしては、 JPEGデコードのライブラリ(libjpegのようです)とサンプル:examples/jpeg_decodeがあるので、 JPEGで高精細で取って、保存しつつ、libjpegでライン毎にデコードして表示したり加工したりする、 というところでしょうか。 https://developer.sony.com/develop/spresense/docs/sdk_developer_guide_ja.html#_jpeg_decoder 参考になれば幸いです。 回答者: Anonymous

HTTPS での POST 送信時、稀に応答なしで処理がフリーズしてしまう

投稿者: Anonymous HTTPS POST送信した際、ごく稀に応答がなく、そのまま処理がフリーズしてしまいます。 タイムアウト等フリーズを回避する方法はありますでしょうか? <開発環境等> ・spresense本体+spresense lte拡張ボード ・Arduino IDE 下記コードの client.post(postPath, contentType, postData); 個所でごく稀に応答なしになります。 void send_notify(String message) { // LTE接続開始 while (true) { if (lteAccess.begin() == LTE_SEARCHING) { if (lteAccess.attach(lte_apn, lte_user_name, lte_password) == LTE_READY) { print_wrap(1,”lte attach succeeded”,0); break; } print_wrap(1,”lte An error occurred, shutdown and try again.”,0); lteAccess.shutdown(); sleep(1); } } // 送信データ準備…(Continue Reading)

Macでのspresense SDKセットアップ

投稿者: Anonymous macOS向けセットアップの3番で bash install-tools.sh を実行すると command not foundが表示され、進みません。 どうしたらいいでしょうか? 解決 ここから引用 https://qiita.com/nara256/items/faa639e9ac8083977a66 チュートリアルに書かれているURLが間違っているみたいです。正しくは↓ $ curl -L https://raw.githubusercontent.com/sonydevworld/spresense/master/install-tools.sh > install-tools.sh $ bash install-tools.sh 回答者: Anonymous

Spresense SDK + Visual Studio Code でASMPのサブコアのELFファイルがインストールされない

投稿者: user31739 Visual Studio Codeを使ったIDE版開発環境にて 「ASMPワーカープログラムを追加し、ビルド、実行した際に、task生成に失敗します」 。原因を探ろうとしているのですが、同現象の方、もしくは修正箇所ご存じの方いらっしゃいましたら、 お知恵をお借りしたく、よろしくお願いいたします。 ▼原因 おそらく、サブコア用(ワーカー)のelfファイルがメインコアで指定している /mnt/spif/ 以下に存在しないためのように思えます。Makefile周りが原因のように考えておりますが、テンプレートから生成されるMakefileのどこかに追記や変更などが必要でしょうか? ▼実行した手順 4.4. ASMPワーカープログラムの追加 の通りです。 https://developer.sony.com/develop/spresense/docs/sdk_set_up_ide_ja.html#_asmp%E3%83%AF%E3%83%BC%E3%82%AB%E3%83%BC%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%AE%E8%BF%BD%E5%8A%A0 ▼環境 Spresense Sdk + Visual Studio Code(2019/09/24版)となります。 よろしくお願いいたします。 解決 ソニーのSPRESENSEサポート担当です。 ご質問のASMPワーカープログラムのロードについて回答致します。 ご記載いただいたプログラムのログを見る限り、ご推測の通りASMPワーカーのELFファイルが存在しないことが原因です。 ELFファイルが存在しない理由としては、ELFを保存する /mnt/spif に空き容量が不足していることが考えられます。 以下の手順で /mnt/spif の空き容量を確認してください。 ターミナルを開く df -h コマンドを実行する NuttShell (NSH) NuttX-7.22 nsh> df -h Filesystem Size Used Available Mounted on smartfs 4M 428K 3668K…(Continue Reading)

spresenseのFFTスケッチについて

投稿者: Anonymous spresenseのMultiCore MPライブラリ内のサンプルスケッチ「AudioFFT」についてですがピーク周波数とは具体的にどういったものでしょうか。またシリアルプロッタに表示される線が基準の青線+4本の計5本なのはなぜでしょうか。初歩的な質問で申し訳ありませんがよろしくお願いします。 解決 マイクから入力された音をFFTで周波数成分に分解したときにパワーが最大となる周波数のことですね。 参考) 例えば10kHzのsin波+ランダムノイズのデータにFFTをかけて周波数成分でみると10kHzのところにピークが現れます https://www.keil.com/pack/doc/CMSIS/DSP/html/group__FrequencyBin.html プロットが5本あるのはマニュアルに「MainCore で Audio ライブラリを使ってPCM 4chデータをキャプチャし SubCore へ渡します。」とあるので、マイクから4チャンネル分を入力しているからだと思います。SubFFT.inoのコードもそうなっています。 printf(“24000 %8.3f %8.3f %8.3f %8.3fn”, peakFs[0], peakFs[1], peakFs[2], peakFs[3]); 一つは24000を固定で表示されていますが、48kHzサンプリングのPCMデータを入力しているのでナイキスト周波数の24kHz(上限)を表示しているのでしょう。 【追記】 MainAudio.inoを書き換えることで1chの表示(他のchは0固定表示)もできました。 /* Select mic channel number */ const int mic_channel_num = 1; //const int mic_channel_num = 2; //const int mic_channel_num = 4; 回答者: Anonymous

アナログマイク使用時の抵抗値について

投稿者: Anonymous アナログマイクを接続して使用しています。ハードウェアドキュメントではRLとして 2.2kΩの抵抗を指定していますが、この抵抗値は使用するECMに応じて変えるものなのでしょうか。RLが2.2kΩではない(2.0kΩとか、さらに小さいものとか)ECMが手元にあるのですが、こういったECMを使うときはどうすべきでしょうか。あるいはRLが2.2kΩのECMを使うべき、なのでしょうか。 (ちなみに抵抗は表面実装ではなく金属皮膜抵抗を使っています) 解決 エレクトレットコンデンサマイク (ECM) の原理っつかメーカーカタログ仕様上、加えるべき電源電圧ってのは決まっています。この「マイクの電源」は spresense のマイコン出力から取る回路となっていて、そのため spresense を使う限りにおいては約 1.8V から変更できないということになります。 ある仕様一覧によると https://www.marutsu.co.jp/contents/shop/marutsu/datasheet/KUC3523.pdf マイクの仕様として (spresense の仕様でなく) RL と 電源電圧が1対1で決まっている様子。 – RL=2.2KΩ なマイクは電源 2.0V – RL=1.0KΩ なマイクは電源 4.5V よって教科書的答えとしては「 2.0V 電源マイクを使おう」(すると必然的に RL=2.2KΩ にならざるを得ない) アマチュアのお楽しみとしては「 RL=1.0KΩ つまり 4.5V 電源マイクに 2.0V 電源を供給して使うとどうなるか試してみよう」ってことになりそうです。 RL=2.0KΩ なマイクが手元にあるなら、それの型名から仕様書を調べて電源電圧を確認してみましょう。 2.0V 前後の電源電圧が指定されているのなら 2.0KΩ 抵抗をくっつけて動くでしょう。それ以外の電源電圧ならつないで試してどうなるか報告してね、ってことになりそうです。 RL 専用ランドが用意されているのを使うのであれば表面実装チップ抵抗を使っちゃうのが面倒ないでしょうけど、別にリードタイプを使っても問題ないっすよ。 回答者: Anonymous

LTE通信でHTTPにてLINEへ通知時に稀にエラーになってフリーズする

投稿者: Anonymous デジタルピン入力の状態(ON/OFF)を定期的にLINE通知したいのですが、数百回に一回程度の確率で稀にエラーになってフリーズし、その後動作しなくなってしまいます。 対策を教えてください。 開発環境等 ・spresense本体+spresense lte拡張ボード ・Arduino IDE コード(一部) void send(String message) { const char* host = “notify-api.line.me”; const char* token = “XXX”; LTETLSClient tlsClient; // SDカードから証明書ファイルを読み込む File rootCertsFile = theSD.open(ROOTCA_FILE, FILE_READ); tlsClient.setCACert(rootCertsFile, rootCertsFile.available()); rootCertsFile.close(); HttpClient client = HttpClient(tlsClient, server, port); LTE lteAccess; // LTE接続開始 while (true) { if (lteAccess.begin() == LTE_SEARCHING) { if…(Continue Reading)

MediaRecorderObjectのサンプル

投稿者: Anonymous MediaRecorderObjectを利用したサンプルが公開される予定はありますか? MediaPlayerObjectに関しては、Arduinoにサンプルがあると思うのですが、 MediaRecorderObjectも同じようにサンプルが公開されるでしょうか? 解決 ソニーのSPRESENSEサポート担当です。 十分なサンプルが準備できず、誠に申し訳ありません。 最新のライブラリ version 1.1.0 に、MediaRecoderObjectのサンプルコードを追加いたしました。 ライブラリのアップデートは、Arduino IDE の「ボードマネージャ」で行ってください。 アップデート後、Arduino IDE のメニューの 「ファイル」→「スケッチ例」->「Spresense用スケッチ例:Audio」->「application」 を開いていただくと、 recorder_objif recorder_wav_objif という2つのサンプルコードが追加されています。 これらが MediaRecorderObject のサンプルになります。 ご利用の際は、お手数ですがブートローダを更新していただく必要があります。 ご注意ください。 どうぞよろしくお願いいたします。 回答者: Anonymous

Sony Spresenseでmbed OSを動かすことはできますか?

投稿者: Anonymous Sony SpresenseでMbed OSを動かすことはできますか? また、今後開発ツールとしてMbedに対応するようなことはありますでしょうか? 解決 ソニーのSPRESENSEサポート担当です。 お問い合わせの件について、回答させていただきます。 残念ながら、mbedOS 対応は今のところは予定がありません。 市場の状況を見ながら、今後判断をさせていただきたいと思っています。 今後ともSpresenseをどうぞよろしくお願いします。 回答者: Anonymous

MainCore使用メモリサイズを768KBより大きいメモリサイズに設定するとエラーが出る

投稿者: Anonymous Spresense Arduino v2.0.0にて、メインコアアプリケーションが使用するメモリサイズをArduino IDEメニューから変更できるようになる拡張機能が追加されていました。実際に動作確認を行ってみましたが、768KBより大きいメモリサイズを指定するとエラーが発生します。以下実際の実行手順です。 1.「ツール」→「ボード」→「ボードマネージャ」  ”Spresense Reference Board”のバージョンを2.0.0に更新。      2.「ツール」→「ボード」    ”Spresense”を選択  「ツール」→「書き込み装置」 ”Spresense Firmware Updater”を選択                 ブートローダの書き込み実行。     3.Lチカサンプルを書き込み。 void setup() { pinMode(LED0, OUTPUT); pinMode(LED1, OUTPUT); pinMode(LED2, OUTPUT); pinMode(LED3, OUTPUT); } void loop() { digitalWrite(LED0, HIGH); delay(100); digitalWrite(LED1, HIGH); delay(100); digitalWrite(LED2, HIGH); delay(100); digitalWrite(LED3, HIGH); delay(1000); digitalWrite(LED0, LOW); delay(100); digitalWrite(LED1, LOW); delay(100); digitalWrite(LED2, LOW);…(Continue Reading)

FIFOがオーバーフローしたときの処理

投稿者: Anonymous Arduino環境において、SimpleFIFOでオーバフロー(AS_ATTENTION_SUB_CODE_SIMPLE_FIFO_OVERFLOW) が発生すると、以降 readFrames()を呼んでも読み込みサイズが0のままとなります。 一旦オーバフローが発生するとFIFOからデータを取り出すことはできなくなるのでしょうか? 解決 ソニーのSPRESENSEサポート担当です。 お問い合わせの件について、回答いたします。 FIFOがオーバーフローしたとき、録音処理が停止するため、FIFOからデータの読み出しができなくなります。 以下の手順を行うことで、録音を再開することができます。 “theRecorder->stop();” で、録音処理を終了 “theRecorder->start();” で、録音処理を開始 アンダーフローの場合も同様の処理で復帰させることができます。 どうぞ、よろしくお願いいたします。 回答者: Anonymous

Eclipse CDT+Spresense SDKでデバッグする際に、必要な機材と設定

投稿者: user31739 Ubuntu16.04LTS上の、Spresense SDKとEclipse CDTを使い、デバッグと考えています。接続するためのハードウェアの選定と設定にて困っています。 --- ▼1:CMSIS-DAPを使うためのハードウェア CMSIS-DAPを利用する場合、CN1の先の参考ハードウェア構成を教えていただけたら嬉しいです。半田不良も心配なので、実績のある機材で試したいと考えいます。 --- ▼2:j-link EDU miniで接続できない(?) デバッグ用のプローブとして、j-Link EDU miniを購入してみました。spresense-opencdをダウンロードし、接続しようと試みましたが失敗しているように見えます。お時間のある時にアドバイス頂けたら嬉しいです。 〇 UARTは以下のようにデバッグモードに入っているようです。 Welcome to minicom 2.7 OPTIONS: I18n Compiled on Nov 15 2018, 20:18:47. Port /dev/ttyUSB0, 08:41:22 Press CTRL-A Z for help on special keys Waiting for debugger connection.. 〇 J-Linkのコンソール出力 $ cd ~/spresense-openocd/tcl $ ls interface/jlink.cfg interface/jlink.cfg $ ls…(Continue Reading)

Spresense SDKで、ローダブルELFがチュートリアル通りに動作しない。

投稿者: Anonymous Spresense SDK チュートリアルの、[17. ローダブルELFチュートリアル] の通りに ローダブルELF を作成しましたが、作成した nuttx.spk をSpresenseに書き込むと Reboot後、直ぐコアダンプとなります。(helloファイルもSDカードへ入れています) チュートリアル通りに、nuttx.spk ファイル、ELFファイル hello も作成され ビルドエラーもありません。何か足りない作業があるのでしょうか? 誰か成功した方がいましたら、注意点などを教えて頂けないでしょうか? 他のサンプルは問題なく動作します。 Windows10, SDK2.0.1, NUTTX8.2 の環境で VSCode1.50.0のターミナル(bash)より作成しました。 追加情報として SDK のコンフィグレーション時に feature/loadable を入れてビルドした nuttx.spk はコアダンプするみたいです。 loadable なしの場合: tools/config.py device/sdcard examples/hello NuttShell (NSH) NuttX-8.2 nsh> loadable を入れた場合: tools/config.py feature/loadable device/sdcard examples/hello 00013620: up_hardfault: PANIC!!! Hard fault: 40000000 up_assert: Assertion failed…(Continue Reading)