2017年8月14日月曜日

サンコーのネック冷却クーラーにヅラ毛が絡まった

コミケ3日目にてコスプレしている友人に貸したらウィッグの毛が冷却ファンに絡まってしまいました。(僕じゃないです)
隙間から毛を抜いてみたものの、回転しなくなっていたため分解しました。

まず冷却面の黒いネジ3箇所を外します。


ファンを固定しているネジ2本外して

 取れました。あちゃー。

 絡まっていた毛を取り除いて電源ON。回りました。交換せずに済んでよかった。

で、戻そうとした矢先に内部の配線が気になりました。
ファンの他に赤線1本、黒線3本あるのです。

内側の冷却面のネジ2本も外してみると、首のアルミ材に温度センサと思わしきものが熱伝導グリスと共に入ってました。
白く厚いペルチェ素子に配線が赤と黒1本ずつ。
恐らく残り1本は放熱側にペルチェ素子があり、冷却側と直列に接続していると思われます。

2017年1月3日火曜日

Pushbullet+自前デバイスでプッシュ通知を受け取る

Pushbulletを使ってプッシュ通知をスマホ等へ送る例は見当たりますが、逆にプッシュ通知を受け取る例がなかったのでやってみました。

-なんでこんなことを?
ホームオートメーションやりたくなりまして、IFTTTやLINE BOTなどといったスマホへプッシュ通知送れるwebサービスを利用して楽しつつ、やりたいことを実現するためには以下3点の要件を満たす必要がありました。ワガママですね。
  1. Android・iOS・PCのマルチプラットフォーム対応
  2. 自前デバイス(Linux鯖など)からプッシュ通知を送れる
  3. 逆にAndroid等からチャットを送れる
で、たどり着いたのがPushbulletだったのです。

websocketでイベント受信→チャットテキストを取得するデモをnode.jsとpushbullet-bashを組み合わせて書いてみました。ラズパイ3上で動作しました。
スクリプトとフォルダ配置はこんな感じで。
~/.config/pushbulletはpushbullet-bashがAPIキーを参照するのでAPIキーを記述すること。

 ~/
├ .config/pushbullet
└ pushbullet/
      ├ pushbullet-bash/
      └ script/
          ├ pushbullet_websock.js
          └ getLastPush.sh


テキスト送るとこんな感じ。

2016年12月18日日曜日

FRDMボードのデバッガチップを復旧させた話

この記事はmbed adventカレンダー2016 18日目の記事です。

長くなったのでいきなり3行でまとめると...
・FRDM-K64Fボードのファーム飛んだ
・Keil uVision5+サポートするデバッガ(J-Link、LPC-Link2、他mbedボードのCMSIS-DAPデバッガ)で復旧できた
ARMバンザイ、mbedバンザイ

こんな人に特にオススメの記事となっています
・FRDMボードのファームふっ飛ばして積み基板にしている人
・keil uVision5からhexファイルの書き込み方について知りたい人

最近FRDM-K64Fボードを買いまして、早速Lチカ!...の前にファームのアップデートを
Windows10マシンにて試みたところ、ファームが吹っ飛びました

この件調べるまで知りませんでしたが、どうもOpenSDAブートローダーとWindows10の相性が悪いらしいです。
http://www.nxp.com/jp/products/software-and-tools/run-time-software/kinetis-software-and-tools/ides-for-kinetis-mcus/opensda-serial-and-debug-adapter:OPENSDA

ページ上方の続きを表示をクリックすると...
oh...

復旧の方法については調べたところ、主に2通りの方法があるようです。
①J-LinkやULINK2等の外部デバッガよりブートローダー書き込み
  https://community.nxp.com/docs/DOC-330935
②別なFRDMボードからブートローダー書き込み
  https://mcuoneclipse.com/2016/06/26/how-to-recover-the-opensda-v2-x-bootloader/
 
J-Link EDUを買って復旧することに成功しましたが、
LPC-Link2(CMSIS-DAPファーム、もしくは他のmbedボードでSWD信号引き出せられるもの)
+Keil uVision5
+ubuntu(VirtualBox上からでもOK、もしくはwindows7、Mac、Linux等の別マシン)
からでも復旧できることが分かったのでその方法を記載しておきます。


