UART между ESP01 и Arduino Uno

Тема в разделе "ESP8266, ESP32", создана пользователем Allex, 3 янв 2019.

  1. Allex

    Allex Нуб

    Здравствуйте, требуется получать и отправлять данные по UART между ESP01(LUA) и Arduino Uno. Есть ли какой нибудь шаблон кода приёма передачи, заранее благодарен.
     
    Последнее редактирование: 3 янв 2019
  2. Allex

    Allex Нуб

    написал небольшой код (на LUA) приема и парсинга строки такого типа :<s1=0,s2=3,s3=95,s4=33,s6=555>\n
    которую принимает ESP.
    Вопрос почему не работает условие скобок <> ,или можно как то по другому сделать?

    Код (Python):
    dat = {}
    dat.s1 = 0
    dat.s2 = 0
    dat.s3 = 0
    dat.s4 = 0
    dat.s5 = 0

    local index
    local UARTindex

    function UART()
        uart.setup(0,9600,8,0,1)
        tmr.create():alarm(300, tmr.ALARM_AUTO,UART_SCAN) --скорость обмена
    end

    tmr.create():alarm(25000, tmr.ALARM_SINGLE, UART)--задержка для возможности отключения режима юарт
    -----------------------------

    function UART_SCAN()
        --прием пакета
        uart.on("data","\n",
        function(data)
            --if(string.sub(data,0,1)=="<" and string.sub(data, -1)==">" )then--проверка наличия скобок(не работает почему то)
                UARTindex = 0
                for i in string.gmatch(data, "(%w+)") do --выборка с шаблоном
                    if(UARTindex == 0)then
                        index = i
                    else
                        --защита от несуществующего индекса
                        local function func()
                            if not dat[index] then return end
                            dat[index] = i+0
                        end
                        func()
                    end
                    UARTindex = (UARTindex == 0) and 1 or 0
                end
            --end

        end, 0)

    end
     
    Последнее редактирование: 3 янв 2019
  3. parovoZZ

    parovoZZ Гуру

    какой сам придумаешь, такой и будет. Шаблонов нет, Есть стандарты. Но стандарты тебе с такими вопросами не поднять.
     
    Allex нравится это.
  4. ИгорьК

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

    В Lua любой первый элемент имеет номер 1, а не 0, как в Си.

    Не проще ли передать данные в формате json и распарсить их стандартным sjson парсером?
     
    Последнее редактирование: 4 янв 2019
    Allex нравится это.
  5. ИгорьК

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

    А в целом я не понял что ваш код пытается делать.
     
    Allex нравится это.
  6. Allex

    Allex Нуб

    просто при выводе
    Код (C++):
    local data1 = "<s1=000,s2=111,s3=222,s4=033,s6=555>"
    print(string.sub(data1,0,1))
    print(string.sub(data1,-1))
    получаю
    <
    >
    кстати так же и при
    Код (C++):
    local data1 = "<s1=000,s2=111,s3=222,s4=033,s6=555>"
    print(string.sub(data1,1,1))
    print(string.sub(data1,-1))

    да и код я неправильно написал, забыл что uart.on работает всегда и цикл ненужен
     
    Последнее редактирование: 4 янв 2019
  7. Allex

    Allex Нуб

    Итог: все равно не выполняет условие, кстати на счет json можно попробовать, но думаю разбираться буду долго
     
  8. ИгорьК

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

    Надо делать, а не пробовать. Вам все равно что с ардуино гнать.
     
    Allex нравится это.
  9. Allex

    Allex Нуб

    Да, могу там в любой форме переделать.
    Я думаю может проще сделать.
    Просто данные в определенном порядке отправлять без идентификатора, и парсить проще, какие недостатки этого? Данные часто путаются?
     
  10. ИгорьК

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

    Что отправите то и придет.

    Вот старый старый (но до сих пор работающий) проект для примера. Сейчас я бы делал по-другому.
     
    Allex нравится это.
  11. Allex

    Allex Нуб

    Спасибо, огромное, но все-таки заинтриговала фраза "Сейчас я бы делал по-другому", в 2-х словах можно?
     
  12. ИгорьК

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

    Не лепил бы все в один файл (наверняка есть резервы уменьшения затрат памяти) и работал с json - это обязательно. А так - не исключаю что и код писал как-то по-другому. Тогда я только начинал этим заниматься.
     
    Allex нравится это.