Configure WiFi
Mix.install([
{:vintage_net_wifi, "~> 0.11"},
{:kino, "~> 0.12"}
])
Finding access points
Nerves uses vintage_net_wifi to
configure WiFi networking. This notebook uses the quick_
functions to
simplify common tasks. If you’re trying to connect to an enterprise network,
this may not work for you.
Step 1 is to see what WiFi networks are available.
VintageNetWiFi.quick_scan/0
returns a lot of information, so lets just show a
few columns in a table. Rerun this if you don’t see your network.
networks = VintageNetWiFi.quick_scan()
networks
|> Kino.DataTable.new(
name: "WiFi Networks",
keys: [:ssid, :signal_percent, :frequency, :flags],
sorting_enabled: false
)
WPA3 support
A WiFi network that uses WPA3 shows up with :sae
in the flags. Support for
WPA3 networks depends on hardware and device driver support. Raspberry Pi’s
currently do not support WPA3
Connect
Next, lets connect to one of the WiFi networks. Select the SSID and enter the password.
selectable_networks =
[{"", "SSIDs:"}] ++ Enum.map(networks, fn network -> {network.ssid, network.ssid} end)
selected_network =
Kino.Input.select("Select WiFi Network", selectable_networks)
|> Kino.render()
psk_input = Kino.Input.password("Enter WiFi password")
Verify that the information is correct and then evaluate the following code block to set it.
ssid = Kino.Input.read(selected_network) |> String.trim()
psk = Kino.Input.read(psk_input) |> String.trim()
if ssid != "" do
VintageNetWiFi.quick_configure(ssid, psk)
else
IO.puts("Skipping WiFi configuration.")
end
Check the connection
The final step is to check whether everything worked. VintageNet.info/0
is an
easy way of checking overall network connectivity on a device, so run it.
Hopefully, you’ll see a section for "wlan0"
and a connection status of
:internet
. You may need to scroll down.
VintageNet.info()
Next up…
See VintageNet to learn more about networking in Nerves.