Всем привет. Возник вопрос - как заставить esp8266 выдавать в uart и принимать байты как на картинке? Уже замучился искать, все что не пробовал - не получается и все тут..... Сверху запрос, снизу ответ - три байта.....
А не могли бы подсказать алгоритм? К примеру написав uart.write(0,0x80, 0x00) на uart вываливается все что угодно но не такая последовательность..... P.S. Так-с отправлять,отправляется.....Теперь выяснить как ответ сохранить...
Ну, вот, прям очень помогли......Сразу все заработало.......Правду говрят, что лучше не спрашивать на наших форумах, тут вместо помощи, могут только посылать.....
Если вы ждете, что кто-то будет угадывать, в чем ваша проблема, когда вы не удосужились сами приложить усилия и описать всё как следует, то вам надо срочно умерить свое эго. И пойти читать документацию.
Код (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.
Встречал в кодах программ....Например вот тут. Код (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 но этого не происходит..
A UART поддерживает 600? Я не уверен. Поддерживает, судя по документации. А вот нотацию "0x80 0x00" - не поддерживает
1. Вы там где мой код наковыряли, посмотрите внимательно как форрмируется выдача в UART данных. 2. Bозможно UART требуется время на перестройку. Оттормозите передачу на некоторое время - проверьте что будет.
А вы понимаете вообще, что тут написано-то? Это неполный кусок программы. Вот извините, но тут надо сесть, ПРОЧИТАТЬ ДОКУМЕНТАЦИЮ, разобраться как это работает, а потом уже пытаться повторить.
Я, простите и пытаюсь разобраться. И если бы мне было все понятно, и все работало, то я чесслово, не стал бы к вам приставать с такими вопросами. Когда код вот такой Код (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. Игорю вот отдельное спасибо. Всегда человек старается помочь и объяснить, а не посылает нахрен грызть мануалы. Смотрел я их если что.....
Ну вот и решение. Установка UART, получается, асинхронной, и, следовательно, нужно на это время. Не думаю что целых 5 секунд, но 100 мс - выставьте и будет хорошо. Ой, посылаю. Часто посылаю. Но здесь вижу что Вы сами делаете, а это уважаемо.
Кстати, для начала работы с корутиной тоже требуется время после ее объявления. Но это так, к слову. Вообще заметил, что если модуль ведет себя неожиданно на простых и ясных вещах, как в этом случае, - его нужно оттормозить. Думаю, это связано с тем, что все что касается wifi в нем работает асинхронно.
И чем оно вас не устраивает? Зачем вы пытаетесь присобачить туда непонятный и ненужный вам кусок кода? По-другому никак. Не получится научиться, не читая мануалы. Я могу расписать вам, как работают корутины. Но знаете, что у меня получится? Получится мануал. Только написанный человеком, который мануалы писать не умеет.