Обсуждение NodeMCU custom builds - онлайн конструктор прошивок

Gooman

New member
Подскажите, пожалуйста. На этом сайте генерирую прошивку с ветки master, прошивается без проблем. При подсоединении в esplorer пишет следующую версию:
Код:
NodeMCU 0.9.5 build 20150318  powered by Lua 5.1.4
Однако у них на github версия прошивки уже есть 2.0.0. Что я делаю не так?
 

Gooman

New member
Я разобрался. В ESP Flasher в адрес 0x0 писалась какая-то стандартная прошивка ESP Flasher. Заменил ее на свою, и все пока что работает.
 

Tantrum

New member
Добрый вечер, уважаемые! Уже не первый день мучаюсь с новой прошивкой nodemcu. Зашивал вместе с сгенерированной прошивкой и файл esp_init_data_default.bin по адресу 0x3FC000, модуль определяется в ESPlorer, даже что-то работает. При первой прошивке скрипта выдает
Warning, deprecated API! Argument style station configuration is replaced by table style station configuration. It will be removed in the next version. See documentation for details.
При следующей прошивке, в попытках поднять банальный HTTP сервер, выдает ошибку
out of memory
И, соответсвенно, ничего не работает.
(Единственно, адекватно работает rtc.time, DHT11, DS18B20 не работают)
Пробовал прошить так, как рекомендует nikolz (вторая страница ветки). Результат, увы тот же.
Подскажите, пожалуйста, почему так происходит?
 
Последнее редактирование:

nikolz

Well-known member
Добрый вечер, уважаемые! Уже не первый день мучаюсь с новой прошивкой nodemcu. Зашивал вместе с сгенерированной прошивкой и файл esp_init_data_default.bin по адресу 0x3FC000, модуль определяется в ESPlorer, даже что-то работает. При первой прошивке скрипта выдает
Warning, deprecated API! Argument style station configuration is replaced by table style station configuration. It will be removed in the next version. See documentation for details.
При следующей прошивке, в попытках поднять банальный HTTP сервер, выдает ошибку
out of memory
И, соответсвенно, ничего не работает.
(Единственно, адекватно работает rtc.time, DHT11, DS18B20 не работают)
Пробовал прошить так, как рекомендует nikolz (вторая страница ветки). Результат, увы тот же.
Подскажите, пожалуйста, почему так происходит?
Не указали какой ESP.
Предположу, что не правильно определили объем flash и указали адрес прошивки esp_init_data_default.bin
 

nikolz

Well-known member
Вот такая у меня плата, вроде как ESP-12E. Адрес 0x3FC000 для 4Мб.
какая версия NODEMCU
Если NodeMCU 0.9.5, то esp_init_data_default.bin не надо.
------------------------
Попробуйте для начала записать эту версию, так как она пишется просто и работает стабильно.
Потом возьмите на более поздних SDK.
 

Tantrum

New member
Попробуйте для начала записать эту версию, так как она пишется просто и работает стабильно.
Потом возьмите на более поздних SDK.
У меня до этого была версия 0.9.5, но после того как пины не работали на вход (остальное всё работало), я решил обновить прошивку.
nodemcu-build.com генерирует 2.1.0 прошивку.
 

nikolz

Well-known member
У меня до этого была версия 0.9.5, но после того как пины не работали на вход (остальное всё работало), я решил обновить прошивку.
nodemcu-build.com генерирует 2.1.0 прошивку.
Т е Вы пишите ее и esp_init_data_default.bin с помощь NODEMCUFIRMWARE programmer ( наиболее надежный загрузчик), а потом запускаете ESPlorer?
Что пишет eSPlorer?
Возможно у Вас esp_init_data_default.bin старый. Сгенерируйте его с помощью ESPRESSIF DOUWNLOAD TOOLS или найдите который соответсвует SDK 2.1.0
 

Tantrum

New member
Т е Вы пишите ее и esp_init_data_default.bin с помощь NODEMCUFIRMWARE programmer ( наиболее надежный загрузчик), а потом запускаете ESPlorer?
Что пишет eSPlorer?
Да, именно так.
ESPlorer пишет (скорость 115200)

NodeMCU custom build by frightanic.com
branch: master
commit: c8ac5cfb912ff206b03dd7c60ffbb2dafb83fe5e
SSL: false
modules: adc,dht,enduser_setup,file,gpio,http,i2c,mqtt,net,node,ow,pwm,rtcfifo,rtcmem,rtctime,sntp,spi,tmr,uart,wifi,ws2812
build built on: 2017-07-29 11:56
powered by Lua 5.1.4 on SDK 2.1.0(116b762)
lua: cannot open init.lua


