ESP01+AM2320+nodemcu

Тема в разделе "ESP8266, ESP32", создана пользователем vaz, 15 фев 2019.

  1. vaz

    vaz Нуб

    Доброго времени суток Уважаемые.

    пытался подружить сабж. вот по этому мануалу:[​IMG]

    собрал в облачном билдере прошивку с i2c и am2320 модулями.
    прошил.
    залил в контроллер Esplorer-ом следующий код:
    Код (Text):

    id  = 0
    sda = 4
    scl = 3

    i2c.setup(id, sda, scl, i2c.SLOW)

    model, version, serial=am2320.setup()
    print(string.format("AM2320: MODEL %s, VERSION %s, SN %s.",model,version,serial))
    tmr.alarm(1, 2000, tmr.ALARM_SINGLE, function()
        tmr.alarm(1, 2000, tmr.ALARM_AUTO, function()

            rh, t = am2320.read()
            print(string.format("RH: %s%%", rh / 10))
            print(string.format("Temperature: %s degrees C", t / 10))
        end);
    end);
    вылетает с ошибкой:
    attempt to call field 'setup' (a nil value)

    в строке:
    model, version, serial = am2320.setup()

    что я делаю не так?
     
  2. ИгорьК

    ИгорьК Гуру

    Покажите скриншот перезагрузки модуля.
     
  3. vaz

    vaz Нуб

    Код (Text):
    > file.open("script1.lua","w+");
    Handle Input: first=1, pos=30, len=256, actual=30, line=file.open("script1.lua","w+");
    > w = file.writeline
    Handle Input: first=1, pos=18, len=256, actual=18, line=w = file.writeline
    > w([==[id  = 0]==]);
    Handle Input: first=1, pos=19, len=256, actual=19, line=w([==[id  = 0]==]);w([==[sda = 4]==]);
    Handle Input: first=1, pos=19, len=256, actual=19, line=w([==[sda = 4]==]);w([==[scl = 3]==]);
    Handle Input: first=1, pos=19, len=256, actual=19, line=w([==[scl = 3]==]);w([==[--rh=110]==]);
    Handle Input: first=1, pos=20, len=256, actual=20, line=w([==[--rh=110]==]);w([==[--t=110]==]);
    Handle Input: first=1, pos=19, len=256, actual=19, line=w([==[--t=110]==]);w([==[-- initialize i2c, set pin1 as sda, set pin2 as scl]==]);
    Handle Input: first=1, pos=63, len=256, actual=63, line=w([==[-- initialize i2c, set pin1 as sda, set pin2 as scl]==]);w([==[i2c.setup(id, sda, scl, i2c.SLOW) ]==]);
    Handle Input: first=1, pos=46, len=256, actual=46, line=w([==[i2c.setup(id, sda, scl, i2c.SLOW) ]==]);w([==[]==]);
    Handle Input: first=1, pos=12, len=256, actual=12, line=w([==[]==]);w([==[model, version, serial=am2320.setup(sda,scl)]==]);
    Handle Input: first=1, pos=56, len=256, actual=56, line=w([==[model, version, serial=am2320.setup(sda,scl)]==]);w([==[rh, t = am2320.read()]==]);
    Handle Input: first=1, pos=33, len=256, actual=33, line=w([==[rh, t = am2320.read()]==]);file.close();
    Handle Input: first=1, pos=13, len=256, actual=13, line=file.close();
    Fatal exception 9(LoadStoreAlignmentCause):
    epc1=0x4025ca19, epc2=0x00000000, epc3=0x00000000, excvaddr=0x0000000d, depc=0x00000000
    я
    ets Jan  8 2013,rst cause:1, boot mode:(3,6)
    load 0x40100000, len 26712, room 16
    tail 8
    chksum 0x45
    load 0x3ffe8000, len 2188, room 0
    tail 12
    chksum 0x8d
    ho 0 tail 12 room 4
    load 0x3ffe888c, len 136, room 12
    tail 12
    chksum 0x65
    csum 0x65
    Дгдѓnм“{‚ыo|дЊdЏp;lc›Я|r“lњoаѓgг
    mode : sta(2c:3a:e8:0a:aa:d7)
    add if0
    _flash_used_end:4026f000
    fs.start:70000,max:8b000
    _flash_used_end:4026f000
    fs.start:70000,max:8a000
    _flash_used_end:4026f000
    fs.start:80000,max:7b000
    _flash_used_end:4026f000
    fs.start:80000,max:7a000
    mount res: 0, 0
    Task task_lua started.
    nul mode, fpm auto sleep set:enalbe
    NodeMCU custom build by frightanic.com
        branch: master
        commit: 11592951b90707cdcb6d751876170bf4da82850d
        SSL: false
        modules: am2320,dht,encoder,file,gpio,http,net,node,ow,tmr,uart,wifi
    build created on 2019-02-15 15:59
    powered by Lua 5.1.4 on SDK 2.2.1(6ab97e9)
    lua: cannot open init.lua
    > Heap size:42120.

     
    оно? та же ошибка но на прошивке собранной с включенным дебагом.
     
    Последнее редактирование: 16 фев 2019
  4. ИгорьК

    ИгорьК Гуру

    У вас в коде есть такая строка:
    Код (C++):
    i2c.setup(id, sda, scl, i2c.SLOW)
    А при перезагрузке среди модулей i2c отсутствует:
    Код (C++):
    modules: am2320,dht,encoder,file,gpio,http,net,node,ow,tmr,uart,wifi
    При заказе прошивки добавьте этот модуль.
    tmp-cam-1052717371767646996.jpg
     
  5. vaz

    vaz Нуб

    сорри, собирал уже ночью, промахнулся.

    вот пересобрал, но ошибка никуда не делась:
    Код (Text):

    PORT OPEN 115200

    Communication with MCU..Got answer! Communication with MCU established.
    AutoDetect firmware...

    Can't autodetect firmware, because proper answer not received (may be unknown firmware).
    Please, reset module or continue.
    t=1, pos=12, len=256, actual=12, line==node.heap()
    43472
    > file.remove("script1.lua");
    Handle Input: first=1, pos=27, len=256, actual=27, line=file.remove("script1.lua");file.open("script1.lua","w+");
    Handle Input: first=1, pos=30, len=256, actual=30, line=file.open("script1.lua","w+");
    > w = file.writeline
    Handle Input: first=1, pos=18, len=256, actual=18, line=w = file.writelinew([==[]==]);
    Handle Input: first=1, pos=12, len=256, actual=12, line=w([==[]==]);w([==[id  = 0]==]);
    Handle Input: first=1, pos=19, len=256, actual=19, line=w([==[id  = 0]==]);w([==[sda = 4]==]);
    Handle Input: first=1, pos=19, len=256, actual=19, line=w([==[sda = 4]==]);w([==[scl = 3]==]);
    Handle Input: first=1, pos=19, len=256, actual=19, line=w([==[scl = 3]==]);w([==[]==]);
    Handle Input: first=1, pos=12, len=256, actual=12, line=w([==[]==]);w([==[i2c.setup(id, sda, scl, i2c.SLOW)]==]);
    Handle Input: first=1, pos=45, len=256, actual=45, line=w([==[i2c.setup(id, sda, scl, i2c.SLOW)]==]);w([==[]==]);
    Handle Input: first=1, pos=12, len=256, actual=12, line=w([==[]==]);w([==[model, version, serial=am2320.setup()]==]);
    Handle Input: first=1, pos=49, len=256, actual=49, line=w([==[model, version, serial=am2320.setup()]==]);w([==[print(string.format("AM2320: MODEL %s, VERSION %s, SN %s.",model,version,serial))]==]);
    Handle Input: first=1, pos=93, len=256, actual=93, line=w([==[print(string.format("AM2320: MODEL %s, VERSION %s, SN %s.",model,version,serial))]==]);w([==[tmr.alarm(1, 2000, tmr.ALARM_SINGLE, function()]==]);
    Handle Input: first=1, pos=59, len=256, actual=59, line=w([==[tmr.alarm(1, 2000, tmr.ALARM_SINGLE, function()]==]);w([==[    tmr.alarm(1, 2000, tmr.ALARM_AUTO, function()]==]);
    Handle Input: first=1, pos=61, len=256, actual=61, line=w([==[    tmr.alarm(1, 2000, tmr.ALARM_AUTO, function()]==]);w([==[]==]);
    Handle Input: first=1, pos=12, len=256, actual=12, line=w([==[]==]);w([==[        rh, t = am2320.read()]==]);
    Handle Input: first=1, pos=41, len=256, actual=41, line=w([==[        rh, t = am2320.read()]==]);w([==[        print(string.format("RH: %s%%", rh / 10))]==]);
    Handle Input: first=1, pos=61, len=256, actual=61, line=w([==[        print(string.format("RH: %s%%", rh / 10))]==]);w([==[        print(string.format("Temperature: %s degrees C", t / 10))]==]);
    Handle Input: first=1, pos=77, len=256, actual=77, line=w([==[        print(string.format("Temperature: %s degrees C", t / 10))]==]);w([==[    end);]==]);
    Handle Input: first=1, pos=21, len=256, actual=21, line=w([==[    end);]==]);w([==[end);]==]);
    Handle Input: first=1, pos=17, len=256, actual=17, line=w([==[end);]==]);file.close();
    Handle Input: first=1, pos=13, len=256, actual=13, line=file.close();
    > dofile("script1.lua");
    Handle Input: first=1, pos=22, len=256, actual=22, line=dofile("script1.lua");
    Function platform_gpio_mode() is called. pin_mux:1610614840, func:0
    Function platform_gpio_mode() is called. pin_mux:1610614836, func:0
    script1.lua:8: transmission error
    stack traceback:
        [C]: in function 'setup'
        script1.lua:8: in main chunk
        [C]: in function 'dofile'
        stdin:1: in main chunk
    >
     
  6. ИгорьК

    ИгорьК Гуру

    Просто выполните скрипт и покажите его результат:
    Код (C++):
    table.foreach(am2320, print)
     
  7. vaz

    vaz Нуб

    ваша команда тоже ругается:
    script1.lua:9: bad argument #1 to 'foreach' (table expected, got romtable)

    так. тема закрыта. был дохлый датчик.

    но вопрос с отладкой для меня открытый. может знает кто что почитать по отладке кроме иерусалимски?
     
    Последнее редактирование: 16 фев 2019
  8. ИгорьК

    ИгорьК Гуру

    Кстати, возможно ноги ам2320 надо к плюсу резисторами подтянуть, если китайские братья не поставили их на модуль.
     
  9. vaz

    vaz Нуб

    а как проверить, поставили или нет?
     
  10. vaz

    vaz Нуб

    и почему то у всех модулей -
    AM2320: MODEL 0, VERSION 0, SN 0.
    это глюк или там действительно 0?

    да кстати - показания датчиков различаются относительно других до 2-3х градусов их придется градуировать? или это бессмысленно?
     
  11. ИгорьК

    ИгорьК Гуру

  12. ИгорьК

    ИгорьК Гуру

    У меня таких модулей никогда не было, затрудняюсь сказать.

    Разброс 2-3 градуса говорит об их качестве. Посмотрите даташит на них.

    DS18B20 по даташиту имеют разброс 0.5 градуса, но на деле всегда чуть меньше.
     
  13. vaz

    vaz Нуб

    0,5 меня бы вполне устроило. в даташите на am2320 столько и стоит.

    спасибо огромное, два дня убил на поиск причины.
     
  14. ratman

    ratman Нерд

    По даташиту надо тянуть к питанию через 4.7к. А чтобы китайские братья по разуму по своей воле подтягивающие резисторы поставили... Хотя, с другой стороны, лепить подтяжку в модуль, это не верно. Устройств на шине может быть несколько, тогда они своими подтяжками любой полезный сигнал загнобят.
     
  15. vaz

    vaz Нуб

    продолжу)))

    дальнейшее тестирование выявило что код живет пару часов, а потом перегружается модуль(((
    и это еще без подъема вайфая для передачи данных в хранилку.
    валится с сообщением:
    Код (Text):
    mode : sta(2c:3a:e8:0a:aa:d7)
    add if0

    _flash_used_end:4026c000
    fs.start:70000,max:8b000
    _flash_used_end:4026c000
    fs.start:70000,max:8a000
    _flash_used_end:4026c000
    fs.start:80000,max:7b000
    _flash_used_end:4026c000
    fs.start:80000,max:7a000
    mount res: 0, 0
    Task task_lua stasted.
    Fatal exception 29(StoreProhibitedCause):
    epc1=0x40264820, epc2=0x00000000, epc3=0x00000000, excvaddr=0y00000010, depc=0x00000000
    я
    ets Jan  8 2013,rst cause:4, boot mode:(3,6)

    wdt reset
    load 0x40100000, len 26712, room 16
    tail 8
    chksum 0x86
    load 0x3ffe8000, len 2184, room 0
    tail 8
    chksum 0x23
    load 0x3ffe8888, len 136, room 0
    tail 8
    chksum 0x82
    csum 0x82
     
    дело в таймерах? с какой периодичностью можно безопасно дергать таймер? а то я уменьшил с 2 секунд до 100 миллисекунд стало вылезать lmacrxblk 0.. правда код продолжал работать....

    2 ratman, да я внимательно прочитал мануал на который дал ссылку игорь, но шина у меня пока ничем кроме 1 датчика не занята)))
     
    Последнее редактирование: 17 фев 2019
  16. ratman

    ratman Нерд

    Может я чего не понимаю? Разговор не о том, занята или нет. У сенсора входы/выходы с ОК, и логической "1" является 0V. А что у вас на шине сейчас творится предсказать невозможно.
     
  17. vaz

    vaz Нуб

    я ставил резистор. разницы незаметил
     
  18. ИгорьК

    ИгорьК Гуру

    https://nodemcu.readthedocs.io/en/l...does-the-sdk-event-tasking-system-work-in-lua
     
  19. vaz

    vaz Нуб

    продолжу... грызть кактус.
    добиться стабильной работы ам2320 в режиме работы по i2c, с прошивкой nodemcu не удалось: асинхронный код с таймерами жил максимум пару часов. обернутый в поток - несколько минут максимум.

    пересобрал по однопроводной схеме(4 контакт датчика SCL присоединил к земле). запустил в потоке опрос.
    Схема проработала не менее 7 часов. после чего стал перегружаться с вот таким логом:

    err3,exceed max time value

    ets Jan 8 2013,rst cause:4, boot mode:(3,6)

    wdt reset
    load 0x40100000, len 27556, room 16
    tail 4
    chksum 0xeb
    load 0x3ffe8000, len 2264, room 4
    tail 4
    chksum 0xce
    load 0x3ffe88d8, len 136, room 4
    tail 4
    chksum 0x5d
    csum 0x5d
    Дгдѓnм“{‚ыo|дЊdЏp;lc›Я|r“lњoаѓgг
    mode : softAP(5e:cf:7f:b8:2f:8c)
    add if1
    dhcp server start:(ip:192.168.4.1,mask:255.255.255.0,gw:192.168.4.1)
    bcn 100

    _flash_used_end:40273000
    fs.start:80000,max:7b000
    _flash_used_end:40273000
    fs.start:80000,max:7a000
    _flash_used_end:40273000
    fs.start:90000,max:6b000
    _flash_used_end:40273000
    fs.start:90000,max:6a000
    mount res: 0, 0
    Task task_lua started.
    nul mode, fpm auto sleep set:enalbe

    NodeMCU custom build by frightanic.com
    branch: master
    commit: 11592951b90707cdcb6d751876170bf4da82850d
    SSL: false
    modules: am2320,bme280,cron,dht,ds18b20,file,gpio,http,i2c,net,node,ow,tmr,uart,wifi
    build created on 2019-02-17 14:09
    powered by Lua 5.1.4 on SDK 2.2.1(6ab97e9)
    lua: cannot open init.lua
    > Heap size:41024.
    err3,exceed max time value

    теперь модуль постоянно ребутится. на команды нормально не реагирует.

    ошибку, применимо к модулю esp8266 я не нашел в интернете.

    Уважаемые, я не играюсь а собираю вполне конкретное устройство, которое должно проработать не менее недели автономно и не в одном экземпляре. отнеситесь пожалуйста серьезно.
     
    Последнее редактирование: 18 фев 2019
  20. ИгорьК

    ИгорьК Гуру