掃除ロボットをクラウドの奴隷にさせない - Valetudoで制御権を取り戻す

序文

今年の初めに、メルカリでDreame L10Proというロボット掃除機を購入しました。その際、Valetudoプロジェクトに興味を持ち、ロボットを改造しようと考えました。ロボット掃除機が届いた後、ドキドキしながらドキュメントに従い、ルート権限の取得を試みました。しかし、残念ながら中古品で、以前のユーザーがファームウェアを最新バージョンにアップグレードしていました。当時、最新バージョンのファームウェアのルート化方法は公開されていなかったため、断念せざるを得ませんでした。

しかし

当時、いくつかのルート化方法は非公開で、Valetudoプロジェクトチームに直接連絡して詳細を入手する必要がありましたが、うまく進展しませんでした。最近、新しいルート化方法が公開され、物理的なツールを併用する必要があることが分かりました。Valetudoプロジェクトチームは主にヨーロッパ地域で活動しており、アジア地域のユーザーには支援が難しい状況でした。しかし、新しい方法が公開されたことで、私はロボットの改造方法を研究し始めました。

徹底的な研究

実は、最初は新しいルート化方法がDEFCON 31と一緒に公開されたことを知りませんでした。日常的にコミュニティのメッセージを見ていたところ、最近のValetudoユーザーグループの活気ある議論から新しいルート化方法が公開されたことを知りました。それで、大いに興奮し、詳細を調査し始めました。実際のところ、変更は大したことはありませんでした。私のDreame L10Proの古いファームウェアバージョンでは、UARTラインをコンピュータに接続してシリアル通信を介してシェルにアクセスする方法でした。その際に問題になったのは、シェルがスポーンされなかったことです。新しいファームウェアでは、同じくUARTラインを接続し、以前は使用されていなかったUSB OTGラインを同時に接続すると、新しいファームウェアはUSBデバイスが接続されている場合、シェルがスポーンされるようになります(さらにはrootfsがマウントされますが、それは重要ではありません。私たちはただシェルが必要です)。 原理を大まかに理解したら、詳細な研究に取り掛かりました。まず、USBメスケーブルとUSBメモリを用意する必要がありました。ジャンパーワイヤーやシリアルチップなどは既に家にあったので、これ以上用意する必要はありませんでした。近くの百元店でUSB延長ケーブルとUSBメモリを購入しました。

原理を大まかに理解したら、詳細な研究に取り掛かりました。まず、USBメスケーブルとUSBメモリを用意する必要がありました。ジャンパーワイヤーやシリアルチップなどは既に家にあったので、これ以上用意する必要はありませんでした。近くの百円ショップでUSB延長ケーブルとUSBメモリを購入しました。

高価なUSBメモリ
高価なUSBメモリ

これで準備が整いました。ただし、USBケーブルの処理が必要です。ジャンパーワイヤーヘッドを接続するために、はんだごてを使うのが面倒だったので、ワニクリップなどの道具を使って固定しました。マルチメーターで各ピンが正しく接続され、短絡していないことを確認し、いよいよ作業を開始しました。

これらのデバッグワイヤーは以前にオシロスコープの購入で送られてきたものです
これらのデバッグワイヤーは以前にオシロスコープの購入で送られてきたものです

次にUSBからシリアルに変換する作業です。家に専用のUARTアダプタがなかったので、一時的にesp32を使用しました。esp32-devkitにはUSBからシリアルに変換するチップが内蔵されていました。ここでは、esp32のENピンをGNDに接続し、動作を停止させ、外部回路のみを使用する必要があります。

esp
esp

最後に、ドキュメントに示されている変換カードのPCBデザインから接続を導き出しました。接続する必要があるピンは以下の通りです:

  • TX -> TX(ここではRXと交換することが必要な場合もあります。私はesp32-devkitの回路を使用しているため)
  • RX -> RX
  • GND -> GND(ここでは一本の接地線のみを接続しました。他の部分はすべてブレッドボード上で共通の接地を持っています)
  • USB_OTG_ID -> GND(この線は共通の接地に直接引き出されます)
  • D+ -> D+(以下の3つのすべてがUSBケーブルですが、特に特別なことはありません)
  • D- -> D-
  • VBUS -> VBUS

Credit to Valetudo
Credit to Valetudo

最終的な外観と、成功したルートアクセス。

このMOTDは実際には中国語で書かれています
このMOTDは実際には中国語で書かれています

ルートアクセスを手に入れた後は、簡単です。元のデータをバックアップし、Valetudoをフラッシュしてクラウドから独立した完全なローカルコントロールを実現しました。

新しい世界への一歩
新しい世界への一歩

参考文献

https://web.archive.org/web/20230131072513/https://valetudo.cloud/pages/installation/dreame.html https://robotinfo.dev/detail_dreame.vacuum.p2029_0.html https://chaos.social/@fizzo/110887346585058373 https://medium.com/@shelladdicted/how-to-use-an-esp32-devkit-as-an-uart-adapter-e698594e0378