Skip to the content
2 layers85 × 50 mmUDP w5500, the printed circuit board in 3D

STM32G431 + WIZnet W5500(Ethernet) を使い、PC(Python)から UDP で直接 CAN バス上のアクチュエータ (DJI C610 ESC / TTL サーボ / 差動ワイヤ機構モータ) を制御するための、基板設計(KiCad)・ファームウェア (STM32CubeMX + CMake)・PC側ツール一式です。

Size
85 × 50 mm
Copper layers
2
Thickness
1.6 mm
Parts
98
Nets
89
Pads
361
Tracks, vias
1,125, 125
Pours
5
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
7 Aug 2026
Updated
4 Oct 2026

Overview

UDP w5500 is an open-source printed circuit board by SameSameIndustry, from the SameSameIndustry/STM32_UDP2CAN_controller repository on GitHub. It is a 2-layer board of 85 × 50 mm with 98 parts on 89 nets, routed with 1,125 tracks and 125 vias.

It is built around the 74AHCT1G125SE, XL1509-5.0 and AMS1117-3.3, with the W5500, WS2812B and S4B-PH-SM4-TB among its other parts. Its parts include 31 capacitors, 25 resistors, 12 connectors, 11 diodes and 6 ICs. It belongs with the STM32 boards of this library.

Main components

10

README

README.md

w5500_UDP — STM32G431 + W5500 UDP⇄CAN エンドエフェクタ制御基板

STM32G431 + WIZnet W5500(Ethernet) を使い、PC(Python)から UDP で直接 CAN バス上のアクチュエータ (DJI C610 ESC / TTL サーボ / 差動ワイヤ機構モータ) を制御するための、基板設計(KiCad)・ファームウェア (STM32CubeMX + CMake)・PC側ツール一式です。

このリポジトリの範囲

ロボットアーム全体は「GIM6010/GIM8018 で関節を駆動する基板(192.168.1.100)」と「本基板=エンド エフェクタ基板(192.168.1.101)」の 2 枚の STM32G431+W5500 基板を同一 LAN 上で使う構成を前提にしています。 本リポジトリに含まれるファームウェアは 192.168.1.101 側(エンドエフェクタ基板)のみです。 GIM 基板側のファームウェアは別ファーム・別管理であり、ここには含まれていません (tools/odrive_setup/ の ODrive 初期設定スクリプトや tools/hl_control/ 内の一部スクリプトは GIM 側の調査・設定用に書かれたものですが、GIM 基板自体のファームウェアソースはありません)。

ディレクトリ構成

パス内容
UDP_w5500/KiCad 9 基板設計データ(回路図・PCB・ガーバー・3D モデル)
UDP_w5500/jlcpcb/JLCPCB 発注用ガーバー・BOM・CPL(エクスポート済み)
G431_w5500/STM32G431 ファームウェア本体(CMake ビルド)
tools/as5600_monitor/AS5600 磁気エンコーダの角度を UDP 経由で監視する CLI
tools/can_id_scanner/2 基板分の状態を 1 ウィンドウ(上下2セクション)で見る Tkinter GUI、CAN ID 調査用スクリプト
tools/hl_control/高レベル制御 UDP プロトコルの実装・診断スクリプト、ROS2 連携 GUI
tools/odrive_setup/ODrive ベースの GIM6010-8/GIM8108-8 を USB 経由で初期設定・較正するスクリプト(本基板のファームとは独立)
CAN_PROTOCOL_*.mdCAN バス上の各デバイスのフレーム仕様書
tools/hl_control/PROTOCOL_HL_CONTROL_UDP.md高レベル制御 UDP プロトコル仕様書
ref/使用部品(モータ・エンコーダ等)のデータシート・メーカー資料(参考資料)
parts/KiCad 用の追加シンボル/フットプリント/3D モデルライブラリ

