Все тот-же ESP8266

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

  1. AlexUnder

    AlexUnder Нерд

    Ладно. Всем спасибо. Видимо не получится. Хотел избавиться от ардуины, которая опрашивает и выводит данные с микрухи, но видимо на 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)      
     

    Вложения:

  2. rkit

    rkit Гуру

    Ок. Не думал, что всё настолько плохо. Тогда придется вручную считать время.
     
  3. rkit

    rkit Гуру

    Вы объясните, зачем вы переключаете частоту передачи? Какую это функцию выполняет? Зачем вы эту строчку вставили в код?
     
  4. ИгорьК

    ИгорьК Гуру

    Ну вот... только я Вас похвалил :)
    delay и в ардуине не гуд, а в асинхронных скриптовых языках просто запрещены :)

    Что Вы хотите получить - напишите словами.

    Сейчас накидаю что вижу. :)
     
  5. ИгорьК

    ИгорьК Гуру

    Вообще, информации то мало, глядя на код.
    Но в общем смотрите в чем дело.

    Вы пытаетесь программировать модуль в ардуинном стиле - это не работает.

    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)
    Это должно заработать. Всего то поменять местами.
     
    Последнее редактирование: 3 апр 2017
  6. ИгорьК

    ИгорьК Гуру

    Ну и не понятна общая логика, тут rkit прав - если у Вас на порту что-то сидит такое, что должно работать на скорости 600, то зачем его восстанавливать в 11520? Если брать мой код - обратите внимание на то, что там идет изменение и ног порта. Ноги порта перебрасываются на другие.
    Но это, наверно, и так ясно.
     
  7. ИгорьК

    ИгорьК Гуру

    Полагаю так это выглядит в антиардуинном стиле:
    Код (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
     
     
    Последнее редактирование: 3 апр 2017
  8. AlexUnder

    AlexUnder Нерд

    Игорь, спасибо за ответы и помощь, я чуть позже попробую ваши советы и объясню зачем мне все это надо...Сейчас просто не дома.
     
  9. AlexUnder

    AlexUnder Нерд

    Так-с. В общем как - то начитавшись темы Игоря(Да уродятся в Его саду финики!) про 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 читать и писать эти регистры. И вот собственно я тут =)) В идеале хочу соорудить плату, что бы - ее можно было запихать в подрозетник непосредственно.Но над этим я еще работаю. В общем как - то так =)
     
  10. AlexUnder

    AlexUnder Нерд

    Так- с...Опробовав код, предложенный многоуважаемым Игорем(да уродятся в его саду финики!). Запросы отправляются, ответы идут(правда как то правильные через раз). 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___
     

    Вложения:

    Последнее редактирование: 3 апр 2017
  11. ИгорьК

    ИгорьК Гуру

    Паникует потому что идет операция со стрингом - с порта принимается буква а не цифра.
    Вы же смотрели мой исходный код - там видно преобразование принятого символа в цифру.
     
  12. ИгорьК

    ИгорьК Гуру

    Почему идут ответы до запроса - надо смотреть документацию.
     
  13. AlexUnder

    AlexUnder Нерд

    Так-с. Ладно. Направление более - менее понятно. Может однажды избавлюсь от обработчика в виде atmega328p. Буду крутить связку cs5490-atmega-esp. Хотя в плане питания это грустно...
     
  14. Nickson

    Nickson Нерд

    Приехала пачка Ардуинок. Теперь надо сообразить, куда к ним подключить 8266. Ещё что я не понял, в Arduino IDE нет возможности исполнять программу по шагам? И ещё вопрос, как-то нужно перепрошивать 8266 для запуска проекта Easy Mesh? Не нашёл никаких указаний по этому поводу. На Гитхабе все молчат как рыба об лёд )))
     
  15. ИгорьК

    ИгорьК Гуру

    Этот проект ардуинного типа. Прошивка через Ардуино ide.
     
  16. Nickson

    Nickson Нерд

    То есть, и схему подключения взять просто с инета типа такой: ?? upload_2017-4-4_11-8-37.png
     
  17. ИгорьК

    ИгорьК Гуру

    Наверно. Или купить USB UART переходник за 150 р. на долгие долгие годы если руководство секты Ардуино разрешит.
     
  18. Nickson

    Nickson Нерд

    Подгрузил в AIDE в менеджер плат 8266, схему подключения нашёл через USB-TTL конвертер
     
  19. Nickson

    Nickson Нерд

    У меня оно такое есть, за 178рублей )))))
     
  20. Nickson

    Nickson Нерд

    Игорь, подскажите пожалуйста, как понять, что куда шить из этого набора файлов в проекте EasyMesh. То что *.ino это для ардуино, а для 8266 что предназначено?