Скрипт - это программа на языке Lua, которая интерпретируется внутри МК. Есть она же, но заранее скомпилированная. Это уже не скрипт.
Я создал снипет, выполнил в результате нету подключения Код (C++): wifi.setmode(wifi.STATION) -- установка режима wifi.sta.clearconfig() -- очистка от барахла local scfg={} -- таблица установок ржима scfg.auto = true -- входить и поддерживать сеть автоматически scfg.save = true -- запомнить эти установки во флэше scfg.ssid = 'AP_Home' -- название сетки scfg.pwd = 'superpassword'-- пароль сетки wifi.sta.config(scfg) -- конфигурируем сеть wifi.sta.connect() -- старт соединения -- через 15 секунд посмотрим что получилось: tmr.create():alarm(15000, tmr.ALARM_SINGLE, function() print('\n', wifi.sta.getip()) end) В логе Код (C++): file.format() format done. > file.format() ---------------------------- No files found. ---------------------------- > Total : 3260490 bytes Used : 0 bytes Remain: 3260490 bytes > wifi.setmode(wifi.STATION) -- установка режима > wifi.sta.clearconfig() -- очистка от барахла > local scfg={} -- таблица установок ржима > scfg.auto = true -- вход��ть и поддерживат�� сеть автоматиче��ки stdin:1: attempt to index global 'scfg' (a nil value) stack traceback: stdin:1: in main chunk > ave = true -- запомнить эти установки ��о флэше scfg.ssid = '12345678' -- название сетки scfg.pwd = '12345678'-- пароль сетки wifi.sta.config(scfg) -- конфигурируем сеть wifi.sta.connect() -- старт соединения -- через 15 се��унд посмотрим чт�� получилось: tmr.create():alarm(15000, tmr.ALARM_SINGLE, function() print('\n', wifi.sta.getip()) end) stdin:1: unexpected symbol near '�' > еще лога Код (C++): wifi.setmode(wifi.STATION) > wifi.sta.clearconfig() > local scfg={} > scfg.auto = true scfg.save = true stdin:1: unexpected symbol near '=' > scfg.ssid = '12345678' stdin:1: attempt to index global 'scfg' (a nil value) stack traceback: stdin:1: in main chunk > scfg.pwd = '12345678' wifi.sta.config(scfg) wifi.sta.connect() tmr.create():alarm(15000, tmr.ALARM_SINGLE, function() print('\n', wifi.sta.getip()) end) stdin:1: attempt to index global 'scfg' (a nil value) stack traceback: stdin:1: in main chunk > wifi.setmode(wifi.STATION) > wifi.sta.clearconfig() > local scfg={} > scfg.auto = true stdin:1: attempt to index global 'scfg' (a nil value) stack traceback: stdin:1: in main chunk > scfg.save = true scfg.ssid = '12345678' scfg.pwd = '12345678' wifi.sta.config(scfg) stdin:1: unexpected symbol near '=' > wifi.sta.connect() > tmr.create():alarm(15000, tmr.ALARM_SINGLE, function() print('\n', wifi.sta.getip()) end) > nil
Значит идем сюда: http://www.emc-problem.net/проекты/эмс-беспроводных-сетей/как-подключить-отладочную-плату-nodemcu-esp8266/ И медленно делаем все три урока. Возможно у вас старая старая прошивка и плату надо перепрошить. Как это сделать - там есть.
Хотя, начните читать что пишет интерпретатор: Код (C++): scfg.save = true stdin:1: unexpected symbol near '=' > scfg.ssid = '12345678' А пишет он что "неожиданный символ рядом со знаком равенства". И таких надписей туева хуча. Сможете сами сделать выводы? Код (C++): wifi.setmode(wifi.STATION) scfg={} scfg.ssid="YOURS_SSID" scfg.pwd="SUPERPASSWORD" scfg.auto=true scfg.save=true wifi.sta.config(scfg) wifi.sta.connect()
Я сделал все из этой статьи Дрова переустановил, Джаву обновил загрузил с начала этот кусок кода не заработало Код (C++): wifi.setmode(wifi.STATION) scfg={} scfg.ssid="YOURS_SSID" scfg.pwd="SUPERPASSWORD" scfg.auto=true scfg.save=true wifi.sta.config(scfg) wifi.sta.connect() Потом обновил загрузчик через flasher, на родную с гитхаба, ESPlorer несмог определить даже версию lua Снес ее, собрал свою, загрузил код для мигания встроенным светодиодом и он начал мигать (хотя раньше он отказывался работать вообще) Код (C++): lighton=0 pin=4 gpio.mode(pin,gpio.OUTPUT) tmr.alarm(1,500,1,function() if lighton==0 then lighton=1 gpio.write(pin,gpio.HIGH) else lighton=0 gpio.write(pin,gpio.LOW) end end) Далее запустил снипет Код (C++): wifi.setmode(wifi.STATION) scfg={} scfg.ssid="YOURS_SSID" scfg.pwd="SUPERPASSWORD" scfg.auto=true scfg.save=true wifi.sta.config(scfg) wifi.sta.connect()
И снова нет конекта к WI-FI Код (C++): wifi.setmode(wifi.STATION) > scfg={} > scfg.ssid="12345678" > scfg.pwd="12345678" > scfg.auto=true > scfg.save=true > wifi.sta.config(scfg) > wifi.sta.connect() > tmr.create():alarm(15000, tmr.ALARM_SINGLE, function() print('\n', wifi.sta.getip()) end) > nil
Ну, не выдает ошибок и мигает диодом - уже хорошо. А теперь перегрузите плату и выполните код: Код (Lua): do wifi.setmode(wifi.STATION) function listap(t) for k,v in pairs(t) do print(k.." : "..v) end end wifi.sta.getap(listap) end
Где мой косяк? Спойлер: Лог wifi.setmode(wifi.STATION) > scfg={} > scfg.ssid="12345678" > scfg.pwd="12345678" > scfg.auto=true > scfg.save=true > wifi.sta.config(scfg) > wifi.sta.connect() > tmr.create():alarm(15000, tmr.ALARM_SINGLE, function() print('\n', wifi.sta.getip()) end) > nil file.remove("getwifi.lua"); > file.open("getwifi.lua","w+"); > w = file.writeline > w([==[]==]); > w([==[-- При загрузке любого модуля ему передается]==]); > w([==[-- единственный параметр - его имя.]==]); > w([==[-- Имя модуля ловится так:]==]); > w([==[local modn = ...]==]); > w([==[print("Got name", modn)]==]); > w([==[-- Локальная таблица]==]); > w([==[local M = {}]==]); > w([==[-- Эта таблица состоит из одной функции]==]); > w([==[-- которой передается callback - то]==]); > w([==[-- что надо будет сделать после входа в сетку]==]); > w([==[M.getwifi = function(call)]==]); > w([==[ -- есть ли сетка?]==]); > w([==[ local ip = (wifi.sta.getip())]==]); > w([==[ -- функция выполнит callback и]==]); > w([==[ -- выгрузит модуль из памяти]==]); > w([==[ local killall = function()]==]); > w([==[ -- выполнение callback]==]); > w([==[ if call then call() end]==]); > w([==[ -- самоуничтожение модуля]==]); > w([==[ package.loaded[modn] = nil]==]); > w([==[ end]==]); > w([==[]==]); > w([==[ -- если мы не в сетке]==]); > w([==[ if not ip then]==]); > w([==[ -- создаем СОБЫТИЕ - постоянный таймер на 5 секунд]==]); > w([==[ tmr.create():alarm(5000, 1, function(t)]==]); > w([==[ -- узнаем есть ли сетка]==]); > w([==[ ip = (wifi.sta.getip())]==]); > w([==[ print("ip now", ip)]==]); > w([==[ -- если сеть]==]); > w([==[ if ip then]==]); > w([==[ -- останавливаем таймер]==]); > w([==[ tmr.stop(t)]==]); > w([==[ -- убиваем таймер]==]); > w([==[ tmr.unregister(t)]==]); > w([==[ -- убиваем переменную, что содержит таймер]==]); > w([==[ t = nil]==]); > w([==[ -- выполняем что надо]==]); > w([==[ killall()]==]); > w([==[ end]==]); > w([==[ end)]==]); > w([==[ -- событие обработки соединения создано -]==]); > w([==[ -- начинаем само соединение]==]); > w([==[ wifi.sta.connect()]==]); > w([==[ -- ну а если в мы в сетке]==]); > w([==[ else]==]); > w([==[ -- выполняем что надо]==]); > w([==[ killall()]==]); > w([==[ end]==]); > w([==[end]==]); > w([==[return M]==]); > file.close(); > dofile("getwifi.lua"); Got name nil > ---------------------------- getwifi.lua : 1463 bytes ---------------------------- Total file(s) : 1 Total size : 1463 bytes Total : 3260490 bytes Used : 1757 bytes Remain: 3258733 bytes > dofile("getwifi.lua") Got name nil > do -- загрузка модуля wf = require("getwifi") -- готовим реакцию на событие: что будет, когда появится сеть? А вот что: -- callback функция, которая выполняется после входа в сеть local call = function() print("Yes! It Works!") -- убиваем переменную, что содержала модуль wf = nil print("Kill Module, wf = ", wf) end -- вызываем функцию из модуля и передаем ей callback wf.getwifi(call) end Got name getwifi > ip now nil ip now nil ip now nil ip now nil ip now nil ip now nil ip now nil ip now nil ip now nil
И потом - все пояснения на русском в модуль не пихайте, это только в учебных целях. Я же не буду и чистый код делать и пояснить его еще раз. При копировании кода с сайта амперки часто проскакивают невидимые символы, на которые есплорер ругается, как в первом случае Тогда код надо чистить руками.
Мой kv9 Код (C++): wifi.setmode(wifi.STATION) > scfg={} > scfg.ssid="kv9" > scfg.pwd="12345678" > scfg.auto=true > scfg.save=true > wifi.sta.config(scfg) > wifi.sta.connect() > tmr.create():alarm(15000, tmr.ALARM_SINGLE, function() print('\n', wifi.sta.getip()) end) > nil do wifi.setmode(wifi.STATION) function listap(t) for k,v in pairs(t) do print(k.." : "..v) end end wifi.sta.getap(listap) end > HUAWEI-uTN5 kv14 kv24 DIR-300 MTSRouter-21BB39 MTSRouter-8D3D22 kv3 HUAWEI-wfLH HUAWEI-fBAg Kv9 MTSRouter-9A75D2 IlviliterY MTSRouter-828EAE MTSRouter MTSRouter-017960
Вручную проверяйте наличие сети Код (C++): tmr.create():alarm(25000, tmr.ALARM_SINGLE, function() print('\n', wifi.sta.getip()) end) Время - 25 секунд. Может для вас дольше нужно время соединения.
блин, и из за этой фигни я 4 дня потерял, просто ппц, 1000 извенений) нет, мой косяк имя сетки Kv9 у меня kv9 исправил, все заработало