HN 日本語サマリー

← 一覧へ戻る
プログラミング

433MHz TUIスキャナー:FT232HをCC1101に接続して使用

433MHz TUI scanner: using a FT232H connected to a CC1101 (blog.jacq.cc)

20 pointsby xx__yy7 コメント

要約

この記事では、USB-SPIブリッジICであるFT232Hと433MHz無線モジュールCC1101を組み合わせて、ターミナル上で動作する無線信号スキャナーを作成する方法を解説しています。特別なマイクロコントローラーやはんだ付けは不要で、6本のジャンパーワイヤーとPythonスクリプトで構成されます。このセットアップにより、ゲートリモコンなどの433MHz帯の無線信号をキャプチャし、その波形やデータを視覚化・解析することが可能になります。特に、KeeLoqのような暗号化された信号のデコードにも言及しています。

全文翻訳

CC1101をFT232H上で:ターミナル上の433 MHzスキャナー

私たちのゲートリモコンは433 MHzで送信しており、その信号がどのようなものか見てみたかったのです。安価なAliExpressのコピーリモコンはそれらを学習できませんでした。そこで、CC1101無線モジュールをCJMCU-232H(ラップトップに直接差し込めるFT232Hボード)に搭載しました。6本のジャンパーワイヤーとPythonスクリプトだけで、フラッシュするマイクロコントローラーも、はんだ付けする部品もありません。

このセットアップとテストは、FTDIボードを433 MHzボード(AliExpressで購入)に接続でき、それらが連携して安物のリモコンからの簡単な信号をスキャンして視覚化できることを証明するためだけのものでした。

[画像: リグの図:ターミナルウィンドウには緑色の信号バーが表示され、433.92 MHzに1つの高いスパイクがあります。紫色のFT232HボードにはUSBプラグがあり、6本のカラフルなワイヤーが黒いアンテナ付きの小さな青いCC1101無線モジュールに接続されています。キーフォブがアンテナに無線波を送信しています]

リグの図:FT232Hボード、6本のワイヤー、CC1101とそのアンテナ。

  • CC1101 433 MHzモジュールとそのアンテナ。私のものはE07-M1101D(Ebyteのボードレイアウト、SMAソケット付き)で、AliExpressで約3.40オーストラリアドルでした。
  • CJMCU-232H:FTDI FT232HチップとUSB-Aプラグを備えた紫色のボード。
  • ブレッドボード、4本のオス-メスジャンパーワイヤー、2本のメス-メスジャンパーワイヤー。
  • Linux with Python 3。pyftdiを使用するスクリプト。
  • テスト用に433 MHzで送信するもの。私はコピーリモコンを使用しました。

CC1101はSPIで通信します。通常のUSB-シリアルスティック(CP2102、CH340)はシリアルしか扱えないため、それを駆動できません。FT232HはUSBからSPIを処理するため、ラップトップ上のPythonは無線と直接通信できます。一般的な方法はESPHomeを実行するESP32を使用することですが、これは変更するたびにファームウェアをビルドしてフラッシュする必要があることを意味します。

ステップ1:ファイルのダウンロード

セクション「ステップ1:ファイルのダウンロード」

  • rf-scan-ft232h.py:スキャナー
  • keeloq-capture-ft232h.py:CC1101を設定し、そのデータをサンプリングします。スキャナーがこれを使用し、単独でもKeeLoqリモコンのプレスをキャプチャします。
  • keeloq-check.py:両方が使用するKeeLoqデコーダー。
  • 70-ftdi-ft232h.rules:ユーザーがボードを開けるようにするためのudevルール。

4つすべてがMITライセンスです。3つのスクリプトを1つのフォルダに保存してください。

mkdir -p ~/cc1101 && cd ~/cc1101
curl -O https://blog.jacq.cc/cc1101-scanner/rf-scan-ft232h.py \
     -O https://blog.jacq.cc/cc1101-scanner/keeloq-capture-ft232h.py \
     -O https://blog.jacq.cc/cc1101-scanner/keeloq-check.py \
     -O https://blog.jacq.cc/cc1101-scanner/70-ftdi-ft232h.rules

ステップ2:pyftdiとudevルールのインストール

セクション「ステップ2:pyftdiとudevルールのインストール」

python3 -m venv .venv
.venv/bin/pip install pyftdi
sudo cp 70-ftdi-ft232h.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules && sudo udevadm trigger
.venv/bin/python rf-scan-ft232h.py --self-test

ルールはFT232H(USB ID 0403:6014)にuaccessタグを付け、ログイン中のユーザーがそれを開けるようにします。スキャナーを実行するためにsudoは不要です。ルールをリロードした後、ボードを接続するか、一度抜いて再度接続してください。--self-testはハードウェアを必要としません。合成されたノイズのあるプレスと、私のコピーリモコンからの実際のフレームをデコードします。

