Почему wifi.sta nil даже после wifi.setmode(wifi.STATIONAP)?

РЕДАКТИРОВАТЬ: то, что я пытаюсь сделать, это по сути настроить станцию ​​после того, как софтпап работает TCP-сервер.

Я получаю ошибку паники для wifi.sta быть ноль, когда я звоню wifi.sta.config(station_cfg) даже после того, как я настроил его должным образом раньше.

Когда я делаю:

function connectHib()
   wifi.setmode(wifi.STATIONAP)
   [AP config here]
   station_cfg={}
   station_cfg.ssid = ""
   station_cfg.pwd = ""
   station_cfg.save = false
   station_cfg.auto = false   
   wifi.sta.config(station_cfg)
end

Работает нормально, но когда я его называю, тогда запускаю сервер с srv=net.createServer(net.TCP) и затем вызовите следующую функцию:

function validateSTA()
   station_cfg={}
   station_cfg.ssid = _G.wifi
   station_cfg.pwd = _G.senha
   station_cfg.save = false
   station_cfg.auto = false
   wifi.sta.config(station_cfg) -- this creates an error
   wifi.sta.connect()
end

Это дает мне ошибку ПАНИКИ на закомментированной строке. Я просто пытаюсь перенастроить только модуль STATION, а затем сказать ему подключиться, чтобы я смог проверить соединение.

Я использую:

NodeMCU custom build by frightanic.com
    branch: master
    commit: 67027c0d05f7e8d1b97104e05a3715f6ebc8d07f
    SSL: false
    modules: adc,file,gpio,net,node,pwm,sjson,tmr,uart,wifi
 build created on 2018-04-16 13:55
 powered by Lua 5.1.4 on SDK 2.2.1(cfd48f3)

Что меня беспокоит, так это то, что кажется, что он не был "объявлен" раньше, но работает с первой функцией... Я думал, Wi-Fi. был глобальным, как _G. переменные.

Это также работает, если я вызываю функции отдельно в командной строке ESPlorer на ESP без моего init.lua.

Я также попробовал прошивку отладки, и единственное, что я увидел, это всплывающее окно: wifi_event_monitor_handle_event_cb, которое вызывается каждые 4 секунды или около того.

Спасибо, ребята, любая помощь ценится, так как я застрял около недели.

1 ответ

Решение

Как и многие другие языки сценариев, у lua нет объявлений, есть только назначения. Вы должны выполнить проверки, что является wifiЗначение во время первого и второго звонков. Кажется, что сначала вы используете его в качестве таблицы, а во второй функции вы пытаетесь использовать его как строку в station_cfg.ssid = _G.wifi,

Или причина в том, что глобальные переменные не "как _G", они хранятся в _G,

Другие вопросы по тегам