Wifi-troyka модуль не видит wifi-сетей

Тема в разделе "Iskra JS, Espruino, Йодо", создана пользователем Jorres, 12 июн 2020.

  1. Jorres

    Jorres Нерд

    Недавно приобрел wifi-troyka модуль, хочу запустить его в связке с IskraJS при помощи стандартной библиотеки амперки - @amperka/wifi. Столкнулся с проблемой - список сетей, выдаваемых модулем с помощью вызова
    Код (Javascript):
    .getAPs()
    оказывается пустым.

    Собственно, минимальный работающий пример:
    Код (Javascript):
     

    var wifiLib = require("@amperka/wifi");

    let wifi;
    let scanInt;
    let scanTimeoutMS = 500;

    const prepare = () => {
      clearInterval(scanInt);
      PrimarySerial.setup(115200);

      wifi = wifiLib.setup(PrimarySerial, function(err) {
          // set Interval to scan for available networks
          scanInt = setInterval(() => wifi.getAPs(function(err, aps) {
            if (err) {
              print("error occured:");
              print(err);
            } else {
              print(aps);            
            }
          }), scanTimeoutMS);  
      });
    };

    prepare();
     
    Результат работы кода - бесконечная последовательность выводов пустых массивов: "[ ]". Однако, сети Wifi в окрестности работы модуля, бесспорно, есть.

    Распиновка моей схемы:
    К тройка-модулю подключено 4 пина, два из них - питание на 5 вольт и земля, еще два - соответственно TX в 0 пин IskraJS, RX в 1 пин IskraJS. (на всякий случай будет приложено фото, однако в этой адски простой распиновке просто невозможно ошибиться).

    Насколько я понимаю, на 0 и 1 пинах искры работает аппаратный UART, который можно использовать параллельно с загрузкой кода в IDE через USB.

    Что я попробовал для решения проблемы:
    Попробовал создать программный Serial интерфейс на двух произвольных пинах
    Попробовал использовать другие аппаратные UART, Serial1-Serial6, кроме изначального Serial3
    Попробовал понизить скорость передачи данных через интерфейс до 9600
    Попробовал раздать Wifi сигнал на разных стандартных частотах - 2.4GHz, 5.0 GHz

    Все способы дают тот же результат - никакие сети не обнаруживаются, пустая последовательность массивов.

    Что может иметь отношение к проблеме:
    Насколько я понимаю, сам чип, лежащий в основе Тройка-модуля, тоже каким-либо способом можно программировать напрямую. Я с моим текущим уровнем знаний не хочу этого делать, хочу лишь поиспользовать его как шлюз для походов в интернет. Еще меня смущает наличие на схемах, использующих этот модуль, подключенного пина P. Согласно моему пониманию, мне он не требуется - я не собираюсь менять заводскую прошивку wifi-модуля.

    Версия Espruino - 2v01.49.

    К сожалению, нагуглить на форуме похожую проблему я не смог, и не только на форуме. Возможно, я допустил какую-то элементарную ошибку, которую никто не допускает, но уже два дня не могу ее обнаружить. За любой инсайт буду благодарен.

    pin_schematic_photo.jpg
     
    ИгорьК нравится это.
  2. ИгорьК

    ИгорьК Гуру

    Хорошо поработали над проблемой, реально.

    Даже если вы не хотите программировать этот модуль, вам придётся понять, что за прошивка там сейчас и как ведётся обмен данными с ним. То есть надо начинать с него.

    Тема зело обширная... документация к модулю что говорит?
    Если документация не объясняет как с ним работать - придётся все равно так или иначе работать с его прошивкой.

    Примечание. (1) Я к Амперке отношения не имею, (2) этого модуля у меня нет, (3) разбираться с документацией его надо вам.
     
  3. ZAZ-965

    ZAZ-965 Гуру

    Попробуйте подключить этот пин. В @amperka/wifi.js в функции setup есть строка ESP8266.reset(connectedCallback). Как я понимаю, IskraJS после загрузки Espruino сбрасывает wifi-troyka модуль и ожидает от него ответа, если ответ "готов" - if (d === 'ready' || d === 'Ready.') - продолжает инициализацию модуля.
     
    Последнее редактирование: 12 июн 2020
    Jorres нравится это.
  4. Jorres

    Jorres Нерд

    У меня возникло два вопроса.
    1) не могли бы вы пояснить, пожалуйста, связь первого предложения вашего ответа с остальной частью? До меня не дошло раньше посмотреть код самой либы, но теперь я посмотрел и все еще не вижу никакого прямого упоминания этого пина. Даже переменной, которая могла бы играть его роль, не нашел. Кажется, reset вполне возможно сделать и по RX\TX пинам.
    2) если все же этот пин подключать нужно, то не очень понимаю вот что - предположим, я подключу этот пин P к какому-то рандомному пину на Искре. Как вообще плата узнает, к какому пину я подключил P, если 1) в моей программе мне он не нужен и 2) в конструктор wifi-объекта никак не передать информацию об этом пине? Аргументы в setup никак не включают этот пин, SerialConnection тоже оперирует только RX и TX - пинами 0 и 1 на Искре соответственно.



    В качестве крика отчаяния попробовал подать 5V на пин P, т.к. это единственное логичное, что можно сделать с пином, который не указан нигде в документации как необходимый для настройки и никуда не передается. Результат - нулевой, как будто бы и не подавал.
     
    Последнее редактирование: 12 июн 2020
  5. ИгорьК

    ИгорьК Гуру

    ... таки участники разговора, в отличие от меня, видимо хорошо понимают что залито по продаже внутрь этого волшебного модуля.
     
  6. ИгорьК

    ИгорьК Гуру

    Поясню высокообразованной публике свои короткие мысли имени Буратино.
    Прежде чем включать всю невероятную мощь великой библиотеки от Амперки, не стоило бы попытаться получить от модуля простой ответ на простую, главную, команду в терминале?
    Простой код: "Эй, модуль, ответь-ка!"
    Вывод в терминал (не?)ответа.
     
  7. Jorres

    Jorres Нерд

    Надо сесть, понять serial rx\tx протокол, научиться класть биты в нужном порядке, ручками. Я уверен, что это реализуемо, но я совершенно не горю этим заниматься) Я и купил для того обертку ESP826 в тройку, чтобы plug'n'pray, а не ручками(
    У меня есть ардуино леонардо, попробую на нем проверить работоспособность самого модуля. Но там http запросы делать неудобно, парсить JSON неудобно и вообще много что неудобно. Поэтому это не выход, к сожалению, хочу, чтобы это заработало :\
     
  8. ИгорьК

    ИгорьК Гуру

    1. Тогда вы попались (простите, как лох. Это не желание обидеть - таких много) на широко известный тезис "Ардуино - это просто".

    2. Каждая попытка что-то соорудить на МК будет сталкиваться с роем аналогичных проблем.

    3. Никакого иного способа узнать, рабочий ли это модуль, что там залито и правильно ли соединения не существует, кроме как послать модулю простую команду и получить ответ

    4. Вы не горите - я тем более.
     
  9. Jorres

    Jorres Нерд

    Ну, вряд ли вы сможете поспорить с утверждением "лучше поискать сначала простое решение, чем пытаться идти проверенным путем, но длиной в несколько дней\недель". Я нахожусь на этапе "лучше поискать простое решение". Вероятно, через несколько дней перейду во второе, но не прямо сейчас.
     
  10. ИгорьК

    ИгорьК Гуру

    Полагаю, вы сейчас активно пользуетесь методом научного тыка.

    Хотя я и не горю, вместе с вами, рекомендую написать микроскопическую программу, которая

    1. шлет на модуль одну команду "AT"
    2. выводит в консоль ответ от модуля, или не выводит, смотря по обстоятельствам.

    Играя настройками этой программы (пины, скорость) добиться от модуля ответа "ОК"

    После чего применять библиотеку от Амперки с найденными настройками.

    Все, я сгорел полностью.
     
    Последнее редактирование: 12 июн 2020
  11. ИгорьК

    ИгорьК Гуру

    А вообще, это неверный подход.
    После него новички либо начинают читать документацию и въезжать в тему, либо забивают на это дело, ибо умнее всех, а не холопы.
    Других вариантов я не встречал.
     
    issaom нравится это.
  12. ИгорьК

    ИгорьК Гуру

    В широко распространенных, типовых, прошивках ESP-8266 не отвечает так никогда (не знаю что там в малом Питоне). Предполагаю, вы неточно поняли смысл происходящего в библиотеке (ИМХО)
     
  13. ИгорьК

    ИгорьК Гуру

    @Jorres, модуль может не подавать признаков жизни по следующим причинам:

    - неверное соединение;
    - задействованы неверные ноги МК (фишка еспруино)
    - в модуль не залита АТ-прошивка
    - в библиотеке от Амперки баг,
    - модуль просто неработоспособен,
    - может что забыл, хотя вряд ли.

    Со всем этим разобраться можно только понимая как это работает.
     
  14. Jorres

    Jorres Нерд

    Я решил последовать совету @ИгорьК и все-таки попосылать что-то руками.
    1) руками посылать ничего не пришлось. Я посмотрел, что использует либа амперки - вот такой вот обработчик https://www.espruino.com/AT. Его исходный код уже похож на низкоуровневую работу. Также нашел набор AT инструкций к ESP8266 http://wiki.amperka.ru/_media/продукты:troyka-wi-fi:esp8266_at_commands.pdf
    Попробовал отправить на модуль самую простенькую:
    Код (Javascript):
    at.cmd('ATE1\n', 1000, (data) => {
          // turn on echo
          if (data === 'ATE1') {
            print("OK");
          } else {
            print('ATE1 failed: ' + (data ? data : 'Timeout'));
          }
        }
      );
    До этого этапа модуль и физическое подключение, кажется, в порядке. На запросы вида "echo on" \ "echo off" модуль присылает обратно "OK" или названия команд: верхняя строчка - мои данные, нижняя - то, что прилетело в ответ. upload_2020-6-12_21-13-21.png

    Далее я попробовал несколько более сложный вариант, результат которого ввел меня в ступор:
    Код (Javascript):
    let at = require('AT').connect(Serial3);

      at.debug();

      print(at);
      // это навешивает обработчик на те случаи, когда от чипа приходит "+CWLAP:", в полном соответствии с даташитом
      at.registerLine('+CWLAP:',  function(d) {
        print("found!");
        var ap = d.slice(8, -1).split(',');
        print(ap);
      });

      // эта функция выполняется однократно в конце приема (? кажется, по таймауту или переполнению какого-то внутреннего буфера, но не уверен. Кажется, не в этом проблема сейчас, т.к. смотри чуть далее)
      let callback = function(s) {
        print("done " + s);
      };

      // а вот это отправляет непосредственно команду на чип.
      at.cmd('AT+CWLAP\r\n', 5000, function(hlp) {
        at.unregisterLine('+CWLAP:');
        callback(hlp);
      });
    Результат кода странный. upload_2020-6-12_21-20-47.png
    Первая строка, как всегда, то, что отправилось от меня. Ровно то, что нужно по даташиту. А вот ответ очень странный. Во-первых, библиотека AT Espruino выдала нечто, не сбалансированное по скобкам. Как это интерпретировать, я пока не понял. И самое странное - чип выдал ERROR на команду, на которую по даташиту он никогда не выдает ERROR! upload_2020-6-12_21-25-4.png
    Другого респонса, кроме ОК, на этот запрос не существует, а вот надо же. Пришел. Собственно, главный вопрос именно в этом - почему я получил что-то, не соответствующее документации. Как всегда, буду благодарен любому толчку в нужном направлении.
     
  15. Jorres

    Jorres Нерд

    Поправьте меня, пожалуйста, если я ошибаюсь, но своим предыдущим ответом я отмел 4 первых варианта, которые вы привели - т.к. я смог достучаться до модуля и получить хоть что-то. Библиотеку от Амперки не использую, соответственно.
    Можете заодно чуть подробнее пояснить, что вы имели в виду про ноги МК и фишку эспруино? Просто я не вижу, каким образом ИМЕННО Я могу задействовать те или не те ноги МК - я подключил 4 проводка, каждый из которых определяется однозначно, и согласно другим примерам схем (многочисленным официальным примерам амперки со страницы http://wiki.amperka.ru/продукты:troyka-wi-fi), мой набор соединений достаточный.
     
  16. ИгорьК

    ИгорьК Гуру

    Смотрите в чем тут дело МОЖЕТ БЫТЬ.
    (Я ни разу не работал с АТ прошивкой, поэтому просто предполагаю).

    Вы опять "схватили" какую-то библиотеку.

    Вам надо найти документацию по работе с serial и отправить в порт "AT". Не какие-то куски библиотек, а "чистый" serial.

    Здесь же будет callback, где надо просто напечатать ответ.

    Все.

    Что касается вашего кода, то он отправляет "OK" на сравнение ответа порта с отправленной командой. У порта espruino может быть установлена опция повтора отправленной в неё команды. Раз так, то ваш код вернет OK. Код, а не модуль.
     
  17. ИгорьК

    ИгорьК Гуру

    Здесь не исключена засада, ошибку может выдавать не модуль, а библиотека.
    Разобраться с этим - лопатить библиотеку. (То есть ее приходится лопатить, хотя вы и не горите)
    Именно поэтому я и предлагаю, через сериал проверить все команды, которые вам необходимы.

    Вторая засада может быть вот где. АТ прошивка имеет версии. (1.)Версия прошивки модуля, (2.)версия той прошивки, под которую сделана библиотека, (3.) версия документации, которую вы читаете могут не совпадать. Здесь тоже придется вникать в обстакановку.

    Это предположения. Повторюсь, с АТ прошивками не работал.

    А теперь:

    "вишь как оно, Кузьма..."