Sabtu, 12 November 2016

Tutorial NodeMCU: ESP8266 sebagai Access Point (WeMos, Lua)

Tulisan ini saya buat setelah membutuhkan fungsi koneksi langsung dari WIFI smartphone ke board WeMos, setelah melakukan surfing, ternyata wifi pada board dapat diset sebagai  wifi.STATION, wifi.SOFTAP, wifi.STATIONAP atau wifi.NULLMODE.

Koding berikut akan mengaktifkan wifi sebagai STATIONAP, disertai dengan setting SSID dan PASSWORD, dan mencetak IP Address.

cfg={}
cfg.ssid="myssid"
cfg.pwd="mypassword" -- minimal 8 character, jika tidak maka AP tidak berpassword
cfg.auth=wifi.WPA_WPA2_PSK
-- set mode as stationAP
wifi.setmode(wifi.STATIONAP)
wifi.ap.config(cfg)
print("AP IP Address:" .. wifi.ap.getip()) 
 Koding berikut ini akan mengaktifkan fungsi DHCP server pada AP.

dhcp_config ={}
dhcp_config.start = "192.168.4.100"
pool_ipstart, pool_ipend = wifi.ap.dhcp.config(dhcp_config)
if wifi.ap.dhcp.start() then
    print("DHCP server started, pool addr from " .. pool_ipstart .. " to " .. pool_ipend .. "!")
else
    print("DHCP server failed!")
end
Karena diaktifkan dengan modus STATIONAP, berarti wifi pada board berfungsi sebagai AP sekaligus sebagai STATION (client), sehingga dimungkinkan untuk koneksi ke AP lain sebagai client.

-- Credentials
SSID = "BOLT!Super4G-899A"
PASSWORD = "********"

print("Koneksi ke " .. SSID)
wifi.sta.config(SSID, PASSWORD
Berikut ini adalah koding lengkap untuk implementasi sebagai init.lua

apconfig.lua
cfg={}
cfg.ssid="myssid"
cfg.pwd="mypassword"
cfg.auth=wifi.WPA_WPA2_PSK

dhcp_config ={}
dhcp_config.start = "192.168.4.100"
 credentials.lua
-- Credentials
SSID = "BOLT!Super4G-899A"
PASSWORD = "*******"
init.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 ditemukan, silakan buat app.lua sebagai auto executable.")
    else 
        file.close("app.lua")
        dofile("app.lua")
    end
end

if file.open("apconfig.lua") ~= nil then
    print("activate as access point")
    dofile("apconfig.lua")
    -- set mode as stationAP  
    wifi.setmode(wifi.STATIONAP)
    wifi.ap.config(cfg)
    print("AP IP Address:" .. wifi.ap.getip())   
    pool_ipstart, pool_ipend = wifi.ap.dhcp.config(dhcp_config)
    if wifi.ap.dhcp.start() then
        print("DHCP server started, pool addr from " .. pool_ipstart .. " to " .. pool_ipend .. "!")
    else
        print("DHCP server failed!")
    end
else
    -- default mode as station
    wifi.setmode(wifi.STATION)   
end

-- periksa keberadaan file credentials.lua yang mendefinisikan
-- 'SSID' and 'PASSWORD' wifi
if file.open("credentials.lua") == nil then
    -- bagian module standalone
    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.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("Client IP Address:" .. wifi.sta.getip())
            print("You have 3 seconds to abort")
            print("Waiting...")
            -- jalankan fungsi startup setelah 3 detik      
            tmr.alarm(0, 3000, 0, startup)
        end       
    end)
end

Tidak ada komentar:

Posting Komentar