ブートローダー復旧編


LPC-Link2とFRDMボードを接続しておきます。
電源はFRDMボードにUSBから供給するのでLPC-Link2のJP2はオープンにしておきます。

uVisionからバイナリファイル書き込み方法は以下を参照しました。
µVision4 User's Guide (Japanese): HEX ファイル
http://www.keil.com/support/man/docs/uv4jp/uv4jp_fl_hexdownload.htm

書き込みプロジェクト作成前にK20シリーズのDFPをインストールしておきます。
メイン画面のPack Installerをクリック

 画面左側のツリーよりNXP→K20 Seriesを選択、右側のKeil::Kinetis_K20_DFPのInstallをクリック

インストール完了したらPack Installerを閉じます。
Reload Packs?と問い合わせが出るのではいをクリック。
いいえをクリックしてしまったらuVision5を再起動。

Keil uVision5で書き込み用プロジェクトの作成
タイトルバー下のメニューよりProject→New uVision Project
適当なフォルダにOpeSDAFirmwareWriteなど、適当な名前でプロジェクト作成。
Select Device画面でSearch欄にMK20DX128xxx5と入力。
ツリーのMK20DX128xxx5をクリックしてOKをクリック。

コンポーネントは何も追加せずOKをクリック


OpenSDAブートローダーのダウンロード
http://www.nxp.com/jp/products/software-and-tools/run-time-software/kinetis-software-and-tools/ides-for-kinetis-mcus/opensda-serial-and-debug-adapter:OPENSDA
復旧対象のボードを選択して、OpenSDA bootloaderのバイナリをダウンロード。

解凍して、プロジェクト作ったフォルダにk20dx128_bootloader_0x5000.axfをコピーします。

Options fot Targetをクリック。

 Outputタブを選択し、Name of Exe~欄にダウンロードしたOpenSDA bootloaderのバイナリ名(k20dx128_bootloader_0x5000.axf)を入力します。

DebugタブにてデバッガをCMSIS-DAP Debuggerに変更。
Settingsをクリック。

 Connectをunder Reset、ResetをHW RESETに変更

メイン画面に戻り、Downloadボタンを押せばbootloaderが書き込まれます。
正常に書き込まれればBuild Outputはスクリーンショットと同じ内容になるはずです。

SWDケーブルを外してSW1を押しながらmicroUSBケーブルを接続し、
WindowsからBOOTLOADERドライブが認識されれば正常に書き込みできています。

アプリケーション復旧編

OpenSDAアプリケーション書き込み用にWindows10ではないマシン(VirtualBox上のubuntu、別マシンのWindows7など)で以降は作業します。

VirtualBox上のubuntuから復旧させる場合、仮想マシンの設定より
USBデバイスフィルタを登録しておきます。
Windowsにブートローダードライブが認識されている状態でMBED CMSIS-DAPを追加します。 
この設定をした状態でubuntuを起動、再度SW1を押しながらFRDMボードのUSBを接続すれば
自動的に仮想マシンのubuntuへ接続されます。


Windows10において対策版のOpenSDAブートローダーがリリースされるまで、JLinkかP&E Microどちらかを使うことが推奨されているので今回はJLinkを使います。

https://www.segger.com/downloads/jlink
J-Link OpenSDA - Board-Specific Firmwaresより対象のボード用バイナリをダウンロードします。
今回はFRDM-K64F用のバイナリをダウンロードします。

ダウンロードしたバイナリ(02_OpenSDA_FRDM-K64F.bin)をBOOTLOADERドライブにD&D

USBケーブルを抜き、そのまま差せば...復旧しました!


LチカもOK!

で、ここまでやってようやく気づいたのですが、uVision5がサポートするデバッガなら、どれでも復旧できたんじゃね?と

SWDコネクタ出ているLPCXpresso824-MAXボードからでも...

SWD関係のピンを引き出したmbed LPC1114ボードからでも...

nucleo-F401REボード上のST-Linkからでも...

