2023年4月24日月曜日

USBラジオ

3年ほど前に作ったものなのですが、今回アップデートしました。
AndroidスマホのUSBコネクタに差し込んで、スマホアプリから音を鳴らすFMラジオです。

(技術的な細かいことはあまり書けないのですが・・)
今回は以前開発した円形チューナー基板をスマホに直接刺しても動作するよう、そしてAndroid最新版への対応でした。 

このスマホに差し込んでいる円形基板がチューナー基板です。あえて部品の少ない裏側が見えるようにしてますが、表側には部品がぎっしり。もう配線パターン増やすのもつらい状況です


基板設計は弊社ハードウェア担当者
基板上で動かすソフトウェア(ファームウェア)とAndroidアプリも私。

簡単そうに見えるのですが、実は超悪戦苦闘したもので開発の工数的には大赤字💦

でも完成したらとてもうれしくて感慨深いものとなりました。
 

チューナーチップから取り出した音データをI2Sでマイコンに取り込み、USBのIsochronous通信でスマホに送り込む。
スマホアプリはタイミングを計りながらUSBから音データを取り込み、スマホの音声出力モジュールに音データを送り込む。

言えばこれだけ。。でもこれがとても難しく、自分でもよく動くところまで持っていけたなという感じで、途中何度も泣きそうになりました。

オシロスコープで波形を確認しながらソフトウェア開発、このためにスマホアプリもオシロでタイミング見ながらデバッグする手法を使いした(詳細は以前のブログで記載済み)。


その成果として、当然ながらアプリはバックグラウンド再生対応でき、他のアプリをいじりながらFMラジオを聞くことができます。当然Bluetoothイヤホンでも聞くことできます。

実はAMラジオも受信対応しているのですが、アンテナが巨大になるので基板上に実装してません。

 

さすがに同じ製品は依頼主様を裏切ることになるので作ってあげることはできませんが、I2S通信、USBのIsochronous通信、AndroidスマホのC++によるUSBデータ取り込み(Javaでは追いつかない)~音声部取り込みなど実際に開発できると思います。

ということで、こんな感じのものなど、いろいろなご依頼お待ちしております笑

#I2S
#USB
#Isochronous通信

2023年1月13日金曜日

本年もよろしくお願いいたします。

2023年、本年もどうぞよろしくお願いいたします(今更感・・)

昨年はCOCONALAさん、ClowdWorksさんなどのプロフィールからこちらにたどり着いた方とたくさんのやりとりを行い、実際に開発依頼をいただきました。

・Xamarinにて開発したAndroid&iOSアプリでのDBサーバーアクセス

・CAN通信のシミュレータ

・I2C制御による電圧制御基板開発&制御用ファームウェア&Windowsアプリ

・ESP32でのAD変換取り込み&WindowsPCでのログ収集(Bluetooth経由)

・AndroidスマホのUSBコネクタに接続するFMラジオチューナー基板作成


たまに半田ごてと虫眼鏡を握りながら、オシロスコープで波形見てデバッガをいじり、ソースコードを構築していく・・これが自分の得意なスタイル。

そしてこれくらい簡単にできるぞと思って開発スタートしても、毎回何かのトラブルで悩まされます。

そのたびにどう対応したら良いかすごく悩み、たくさんの試行錯誤を行うけど、これも開発の楽しいところ。

そして一度依頼いただいたら最後までしっかり責任もって仕上げることが自分の責任。

今年もまた新しい方と出会い、依頼いただいた開発案件では冷や汗かきながらなんとか納品する・・こんなことができる楽しい一年になるようがんばります。

ご依頼お待ちしております(笑)


写真は2022年7月 夫婦で乗鞍岳(標高2700m)を登ったときのワンシーン。
自転車で坂登るのが楽しんどすぎて最高の2日間。
妻も押し歩きすることなく最後まで登ってくれました。今年も行ったことない坂を登りたいです。



2021年11月25日木曜日

連絡先について

最近Lan〇ers様、クラウ〇ワークス様などに登録してみました。
得意分野は組み込みのため、少し応募してみるくらいでまったく実績はありません。

しかしながら、少し興味を持っていただけることもあるようです。
自社Webページも作ってない弱小企業のままなのですが、本当にありがたいことです。

まずは下記から連絡いただけたらうれしいです。
迷惑メール対策として、まずはフリーメールにしております。
ここから正式メールアドレスを使って返信させていただきます。

 info.maxport.anami @ gmail .com
 maxport.anami @ hotmail .com

 ※ あえて挿入している途中のスペースは詰めてください。


2021年10月5日火曜日

Androidアプリでのタイミング調査

 Androidアプリを開発する際、タイミングが気になるときありませんか?
このAPIは本当に10mS周期で呼ばれているのだろうか・・など。

マイコンなら空いたIOポートにHIGH/LOW出力を組み込み、オシロスコープで確認すれば簡単。ではAndroidでは ・・ ???


Raspberry PI4でAndroid11が動くというOmniROMの存在を知りました。

このような方たちが試してくれています。

 https://paiza.hatenablog.com/entry/2020/11/25/150000


ラズパイ上でAndroidが動くなら、ラズパイ上のGPIOが使えるじゃないか!
でもAndroidアプリ(Java)でラズパイのGPIOを動かせるのか??

私はCでGPIO制御を作り、JNIを使ってJavaから呼び出すことで、JavaアプリでAPI呼び出しタイミングをオシロスコープで確認することに成功しました。

以下のコードをAndroidプロジェクト内のJNIに追加します。

(JavaからのJNI呼び出しは各自設定してください)。


またAndroidのJavaプログラムから下記関数をJNI経由で呼び出すことで、ラズパイのGPIOが動くのです。
Androidアプリを構築される方はオシロを使ってタイミングを確認したりしないのかな?

