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

Вопрос esp8266 как клиент-сервер

fayvlad

New member
Здравствуйте, наконец то дождался модуль -07 типа, запаял на переходник и пока буду разбираться с "hello world" - хочу решить один вопрос, можно ли будет сделать с него сервер/клиент для своих нужд.
Расскажу более подробною Как и все, кто уже наигрался микроконтроллерами - решил сделать автоматизацию некоторого функционала в доме (по сути мини "умный дом").
Пишу сайт со своим api - для получения данных от клиентов (температура/влажность/освещение) - все это будет сохраняться в базе чтобы потом мог выводить диаграммы. Клиентов (esp8266) будет много, возможно позже - это будет как облако, куда любой сможет зарегистрироваться, добавить свои модули, настроить и управлять ими.
Т.Е в данном случае esp8266 будет клиентом! и, например раз в пол часа он должен будет послать данные на сервер.
Но на счет "управлять" - esp8266 должен быть самим клиентом со своим api, а сервер (сайт) будет посылать cUrl-ом запросы, которые будет парсить и отдавать команды на выполнение в ардуинку.
Сам вопрос - Как сделать, чтобы esp8266 мог как посылать PUT(или post запросы на мой сервер) так и принимать данные ?
 

tretyakov_sa

Moderator
Команда форума
Сам вопрос - Как сделать, чтобы esp8266 мог как посылать PUT(или post запросы на мой сервер) так и принимать данные ?
Послать можно все что угодно. Желательно знать какие события будут формировать какие запросы?
 

fayvlad

New member
Послать можно все что угодно. Желательно знать какие события будут формировать какие запросы?
Ну например esp по таймеру (раз в пол часа) будит ардуинку, по uart дает команду типу - "возьми данные с датчиков", получает значение, делает json и отправляет http запрос с полученными данными на сайт.

В планах - забить адрес сайта и какой то токен. При включении esp он сразу подавал запрос на сайт, а на сайте я забирал бы ip с которого пришел запрос, чтобы по нему потом с сайта мог и послать запрос - при клике на выключатели и тому подобное...
 

tretyakov_sa

Moderator
Команда форума
Ну например esp по таймеру (раз в пол часа) будит ардуинку, по uart дает команду типу - "возьми данные с датчиков", получает значение, делает json и отправляет http запрос с полученными данными на сайт.
Скатываемся на электронику. В связи с этим зачем UART? Зачем ардуинка?
Расскажу более подробною Как и все, кто уже наигрался микроконтроллерами - решил сделать автоматизацию некоторого функционала в доме (по сути мини "умный дом").
Какую автоматизацию сделать хотите?
 

fayvlad

New member
Скатываемся на электронику. В связи с этим зачем UART? Зачем ардуинка?
Вы о том, что хватит выходов esp? Нет, мне мало будет выходов, даже у версии 07. uart - я считаю самое стабильное решение в передачи данных. Кстати, ардуинки использую pro mini.

Какую автоматизацию сделать хотите?
Хочу начать с балкона (стартую ремонт) - Автоматизировать хочу
1. свет, через микроконтроллер
2. датчики (температуры, освещенности)
3. (вот и зачем ардуинка) - 3 ролеты на окна и к ним 3 шаговых двигателя (12 выходов - если не колхозить через 74HC595 )
4. полет желаний - потому что на балконе хочу сделать себе кабинет, где смогу паять и программировать...

Позже будет ремонт в комнате - 6-8 led светильников встраиваемых, rgb лента и все это хочу управлять телефоном. Если есть, что подсказать, что еще с квартиры в интернет отдать, предлагайте =)
 

Andy Korg

