• 今後個人的にやりたいことのメモ2

    2019-12-13 20:07

    今通勤に使っている車にはOBD2と呼ばれるコネクタがあって、そこからいろいろ情報を取得できるらしい。

    ただし、現在主流のCANではなくK-Lineと呼ばれるプロトコルらしいので、Amazonでよくわからない怪しいやつがK-Line対応かどうかガチャるぐらいなら確実に取得して見たいよね?
    ってことで調べてみるも、K-Lineはかつて日本でも主流だった規格なのに対して、日本語の情報が圧倒的に少なすぎる。

    で、いろいろ調べた結果、以下の情報をもとにチャレンジすればうまくいくのではないかと。こちらは電子工作もプログラミングも必要になってくるんでメモ1を最優先する。

    OBD-II (ISO 9141-2) Scanner
    http://timothyshaffer.com/website/obdii.php

    Cheap OBD2 Communications on K-line (ISO 9141-2 and ISO 14230-4)
    https://www.instructables.com/id/Low-Cost-OBD2-Communications-on-K-line-ISO-9141-2-/

    Arduinoとraspberrypiでシリアル通信(USB)
    https://qiita.com/Orangelinux/items/2cdc07d797383bfffff5


  • 広告
  • 今後個人的にやりたいことのメモ1

    2019-12-05 20:27

    車で音楽を聴くのに、スマホとカーステレオとの接続にAUXを用いているが、頻繁に抜き差しするとイヤホンジャックが壊れる恐れがあるので、ワイヤレス化したい。
    しかし、個人的な理由でスマホのBluetoothを絶対にオンにしたくないマンと化したので、何かいい方法はないのか考えてみた結果、Raspberry PiをWi-Fiのアクセスポイントにしてスマホと接続し、スマホからラズパイへストリーミング配信するようにすればいいのでは?と思って調べてみるとAirPlayやらDLNAといったものがそれに該当するみたいで、Volumioという音楽再生ソフトを使えばそれらが簡単に実現できそう。

    車載するにあたって、電源周りの管理が面倒だと思ったけど、ROM化すれば急な電源断によるファイルシステムの破壊の心配がなくなるので、ACCかIG2から電源を取るだけでよさげ。
    IG2の方が適切かもしれないが、シガーソケットがACC電源で、シガーソケットをUSB給電ポートにするアクセサリーがあるので、それを使うのが楽。

    ROM化しない場合は常時電源とACC(またはIG2)を両方監視してシャットダウンしたり電源断するようなしくみを考える必要がある。(Arduinoとの組み合わせて何とかしてるってサイトを見かけたけど面倒くさそうだった)

    せっかくなので、ROM化した状態ではいろいろ不便があるかもしれないのでSDカードスロットの増設にもチャレンジしてみたい。

    ・Raspberry Pi Zero W
    ・適当なDACモジュール(イヤホンジャックを増設するため)
    ・microSDカードスロット
    ・33オームの抵抗器

    以下参考になりそうなサイトのまとめ

    Raspberry Pi+Volumio をネットワークオーディオプレイヤーとして使う
    https://www.agilegroup.co.jp/technote/volumio-via-network.html

    Raspberry Pi にSDカードスロットを増設する
    https://tshell.hatenablog.com/entry/2019/09/04/200850

    Raspberry Piのベアメタル環境からSDCARDにアクセスする(SPIモード編)
    http://uzusayuu.hatenadiary.jp/entry/2018/05/20/135504
    ※ここで重要なのはSPIモード云々ではなく回路図の方。ラズパイの基板上に実装されているSDカードスロットはGPIOで接続されているらしく、回路図を信じるならスロットとGPIOの間に抵抗があるっぽい。二つ上の増設する方法では新しいスロットを直接GPIOでつなげているけど一部33オームの抵抗をかました方がいいのかも?


  • 【PowerShell】コマンドでスリープする方法

    2019-11-23 14:34
    PowerShell -Command "Add-Type -Assembly System.Windows.Forms;[System.Windows.Forms.Application]::SetSuspendState('Suspend', $false, $false);"

    コマンドでスリープする方法を調べてみると、rundll32.exeを使った誤った方法やら、スクリプトを使う方法などといったものは見つかりますが、ファイルを作ることなく正しくスリープできる方法を結局見つけることができず、いろいろ模索した結果が上のコマンドです。

    PowerShellスクリプトを使った方法で、まず最初に見つかったのはWindows APIを呼び出すタイプのもの。

    $signature = @"
    [DllImport("powrprof.dll")]
    public static extern bool SetSuspendState(bool Hibernate,bool ForceCritical,bool DisableWakeEvent);
    "@
    $func = Add-Type -memberDefinition $signature -namespace "Win32Functions" -name "SetSuspendStateFunction" -passThru
    $func::SetSuspendState($false,$false,$false)

    これをps1ファイルにすることなく実行する手段がよくわかりませんでした(´・ω・`)
    仮にできたとして、ショートカットに使える文字数は限られているので、多分このスクリプトを利用することはやはりできない。(ちなみに、文字数の制限を超えるにはバッチファイル等を使って呼び出せばいいけど、それではファイルを作ってしまうので不採用)

    もう少し調べてみると、.netにも同じ役割を持つApplication.SetSuspendStateメソッドが存在しているので、これを利用してpowershell.exeの-Commandオプションを用いた実行が可能となりました。それがこの記事冒頭に記載しているコマンドとなります。

    Application.SetSuspendState(PowerState, Boolean, Boolean) メソッド