arduino-esp32/libraries/WiFiProv/examples/WiFiProv
Me No Dev 5502879a5b
v2.0.0 Add support for ESP32S2 and update ESP-IDF to 4.4 (#4996)
This is very much still work in progress and much more will change before the final 2.0.0

Some APIs have changed. New libraries have been added. LittleFS included.

Co-authored-by: Seon Rozenblum <seonr@3sprockets.com>
Co-authored-by: Me No Dev <me-no-dev@users.noreply.github.com>
Co-authored-by: geeksville <kevinh@geeksville.com>
Co-authored-by: Mike Dunston <m_dunston@comcast.net>
Co-authored-by: Unexpected Maker <seon@unexpectedmaker.com>
Co-authored-by: Seon Rozenblum <seonr@3sprockets.com>
Co-authored-by: microDev <70126934+microDev1@users.noreply.github.com>
Co-authored-by: tobozo <tobozo@users.noreply.github.com>
Co-authored-by: bobobo1618 <bobobo1618@users.noreply.github.com>
Co-authored-by: lorol <lorolouis@gmail.com>
Co-authored-by: geeksville <kevinh@geeksville.com>
Co-authored-by: Limor "Ladyada" Fried <limor@ladyada.net>
Co-authored-by: Sweety <switi.mhaiske@espressif.com>
Co-authored-by: Loick MAHIEUX <loick111@gmail.com>
Co-authored-by: Larry Bernstone <lbernstone@gmail.com>
Co-authored-by: Valerii Koval <valeros@users.noreply.github.com>
Co-authored-by: 快乐的我531 <2302004040@qq.com>
Co-authored-by: chegewara <imperiaonline4@gmail.com>
Co-authored-by: Clemens Kirchgatterer <clemens@1541.org>
Co-authored-by: Aron Rubin <aronrubin@gmail.com>
Co-authored-by: Pete Lewis <601236+lewispg228@users.noreply.github.com>
2021-04-05 14:23:58 +03:00
..
README.md v2.0.0 Add support for ESP32S2 and update ESP-IDF to 4.4 (#4996) 2021-04-05 14:23:58 +03:00
WiFiProv.ino v2.0.0 Add support for ESP32S2 and update ESP-IDF to 4.4 (#4996) 2021-04-05 14:23:58 +03:00

Provisioning for Arduino

This sketch implements provisioning using various IDF components

Description

This example allows Arduino user to choose either BLE or SOFTAP as a mode of transport, over which the provisioning related communication is to take place, between the device (to be provisioned) and the client (owner of the device).

APIs introduced for provisioning

WiFi.onEvent()

Using this API user can register to receive WiFi Events and Provisioning Events

WiFi.beginProvision()

WiFi.beginProvision(void ( * scheme_cb)(), wifi_prov_scheme_event_handler_t scheme_event_handler, wifi_prov_security_t security, char * pop, char * service_name, char * service_key, uint8_t * uuid);

Parameters passed

  • function pointer : choose the mode of transfer

    • provSchemeBLE - Using BLE
    • provSchemeSoftAP - Using SoftAP
  • security : choose security type

    • WIFI_PROV_SECURITY_1 - It allows secure communication which consists of secure handshake using key exchange and proof of possession (pop) and encryption/decryption of messages.

    • WIFI_PROV_SECURITY_0 - It do not provide application level security, it involve simply plain text communication.

  • scheme_event_handler : specify the handlers according to the mode chosen

    • BLE :

      • WIFI_PROV_SCHEME_BLE_EVENT_HANDLER_FREE_BTDM - This scheme event handler is used when application doesn't need BT and BLE after provisioning is finised
      • WIFI_PROV_SCHEME_BLE_EVENT_HANDLER_FREE_BLE - This scheme event handler is used when application doesn't need BLE to be active after provisioning is finised
      • WIFI_PROV_SCHEME_BLE_EVENT_HANDLER_FREE_BT - This scheme event handler is used when application doesn't need BT to be active after provisioning is finised
    • SoftAp :

      • WIFI_PROV_EVENT_HANDLER_NONE
  • pop : It is the string that is used to provide the authentication.

  • service_name : Specify service name for the device, if it is not specified then default chosen name is PROV_XXX where XXX are the last 3 bytes of the MAC address.

  • service_key : Specify service key, if chosen mode of provisioning is BLE then service_key is always NULL

  • uuid : user can specify there own 128 bit UUID while provisioning using BLE, if not specified then default value taken is - { 0xb4, 0xdf, 0x5a, 0x1c, 0x3f, 0x6b, 0xf4, 0xbf, 0xea, 0x4a, 0x82, 0x03, 0x04, 0x90, 0x1a, 0x02, }

NOTE

  • If none of the parameters are specified in beginProvision then default provisioning takes place using SoftAP with
    • scheme = WIFI_PROV_SCHEME_SOFTAP
    • scheme_event_handler = WIFI_PROV_EVENT_HANDLER_NONE
    • security = WIFI_PROV_SECURITY_1
    • pop = "abcd1234"
    • service_name = "PROV_XXX"
    • service_key = NULL
    • uuid = NULL

Log Output

  • Enable debuger : [ Tools -> Core Debug Level -> Info ]

Provisioning Tools

https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/provisioning/wifi_provisioning.html#provisioning-tools

Example output

Provisioning using SoftAP

[I][WiFiProv.cpp:117] beginProvision(): Starting AP using SOFTAP
 service_name : PROV_XXX
 password : 123456789
 pop : abcd1234

Provisioning started
Give Credentials of your access point using " Android app "

Received Wi-Fi credentials
	SSID : GIONEE M2
	Password : 123456789

Connected IP address : 192.168.43.120
Provisioning Successful
Provisioning Ends

Provisioning using BLE

[I][WiFiProv.cpp:115] beginProvision(): Starting AP using BLE
 service_name : PROV_XXX
 pop : abcd1234

Provisioning started
Give Credentials of your access point using " Android app "

Received Wi-Fi credentials
	SSID : GIONEE M2
	Password : 123456789

Connected IP address : 192.168.43.120
Provisioning Successful
Provisioning Ends

Credentials are available on device

[I][WiFiProv.cpp:146] beginProvision(): Aleardy Provisioned, starting Wi-Fi STA
[I][WiFiProv.cpp:150] beginProvision(): SSID : Wce*****
[I][WiFiProv.cpp:152] beginProvision(): CONNECTING TO THE ACCESS POINT : 
Connected IP address : 192.168.43.120