1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【EXCEL】USB赤外線リモコンの送出

Last updated at Posted at 2025-04-06

やること

 Excelを用いて、ビット・トレード・ワン社のUSB赤外線リモコンアドバンスADIR01P(以下ADIR01P)から信号送出する。

 ADIR01P詳細は下記参照。
ADIR01P USB赤外線リモコンアドバンス | Bit Trade One, LTD

 また、上記以外にも下記にツールが紹介されている。
ホビー | Bit Trade One, LTD

事前確認:Qiitaでの記事

 ということで、以下の検索をしたところ、7件ヒットした。(2025/04/07時点)
「ADIR01P」の検索結果 - Qiita
 このうち2件は赤外線リモコンとは無関係であった。

USBIR_Remote_Controller_Advance_Libraryを使用

GitHub - bit-trade-one/ADIR01P-USB_IR_Remote_Controller_Advance にあるものを使用したものが1件。

すまーときりたん (Google Homeときりたんが家電を制御するよ!) #C# - Qiita
最終更新日 2017年11月27日 投稿日 2017年11月26日

UNIX系環境用コマンドライン操作ツールを使用

GitHub - Drunkar/bto_ir_advanced_cmd: Bit Trade One IR Remocon ADVANCE tool for Linux. を使用したものが4件。

Google AssistantとRaspberry Piで自宅の家電を操作する #Python - Qiita
最終更新日 2018年01月14日 投稿日 2017年10月29日

USB赤外線リモコンアドバンス(BitTradeOne)をRaspberry-Piで操作する #RaspberryPi - Qiita
投稿日 2017年05月24日

Slackから自宅のエアコンを操作する #初心者 - Qiita
最終更新日 2019年08月06日 投稿日 2019年08月05日

エアコンを外出先から遠隔操作(by MQTT) #Python - Qiita
最終更新日 2019年01月24日 投稿日 2016年12月26日

実現方法

 USBIR_Remote_Controller_Advance_Libraryを使用する。ただし、送出するための信号は、「赤外線送信アプリ(ADIR01P_Trns_CT_v12)」で学習したものを利用する。

赤外線送信アプリ

 以下より入手。
GitHub - bit-trade-one/ADIR01P-USB_IR_Remote_Controller_Advance
20250407_011500.jpg

 取り急ぎ、手持ちのDIGAのリモコンを記録する。
20250407_010000.jpg

 エクスポートでCSVファイルに出力する。
20250407_012000.jpg

USBIR_Remote_Controller_Advance_Library

赤外線送信アプリ同様に、以下より入手。併せてドキュメントも入手。
GitHub - bit-trade-one/ADIR01P-USB_IR_Remote_Controller_Advance
20250407_012500.jpg

 自分の場合は、USB_IR_Library_x64_v6.0.0.0.zipを使用し、「USB_IR_Library.dll」を C:\ に置いた。

 EXCELでエクスポートされたCSVファイルを開き、以下を使用する。

USB_IR_RCAL_x64_64bit
Option Explicit
'GitHub -bit - trade - one / ADIR01P - USB_IR_Remote_Controller_Advance
'https://github.com/bit-trade-one/ADIR01P-USB_IR_Remote_Controller_Advance
'
' DLLファイルの関数定義:USB_IR_Library_x64_v6.0.0.0.zip
' 「USB_IR_Remote_Controller_Advance_Library x64 64bit 版 取扱説明書 2022/11/21 x64 版 R01」より
' 以下の事例では、USB_IR_Library.dll は C:\ に置いている
' ("USB_IR_Library.dll"として、C:\Windows\System や C:\Windows\System32 に置いても良い)
Declare PtrSafe Function openUSBIR Lib "C:\USB_IR_Library.dll" (ByVal hRecipient As LongLong _
) As LongLong       ' USB IR Remote Controller Advance と接続をします。
Declare PtrSafe Function closeUSBIR Lib "C:\USB_IR_Library.dll" (ByVal HandleToUSBDevice As LongLong _
) As Integer        ' USB IR Remote Controller Advance との接続を切断します。
Declare PtrSafe Function writeUSBIRData2 Lib "C:\USB_IR_Library.dll" ( _
    ByVal HandleToUSBDevice As LongLong, _
    ByVal freq As Long, _
    ByRef data As Byte, _
    ByVal bit_len As Long _
) As Integer        ' USB IR Remote Controller Advance から赤外線コードを送信します。
' Windows API
Declare PtrSafe Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String _
) As LongPtr

' グローバル変数でハンドルを保持
Dim gHandleToUSBDevice As LongLong


Sub CallOpenUSBIR()
    Dim hRecipient As LongLong
    hRecipient = FindWindow("XLMAIN", vbNullString)
    gHandleToUSBDevice = openUSBIR(hRecipient)
    If gHandleToUSBDevice <> 0 Then
        MsgBox "openUSBIR関数が成功しました。ハンドル: " & gHandleToUSBDevice
    Else
        MsgBox "openUSBIR関数の呼び出しに失敗しました。"
    End If
End Sub


Sub CallCloseUSBIR()
    Dim closeResult As Integer
    If gHandleToUSBDevice = 0 Then
        MsgBox "openUSBIR関数をcloseUSBIR関数より先に実行してください。"
        Exit Sub
    End If
    closeResult = closeUSBIR(gHandleToUSBDevice)
    If closeResult = 0 Then
        MsgBox "closeUSBIR関数が正常に実行されました。"
        gHandleToUSBDevice = 0
    Else
        MsgBox "closeUSBIR関数の実行中にエラーが発生しました。エラーコード: " & closeResult
    End If
End Sub


Sub CallWriteUSBIRData2()
    Dim i As Single
    Dim j As Single
    j = 1                           ' ADIR01P_Trns_CT_v12のNo.1 (1行目)
    Dim freq As Long
    freq = Cells(j, 2)              ' 一般的なリモコンの周波数は、38kHz
    Dim irData(0 To 9599) As Byte
    For i = 1 To Cells(j, 3)
        irData(i * 2 - 2) = CStr(Val("&H" & Mid(Cells(j, i + 3), 3, 2)))
        irData(i * 2 - 1) = CStr(Val("&H" & Mid(Cells(j, i + 3), 5, 2)))
    Next i
    Dim bit_len As Long
    bit_len = Cells(j, 3) * 2
    Dim result As Integer
'    Debug.Print "ハンドル: " & gHandleToUSBDevice
'    Debug.Print "周波数: " & freq
'    Debug.Print "データ長: " & bit_len
'    For i = LBound(irData) To bit_len
'        Debug.Print "irData(" & i & ") = " & irData(i)
'    Next i
    result = writeUSBIRData2(gHandleToUSBDevice, freq, irData(0), bit_len)
    If result = 0 Then
        MsgBox "writeUSBIRData2関数が正常に実行されました。" & Cells(j, 1)
    Else
        MsgBox "writeUSBIRData2関数の実行中にエラーが発生しました。エラーコード: " & result
    End If
End Sub

Sub Main_SendIR()
    Call CallOpenUSBIR
    Call CallWriteUSBIRData2
    Call CallCloseUSBIR
End Sub

Main_SendIRを使用すると、DIGAの電源が切り替わった。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?