質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Bluetooth

Bluetoothとは短距離の間でデータを交換するための無線通信規格である。固定・モバイル両方のデバイスから、短波の電波送信を行うことで、高いセキュリティをもつパーソナルエリアネットワーク(PAN)を構築する。

Android Debug Bridge(ADB)

Android Debug Bridge(ADB)は、接続された端末をAndroidエミュレータもしくはAndroidのインスタンスにアクセスに接続するためのツール。端末アクションをサポートし、様々なコマンドの実行の際に用いられるUnixシェルへのアクセスを提供します。

M5Stack

M5Stackは、小型のマイコンモジュールです。拡張モジュールが豊富に用意されており、センサと組み合わせることで測定機能を自由に追加することができます。

Wireshark

Wireshark(ワイヤシャーク)は、ネットワーク・アナライザソフトウェアです。 IP、DHCPなど800以上のプロトコルを解析できる機能があり、 Windows、Linux、BSD、Mac OS Xなどで利用が可能です。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

受付中

Atom liteを用いて2.4Ghz RFリモコン対応のシーリングを操作したい。

DRJV
DRJV

総合スコア5

Bluetooth

Bluetoothとは短距離の間でデータを交換するための無線通信規格である。固定・モバイル両方のデバイスから、短波の電波送信を行うことで、高いセキュリティをもつパーソナルエリアネットワーク(PAN)を構築する。

Android Debug Bridge(ADB)

Android Debug Bridge(ADB)は、接続された端末をAndroidエミュレータもしくはAndroidのインスタンスにアクセスに接続するためのツール。端末アクションをサポートし、様々なコマンドの実行の際に用いられるUnixシェルへのアクセスを提供します。

M5Stack

M5Stackは、小型のマイコンモジュールです。拡張モジュールが豊富に用意されており、センサと組み合わせることで測定機能を自由に追加することができます。

Wireshark

Wireshark(ワイヤシャーク)は、ネットワーク・アナライザソフトウェアです。 IP、DHCPなど800以上のプロトコルを解析できる機能があり、 Windows、Linux、BSD、Mac OS Xなどで利用が可能です。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0回答

-1評価

1クリップ

642閲覧

投稿2022/02/19 14:19

編集2022/02/19 14:28

1週間位悩んだのですが、解決できなかったため質問させてください。

●きっかけ、やりたいこと

switchbotとAlexaを持っており、基本的にそれを用いてエアコンやテレビなどを操作しているが、amazonで購入したシーリングライト(*1)のリモコンが赤外線対応でなく、2.4GhzのRFリモコン対応だったためswitchbotでリモコン登録ができなかった。そのため、arduinoを用いてどうにかalexaからswitchbotに指示を出し、switchbotからarduinoに赤外線を飛ばし、それをトリガーとしてarduinoからシーリングを操作するようなシステムを構築したいと考えたのがきっかけ。

●現状

こちらのサイト(*2)を参考にAtom liteとIR Remoteを購入し、Alexa~Atom Lite間の構築はできたが、Atom Liteからシーリングに指示を飛ばす部分が実装できていない。
調べていたところ、該当のシーリングがLampSmartというアプリ(*3)で制御できることがわかり、それをスマートフォンに入れて確かめていたところ、ble を利用して通信していることが分かった。
こちらのサイト(*4)を参考にAndroidのBT通信のログを作成し、wiresharkでbtsnoop_hci.logを読み込んだが、シーリングを操作した時間のログを調べても特定のServiceやUUIDが記載されているログを見つけられず、そもそもシーリングを操作するために利用するはずのwriteコマンドもひとつもなかった。
イメージ説明
①でRandom Numberが毎回設定される
②でBD_ADDRという項目でMACアドレスらしきものの記載があるが、①のRandom Numberのせいか、毎回アドレスが変わる。
③16-bit Service Class UUIDsという大項目がありUUID16が13行=52桁の16進数で構成されている。UUIDは32桁の16進数かと思われるのでここもいまいち理解できていない。
・LE Rand からCommand Completeまでの繰り返しで全体が構成されているが、重要な情報がどれなのか分かっていない。

nFR Connect(*5)アプリを利用してスマホ周囲の機器をスキャンしてみても該当のシーリング機器が見つけられないため、ServiceやCharacteristic、UUIDなども全く特定できていないが、シーリングを操作するボタンを押したタイミングで約900行程度ずつ新しいログが作成されているため、Bluetooth通信が使われていることは間違いないと思われる。

