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

Нужна помощь Включение ПК с помощью ESP8266

Тема в разделе "Умный дом", создана пользователем view24, 26 апр 2017.

  1. rst

    rst Читатель

    Сообщения:
    253
    Симпатии:
    7
    Не знаю что такое MAX340.
    Если Вы имели в виду чип USB-UART типа MAX232x или CP210x или PL2303 и т.п., то они как я писал, не подходят, так как реализуют CDC-профиль, а нужен HID-профиль.
    Библиотеками никакими не пользуюсь, так что не подскажу. Но можно взять посмотреть примеры реализации HID-устройств для разных МК, которые идут в комплекте например с IAR. Взять какой-нить МК с USB, для такого обычно есть несколько примеров проектов с USB HID device. И остаётся в качестве нижнего уровня USB-стека (энумерация, дескрипторы, работа с эндпоинтами и т.п.) взять soft-USB-стек, а в качестве верхнего уровня (USB-профили) - из примера.
    В той же MAX232 внутри реализован USB-стек и CDC-профиль. Убрать оттуда CDC и заменить на HID никак не получится.
     
  2. view24

    view24 Читатель

    Сообщения:
    154
    Симпатии:
    6
    Спасибо за идею. Юрий, в анонсе темы я написал, что подружить NodeMcu c интернетом я смогу, но оказалось это не так, ибо интернет оказался за proxy squid, ибо это предприятие. Я думаю, что Вы знаете как организовать http get запрос от ESP8266 через proxy на сайт в интернете. Просьба подсказать, как это сделать с использованием Arduino IDE.
     
  3. Сергей_Ф

    Сергей_Ф Moderator Команда форума

    Сообщения:
    2.127
    Симпатии:
    226
  4. rst

    rst Читатель

    Сообщения:
    253
    Симпатии:
    7
    HTTP-proxy - это очень просто. Запрос через него мало отличается от запроса без прокси. Но товарищ-то спрашивает про какой-то proxy squid, не знаю что это такое.
     
  5. view24

    view24 Читатель

    Сообщения:
    154
    Симпатии:
    6
    А Вы много знаете реализаций proxy сервера на предприятии? Чтобы сотрудники не лазили в социальные сети и т.д.? Так вот SQUID это то же, что Windows для процессора intel - самый распространенный вариант. Но вернемся к теме, Вы написали 'мало чем отличается'. http заголовки это такая штука, что малейшая ошибка - и запрос приходит с кодом 4xx. Вопрос: Вы считаете, что достаточно просто перенаправить запрос на host и port proxy или есть еще подводные камни?
     
  6. rst

    rst Читатель

    Сообщения:
    253
    Симпатии:
    7
    Я вообще не знаю ни одной реализации proxy-сервера, так как я не админ и ими не занимаюсь. Да и вопрос тут вроде совсем в другом: Вам же надо не сервер свой написать, а просто работать через него?
    И если это обычный HTTP-прокси, то нет никакой разницы чьего он производства, так как должен удовлетворять стандарту.
    Я писал HTTP-клиент, работающий через HTTP-прокси совершенно не зная какой там у админов сервер стоит. Тоже для решения аналогичной задачи - нужно было чтобы моё ПО работало и в офисе, где тоже в инет ходили через HTTP-прокси.
    Недостаточно. Там сам запрос формируется по другому.
    И я не считаю, я пару раз писал клиентов и оба работают до сих пор. Один - под винду, другой - на Cortex-M4.
    Вот фрагмент виндового клиента, формирующего запрос (как видно - разница ничтожна):
    Код (Text):
    1.   CInetConnection *socket = new CInetConnection();
    2.   if (useProxy) f = socket->Open(proxyHost, atol(proxyPort));
    3.   else f = socket->Open(srcHost, srcPort);
    4.   if (f) { //Если не удалось соединиться - вываливаемся
    5.     if (useProxy) {
    6.       s = NULL;
    7.       s2 = "";
    8.       if (useProxyAuth && proxyLogin[0] && proxyPwd[0]) {
    9.         i = vbuf1.sprintf("%s:%s", proxyLogin, proxyPwd);
    10.         s = new char[i * 2 + 4 + 1];
    11.         if (s1 = Base64Encode(s, i * 2 + 4, (char *)vbuf1, i)) {
    12.           *s1 = 0;
    13.           vbuf1.sprintf("Proxy-Authorization: Basic %s\r\n", s);
    14.           s2 = (char *)vbuf1;
    15.         }
    16.       }
    17.       i = vbuf.sprintf(
    18.         "GET http://%s HTTP/1.0\r\n"
    19.         "Accept: */*\r\n"
    20.         "Host: %s:%d\r\n" "%s"
    21.         "Pragma: no-cache\r\n"
    22.         "Cache-Control: no-cache\r\n"
    23.         "\r\n\0", srcURL, srcHost, srcPort, s2);
    24.       if (s) delete s;
    25.     } else i = vbuf.sprintf(
    26.       "GET /%s HTTP/1.0\r\n"
    27.       "Accept: */*\r\n"
    28.       "Host: %s:%d\r\n"
    29.       "\r\n\0", srcDocument, srcHost, srcPort);
     
    Последнее редактирование: 29 апр 2017
  7. vivalenta

    vivalenta Новичок

    Сообщения:
    6
    Симпатии:
    3
    есть такая штука, пашет уже год, есть исходники. куда сбросить ?

    использует:
    1.) esp 8266-12E (NodeMCU)
    2) реле 5В 1 канал
    3) 4 резистора 68-220 КОм

    умеет:
    Онлайн счетчик
    Включать/отключать/Жесткий сброс/Жесткая перезагрузка
    отоброжать состояние (вкл/викл), и напругу (0-14В)

    как оформить/ куда сбросить / нужно ?
     
    shuraf нравится это.
  8. vivalenta

    vivalenta Новичок

    Сообщения:
    6
    Симпатии:
    3
    как-то так виглядит
     

    Вложения:

  9. shuraf

    shuraf Читатель

    Сообщения:
    132
    Симпатии:
    6
    Все нужно. Кидай чего не жалко, все пригодится
     
  10. vivalenta

    vivalenta Новичок

    Сообщения:
    6
    Симпатии:
    3
    В архиве исходник, 2 фотки, и пини NodeMCU (esp8266-12e devkit)
    Раскрыть Спойлер
    Код (Text):
    1. #include <ESP8266WiFi.h>
    2. #include <WiFiClient.h>
    3. #include <ESP8266WebServer.h>
    4. #include <ESP8266mDNS.h>
    5.  
    6.  
    7. //const char *ssid = "ssid";
    8. //const char *password = "passpass";
    9. const char *ssid = "ssid";             // Сід Wi-Fi
    10. const char *password = "passpass";    // Пасс Wi-Fi
    11.  
    12. ESP8266WebServer server ( 80 );
    13. IPAddress ip;
    14. char ipH[16];
    15. const int led = 2;  // Синій світлодіод (D4)
    16. const int rel = 0;  // Реле сидить на 0 (D3)
    17. int curState = 0;
    18. int digState = 0;
    19. float voltage = 0.0;
    20. char svoltage[5] = "";
    21.  
    22. void handleRoot() {
    23.   curState = analogRead(A0);  // Знімаю значення з A0 (при моему поділювачеві 220-86 КОм та напрузі 12В значення 730)
    24.   digState = digitalRead(4);  // Знімаю значення з gpio4 (D2) стан світлодіода PLED+ на материнці
    25.   voltage = (float)curState * 12 / 730;
    26.   dtostrf(voltage, 2, 1, svoltage);
    27.   digitalWrite ( led, 0 );
    28.   char temp[800];
    29.   int sec = millis() / 1000;
    30.   int min = sec / 60;
    31.   int hr = min / 60;
    32.   snprintf ( temp, 800, "<meta http-equiv='refresh' content='5'>\
    33.   <style>body { background-color: #000000; Color: #9ACD32; font-size: 300%; }a.kf {color: #fff;  background:#4BD438;  padding: .7em 1.5em;  outline: none; border-radius:5px;}a.k {color: #fff;  background:#D44B38;  padding: .7em 1.5em;  outline: none; border-radius:5px;}</style>\
    34.   <h1>Online: %02d:%02d:%02d</h1>\
    35.   <br><a href='/on' class='kf'>On</a><a href='/res' class='k'>Reset</a><a href='/off' class='k'>HardOff</a><br><br><p>State: %s V</p>\
    36.   <embed src='%d.svg' width='512' height='512' type='image/svg+xml'>", hr , min % 60, sec % 60, svoltage, digState);
    37.   server.send ( 800, "text/html", temp );
    38.   delay(100);
    39.   digitalWrite ( led, 1 );
    40. }
    41.  
    42. void handleNotFound() {
    43.   digitalWrite ( led, 0 );
    44.   String message = "File Not Found\n\n";
    45.   message += "URI: ";
    46.   message += server.uri();
    47.   message += "\nMethod: ";
    48.   message += ( server.method() == HTTP_GET ) ? "GET" : "POST";
    49.   message += "\nArguments: ";
    50.   message += server.args();
    51.   message += "\n";
    52.  
    53.   for ( uint8_t i = 0; i < server.args(); i++ ) {
    54.     message += " " + server.argName ( i ) + ": " + server.arg ( i ) + "\n";
    55.   }
    56.  
    57.   server.send ( 404, "text/plain", message );
    58.   digitalWrite ( led, 1 );
    59. }
    60.  
    61. void setup ( void ) {
    62.   pinMode ( 4, INPUT );
    63.   pinMode ( A0, INPUT );
    64.   pinMode ( led, OUTPUT );
    65.   pinMode ( rel, OUTPUT );
    66.   digitalWrite ( led, 1);
    67.   digitalWrite ( rel, 0 );
    68.   WiFi.hostname("esp8266");
    69.   WiFi.mode(WIFI_OFF);
    70.   WiFi.begin ( ssid, password );
    71.  
    72.   while ( WiFi.status() != WL_CONNECTED ) {
    73.     digitalWrite ( led, 0 );
    74.     delay ( 450 );
    75.     digitalWrite ( led, 1 );
    76.     delay ( 50 );
    77.   }
    78.   if (!MDNS.begin("esp8266")) {
    79.     while (10) {
    80.       delay(100);
    81.     }
    82.   }
    83.  
    84.   MDNS.addService("http", "tcp", 80);
    85.   ip = WiFi.localIP();
    86.   sprintf(ipH, "%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]);
    87.   server.on ( "/", handleRoot );
    88.   server.on ( "/on", []() {
    89.     digitalWrite(rel, 1);
    90.     delay(200);
    91.     digitalWrite(rel, 0);
    92.     String Message = "<meta http-equiv='refresh' content='5;url=http://";
    93.     Message += ipH;
    94.     Message += "'/><h1>On Done!</h1><br><p>";
    95.     Message += "</p>";
    96.     Message += "<embed src='ok.svg' width='300' height='300' type='image/svg+xml' >";
    97.     server.send ( 200, "text/html", Message );
    98.   } );
    99.   server.on ( "/off", []() {
    100.     String Message = "<meta http-equiv='refresh' content='5;url=http://";
    101.     Message += ipH;
    102.     Message += "'/><h1>Off Done!</h1><br><p>";
    103.     Message += "</p>";
    104.     Message += "<embed src='ok.svg' width='300' height='300' type='image/svg+xml' >";
    105.     server.send ( 200, "text/html", Message );
    106.     digitalWrite(rel, 1);
    107.     delay(8000);
    108.     digitalWrite(rel, 0);
    109.   } );
    110.   server.on ( "/res", []() {
    111.     String Message = "<meta http-equiv='refresh' content='5;url=http://";
    112.     Message += ipH;
    113.     Message += "'/><h1>Reset Done!</h1><br><p>";
    114.     Message += "</p>";
    115.     Message += "<embed src='ok.svg' width='300' height='300' type='image/svg+xml' >";
    116.     server.send ( 200, "text/html", Message );
    117.     digitalWrite(rel, 1);
    118.     delay(8000);
    119.     digitalWrite(rel, 0);
    120.     delay(3000);
    121.     digitalWrite(rel, 1);
    122.     delay(200);
    123.     digitalWrite(rel, 0);
    124.   } );
    125.  
    126.   server.on ( "/ok.svg", []() { server.send ( 200, "image/svg+xml", "<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='100%' height='100%' viewBox='0 0 300 300'><circle fill='#009D0D' cx='144' cy='144' r='144'/> <polygon fill='#FFFFFF' points='122.4,222.7 241,104 207,70.2 122.9,154.8 81,112.2 47,146.8'/>Not support inline SVG.</svg>");} );
    127.   server.on ( "/1.svg", []() { server.send ( 500, "image/svg+xml", "<svg xmlns='http://www.w3.org/2000/svg' width='100' height='100' viewBox='0 0 200 200'><circle cx='75' cy='75' r='65' fill='#4BD438'/><path d='M75 37a38 38 0 1 0 38 38A38 38 0 0 0 75 37Zm0 72.4A34.5 34.5 0 0 1 67.8 41.3l-3.5 38.4L75.7 76l-2 33.3 16.5-46-9.8 2.4 3.3-24A34.4 34.4 0 0 1 75 109.5Z' fill='#050'/></svg>");} );
    128.   server.on ( "/0.svg", []() { server.send ( 500, "image/svg+xml", "<svg xmlns='http://www.w3.org/2000/svg' width='100' height='100' viewBox='0 0 200 200'><circle cx='75' cy='75' r='65' fill='#D44B38'/><path d='M75 37a38 38 0 1 0 38 38A38 38 0 0 0 75 37Zm0 72.4A34.5 34.5 0 0 1 67.8 41.3l-3.5 38.4L75.7 76l-2 33.3 16.5-46-9.8 2.4 3.3-24A34.4 34.4 0 0 1 75 109.5Z' fill='#500'/></svg>");} );
    129.   server.onNotFound ( handleNotFound );
    130.   server.begin();
    131. }
    132.  
    133. void loop ( void ) {
    134.   server.handleClient();
    135. }
    136.  
    137.  

    в среднем пашет 600+ часов онлайн, 2-3 включения в день

    upd. добавил "схему"
     

    Вложения:

    Последнее редактирование: 11 май 2017
    Сергей_Ф и shuraf нравится это.
  11. Сергей_Ф

    Сергей_Ф Moderator Команда форума

    Сообщения:
    2.127
    Симпатии:
    226
    @vivalenta какой же это ресет? Это выключение и включение :)
     
  12. vivalenta

    vivalenta Новичок

    Сообщения:
    6
    Симпатии:
    3
    хадресет, зажать -> держать -> отпустить -> включить заново
     
  13. zsp040

    zsp040 Новичок

    Сообщения:
    1
    Симпатии:
    0
    blynk + WOL. Все удобно, белый ип не нужен, лишние провода тоже. Если нужен код - обращайтесь
     
  14. Arazel

    Arazel Новичок

    Сообщения:
    1
    Симпатии:
    0
    скинь плизз
     
  15. safari

    safari Новичок

    Сообщения:
    104
    Симпатии:
    2
    Я свой ПК подлючал так.
    nodemcu + blynk, стандартное ардуиское реле на 5В, замыкаем power на материнке. И включить и выключить можно через инет. Делал для удаленного запуска тимвьювера.
     

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