CC1101のヘッダーはピン1、2、7、8のみを出力しています。ピン1は四角いパッドで、奇数ピンはボードの端に沿って走り、偶数ピンは内側にあります。

CC1101ピン名前CJMCU-232H
1GND4ピンヘッダーのGND
2VCC4ピンヘッダーの+3.3V。決して+5Vではなく、VCOREでもない
4CSNAD3
5SCKAD0
6MOSIAD1
7MISO / GDO1AD2
3, 8GDO0, GDO2未接続

[画像: 両方のボードを並べてワイヤーを描いた写真。紫色のCJMCU-232Hでは、上部の4ピンヘッダーに+5V(取り消し線付き)、+3.3V、GNDと表示され、側面の列にはAD0からAD7とラベル付けされています。青いCC1101では、8ピンヘッダーに番号が付けられています。赤はピン2を+3.3Vに、黒はピン1をGNDに、オレンジはピン4をAD3に、緑はピン7をAD2に、青はピン6をAD1に、黄色はピン5をAD0に接続しています。テキスト:ピン3と8は空のまま、決して+5Vではない]

6本のワイヤー。CJMCU-232Hはピン名を裏面にしか印刷していないため、ここに描かれています。

CJMCU-232Hはブレッドボードに装着します。CC1101はブレッドボードの外に置きます。その2x4ピンヘッダーはブレッドボードの列でピンをペアでショートさせてしまうからです。そのため、信号ワイヤーはオス側をADピンの隣のブレッドボードに、メス側をCC1101に接続します。電源ペアはメス-メスで、4ピンヘッダーに直接接続します。

[画像: ブレッドボードの図:CJMCU-232Hは行21から30にかけてブレッドボードをまたぎ、USBプラグは下部にあります。4本のジャンパーがAD3、AD2、AD1、AD0の隣の列jに差し込まれ、2本が4ピンヘッダーのGNDと+3.3Vピンに接続されています。CC1101はブレッドボードの隣に置かれています]

私のレイアウト:ボードのAD列を行21〜30に、ジャンパーをその隣の列jに配置。

  1. CC1101にアンテナをねじ込みます。
  2. まず、メス-メスワイヤーで電源を接続します:CC1101ピン1を4ピンヘッダーのGNDに、ピン2を+3.3Vに接続します。
  3. 次に、オス-メスワイヤーで信号を接続します:ピン4をAD3に、ピン7をAD2に、ピン6をAD1に、ピン5をAD0に接続します。
  4. +5VとCC1101のピン3と8は空のままにします。

[画像: 白いブレッドボード上の紫色のCJMCU-232H、USBプラグは下部。赤と茶色のジャンパーが、黒いアンテナが付いてベンチに置かれている青いCC1101モジュールから、ボード上部の4ピンヘッダーの2つのピンに伸びています]

まず電源:赤はピン2から+3.3Vへ、茶色はピン1からGNDへ。

[画像: 両方のボードが配線されています。グレー、紫、青、緑の4本のジャンパーがCC1101のヘッダーからブレッドボードのCJMCU-232Hの隣に差し込まれ、赤と茶色の電源ペアが4ピンヘッダーに接続されています]

6本すべて配線済み。緩んでいる黒とオレンジのジャンパーは関係ありません。

USBプラグはブレッドボードの端からぶら下がっています。短いUSB延長ケーブルがあると便利です。

.venv/bin/python rf-scan-ft232h.py

少なくとも60x20のターミナルウィンドウを使用してください。画面が表示される前に、スクリプトは無線をチェックします。チップのバージョン(私のものは0x14と表示されます)を読み取り、設定を書き込んでから再度読み取り、受信しているかを確認します。何かが失敗した場合、チェックすべきワイヤーの名前が表示されます。「CC1101が応答しません」は、電源、SCK、MISO、またはCSNを意味します。設定が間違って読み戻された場合は、MOSIの問題です。

受信のみを行います。送信はしません。

2つの画面があり、Tabキーで切り替えます。

キースイープリッスン
Tabマーカーでリッスン(Enterも可)スイープに戻る
← →マーカーを1列移動±10 kHzチューニング
[ ]マーカーを10列移動±100 kHzチューニング
p最強信号にマーカーを移動
z xマーカーを中心にズームインまたはアウト
b次のバンド
cクリアクリア
q終了して概要を表示終了して概要を表示

