ESP32-S3のUSB Hostでイーサネット

概要

ESP32-S3のUSB Hostを使ってUSB NICを動かしてみました。思ったより時間がかかりましてコアの動きを変えてもらってからのチャレンジで動作成功しました。Wi-Fi無線が利用できない環境でLTE経由でインターネットに接続するときなどに便利に利用できそうです。

製品

UGREEN
¥2,099(2026/08/19 00:00時点)
【USB Type C to RJ45 有線LANアダプター】パソコンのUSB-CまたはThunderbolt3ポートをギガビットのRJ45ポートに変換するLANアダプタです。WIFIが不安定や有線接続がないときの悩みを直接的に解決します。※USB-Cデータ通信対応ポート専用です。充電専用USB-Cポートではご使用いただけません。

テストで利用したのは上記になります。NICとしてAX88179Aが搭載されている製品となります。あまりチップ自体は問題ではないので100Mbps対応のもっと安いのでも動くと思います。

原理的には独自ドライバーではなく標準プロトコルであるCDC-NCMを利用して通信をしています。このプロトコル自体はリンク速度は影響を与えないので100Mbpsだろうが2500Mbpsだろうが問題なく動きます。

制御方法

EspUsbHost/examples/UsbNetwork at main · tanakamasayuki/EspUsbHost
Library for using USB Host with ESP32. Contribute to tanakamasayuki/EspUsbHost development by creating an account on Git…

上記になります。まだかなり荒削りなのですが、自動認識はできません。まず接続をすると複数のコンフィグがあり、どれを選ぶか聞かれます。通常は一番先頭のコンフィグを選択します。するとこの手のUSB NICはデフォルトが独自ドライバーを利用するプロトコルとなっているので動きません。

接続後にコンフィグの一覧が取得でき、そこでCDC-NCMのコンフィグの番号を確認する必要があります。ESP32シリーズの場合には一度切断をして、再度再接続をしたときにしかコンフィグを選択できないのでちょっと面倒です。

そしてコンフィグの選択ができるのがArduino-ESP32 3.3.11からとなります。Arduino-ESP32 3.3.10までは先頭のコンフィグを自動選択する動きとなっており、どうやってもコンフィグ選択が出来ませんでした。

そこで自分で選択できるようにビルドオプションを変更してもらったのですが、、、なんと既存の動きが全部壊れました。コンフィグを選択できるようにビルドオプションを変更すると、選択用のコールバック関数を登録しないと全部拒否されるのが既存の動きになります。なので過去のプログラムが全部壊れて全部trueで返すダミーのコールバック関数を追加登録する必要があります。これはちょっと動きとしてよくないですね。

てことで、私のUSB Hostライブラリ以外にUSB Hostを使っていた他のライブラリが一斉に壊れてなぜだーって感じになりました。ごめんなさい。でもUSB NICを使うためには必要なオプションだったのです。

ちなみにコンフィグ選択の機能はUSB NICと一部のLTEドングルぐらいでしか利用しない機能になります。。。

まとめ

ずーっとWi-Fi以外でのインターネット接続方法を検証してきましたが、価格的には安めのUSB NICがお手軽な気がします。

上記のようなホームルーターとか

クレードル側にLANがついているモバイルルーターとの組み合わせができるかもしれません。

コメント