DWM3000EVBを用いたUWB位置測位④ ~AirTag傍受編~

## 1. 本記事の目標
+ DWM3000EVBでAirTagのUWBパケットを傍受する
+ AirTagのUWBパケットをPC上で可視化する
+ ![AirTag傍受](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3362010/7b5772c1-7fb5-a875-6784-0d7a4dbf6dc5.gif)

## 2. 準備物
+ セットアップ用PC (ここでは今回使用したものを記載)
    + Panasonic社 Let's note CF-SV1 (Windows 11)
+ 制御用マイコン
    + Nordic Semiconductor社 nRF52840 DK　1台
        + nRF52840を手軽に動かすためのキット
+ UWB信号受信デバイス
    + Qorvo社 DWM3000EVB 1台
        + DWM3000を手軽に動かすためのキット
+ アクセサリ
    + ケーブル (MicroUSB <-> USB Type-A)　2本
    + USB Type-A ハブ 1つ
+ PC上のソフトウェア (インストール手順も含めて後述します)
    + [Segger Embedded Studio (SES) for ARM V6.20](https://www.segger.com/downloads/embedded-studio/)
        + nRF52840にプログラムを書き込むための統合開発環境
    + [DWM3000 API Software and API Guide](https://www.qorvo.com/products/d/da007992)
        + UWB送受信デバイスをnRF52840で動作させるためのサンプルプログラム
    + [nRF52840のSoftware Development Kit (SDK)](https://www.nordicsemi.com/-/media/Software-and-other-downloads/SDKs/nRF5/Binaries/nRF5SDK160098a08e2.zip)
        + nRF52840でサンプルプログラムを動かすときに必要となるプログラム一式
    + Tera Term
        + 画面を持たないnRF52840に仮想的な画面を用意して動作確認を行う

## 3. 各種デバイスのセットアップ
+ 詳しくはこちら: [DWM3000EVBを用いたUWB位置測位① ~セットアップ編~](https://qiita.com/tukurida/items/e17481a2f9a9c7532dc1)

## 4. デモプロジェクトのパラメータの変更
+ パラメータを変更するファイルは以下のパスから
    + 変更するファイルは"default_config.h"
    + DW3xxx_QM33_XR6.0C\DW3xxx_XR6.0C_24Feb2022\Release_XR6.0C\Software\Slotted_TWR_Demo_ARM\nRF52840_DK\Sources\twr_demo\twr_demo\NRF_Juniper\twr_demo\Src\config\default_config\config.h
+ デフォルトだとDW3000が受信するパケット構成がAirTagが発するUWBパケットの構成と異なるため，一致させる必要がある
    + デフォルトのパラメータは以下
    ![スクリーンショット (73).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3362010/07fc85eb-30b9-3d6f-ef0c-6599b5014801.png)
+ #define DEFAULT_STS_MODEのパラメータを"DWT_STS_MODE_ND"に変更
    + UWBパケットにはpayloadが含まれておらず，ND:No Dataに変更する必要があった
    + パラメータの選択肢は次の4つ
        + DWT_STS_MODE_1
        + DWT_STS_MODE_2
        + DWT_STS_MODE_SDC
        + DWT_STS_MODE_ND
        + DWT_STS_MODE_OFF
+ #difne DEFAULT_PCODEのパラメータを"11"に変更
    + PCODEはUWBパケットの"STS"fieldsで生成される疑似乱数のことだと考えられる．
    + 9または11が選択可能
    
+ DEFAULT_SFDTOを128+1+8-8に変更
    + 64+1+8-8だとパケットを受信する前にタイムアウトになり，エラーパケットが多く表示されてしまうから
    + 変更しなくてもよい
    
+ 変更後のパラメータは以下
    ![スクリーンショット (75).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3362010/4eb29b29-c6bd-1b9f-6a6a-ac3109b3e1ad.png)

## 5. nRF52840にデモプログラムを書き込む
+ [こちらの記事(DWM3000EVBを用いたUWB位置測位② ~PCデモ編~)](https://qiita.com/tukurida/items/9ebd68ab97daff315d7e)の4.~6.を参照

## 6. AirTagのUWB信号を受信
+ nRF52840とPCを接続
+ Tera Term上で"listener"と入力
    + [こちらの記事(DWM3000EVBを用いたUWB位置測位② ~PCデモ編~)](https://qiita.com/tukurida/items/9ebd68ab97daff315d7e)の8.を参照
    + 傍受の準備完了
+ iPhoneのアプリ「探す」からAirTagを探す
+ 下のような画面になる
<img width="300" alt="IMG_0024.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3362010/359c9931-7623-7ee5-e136-7a3a8b4747ba.jpeg">
    
+ Tera Term上で受信パケットが表示される(傍受成功！！！)
![スクリーンショット (78).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3362010/f9e90d99-1128-a2be-afbb-b187c757c8c8.png)

## 7. 参考文献
+ Dieter Coppens, Adnan Shahid, Sam Lemey, Ben Van
Herbruggen, Chris Marshall, and Eli De Poorter, "[An Overview of UWB Standards and
Organizations (IEEE 802.15.4, FiRa,
Apple): Interoperability Aspects and
Future Research Directions](https://arxiv.org/pdf/2202.02190.pdf)," *IEEE Access*, vol. 10, pp. 1-23, 2022.

## 8. 関連記事
+ [DWM3000EVBを用いたUWB位置測位① ~セットアップ編~](https://qiita.com/tukurida/items/e17481a2f9a9c7532dc1)

+ [DWM3000EVBを用いたUWB位置測位② ~PCデモ編~](https://qiita.com/tukurida/items/9ebd68ab97daff315d7e)

+ [DWM3000EVBを用いたUWB位置測位③ ~iOSデモ編~](https://qiita.com/tukurida/items/4b8fd6bcae04b0c1fb58)