タケノコ畑の置手紙

ちょっとしたプログラムのこととかをにわかなりに書いてみるブログ

Lilygo 電子ペーパー(eink)モジュールを使ってみる

先日購入したLilygoの電子ペーパーモジュール 2.13inch
www.banggood.com

公式の使い方も載ってはいるのですが、初心者からすればわっかりづらかったのでこの記事を書きます。

まずは公式のgithubに飛びましょう。
github.com

//コード実行のための下準備
①とりあえずdownloadを押してサンプルを手に入れる
②README.MDより、自分の持っているバージョンを見つける
 今回はT5 V2.3
③Install the following dependency library filesを全部入れる
④①でダウンロードしたサンプルの中にあるboard_def.hを
 First、Note参照のもと書き換える

//ArduinoにESP32環境を入れる
①ファイル>環境設定>追加のボードマネージャ にesp32環境ファイルのURL入力
 https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
②ツール>ボード>ボードマネージャ>検索欄[esp32]よりInstall選択

//ボード側の下準備
①Flush Toolダウンロード (一番上のやつ)
 www.espressif.com
②T5-Ink-Screen-Series-master\binにあるburn_settingの通りに値を設定→実行
 この時のbinファイルは上で調べたバージョン準拠

以上で下準備は完了です。
このFlushToolに行きつくまでとても長く険しい道のりでした。
というか、わざわざチップに焼かないと書き込めないボードがあるというのを初めて知りました。


このボードにはSDカードスロットがないので、BMPからQRコードとか、Textからパラメータとかを読み込むことはできません。
なので、自分の場合はプログラムに埋め込んじゃいます。外付けのスロット持ってる人は使いましょう。

2020/5/17追記
嘘です。思いっきりついてました。
なので画像読み込みで好きなものを表示してみてください<(_ _)>
また、自分の目的はネームプレートなのでWi-FiやSDに関するコードは全削除し、
display.drawpixelを使って画像を書き出します。 →黒は0x00

Bluetoothで送った画像を表示できれば楽しそうだと思いました。(KONAMI)

最近買ったガジェット紹介

KICKSTARTERやALIを見て面白そうなものを見つけるのが趣味な私ですが、
年終わりということで買ったガジェットを紹介します。

・HAMBIRD SPEAKER duraMOBI KICKSTARTERより
f:id:TaKeNoKo46:20191229183438j:plain
Bluetooth骨伝導スピーカー
一般的に想像する骨伝導というよりも大きな振動版が張り付けた面を強く振動させて音を作り出すイメージ
多分Bluetooth用のものは世界初なんじゃないかと思う。
当然張り付けた面の材質によって特性が変化するが、一応単体でも大きな音が出る。
KICKSTARTERで出資したのでタイトルの下に刻印もしてもらいました。
私は一つだけ買いましたが、二つあるとステレオとして機能するようです。
たしか24ドル+送料

・Masta Box KICKSTARTERより
f:id:TaKeNoKo46:20191229184712p:plain
フィジェットトイの形をしたプレゼンター兼トラックボール的な奴
Bluetoothで接続すればジョイスティック、マウス、レーザーポインタとして使え、
USB接続でmicroSDリーダーとかにもなるすごいやつ
バッテリー搭載なので外部電池いらず、取り合えず学会発表などに持っていけば小さなトラブルくらいは解決してくれる。
初めてのKICKSTARTERデビューがこやつでありました。
たしか32ドル+送料

・1bitのニキシー管時計 ALIEXPRESSより
f:id:TaKeNoKo46:20191229185323g:plain
昔沖縄のアメリカ村に行った時、ちょっと怪しげな雑貨屋さんにニキシー管(当時は存在知らず)がありました。
(今思えば、アメリカ村って怪しい店ばっかだったなぁ・・・)
見た目だけじゃあ検索しようにもできず、名前を知ったのが数年先の話
ご存じの通り、ニキシー管はロシアで生産が盛んでしたがデジタルのLEDや液晶が出てきたせいで需要がストップ。
近年は一つ600-800円程度で取引されるようになりました。
しかも駆動電圧が120V以上(うろ覚え)なので手軽にニキシー管を買ってきて工作することもできないので完全にお手上げ状態だったところ、
ALIEXPRESSにてモジュールと管のセットを見つけて購入に至る
ALIでニキシー管時計は結構ありますが、なかなか高いので手を出すこともできない私にとっては救世主でありました。
上にGIF載せましたがもうロマンですよ、ロマン。
こんなのが部屋で動いてたら最高にサイバーパンクでテンション上がるってもんですよ。
まあ、1bitなので実用性は皆無ですがお試し版にはちょうどいいと思います。
ALIにて15ドルくらい

