Доброго времени суток Уважаемые. пытался подружить сабж. вот по этому мануалу: собрал в облачном билдере прошивку с 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() что я делаю не так?
Код (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. оно? та же ошибка но на прошивке собранной с включенным дебагом.
У вас в коде есть такая строка: Код (C++): i2c.setup(id, sda, scl, i2c.SLOW) А при перезагрузке среди модулей i2c отсутствует: Код (C++): modules: am2320,dht,encoder,file,gpio,http,net,node,ow,tmr,uart,wifi При заказе прошивки добавьте этот модуль.
сорри, собирал уже ночью, промахнулся. вот пересобрал, но ошибка никуда не делась: Код (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 >
ваша команда тоже ругается: script1.lua:9: bad argument #1 to 'foreach' (table expected, got romtable) так. тема закрыта. был дохлый датчик. но вопрос с отладкой для меня открытый. может знает кто что почитать по отладке кроме иерусалимски?
Кстати, возможно ноги ам2320 надо к плюсу резисторами подтянуть, если китайские братья не поставили их на модуль.
и почему то у всех модулей - AM2320: MODEL 0, VERSION 0, SN 0. это глюк или там действительно 0? да кстати - показания датчиков различаются относительно других до 2-3х градусов их придется градуировать? или это бессмысленно?
У меня таких модулей никогда не было, затрудняюсь сказать. Разброс 2-3 градуса говорит об их качестве. Посмотрите даташит на них. DS18B20 по даташиту имеют разброс 0.5 градуса, но на деле всегда чуть меньше.
0,5 меня бы вполне устроило. в даташите на am2320 столько и стоит. спасибо огромное, два дня убил на поиск причины.
По даташиту надо тянуть к питанию через 4.7к. А чтобы китайские братья по разуму по своей воле подтягивающие резисторы поставили... Хотя, с другой стороны, лепить подтяжку в модуль, это не верно. Устройств на шине может быть несколько, тогда они своими подтяжками любой полезный сигнал загнобят.
продолжу))) дальнейшее тестирование выявило что код живет пару часов, а потом перегружается модуль((( и это еще без подъема вайфая для передачи данных в хранилку. валится с сообщением: Код (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 датчика не занята)))
Может я чего не понимаю? Разговор не о том, занята или нет. У сенсора входы/выходы с ОК, и логической "1" является 0V. А что у вас на шине сейчас творится предсказать невозможно.
продолжу... грызть кактус. добиться стабильной работы ам2320 в режиме работы по i2c, с прошивкой nodemcu не удалось: асинхронный код с таймерами жил максимум пару часов. обернутый в поток - несколько минут максимум. пересобрал по однопроводной схеме(4 контакт датчика SCL присоединил к земле). запустил в потоке опрос. Схема проработала не менее 7 часов. после чего стал перегружаться с вот таким логом: err3,exceed max time value ets Jan 8 2013,rst cause:4, boot mode3,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 startip: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 я не нашел в интернете. Уважаемые, я не играюсь а собираю вполне конкретное устройство, которое должно проработать не менее недели автономно и не в одном экземпляре. отнеситесь пожалуйста серьезно.