復旧できました!!
なんのためにJ-Link買ったんだろ。なんでもデバッグできるデバッガ手に入ったしいいや。



2016年12月3日土曜日

へぇボタンをmbedで改造して任意SE鳴らせるようにしてみた

この記事はmbed adventカレンダー2016 3日目の記事です。

ある時へぇボタンの声をVOICEROID結月ゆかりさんに差し替えられない?と相談されまして、
それをmbed nucleo F303K8で作りました。
鳴ってる様子はこちら


へえボタンケースを追加工してmicroSDカードとロータリーディップスイッチ、音量調整用可変抵抗を取り付けています。


 ハード














回路図
















PDF版;https://drive.google.com/file/d/0B_nriOFsja6DNlRFazhraVllaFE/view?usp=sharing

・microSD
・スピーカー駆動用アンプ
・SE選択用ロータリーディップスイッチ
・へぇボタンについていたプッシュスイッチ信号横取り
・へぇボタン電源の単3電池4本
以上をmbed nucleoF303K8に接続して作り上げました。
改造というより中身ほぼ総取り替えですね(;´Д`)


初めてnucleoF303K8を使いましたが、、、注意して使わなければならないことにいくつかブチ当たりました。いずれもnucleoボードの回路図を注意して見ないとわからないことばかりでした。

まとめたツイート
https://twitter.com/i/moments/edit/804529900371591168

そのほかにも...
・電源をVINからではなく、+5Vから供給した場合、ST-Linkに電源供給されないためかResetがLに落ちっぱな状態になり動作しない
→ST-Linkからのリセット線の0Ωジャンパ外して引き出し、外部スイッチで接続・切り離しできるようにした
・ST-LinlとA7(PA2)はUART_TX、A0(PA0)はMCOとして接続されており、空きポートだと思って使うとトラブルの元になる→A0はSB17をカットして対応、A7は元々空きだったので痛い目見ず済んだ。
を作りました。

ソフト

https://developer.mbed.org/users/nameless129/code/F303_WAVPlayer/

実機のへぇボタン同様SEを連打して鳴らせたかったのとwavファイルの勉強兼ねて再生用ライブラリを作りました。
なるべく環境に依存する部分を組み込まないように作ったので他のPSoCやAVR等で使えるとはずですが、まだライブラリを独立させて試していないのでそれはまた近いうちに公開予定です。

2016年9月10日土曜日

I2SオーディオI/F WM8731をraspberry piで鳴らす

MFTで買ったDm9RecordsのI2SオーディオI/F基板PIAiFを鳴らしました。
http://www.dm9records.com/index.php/release/sound/piaif/

参考:
https://github.com/raspberrypi/linux/issues/1302
https://github.com/raspberrypi/linux/issues/1420

1. /boot/config.txtを編集
編集箇所は以下4つ
#を消してI2CとI2Cを有効に
dtparam=i2c_arm=on
dtparam=i2s=on

raspberry pi オンボードのオーディオを無効に
(有効でも可。その場合再生する際にデバイス指定する必要がある)
# dtparam=audio=on
openGLドライバを無効に
I2Cドライバと同時に使えないらしいです。
# dtoverlay=vc4-kms-v3d
以下を追記
#dm9 PIAiF enable
dtoverlay=rpi-proto


2.raspberry pi再起動

3.DACが認識されているか確認
pi@raspi3:~ $ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: sndrpiproto [snd_rpi_proto], device 0: WM8731 HiFi wm8731-hifi-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0


4.Output Mixer HiFi Playback SwitchのIDを確認
pi@raspi3:~ $ amixer controls
numid=2,iface=MIXER,name='Master Playback ZC Switch'
numid=1,iface=MIXER,name='Master Playback Volume'
numid=4,iface=MIXER,name='Line Capture Switch'
numid=5,iface=MIXER,name='Mic Boost Volume'
numid=6,iface=MIXER,name='Mic Capture Switch'
numid=8,iface=MIXER,name='ADC High Pass Filter Switch'
numid=3,iface=MIXER,name='Capture Volume'
numid=10,iface=MIXER,name='Playback Deemphasis Switch'
numid=14,iface=MIXER,name='Input Mux'
numid=13,iface=MIXER,name='Output Mixer HiFi Playback Switch'
numid=11,iface=MIXER,name='Output Mixer Line Bypass Switch'
numid=12,iface=MIXER,name='Output Mixer Mic Sidetone Switch'
numid=7,iface=MIXER,name='Sidetone Playback Volume'
numid=9,iface=MIXER,name='Store DC Offset Switch'


5.Output Mixer HiFi Playback SwitchをONに。
これがOFFのままだとdmesgでI2S SYNC errorが出ます。
amixer cset numid=13 on

6.再生してみる。
mplayer hoge.wav

7.楽しい!! ✌(‘ω’✌ )三✌(‘ω’)✌三( ✌’ω’)✌

オンボード出力が有効の場合、カードIDを調べて
pi@raspi3:~ $ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]
  Subdevices: 8/8
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
  Subdevice #2: subdevice #2
  Subdevice #3: subdevice #3
  Subdevice #4: subdevice #4
  Subdevice #5: subdevice #5
  Subdevice #6: subdevice #6
  Subdevice #7: subdevice #7
card 0: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC958/HDMI]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: sndrpiproto [snd_rpi_proto], device 0: WM8731 HiFi wm8731-hifi-0 []
  Subdevices: 1/1
  Subdevice #0: subdevice #0


ここではcard 1が外付けDACに該当するので
mplayer -ao alsa:device=hw=1,0 hoge.wav


2016年8月22日月曜日

UPnPで謎のポート(UDP49579)が開いてた件。犯人はIPv6

au光に更新してからVPNを動かすため調べていたらHGWのUPnPリストに開けた覚えのないポートが3つ・・・。背筋がざわつく。
リソースマネージャのリッスンポートからTCPとUDPで20479が開いているのはskypeと判明。
残る1つのポート49579(UDP)はsvchost.exe(netvcs)・・・。ううむ(;´д`)
検索かけるとこんな記事が。
UDP UPnP Ports Opening from SVCHOST.EXE NETSVCS (range 50k - 60k)

 Process Hackerで同様に調べるとiphlpsvcで同じ現象なのを発見。IPv6有効にしてたらポート開くのか。。。

 以下を管理者権限のコマンドプロンプトで実行。IPv6一時アドレスとIPv6トンネルインターフェースを無効に。