・コンセント変換プラグ兼USB充電器 BASEUS ALIEXPRESSより
f:id:TaKeNoKo46:20191229190347j:plainf:id:TaKeNoKo46:20191229190357j:plain
はい。海外行く予定全くないのに変形機構がかっこいいから購入した逸品。
見た目はごっつい変換アダプタと思いきや、全世界のプラグ形状に対応したUSBも兼ね備える変換器(商品名がわからんので言いようがない)
穴は据え置きですが、本体をひねるとEU,US,UKのプラグがにょっきり生えます。誇張じゃなく生えます。
USのプラグは回転できるので、AUSとしても使えます。
サイドのUSB端子は合計2.4A出力まで対応し、分解するとヒューズも交換できるようになっています。
このBASEUSってメーカー、日本じゃあまり聞きませんが海外だと有名な会社らしいです。
ALIにて13ドル

・ちっちゃいドローン(カメラ付き) ALIEXPRESSより
f:id:TaKeNoKo46:20191229191107p:plain
意外と飛びます。35ドル。
スマホとリンクさせても付属のコントローラでも飛ばせます。
上昇させれば、押しっぱなしにしなくても自動で滞空を続けます。当然風にあおられると落ちますが。
カメラは500Mpxのバージョンを買いましたが、画面で確認する分には十分な画質です。
映像はリンクさせたスマホで確認。接続はWi-Fiです。
アプリはVR対応もしており、なかなかの臨場感を味わえます。
私の部屋は思い切って飛ばせるほど広くないので主に無線カメラとして使ってます。
ちなみに、連続飛行時間は7分、充電は30分程度です。
本体は32ドル、予備電池で3ドルでした。

・Lilygo Einkモジュール+ドライバー Banggoodより
f:id:TaKeNoKo46:20191229191936j:plain
電子ペーパーはロマンでしょってことで購入。直近で中古のKindleも買いましたがやはり自由に表示させたい。
未だサンプルプログラムをちょこちょこいじってみて楽しんでます。
このキットにはBluetoothWi-Fiまで備わっており、ネットに接続してアイコン画像を引っ張ってこれるらしいのです。
編集や書き込みはArduinoと同様、なんかESP32ってやつを設定してやるらしいです(詳しくは別記事に備忘録として)。
目標はこれをネームプレートとして首にぶら下げて出かけたいです。


最後に一言、ガジェットはいいぞ。

DisplayPortとHDMIの違い(自分用)

映像端子には複数種類ある。
例えば、HDMI,DisplayPort,VGA,DVIなどなど…

最近失敗したのがDisplayPort to HDMIの変換
ここには大きな落とし穴があった・・・(もちろん自分の知識不足)

まず、二つの端子の伝送方式が違うこと
HDMIはTMDS(transition minimized differential signaling)という方式を採用しているらしい
簡単に言えば映像の信号と同期するためのクロックパルスを分離して伝送する方式
対してDisplayPortは映像とパルスをブロックとして少しずつ送っていく方式(名前はまだない?よく知らんけども…)

つまり、端子数を合わせるだけの変換アダプタを使えば受け取る側としては全く別のものが送られてきているわけで、処理ができずNoSignal(憤怒)状態となってしまう
でもこの便利な世の中、そう簡単に互換性がないまま世に出すということはないのである

DisplayPortにはシングルモードとデュアルモードが存在する
シングルはDPからはDPにしか出力することができない。対してデュアルは出力先がHDMIだった場合、自動的に判別してTMDS用に処理を追加してくれるのだ
(ほかにも例はありそうだけど、今回陥った話に限定して書いてます。)
ほう!これはいい!ということでさっそく私のPCちゃんからHDMI端子とDP to HDMI変換アダプタを付けたDisplayPort端子から2台のモニタにつないだわけだ
するとなんということだろう。HDMI側は映ったがDP側はNosignal…
変換アダプタが1000円もしたのにどういうことだと、必死に探し回った

