//This example demonstrates the ESP RainMaker with a standard Switch device.#include"RMaker.h"#include"WiFi.h"#include"WiFiProv.h"#defineDEFAULT_POWER_MODEtrueconstchar*service_name ="PROV_1234";constchar*pop ="abcd1234";//GPIO for push button#ifCONFIG_IDF_TARGET_ESP32C3staticint gpio_0 =9;staticint gpio_switch =7;#else//GPIO for virtual devicestaticint gpio_0 =0;staticint gpio_switch =16;#endif/* Variable for reading pin status*/
bool switch_state = true;//The framework provides some standard device types like switch, lightbulb, fan, temperaturesensor.static Switch my_switch;voidsysProvEvent(arduino_event_t*sys_event){switch(sys_event->event_id){case ARDUINO_EVENT_PROV_START://#if CONFIG_IDF_TARGET_ESP32S2
Serial.printf("\nProvisioning Started with name \"%s\" and PoP \"%s\" on SoftAP\n", service_name, pop);printQR(service_name, pop,"softap");//#else// Serial.printf("\nProvisioning Started with name \"%s\" and PoP \"%s\" on BLE\n", service_name, pop);// printQR(service_name, pop, "ble");//#endifbreak;case ARDUINO_EVENT_PROV_INIT:wifi_prov_mgr_disable_auto_stop(10000);break;case ARDUINO_EVENT_PROV_CRED_SUCCESS:wifi_prov_mgr_stop_provisioning();break;default:;}}voidwrite_callback(Device *device, Param *param,constparam_val_t val,void*priv_data,write_ctx_t*ctx){constchar*device_name = device->getDeviceName();constchar*param_name = param->getParamName();if(strcmp(param_name,"Power")==0){
Serial.printf("Received value = %s for %s - %s\n", val.val.b?"true":"false", device_name, param_name);
switch_state = val.val.b;(switch_state == false)?digitalWrite(gpio_switch, LOW):digitalWrite(gpio_switch, HIGH);
param->updateAndReport(val);}}voidsetup(){
Serial.begin(115200);pinMode(gpio_0, INPUT);pinMode(gpio_switch, OUTPUT);digitalWrite(gpio_switch, DEFAULT_POWER_MODE);
Node my_node;
my_node = RMaker.initNode("ESP RainMaker Node");//Initialize switch device
my_switch =Switch("Switch",&gpio_switch);//Standard switch device
my_switch.addCb(write_callback);//Add switch device to the node
my_node.addDevice(my_switch);//This is optional
RMaker.enableOTA(OTA_USING_TOPICS);//If you want to enable scheduling, set time zone for your region using setTimeZone().//The list of available values are provided here https://rainmaker.espressif.com/docs/time-service.html// RMaker.setTimeZone("Asia/Shanghai");// Alternatively, enable the Timezone service and let the phone apps set the appropriate timezone
RMaker.enableTZService();
RMaker.enableSchedule();
RMaker.enableScenes();
RMaker.start();
WiFi.onEvent(sysProvEvent);//#if CONFIG_IDF_TARGET_ESP32S2
WiFiProv.beginProvision(WIFI_PROV_SCHEME_SOFTAP, WIFI_PROV_SCHEME_HANDLER_NONE, WIFI_PROV_SECURITY_1, pop, service_name);//#else// WiFiProv.beginProvision(WIFI_PROV_SCHEME_BLE, WIFI_PROV_SCHEME_HANDLER_FREE_BTDM, WIFI_PROV_SECURITY_1, pop, service_name);//#endif}voidloop(){if(digitalRead(gpio_0)== LOW){//Push button pressed// Key debounce handlingdelay(100);int startTime =millis();while(digitalRead(gpio_0)== LOW)delay(50);int endTime =millis();if((endTime - startTime)>10000){// If key pressed for more than 10secs, reset all
Serial.printf("Reset to factory.\n");RMakerFactoryReset(2);}elseif((endTime - startTime)>3000){
Serial.printf("Reset Wi-Fi.\n");// If key pressed for more than 3secs, but less than 10, reset Wi-FiRMakerWiFiReset(2);}else{// Toggle device state
switch_state =!switch_state;
Serial.printf("Toggle State to %s.\n", switch_state ?"true":"false");
my_switch.updateAndReportParam(ESP_RMAKER_DEF_POWER_NAME, switch_state);(switch_state == false)?digitalWrite(gpio_switch, LOW):digitalWrite(gpio_switch, HIGH);}}delay(100);}
介绍
mp4⽂件格式⼜被称为MPEG-4 Part 14,出⾃MPEG-4标准第14部分 。它是⼀种多媒体格式容器,⼴泛⽤于包装视频和⾳频数据流、海报、字幕和元数据等。(顺便⼀提,⽬前流⾏的视频编码格式AVC/H264 定义在MPEG-4 Part 10)…
Spring框架入门 简介开发环境入门案列Spring bean的定义常用属性 Spring IOC (控制反转)简介控制反转(IoC)案例 依赖注入(DI)IoC 容器的两种实现ApplicationContextBeanFactory Spring Bean属性注入构造函数注入setter 注入 Sprin…