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

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

新規登録して質問してみよう
ただいま回答率
85.48%
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のプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

0回答

1883閲覧

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

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クリップ

投稿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

1#include <M5Atom.h> 2#include <IRrecv.h> 3#include <IRremoteESP8266.h> 4#include <IRutils.h> 5#include <BleGamepad.h> 6 7const uint16_t kRecvPin = 32; 8const uint16_t kCaptureBufferSize = 1024; 9const uint8_t kTimeout = 50; 10const CRGB CRGB_BLE_CONNECTED(0x00, 0x00, 0xf0); 11const CRGB CRGB_BLE_DISCONNECTED(0x00, 0xf0, 0x00); 12 13IRrecv irrecv(kRecvPin, kCaptureBufferSize, kTimeout, true); 14decode_results results; // Somewhere to store the results 15 16BleGamepad bleGamepad; 17bool isBleConnected = false; 18 19void setup() { 20 M5.begin(true, false, true); 21 M5.dis.drawpix(0, CRGB_BLE_DISCONNECTED); 22 irrecv.enableIRIn(); 23 bleGamepad.begin(); 24} 25 26void loop() { 27 M5.update(); 28 // if (bleGamepad.isConnected()) { 29 if (true) { // 赤外線信号確認だけの場合は true 固定 30 if (!isBleConnected) { 31 M5.dis.drawpix(0, CRGB_BLE_CONNECTED); 32 isBleConnected = true; 33 Serial.println("Connected"); 34 } 35 // Check if the IR code has been received. 36 if (irrecv.decode(&results)) { 37 uint32_t value = results.value; 38 Serial.println(value); 39 switch(value){ 40 case 16744575: 41 Serial.println("ON"); 42 // ONするためのコードを挿入 以下同様 43 sendButton(BUTTON_1); 44 break; 45 case 16711935: 46 Serial.println("OFF"); 47 sendButton(BUTTON_2); 48 break; 49 case 16724175: 50 Serial.println("Bright"); 51 sendButton(BUTTON_3); 52 break; 53 case 16748655: 54 Serial.println("Dark"); 55 sendButton(BUTTON_4); 56 break; 57 case 16754775: 58 Serial.println("Yellow"); 59 sendButton(BUTTON_5); 60 break; 61 case 16738455: 62 Serial.println("White"); 63 sendButton(BUTTON_6); 64 break; 65 case 16711111: 66 Serial.println("Night"); 67 sendButton(BUTTON_6); 68 break; 69 case 16722222: 70 Serial.println("Max"); 71 sendButton(BUTTON_6); 72 break; 73 default: 74 Serial.println("他の値です"); 75 } 76 } 77 } else { 78 if (isBleConnected) { 79 M5.dis.drawpix(0, CRGB_BLE_DISCONNECTED); 80 isBleConnected = false; 81 Serial.println("Disconnected"); 82 } 83 } 84 delay(50); 85} 86void sendButton(uint8_t sendkey) { 87 bleGamepad.press(sendkey); 88 delay(1); 89 bleGamepad.release(sendkey); 90}

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問