Все тот-же ESP8266

Тема в разделе "ESP8266, ESP32", создана пользователем Mestniy, 19 фев 2016.

  1. AlexUnder

    AlexUnder Нерд

    Всем привет. Возник вопрос - как заставить esp8266 выдавать в uart и принимать байты как на картинке? Уже замучился искать, все что не пробовал - не получается и все тут.....
    Сверху запрос, снизу ответ - три байта.....
     

    Вложения:

  2. rkit

    rkit Гуру

    Не вижу, чем "как на картинке" отличается от обычной работы uart.
     
  3. AlexUnder

    AlexUnder Нерд

    А не могли бы подсказать алгоритм? К примеру написав uart.write(0,0x80, 0x00) на uart вываливается все что угодно но не такая последовательность.....
    P.S. Так-с отправлять,отправляется.....Теперь выяснить как ответ сохранить...
     
    Последнее редактирование: 3 апр 2017
  4. rkit

    rkit Гуру

    Алгоритм такой:
    1. Перестаем трахать мозги
    2. Читаем документацию
     
  5. AlexUnder

    AlexUnder Нерд

    Ну, вот, прям очень помогли......Сразу все заработало.......Правду говрят, что лучше не спрашивать на наших форумах, тут вместо помощи, могут только посылать.....
     
    Nickson нравится это.
  6. rkit

    rkit Гуру

    Если вы ждете, что кто-то будет угадывать, в чем ваша проблема, когда вы не удосужились сами приложить усилия и описать всё как следует, то вам надо срочно умерить свое эго. И пойти читать документацию.
     
  7. AlexUnder

    AlexUnder Нерд

    Код (C++):

    dig = {}
       
    i = 1
    m = 0

    uart.setup(0, 600, 8, uart.PARITY_NONE, uart.STOPBITS_1, 0)  
          uart.write(0,0x80, 0x00)
         
          uart.on("data", 1,
              function(data)
                 local s = string.byte(data)
                 dig[i] = s
                 i = i + 1
                             
                 if i == 3 then
                 uart.on("data")
                 end
             end,0)
         
    uart.setup(0, 115200, 8, uart.PARITY_NONE, uart.STOPBITS_1, 0)        
                m = dig[1] * 65536 + dig[2]* 256 + dig[3]
                print("m = ", m)      
           
    Вот такой код....выдает в uart то что на картинках. Хотя я его вроде прошу написать uart.write(0,0x80, 0x00).
    Если запустить циклический таймер только с одной строкой uart.write(0,0x80, 0x00). То выдает правильно 0х80 0х00.
     

    Вложения:

  8. rkit

    rkit Гуру

    Почему вы решили, что можете на лету во время отправки переключать режим передатчика?
     
  9. AlexUnder

    AlexUnder Нерд

    Встречал в кодах программ....Например вот тут.
    Код (C++):
    ask = coroutine.create(function()
            -- можно использовать альтернативный UART
            -- uart.alt(1)
            -- Скорость работы с моудем 9600
            uart.setup(0, 9600, 8, uart.PARITY_NONE, uart.STOPBITS_1, 0)
            -- Перебираем склад запросов
            for k, v in pairs(asknow) do
                -- Запускаем обработчик ответа
                getansw(k)
                -- Отправляем по одному запросу в UART
                uart.write(0,v)
                -- Оттормаживаемся
                coroutine.yield()
            end
            -- Как все порешали - возвращаем UART в исходное положение
            -- uart.alt(0)
            uart.setup(0, 115200, 8, uart.PARITY_NONE, uart.STOPBITS_1, 1)
            return
        end)
    Почему изначально не отрабатывается вот эта часть?
    uart.setup(0, 600, 8, uart.PARITY_NONE, uart.STOPBITS_1, 0)
    uart.write(0,0x80, 0x00)
    Грубо говоря....Записал это код в esp включил....должен uart переключится на 600 и выдать в uart 0x80 0x00 но этого не происходит..
     
    Последнее редактирование: 3 апр 2017
  10. ИгорьК

    ИгорьК Давно здесь

    A UART поддерживает 600? Я не уверен.
    Поддерживает, судя по документации.
    А вот нотацию "0x80 0x00" - не поддерживает
     
  11. ИгорьК

    ИгорьК Давно здесь

    1. Вы там где мой код наковыряли, посмотрите внимательно как форрмируется выдача в UART данных.

    2. Bозможно UART требуется время на перестройку. Оттормозите передачу на некоторое время - проверьте что будет.
     
  12. rkit

    rkit Гуру

    А вы понимаете вообще, что тут написано-то? Это неполный кусок программы. Вот извините, но тут надо сесть, ПРОЧИТАТЬ ДОКУМЕНТАЦИЮ, разобраться как это работает, а потом уже пытаться повторить.
     
  13. AlexUnder

    AlexUnder Нерд

    Я, простите и пытаюсь разобраться. И если бы мне было все понятно, и все работало, то я чесслово, не стал бы к вам приставать с такими вопросами.
    Когда код вот такой
    Код (C++):
    uart.setup(0, 600, 8, uart.PARITY_NONE, uart.STOPBITS_1, 0)
       tmr.alarm(1,5000,tmr.ALARM_AUTO, function()
          uart.write(0,0x80, 0x00)

    end)

     
    То uart выдает правильную последовательность. См. картинку.
    А когда пытаешься встроить этот кусок кода в программу, то получается так. как написано выше.....
    P.S. Игорю вот отдельное спасибо. Всегда человек старается помочь и объяснить, а не посылает нахрен грызть мануалы. Смотрел я их если что.....
     

    Вложения:

  14. ИгорьК

    ИгорьК Давно здесь

    Ну вот и решение. Установка UART, получается, асинхронной, и, следовательно, нужно на это время.
    Не думаю что целых 5 секунд, но 100 мс - выставьте и будет хорошо.

    Ой, посылаю. Часто посылаю. Но здесь вижу что Вы сами делаете, а это уважаемо.
     
  15. AlexUnder

    AlexUnder Нерд

    Grand mercy....Сейчас попробую
     
  16. ИгорьК

    ИгорьК Давно здесь

    Кстати, для начала работы с корутиной тоже требуется время после ее объявления.
    Но это так, к слову.
    Вообще заметил, что если модуль ведет себя неожиданно на простых и ясных вещах, как в этом случае, - его нужно оттормозить. Думаю, это связано с тем, что все что касается wifi в нем работает асинхронно.
     
    Nickson нравится это.
  17. rkit

    rkit Гуру

    И чем оно вас не устраивает? Зачем вы пытаетесь присобачить туда непонятный и ненужный вам кусок кода?

    По-другому никак. Не получится научиться, не читая мануалы. Я могу расписать вам, как работают корутины. Но знаете, что у меня получится? Получится мануал. Только написанный человеком, который мануалы писать не умеет.
     
  18. rkit

    rkit Гуру

    Не оттормозить, не влепить delay, а использовать апи, уведомляющие о завершении операции.
     
  19. ИгорьК

    ИгорьК Давно здесь

    ТС правильно меня понял, судя по тому что он сделал. А Вы что-то разбушевались.
     
  20. ИгорьК

    ИгорьК Давно здесь

    В данном случае отсутствует. Предложил бы изучить манулал.