Jumat, 23 Desember 2016

Om Telolet Om: WeMos DH11 Shield (ESP8266EX, NodeMCU, Lua)

Pada tulisan ini akan membahas pembuatan Lua script untuk mengukur temperatur dan humidity dengan menggunakan perangkat WeMos DH11, pemakai perangkat IoT dapat membantu para peneliti untuk merekam kondisi dilapangan dari waktu ke waktu sehingga cukup berkonsentrasi pada variabel lainnya, sedangkan variabel terkait dengan temperatur dan kelembaban dapat secara otomatis direkam oleh perangkat IoT.

Gambar 1. WeMos DHT11 Shield

Interface antara DH11 shield dengan WeMos board adalah melalui pin D1, keuntungan dari pemakaian shield adalah anda tidak membutuhkan bread-board maupun menggunakan jumper untuk menghubungkan antara WeMos board dengan sensor DH11, tetapi cukup shield DH11 ditumpukan diatas WeMos board.

pinDHT11 = 4 -- pin D4 pada board WeMos D1 mini

function readFromDHT11()
    status, temp, humi, temp_dec, humi_dec = dht.read11(pinDHT11)

    if status == dht.OK then
        wib = rtctime.epoch2cal(rtctime.get()+7*60*60) -- tambah 7 WEST INDONESIA TIME
        timeStr = string.format("%04d/%02d/%02d %02d:%02d:%02d", wib["year"], wib["mon"], wib["day"], wib["hour"], wib["min"], wib["sec"])
        print(timeStr ..";" .. temp .. ";" .. humi)
      
    elseif status == dht.ERROR_CHECKSUM then
        print( "DHT Checksum error." )
    elseif status == dht.ERROR_TIMEOUT then
        print( "DHT timed out." )
    end
end

sntp.sync("1.id.pool.ntp.org",
 function(sec,usec,server)
   print('setting time to:', sec, usec, "from: " .. server)
   rtctime.set(sec, usec)
 end,

 function()
   print('failed!')
 end
)

tmr.alarm(0,1000,1,readFromDHT11) -- setiap detik baca dari sensir DHT11

Pada script berikut ini adalah melakukan log ke file harian setiap 5 detik untuk keperluaan penelitian.

pinDHT11 = 4 -- pin D4 pada board WeMos D1 mini

function readFromDHT11()
    status, temp, humi, temp_dec, humi_dec = dht.read11(pinDHT11)

    if status == dht.OK then
        wib = rtctime.epoch2cal(rtctime.get()+7*60*60) -- tambah 7 WEST INDONESIA TIME
        timeStr = string.format("%04d/%02d/%02d %02d:%02d:%02d", wib["year"], wib["mon"], wib["day"], wib["hour"], wib["min"], wib["sec"])
        --print(timeStr ..";" .. temp .. ";" .. humi)
        payload = timeStr ..";" .. temp .. ";" .. humi
        return payload
      
    elseif status == dht.ERROR_CHECKSUM then
        print( "DHT Checksum error." )
    elseif status == dht.ERROR_TIMEOUT then
        print( "DHT timed out." )
    end
end

function logToFile()
    wib = rtctime.epoch2cal(rtctime.get()+7*60*60) -- tambah 7 WEST INDONESIA TIME
    fname = string.format("%04d%02d%02d", wib["year"], wib["mon"], wib["day"])
    -- open file in 'a+' mode   
    if file.open(fname, "a+") then
        -- write 'foo bar' to the end of the file
        file.writeline(readFromDHT11())
        print("log to " .. fname)
        file.close()
    end
end

sntp.sync("1.id.pool.ntp.org",
 function(sec,usec,server)
   print('setting time to:', sec, usec, "from: " .. server)
   rtctime.set(sec, usec)
 end,

 function()
   print('failed!')
 end
)

tmr.alarm(0,5000,1,logToFile) -- setiap detik baca dari sensir DHT11
 

Tidak ada komentar:

Posting Komentar