ハードウェア概要

  • MCU: STM32G431CBT6 (Cortex-M4F)

  • Ethernet: WIZnet W5500(SPI 接続、静的 IP)

  • CAN: FDCAN1, 1 Mbps classic CAN, 標準 11bit ID

  • バス上のデバイスと CAN ID:

    デバイスCAN ID通信方向仕様書
    DJI C610 (M2006 用 ESC)0x01(ESC ID=1) + AS5600 フィードバック送受信— (DJI 標準プロトコル)
    TTL サーボ基板0x21受信専用(本基板からは送信しない)CAN_PROTOCOL_TTL-SERVO.md
    差動ワイヤ機構モータ(ピッチ/ヨー)0x11 / 0x12受信専用(本基板からは送信しない)CAN_PROTOCOL_wave_motor.md
  • 3D モデル: UDP_w5500/3D/UDP_w5500.step が基板単体の統合 STEP。3D_base*.ipt/.stl / 3D_clear*.ipt/.stl はエンクロージャ部品(Autodesk Inventor 形式 + 変換済み STL)。

    • 既知の注意点: PCB 上の RJ45 コネクタの 3D モデル参照(${KIPRJMOD}/EASYEDA_MODELS/RJ45-TH_HR911105A.step) は本リポジトリに含まれていません。KiCad の 3D ビューアでその部品だけ表示されませんが、 回路設計・ガーバー出力には影響しません。

ビルド環境

  • Arm GNU Toolchain (arm-none-eabi-gcc 等) を PATH に追加
  • CMake 3.22 以上、Ninja
  • STM32CubeMX (G431_w5500/G431_w5500.ioc を編集・再生成する場合のみ)
  • フラッシュ/デバッグ用に ST-Link デバッグプローブ + OpenOCD 、 または STM32CubeProgrammer

CLI でビルド

sh
cd G431_w5500
cmake --preset Debug
cmake --build --preset Debug

VS Code でビルド/フラッシュ

本リポジトリには .vscode/ 設定を同梱しています。

  1. .vscode/settings.json の cortex-debug.openocdPath、.vscode/tasks.json の Flash タスクの command は "openocd" としてあります。OpenOCD を PATH に追加するか、 お使いの環境のインストール先の絶対パスに書き換えてください。
  2. .vscode/c_cpp_properties.json の compilerPath は Arm GNU Toolchain の Windows インストーラのデフォルト位置を指しています。インストール先が異なる場合は書き換えてください。
  3. ビルド: Ctrl+Shift+B (Build Debug タスク、cmake --build を実行)
  4. 書き込み: タスク Flash (Build Debug に依存、OpenOCD + ST-Link で書き込み・検証・リセット)
  5. デバッグ: 実行とデバッグ → Debug (OpenOCD)

ネットワーク設定(環境ごとに書き換えが必要)

基板の IP/MAC と、ブロードキャスト以外の送信先 PC の IP アドレスは G431_w5500/Core/Src/main.c 内にコンパイル時定数として直接 記述されています。自分の環境の LAN 構成に合わせて書き換えてから書き込んでください。

c
.mac = {0x00, 0x08, 0xdc, 0x11, 0x22, 0x65},
.ip  = {192, 168, 1, 101},   // 本基板(エンドエフェクタ)の固定IP
.sn  = {255, 255, 255, 0},
.gw  = {192, 168, 1, 1},

uint8_t dest_ip[4] = {192, 168, 1, 2}; // ← PC側のIPアドレスに書き換える

GIM 基板(別ファーム)を同一 LAN に併設する場合は、IP(192.168.1.100 等)と MAC が重複しないように してください。

UDP ポート一覧

ポート方向用途
5000STM32→PC定期 "Hello" デモ送信(dest_ip 宛)
5001PC↔STM32生 CAN フレーム中継(CAN ID 調査・デバッグ用)。PC から 1 回何か送ると以後は受信した全 CAN フレームが転送される
5002STM32→PC(broadcast)ハートビート(定期送信、255.255.255.255 宛)
5003PC→STM32(単方向)高レベル制御 UDP(TTL サーボ/wave motor/C610 を直接操作、詳細は PROTOCOL_HL_CONTROL_UDP.md)
5004STM32→PCAS5600 角度モニタ(ストリーム配信)
8888PC(ROS2)→STM32ROS2 連携プロトコル受信
8889STM32→PC(ROS2)ROS2 連携プロトコル フィードバック送信

