Network and Connectivity¶
Phase 4 — Track B — Module 5.2 · Application Development
Focus: Configure wired and wireless networking on the Jetson Orin Nano 8GB — Ethernet, Wi-Fi (client and AP), Bluetooth, VPN tunnels, and lightweight web servers for device management.
Hub: 5. Application Development
Table of Contents¶
- Ethernet (Linux)
- Wi-Fi Client (Linux)
- Wi-Fi Access Point Mode (Linux)
- Bluetooth (Linux)
- VPN (WireGuard / OpenVPN)
- SMB / Network File Sharing
- Web Server (Linux)
- Projects
- Resources
1. Ethernet (Linux)¶
Gigabit Ethernet is the primary network interface on most Jetson carriers.
Configuration¶
# Check link status
ip link show eth0
ethtool eth0
# Static IP
sudo nmcli con mod "Wired connection 1" \
ipv4.addresses 192.168.1.100/24 \
ipv4.gateway 192.168.1.1 \
ipv4.dns "8.8.8.8" \
ipv4.method manual
sudo nmcli con up "Wired connection 1"
# DHCP (default)
sudo nmcli con mod "Wired connection 1" ipv4.method auto
Performance validation¶
# Install iperf3
sudo apt install iperf3
# Server (on another machine)
iperf3 -s
# Client (on Jetson)
iperf3 -c <server-ip>
# Expected: ~940 Mbps for GbE
2. Wi-Fi client (Linux)¶
Jetson Orin Nano dev kit does not include Wi-Fi — add it via USB dongle or M.2 Key E module (Intel AX200/AX210, Realtek RTL8852).
Connect with NetworkManager¶
# Scan for networks
nmcli dev wifi list
# Connect
sudo nmcli dev wifi connect "SSID" password "password"
# Verify
nmcli con show --active
ip addr show wlan0
Connect with wpa_supplicant (headless)¶
# /etc/wpa_supplicant/wpa_supplicant.conf
cat <<EOF | sudo tee /etc/wpa_supplicant/wpa_supplicant.conf
network={
ssid="SSID"
psk="password"
}
EOF
sudo wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf
sudo dhclient wlan0
3. Wi-Fi access point mode (Linux)¶
Run the Jetson as a Wi-Fi hotspot for direct device connection (useful for field configuration or standalone operation).
Using NetworkManager¶
Using hostapd (more control)¶
sudo apt install hostapd dnsmasq
# /etc/hostapd/hostapd.conf
cat <<EOF | sudo tee /etc/hostapd/hostapd.conf
interface=wlan0
driver=nl80211
ssid=Jetson-Setup-AP
hw_mode=g
channel=7
wmm_enabled=0
auth_algs=1
wpa=2
wpa_passphrase=securepass
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
EOF
# /etc/dnsmasq.conf (DHCP for AP clients)
cat <<EOF | sudo tee /etc/dnsmasq.d/ap.conf
interface=wlan0
dhcp-range=192.168.4.2,192.168.4.50,255.255.255.0,24h
EOF
sudo systemctl start hostapd
sudo systemctl start dnsmasq
4. Bluetooth (Linux)¶
Bluetooth is available via USB dongle or M.2 combo Wi-Fi/BT module.
Basic operations¶
# Check adapter
bluetoothctl
power on
agent on
scan on
# Wait for devices...
pair <MAC>
connect <MAC>
Bluetooth serial (SPP / RFCOMM)¶
# Listen for incoming serial connections
sudo rfcomm listen /dev/rfcomm0 1
# Connect to a device
sudo rfcomm connect /dev/rfcomm0 <MAC> 1
Bluetooth Low Energy (BLE)¶
# Scan for BLE devices
sudo hcitool lescan
# Use bluetoothctl for GATT operations
bluetoothctl
menu gatt
list-attributes <MAC>
select-attribute <UUID>
read
write <value>
Python (bleak for BLE)¶
import asyncio
from bleak import BleakScanner, BleakClient
async def main():
devices = await BleakScanner.discover()
for d in devices:
print(d)
async with BleakClient("AA:BB:CC:DD:EE:FF") as client:
value = await client.read_gatt_char("0000180a-0000-1000-8000-00805f9b34fb")
print(value)
asyncio.run(main())
5. VPN (WireGuard / OpenVPN)¶
WireGuard (recommended — faster, simpler)¶
sudo apt install wireguard
# Generate keys
wg genkey | tee privatekey | wg pubkey > publickey
# /etc/wireguard/wg0.conf
cat <<EOF | sudo tee /etc/wireguard/wg0.conf
[Interface]
PrivateKey = $(cat privatekey)
Address = 10.0.0.2/24
[Peer]
PublicKey = <server-public-key>
Endpoint = <server-ip>:51820
AllowedIPs = 10.0.0.0/24
PersistentKeepalive = 25
EOF
sudo wg-quick up wg0
OpenVPN¶
Use case for deployed Jetson devices¶
- Remote access: SSH into field devices through VPN tunnel
- Fleet management: All devices on same VPN for OTA and telemetry
- Security: Encrypted communication even on untrusted networks
6. SMB / network file sharing¶
Share files between Jetson and other machines on the local network.
# Install Samba
sudo apt install samba
# Create a share
cat <<EOF | sudo tee -a /etc/samba/smb.conf
[jetson-data]
path = /data
browseable = yes
read only = no
guest ok = no
EOF
sudo smbpasswd -a $(whoami)
sudo systemctl restart smbd
Access from other machines: \\<jetson-ip>\jetson-data
7. Web server (Linux)¶
Run a lightweight web server on the Jetson for device management, configuration UI, or API endpoints.
nginx (reverse proxy / static files)¶
Python Flask (REST API)¶
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/api/status')
def status():
return jsonify({
'device': 'JetsonEdge',
'temperature': read_temperature(),
'uptime': read_uptime()
})
app.run(host='0.0.0.0', port=8080)
Use cases¶
| Use case | Technology |
|---|---|
| Device config portal | Flask/FastAPI + HTML form |
| REST API for sensors | Flask/FastAPI returning JSON |
| OTA trigger endpoint | nginx + webhook |
| Camera stream | GStreamer RTSP or MJPEG over HTTP |
8. Projects¶
- Headless Wi-Fi setup: Build a provisioning flow where the Jetson starts as a Wi-Fi AP, serves a web page for entering Wi-Fi credentials, then switches to client mode.
- BLE sensor gateway: Read BLE sensor data (temperature, humidity) and publish to MQTT over Ethernet.
- VPN fleet: Set up WireGuard between 3 Jetson devices and a cloud server. Verify SSH access to all devices from the server.
- Device management API: Build a Flask REST API that exposes device status (temperature, disk, uptime, firmware version) and accepts OTA trigger commands.
9. Resources¶
| Resource | Description |
|---|---|
| NetworkManager CLI | nmcli documentation for connection management |
| WireGuard (wireguard.com) | Modern VPN protocol, kernel-integrated |
| hostapd | Wi-Fi access point daemon documentation |
| BlueZ | Official Linux Bluetooth stack |
| bleak | Cross-platform BLE library for Python |
| nginx | Lightweight web server / reverse proxy |