Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit c2ce738

Browse filesBrowse files
authored
feat(matter): New example => Wifi Prov within Matter as alternative for wireless network provisioning (#10658)
* feat(matter): Arduino WiFi Prov example for Matter
1 parent 9f5f95e commit c2ce738
Copy full SHA for c2ce738

File tree

2 files changed

+129
-0
lines changed
Filter options

2 files changed

+129
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
/*
2+
Please read README.md file in this folder, or on the web:
3+
https://github.com/espressif/arduino-esp32/tree/master/libraries/WiFiProv/examples/WiFiProv
4+
5+
Note: This sketch takes up a lot of space for the app and may not be able to flash with default setting on some chips.
6+
If you see Error like this: "Sketch too big"
7+
In Arduino IDE go to: Tools > Partition scheme > chose anything that has more than 1.4MB APP
8+
- for example "No OTA (2MB APP/2MB SPIFFS)"
9+
10+
This example demonstrates that it is possible to provision WiFi using BLE or Software AP using
11+
the ESP BLE Prov APP or ESP SoftAP Provisioning APP from Android Play or/and iOS APP Store
12+
13+
Once the WiFi is provisioned, Matter will start its process as usual.
14+
15+
This same Example could be used for any other WiFi Provisioning method.
16+
*/
17+
18+
// Matter Manager
19+
#include <Matter.h>
20+
#include <WiFiProv.h>
21+
#include <WiFi.h>
22+
23+
#if !CONFIG_BLUEDROID_ENABLED
24+
#define USE_SOFT_AP // ESP32-S2 has no BLE, therefore, it shall use SoftAP Provisioning
25+
#endif
26+
//#define USE_SOFT_AP // Uncomment if you want to enforce using the Soft AP method instead of BLE
27+
28+
const char *pop = "abcd1234"; // Proof of possession - otherwise called a PIN - string provided by the device, entered by the user in the phone app
29+
const char *service_name = "PROV_123"; // Name of your device (the Espressif apps expects by default device name starting with "Prov_")
30+
const char *service_key = NULL; // Password used for SofAP method (NULL = no password needed)
31+
bool reset_provisioned = true; // When true the library will automatically delete previously provisioned data.
32+
33+
// List of Matter Endpoints for this Node
34+
// Single On/Off Light Endpoint - at least one per node
35+
MatterOnOffLight OnOffLight;
36+
37+
// Light GPIO that can be controlled by Matter APP
38+
#ifdef LED_BUILTIN
39+
const uint8_t ledPin = LED_BUILTIN;
40+
#else
41+
const uint8_t ledPin = 2; // Set your pin here if your board has not defined LED_BUILTIN
42+
#endif
43+
44+
// Matter Protocol Endpoint (On/OFF Light) Callback
45+
bool matterCB(bool state) {
46+
digitalWrite(ledPin, state ? HIGH : LOW);
47+
// This callback must return the success state to Matter core
48+
return true;
49+
}
50+
51+
void setup() {
52+
Serial.begin(115200);
53+
// Initialize the LED GPIO
54+
pinMode(ledPin, OUTPUT);
55+
56+
WiFi.begin(); // no SSID/PWD - get it from the Provisioning APP or from NVS (last successful connection)
57+
58+
// BLE Provisioning using the ESP SoftAP Prov works fine for any BLE SoC, including ESP32, ESP32S3 and ESP32C3.
59+
#if CONFIG_BLUEDROID_ENABLED && !defined(USE_SOFT_AP)
60+
Serial.println("Begin Provisioning using BLE");
61+
// Sample uuid that user can pass during provisioning using BLE
62+
uint8_t uuid[16] = {0xb4, 0xdf, 0x5a, 0x1c, 0x3f, 0x6b, 0xf4, 0xbf, 0xea, 0x4a, 0x82, 0x03, 0x04, 0x90, 0x1a, 0x02};
63+
WiFiProv.beginProvision(
64+
NETWORK_PROV_SCHEME_BLE, NETWORK_PROV_SCHEME_HANDLER_FREE_BLE, NETWORK_PROV_SECURITY_1, pop, service_name, service_key, uuid, reset_provisioned
65+
);
66+
Serial.println("You may use this BLE QRCode:");
67+
WiFiProv.printQR(service_name, pop, "ble");
68+
#else
69+
Serial.println("Begin Provisioning using Soft AP");
70+
WiFiProv.beginProvision(NETWORK_PROV_SCHEME_SOFTAP, NETWORK_PROV_SCHEME_HANDLER_NONE, NETWORK_PROV_SECURITY_1, pop, service_name, service_key);
71+
Serial.println("You may use this WiFi QRCode:");
72+
WiFiProv.printQR(service_name, pop, "softap");
73+
#endif
74+
75+
// Wait for WiFi connection
76+
uint32_t counter = 0;
77+
while (WiFi.status() != WL_CONNECTED) {
78+
// resets the device after 10 minutes
79+
if (counter > 2 * 60 * 10) {
80+
Serial.println("\r\n================================================");
81+
Serial.println("Already 10 minutes past. The device will reboot.");
82+
Serial.println("================================================\r\n");
83+
Serial.flush(); // wait until the Serial has sent the whole message.
84+
ESP.restart();
85+
}
86+
// WiFi searching feedback
87+
Serial.print(".");
88+
delay(500);
89+
// adds a new line every 30 seconds
90+
counter++;
91+
if (!(counter % 60)) {
92+
Serial.println();
93+
}
94+
}
95+
96+
// WiFi shall be connected by now
97+
Serial.println();
98+
99+
// Initialize at least one Matter EndPoint
100+
OnOffLight.begin();
101+
102+
// Associate a callback to the Matter Controller
103+
OnOffLight.onChange(matterCB);
104+
105+
// Matter beginning - Last step, after all EndPoints are initialized
106+
Matter.begin();
107+
108+
while (!Matter.isDeviceCommissioned()) {
109+
Serial.println("Matter Node is not commissioned yet.");
110+
Serial.println("Initiate the device discovery in your Matter environment.");
111+
Serial.println("Commission it to your Matter hub with the manual pairing code or QR code");
112+
Serial.printf("Manual pairing code: %s\r\n", Matter.getManualPairingCode().c_str());
113+
Serial.printf("QR code URL: %s\r\n", Matter.getOnboardingQRCodeUrl().c_str());
114+
Serial.println();
115+
// waits 30 seconds for Matter Commissioning, keeping it blocked until done
116+
delay(30000);
117+
}
118+
}
119+
120+
void loop() {
121+
delay(500);
122+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"fqbn_append": "PartitionScheme=huge_app",
3+
"requires": [
4+
"CONFIG_SOC_WIFI_SUPPORTED=y",
5+
"CONFIG_ESP_MATTER_ENABLE_DATA_MODEL=y"
6+
]
7+
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.