NodeMCU Lua

Тема в разделе "Arduino & Shields", создана пользователем Securbond, 26 мар 2016.

  1. Securbond

    Securbond Гик

    5. Подключаем два датчика для погодной станции
    BME280 и BH1750

    IMG_4253.JPG IMG_4254.JPG


    Минимальные модули: i2c, bme280, file, gpio, net, node, tmr, uart, wifi

    1. Записываем в ESP сначала прошивку с модулями, затем файлик для работы с BH1750
    Код (Javascript):

    local M = {}
    M.GY_30_address = 0x23
    M.id = 0
    M.l = 0
    M.CMD = 0x10
    M.init = false

    function M.init(sda, scl)
        i2c.setup(M.id, sda, scl, i2c.SLOW)
        init = true
    end

    local function read_data(callback)
        i2c.start(M.id)
        i2c.address(M.id, M.GY_30_address, i2c.TRANSMITTER)
        i2c.write(M.id, M.CMD)
        i2c.stop(M.id)
        i2c.start(M.id)
        i2c.address(M.id, M.GY_30_address, i2c.RECEIVER)

        tmr.create():alarm(2000, 0, function(t)
            c = i2c.read(M.id, 2)
            i2c.stop(M.id)
            local UT = c:byte(1) * 256 + c:byte(2)
            M.l = (UT*1000/12)
            t = nil
            if callback then callback(M.l) end
        end)
    end

    function M.getlux(callthen)
        if (not M.init) then
            print("init() must be called before read.")
        else
            read_data(callthen)
        end
    end

    return M

     

    2. Пишем основной скрипт.
    Код (Javascript):

    sda = 1
    scl = 2
    ls = 0

        bh1750 = require("bh1750")
        bh1750.init(sda, scl)
        bme280.init(sda, scl)

      function printlux(l)
       ls = string.format("%.2f", l/100)
       print("Lux = "..ls.." lx")
      end
       
        tmr.alarm(0, 6000, 1, function()
        local H = string.format("%.1f", (bme280.humi()/1000))
        local P, T = bme280.baro()
        P = string.format("%.1f", (P/1000*0.75))
        T = string.format("%.2f", T/100)
          print("\nTemperatre = "..T.." C \nHumidity = "..H.." %, \nPressure = "
        ..P.." mm.Hg")
         
        bh1750.getlux(printlux)  
        -- print('Heap = '..node.heap())

      end)

     

    Запускаем скрипт получаем следующее:

    bme280.JPG


    UPD: Наблюдается нестабильная работа, модуль перезагружается :confused:
    UPD2: Добавил конденсатор по питанию, модуль стал стабильно работать без перезагрузок!

    UPD 11.08.2017: Ручками ИгорьК переписана библиотека для BH1750, убраны все задержки. конечный вариант прикрепил к записи.
     

    Вложения:

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

    ИгорьК Победитель модулей

    Наблюдайте за расходом памяти. Добавьте к каждому вызову таймера
    Код (Javascript):
    print('Heap = '..node.heap())
    и смотрите что происходит.
     
  3. Securbond

    Securbond Гик

    Проверил. С памятью всё норм, проблема была с питанием.
     
    ИгорьК нравится это.