• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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, спасибо
 
Последнее редактирование:
Сверху Снизу