hiro yamamoto works

マイコンハード、ソフトを作ったりしています。
お家や現場のお困りごと解決に!
内容利用は自己責任でお願いします。

赤外線リモコンデータを調べる(SHARP AQUOS LC-32F5リモコンが使いにくい)

2024-06-17 09:35:30 | 赤外線リモコン

この記事は書きかけなので、変更するかもしれません。
この記事に関係する最新の記事があります。

ポイント
AQUOSだけどプロトコルはパナソニックだった。
ライブラリ"IRremoteESP8266"を使ってみた。
シリアルモニタからリモコン送信できるスケッチを書いてみた。

ユニークな卵型リモコンなので、掴みにくく落下を繰り返して現在の姿になっています。
ボタン数が少ないので、例えば地上波、BS/CS切り換えなんかは、
”ホーム”を押してメニューから選ばなければならないので不便です。
汎用リモコンでは、直接切り換えられるボタンがありますが、本当に使えるのか心配です。
購入の前に調べてみようと思いました。該当するコマンドがわからず、可否はまだ判明していません。
いろいろわかったことを書いておきます。

今回は"IRremoteESP8266"ライブラリを使わせていただきました。
というのは、"IRRemote"ライブラリの"ReceiveDump"では
Kaseikyo: 8 bit parity is not correct. Expected=0xCF received=0xD152128F5A address=0x128 command=0x52
 >>>>Protocol=Kaseikyo_Sharp Address=0x128 Command=0x52 Parity fail Raw-Data=0xD152128F5AAA 48 bits LSB first
 Send with: IrSender.sendKaseikyo_Sharp(0x128, 0x52, );
以降省略("決定ボタン")
というようなシリアルモニタ表示になります。
その中に"not correct"とか"Parity fail"の文字が読み取れます。
試しに"IrSender.sendKaseikyo_Sharp()"に、表示されたAddress、commandを
引数に入れて送信してみましたが無反応でした。
何かの設定で使えるのかもしれませんが、他のライブラリを試すことにしました。

"IRremoteESP8266"(ESP8266とありますがESP32でも使えます。)
感謝して使わせていただきます。

AQUOSだけどプロトコルはパナソニックだった。
サンプルスケッチ"IRrecvDumpV2"を使って調べます。("決定ボタン"押した時)
Protocol  : PANASONIC
Code      : 0x555AF1484A8B (48 Bits)
中略
uint32_t address = 0x555A;
uint32_t command = 0xF1484A8B;
uint64_t data = 0x555AF1484A8B;
と表示されました。
SHARPのAQUOSなんですがプロトコルはパナソニックなんですね。

サンプルスケッチ"IRsendDemo"のloop()中へ
irsend.sendPanasonic(0x555A, 0xF1484A8B, 48); //引数に直接command 例 決定ボタン 48bit repeatなし
追加してみると操作できました。

シリアルモニタからリモコン送信できるスケッチを書いてみたので載せておきます。
シリアルモニタの上のところに"command"の含まれる引数をキー入力して"送信"ボタン又はEnterキー押す。
前述の例では、2番め引数の"0xF1484A8B"の中の"F148"は固定、以降の3桁"4A8"が"command"、
最後の1文字は"1484A8"のパリティです。
未知の"command"を試すにはパリティを計算して入れる必要あり。(面倒くさい 改善の余地)

パリティ計算の参考
16進数:1,4,8,4,A,8
2進数で表現すると:0001,0100,1000,0100,1010,1000
1個めと2個めのXOR(排他的論理和)を求め、3個めとXORを求め・・・やっていくと
0001 XOR 0100 = 0101 , 0101 XOR 1000 = 1101 ,1101 XOR 0100 = 1001 , 1001 XOR 1010 = 0011
0011 XOR 1000 = 1011(16進数で"B"になる)

//省略
const uint16_t kIrLed = 4;  // ESP8266 GPIO pin to use. Recommended: 4 (D2).
uint32_t IRcommand = 0;
String SerialRead;
 //中略
//loop()関数の中へ
if (Serial.available()) { //シリアルモニタからcommand部分だけ打ち込んでEnterすると
    SerialRead = Serial.readStringUntil('\n'); //終端文字'\n'検出まで読み文字列全体を変数へ(Stringオブジェクト)
    SerialRead.trim(); //念の為入れておく
    //strtoul関数はunsigned long int型の数値に変換します
    IRcommand = strtoul(SerialRead.c_str(), NULL, 16);//基数16
    Serial.println(SerialRead);//変換前の文字列 デバック
    Serial.println(IRcommand, HEX);//変換後の数値をHEX表示 デバック
    /*赤外線送信の構文参考 sendSharp(const uint16_t address, uint16_t const command,
                         const uint16_t nbits, const uint16_t repeat)*/
    Serial.println("Sharp AQUOS TV sendPanasonic");
    //irsend.sendPanasonic(0x555A, 0xF148A887, 48); //引数に直接command 例 音量- 48bit repeatなし
    irsend.sendPanasonic(0x555A, IRcommand, 48); // 48bit repeatなし
}
//省略


つづくかも



最新の画像もっと見る

コメントを投稿