.. _esp32_wifi_station:

Espressif ESP32 WiFi Station
############################

Overview
********

This sample demonstrates how to use ESP32 to connect to a WiFi network as a station device.
To configure WiFi credentials, edit ``prj.conf``.
Enabling the ``net_shell`` module provides a set of commands to test the connection.
See :ref:`network shell <net_shell>` for more details.

Building and Running
********************

Make sure you have the ESP32 connected over USB port.

The sample can be built and flashed as follows:

.. code-block:: console

   west build -b esp32 samples/boards/esp32/wifi_station
   west flash --esp-device /dev/ttyUSB0

Sample Output
=============

To check output of this sample, any serial console program can be used (i.e. on Linux minicom, putty, screen, etc)
This example uses ``picocom`` on the serial port ``/dev/ttyUSB0``:

.. code-block:: console

   $ picocom /dev/ttyUSB0 - 115200

.. code-block:: console

   I (288) boot: Loaded app from partition at offset 0x10000
   I (288) boot: Disabling RNG early entropy source...
   I (611) wifi:wifi driver task: 3ffb2be8, prio:2, stack:3584, core=0
   I (613) wifi:wifi firmware version: 9c89486
   I (613) wifi:wifi certification version: v7.0
   I (614) wifi:config NVS flash: disabled
   I (618) wifi:config nano formating: disabled
   I (622) wifi:Init data frame dynamic rx buffer num: 32
   I (627) wifi:Init management frame dynamic rx buffer num: 32
   I (632) wifi:Init management short buffer num: 32
   I (636) wifi:Init dynamic tx buffer num: 32
   I (640) wifi:Init static rx buffer size: 1600
   I (645) wifi:Init static rx buffer num: 10
   I (648) wifi:Init dynamic rx buffer num: 32
   phy_version: 4350, 18c5e94, Jul 27 2020, 21:04:07, 0, 2
   I (783) wifi:mode : softAP (24:6f:28:80:32:e9)
   I (784) wifi:Total power save buffer number: 16
   I (784) wifi:Init max length of beacon: 752/752
   I (788) wifi:Init max length of beacon: 752/752
   *** Booting Zephyr OS build zephyr-v2.4.0-49-g4da59e1678f7  ***
   I (798) wifi:mode : sta (24:6f:28:80:32:e8)
   I (1046) wifi:new:<4,1>, old:<1,1>, ap:<255,255>, sta:<4,1>, prof:1
   I (1694) wifi:state: init -> auth (b0)
   I (1711) wifi:state: auth -> assoc (0)
   I (1717) wifi:state: assoc -> run (10)
   I (1745) wifi:connected with myssid, aid = 4, channel 4, 40U, bssid = d8:07:b6:dd:47:7a
   I (1745) wifi:security: WPA2-PSK, phy: bgn, rssi: -57
   I (1747) wifi:pm start, type: 1

   esp_event: WIFI STA start
   esp_event: WIFI STA connected
   I (1813) wifi:AP's beacon interval = 102400 us, DTIM period = 1
   net_dhcpv4: Received: 192.168.68.102
   esp32_wifi_sta: Your address: 192.168.68.102
   esp32_wifi_sta: Lease time: 7200 seconds
   esp32_wifi_sta: Subnet: 255.255.255.0
   esp32_wifi_sta: Router: 192.168.68.1

Sample console interaction
==========================

If the :option:`CONFIG_NET_SHELL` option is set, network shell functions
can be used to check internet connection.

.. code-block:: console

   shell> net ping 8.8.8.8
   PING 8.8.8.8
   28 bytes from 8.8.8.8 to 192.168.68.102: icmp_seq=0 ttl=118 time=19 ms
   28 bytes from 8.8.8.8 to 192.168.68.102: icmp_seq=1 ttl=118 time=16 ms
   28 bytes from 8.8.8.8 to 192.168.68.102: icmp_seq=2 ttl=118 time=21 ms