PC 側ツール(Python)

Python 3.x、標準ライブラリ(socket / struct / tkinter / argparse)のみで動作します (tkinter を使う GUI ツールは Tcl/Tk 入りの Python が必要)。tools/odrive_setup/ の スクリプトのみ追加で ODrive 公式ライブラリが必要です。

sh
pip install odrive   # tools/odrive_setup/ のスクリプトを使う場合のみ

主なツール:

  • tools/can_id_scanner/can_id_scanner.py — GIM 基板(100)とエンドエフェクタ基板(101)の 両方を 1 ウィンドウ(上下2セクション)で扱う GUI。生 CAN フレーム(ポート5001)の送受信・デコード。
  • tools/hl_control/ros2_arm_control.py — 同様の 2 基板 GUI(ROS2/sharmech プロトコル版、ポート8888/8889)。
  • tools/as5600_monitor/as5600_monitor.py — AS5600 角度モニタ(ポート5004)の CLI クライアント。
  • tools/hl_control/diagnose_gim_axes.py / ramp_gim6010_pitch.py — GIM 基板側の ODrive heartbeat 診断・角度ランプ送信(ポート5001 の生 CAN ブリッジ経由、GIM 基板向け)。
  • tools/odrive_setup/odrive_configure.py / odrive_inspect.py 等 — USB 接続した ODrive(GIM6010-8/GIM8108-8)の初期設定・読み取り専用確認スクリプト。

いずれも -h / --help で使用法を確認できます。

基板発注

UDP_w5500/jlcpcb/production_files/ に JLCPCB 向けの BOM・CPL・ガーバー一式(zip)が、 UDP_w5500/jlcpcb/gerber/ に展開済みガーバー/ドリルデータがあります。他の基板製造業者を使う場合は UDP_w5500/UDP_w5500.kicad_pcb から KiCad 9 でガーバーを再出力してください。

既知の制限・未解決事項

  • RJ45 コネクタの 3D モデル参照が欠落している(上記参照)。電気的な設計・発注には影響しない。
  • tools/hl_control/ros2_arm_control.py はワイヤフォーマットの仕様根拠として社内リポジトリ sharmech(非公開・本リポジトリには含まれない)の文書を参照しているコメントがありますが、 スクリプト自体は標準ライブラリのみで完結しており、sharmech が無くても動作します。

ライセンス

MIT License。ただし G431_w5500/Core/Drivers/W5500/(WIZnet ioLibrary)、 G431_w5500/Drivers/CMSIS/、G431_w5500/Drivers/STM32G4xx_HAL_Driver/ は各ディレクトリ・ ファイルヘッダに記載された元のライセンス(WIZnet license / Apache-2.0 / BSD-3-Clause)に従います。

Parts

