Недавно приобрел 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. К сожалению, нагуглить на форуме похожую проблему я не смог, и не только на форуме. Возможно, я допустил какую-то элементарную ошибку, которую никто не допускает, но уже два дня не могу ее обнаружить. За любой инсайт буду благодарен.
Хорошо поработали над проблемой, реально. Даже если вы не хотите программировать этот модуль, вам придётся понять, что за прошивка там сейчас и как ведётся обмен данными с ним. То есть надо начинать с него. Тема зело обширная... документация к модулю что говорит? Если документация не объясняет как с ним работать - придётся все равно так или иначе работать с его прошивкой. Примечание. (1) Я к Амперке отношения не имею, (2) этого модуля у меня нет, (3) разбираться с документацией его надо вам.
Попробуйте подключить этот пин. В @amperka/wifi.js в функции setup есть строка ESP8266.reset(connectedCallback). Как я понимаю, IskraJS после загрузки Espruino сбрасывает wifi-troyka модуль и ожидает от него ответа, если ответ "готов" - if (d === 'ready' || d === 'Ready.') - продолжает инициализацию модуля.
У меня возникло два вопроса. 1) не могли бы вы пояснить, пожалуйста, связь первого предложения вашего ответа с остальной частью? До меня не дошло раньше посмотреть код самой либы, но теперь я посмотрел и все еще не вижу никакого прямого упоминания этого пина. Даже переменной, которая могла бы играть его роль, не нашел. Кажется, reset вполне возможно сделать и по RX\TX пинам. 2) если все же этот пин подключать нужно, то не очень понимаю вот что - предположим, я подключу этот пин P к какому-то рандомному пину на Искре. Как вообще плата узнает, к какому пину я подключил P, если 1) в моей программе мне он не нужен и 2) в конструктор wifi-объекта никак не передать информацию об этом пине? Аргументы в setup никак не включают этот пин, SerialConnection тоже оперирует только RX и TX - пинами 0 и 1 на Искре соответственно. В качестве крика отчаяния попробовал подать 5V на пин P, т.к. это единственное логичное, что можно сделать с пином, который не указан нигде в документации как необходимый для настройки и никуда не передается. Результат - нулевой, как будто бы и не подавал.
... таки участники разговора, в отличие от меня, видимо хорошо понимают что залито по продаже внутрь этого волшебного модуля.
Поясню высокообразованной публике свои короткие мысли имени Буратино. Прежде чем включать всю невероятную мощь великой библиотеки от Амперки, не стоило бы попытаться получить от модуля простой ответ на простую, главную, команду в терминале? Простой код: "Эй, модуль, ответь-ка!" Вывод в терминал (не?)ответа.
Надо сесть, понять serial rx\tx протокол, научиться класть биты в нужном порядке, ручками. Я уверен, что это реализуемо, но я совершенно не горю этим заниматься) Я и купил для того обертку ESP826 в тройку, чтобы plug'n'pray, а не ручками( У меня есть ардуино леонардо, попробую на нем проверить работоспособность самого модуля. Но там http запросы делать неудобно, парсить JSON неудобно и вообще много что неудобно. Поэтому это не выход, к сожалению, хочу, чтобы это заработало :\
1. Тогда вы попались (простите, как лох. Это не желание обидеть - таких много) на широко известный тезис "Ардуино - это просто". 2. Каждая попытка что-то соорудить на МК будет сталкиваться с роем аналогичных проблем. 3. Никакого иного способа узнать, рабочий ли это модуль, что там залито и правильно ли соединения не существует, кроме как послать модулю простую команду и получить ответ 4. Вы не горите - я тем более.
Ну, вряд ли вы сможете поспорить с утверждением "лучше поискать сначала простое решение, чем пытаться идти проверенным путем, но длиной в несколько дней\недель". Я нахожусь на этапе "лучше поискать простое решение". Вероятно, через несколько дней перейду во второе, но не прямо сейчас.
Полагаю, вы сейчас активно пользуетесь методом научного тыка. Хотя я и не горю, вместе с вами, рекомендую написать микроскопическую программу, которая 1. шлет на модуль одну команду "AT" 2. выводит в консоль ответ от модуля, или не выводит, смотря по обстоятельствам. Играя настройками этой программы (пины, скорость) добиться от модуля ответа "ОК" После чего применять библиотеку от Амперки с найденными настройками. Все, я сгорел полностью.
А вообще, это неверный подход. После него новички либо начинают читать документацию и въезжать в тему, либо забивают на это дело, ибо умнее всех, а не холопы. Других вариантов я не встречал.
В широко распространенных, типовых, прошивках ESP-8266 не отвечает так никогда (не знаю что там в малом Питоне). Предполагаю, вы неточно поняли смысл происходящего в библиотеке (ИМХО)
@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" или названия команд: верхняя строчка - мои данные, нижняя - то, что прилетело в ответ. Далее я попробовал несколько более сложный вариант, результат которого ввел меня в ступор: Код (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); }); Результат кода странный. Первая строка, как всегда, то, что отправилось от меня. Ровно то, что нужно по даташиту. А вот ответ очень странный. Во-первых, библиотека AT Espruino выдала нечто, не сбалансированное по скобкам. Как это интерпретировать, я пока не понял. И самое странное - чип выдал ERROR на команду, на которую по даташиту он никогда не выдает ERROR! Другого респонса, кроме ОК, на этот запрос не существует, а вот надо же. Пришел. Собственно, главный вопрос именно в этом - почему я получил что-то, не соответствующее документации. Как всегда, буду благодарен любому толчку в нужном направлении.
Поправьте меня, пожалуйста, если я ошибаюсь, но своим предыдущим ответом я отмел 4 первых варианта, которые вы привели - т.к. я смог достучаться до модуля и получить хоть что-то. Библиотеку от Амперки не использую, соответственно. Можете заодно чуть подробнее пояснить, что вы имели в виду про ноги МК и фишку эспруино? Просто я не вижу, каким образом ИМЕННО Я могу задействовать те или не те ноги МК - я подключил 4 проводка, каждый из которых определяется однозначно, и согласно другим примерам схем (многочисленным официальным примерам амперки со страницы http://wiki.amperka.ru/продукты:troyka-wi-fi), мой набор соединений достаточный.
Смотрите в чем тут дело МОЖЕТ БЫТЬ. (Я ни разу не работал с АТ прошивкой, поэтому просто предполагаю). Вы опять "схватили" какую-то библиотеку. Вам надо найти документацию по работе с serial и отправить в порт "AT". Не какие-то куски библиотек, а "чистый" serial. Здесь же будет callback, где надо просто напечатать ответ. Все. Что касается вашего кода, то он отправляет "OK" на сравнение ответа порта с отправленной командой. У порта espruino может быть установлена опция повтора отправленной в неё команды. Раз так, то ваш код вернет OK. Код, а не модуль.
Здесь не исключена засада, ошибку может выдавать не модуль, а библиотека. Разобраться с этим - лопатить библиотеку. (То есть ее приходится лопатить, хотя вы и не горите) Именно поэтому я и предлагаю, через сериал проверить все команды, которые вам необходимы. Вторая засада может быть вот где. АТ прошивка имеет версии. (1.)Версия прошивки модуля, (2.)версия той прошивки, под которую сделана библиотека, (3.) версия документации, которую вы читаете могут не совпадать. Здесь тоже придется вникать в обстакановку. Это предположения. Повторюсь, с АТ прошивками не работал. А теперь: "вишь как оно, Кузьма..."