そこで分かったのが上記のモードについてだ。
一つ目に、現在の機器に関しては基本的にデュアルモードが搭載されているらしい
確認方法としてはシングルが「DP」、デュアルが「DP++」というロゴを使えと、DP開発元からのお約束があるため、素直に従っている企業の製品はロゴを見ればよい
しかしなんとまあ、大抵の製品はそのまま「DP」ロゴなのにデュアルを搭載してるケースも多いらしい
長々と書いたがモードに関しては問題なさそうだ
二つ目に、HDMIとの競合である
デュアルモードは上記の通りHDMI端子を判別して処理方法を変えてくれる
しかし、HDMIと同時に変換付きのDPが同時に刺さっていると、クロックパルスの供給が間に合わないためHDMIしか出力できなくなるそうだ
多分今回の落とし穴がここ。もともと知っていれば・・・


結論としては、DisplayPortとHDMIでマルチモニタ環境を構築したい場合は、
・変換アダプタをアクティブタイプ(端子変換かつ、処理をアダプタ側で行うもの)を使う
HDMIとDVIなど、DPとHDMIが同時に存在しない運用をする
のどちらかを行えばいいと思いました(コナミ)

アクティブ、パッシブの見分け方としては、変換だけのやっすいやつがパッシブ。
セルフパワー型の少し大きめで割と高いやつがアクティブとなります。
アクティブはシングルデュアルどちらにも使えますがパッシブはデュアル(新し目の機器)に使えばいいと思います。
そしてパッシブを使う場合はHDMIと併用しないことが重要です。以上。


ひさびさの投稿となりましたが、有用な情報を載せていければと思います。

Oculus Goでできること

皆様、お久しぶりです。ここ最近忙しくてまともにブログ更新できていませんでした・・・

今回は先日買ってみたOculus Goについてを記事にします。(プログラム系についてはまた今度)

 

Oculus Goは結構有名になってきたので大丈夫ですね。スタンドアローンVRです。

自分が買ううえで着目した点は

・安い(32GBで23800円、64GBで29800円)

スタンドアローン

ですね。普通でごめんなさい・・・ 

学生である私としましてはPC向けのVRなんかはもう手が届かないわけです。

必要なのがグラボとVRとしてもなかなか高性能なものを要求されているわけなので。

そんな中でこれ単体で動くということは買うだけでVRができるということなんですよ!

あと買い方とかは他のサイトとかご覧ください。多分上のほうに出てくると思うので。

 

Goには32,64GBがあります。外部メモリーは使えない仕様なので結構大事なとこですよこれ。

私は32GBを買いました。公式サイトには64GBでHD映画7本、アプリ40本、ゲーム20本って書いてあるんですけど基本的にストリーミングで楽しむという方は32GBで十分です。十分でした。

結論から言いますと、自分のPCにホームネットワークで接続すればPC側のストレージにアクセスできますので32GBで十分でした。

自分はスマホ用のゴーグルしかVR経験がないんですが、雲泥の差であり、月と鼈であり、晩のおかずがシチューと生姜焼きの差なんです。その辺のレビューなんかも他当たってください。

 

本記事の概要ですが、できることを説明できたらいいなって感じです。例えば、

・PCのメディアにアクセスする

・PCVRとして認識させる

手順はそんなにめんどくさくないんで一通り書いていきます。

続きを読む

手始めにノーマライズ

(ブログの存在自体忘れてたなんて言えない・・・)
暑いですか!暑いですね!外に出たくない病が発症しました!

前回信号処理とか言った手前何すればいいか悩んだ結果これになりました。
ノーマライズとは!
正規化のことである。

はい。以上です。
前の記事かなんかでwavファイルは離散データの集合体だって言ったと思います。
離散値は16bitだと32767~-32768までの値をとって、それが振幅とイコールになります。

もし、機器側のつまみをひねってもなかなか音量が上がらないという現象に遭遇したならば、
それはもともとの音データの振幅が小さい故に・・・っていうことが考えられます。
そんな時はどうしましょう?

そこでこのノーマライズというものを使います。
例えば、1,2,3,4,5というデータがあった場合、ある値(ここでは1)に合わせると
    0.2,0.4,0.6,0.8,1という風に置き換える処理のことをいいます。
