• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

esp8266 как основа умного переключателя света

alexsmd

New member
Здравствуйте, хочу сделать переключатель по типу этой статьи - http://geektimes.ru/post/242366/.
но стоит задача реализовать все это на Си. Изучаю официальную документацию. И учусь писать прошивки. В планах научиться программировать на С/С++.
Имею Esp-8266 07. На GPIO4 подключен диод. На GPIO2 подключена кнопка.
Пытаюсь реализовать переключение света с помощью кнопки. Как считывать значение с GPIO2?? Есть какой-то коллбэк или опшивать его с помощью таймера?
 

alexsmd

New member
Код:
/*
    Button1
*/

#include <ets_sys.h>
#include <osapi.h>
#include <os_type.h>
#include <gpio.h>
#include "driver/uart.h"

// see eagle_soc.h for these definitions
#define BTN_GPIO 5
#define BTN_GPIO_MUX PERIPHS_IO_MUX_GPIO5_U
#define BTN_GPIO_FUNC FUNC_GPIO5

#define DELAY 500 /* milliseconds */

static ETSTimer BtnTimer;
uint16_t GPIO_Time_Active = 0;

extern int ets_uart_printf(const char *fmt, ...);

static void ICACHE_FLASH_ATTR BtnTimerCb(void *arg)
{
    if (GPIO_INPUT_GET(BTN_GPIO))
    {
        ets_uart_printf("Button pushed \r\n");
    }
}

void BtnInit() {
    // Select pin function
    PIN_FUNC_SELECT(BTN_GPIO_MUX, BTN_GPIO_FUNC);
    // Enable pull up R
    PIN_PULLUP_EN(BTN_GPIO_MUX);
    // Set GPIO0 as input mode
    gpio_output_set(0, 0, 0, BIT0);
    os_timer_disarm(&BtnTimer);
    os_timer_setfn(&BtnTimer, BtnTimerCb, NULL);
    os_timer_arm(&BtnTimer, DELAY, 1);
    ets_uart_printf("BtnInit...\r\n");
}

void user_rf_pre_init(void){}

void user_init(void){
    uart_init(BIT_RATE_115200, BIT_RATE_115200);
    ets_uart_printf("Service started...\r\n");
    BtnInit();
}
Не работает код.
К gpio5 подключена кнопка, хочу чтобы при нажатии кнопки выдавал строку в UART.

Подскажите как правильно работать с GPIO, спасибо
 
Последнее редактирование:
Сверху Снизу