duck-xxxx name is now derived from the kernel’s /proc/cpuinfo Serial instead of U-Boot’s device-tree value. The two Beta boards in the upstream report previously shared duck-d041; one source test now derives duck-2b6d. A user-chosen name is retained, and the Zero 3W still reads its serial from the device tree. The same Beta serial also feeds the voice/chorale seed and the remote-access hardware ID, so those identifiers may change; this is not a general BLE pairing or security fix. If a previously saved default name stops selecting your robot after updating, run uvx duckctl scan again and use the actual displayed name for --name or DUCK_ROBOT. A bonded robot may advertise differently, so a sparse scan alone does not prove it is offline. Do not remove a Bluetooth bond solely because the name changed. Keep SoC serial and hardware ID out of public support posts. board-specific reader ↗ name derivation ↗ discovery caveats ↗ 0.17.4 release ↗.1. Find the right robot from your laptop.
Install uv first if you do not already have it. The published duckctl client runs on a laptop through uvx; do not run it on the robot. The first command below reads nearby BLE advertisements without connecting or asking for a PIN. Use the name from your own scan output in place of the upstream example duck-c51b. Specifying a name matters: with no name, the first robot found can win on a shared bench. The second command connects to read identity and may pair and prove the robot PIN; it is a different step from passive scanning. official laptop guide ↗ client implementation ↗.
uvx duckctl scan
uvx duckctl --name duck-c51b infoIf the robot is missing, uvx duckctl scan --verbose can show what else the Bluetooth radio saw, but absence alone does not identify a power, radio or naming fault. Keep the scan output private because it can include device addresses. uvx duckctl may use a cached package or resolve a newly published one; these instructions were checked against the 0.17.2 client, so compare the installed client and robot version if behavior differs. 0.17.2 package ↗.
2. Treat “no address” as a Wi-Fi question, not a failed BLE scan.
| Observation | What it establishes | Next check |
|---|---|---|
Robot appears with no address | BLE discovered the robot, but it has no current IPv4 address. | Read wifi status and, if needed, ask the robot to wifi scan over BLE. |
| Robot appears with no address field at all | An older advertisement did not include this field; it does not prove Wi-Fi is disconnected. | Ask wifi status for the actual network state. |
| Robot appears with an IP address | The address can be used for the next local-network check; it does not prove the console stream works. | Read ip, then print the console URL. |
These two Wi-Fi queries ask the robot over Bluetooth; an existing Wi-Fi or SSH connection is not required. Choose the exact robot name. Unlike passive scan, a Wi-Fi query connects and needs the robot PIN (--pin, DUCK_PIN, or the documented 000000 fallback). The PIN check is not proof that the BLE link is encrypted. Do not publish your PIN, Wi-Fi name or device address with a support question. Wi-Fi and PIN guide ↗ BLE service default ↗.
uvx duckctl --name duck-c51b wifi status
uvx duckctl --name duck-c51b wifi scanIf you intentionally join a network, replace both placeholders locally in the official command template below. The fixed duckctl CLI accepts the password as a --psk argument; it does not offer a hidden interactive password option in this route. On a shared computer, command-line arguments and shell history can expose it. More seriously, the fixed 0.17.2 Bluetooth service defaults to no pairing or link encryption on an ordinary development board: the PIN and Wi-Fi passphrase can be read by someone in radio range. Treat this as development-only provisioning on a trusted, isolated lab network with temporary credentials; do not enter an ordinary home or work Wi-Fi password into this route as though it were secure. Never paste the completed command into a post. This step changes the robot’s network: an existing Wi-Fi SSH session may disconnect, which can be an expected result. The service polls for up to 45 seconds and the client has a separate 60-second deadline; neither is a successful-join promise. Omit --psk only for an intentionally open network. official Wi-Fi procedure ↗ CLI argument definition ↗ service warning ↗ unencrypted route ↗.
uvx duckctl --name duck-c51b wifi connect 'YOUR_SSID' --psk 'YOUR_WIFI_PASSWORD'3. Separate an address from a working console.
After joining, read Wi-Fi status and the address again. open --print only prints the robot’s console URL without opening a browser; the regular open command opens the built-in robot page. A robot with no network address cannot offer this WebRTC console. The page itself is served on port 8080, while its separate signalling connection uses port 8443. If the page loads but reports that signalling did not answer, the robot page is reachable and the next question is the network path to 8443, often a firewall. This is not a reason to re-pair Bluetooth. Do not expose either port to the public Internet as a troubleshooting shortcut. console scope ↗.
uvx duckctl --name duck-c51b wifi status
uvx duckctl --name duck-c51b ip
uvx duckctl --name duck-c51b open --printThe console contains live movement controls. Its Stop button zeroes the intents sent by that page; it does not cut servo power and is not a physical emergency stop. This article explains how to reach the page, not how to validate movement. official console safety boundary ↗.
Share the failed stage, with secrets removed.
A useful technical question states the client and robot version if known, whether a named robot appeared in scan, whether its address was absent, and whether the issue is the port-8080 page or port-8443 signalling. Say whether the machine is official or a replica. Remove the Bluetooth address, serial, local IP, SSID, PIN, Wi-Fi password and account details. For gamepad response after connection, follow the separate Bluetooth pad diagnosis; for UDP control timing, see the 0.17.2 release guide.
What would you like to understand next?
Keep the source, your environment and your observations together.