●教えていただきたいこと

Bluetoothの内容を解析し、シーリングを操作できるようにコーディングしたいです。

●リンク

*1: https://www.amazon.co.jp/dp/B09HX55LLG (購入したのは正確にはこの製品でないですが、同じリモコンが使われています。購入した製品のページにはリモコンが2.4Ghzであるとの記載がなかったため、こちらの製品を参考リンクとしてはります。)
*2: https://zenn.dev/toyotoyo/articles/dab070a42478a9
*3: https://play.google.com/store/apps/details?id=com.jingyuan.lamp&hl=en_US&gl=US
*4: https://luckypines.com/blog/2019-05-12_Android----------Bluetooth------------5844e20b5b98/
*5: https://play.google.com/store/apps/details?id=no.nordicsemi.android.mcp&hl=en&gl=US

●コード

コードは今の所下記のようになっています。

arduino

#include <M5Atom.h> #include <IRrecv.h> #include <IRremoteESP8266.h> #include <IRutils.h> #include <BleGamepad.h> const uint16_t kRecvPin = 32; const uint16_t kCaptureBufferSize = 1024; const uint8_t kTimeout = 50; const CRGB CRGB_BLE_CONNECTED(0x00, 0x00, 0xf0); const CRGB CRGB_BLE_DISCONNECTED(0x00, 0xf0, 0x00); IRrecv irrecv(kRecvPin, kCaptureBufferSize, kTimeout, true); decode_results results; // Somewhere to store the results BleGamepad bleGamepad; bool isBleConnected = false; void setup() { M5.begin(true, false, true); M5.dis.drawpix(0, CRGB_BLE_DISCONNECTED); irrecv.enableIRIn(); bleGamepad.begin(); } void loop() { M5.update(); // if (bleGamepad.isConnected()) { if (true) { // 赤外線信号確認だけの場合は true 固定 if (!isBleConnected) { M5.dis.drawpix(0, CRGB_BLE_CONNECTED); isBleConnected = true; Serial.println("Connected"); } // Check if the IR code has been received. if (irrecv.decode(&results)) { uint32_t value = results.value; Serial.println(value); switch(value){ case 16744575: Serial.println("ON"); // ONするためのコードを挿入 以下同様 sendButton(BUTTON_1); break; case 16711935: Serial.println("OFF"); sendButton(BUTTON_2); break; case 16724175: Serial.println("Bright"); sendButton(BUTTON_3); break; case 16748655: Serial.println("Dark"); sendButton(BUTTON_4); break; case 16754775: Serial.println("Yellow"); sendButton(BUTTON_5); break; case 16738455: Serial.println("White"); sendButton(BUTTON_6); break; case 16711111: Serial.println("Night"); sendButton(BUTTON_6); break; case 16722222: Serial.println("Max"); sendButton(BUTTON_6); break; default: Serial.println("他の値です"); } } } else { if (isBleConnected) { M5.dis.drawpix(0, CRGB_BLE_DISCONNECTED); isBleConnected = false; Serial.println("Disconnected"); } } delay(50); } void sendButton(uint8_t sendkey) { bleGamepad.press(sendkey); delay(1); bleGamepad.release(sendkey); }

ちょっとした情報でもアイデアでもアドバイスでもいただけるとありがたいです。
また、情報として不十分なところがありましたら追記して補足いたしますので
どうぞご指導おねがいいたします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Bluetooth

Bluetoothとは短距離の間でデータを交換するための無線通信規格である。固定・モバイル両方のデバイスから、短波の電波送信を行うことで、高いセキュリティをもつパーソナルエリアネットワーク(PAN)を構築する。

Android Debug Bridge(ADB)

Android Debug Bridge(ADB)は、接続された端末をAndroidエミュレータもしくはAndroidのインスタンスにアクセスに接続するためのツール。端末アクションをサポートし、様々なコマンドの実行の際に用いられるUnixシェルへのアクセスを提供します。

M5Stack

M5Stackは、小型のマイコンモジュールです。拡張モジュールが豊富に用意されており、センサと組み合わせることで測定機能を自由に追加することができます。

Wireshark

Wireshark(ワイヤシャーク)は、ネットワーク・アナライザソフトウェアです。 IP、DHCPなど800以上のプロトコルを解析できる機能があり、 Windows、Linux、BSD、Mac OS Xなどで利用が可能です。

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。