98
QtyValueFootprintReferences
11100nFCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC2, C5, C8, C14, C22, C26, C27, C30, C31, C32, C33
8WS2812BLED_SMD:LED_WS2812B_PLCC4_5.0x5.0mm_P3.2mmD4, D5, D6, D7, D8, D9, D10, D11
43.3RResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR9, R10, R11, R12
449.9RResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR15, R16, R18, R20
4S4B-PH-SM4Connector_JST:JST_PH_S4B-PH-SM4-TB_1x04-1MP_P2.00mm_HorizontalJ9, J10, J11, J12
4XT30-2+2Ether:CONN-TH_4P-XT30PW-MJ3, J4, J5, J6
310nFCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC15, C18, C29
34.7KResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR2, R3, R5
210KResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR23, R25
210uFCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC6, C13
2120RResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR7, R8
218pFCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC9, C10
22.2KResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR27, R28
222uFCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC12, C16
2330RResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR13, R14
24.7uFCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC17, C28
2470Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR17, R24
26.8nFCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC20, C21
26.8pFCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC23, C24
2AR02016Ether:SW-SMD_L3.9-W3.0-P4.45SW1, SW2
2BlueLED_SMD:LED_0603_1608Metric_Pad1.05x0.95mm_HandSolderD2, D3
10R/1206Resistor_SMD:R_1206_3216MetricR22
110RResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR21
112.4KResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR19
116HzCrystal:Crystal_SMD_3225-4Pin_3.2x2.5mmY2
11uFCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC25
11uF/35VCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC7
12.54-5Connector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_VerticalJ8
1220uF/35VCapacitor_THT:CP_Radial_D8.0mm_P3.50mmC11
122nFCapacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolderC19
125MHzCrystal:Crystal_SMD_3225-4Pin_3.2x2.5mmY1
1470RResistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolderR26
1470uF/35VCapacitor_THT:CP_Radial_D10.0mm_P5.00mmC4
15VTestPoint:TestPoint_Pad_D3.0mmTP1
174AHCT1G125Package_TO_SOT_SMD:SOT-23-5_HandSolderingU7
1AMS1117-3.3Package_TO_SOT_SMD:SOT-223-3_TabPin2U4
1CYA1040-68UHEther:IND-SMD_L11.6-W10.1L2
1GNDTestPoint:TestPoint_Pad_D3.0mmTP2
1LCMGG160808T121RGInductor_SMD:L_0603_1608MetricL1
1LOGOEther:same_logoG***
1MCP2562-E-SNPackage_SO:SOIC-8_3.9x4.9mm_P1.27mmU5
1SS34Diode_SMD:D_SMAD1
1STM32G431CBTxPackage_QFP:LQFP-48_7x7mm_P0.5mmU6
1W5500Package_QFP:LQFP-48_7x7mm_P0.5mmU3
1XL1509-5.0Package_SO:SOIC-8_3.9x4.9mm_P1.27mmU1
1XT60Connector_AMASS:AMASS_XT60PW-F_1x02_P7.20mm_HorizontalJ2
1XT60Connector_AMASS:AMASS_XT60IPW-M_1x03_P7.20mm_HorizontalJ1
1~Ether:RJ45-TH_HR911105AJ7

The 94 most common of 98 parts.

Similar boards

  • 2 layers100 × 90 mmAssembly 2, the printed circuit board in 3D

    Assembly 2

    S-Shunsuke-NITK-K/ROX2026-NITK.K-ELEC

    32 partsMIT
  • 2 layers99.9 × 79.3 mmLed controller, the printed circuit board in 3D

    Led controller

    azaslavskis/WLED-Controller

    Simple project that takes care of LED strips and connect them using esp32 to home assistant interface

    65 partsMIT
  • 2 layers68.6 × 53.3 mmStm32f4 uno, the printed circuit board in 3D

    Stm32f4 uno

    easy-smart/stm32f4_uno

    76 parts
  • 2 layers100 × 95 mmRRFExtRP2040, the printed circuit board in 3D

    RRFExtRP2040

    nyarurato/RRFExtRP2040Board

    DIY Duet3 Extension Board

    92 parts
  • 2 layers32 × 80 mmEsp32s3-rail, the printed circuit board in 3D

    Esp32s3-rail

    dominikbayerl/esp32s3-rail

    98 parts
  • 4 layers107.5 × 102.5 mmNeo, the printed circuit board in 3D

    Neo

    kc099/kicad

    145 parts

Questions

How big is the UDP w5500 PCB?

It measures 85 × 50 mm and has 2 copper layers, 1.6 mm thick.

What parts does the UDP w5500 use?

98 parts, built around the 74AHCT1G125SE, XL1509-5.0, AMS1117-3.3 and W5500. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the UDP w5500 KiCad files?

From the SameSameIndustry/STM32_UDP2CAN_controller repository on GitHub, at the commit this page was made from: the board is UDP_w5500/UDP_w5500.kicad_pcb and its schematic UDP_w5500/UDP_w5500.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the UDP w5500 design in my own project?

Its repository states no licence, so its author keeps all rights: ask SameSameIndustry before reusing the design.