В первую очередь я использую следующее:
- ESP8266 (ESP12E)
- Прошивка по умолчанию от Git (построенная с использованием Linux со всеми соответствующими конфигурациями, согласно документации nodemcu)
- ESPlorer IDE
Моя конкретная проблема (я думаю) в том, что я не могу подключить свой MQTT-клиент к брокеру adafruit.io. Я думаю, что успешно подключился к Wi-Fi (подтверждается двумя отдельными SSID). Проблема возникает при создании клиента MQTT И подключении его к брокеру.
-- INITIAL DEFINES
-- defines
station_cfg={}
station_cfg.ssid = "<my wifi>" -- my personal ssid
station_cfg.pwd = "<wifi pwd>" -- my wifi pwd
--station_cfg.ssid = "IoT" -- campus' ssid
--station_cfg.pwd = "<wifi pwd>" -- campus' wifi pwd, I tried this first, then my home's. It
worked as it should
station_cfg.auto = false
station_cfg.save = false
mqtt_client_cfg = {}
mqtt_client_cfg.clientid = "alro" -- any ID
mqtt_client_cfg.keepalive = 120 -- went for the example's value
mqtt_client_cfg.username = "AlvaRocha" -- obviously a paranoic Ctrl+C/V from adafruit
mqtt_client_cfg.password = "aio_KO<safety edit>sXwbgtWCboCal" -- obviously a paranoic Ctrl+C/V
-- from adafruit
wifi.setmode(wifi.STATION)
wifi.sta.config(station_cfg)
wifi.sta.connect(connect) -- so far so good
iot_test = mqtt.Client(mqtt_client_cfg) -- open client, apparently OK
--iot_test:lwt("/lwt", "offline", 0, 0) -- this line is on examples, doesn't affect outputs
iot_test:on("connect", function(client) print("client connected") end)
iot_test:on("offline", function(client) print("client offline") end) -- this event is called
-- always (line 27)
function connect(params)
print('Connected to:', params.SSID) -- I understant from documentation that this is called IF
-- successfull wifi connection. Double checked with
-- campus' and home wifi
end
function disconnect(params)
print('Disconnected from:', params.SSID) -- ignore this function
end
function get_broker(mqtt_client)
mqtt_client:connect("io.adafruit.com", 1883, false, false, --Found this double 'false' on
--https://www.electronicwings.com/nodemcu/nodemcu-
--mqtt-client-with-esplorer-ide
function(client) -- CONNECTED CALLBACK
print('connected to broker')
--break
-- continue
client:subscribe("/Test", 0, function(client) print("Succesfull sub.") end) -- (LINE 42)
--break
--- continue
end,
function(_reason) -- OFFLINE CALLBACK not called (called if I don't write the 'double false'
-- from the example)
print('connection failed', reason)
end)
end
get_broker(iot_test) -- connect to broker
ПРОБЛЕМА: даже если вызывается линия 27, вызывается ПОДКЛЮЧЕННЫЙ ВЫЗОВ. Никакой последовательности.
ПРОБЛЕМА: Вывод строки 42: ПАНИКА: незащищенная ошибка при вызове Lua API (init.lua: 42: не подключен)
Надеясь, что комментарии будут полезны, я хочу заявить очевидное:
- Я впервые использую ESP8266, LUA и MQTT
- Я читаю столько, сколько мне удобно (читать недостаточно)
- Мне не нравится Arduino IDE (но я попробую, когда ответят)
Подозреваю следующее:
- Я где-то напортачил с конфигом прошивки.
- WiFi действительно не подключен.
- Я упускаю кое-что очевидное.
С уважением, Альваро Р.
wifi.sta.connect(callback)
- асинхронная функция, поскольку соединение занимает некоторое время: nodemcu.readthedocs.io/en / master / modules / wifi / # wifistaconnect. Лучше инициировать соединение MQTT только после успешного соединения Wi-Fi. - person Darius   schedule 14.03.2020