esp_init_data_default.bin новый (2.1.0)
 

nikolz

Well-known member
Да, именно так.
ESPlorer пишет (скорость 115200)

NodeMCU custom build by frightanic.com
branch: master
commit: c8ac5cfb912ff206b03dd7c60ffbb2dafb83fe5e
SSL: false
modules: adc,dht,enduser_setup,file,gpio,http,i2c,mqtt,net,node,ow,pwm,rtcfifo,rtcmem,rtctime,sntp,spi,tmr,uart,wifi,ws2812
build built on: 2017-07-29 11:56
powered by Lua 5.1.4 on SDK 2.1.0(116b762)
lua: cannot open init.lua


esp_init_data_default.bin новый (2.1.0)
Т е все нормально.
в чем проблема?
 

Tantrum

New member
в чем проблема?
ESPlorer:
web.lua:6: out of memory
stack traceback:
[C]: in function 'listen'
web.lua:6: in main chunk
[C]: in function 'dofile'
stdin:1: in main chunk
>
При этом код lua:

wifi.setmode(wifi.STATION)
wifi.sta.config("SSID","password")
print(wifi.sta.getip())

srv=net.createServer(net.TCP)
srv:listen(80,function(conn)
conn:eek:n("receive",function(conn,payload)
--print(payload)
conn:send("<h1> Hello, NodeMcu </h1>")
end)
end)

Не взирая на эту ошибку, сервер таки иногда создается, но явно не адекватная работа прошивки.
 

nikolz

Well-known member
ESPlorer:
web.lua:6: out of memory
stack traceback:
[C]: in function 'listen'
web.lua:6: in main chunk
[C]: in function 'dofile'
stdin:1: in main chunk
>
При этом код lua:

wifi.setmode(wifi.STATION)
wifi.sta.config("SSID","password")
print(wifi.sta.getip())

srv=net.createServer(net.TCP)
srv:listen(80,function(conn)
conn:eek:n("receive",function(conn,payload)
--print(payload)
conn:send("<h1> Hello, NodeMcu </h1>")
end)
end)

Не взирая на эту ошибку, сервер таки иногда создается, но явно не адекватная работа прошивки.
это вся программа?
-----------------
Полагаю, что у Вас ошибка в алгоритме программы на луа.
Полагаю у вас многократно вызывается либо соединение либо создание и это забивает память
Возможно это связано с тем что нет соединения с роутером или еще оно не установлено.
В какой-то момент ее не хватает он вам пишет
------------------
Для контроля поставьте печать свободной памяти
 

Tantrum

New member
это вся программа?
-----------------
Полагаю, что у Вас ошибка в алгоритме программы на луа.
Полагаю у вас многократно вызывается либо соединение либо создание и это забивает память
Возможно это связано с тем что нет соединения с роутером или еще оно не установлено.
В какой-то момент ее не хватает он вам пишет
Да, это вся программа. Специально брал из Example на оф. сайте.

Для контроля поставьте печать свободной памяти
А это что за команда?)
 

nikolz

