Странная работа wi-fi модуля в опыте №7 Telegram-bot (Интернет вещей)

Тема в разделе "Iskra JS, Espruino, Йодо", создана пользователем MAGIGHAR, 11 сен 2017.

  1. Morgan

    Morgan Гик

    Всем привет!

    Ошибка появляется из-за новой прошивки ESP. На неделе я накачу обновление для библиотеки, а пока вот такой хак для телеграма:

    Код (Javascript):
    var wifi = require('@amperka/wifi').setup(function(err) {
      if (err) print(err);
      setTimeout(()=>{
        wifi.init(function(err) {
          if (err) print(err);
          wifi.connect(SSID, PASSWORD, function(err) {
            if (err) print(err);
            print('I\'m ready!');
            bot.connect();
          });
        });
      }, 2000);
    });
    для dweet.io:
    Код (Javascript):
    var wifi = require('@amperka/wifi').setup(function(err) {
      if (err) print(err);
      setTimeout(()=>{
        wifi.init(function(err) {
          if (err) print(err);
          wifi.connect(SSID, PASSWORD, function(err) {
            if (err) print(err);
            print('Click this link', dweet.follow());
            run();
          });
        });
      });
    });
    Для остальных экспериментов по такой же аналогии.
    Если будут возникать ошибки, буду благодарен, если пришлете сообщения. Так у меня получится сделать библиотеку ещё лучше.

    Простите за такой провал по времени, был в отпуске без железок под рукой
     
    Konkery и Yragan нравится это.
  2. Yragan

    Yragan Нерд

    Спасибо, попробую сегодня проверить) о результате обязательно отпишусь)
     
    Morgan нравится это.
  3. Yragan

    Yragan Нерд

    Проверил оба опыта, всё работает) Команде разработчиков огромное спасибо) Я так понимаю это временное решение и в ближайшее время библиотеки будут обновлены, что позволит пользоваться кодом "из буклета" как он есть там?)
    p.s.
    Код (Javascript):
    >Erasing Flash....
    Writing...............
    Compressed 87200 bytes to 12944
    Checking...
    Done!
    Loading 12944 bytes from flash...
    =undefined
    No "ready" after AT+RST
    I'm ready!
    >
    что значит строка No "ready" after AT+RST она появляется после заливки нового кода, проходит пару секунд и искра пишет I'm ready! ) при этом всё запускается и работает) просто на сколько я понимаю это ошибка которая просит перезагрузить модуль) вообщем объясните пожалуйста должно ли так быть при нормальной работе модуля и библиотек?)
     
    Morgan нравится это.
  4. Morgan

    Morgan Гик

    No "ready" after AT+RST — да, всё верно. Если в ESP новая прошивка, то ready иногда пропадает, и библиотека теряет последовательность действий. Добавлением строчек setTimeout() и wifi.init() мы "руками" восстанавливаем последовательность.
     
    arkadyf нравится это.
  5. Yragan

    Yragan Нерд

    Я понял, мы интервалом заставляем повторять подключение модуля, пока он не подключится и не сообщит нам что он ready) Спасибо за объяснение)
     
    arkadyf нравится это.
  6. SAM_SAM

    SAM_SAM Нуб

    С рингтоном не помогло(
    проигрывает разок и дальше намертво до перепрошивки модуля ибо при переподключении
    начинает снова играть мелодия, ну и все по кругу.
     

    Вложения:

    Последнее редактирование: 9 окт 2017
  7. MAGIGHAR

    MAGIGHAR Нерд

    Наконец-то добрался до компьютера.

    Мне данные костыли не помогли. Замечу даже больше, если месяц назад бот хоть две минуты работал, то теперь ошибка выскакивает сразу. Из остальных опытов стабильно работают 1 (Удалённый термометр) и 2 (Восьмибитный аудиоплеер). Один раз удалось запустить опыт 4 (Умный дом). Опыт 6 (Напоминальник) не стал пробовать (раньше работал).

    Всё оборудование осталось прежним (компьютер, роутер, Iskra JS, Troyka Slot Shield, Wi-Fi модуль) из нового только SD-картридер.

    :(
     
    Последнее редактирование: 6 ноя 2017
  8. MAGIGHAR

    MAGIGHAR Нерд

    Вести с полей.

    Выяснилось следующее - если прошивать искру Espuino Web IDE, то телеграм бот и без костылей работает как часы. Если использовать Iskra IDE, то выскакивает ошибка:

    Uncaught Error: Unknown Timeout
    at line 1 col 107
    ...Timeout(this._updateTimeout),this._updateTimeout=void 0),thi...
    ^
    in function "disconnect" called from line 1 col 522
    ...nt("error",h),f.disconnect()}
    ^
    in function "_request" called from line 1 col 39
    b._request(a.method,a.query,a.callback)
    ^
    in function called from system
    Uncaught Error: Unknown Timeout
    at line 1 col 107
    ...Timeout(this._updateTimeout),this._updateTimeout=void 0),thi...
    ^
    in function "disconnect" called from line 1 col 522
    ...nt("error",h),f.disconnect()}
    ^
    in function "_request" called from line 1 col 39
    b._request(a.method,a.query,a.callback)
    ^
    in function called from system

    Все что писалось в прошлом посте делалось через Iskra IDE. Хотя опыты 3-5 так и не заработали, даже из-под Espuino Web IDE.
     
  9. Толик Иванов

    Толик Иванов Administrator Администратор

    Искра уже давно не поддерживактся.
    Пользуемся тодько espruino.
     
  10. MAGIGHAR

    MAGIGHAR Нерд

    Об этом я вспомним позже. Сори за невнимательность.
     
  11. Cizif

    Cizif Нуб

    Даже при всех опробованных костылях,на Espruino IDE
    У меня происходит Шляпа
     
  12. Толик Иванов

    Толик Иванов Administrator Администратор

    Что именно у вас идет не так?
     
  13. Nitro77rus

    Nitro77rus Гик

    Методом ненаучного тыка вроде получилось...
    Прикрутив предложенный ранее официальный костыль проблема осталась.
    Вчерась, балуясь с вариантами, заметил закономерность, сбой происходил после вывода температуры. Строка в коде следующая:
    Код (Javascript):
    bot.sendMessage(msg.from.id, celsius.toFixed(1)+' \'C');
    После замены сообщения на:
    Код (Javascript):
    bot.sendMessage(msg.from.id, celsius.toFixed(1)+" 'C");
    код работал дольше. Решил заменить и
    Код (Javascript):
     print('I\'m ready!');
    на
    Код (Javascript):
     print("I'm ready!");
    После этого бот работает уже больше суток без сбоя :) Похоже Telegram не любит обратный слэш :confused:

    P.S.: отпишитесь, кто попробует данный вариант, о результате...
     
  14. Cizif

    Cizif Нуб

    Не,у меня вместо I/m ready вообще Ya'gotov стоит,и всё равно после первый команды ложится
     
  15. Cizif

    Cizif Нуб

    Моя проблема такова,что у меня подключён мотор к искре,и как только он включается,мотор начинает выполнять действие
    ,потом отсылает команду о выполнении
    ,иногда удаётся дать ему ещё одну,а потом не реагирует
    Код (Javascript):
    var motor = require('@amperka/motor');
    var L = motor.connect(motor.MotorShield.M1);
    var SSID = 'FLYINGWIFI_2.4G_';
    var PASSWORD = 'flw4993575807';
    var bot = require('@amperka/telegram').create({
    token: '3wae71635175:AAFuawj6ZekanoWH9SAnPCceNY_e6WGN10U',
    polling: { timeout: 10 }
    });
    var wifi = require('@amperka/wifi').setup(function(err) {
      if (err) print(err);
      setTimeout(()=>{
        wifi.init(function(err) {
          if (err) print(err);
          wifi.connect(SSID, PASSWORD, function(err) {
            if (err) print(err);
            print('Ya Gotov!');
            bot.connect(function(msg) {
    bot.sendMessage(msg.from.id, 'Ya podcluchilsya');
    });
          });
        });
      }, 2000);
    });
    bot.on('/start', function(msg) {
    var keyboard = bot.keyboard([
    ['/test', '/op', '/cl', '/st']
    ], { resize: true });
        bot.sendMessage(msg.from.id, 'Nu Cho Pognali', {
          markup: keyboard
    });
    });
    bot.on('/test', function(msg) {
    bot.sendMessage(msg.from.id, 'Vse norm');
    });
    bot.on('/op', function(msg) {
    L.write(-1);
       setTimeout(
         function() { L.write(0);}, 2000);
           bot.sendMessage(msg.from.id, 'Otkrilasya');
    });
    bot.on('/cl', function(msg) {
    L.write(1);
       setTimeout(
         function() { L.write(0);}, 2000);
           bot.sendMessage(msg.from.id, 'Zakrilasya');
    });
    bot.on('/st', function(msg) {
    L.write(0);
         bot.sendMessage(msg.from.id, 'Ostanovilasya');
    });
     
  16. Толик Иванов

    Толик Иванов Administrator Администратор

    Сам телеграмм бот то работает без моторов в его первоначальном виде из эксперимента?
     
  17. Cizif

    Cizif Нуб

    Нет,с изначальным скриптом всё норма ,но ошибку я выявить не могу(
     
  18. Толик Иванов

    Толик Иванов Administrator Администратор

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

    studentIvan Нерд

    Я склоняюсь к варианту проблемы общения с wifi модулем. Попробуйте изменить скорость его работы на 9600 бод и затем работать с ним в этом режиме, это можно сделать через Arduino Uno например, в мониторе порта, со следующим кодом ниже.

    Код (C++):
    #include "ESP8266.h"
    #include <SoftwareSerial.h>

    SoftwareSerial esp8266mod(4, 5); // TX -> P4, RX -> P5
    ESP8266 wifi(esp8266mod, 9600); // для начала сделаем 115200, потом уже проверим работу на 9600

    void setup(void) {
      Serial.begin(9600);

      while (!Serial) {
      }
      // Откроем программный Serial для связи с модулем и установим скорость общения с ним
      // Скорость по умолчанию для модуля WI-FI равна 115200 baud
      esp8266mod.begin(9600); // 115200 для начала
      delay(1000);
    }

    void loop(void) {
      // Если приходят данные из программного Serial - отправим их в порт компьютера
      if (esp8266mod.available()) {
        Serial.write(esp8266mod.read());
      }
      // Если приходят данные из компьютера - отправим их в программный Serial
      if (Serial.available()) {
        esp8266mod.write(Serial.read());
      }
    }
    сначала на 115200 вбиваете AT, ждете ОК. Если удалось получить ОК, сразу же пишете AT+UART_DEF=9600,8,1,0,0
    после чего меняете программу на 9600 бод и смотрите результат - мне помогло.

    ' \'C' и "'C" это одно и тоже
     
  20. Nitro77rus

    Nitro77rus Гик

    Это я в курсе... ;-) Но факт же, ‘\’С’ при максимум третьем запросе выдаёт описанную выше ошибку