投稿者: stmtok

  • Raspberry PiからLGのディスプレイをRS232C経由で制御する

    Raspberry PiからLGのディスプレイをRS232C経由で制御する

    LGの4Kモニター「43UD79-B」を利用していますが,赤外線リモコンでは電源トグル操作のみ可能です.一方でRS232C経由でコマンドを送信することで,電源のon/offを個別に制御できるようです.

    必要なハードウェア

    Raspberry Pi

    Raspberry PiのGPIOはUART(シリアル通信)をサポートしていますが,3.3Vロジックレベルです.そのため,直接RS232C機器に接続するとRaspberry Piが壊れる恐れがあります.

    レベル変換基板

    Raspberry PiとRS232Cの間にレベル変換基板を挟むひつようがあります.今回は秋月電子通商にて3V・3.3V・5V系-RS232レベル変換基板のAE-ADM3202を購入しました.

    クロスケーブル

    LG 43UD79のRS232C端子は3.5mm 4極ジャック(TRS)のクロスケーブルが必要となります.今回は不要なイヤフォンを切断してAE-AMD3202に直接接続します.

    接続方法

    配線

    AE-ADM3202とTRSケーブルの接続

    AE-ADM3202 CN2TRSケーブル
    2 (TXD)Ring
    3 (RXD)Tip
    5 (GND)Sleeve

    AE-ADM3202とRaspberry Piの接続

    AE-ADM3202 CN1Rapsberry Pi GPIO
    1 (GND)Ground
    2 (TX-IN)GPIO 14
    3 (RX-OUT)GPIO 15
    4 (VCC) [U1の電源入力]3.3V Power
    5 (電源) [U2の電源流力]無接続

    Raspberry Piの設定

    Raspberry Piでシリアル通信を有効にするために,ターミナルでraspi-configを起動します.

    $ sudo raspi-config

      メニューから Interface Options > Serial Port を選択し,以下の質問に答えます.

      • Would you like a login shell to be accessible over serial? → No
      • Would you like the serial port hardware to be enabled? → Yes

      これにより,/dev/ttyAMA0が有効になります.

      動作確認

      電源ONコマンドを送信してみます.

      $ echo -e "ka 01 01\r" > /dev/ttyAMA0

      電源OFFコマンドを送信してみます.

      $ echo -e "ka 01 00\r" > /dev/ttyAMA0

      トラブルシューティング

      接続ピンの確認

      ケーブルの接続が正しいか確認してください.

      ディスプレイの Set ID を確認

      ディスプレイのSetIDは「01〜10」の範囲で設定可能です.ディスプレイの「menu>General>Set Id」を確認してください.Set IDが02の場合,コマンドは ka 02 01\r のようになります.

      あとはスマートホームなどと連携すれば「ディスプレイ点けて/消して」を操作できるようになりますね.

    1. GBAで遊ぶ準備

      GBAで遊ぶ準備

      昔買った MINI EZ-USB が発掘されたので久しぶりに遊びます.

      一方で昔参考にしたサイトはことごとく閉鎖されていたのが時代を感じます.今回はULA Host v2を利用させてもらいました.

      1. Zadigを利用してWinUSBドライバを適用します.
      2. ULA-Host V2を起動し,gba_boot.bixを転送します.
      3. 不明なデバイスになる場合は,Zadigを利用して再度WinUSBドライバを適用します.
      4. ULA-Host V2を起動し,Connectボタンを押します.
      5. ULA-Host V2を利用できるようになります.

      ULA-Host V2を起動する際に mfc140.dll が見つからないというエラーが出る場合は Visual C++ 2015 ランタイム をインストールすることで解決します.

      ULA-Host V2が利用できるようになりました.さてどうやって遊ぼうか.それが問題です.

    2. Nature RemoのローカルAPIを利用する

      Nature RemoはローカルAPIが用意されており,クラウドAPIに接続できない場合も利用することができる(参照).

      IPアドレスの確認

      _remo._tcp サービスを利用して Nature Remo のIPアドレスを確認します.

      $ dns-sd -B _remo._tcp
      Browsing for _remo._tcp
      DATE: ---Wed 15 Nov 2017---
      12:27:52.349  ...STARTING...
      Timestamp     A/R    Flags  if Domain               Service Type         Instance Name
      12:27:52.603  Add        2  12 local.               _remo._tcp.          Remo-XXXXXX

      Instance Name の Remo-XXXXXX がホスト名なのでRemo-XXXXXX.localでアクセスすることができます.また,IPアドレスは以下のコマンドで確認することができます.

      $ dns-sd -G v4 
      DATE: ---Wed 15 Nov 2017---
      12:30:58.520  ...STARTING...
      Timestamp     A/R Flags if Hostname                               Address                                      TTL
      12:30:58.735  Add     2 12 Remo-XXXXXX.local.                     10.0.1.3                                     120

      信号の受信

      GET /messages では,最後に受信した信号を取得することができます.Nature Remoに向けてリモコンの信号を送信した後に以下のコマンドで確認することができます.ここで,X-Requested-Withヘッダは必須です.

      $ curl -H "Content-Type: application/json" -H "X-Requested-With: local" Remo-XXXXXX.local/messages

      信号の送信

      POST /messages では,信号を送信することができます.基本的にはGET /messages で取得したデータそのまま指定することで利用することができます.

      $ curl -X POST -H "Content-Type: application/json" -H "X-Requested-With: local" Remo-XXXXXX.local/messages -d '<信号>'

      Nature Remo 2のローカルAPI

      Nature Remo 2でローカルAPIを利用するときに,時間を開けて利用する場合(時間ではない可能性もあります)本体のステータスLEDが赤色で点滅して再起動しているような動作が確認されることがあります.

      定期的にダミー信号を送ってみるなどを行ってみた結果,今のところ回避することができないようです.

    3. ProxmoxのVMに既存のリソースを割り当てる

      ProxmoxのVMに既存のリソースを割り当てる

      Proxmoxのqm setコマンドは,仮想マシン(VM)の設定を変更するために使用されます.このコマンドを使うことで,VMの構成(CPU,メモリ,ディスク,ネットワークなど)を簡単に調整できます.

      # qm set <VMID> <option>

      HDDをパススルーする場合

      # qm set <VMID> -scsi<n> /dev/sdX
      • <VMDI> : ディスクを追加したいVMのID
      • -scsi<n>: ディスクの接続形式 (例:-scsi0, -scsi1)
      • /dev/sdX: 追加するディスク (例:/dev/sdb)

      -scsi<n>の代わりに-virtio<n>や-sata<n>も利用可能.

      既存イメージを追加する場合

      # qm set <VMID> -scsi<n> </path/to/image.qcow2>

    4. ProxmoxでUEFIによるOSの起動ができない時の対処

      ProxmoxでUEFIによるOSの起動ができない時の対処

      proxmoxを利用してvmを作る場合,BIOSの既定はSeaBIOSであるが,OVMF(UEFI)を選択することができる.この時,OVMF(UEFI)を選択肢,EFIディスクを追加する時にPre-Enroll keysのチェックを入れたまま初期起動すると,メディアがAccess Deniedになる場合がある.その場合の解決方法.

      1. Ctrl + Alt + Deleteで再起動
      2. F2で設定画面に入る
      3. Device Managerに入る
      4. Secure Boot Configurationに入る
      5. Reset Secure Boot Keys

      以上で起動するようになる.

    5. LinuxでSATAのHDDをホットスワップで取り出す

      BIOSでSATAポートがホットプラグに対応している場合,ハードウェアレベルでSATAのHDDを安全に取り出すことが可能.

      OSがデバイスの取り出しを認識していない場合,IOが発生しているとデータ消失などが発生するため,以下ので順で取り出しを行う.

      1. マウント解除
      2. デバイスを認識解除
      3. HDDを取り出す

      マウント解除

      HDDがマウントされている場合はマウントを解除します

      # umount /dev/sdX

      デバイスを認識解除

      デバイスがマウント解除されたら,Linuxカーネルから安全にデバイスを削除します

      # echo 1 | tee /sys/block/sdX/device/delete

      Linuxカーネルからデバイスが削除されていることはfdiskなどで確認することができます

      # fdisk -l

      HDDを取り出す

      Linuxカーネルからデバイスが削除されていることが確認できたら物理的にHDDを取り出します.

    6. Raspberry piでPPPoE接続する

      Raspberry piでPPPoE接続する

      Raspberry piでPPPoE接続してルータとして動作するように設定する.

      インストール

      pppoeconfをインストールします

      # apt install pppoeconf

      起動

      # pppoeconf
      1. ネットワークインタフェースを検出
      2. ユーザ名とパスワードを入力
      3. 設定の保存

      接続の開始

      # pon dsl-provider

      接続の終了

      # poff dsl-provider

      自動起動設定

      # vi /etc/network/interfaces
      
      auto dsl-provider
      iface dsl-provider inet ppp
      pre-up /bin/ip link set eth1 up
      provider dsl-provider

      確認

      $ ip addr
      
      ...中略
      X: ppp0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1454 qdisc pfifo_fast state UNKNOWN group default qlen 3
          link/ppp 
          inet xxx.xxx.xxx.xxx peer xxx.xxx.xxx.xxx/32 scope global ppp0
             valid_lft forever preferred_lft forever
    7. 名前サンプル

      端末に名前をつける場合にどのようにつけるか悩むことがあるので,色々なシリーズで名前をつけるサンプル.A~Zでつけると無理が多い.

      ※ChatGPT製

      フルーツ

      A: Apple (アップル)

      B: Banana (バナナ)

      C: Cherry (チェリー)

      D: Durian (ドリアン)

      E: Elderberry (エルダーベリー)

      F: Fig (イチジク)

      G: Grape (グレープ)

      H: Honeydew (ハニーデュー)

      I: Indian Fig (インディアンフィグ)

      J: Jackfruit (ジャックフルーツ)

      K: Kiwi (キウイ)

      L: Lemon (レモン)

      M: Mango (マンゴー)

      N: Nectarine (ネクタリン)

      O: Orange (オレンジ)

      P: Pineapple (パイナップル)

      Q: Quince (クインス)

      R: Raspberry (ラズベリー)

      S: Strawberry (ストロベリー)

      T: Tangerine (タンジェリン)

      U: Ugli Fruit (ウグリフルーツ)

      V: Voavanga (ヴォアヴァンガ)

      W: Watermelon (スイカ)

      X: Ximenia (キメニア)

      Y: Yellow Passion Fruit (イエローパッションフルーツ)

      Z: Ziziphus (ナツメ)

      A: Amber (琥珀色) #FFBF00

      B: Blue (青) #0000FF

      C: Cyan (シアン) #00FFFF

      D: Denim (デニムブルー) # 1560BD

      E: Emerald (エメラルドグリーン) #50C878

      F: Fuchsia (フクシア) #FF00FF

      G: Gold (金色) #FFD700

      H: Honey (蜂蜜色) #FFC30B

      I: Indigo (藍色) #4B0082

      J: Jade (翡翠色) #00A86B

      K: Khaki (カーキ) #C3B091

      L: Lavender (ラベンダー) #E6E6FA

      M: Magenta (マゼンタ) #FF00FF

      N: Navy (紺色) #000080

      O: Olive (オリーブ) #808000

      P: Purple (紫) #800080

      Q: Quartz (ローズクォーツ) #AA98A9

      R: Red (赤) #FF0000

      S: Silver (銀色) #C0C0C0

      T: Teal (青緑) #008080

      U: Umber (ウンバー) #635147

      V: Violet (菫色) #8F00FF

      W: White (白) #FFFFFF

      X: Xanadu (ザナドゥグリーン) #738678

      Y: Yellow (黄色) #FFFF00

      Z: Zaffre (ザフルブルー) #0014A8

      宝石

      A: Amethyst アメジスト(紫水晶)

      B: Beryl ベリル(緑柱石)

      C: Citrine シトリン(黄水晶)

      D: Diamond ダイヤモンド

      E: Emerald エメラルド

      F: Fluorite 蛍石(フローライト)

      G: Garnet ガーネット(柘榴石)

      H: Heliodor ヘリオドール

      I: Iolite アイオライト

      J: Jade 翡翠(ジェイド)

      K: Kunzite クンツァイト

      L: Lapis Lazuli ラピスラズリ

      M: Moonstone ムーンストーン(月長石)

      N: Nephrite ネフライト(軟玉)

      O: Onyx オニキス

      P: Peridot ペリドット

      Q: Quartz クォーツ(水晶)

      R: Ruby ルビー

      S: Sapphire サファイア

      T: Topaz トパーズ

      U: Unakite ユナカイト

      V: Variscite バリサイト

      W: Wulfenite ウルフェナイト

      X: Xenotime ゼノタイム

      Y: Yellow Sapphire イエローサファイア

      Z: Zircon ジルコン

      天体関係

      A Andromeda 銀河(アンドロメダ銀河) アンドロメダ

      B Betelgeuse 恒星(オリオン座α星) ベテルギウス

      C Callisto 木星の衛星 カリスト

      D Deneb 恒星(はくちょう座α星) デネブ

      E Europa 木星の衛星 エウロパ

      F Fomalhaut 恒星(みなみのうお座α星) フォーマルハウト

      G Ganymede 木星の衛星(最大の衛星) ガニメデ

      H Heliosphere 太陽圏 ヘリオスフィア

      I Io 木星の衛星 イオ

      J Jupiter 惑星(木星) ジュピター(木星)

      K Kuiper Belt 太陽系外縁天体 カイパーベルト

      L Lyra 星座(こと座) リラ(こと座)

      M Mercury 惑星(水星) マーキュリー(水星)

      N Neptune 惑星(海王星) ネプチューン(海王星)

      O Orion 星座(オリオン座) オリオン

      P Pluto 冥王星(準惑星) プルート(冥王星)

      Q Quasar クエーサー(準恒星状天体) クエーサー

      R Rigel 恒星(オリオン座β星) リゲル

      S Sirius 恒星(おおいぬ座α星) シリウス

      T Titan 土星の衛星 タイタン

      U Uranus 惑星(天王星) ウラヌス(天王星)

      V Vega 恒星(こと座α星) ベガ

      W Whirlpool Galaxy 渦巻銀河(M51) ウォールプール銀河

      X X-Ray Binary X線連星 エックス線連星

      Y Yildun 恒星(こぐま座δ星) ユルドゥン

      Z Zodiac 黄道(星座群) ゾディアック(黄道)

    8. Raspberry Pi (buster) のアップグレード

      Raspberry Pi (buster) のアップグレード

      長らく放置していたRaspberry Pi 3 Model Bが3台,busterな機体をアップグレードします.

      /etc/apt/sources.listおよび/etc/apt/sources.list.d/*.listのすべての「buster」という単語を「bullseye」に置き換えます

      その後アップデートを行います.

      $ sudo apt update

      依存関係によりアップグレードに失敗するので以下をインストールします.インストール中の選択肢は全て「Yes」

      $ sudo apt install libgcc-8-dev gcc-8-base

      アップグレードします.アップグレード中の選択肢は全て「Yes」

      sudo apt full-upgrade

      そして/boot/config.txt を編集します.

      「dtoverlay=vc4-fkms-v3d」を含む行の先頭に # 記号を付けてコメント アウトします.
      ファイルの下部の [all] セクションに「dtoverlay=vc4-kms-v3d」という行を追加します.これは「kms」であり「fkms」ではないことに注意.

      再起動して無事に起動すれば成功.

      参考:https://forums.raspberrypi.com/viewtopic.php?t=323279

    9. Raspberry Pi でオーディオサーバを作る

      Raspberry Pi でオーディオサーバを作る

      Raspberry Pi model B と Sound Blaster X-Fi Go! Pro が転がっていたので,これらを利用してオーディオサーバを構築します.

      今回はShairport-Syncとmpd (Music Player Daemon)を構築します.

      インストールと設定

      # apt install shairport-sync mpd

      Sound Blasterのハードウェア番号を確認します.

      $ aplay -l
      **** List of PLAYBACK Hardware Devices ****
      card 0: Headphones [bcm2835 Headphones], device 0: bcm2835 Headphones [bcm2835 Headphones]
        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 1: vc4hdmi [vc4-hdmi], device 0: MAI PCM i2s-hifi-0 [MAI PCM i2s-hifi-0]
        Subdevices: 1/1
        Subdevice #0: subdevice #0
      card 2: Pro [Sound Blaster X-Fi Go! Pro], device 0: USB Audio [USB Audio]
        Subdevices: 0/1
        Subdevice #0: subdevice #0

      Sound Blaster X-Fi Go! Pro が hw:2,0と分かったので,shairport-syncの設定ファイル(/etc/shairport-sync.conf)を編集します

      # 抜粋
      general = 
      {
          interpolation = "soxr";
          output_backend = "alsa";
      };
      
      alsa =
      {
          output_devce = "hw:2.0";
          mixer_control_name = "PCM";
          mixer_device = "PCM";
      };

      Shairport-syncを起動します.

      # systemctl enable --now shairport-sync

      次にmpdの設定ファイル(/etc/mpd.conf)を編集します.ただし,NASのmpd用のディレクトリを/mnt/mpdにマウントしている前提です.

      # 抜粋
      music_directory    "/mnt/mpd/music"
      playlist_directory "/mnt/mpd/playlists"
      bind_to_address    "0.0.0.0"
      port               "6600"
      
      audio_output {
          type           "alsa"
          name           "Alsa Device"
          device         "hw:2,0"
          mixer_type     "software"
      }

      mpdを起動します.

      # systemctl enable --now mpd