netsh interface ipv6 set privacy state=disable
netsh interface ipv6 6to4 set state state=disabled
netsh interface ipv6 isatap set state state=disabled
netsh interface ipv6 set teredo disabled

実行後Process Hackerから49579をリッスンしてるsvchost.exeは消え、ルータのUPnPリストからも消えました。

しかし検索でさくっと出なかった故にウィルス疑惑で冷や汗かきまくりでした・・・。
いやーよかったよかった( ´∀`)

2016年5月27日金曜日

【mbed】NUCLEO-F303K8でRTCを使う

NUCLEO-F303K8でSDカード扱おうとしたら”RTC error: LSE clock initialization failed.”とシリアルに表示された。
RTCの初期化に失敗したらしい。

調べてみると、mbedライブラリのデフォルトではLSEクロックを使用する。
(device.hの#define DEVICE_RTC_LSIが0)
NUCLEOボードのジャンパは購入時の状態ではX1が接続されていない。
上記回路図画像はSTM32 Nucleo-32 Schematics packの回路図(MB1180.pdf)より

RTCを使うための方法は2通り
①標準のmbedライブラリからmbed-devライブラリに変更して、mbed-dev\targets\hal\TARGET_STM\TARGET_STM32F3\TARGET_NUCLEO_F303K8\device.h
の #define DEVICE_RTC_LSIを1に書き換えて使う。
精度は落ちるがGPIO減らないしソルダジャンパしなくてもいいのでお手軽。

②ボードのSB5、SB7をソルダジャンパしてX1を接続。(動作確認していません)
その場合ピンPF0、PF1が使用できなくなるが精度は良いはず。

今回はSDカードの読み出しをやりたいため、ソフトで対応しました。