思路:
用两片c3,一片作为开关,另一片作为http servet控制灯泡,两者采用wifi 连接
开关:GPIO 2脚电阻上拉,平时始终为高电平,开灯时按下按钮,2脚接地,电平为低电平。再用wifi把此信息传给另一个c3。
开关c3 前期采用纽扣电池普通供电,看一枚电池能用多少天,后期改为esp32 的睡眠模式,GPIO中断模式。
开关:下面程序为2脚接地,led灯闪烁
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <inttypes.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/queue.h"
#include "driver/gpio.h"
#include "esp_log.h"#define GPIO_out 0 //led灯闪烁
#define GPIO_input 2 //按钮 void app_main(void)
{gpio_config_t io_conf = {}; io_conf.intr_type = GPIO_INTR_DISABLE;io_conf.mode = GPIO_MODE_OUTPUT;io_conf.pin_bit_mask = 1ULL<<GPIO_out; io_conf.pull_down_en = 0;io_conf.pull_up_en = 0;gpio_config(&io_conf);io_conf.intr_type = GPIO_INTR_DISABLE;io_conf.mode = GPIO_MODE_INPUT;io_conf.pin_bit_mask = 1ULL<<GPIO_input; io_conf.pull_down_en = 0;io_conf.pull_up_en = 1; ; //上拉电阻,保证按钮没有按下电平为高电平gpio_config(&io_conf);void lignt(){ //led 间隔1秒闪烁gpio_set_level(GPIO_out,1);vTaskDelay(1000/portTICK_PERIOD_MS);gpio_set_level(GPIO_out,0);vTaskDelay(1000/portTICK_PERIOD_MS); }int state;while (1) {state = gpio_get_level(GPIO_input); //按钮脚电平if(state==1){ESP_LOGI("GPIO", "GPIO_input=1");vTaskDelay(1000/portTICK_PERIOD_MS); }else{lignt(); }}
}