Esp 8266. проблема с инициализацией.

Тема в разделе "ESP8266, ESP32", создана пользователем Shimano, 14 сен 2019 в 07:57.

  1. Shimano

    Shimano Нерд

    Добрый день.Суть проблемы вкратце,залил собранную на всем известном сайте прошивку, но после заливки в модуль выдаёт следующее -
    Код (C++):
    Waiting ...
    init.lua:2: attempt to call field 'register' (a nil value)
    stack traceback:
        init.lua:2: in main chunk
        [C]: in function 'dofile'
        stdin:1: in main chunk
    > print ( "Waiting ...")
    Waiting ...tmr.register (0, 5000, tmr.ALARM_SINGLE, function (t) tmr.unregister (0); print ( "Starting ..."); dofile ( "bme280.lua") end)
    stdin:1: attempt to call field 'register' (a nil value)
    stack traceback:
        stdin:1: in main chunktmr.start (0)
    stdin:1: attempt to call field 'start' (a nil value)
    stack traceback:
        stdin:1: in main chunk
    >
    Раньше такого не было, хотя делаю всё также как и полгода тому назад.Кто нибудь знает суть проблемы?
     

    Вложения:

  2. ИгорьК

    ИгорьК НЕ Модератор

    Я знаю. Приблизительно.
     
  3. Shimano

    Shimano Нерд

    Не подскажете?
     
  4. ИгорьК

    ИгорьК НЕ Модератор

    Подскажу.
    В прошивке произошли изменения, разработчики ВИДИМО сделали то что обещали пару лет - запретили работу с неименованными таймерами.

    Вам надо внести изменения в скрипт везде, где применяются таймеры в соответствие с https://nodemcu.readthedocs.io/en/master/modules/tmr/
     
  5. Shimano

    Shimano Нерд

    Ну теперь всё ясно,я примерно догадывался в чём дело, но нигде не мог найти инфы.Как всегда огромное спасибо, будет теперь, чем вечером заняться!
     
  6. Shimano

    Shimano Нерд

    Хотя блинк работает нормально
    Код (C++):
    do
    pin1=6
    pin2=6
    gpio.mode(pin1, gpio.OUTPUT)
    gpio.mode(pin2, gpio.OUTPUT)
    ligth1 = 1
    ligth2 = 1

    tmr.create():alarm(500, tmr.ALARM_AUTO, function()
        gpio.write(pin1, ligth1)
        print("Writе  to pin1 "..ligth1)
        ligth1 = (ligth1 == 0) and 1 or 0
    end)

    tmr.create():alarm(100, tmr.ALARM_AUTO, function()
        gpio.write(pin2, ligth2)
        print("Writе  to pin2 "..ligth2)
        ligth2 = (ligth2 == 0) and 1 or 0
    end)
    end


    Странно
     
  7. ИгорьК

    ИгорьК НЕ Модератор

    Сравнивайте код, странность исчезнет
     
  8. Shimano

    Shimano Нерд

    И снова спасибо Игорь, вроде разобрался. init -
    Код (C++):
    mytimer = tmr.create()
    mytimer:register(5000, tmr.ALARM_SINGLE, function (t) print("Started..."); t:unregister();dofile ( "ADCtest.lua") end)
    mytimer:start()
    ну и тест АЦП -
    Код (C++):
    do
    adc.force_init_mode(adc.INIT_ADC)
    tmr.create():alarm(500, tmr.ALARM_AUTO, function()
    print('adc '..adc.read(0)..'\n')
    end)
    end

     
     
  9. Shimano

    Shimano Нерд

    Кстати Игорь, извиняюсь что не в тему, но каким образом при подключении к одной шине двух и более датчиков bme280, считывать с них показания? в описании я не нашёл или проморгал.
     
  10. ИгорьК

    ИгорьК НЕ Модератор

    Точно не скажу, глубоко не изучал, датчик работает по I2С, если у датчиков разные адреса, то проблем нет - каждый отвечает по своему адресу.
     
  11. parovoZZ

    parovoZZ Гуру

    если в режиме интерфейса I2C, то не более двух. Если SPI - то разруливать пином CS (вроде так. Дашик лень смотреть). На SPI повесить можно много, но не далеко.
     
  12. Shimano

    Shimano Нерд

    ну как я понял у них (bme280) изначально по умолчанию адрес 0х76, как обращаться к конкретному датчику, вот загадка
     
  13. Shimano

    Shimano Нерд

    Про Spi я знаю, но у нас то i2c
     
  14. parovoZZ

    parovoZZ Гуру

    нет никаких загадок: по его адресу.

    раз I2C, то всего два датчика на шину.
     
  15. a1000

    a1000 Гик

  16. ИгорьК

    ИгорьК НЕ Модератор

    Как-то без детального объяснения не понятно.

    Я знаю два способа "разборок" с адресами:
    1. производитель позволяет "играть" перемычками;
    2. производитель позволяет перешивать адреса.

    Ответ на оба вопросам ищется в даташите. I2C позволяет управлять бОльшим количеством устройств, нежели два. Поэтому, почему только два - вы знаете даташит и там именно это указано?
     
  17. parovoZZ

    parovoZZ Гуру

    Если интерфейс I2C, то ногой SDO можно установить адрес либо по дефолту, либо младший бит адреса "0" заменить на "1".
     
    ИгорьК нравится это.
  18. a1000

    a1000 Гик

    Там всего два варианта установки адреса.