音を扱う場合は音の最大値で処理をすればよいので、今回はこれを扱っていきましょう。

音を大きくするという方法ではもう一つ「増幅」があります。
もともとのデータに単純に数値をかけるだけで手軽に音を大きくすることができます。
しかし、これでは音割れを起こしてしまう可能性が非常に高くなるという欠点があります。

ノーマライズと単純な増幅の比較として、wavデータを例にグラフを見てみるとこんなかんじ
f:id:TaKeNoKo46:20180719144702p:plain

グラフで見れば一目瞭然ですね!
ノーマライズは先に最大値を検出してから処理を始めるのでオーバーフロー(値のひっくり返り)は起こりません。
対して増幅だと際限なく大きくできるので、適当に操作してしまうとオーバーフローは断然起こりやすいです。

そんなこんなでプログラムに移りましょう。
今回は音が小さいwavファイルを大きな音に書き換えるプログラムです(ようやく実用的なものが!!!)。
動作としては指定したファイルを読み込んで、ノーマライズした後上書き保存するというものです。
出力する過程で余計な情報(アーティスト名とか)を削って
最も単純な形に上書きするので、そこんところ注意です。
もっとも、mp3には情報付与できますが、wavでやるケースはなかなかないと思いますが・・・
開けないwavファイルもあると思いますが、今回はriff形式に限定しています。

続きを読む

OpenALで立体音響

スマブラとゼノブレ2の追加エピが発表されました!楽しみですね!

ということでここからは応用編になります。
手始めにOpenALの機能を用いて立体音響を再生していきたいと思います。
立体音響は名前の通り立体的で奥行きのある音のことをいいます。

今回は手持ちのwavファイルを読み込んで立体的な音を再現するプログラムです。

 

まずwavを読み込むためには・・・ということで、構造を見ていきましょう。

f:id:TaKeNoKo46:20180622233538p:plain

wavをバイナリエディタで開いたものがこちらです。よくわかりませんね!

でも右の奴と比較してよぉ~く見てみるとなにやら文字が出ていることがわかります。

「wav 構造」とかで検索すればもっと詳しく説明されてるサイトとかありますのでここでは最も単純な構造のものを解説します。上の図をブロックに分けると・・・

52 49 46 46

52 3B AA 11

57 41 56 45

66 6D 74 20

10 00 00 00

01 00

01 00

11 2B 00 00

11 2B 00 00

01 00

08 00

64 61 74 61

00 3B AA 11

00 00 00 00

                   ↓太字が定数

RIFF

データサイズ

WAVE

fmt

情報領域サイズ

formatタグ

チャンネル

標本化周波数

平均転送レート

単位転送数

量子化bit

data

波形部データサイズ

→波形データ

こんな情報が入っています。これをfreadでちまちま読み込んでいけばいいですね。(本当はライブラリとか使えば楽にできるのは内緒 alutとか・・・)

 

続きを読む

OpenALとCでマイクを扱う

前回までは音を鳴らす(出力)だけのプログラムだったので次は録音(入力)するプログラムを作ってみましょう。

今回は録音した音をそのまま再生するプログラムです。
重要キーワード「ストリーミング再生


ストリーミングとは!(恒例)
「インターネット上で動画や音声などのコンテンツをダウンロードしながら逐次再生すること」
まあ聞いたことがある人も多いでしょう。最近の動画配信サービスに使われているアレです。
例えば20分以上の長い動画を視聴するとき、全部ダウンロードして再生したら時間がかかりますよね?
そこで見たい部分(シークバーでいうツマミの前後)を少しずつダウンロードしていく手法のことです。
対義語的に表現すると ストリーミング再生↔ダウンロード再生 ってな感じです。

さて、これっぽい技術をプログラムにも応用していきます。「ぽい」なので本来の意味とは違いますが、逐次処理していくっていう点でこのブログでは呼んでいきます。下にイメージ画像を載せときます。
f:id:TaKeNoKo46:20180610183453g:plain

今回のプログラムはなんと!環境音を録音&再生を行います!

前のはsin波を鳴らすだけだったのであっふーん…てな感じでしたが身近なものを扱えばモチベとかも上がるんじゃないでしょうか?

早速ソースコードを載せときます。

続きを読む