やること
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
USBIR_Remote_Controller_Advance_Library
赤外線送信アプリ同様に、以下より入手。併せてドキュメントも入手。
GitHub - bit-trade-one/ADIR01P-USB_IR_Remote_Controller_Advance
自分の場合は、USB_IR_Library_x64_v6.0.0.0.zipを使用し、「USB_IR_Library.dll」を C:\ に置いた。
EXCELでエクスポートされたCSVファイルを開き、以下を使用する。
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の電源が切り替わった。