Pengembangan aplikasi pada WeMos sebagaimana board ESP8266 lainnya dapat menggunakan Arduino maupun LUA. Untuk pengembangan menggunakan bahasa pemrograman LUA anda perlu menginstalasi firmware NodeMCU pada board anda.
Interface antara board WeMos D1 mini dengan komputer dilakukan melalui Micro USB, dimana pada komputer diinstalasi driver USB to UART driver CH340 yang dapat didownload pada https://www.wemos.cc/downloads.
Gambar 1. USB to UART driver CH340
Gambar 2. USB-SERIAL CH340 (COM8)
Untuk proses flash firmware NodeMCU, anda membutuhkan software nodemcu-flasher-master yang dapat diperoleh di https://github.com/nodemcu/nodemcu-flasher, jalankan dan klik pada Flash.
Gambar 3. Muncul Waiting MAC pada saat Flash
Jika sewaktu melakukan flash firmware NodeMCU tidak berhasil dilakukan, dengan pesan Waiting MAC terus menerus, maka berarti bahwa broad anda tidak berhasil memasuki flash mode. Langkah yang dapat dilakukan adalah melakukan pull-down pin D3 atau GPIO 0 ke LOW (dengan menghubungkan pin D3 ke GND).
Gambar 4. Pull Down pin D3 ke LOW
Jika proses flash firmware berhasil dilakukan, maka akan tampil sebagaimana gambar 5.
Gambar 5. Proses flash firmware berhasil dilakukan.
Sesaat setelah flash firmware berhasil dilakukan, ingat untuk mencabut kembali kabel pin D3 ke GND.
Selanjutnya adalah silakan download software Esplor yang berfungsi untuk sebagai editor, dan upload aplikasi LUA ke board yang dapat didownload di https://esp8266.ru/esplorer/
Gambar 6. Paket Esplor ESP8266
Untuk koneksi ke firmware NodeMCU, maka isikan nomor port, dan klik Open. Jika koneksi tidak berhasil dilakukan, maka tekan tombol reset pada board
Gambar 7. Reset Button WeMos D1 mini
Contoh koneksi tidak berhasil dilakukan, silakan tekan tombol reset.
PORT OPEN 9600
Communication with MCU..
Contoh koneksi berhasil dilakukan:
NodeMCU 0.9.5 build 20150318 powered by Lua 5.1.4
lua: cannot open init.lua
>
Jika pada saat reset tidak berhasil muncul prompt LUA >, tetapi muncul pesan:
Can't autodetect firmware, because proper answer not received (may be unknown firmware).
Please, reset module or continue.
Pastikan board anda berada pada kondisi Run, dengan menghubungkan pin D3 ke 3V3, dan tekan reset sekali lagi. Jika muncul bahasa mesin, maka pastikan anda memilih koneksi 9600 baud.
ÙVíbÕˆÃaÁaEÁÿÁQÔa�„Á!ÁsáÁÿÑQÔá£âø
Jika tetap gagal Boot, maka Boot log dapat dibaca dengan 74880 baud untuk membaca log boot rom:
Jika segalanya sudah Ok, maka anda dapat memulai membuat aplikasi untuk startup yang defaultnya adalah init.lua. Sesuatu hal yang penulis ingatkan terkait dengan file init.lua adalah file yang secara otomatis akan dieksekusi oleh platform NodeMCU setiap kali booting.ets Jan 8 2014,rst cause 1, boot mode:(3,7) load 0x40100000, len 24236, room 16 tail 12 chksum 0xb7 ho 0 tail 12 room 4 load 0x3ffe8000, len 3008, room 12 tail 4 chksum 0x2c load 0x3ffe8bc0, len 4816, room 4 tail 12 chksum 0x46 csum 0x46
Perhatian:
Jangan menulis script langsung pada file init.lua, karena jika terdapat bugs didalam script anda, bisa menyebabkan sistem reboot dan terjebak pada reboot loop tak terhingga, sehingga anda terpaksa harus melakukan flash ulang firmware anda.
Berikut ini adalah contoh yang dapat menyebabkan terjebak pada reboot loop tak terhingga jika script berikut ini terjadi pada init.lua (jangan dicoba).
while true do
...
end
Kode diatas akan mengakibatkan watchdog timer membangkitkan suatu wdt timeout pada karena proses looping memakan kesuluruhan waktu CPU karena bekerja secara non-interrupt mode sehingga kode lainnya akan terblokir. Watchdog timer merupakan mekanisme pemantauan untuk mencegah proses menggunakan waktu processor melampaui 5 detik dengan memicu wdt timeout yang menyebabkan reboot ulang.
Hal lain yang juga perlu menjadi perhatian didalam pemakaian tmr.delay(uSecond) adalah jika pada task berjalan (callback) lebih dari 10 mSec, maka Wifi dan TCP stacks dapat gagal, sehingga jika anda ingin suatu delay lebih dari 8 mSec atau lebih, maka pemakaian tmr.delay() adalah pendekatan yang salah. Karena perintah tmr.delay() juga bekerja secara non-interrupt mode.
Karena dikembangkan dengan ukuran menjadi masalah, pemakaian perintah yang salah script yang dapat dapat dengan mudah memicu "PANIC" pada sistem dan menyebabkan reboot ulang:
PANIC: unprotected error in call to Lua API (app.lua:4: attempt to call field 'mode1' (a nil value))
Script init.lua ini saya ambil dari internet dan lakukan modifikasi untuk pemakaian praktis, dimana script pada init.lua berfungsi untuk mendeteksi keberadaan file credentials.lua, file credentials.lua menyimpan setting SSID dan PASSWORD wifi, jika file ini tersedia, maka akan dijalankan, dan dilanjutkan untuk melakukan koneksi ke wifi dan menjalankan file app.lua, jika file credentials.lua tidak tersedia maka proses akan dilanjutkan untuk menjalankan app.lua.
init.lua
credentilas.lua-- aplikasi ini berfungsi menghindarkan module anda terjebak
-- 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 tersedia atau terhapus.")
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
-- Credentials
SSID = "BOLT!Super4G-899A"
PASSWORD = "******"
app.lua
jika aplikasi diatas dijalankan tanpa file app.lua, dan credentials.lua maka akan muncul pesan:
--kontantaSesuatu hal yang perlu menjadi perhatian adalah nomor pin yang digunakan adalah berdasarkan nomor pin dari ESP8266 langsung, bukan nomor GPIO yang digunakan pada pemrograman Arduino. LED_PIN = 4 dalam hal ini adalah pin D4.
LED_PIN = 4 --pin D4 (led built-in)
SATUDETIK = 1000
SETENGAHDETIK = 500
gpio.mode(LED_PIN, gpio.OUTPUT)
function turnoff()
gpio.write(LED_PIN, gpio.HIGH)
end
function loop()
gpio.write(LED_PIN, gpio.LOW)
tmr.alarm(1, SETENGAHDETIK, 0, turnoff)
end
tmr.alarm(0, SATUDETIK, 1, loop)
jika aplikasi diatas dijalankan tanpa file app.lua, dan credentials.lua maka akan muncul pesan:
NodeMCU 0.9.5 build 20150318 powered by Lua 5.1.4
Tidak ada file credentials.lua!
Boot sebagai module standalone
You have 3 seconds to abort
Waiting...
app.lua tidak ditemukan, silakan buat app.lua sebagai auto executable.jika aplikasi diatas dijalankan tanpa file app.lua, tetapi file credentials.lua sudah disiapkan
NodeMCU 0.9.5 build 20150318 powered by Lua 5.1.4jika semua file diatas lengkap, maka akan nampak led built-in pada board berkedip perdetik.
Koneksi ke BOLT!Super4G-899A
trying 2 second(s)
trying 3 second(s)
WiFi connected
You have 3 seconds to abort
Waiting...
Running
app.lua tidak ditemukan atau terhapus.
Gambar 8. Script pada editor Esplor
Catatan:
Bagaimana kalau anda mendapatkan PANIC karena adanya kesalahan script pada app.lua yang juga menyebabkan sistem terjebak pada reboot tak terhingga?
Simple saja, pada saat proses reboot, jalankan perintah file.remove("app.lua"), secara otomatis akan menghapus app.lua, dan pada reboot berikutnya proses berhenti dengan pesan:
app.lua tidak ditemukan atau terhapus.
Tidak ada komentar:
Posting Komentar