Moderator
Команда форума
Клиент легко реализуется на lwip и "свалке" pvvx, Примерно так:
Код:
void start()
{
    struct tcp_pcb *TCPSock;

    TCPSock = tcp_new(); //Стуктура обслуживания соединения
    if (TCPSockJSON == NULL)
    {
        Фигущки
        return;
    }
    tcp_recv(TCPSock, http_receive);//receive -- Событие: прием ответа сервера
    tcp_sent(TCPSock, http_client_sent);//http_client_sent - Событие: передача завершена
    tcp_connect(TCPSock, IP_ADDR, IP_PORT, http_connected);//http_connected - Событие: Соединение установлено
}
//Соединение установлено, отпавляем GET, POST или чего там еще
static err_t http_connected(void *arg, struct tcp_pcb *pcb, err_t err)
{
    char *query = "GET /bla-bla-bla?data=какие-то данные HTTP/1.1\r\nHost: esp8266.ru\r\n\r\n";

    LWIP_UNUSED_ARG(arg);
    if(err == ERR_OK)    //соеденились нормально
    {
        tcp_write(pcb, query, strlen(query), 0);    //Подготовить запрос в буфере lwip
        tcp_output(pcb);                //Отправить запрос
    }
    return err;
}
//Закрытие соединения
static void http_client_close(struct tcp_pcb *pcb)
{
    tcp_arg(pcb, NULL);
    tcp_sent(pcb, NULL);
    tcp_close(pcb);
}

//Получаем ответ сервера
static err_t http_receive(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err)
{
    LWIP_UNUSED_ARG(arg);

    if(err == ERR_OK && p != NULL)
    {
        processFunc(); //Какая-то функция обработки ответа
        tcp_recved(pcb, p->tot_len);    //Сообщаем lwip, что прием порции данных закончен
        pbuf_free(p);
    }
    else{
        http_client_close(pcb);        //Какие-то проблемы закрываем соединение
    }
    return ERR_OK;
}

//Запрос передан нормально
static err_t http_client_sent(void *arg, struct tcp_pcb *pcb, u16_t len)
{
    LWIP_UNUSED_ARG(arg); //Просто говорим lwip что все хорошо
    return ERR_OK;
}
 

tretyakov_sa

Moderator
Команда форума
1. свет, через микроконтроллер
Самое простое.
2. датчики (температуры, освещенности)
Датчики где должны быть установлены? Датчик температуры будет мерить воздух или теплый пол?
3. (вот и зачем ардуинка) - 3 ролеты на окна и к ним 3 шаговых двигателя (12 выходов - если не колхозить через 74HC595 )
Ролеты какие брать будите? Концевики будут на них?
Почему шаговые двигатели? Какое у них потребление?
Если шаговые, то 12 проводов от одной ардуинки, к моторам тянуть не технологично.
Лучше тогда по отдельной ESP на каждый ролет, а можно по отдельной ардуинки на каждый двигатель и управлять по ИК каналу с ESP.
Позже будет ремонт в комнате - 6-8 led светильников встраиваемых, rgb лента и все это хочу управлять телефоном. Если есть, что подсказать, что еще с квартиры в интернет отдать, предлагайте =)
Светильники будут диммироваться, 6-8 разбиты на отдельные группы или каждый управляется отдельно. RGB лена какая?
 

fayvlad

New member
Датчик температуры будет мерить воздух или теплый пол?
Я хочу мерить температуру воздуха за балконом и на самом балконе, возможно влажность - чтобы отправлять в "народный мониторинг".

Ролеты какие брать будите? Концевики будут на них?
Роллеты самые обычные
вместо веревочек - на механизм поставлю моторы (корпусы на 3д принтере напечатают) будет белая коробочка, к ним будут подходить заранее проведенные провода, в коробочках - шаговики
28BYJ-48
Почему шаговые двигатели? Какое у них потребление?
Потому что валяются без дела, двигатели с редуктором, роллеты сами по себе крутить их не будут. Потребляют 5в, под нагрузкой не замерял, но ту же витую пару или какой то сигнальный провод 4-пиновый можно бросить, пару секунд работы - провода не нагреются.
Если шаговые, то 12 проводов от одной ардуинки, к моторам тянуть не технологично.
в любом случае провода питания нужно будет вести... Два окна будут аккуратными, потому что с потолка будут идти короткие провода, а вот с окном, которое будет открываться - придется немного наколхозить...
Светильники будут диммироваться, 6-8 разбиты на отдельные группы или каждый управляется отдельно. RGB лена какая?
1. да, светильники по плану будут регулироваться шим`ом.
2. светильник будет каждый включатся отдельно - на стене будет висеть клавиатура 3х4, для управления без интернета
3. RGB лента - метров 10 будет, подсвечивать фигурный потолок, для нее отдельно блок питания (или вообще отдельно питание 12в по квартире проведу), а как управлять - решу по ходу, если будет контроллер толковый с пультом - то управлять буду по ir..
 
Сверху Снизу