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

Запрос примеров для Sming

Тема в разделе "Sming Open Source Framework", создана пользователем JustACat, 23 мар 2015.

  1. dimakein

    dimakein Новичок

    Сообщения:
    3
    Симпатии:
    0
    Здравствуйте, уважаемые форумчане. Я хочу реализовать управление RGB светодиодной лентой, но столкнулся с непонятным глюком:
    переписал немного пример Basic_PWM, чтобы управлять тремя каналами, с ним никаких проблем нет
    Код переписанного примера (раскрыть)

    Код (C):
    1.  
    2. [HASHTAG]#include[/HASHTAG] <user_config.h>
    3. [HASHTAG]#include[/HASHTAG] <SmingCore/SmingCore.h>
    4.  
    5. [HASHTAG]#define[/HASHTAG] LED_PIN1 13
    6. [HASHTAG]#define[/HASHTAG] LED_PIN2 12
    7. [HASHTAG]#define[/HASHTAG] LED_PIN3 14
    8.  
    9. DriverPWM RedPWM,GreenPWM,BluePWM;
    10. Timer procTimer;
    11.  
    12. int i = 0,j=0,k=0;
    13. bool countUp = true;
    14. bool countDown = false;
    15.  
    16. void doPWM()
    17. {
    18.  
    19.    if(countUp){
    20.      if(i < 255 && j==0 && k==0){
    21.        i++;
    22.      }
    23.      if(i == 255 && j<255 && k==0) {
    24.        j++;
    25.      }
    26.      if(i == 255 && j == 255 && k < 255) {
    27.        k++;
    28.      }
    29.      if(i == 255 && j == 255 && k == 255) {
    30.        countUp = false;
    31.        countDown = true;
    32.      }
    33.    }
    34.    if(countDown){
    35.      if(i > 0 && j==255 && k==255){
    36.        i--;
    37.      }
    38.      if(i == 0 && j>0 && k==255) {
    39.        j--;
    40.      }
    41.      if(i == 0 && j == 0 && k > 0) {
    42.        k--;
    43.      }
    44.      if(i == 0 && j == 0 && k == 0) {
    45.        countUp = true;
    46.        countDown = false;
    47.      }
    48.    }
    49.    Serial.printf("%d %d %d\r\n",i,j,k);
    50.    RedPWM.analogWrite(LED_PIN1, i);
    51.    GreenPWM.analogWrite(LED_PIN2, j);
    52.    BluePWM.analogWrite(LED_PIN3, k);
    53. }
    54. void init()
    55. {
    56.    RedPWM.initialize();
    57.    GreenPWM.initialize();
    58.    BluePWM.initialize();
    59.    procTimer.initializeMs(5, doPWM).start();
    60. }
    61.  


    а когда таким же образом пытаюсь использовать этот пример в своем проекте ловлю глюки, почему-то не получается управлять одним из трех каналов(синим)
    Мой код(это еще не до конца переписанный HttpServer_ConfigNetwork) под спойлером
    Мой код (раскрыть)

    Код (C):
    1.  
    2. [HASHTAG]#include[/HASHTAG] <user_config.h>
    3. [HASHTAG]#include[/HASHTAG] <SmingCore/SmingCore.h>
    4. [HASHTAG]#include[/HASHTAG] <AppSettings.h>
    5. [HASHTAG]#include[/HASHTAG] <cstdio>
    6. [HASHTAG]#include[/HASHTAG] <cstdlib>
    7. [HASHTAG]#include[/HASHTAG] <cstring>
    8.  
    9. [HASHTAG]#define[/HASHTAG] RED_LED 13
    10. [HASHTAG]#define[/HASHTAG] GREEN_LED 12
    11. [HASHTAG]#define[/HASHTAG] BLUE_LED 14
    12.  
    13. DriverPWM RedPWM,GreenPWM,BluePWM;
    14. HttpServer server;
    15. FTPServer ftp;
    16.  
    17. BssList networks;
    18. String network, password;
    19. Timer connectionTimer;
    20.  
    21.  
    22. int RED_value=0, GREEN_value=0, BLUE_value=0;
    23. int tRED_value, tGREEN_value, tBLUE_value;
    24.  
    25. void onIndex(HttpRequest &request, HttpResponse &response)
    26. {
    27.    TemplateFileStream *tmpl = new TemplateFileStream("index.html");
    28.    auto &vars = tmpl->variables();
    29.    response.sendTemplate(tmpl); // will be automatically deleted
    30. }
    31.  
    32.  
    33. void onFile(HttpRequest &request, HttpResponse &response)
    34. {
    35.    String file = request.getPath();
    36.    if (file[0] == '/')
    37.      file = file.substring(1);
    38.  
    39.    if (file[0] == '.')
    40.      response.forbidden();
    41.    else
    42.    {
    43.      response.setCache(86400, true); // It's important to use cache for better performance.
    44.      response.sendFile(file);
    45.    }
    46. }
    47. [I][I][I][I][I]void onAjaxSetLedColor(HttpRequest &request, HttpResponse &response)
    48. {
    49.    String color = request.getQueryParameter("value");
    50.    debugf("Get new led color: %s", color.c_str());
    51.    RED_value = strtol(color.substring(0,2).c_str(),NULL,16);
    52.    GREEN_value = strtol(color.substring(2,4).c_str(),NULL,16);
    53.    BLUE_value = strtol(color.substring(4,6).c_str(),NULL,16);
    54.    debugf("Parse color to RGB: %d %d %d",RED_value, GREEN_value, BLUE_value);
    55.  
    56.   if (RED_value > 255) RED_value=255;
    57.   if (RED_value < 0) RED_value=0;
    58.   RedPWM.analogWrite(RED_LED,RED_value);
    59.  
    60.   if (GREEN_value > 255) GREEN_value=255;
    61.   if (GREEN_value < 0) GREEN_value=0;
    62.   GreenPWM.analogWrite(GREEN_LED,GREEN_value);
    63.  
    64.   if (GREEN_value > 255) GREEN_value=255;
    65.   if (GREEN_value < 0) GREEN_value=0;
    66.   BluePWM.analogWrite(GREEN_LED,GREEN_value);
    67.  
    68.    JsonObjectStream* stream = new JsonObjectStream();
    69.    JsonObject& json = stream->getRoot();
    70.    Serial.printf("Current RGB colors1: %d %d %d\r\n",RED_value, GREEN_value, BLUE_value);
    71.    json["status"] = (bool) true;
    72.    json["red"]  = (int)  RED_value;
    73.    json["green"]  = (int)  GREEN_value;
    74.    json["blue"]  = (int)  BLUE_value;
    75.    response.setAllowCrossDomainOrigin("*");
    76.    response.sendJsonObject(stream);
    77.    Serial.printf("Current RGB colors2: %d %d %d\r\n",RED_value, GREEN_value, BLUE_value);
    78. }
    79.  
    80. void onAjaxGetLedColor(HttpRequest &request, HttpResponse &response)
    81. {
    82.    JsonObjectStream* stream = new JsonObjectStream();
    83.    JsonObject& json = stream->getRoot();
    84.  
    85.    json["status"] = (bool) true;
    86.    json["red"]  = (int)  RED_value;
    87.    json["green"]  = (int)  GREEN_value;
    88.    json["blue"]  = (int)  BLUE_value;
    89.  
    90.    Serial.printf("Current RGB colors: %d %d %d\r\n",RED_value, GREEN_value, BLUE_value);
    91.  
    92.    response.setAllowCrossDomainOrigin("*");
    93.    response.sendJsonObject(stream);
    94. }
    95.  
    96. void startWebServer()
    97. {
    98.    server.listen(80);
    99.    server.addPath("/", onIndex);
    100.    server.addPath("/ajax/setledcolor", onAjaxSetLedColor);
    101.    server.addPath("/ajax/getledcolor", onAjaxGetLedColor);
    102.    server.setDefaultHandler(onFile);
    103. }
    104.  
    105. void startFTP()
    106. {
    107.    if (!fileExist("index.html"))
    108.      fileSetContent("index.html", "<h3>Please connect to FTP and upload files from folder 'web/build' (details in code)</h3>");
    109.  
    110.    ftp.listen(21);
    111.    ftp.addUser("me", "123"); // FTP account
    112. }
    113.  
    114. void startServers()
    115. {
    116.    startFTP();
    117.    startWebServer();
    118. }
    119.  
    120. [I][I][I]void init()
    121. {
    122.    RedPWM.initialize();
    123.    GreenPWM.initialize();
    124.    BluePWM.initialize();
    125.  
    126.    RedPWM.analogWrite(RED_LED, 0);
    127.    GreenPWM.analogWrite(GREEN_LED, 0);
    128.    BluePWM.analogWrite(BLUE_LED, 0);
    129.  
    130.    Serial.begin(SERIAL_BAUD_RATE);
    131.    Serial.systemDebugOutput(false);
    132.    AppSettings.load();
    133.  
    134.    WifiStation.enable(true);
    135.    if (AppSettings.exist())
    136.    {
    137.      WifiStation.config(AppSettings.ssid, AppSettings.password);
    138.      if (!AppSettings.dhcp && !AppSettings.ip.isNull())
    139.        WifiStation.setIP(AppSettings.ip, AppSettings.netmask, AppSettings.gateway);
    140.      Serial.printf("Current network settings: ip %d  netmask %d gateway %d\r\n",WifiStation.getIP(), WifiStation.getNetworkMask(), WifiStation.getNetworkGateway());
    141.    }
    142.    WifiStation.startScan(networkScanCompleted);
    143.  
    144.    // Start AP for configuration
    145.    WifiAccessPoint.enable(true);
    146.    WifiAccessPoint.config("Sming Configuration", "", AUTH_OPEN);
    147.  
    148.    // Run WEB server on system ready
    149.    System.onReady(startServers);
    150. }
    151.  
    [/I][/I][/I][/I][/I][/I][/I][/I]

    никто с подобным не сталкивался?
     
    Последнее редактирование: 29 сен 2015
  2. Casper

    Casper Новичок

    Сообщения:
    39
    Симпатии:
    1
    Подскажите пожалуйста как по uart принимать данные?
     
  3. FGX

    FGX Читатель

    Сообщения:
    100
    Симпатии:
    9
    Завести таймер rs232_Timer.initializeMs(10000, Serial_reseiv_Data).start(); // every 1 sec
    И написать обработчик
    char buf[100];

    void Serial_reseiv_Data(){
    int i=0;
    if (Serial.available()){
    while( Serial.available() && (i< 99)) {
    buf[i++] = Serial.read();
    }
    buf[i++]='\0';
    }
     
  4. dimakein

    dimakein Новичок

    Сообщения:
    3
    Симпатии:
    0
    скорее всего в данном месте имелось ввиду 1000
     
  5. FGX

    FGX Читатель

    Сообщения:
    100
    Симпатии:
    9
    Ну там сами ставьте что надо, я со своего примера взял я там редко данные жду, мне 10 секунд хватает, а комент не верный это да
     
    dimakein нравится это.
  6. Casper

    Casper Новичок

    Сообщения:
    39
    Симпатии:
    1
    Подскажите ещё такой момент, как отправить GET запрос? Из примера HttpClient_ThingSpeak пробую вставить свою ссылку client.downloadString("http://192.168.1.44/script.php?name=99", onDataSent); но ничего не происходит, даже onDataSent не срабатывает, на порту тишина.
    P.S.
    Почему-то он не хочет воспринимать ip адрес в ссылке URL((
     
    Последнее редактирование: 3 окт 2015
  7. M-a-x-x

    M-a-x-x Новичок

    Сообщения:
    20
    Симпатии:
    3
    Доброго времени суток! Если кого не затруднит, покажите как по примеру "MeteoControl" написать свой код по отсылке данных датчиков DHT22, BH1750, BMP180, DS1820, PIR на MQTT сервер. Получается вебсервер на ESP не нужен, а только модульная структура. И в тоже время принимать с MQTT сервера команды по управлению GPIO. И как сделать чтобы от датчика движения и GPIO сразу же приходило значение, не зависимо от таймера опросов остальных датчиков?
    Ну и что бы два раза не вставать:) - возможно ли адаптировать под Sming этот код для получения данных с сенсора THGN132N погодной станции Oregon?
     

    Вложения:

    • oregon.txt
      Размер файла:
      11,7 КБ
      Просмотров:
      10
  8. ntil

    ntil Новичок

    Сообщения:
    8
    Симпатии:
    0
    день добрый.
    Как бы мне поставить прерывание на быстрый таймер, в несколько десятков КГц ?
    или как работать с I2S (не путать сI2C) из сминга?
    или как организовать быстрый PWM + прерывание на него ?
    Спасибо заранее!
     
  9. M-a-x-x

    M-a-x-x Новичок

    Сообщения:
    20
    Симпатии:
    3
    В общем проведя несколько бессонных ночей, набросал примерно как это должно выглядеть. Надеюсь на этот раз кто нибудь в этой теме разбирающийся посмотрит приложенный пример и подскажет как это довести до ума, потому что я ниразу не программист и это всего лишь одно из моих хобби)
    Итак, это подобно "MeteoControl" с модульной структурой, только с выпиленным вебсервером и экраном. Код не удалял, просто закомментировал, работу вебсервера, если раскомментировать строки, не проверял. А экран с четырьмя датчиками (DHT22, DS1820, BH1750, BMP180) не смог подружить, работает только с первыми двумя (компиляция проходит, но ESP8266 сыпит ошибки в терминал).
    Но то что мне нужно делает - отправляет данные на MQTT сервер. Также управляет и отправляет статус GPIO OUTPUT (по таймеру) и INPUT (при изменении). Прикручено еще обновление по воздуху, вызывается сообщением "burn" в топик "testing/firmware", правда работает через раз)
    По настройке: в файле "configuration.h" указываем параметры подключений, а в "application.cpp" в четырех местах (они пронумерованы) комментируем строки датчиков, которые не установлены.
    Вопрос по получению данных с сенсора THGN132N погодной станции Oregon остается открытым)
     

    Вложения:

  10. Negor

    Negor Новичок

    Сообщения:
    13
    Симпатии:
    1
    Появилась идея запилить асинхронный ответ на запрос, но не знаю как в нашем с лучае с плюсами такое провернуть. Имеется код-пример списка сетей. Напомню вкратце
    Код (Text):
    1. WifiStation.startScan(networkScanCompleted);
    2.  
    3. void networkScanCompleted(bool succeeded, BssList list){
    4. // Code...
    5. }
    Это не очень круто, было бы лучше запилить так(код не компилится)
    Код (Text):
    1.  
    2. void httpAsyncList( HttpRequest &request, HttpResponse &responce){
    3.     WifiStation.startScan([&responce](bool success, BssList list)mutable{
    4.         JsonObjectStream* stream = new JsonObjectStream();
    5.     JsonObject& json = stream->getRoot();
    6.         json["scanSuccess"] = (bool)success;
    7.         responсe.sendJsonObject(stream);
    8.     });
    9. }
    10.  
    Как такое правильно провернуть и возможно ли это?
     
    Последнее редактирование: 21 дек 2015
  11. Symrak

    Symrak Новичок

    Сообщения:
    18
    Симпатии:
    1
    Всем привет!
    Всех с наступающими праздниками!

    Прошу подсказать, существует ли/планируется ли реализация работы с кодировками в Sming?
    В частности, вопрос актуален для httpClient, а точнее – для содержимого response.

    Спасибо.
     
  12. Symrak

    Symrak Новичок

    Сообщения:
    18
    Симпатии:
    1
    Всем доброго времени суток!

    Подскажите пожалуйста,есть ли у кого пример реализации авторизации пользователя (запрос логина-пароля) при работе с Web-сервером?

    Спасибо.
     
  13. Климатехник

    Климатехник Читатель

    Сообщения:
    126
    Симпатии:
    11
    Кто нибудь подскажите пример,как с Web страницы,по событию нажатия кнопки,отправить в Serial port какое нибудь значение
     
  14. Symrak

    Symrak Новичок

    Сообщения:
    18
    Симпатии:
    1
    В примере HttpServer_Bootstrap это можно сделать, поменяв обработчик в коде на стороне модуля.
    Так же можно, предварительно, выкачать самому и включить в SPIFFS файлы, которые будет тянуть модуль.
    Работа с UART - см. Basic_Serial.
     
  15. M-a-x-x

    M-a-x-x Новичок

    Сообщения:
    20
    Симпатии:
    3
    Можно еще пример HttpServer_AJAX посмотреть. Алгоритм примерно такой:
    1. В файл примера в функции void startWebServer() добавить "server.addPath("/ajax/serial", onSerial);"
    2. Добавить перед выше названной функции функцию:
    Код (C):
    1. void onSerial(HttpRequest &request, HttpResponse &response)
    2. {
    3. String info = request.getQueryParameter("value");
    4. Serial.print("Value from page: ");
    5. Serial.println(info);
    6. }
    3. В index.html между <script></script> добавить:
    Код (Javascript):
    1. $(document).ready(function() {
    2. $(".someId").click(function() {
    3.   var info = $(this).attr('data-value');
    4.   $.getJSON('ajax/serial', {value: info}, function(data) {
    5.   });
    6. });
    4. В сам код страницы добавить кнопку:
    HTML:
    1. <button type="button" class="someId btn btn-primary btn-sm" data-value="sendInfo">Send</button>
     
    Климатехник нравится это.
  16. Климатехник

    Климатехник Читатель

    Сообщения:
    126
    Симпатии:
    11
    Спасибо большое M-a-x-x
     
  17. alexsk

    alexsk Новичок

    Сообщения:
    7
    Симпатии:
    1
    Доброго времени суток!

    Разбираюсь с фреймворком на примере конкретной задачи: хочу поднять микро front-end "сервер" с минимальным restApi (чтение/запись данных от различных устройств, их конфигурирование и пр.), плюс раздача статику с SD (очень уж мало места в spiffs). Так же к этому "серверу" могут подключаться другие устройства/контроллеры, он хранит список подключенных устройств и метаданные по каждому из них (у кого какие данные можно прочитать и что им можно передавать). Таким образом реализуется возможность чтения и управления вторичными устройствами по restApi front-end сервера. Способ подключения вторичных устройств может быть любой.
    Изначально предполагал коннектить их посредством nRF24, но так ничего и не вышло - не в какую не хочет моя esp201 дружить с nRF24lo1+. Собственно первый вопрос, нет ли у кого примера подключения этих двух устройств (в первую очередь имеются виду на какие пины подключать). Не один пример из Sming не полетел, esp просто уходит в ребут при большинстве вызовов радио (printDetails, например).

    Кроме того, в процессе имплементации столкнулся с рядом проблем и непонятных мне ограничений:
    • Нельзя отправить свой HTTP код ответа, и набор предопределенных ограничен. Как минимум для реализации нормального кеширования нужен 302 (когда браузер имеет закешированную версию и хочет убедиться, что файл не изменился);
    • Вся работа с файлами в http-классах заточена под spiffs, отправить что то флешки никак;
    • Нельзя отправить в HttpResponse свой поток (например, посредством своей реализации IDataSourceStream, заточенной под файлы с той же внешней флешки);
    • В HttpRequest нет никакой информации о клиенте, хотя бы ip (в TCPConnection информация есть, но из калбэка HttpPathDelegate к нему не добраться);
    • Нет ни одного примера, как читать данные из body (они же, на сколько я понимаю, postData). Простейший пример - загрузка файла на сервер;
    • Нет примера обновления прошивки через http-сервер. Есть класс HttpFirmwareUpdate, но он является наследником HttpClient-а, т.е. заточен под загрузку с удаленного http-сервера. Хотелось бы иметь возможность обновляться не с определенного сервера, а с через собственный web-интерфейс;
    • Нет примера, как обновить прошивку, например с флешки (вставили флешку, если на ней есть определенный файл, обновляемся из него).
    Первые четыре проблемы решил немного изменив и пересобрав сам фреймворк. Попутно реализовал отдачу статики с флешки или spiffs (файл ищется на spifffs, если нет там, то в определенной папке на внешней флешке (что бы не раздавать с флешки все подряд), если нет там то либо специальный файл (мне по дефолу нужно всегда отдавать index.html), либо если специального файла не указано, то 404. Бонусом прикрутил полноценное кэширование, с проверкой, не изменился ли файл (ориентируется по размеру и дате, для spiffs только по размеру).

    Соответственно вопрос, что делать с этими изменениями - неплохо было бы залить их в апстрим...форк делать не хочется. Если кому то тут понадобится, могу выложить свои наработки.

    Не решенные проблемы:
    • Подключение вторичных устройств. Буду благодарен, если кто-то подскажет, как подключить nRF24 или идею, как еще можно без проводов дружить esp с другими устройствами. Желательно без особых извращений... :)
    • Upload файлов - совершенно не понятно как вынуть нужную информацию из HttpRequest (кроме contentLength, которые кстати может быть и не указан в headers). Отдельно интересует как реализовать multipart-загрузку.
    • Обновление прошивки посредством web-интерфейса или SD карточки.
    Спасибо за любую помощь, и сильно не пинайте...я можно сказать новичок в плане работы с микроконтроллерами вообще, и с esp8266 в частности.
     
  18. rkravt

    rkravt Читатель

    Сообщения:
    45
    Симпатии:
    11
    alexsk, дело в том, что nRF24lo1+ еще та капризная штука!
    Пример Radio_nRF24L01 из Sming у меня тоже не взлетел, тот же ребут.
    Попробуйте при инициализации nRF24lo1+ установить все возможных параметры идентичными!
    Ибо только, наверное, Конфуцию известно как инициализируются эти модули при дефаултных настройках.

    Вот мой пример инициализации, который работает на ура:
    Код (C):
    1.  
    2. radio.setChannel(8);  // Установка канала вещания;
    3. radio.setRetries(15, 15);  // Установка интервала и количества попыток "дозвона" до приемника;
    4. radio.setDataRate(RF24_250KBPS);  // Установка минимальной скорости;
    5. radio.setPALevel(RF24_PA_MAX);  // Установка максимальной мощности;
    6. radio.enableDynamicPayloads();  // Разрешение отправки нетипового ответа передатчику;
    7. radio.setAutoAck(1);   // Установка режима подтверждения приема;
    8. radio.enableAckPayload();  // Разрешение отправки нетипового ответа передатчику
    9. radio.setCRCLength(RF24_CRC_16);
    10. //radio.setCRCLength(RF24_CRC_8);
    11. //radio.setCRCLength(RF24_CRC_DISABLED);
     
    alexsk нравится это.
  19. alexsk

    alexsk Новичок

    Сообщения:
    7
    Симпатии:
    1
    rkravt, спасибо вечером попробую, о результатах отпишусь.

    По поводу upload-а файлов и multipart/form-data, посмотрел внимательно на реализацию HttpRequest, а точнее на парсер параметров боди, и понял, что он и не догадывается, что бывают разные форматы боди. Что бы не пришло в запросе, он парсит боди как "application/x-www-form-urlencoded", даже не пытаясь заглянуть в content-type в хидере. Очень хочется запилить нормальный парсер, понимающий основные форматы (text/plain, multipart/form-data), и заодно научить его принимать потоки (файлы, raw-боди больше чем 4кб и пр.). Но тут уже безе значительной переделки всех http-классов не обойтись.

    Если кому надо будет, пишите - выложу изменения. Со временем надеюсь удастся протолкнуть в апстрим.
     
    Последнее редактирование: 1 фев 2016
    Symrak нравится это.
  20. alexsk

    alexsk Новичок

    Сообщения:
    7
    Симпатии:
    1
    rkravt, не полетело... Вот чего выдает в терминал:

    ets Jan 8 2013,rst cause:4, boot mode:(3,7)

    wdt reset
    load 0x40100000, len 23568, room 16
    tail 0
    chksum 0xe3
    load 0x3ffe8000, len 884, room 8
    tail 12
    chksum 0x97
    ho 0 tail 12 room 4
    load 0x3ffe8378, len 2500, room 12
    tail 8
    chksum 0x5b
    csum 0x5b
    rl

    start
    STATUS.. = 0xff RX_DR=1 TX_DS=1 MAX_RT=1 RX_P_NO=7 TX_FULL=1
    RX_ADDR_P0-1.. = 0xffffffffff 0xffffffffff
    RX_ADDR_P2-5.. = 0xff 0xff 0xff 0xff
    TX_ADDR.. = 0xffffffffff
    RX_PW_P0-6.. = 0xff 0xff 0xff 0xff 0xff 0xff
    EN_AA.. = 0xff
    EN_RXADDR.. = 0xff
    RF_CH.. = 0xff
    RF_SETUP.. = 0xff
    CONFIG.. = 0xff
    DYNPD/FEATURE.. = 0xff 0xff
    Data Rate. = pz?dZ~?(
    .rl.l|.l`|.....ll.b|.l.rbl.brnnlnnbl.b.plb.lrlprn`.....l......b.nb|.ll.brnnn.ll`...nn.l`...nrn..rl`.prn`....rb`....b.nb|....brnnn...l`...nnll`...nrn...l.l`rn...`bnl.rnnn...lprn`....rb`ll.b.nb|.l..brnnn.l.l`...nn.l`...nrn..`..rn..`.rl

    После этого уходи в ребут... С теми же параметрами на ардуине все летит на ура. Не понимаю, может именно с моделью esp201 что-то не так...
     

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