その他のオプション:

  • --band 315は別のバンドで開始します:433(デフォルト、432〜436 MHz)、315、300-348、387-464、779-928、all、または任意のSTART-STOP(MHz単位)。
  • --listen 433.92はリッスン画面で開始します。
  • --textは画面の代わりにプレーンな行を出力し、--seconds 30は30秒後に停止します。
  • --replay /tmp/rf-listen.logは、無線ではなく保存されたログをデコードします。

CC1101は300〜348、387〜464、779〜928 MHzのみをチューニングします。433 MHzモジュールとアンテナは、他のバンドの強い信号のみを受信します。

スイープはバンドを横切り、各ステップで信号強度(RSSI)を読み取ります。ステップごとにフィルターが設定されているため、スイープでギャップは生じません。画面には、ピークホールド(黄色い点)、その下のウォーターフォール(新しいものが上)、そして一番下に表示される最も強い信号が表示されます。

[画像: 402〜466 MHzにズームされたスイープ画面、1スイープあたり0.28秒。緑色のバーは-94 dBm程度のノイズフロアにあり、408、416、418〜420、442、456 MHz付近に安定したピークがあります。416 MHz付近のピークは約-65 dBmに達します。黄色いピークホールドドットは434 MHz付近で約-26 dBmまで上昇し、そこでリモコンが押されました。赤いマーカーは433.920 MHzにあります。下のウォーターフォールは、安定した信号をドットとダッシュの垂直線として、434 MHz付近の2つの短いバーストを表示します。一番下の行には最も強い信号が表示されます:434.119 MHzで-22 dBm]

402〜466 MHzにズームアウト、434 MHz付近でリモコンが押された状態。

  • 433バンドは0.16秒でスイープします。すべての3バンドで0.6秒かかります。
  • ここでのノイズフロアは約-90 dBmです。
  • 408、416、418〜420、442、456 MHz付近に安定した信号があります。416 MHz付近のものが最も強く、約-65 dBmです。
  • 434 MHz付近で押された信号は最大-22 dBmを記録します。アンテナに近いと、周囲のステップ(431.7〜436.5 MHz)にも影響します。
  • すべてのバンドで、782 MHzと883 MHzにさらに2つのピークが表示されます。どちらも携帯電話基地局のバンド内です。

マーカーを信号に合わせ、Tabキーを押します。リッスン画面はその周波数に留まり、CC1101が復調したものを記録します。過去数分間の信号強度、最後のフレームのパルスとビット、そして複数回聞いたコード(プロトコル推定付き)が表示されます。タイミングは/tmp/rf-listen.logに記録されます。

[画像: コピーリモコン:クロームと黒のキーフォブ、A、B、C、Dの4つの丸いボタン、キーリング]

コピーリモコン。固定コードを送信します:押すたびに同じビット。

内部には520B V2.1とマークされた基板があります:4つのボタン(K1〜K4)、433 MHzのSAW共振器(R433)、および12V 27Aバッテリー。チップはFMD FT60E021で、汎用8ビットマイクロコントローラーであり、専用のリモートエンコーダーではないため、送信されるコードはファームウェアから来ています。ゲートリモコンには代わりにKeeLoqエンコーダーチップ、HCS300が搭載されています。

[画像: コピーリモコンの基板、表面:U2とマークされたFMD FT60E021チップが左上、X1とマークされた銀色のR433共振器がその下に、右側にK1〜K4の4つの白いプッシュボタン、右上に5.1Vの赤と青のダイオード、小さなトランジスタと抵抗器、右上にバッテリークリップ、右下にバネ]

基板:チップ(U2)、共振器(X1)、4つのボタン。

[画像: 8ピンチップのクローズアップ、FMD FT60E021と印刷され、左に小さなLED、右にJ3Yとマークされたトランジスタ]

チップ:FMD FT60E021マイクロコントローラー。

[画像: 基板の裏面:緑色のソルダーマスクに520B V2.1とマークされ、いくつかの銅トレースがあり、下端にバッテリー端子があります]

裏面。アンテナは基板に印刷された銅トレースです。

コピーリモコンの仕様、部品、取扱説明書は、そのデバイスページにあります:AliExpress 433 MHzコピーリモコン

[画像: リッスン画面(433.92 MHz、OOK、650 kHzフィルター、データは50 kHzでサンプリング)。信号強度グラフは-110 dBmのフロアに対して-50 dBmまでの7つの短いバーストを示し、その下にデコードされたフレームのドットがあります。最後のフレームのパルスとその下のビットが描かれています。複数回聞いたコードのリストには4行あります:0x0B80A4、0x0B80A2、0x0B80A1、0x0B80A8、すべて24ビット、EV1527、ID 0x0B80A、ボタン4、2、1、8、TE 340マイクロ秒、-18〜-20 dBm]

