ESP-8266/ESP32 NodeMCU Lua: азы программирования.

Тема в разделе "ESP8266, ESP32", создана пользователем ИгорьК, 25 июл 2017.

  1. ИгорьК

    ИгорьК Гуру

    Если необходимо подключаться к нескольким разным точкам доступа в разных местах, то:
    Код (Lua):
    do
        local aptb = {
            { 'AP_01', 'passwd_01' },
            { 'AP_02', 'passwd_02' },
            { 'AP_03', 'passwd_03' }
        }

        local cfg = {}
        cfg.ssid = ""
        cfg.pwd = ""
        cfg.save = true
        cfg.auto = true

        local function listap(t)
            wifi.setmode(wifi.STATION)
            for bssid, v in pairs(t) do
                local ssid = string.match(v, "([^,]+)")
                print(ssid)
                for k, v in pairs(aptb) do
                    if v[1] == ssid then
                        cfg.ssid = ssid
                        cfg.pwd = v[2]
                    end
                end
            end
            print('\n\nSet SSID as ' .. cfg.ssid)
            wifi.sta.config(cfg)
            wifi.sta.connect()
        end
        wifi.sta.getap({}, 1, listap)
    end
    -- Ответ на вопрос в личку.
     
    Последнее редактирование: 19 мар 2024
    obuhanoe нравится это.
  2. ИгорьК

    ИгорьК Гуру

    Если необходимо подключаться к нескольким разным точкам доступа в разных местах, и к тому же там есть одинаковые SSID с разным с разным уровнем сигнала, то:
    Код (Lua):
    do
        print ('Clear config is', wifi.sta.clearconfig())
        local aptb = {
            { 'AP_01', 'passwd_01' },
            { 'AP_02', 'passwd_02' },
            { 'AP_03', 'passwd_03' }
        }

        wifi.setmode(wifi.STATION)
        local cfg = {}
        cfg.ssid = ""
        cfg.pwd = ""
        cfg.save = true
        cfg.auto = true

        local myssidtb = {}
        local power = -100

        local function listap(t)
            for bssid, v in pairs(t) do
                local ssid, rssi = string.match(v, "([^,]+),([^,]+)")
                rssi = tonumber(rssi)
                print(ssid, bssid, rssi)
           
                for k, v in pairs(aptb) do
                    if v[1] == ssid then
                        if rssi > power then
                            myssidtb = {v[1], bssid, k}
                            power = rssi
                        end
                    end
                end
            end
            cfg.ssid = myssidtb[1]
            local nbssid = ""
            for k = 1, #myssidtb[2] do
                nbssid = nbssid .. string.upper(string.sub(myssidtb[2], k, k) )
            end
            cfg.bssid = nbssid
            cfg.pwd = aptb[myssidtb[3]][2]
            print('\n\nSet SSID as ' .. cfg.ssid.. ' and BSSID is '.. cfg.bssid.. 'and passwd is '..cfg.pwd )
            wifi.sta.config(cfg)
            wifi.sta.connect()
        end
        wifi.sta.getap({}, 1, listap)
    end
     
    Последнее редактирование: 19 мар 2024
  3. ИгорьК

    ИгорьК Гуру

    56. ESP32. Читаем SDS011 PM2.5:

    Код (Lua):

    uart.setup(2, 9600, 8, uart.PARITY_NONE, uart.STOPBITS_1, {tx = 17, rx = 16})
    uart.start(2)
    local d25 = 0
    local d10 = 0

    local gotRAW = {}
    local startUART = false

    local function ptrANSW()
        local crc = 0
        for i = 3, 8 do crc = crc  + gotRAW[i] end
        crc = bit.band(crc, 0xFF)
        -- print(string.format('\t\tcrc = %02X',crc))
        if crc ~= gotRAW[9] then print('Bad CRC'); gotRAW = {}; startUART = false return end

        d25 = ((gotRAW[4]*256 ) + gotRAW[3])/10
        d10 = ((gotRAW[6]*256 ) + gotRAW[5])/10
        print('\n\t\t\tPM2.5 = '..d25..' μg/m3,  PM10 = '.. d10..' μg/m3')

        gotRAW = {}
        startUART = false
        -- dofile('analizeMTRF.lua')
    end

    uart.on(2,"data",1,
        function(data)
            local bt = string.byte(data, 1)
            -- print(string.format("bt = %02X", bt))
            if startUART == false and bt ~= 0xAA then return
            elseif startUART == false then startUART = true end
            gotRAW[#gotRAW+1] = bt
            if gotRAW[2] and gotRAW[2] ~= 0xC0 then gotRAW = {}; startUART = false end
            if #gotRAW == 10 then ptrANSW() end
    end, 0)
     
     
    Последнее редактирование: 21 апр 2024
    serg3295 нравится это.
  4. obuhanoe

    obuhanoe Гик

    У Вас реализация для ESP8266, ниже для ESP32
    Код (Lua):
    do
        local l_wifi = {
             { 'AP_01', 'passwd_01' },
             { 'AP_02', 'passwd_02' }
        }
         -- стартуем Wifi: при дисконекте (callback произойдет)
        wifi.start()

         local scfg = {}  
         scfg.auto = true
         scfg.save = true
         scfg.ssid = ""
         scfg.pwd = ""

         local function connect_wifi(err, arr)
            if err then
              print(err)
            else
              wifi.mode(wifi.STATION, true)
              for i, ap in ipairs(arr) do
                print(i, ap.ssid, ap.channel,ap.bssid,ap.rssi,ap.auth,ap.bandwidth)
                for k, v in pairs(l_wifi) do
                    if v[1] == ap.ssid then
                        scfg.ssid = ap.ssid
                        scfg.pwd = v[2]
                    end
                end
              end
              print('\n\nSet SSID as ' .. scfg.ssid)
              wifi.sta.config(scfg, true)
              wifi.sta.connect()
            end
        end
       
         wifi.sta.scan({}, connect_wifi)

        wifi.sta.on("got_ip", function(ev, info)
            print("IP now:", info.ip)
        end)
     
        wifi.sta.on("disconnected", function(ev, info)    
               print("WIFI DISCONNECTED!!!")
        end)

        wifi.sta.on("connected", function(ev, info)
               print("WIFI "..info.ssid)
        end)
    end
     
    ИгорьК нравится это.