Well-known member
Да, это вся программа. Специально брал из Example на оф. сайте.
А это что за команда?)
тогда это огрызок.
------------------------------
1) Вам надо изучить язык луа и встроенные функции.
---------------------
2) В программе надо проверить наличие соединения с роутером, прежде чем что-то отсылать.
3) В программе надо поставить колбек по таймеру который будет периодически проверять готовность соединения и отсылать что-то если оно есть.
Кроме того, Ваш скрипт исполняется один раз
и после этого VMLua бездействует если не получит ответ по WIFI.
---------------------
В сообщении, которое вам пишет nodemcu указаны строки скрипта где возникли ошибки.
=======================
В каталоге исходников nodemcu-firmware-dev есть каталог с примерами lua_examples
посмотрите их.
Вот один из примеров из этого каталога файл "send_text_message.lua"
Код:
--[[
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
documentation files (the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge, publish, distribute,
sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
]]--

-- Your access point's SSID and password
local SSID = "xxxxxx"
local SSID_PASSWORD = "xxxxxx"

-- configure ESP as a station
wifi.setmode(wifi.STATION)
wifi.sta.config(SSID,SSID_PASSWORD)
wifi.sta.autoconnect(1)

local TWILIO_ACCOUNT_SID = "xxxxxx"
local TWILIO_TOKEN = "xxxxxx"

local HOST = "iot-https-relay.appspot.com" -- visit http://iot-https-relay.appspot.com/ to learn more about this service
                                           -- Please be sure to understand the security issues of using this relay app and use at your own risk.
local URI = "/twilio/Messages.json"

function build_post_request(host, uri, data_table)

     local data = ""
    
     for param,value in pairs(data_table) do
          data = data .. param.."="..value.."&"
     end

     request = "POST "..uri.." HTTP/1.1\r\n"..
     "Host: "..host.."\r\n"..
     "Connection: close\r\n"..
     "Content-Type: application/x-www-form-urlencoded\r\n"..
     "Content-Length: "..string.len(data).."\r\n"..
     "\r\n"..
     data

     print(request)
    
     return request
end

local function display(sck,response)
     print(response)
end

-- When using send_sms: the "from" number HAS to be your twilio number.
-- If you have a free twilio account the "to" number HAS to be your twilio verified number.
local function send_sms(from,to,body)

     local data = {
      sid = TWILIO_ACCOUNT_SID,
      token = TWILIO_TOKEN,
      Body = string.gsub(body," ","+"),
      From = from,
      To = to
     }
    
     socket = net.createConnection(net.TCP,0)
     socket:on("receive",display)
     socket:connect(80,HOST)

     socket:on("connection",function(sck)
      
          local post_request = build_post_request(HOST,URI,data)
          sck:send(post_request)
     end)    
end

function check_wifi()
local ip = wifi.sta.getip()

if(ip==nil) then
   print("Connecting...")
else
  tmr.stop(0)
  print("Connected to AP!")
  print(ip)
     -- send a text message with the text "Hello from your esp8266"
  send_sms("15558889944","15559998845","Hello from your ESP8266")
end
end

tmr.alarm(0,7000,1,check_wifi)
Предлагаю изучить его.
 

Tantrum

New member
Спасибо.
Пытался воплотить ваши рекомендации в жизнь, но сходу возникают проблемы. Работает через раз: либо всё как и нужно, либо после создания сервера модуль ресетится.
Код:
  1. Код:
    local SSID = "SSID"
    local SSID_PASSWORD = "SSID_PASSWORD"
    wifi.setmode(wifi.STATION)
    wifi.sta.config(SSID,SSID_PASSWORD)
    wifi.sta.autoconnect(1)
    local function server()
    srv=net.createServer(net.TCP)
    srv:listen(80,function(conn)
        conn:on("receive",function(conn,payload)
        print(payload)
        conn:send("<h1> Hello, NodeMcu test3</h1>")
        end)
    end)   
    end
    function check_wifi()
    local ip = wifi.sta.getip()
    if(ip==nil) then
       print("Connecting...")
    else
      tmr.stop(0)
      print("Connected to AP!")
      print(ip)
      server()
    end
    end
    tmr.alarm(0,1000,1,check_wifi)
    Примерно такое пишет и после сразу же ресетится:

    Connecting...
    Connected to AP!
    192.168.1.100
    PANIC: unprotected error in call to Lua API (temp_ds18b20.lua:12: out of memory)
 

nikolz

Well-known member
Спасибо.
Пытался воплотить ваши рекомендации в жизнь, но сходу возникают проблемы. Работает через раз: либо всё как и нужно, либо после создания сервера модуль ресетится.
Из сообщения у Вас ошибка в модуле temp_ds18b20.lua двенадцатая строка.
А в приведенной Вами программе этого модуля нет.
 

nikolz

Well-known member
попробуйте так:
Код:
local SSID = "SSID"
local SSID_PASSWORD = "SSID_PASSWORD"
wifi.setmode(wifi.STATION)
wifi.sta.config(SSID,SSID_PASSWORD)
wifi.sta.autoconnect(1)
--------------------------------
while ip==nil do ip=wifi.sta.getip()
   print("Connecting...")
end
print("ip="..tostring(ip))
------------------------------------
srv=net.createServer(net.TCP)
srv:listen(80,function(conn)
    conn:on("receive",function(conn,payload)
    print(payload)
conn:send("<h1> Hello, NodeMcu test3</h1>")
    end)
end)
------------------------
function check_wifi()
print("Connected to AP!"..tostring(ip))
end
tmr.alarm(0,1000,1,check_wifi)
 
Сверху Снизу