コピーリモコンの4つのボタン、それぞれ短く押した場合。

コピーリモコンはEV1527スタイルのコードを送信します:24ビット、20ビットID(0x0B80A)と4ビットのボタン。ボタンは0x0B80A1、0x0B80A2、0x0B80A4、0x0B80A8を送信します。最も短いパルス(TE)は340 µsです。プレスは-18〜-20 dBmで受信され、フロアは-88 dBmでした。リモコンはボタンが押されている間コードを繰り返すため、短いプレスごとに3〜7フレームが生成されました。

ボタンを押し続けると、リストにはさらに短いコード(12〜22ビット長)も表示されます。例えば0x80A4や0x0B80などです。これらは、ノイズで途切れた実際のコードの一部です。24ビットの行のみが本物です。

[画像: ボタンを押し続けた後のリッスン画面:0x0B80A2が111回、0x0B80A8が82回、0x0B80A4が62回、0x0B80A1が50回(すべて24ビットEV1527)検出されました。その間には、12〜22ビットの短い固定コードが12〜6回ずつ検出されており、例えば0x80A4、0x0B80、0x0B80Aなどがあります]

ボタンを押し続けた場合:4つの本物のコードと、その一部。

スクリプトはCC1101を433.92 MHzのOOKレシーバーとして設定し、Flipper ZeroのAM650設定(650 kHzフィルター、パケット処理なし)を使用します。チップは復調されたデータをGDO1ピンに出力します。このモジュールではGDO1はMISOとピンを共有しています:CSNが高い間は、チップと通信しているものはいません。そしてMISOがデータを運びます。

FT232HはすでにSPIモードで無線と通信しており、SPI読み取りは一定のレートでビットをクロックします。そのため、スクリプトは配線されていないチップセレクトピンAD4で2番目のSPIポートを開きます。そこから読み取ることでCSNは高く保たれ、MISOは50 kHzでクロックインされます。つまり20 µsごとに1サンプル、340 µsのパルスあたり約17サンプルです。スレッドがUSB読み取りを連続して行い、デコーダーが1と0の連続をパルス長に変換します。

無線がアイドル状態のとき、私のリグでの出力はほとんどが高く、短い低下があります。そのノイズはしばしばフレームの開始部分に直接入り込み、最初のビットの高パルスを飲み込みます。コピーリモコンの各フレームは24ビットではなく23ビットで出力されました。修正:そのビットを低パルスのみから読み取ります。EV1527では、1は長い高パルスと短い低パルス、0は短い高パルスと長い低パルスです。

スイープの場合、スクリプトは各ステップにチューニングし、チップがキャリブレーションして安定するまで1.2 ms待機し、RSSIレジスタを読み取ります。フィルターはステップと同じ幅に設定されているため、スイープでギャップは生じません。

結果

セクション「結果」

テストは非常に成功し、TUIはこれらのリモコンが何を出力できるかを学習し、確認するのに非常に役立つことがわかりました。

次:ゲートリモコン

セクション「次:ゲートリモコン」

次のプロジェクトはこれに基づいています:Richmondのゲートリモコンをスキャンして、それらが何を出力し、それがどのようなものかを確認します。これらは、GE-RCV1経由でガレージを開けるのと同じリモコンです。それぞれのリモコンにはMicrochip HCS300、KeeLoqローリングコードチップが搭載されています。ローリングコードリモコンは、同じものを二度送信すべきではありません。各プレスは66ビットのフレームです:リモコンのシリアル番号とボタンはクリアテキストで、32ビットの暗号化された部分にはカウンターが含まれており、各プレスで増加します。

OEMキーと信号を照合しようともします:KeeLoqのメーカーキー、各リモコン自身のキーがそこから作られています。一致するキーを見つけた場合、そのキー自体は公開しませんが、OEMリストからかブルートフォースで見つけられたかどうかだけを報告します。

この次の実験パートに非常に興奮しています。これは、解決すべき小さな探偵パズルになりつつあります。

質問やコメントはありますか?Hacker Newsで議論する。

変更履歴

  • 2026年11月2日:ステップ6:コピーリモコンの内部、基板、FT60E021チップの写真、および仕様と完全な分解を含むデバイスページへのリンク。
  • 2026年11月2日:初版公開。

このガイドはプレーンMarkdown形式で、LLMやスクリプト用に提供されています:cc1101-433mhz-scanner-ft232h.md。すべての投稿:APIとMarkdown

テキスト、写真、図:CC BY 4.0。コード:MIT。HomeLab Series (blog.jacq.cc) をクレジットして、共有および改変してください。ライセンスとプライバシー