Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

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

Тема в разделе "Общие вопросы по esp8266", создана пользователем fayvlad, 29 фев 2016.

  1. fayvlad

    fayvlad Новичок

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

    tretyakov_sa Moderator Команда форума

    Сообщения:
    970
    Симпатии:
    150
    Послать можно все что угодно. Желательно знать какие события будут формировать какие запросы?
     
  3. fayvlad

    fayvlad Новичок

    Сообщения:
    11
    Симпатии:
    0
    Ну например esp по таймеру (раз в пол часа) будит ардуинку, по uart дает команду типу - "возьми данные с датчиков", получает значение, делает json и отправляет http запрос с полученными данными на сайт.

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

    tretyakov_sa Moderator Команда форума

    Сообщения:
    970
    Симпатии:
    150
    Скатываемся на электронику. В связи с этим зачем UART? Зачем ардуинка?
    Какую автоматизацию сделать хотите?
     
  5. fayvlad

    fayvlad Новичок

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

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

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

    Andy Korg Moderator Команда форума

    Сообщения:
    413
    Симпатии:
    74
    Клиент легко реализуется на lwip и "свалке" pvvx, Примерно так:
    Черновик кода клиента lwip (раскрыть)
    Код (C):
    1. void start()
    2. {
    3.     struct tcp_pcb *TCPSock;
    4.  
    5.     TCPSock = tcp_new(); //Стуктура обслуживания соединения
    6.     if (TCPSockJSON == NULL)
    7.     {
    8.         Фигущки
    9.         return;
    10.     }
    11.     tcp_recv(TCPSock, http_receive);//receive -- Событие: прием ответа сервера
    12.     tcp_sent(TCPSock, http_client_sent);//http_client_sent - Событие: передача завершена
    13.     tcp_connect(TCPSock, IP_ADDR, IP_PORT, http_connected);//http_connected - Событие: Соединение установлено
    14. }
    15. //Соединение установлено, отпавляем GET, POST или чего там еще
    16. static err_t http_connected(void *arg, struct tcp_pcb *pcb, err_t err)
    17. {
    18.     char *query = "GET /bla-bla-bla?data=какие-то данные HTTP/1.1\r\nHost: esp8266.ru\r\n\r\n";
    19.  
    20.     LWIP_UNUSED_ARG(arg);
    21.     if(err == ERR_OK)    //соеденились нормально
    22.     {
    23.         tcp_write(pcb, query, strlen(query), 0);    //Подготовить запрос в буфере lwip
    24.         tcp_output(pcb);                //Отправить запрос
    25.     }
    26.     return err;
    27. }
    28. //Закрытие соединения
    29. static void http_client_close(struct tcp_pcb *pcb)
    30. {
    31.     tcp_arg(pcb, NULL);
    32.     tcp_sent(pcb, NULL);
    33.     tcp_close(pcb);
    34. }
    35.  
    36. //Получаем ответ сервера
    37. static err_t http_receive(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err_t err)
    38. {
    39.     LWIP_UNUSED_ARG(arg);
    40.  
    41.     if(err == ERR_OK && p != NULL)
    42.     {
    43.         processFunc(); //Какая-то функция обработки ответа
    44.         tcp_recved(pcb, p->tot_len);    //Сообщаем lwip, что прием порции данных закончен
    45.         pbuf_free(p);
    46.     }
    47.     else{
    48.         http_client_close(pcb);        //Какие-то проблемы закрываем соединение
    49.     }
    50.     return ERR_OK;
    51. }
    52.  
    53. //Запрос передан нормально
    54. static err_t http_client_sent(void *arg, struct tcp_pcb *pcb, u16_t len)
    55. {
    56.     LWIP_UNUSED_ARG(arg); //Просто говорим lwip что все хорошо
    57.     return ERR_OK;
    58. }
     
  7. tretyakov_sa

    tretyakov_sa Moderator Команда форума

    Сообщения:
    970
    Симпатии:
    150
    Самое простое.
    Датчики где должны быть установлены? Датчик температуры будет мерить воздух или теплый пол?
    Ролеты какие брать будите? Концевики будут на них?
    Почему шаговые двигатели? Какое у них потребление?
    Если шаговые, то 12 проводов от одной ардуинки, к моторам тянуть не технологично.
    Лучше тогда по отдельной ESP на каждый ролет, а можно по отдельной ардуинки на каждый двигатель и управлять по ИК каналу с ESP.
    Светильники будут диммироваться, 6-8 разбиты на отдельные группы или каждый управляется отдельно. RGB лена какая?
     
  8. fayvlad

    fayvlad Новичок

    Сообщения:
    11
    Симпатии:
    0
    Я хочу мерить температуру воздуха за балконом и на самом балконе, возможно влажность - чтобы отправлять в "народный мониторинг".

    Роллеты самые обычные
    фото (раскрыть)
    [​IMG]
    вместо веревочек - на механизм поставлю моторы (корпусы на 3д принтере напечатают) будет белая коробочка, к ним будут подходить заранее проведенные провода, в коробочках - шаговики
    28BYJ-48
    Потому что валяются без дела, двигатели с редуктором, роллеты сами по себе крутить их не будут. Потребляют 5в, под нагрузкой не замерял, но ту же витую пару или какой то сигнальный провод 4-пиновый можно бросить, пару секунд работы - провода не нагреются.
    в любом случае провода питания нужно будет вести... Два окна будут аккуратными, потому что с потолка будут идти короткие провода, а вот с окном, которое будет открываться - придется немного наколхозить...
    1. да, светильники по плану будут регулироваться шим`ом.
    2. светильник будет каждый включатся отдельно - на стене будет висеть клавиатура 3х4, для управления без интернета
    фото (раскрыть)
    [​IMG]

    3. RGB лента - метров 10 будет, подсвечивать фигурный потолок, для нее отдельно блок питания (или вообще отдельно питание 12в по квартире проведу), а как управлять - решу по ходу, если будет контроллер толковый с пультом - то управлять буду по ir..
     
  9. fayvlad

    fayvlad Новичок

    Сообщения:
    11
    Симпатии:
    0
    как вам идея и что на счет клиент\сервера?
     
  10. Шаповалов Игорь

    Шаповалов Игорь Новичок

    Сообщения:
    32
    Симпатии:
    1
    @fayvlad
    Как вариант у приложения blynk есть RGB зебра.
     

Поделиться этой страницей