ミリ秒周期の動作確認する場合、GPIO端子をHigh/Low切り替えてオシロで見るほうが確実ですよ(こんなことしたいなんて思ったことないですか??)。


※ gpiod.hは libgpiodのものを呼び出します。

// ======================================
//          GPIO
// ======================================
#include "gpiod.h"
const char *chipname = "gpiochip0";
struct gpiod_chip *chip;
struct gpiod_line *line20;
struct gpiod_line *line21;
void    OpenGpio( void )
{
    // open GPIO chip
    chip = gpiod_chip_open_by_name(chipname);

    // open GPIO Lines
    line20 = gpiod_chip_get_line( chip, 20 );
    line21 = gpiod_chip_get_line( chip, 21 );

    // Open GPIO Lines for Output
    gpiod_line_request_output(line20, "example1", 0 );
    gpiod_line_request_output(line21, "example1", 0 );
}
int     gpioOut20Dat = 0;
void    SetGpio20( int val )
{
    gpioOut20Dat = val;
    gpiod_line_set_value( line20, gpioOut20Dat );
}


 

経歴について

先日ふっと経歴の資料を更新する必要があったので、ひさしぶりに見直してみた。

進化してないなと思いつつ、いろんな案件に関わりながら比較的新しい開発項目にも

参加させていただいていることに感謝あるのみ。 

 
Windows / Linux / Android / RaspberryPi
マイコン基板、Arduino基板

CAN / I2C  / LAN / Wifi / Bluetooth

 ・・ 一通り何でも開発対応します。


経歴追加
1995年9月有限会社マックスポート創業
     :
2009年4月Real Time Linux マルチコア対応モジュール開発
2008年4月Real Time Linux用PCIボードドライバ開発、V850POD開発など
2010年4月Virtual システム計測機用PCIボードデバイスドライバ開発
2011年4月車両モニタシステム北京モーターショーデモ用システム開発
2011年4月心拍オンライン計測システム開発
2012年4月CAN連動車両周辺映像録画/再生システム開発(Windows)
2013年4月CAN-RS232Cデータ変換アプリケーション開発(Windows)
2013年4月車両情報サーバーアップロード用デモ装置開発
2013年4月Forum8連動トヨタ展示用車両制御システム構築
2014年4月車両データ収集装置GPS対応版開発、車両データ解析ツール開発
2014年4月~現在視線検知対応車両制御システム
2015年4月Forum8対応車両運行デモシステム開発
2016年4月ドライブシミュレータ、Forum8/CANデータ連動対応
2016年4月HD映像キャプチャCAN送受信連動ロギングシステム開発
2017年4月車両データシミュレーションWindowsシステム開発
2018年4月ドライブレコーダ評価装置用SDカード読み出しシステム開発
2018年4月音声周波数解析ライブラリ開発
2017年4月船舶用CAN変換BOX、船舶用簡易ナビシステム開発
2017年4月トルクレンチ締め付け値無線ロギング/結果収集システム構築
2018年4月静電容量自動計測システム(無線データ収集&ロギング)開発
2018年4月無線機&Bluetooth通信システム開発
2017年4月スマート体温計システム開発
2019年4月発電センサーモジュール用データ収集システム開発
2019年4月CAN Gateway装置開発
2020年4月各種センサー情報無線データ収集システム構築
2020年4月AndroidスマホUSB接続デジタルFMラジオ装置開発
2020年4月船舶用CANドライバ構築
2020年4月LORA無線機用リモコンユニット開発
2021年4月ミライパネルPLC装置プログラム構築
2021年4月CO2センサーデータ収集&Androidスマホ表示&ロギング装置開発

2020年9月23日水曜日

Androidスマホでラジオ制御

Androidのスマホからラジオチューナー(Si4730)の制御を行い、スマホから音を出すという装置の開発を行った。


Android、チューナー間は USB Isochronous通信で行うのだが、まぁ動かない動かない。

これほど悪戦苦闘したのは本当にひさしぶり。トータルで2か月くらいかかってしまった(工数的には超大赤字w)。


USB Isochronous通信のベースはlibusbを使用したけど、Isochronousの使い方がわからない。

チューナー側もきちんと送信できているのかわからない。

「よくわからないもの」と「なんだかよくわからないもの」をつないでも動くわけがなくw

 

ただ依頼いただいた方を裏切るわけにはいかないので、意地と根性だけでなんとか克服できました。

結局、AndroidでIsochronous通信を行う際は ・・

 ・ libusbの改造が必要

 ・ Javaで取り込んだDescriptorとFSをLibusbに渡さないといけない。

 ・ Isochronous通信のコールバック処理部で修正しないと使えなかった(今回の案件の場合)。

 

LibusbはLGPL2.1 なので、ソースの公開が必要なのかな?

そのうち公開するかも(案件の状況次第)。

 

※ もしUSBでIsochronous通信をしたいという方、ひと声かけてください!

2020年8月5日水曜日

いつもありがとうございます。

ひさしぶりの更新

細々とながら仕事を続け、元気にすごしております。
2020年4~5月はコロナ禍のおかげで開発案件がスタートせず、事業もどうなることかと思っていたけど、6月後半からいくつかの問い合わせが来て、今はパンクに近い状況にあります。

最近C〇C〇NALA経由でBLEやWifi、スマホ関連でこんなもの作れませんか?という感じの問い合わせをいただきます。本当にありがとうございます。


C〇C〇NALAのチェックはあまりできていないので、下記メールアドレスからいただけると助かります。できる限り誠実に、正直に対応するよう心掛けます。
今後ともよろしくお願いします。


2020年8月2日、丹波ひまわり畑への夫婦ライド

有限会社マックスポート
info.maxport.anami●gmail.com
※ ●を@に置き換えてください。