Ладно. Всем спасибо. Видимо не получится. Хотел избавиться от ардуины, которая опрашивает и выводит данные с микрухи, но видимо на esp не реализовать. А если и реализовать, то хрен его знает как. Код (C++): dig = {} i = 1 m = 0 uart.setup(0, 600, 8, uart.PARITY_NONE, uart.STOPBITS_1, 0) tmr.delay(100000) 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) tmr.delay(100000) m = dig[1] * 65536 + dig[2]* 256 + dig[3] print("m = ", m)
Вы объясните, зачем вы переключаете частоту передачи? Какую это функцию выполняет? Зачем вы эту строчку вставили в код?
Ну вот... только я Вас похвалил delay и в ардуине не гуд, а в асинхронных скриптовых языках просто запрещены Что Вы хотите получить - напишите словами. Сейчас накидаю что вижу.
Вообще, информации то мало, глядя на код. Но в общем смотрите в чем дело. Вы пытаетесь программировать модуль в ардуинном стиле - это не работает. 1. Меняем скорость порта. ОК. 2. Пишете в него 0,0x80, 0x00 - BAD! Сначала подготовьте порт к приему ответа, то есть следующим будет кусок Код (C++): 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) Что он делает? Он объясняет порту что делать, если придут данные. А Вы делаете запрос данных, а потом готовите порт к приему. Нельзя. Надо наоборот. Кроме того, во время подготовки к приему сам порт перестраивается. 3. Вот теперь Код (C++): uart.write(0,0x80, 0x00) Это должно заработать. Всего то поменять местами.
Ну и не понятна общая логика, тут rkit прав - если у Вас на порту что-то сидит такое, что должно работать на скорости 600, то зачем его восстанавливать в 11520? Если брать мой код - обратите внимание на то, что там идет изменение и ног порта. Ноги порта перебрасываются на другие. Но это, наверно, и так ясно.
Полагаю так это выглядит в антиардуинном стиле: Код (Lua): do dig = {} i = 1 m = 0 function restoreUART() -- Это произойдет после приема данных -- Восстанавливаем порт uart.alt(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) end uart.alt(1) -- Переключаем порт на альтернативные ноги -- Меняем скорость работы порта uart.setup(0, 600, 8, uart.PARITY_NONE, uart.STOPBITS_1, 0) -- Готовим порт к приему ответа uart.on("data", 1, function(data) -- Обабатываем каждый байт local s = string.byte(data) dig[i] = s i = i + 1 -- Приняли три if i == 3 then -- Сбрасываем порт uart.on("data") -- Вызываем функцию восстановления restoreUART() end end,0) -- Делаем запрос, после чего начнет работать все что написано выше. uart.write(0,0x80, 0x00) end
Игорь, спасибо за ответы и помощь, я чуть позже попробую ваши советы и объясню зачем мне все это надо...Сейчас просто не дома.
Так-с. В общем как - то начитавшись темы Игоря(Да уродятся в Его саду финики!) про Openhab и esp8266(и понял я, что это хорошо), в срочном порядке закупив малину третью, и горсть датчиков,я начал все это дело изучать. И вот как - то попался мне на глаза прибор заморский фирмы Fibaro Wall Plug. Умная розетка в - общем.....Осмотрев ее со всех сторон(и даже изнутри!) захотелось мне такую же игрушку. Но цена у них оказывается весьма огорчающая...Потом увидел розетку от Xiaomi. Но там хоть и цена более - менее, но к опенхабу не приклепаешь. В - общем, изучив просторы инета накопал я чудесные микросхемы CS5460, CS563, CS5490, MAX78M6610PSU, ADE7753, STPM01FTR. Все это - микросхемы так называемых power meter(с функциями счетчиков). Самыми удобными оказались СS5490 и MAX78M6610 ибо имели они в своем наличии интерфейс UART(у MAX78M6610PSU еще и интерфейс SPI есть, у остальных микрух сплошь SPI). Начал конструлить конструкцию, соорудил тестовый образец. Нашел в сети программки. В общем MAX78M6610PSU в количестве трех штук(заказанных из - за океяна!) работать отказались принципиально. А вот CS5490 вполне себе завелась и заработала.Еще cs5463 опрашивается, наметки программы для ардуйни есть. Но тестовую плату я пока не сделал. Ну а поскольку программа крутится на ардуино и просто читает регистры(или пишет их(может понадобится для настройки микрухи)), и просто передает эти данные на esp8266, то и возник вопрос, а как заставить esp8266 читать и писать эти регистры. И вот собственно я тут =)) В идеале хочу соорудить плату, что бы - ее можно было запихать в подрозетник непосредственно.Но над этим я еще работаю. В общем как - то так =)
Так- с...Опробовав код, предложенный многоуважаемым Игорем(да уродятся в его саду финики!). Запросы отправляются, ответы идут(правда как то правильные через раз). ESP8266 постоянно перезагружается, ругаясь на то, что в строке m = dig[1] * 65536 + dig[2]* 256 + dig[3] арифметика со значение nil PANIC: unprotected error in call to Lua API (uart_i.lua:11: attempt to perform arithmetic on field '?' (a nil value)) скриншот07 правильный ответ, 08 неправильный. Регистр имеет значение 0xC02000. И еще вопросик. Почему ответы идут, хотя запрос еще не окончен....Имеется ввиду __0x80_0x00__.....................................................___0x80_0x00___ _______0x00_0x20_0xC0___ а должно быть__________________0x00_0x20_0xC0___
Паникует потому что идет операция со стрингом - с порта принимается буква а не цифра. Вы же смотрели мой исходный код - там видно преобразование принятого символа в цифру.
Так-с. Ладно. Направление более - менее понятно. Может однажды избавлюсь от обработчика в виде atmega328p. Буду крутить связку cs5490-atmega-esp. Хотя в плане питания это грустно...
Приехала пачка Ардуинок. Теперь надо сообразить, куда к ним подключить 8266. Ещё что я не понял, в Arduino IDE нет возможности исполнять программу по шагам? И ещё вопрос, как-то нужно перепрошивать 8266 для запуска проекта Easy Mesh? Не нашёл никаких указаний по этому поводу. На Гитхабе все молчат как рыба об лёд )))
Наверно. Или купить USB UART переходник за 150 р. на долгие долгие годы если руководство секты Ардуино разрешит.
Игорь, подскажите пожалуйста, как понять, что куда шить из этого набора файлов в проекте EasyMesh. То что *.ino это для ардуино, а для 8266 что предназначено?