@@ -39,27 +39,27 @@ bool power_state = true;
3939
4040// The framework provides some standard device types like switch, lightbulb, fan, temperature sensor.
4141// But, you can also define custom devices using the 'Device' base class object, as shown here
42- static Device my_device ( " Air Cooler " , " my.device.air-cooler " , NULL ) ;
42+ static Device * my_device = NULL ;
4343
4444void sysProvEvent (arduino_event_t *sys_event)
4545{
4646 switch (sys_event->event_id ) {
47- case ARDUINO_EVENT_PROV_START:
47+ case ARDUINO_EVENT_PROV_START:
4848#if CONFIG_IDF_TARGET_ESP32S2
49- Serial.printf (" \n Provisioning Started with name \" %s\" and PoP \" %s\" on SoftAP\n " , service_name, pop);
50- printQR (service_name, pop, " softap" );
49+ Serial.printf (" \n Provisioning Started with name \" %s\" and PoP \" %s\" on SoftAP\n " , service_name, pop);
50+ printQR (service_name, pop, " softap" );
5151#else
52- Serial.printf (" \n Provisioning Started with name \" %s\" and PoP \" %s\" on BLE\n " , service_name, pop);
53- printQR (service_name, pop, " ble" );
52+ Serial.printf (" \n Provisioning Started with name \" %s\" and PoP \" %s\" on BLE\n " , service_name, pop);
53+ printQR (service_name, pop, " ble" );
5454#endif
55- break ;
56- case ARDUINO_EVENT_PROV_INIT:
57- wifi_prov_mgr_disable_auto_stop (10000 );
58- break ;
59- case ARDUINO_EVENT_PROV_CRED_SUCCESS:
60- wifi_prov_mgr_stop_provisioning ();
61- break ;
62- default :;
55+ break ;
56+ case ARDUINO_EVENT_PROV_INIT:
57+ wifi_prov_mgr_disable_auto_stop (10000 );
58+ break ;
59+ case ARDUINO_EVENT_PROV_CRED_SUCCESS:
60+ wifi_prov_mgr_stop_provisioning ();
61+ break ;
62+ default :;
6363 }
6464}
6565
@@ -68,13 +68,13 @@ void write_callback(Device *device, Param *param, const param_val_t val, void *p
6868 const char *device_name = device->getDeviceName ();
6969 const char *param_name = param->getParamName ();
7070
71- if (strcmp (param_name, " Power" ) == 0 ) {
72- Serial.printf (" Received value = %s for %s - %s\n " , val.val .b ? " true" : " false" , device_name, param_name);
71+ if (strcmp (param_name, " Power" ) == 0 ) {
72+ Serial.printf (" Received value = %s for %s - %s\n " , val.val .b ? " true" : " false" , device_name, param_name);
7373 power_state = val.val .b ;
7474 (power_state == false ) ? digitalWrite (gpio_power, LOW) : digitalWrite (gpio_power, HIGH);
7575 param->updateAndReport (val);
7676 } else if (strcmp (param_name, " Swing" ) == 0 ) {
77- Serial.printf (" \n Received value = %s for %s - %s\n " , val.val .b ? " true" : " false" , device_name, param_name);
77+ Serial.printf (" \n Received value = %s for %s - %s\n " , val.val .b ? " true" : " false" , device_name, param_name);
7878 bool swing = val.val .b ;
7979 (swing == false ) ? digitalWrite (gpio_swing, LOW) : digitalWrite (gpio_swing, HIGH);
8080 param->updateAndReport (val);
@@ -84,7 +84,7 @@ void write_callback(Device *device, Param *param, const param_val_t val, void *p
8484 analogWrite (gpio_speed, speed);
8585 param->updateAndReport (val);
8686 } else if (strcmp (param_name, " Mode" ) == 0 ) {
87- const char * mode = val.val .s ;
87+ const char * mode = val.val .s ;
8888 if (strcmp (mode, " Auto" ) == 0 ) {
8989 digitalWrite (gpio_mode_auto, HIGH);
9090 digitalWrite (gpio_mode_heat, LOW);
@@ -112,41 +112,50 @@ void setup()
112112 pinMode (gpio_swing, OUTPUT);
113113 digitalWrite (gpio_swing, DEFAULT_SWING);
114114 pinMode (gpio_mode_auto, OUTPUT);
115- if (strcmp (DEFAULT_MODE, " Auto" ) == 0 ) digitalWrite (gpio_mode_auto, HIGH);
115+ if (strcmp (DEFAULT_MODE, " Auto" ) == 0 ) {
116+ digitalWrite (gpio_mode_auto, HIGH);
117+ }
116118 pinMode (gpio_mode_cool, OUTPUT);
117- if (strcmp (DEFAULT_MODE, " Cool" ) == 0 ) digitalWrite (gpio_mode_auto, HIGH);
119+ if (strcmp (DEFAULT_MODE, " Cool" ) == 0 ) {
120+ digitalWrite (gpio_mode_auto, HIGH);
121+ }
118122 pinMode (gpio_mode_heat, OUTPUT);
119- if (strcmp (DEFAULT_MODE, " Heat" ) == 0 ) digitalWrite (gpio_mode_auto, HIGH);
123+ if (strcmp (DEFAULT_MODE, " Heat" ) == 0 ) {
124+ digitalWrite (gpio_mode_auto, HIGH);
125+ }
120126 pinMode (gpio_speed, OUTPUT);
121127 analogWrite (gpio_speed, DEFAULT_SPEED);
122128
123129 Node my_node;
124130 my_node = RMaker.initNode (" ESP RainMaker Node" );
125-
131+ my_device = new Device (" Air Cooler" , " my.device.air-cooler" , NULL );
132+ if (!my_device) {
133+ return ;
134+ }
126135 // Create custom air cooler device
127- my_device. addNameParam ();
128- my_device. addPowerParam (DEFAULT_POWER_MODE);
129- my_device. assignPrimaryParam (my_device. getParamByName (ESP_RMAKER_DEF_POWER_NAME));
136+ my_device-> addNameParam ();
137+ my_device-> addPowerParam (DEFAULT_POWER_MODE);
138+ my_device-> assignPrimaryParam (my_device-> getParamByName (ESP_RMAKER_DEF_POWER_NAME));
130139
131140 Param swing (" Swing" , ESP_RMAKER_PARAM_TOGGLE, value (DEFAULT_SWING), PROP_FLAG_READ | PROP_FLAG_WRITE);
132141 swing.addUIType (ESP_RMAKER_UI_TOGGLE);
133- my_device. addParam (swing);
142+ my_device-> addParam (swing);
134143
135144 Param speed (" Speed" , ESP_RMAKER_PARAM_RANGE, value (DEFAULT_SPEED), PROP_FLAG_READ | PROP_FLAG_WRITE);
136145 speed.addUIType (ESP_RMAKER_UI_SLIDER);
137146 speed.addBounds (value (0 ), value (255 ), value (1 ));
138- my_device. addParam (speed);
147+ my_device-> addParam (speed);
139148
140- static const char * modes[] = { " Auto" , " Cool" , " Heat" };
149+ static const char * modes[] = { " Auto" , " Cool" , " Heat" };
141150 Param mode_param (" Mode" , ESP_RMAKER_PARAM_MODE, value (" Auto" ), PROP_FLAG_READ | PROP_FLAG_WRITE);
142151 mode_param.addValidStrList (modes, 3 );
143152 mode_param.addUIType (ESP_RMAKER_UI_DROPDOWN);
144- my_device. addParam (mode_param);
153+ my_device-> addParam (mode_param);
145154
146- my_device. addCb (write_callback);
155+ my_device-> addCb (write_callback);
147156
148157 // Add custom Air Cooler device to the node
149- my_node.addDevice (my_device);
158+ my_node.addDevice (* my_device);
150159
151160 // This is optional
152161 // RMaker.enableOTA(OTA_USING_TOPICS);
@@ -172,29 +181,33 @@ void setup()
172181
173182void loop ()
174183{
175- if (digitalRead (gpio_reset) == LOW) { // Push button pressed
184+ if (digitalRead (gpio_reset) == LOW) { // Push button pressed
176185
177186 // Key debounce handling
178187 delay (100 );
179188 int startTime = millis ();
180- while (digitalRead (gpio_reset) == LOW) delay (50 );
189+ while (digitalRead (gpio_reset) == LOW) {
190+ delay (50 );
191+ }
181192 int press_duration = millis () - startTime;
182193
183194 if (press_duration > 10000 ) {
184- // If key pressed for more than 10secs, reset all
185- Serial.printf (" Reset to factory.\n " );
186- RMakerFactoryReset (2 );
195+ // If key pressed for more than 10secs, reset all
196+ Serial.printf (" Reset to factory.\n " );
197+ RMakerFactoryReset (2 );
187198 } else if (press_duration > 3000 ) {
188- Serial.printf (" Reset Wi-Fi.\n " );
189- // If key pressed for more than 3secs, but less than 10, reset Wi-Fi
190- RMakerWiFiReset (2 );
199+ Serial.printf (" Reset Wi-Fi.\n " );
200+ // If key pressed for more than 3secs, but less than 10, reset Wi-Fi
201+ RMakerWiFiReset (2 );
191202 } else {
192- // Toggle device state
193- power_state = !power_state;
194- Serial.printf (" Toggle power state to %s.\n " , power_state ? " true" : " false" );
195- my_device.updateAndReportParam (ESP_RMAKER_DEF_POWER_NAME, power_state);
196- (power_state == false ) ? digitalWrite (gpio_power, LOW) : digitalWrite (gpio_power, HIGH);
197- }
203+ // Toggle device state
204+ power_state = !power_state;
205+ Serial.printf (" Toggle power state to %s.\n " , power_state ? " true" : " false" );
206+ if (my_device) {
207+ my_device->updateAndReportParam (ESP_RMAKER_DEF_POWER_NAME, power_state);
208+ }
209+ (power_state == false ) ? digitalWrite (gpio_power, LOW) : digitalWrite (gpio_power, HIGH);
210+ }
198211 }
199212 delay (100 );
200213}
0 commit comments