Agar board IoT dapat dikendalikan dari luar melalui Android, padahal IoT board berada dibelakang firewall, berarti bahwa diperlukan suatu perantara diantara kedua perangkat. Dalam hal ini saya akan menggunakan Firebase Realtime Database sebagai sarana perantara tersebut.
Gambar 1. Firebase Database sebagai perantara
Dalam hal ini IoT board akan mengambil nilai request dari database Firebase, kemudian menentukan status led builtin berdasarkan nilai request (on/off), dan selanjutnya akan mengupdate nilai response sebagai konfirmasi bahwa request telah berhasil dilakukan.
Pengembangan aplikasi pada sisi Android akan menggunakan AppInventor yang berfungsi sebagai IDE yang bersifat Cloud yang memungkinkan anda melakukan pengembangan aplikasi Android tanpa menggunakan ADT.startup = true
request = false
position = "off"
database = "https://friendlychat-6ae71.firebaseio.com/"
nodeUpdate = "ledbuiltin.json"
dbSecret = "kia43oq8Nn76kTJQhLIshyRpSYDHoEwjGTI*****"
urlUpdate = database .. nodeUpdate .. "?auth=" .. dbSecret
-- initial payload
payload = "{\"request\":\"".. position .. "\",\"response\":\"".. position .. "\"}"
nodeRead = "ledbuiltin/request.json"
urlRead = database .. nodeRead .. "?auth=" .. dbSecret
function updateToFirebase()
if not request then --sentinel
request = true
http.request(urlUpdate,
"PATCH",
"Content-Type: application/json\r\n",
payload,
function(code, data)
if (code ~= 200) then
print("Failed : HTTP error code : " .. code)
request = false
else
-- stop alarm, mission succeed
tmr.stop(0)
print("Succeed : " .. code, data)
startup = false
request = false
end
end)
end
end
function led_builtin(position)
gpio.mode(4, gpio.OUTPUT)
if (position == "on") then
gpio.write(4, gpio.LOW) -- LED BUILTIN ON
else
gpio.write(4, gpio.HIGH) -- LED BUILTIN ON
end
end
function readfromFirebase()
if not startup then -- sentinel
if not request then -- sentinel
request = true
http.request(urlRead,
"GET",
"Content-Type: application/json\r\n",
nil,
function(code, data)
if (code ~= 200) then
print("Failed : HTTP error code : " .. code)
request = false
else
print("Succeed : " .. code, data)
slash = "\\"
newposition = string.gsub(string.gsub(data,slash,""),"\"","")
if position ~= newposition then
position = newposition
--update response payload
payload = "{\"response\":\"".. position .. "\"}"
led_builtin(position)
tmr.alarm(0,2000,1,updateToFirebase) -- dua detik berikutnya update status
end
request = false
end
end)
end
end
end
tmr.alarm(0,2000,1,updateToFirebase)
tmr.alarm(1,4000,1,readfromFirebase) -- setiap 4 detik
Gambar 2. Design Screen dan Component pada Aplikasi
Gambar 3. Block Code pada Aplikasi