Peringatan:
Proses flash firmware berpotensi menghapus script Lua yang telah terinstalasi pada board anda.
Tulisan ini saya buat setelah menyadari bahwa binary firmware standard NodeMCU versi 0.9.5 yang saya gunakan adalah basic yang secara default bawaan dari board NodeMCU yang saya beli dan hanya memasukan beberapa module dasar seperti GPIO, net, node, timer, UART dan wifi ketika saya mencoba melakukan sntp.sync(), dan rtctime.get()
stdin:1: attempt to index global 'sntp' (a nil value)
stack traceback:
stdin:1: in main chunk
stdin:1: attempt to index global 'rtctime' (a nil value)Dengan munculkan pesan error ditas berarti bahwa module sntp dan rtctime adalah tidak tersedia pada firmware yang terinstalasi pada board WeMos yang saya gunakan, sehingga kustomisasi terhadap firmware perlu dilakukan untuk dapat memanfaatkan perintah diatas.
stack traceback:
stdin:1: in main chunk
Keuntungan lainnya dari kustomisasi firmware adalah mendapatkan firmware versi terakhir yang telah dilengkapi dengan berbagai bugs fixed yang mungkin ditemukan pada versi sebelumnya.
Setelah melakukan browsing, akhirnya saya mendarat pada website https://nodemcu-build.com/index.php dimana memungkinkan kita untuk melakukan kostumisasi module-module firmware NodeMCU tanpa perlu mempersiapkan lingkungan built pada komputer kita maupun konfigurasi yang rumit. Pemakaian dari situs ini tidak ribet banget, anda hanya perlu memasukan email, dan konfirmasi serta memilih module-module yang ingin anda masukan ke builds firmware anda. Adapun tujuan pemberiaan email adalah memberikan laporan perkembangan proses built, dan link untuk download hasil built.
Secara default module yang dimasukan adalah GPIO, net, node, timer, UART dan wifi. Anda dapat memilih module lainnya sesuai dengan kebutuhan, jangan memasukan semua module karena akan mempengaruhi ukuran binary firmware.
Pada pengujian ini saya menambahkan module RTC time dan SNTP
Gambar 1. Pilihan Module Custom NodeMCU
Setelah memilih module yang dikehendaki, maka selanjutnya lakukan scroll down dan klik pada Start your build.
Gambar 2. Klik pada Start yout build
Silakan tunggu hasil perkembangan build dengan membuka email anda, untuk mendapatkan konfirmasi kemajuan.
Gambar 3. Konfirmasi kemajuan build
Buka email build finish, dan akan disediakan link download untuk versi integer dan float, versi integer adalah lebih kecil dibandingkan dengan versi float, anda dapat menggunakan versi integer jika didalam proses kalkulasi pada aplikasi tidak melibatkan floating point.
Gambar 4. Link download hasil Built
Dalam hal ini saya mendownload yang versi integer. Setelah mendownload, maka selanjutnya adalah melakukan flash firmware ke WeMos D1 mini dengan menggunakan software nodemcu-master-flasher, pilih Config, dan pilih firmware dengan alamat 0x00000.
Gambar 5. Pilih beri tanda check, file binary Firmware dan alamat 0x0000
Selanjutnya adalah melakukan flash dengan klik pada tab Operation, dan klik pada Flash.
Gambar 6. Hasil Flash berhasil
Aktifkan software Esplor, dan set port yang sesuai dan kecepatan adalah115200 baud, dan klik pada open, jika berhasil akan tampil:
PORT OPEN 115200Jika muncul Binary, maka pastikan kecepatan adalah 115200 baud untuk firmware diatas 0.9.6, sedangkan firmware setelah itu adalah menggunakan 115200 baud. Berikut ini saya akan mencoba menggunakan module sntp dan rtctime pada app.lua.
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.
NodeMCU custom build by frightanic.com
branch: master
commit: 7b83bbb2ea134cd85ac9d63108603cc02c4e20f7
SSL: false
modules: file,gpio,net,node,rtctime,sntp,tmr,uart,wifi
build built on: 2016-11-06 08:50
powered by Lua 5.1.4 on SDK 1.5.4.1(39cb9a32)
lua: cannot open init.lua
>
Bisa juga setelah anda flash firmware baru, ketika boot pertama kali muncul pesan:
Formatting file system. Please wait...Maka dapat ditunggu sebentar sampai proses format selesai, dan akan boot normal kembali.
credentials.lua
-- Credentialsinit.lua
SSID = "BOLT!Super4G-899A"
PASSWORD = "********"
-- aplikasi ini berfungsi menghindarkan module anda terjebakapp.lua
-- pada kondisi restart tak terhingga jika terjadi bugs pada
-- init.lua.
-- aplikasi dapat berjalan pada dua modus, yaitu standalone
-- atau terkoneksi ke wifi.
-- agar dapat terkoneksi ke wifi, maka username dan password
-- didefinisikan pada file credentials.lua
-- aplikasi akan menunggu selama 3 detik sebelum file app.lua
-- dieksekusi, jika terjadi bugs pada app.lua, maka anda
-- dapat menjalankan file.remove("app.lua") sehingga tidak
-- terjebak pada kondisi restart tak terhingga.
function startup()
print("Running")
-- aplikasi autoexec anda sekarang adalah 'app.lua'
if file.open("app.lua") == nil then
print("app.lua tidak ditemukan, silakan buat app.lua sebagai auto executable.")
else
file.close("app.lua")
dofile("app.lua")
end
end
-- periksa keberadaan file credentials.lua yang mendefinisikan
-- 'SSID' and 'PASSWORD' wifi
if file.open("credentials.lua") == nil then
-- bagian module standalone
print("Tidak ada file credentials.lua!")
print("Boot sebagai module standalone")
print("You have 3 seconds to abort")
print("Waiting...")
-- jalankan fungsi startup setelah 3 detik
tmr.alarm(0, 3000, 0, startup)
else
-- bagian module koneksi wifi
file.close("credentials.lua")
-- muat variable SSID dan PASSWORD
dofile("credentials.lua")
print("Koneksi ke " .. SSID)
wifi.setmode(wifi.STATION)
wifi.sta.config(SSID, PASSWORD)
-- wifi.sta.connect() not necessary because config() uses auto-connect=true by default
-- mencoba koneksi setiap detik sampai tmr.stop(1)
trycount = 1
tmr.alarm(1, 1000, 1, function()
if wifi.sta.getip() == nil then
print("trying " .. trycount .. " second(s)")
trycount = trycount + 1
else
-- berhasil koneksi dan mendapatkan IP Address
tmr.stop(1)
print("WiFi connected")
print("You have 3 seconds to abort")
print("Waiting...")
-- jalankan fungsi startup setelah 3 detik
tmr.alarm(0, 3000, 0, startup)
end
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)
utc = rtctime.epoch2cal(rtctime.get())
print("Waktu adalah UTC:" .. string.format("%04d/%02d/%02d %02d:%02d:%02d", utc["year"], utc["mon"], utc["day"], utc["hour"], utc["min"], utc["sec"]))
wib = rtctime.epoch2cal(rtctime.get()+7*60*60) -- tambah 7
print("Waktu adalah WIB:" .. string.format("%04d/%02d/%02d %02d:%02d:%02d", wib["year"], wib["mon"], wib["day"], wib["hour"], wib["min"], wib["sec"]))
end,
function()
print('failed!')
end
)
Jika dijalankan akan menghasilkan:
setting time to: 1478434624 204811 from: 202.65.114.202
Waktu adalah UTC:2016/11/06 12:17:04
Waktu adalah WIB:2016/11/06 19:17:04
Tidak ada komentar:
Posting Komentar