• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Lua скрипты и модули

TRO

Member
Что получается, esp-01 - никакой пин нельзя подать на землю ДО подачи питания.
Тоже наступил на эти грабли. Встал вопрос, а какие другие ноги у чипа можно задействовать как выходы с NodeMCU чтобы с ними небыло никаких проблем. Нужно хотябы 2.
 

Victor

Administrator
Команда форума
Тоже наступил на эти грабли. Встал вопрос, а какие другие ноги у чипа можно задействовать как выходы с NodeMCU чтобы с ними небыло никаких проблем. Нужно хотябы 2.
Лучше покупать ESP-07 и ESP-12 для таких потребностей или (если уж очень надо) делать так

описание здесь
 
  • Like
Реакции: TRO

TRO

Member
Victor, видел я все это. Мне нужен ответ практика который использовал эти ноги с прошивкой NodeMCU, и чтобы они не влияли на запуск при подаче питания и не ребутили проц при работе. Чтобы небыло как с уже выведенными GPIO от которых в данной реализации толку нет. Мне нужно две безпроблемные ноги проца которые я припаяю к имеющимся выводам на гребенке(отрежу от них дорожки). А то паять лишний раз эту мелочь тот еще квест, минут 20 к ножке АЦП подпаивался.
 

Victor

Administrator
Команда форума
Victor, видел я все это. Мне нужен ответ практика который использовал эти ноги с прошивкой NodeMCU, и чтобы они не влияли на запуск при подаче питания и не ребутили проц при работе. Чтобы небыло как с уже выведенными GPIO от которых в данной реализации толку нет. Мне нужно две безпроблемные ноги проца которые я припаяю к имеющимся выводам на гребенке(отрежу от них дорожки). А то паять лишний раз эту мелочь тот еще квест, минут 20 к ножке АЦП подпаивался.
Мне только пришли ESP-07. Еще пока не запускал их.
 
  • Like
Реакции: TRO

TRO

Member
Понятно, судя по треку мои парочка ESP-03 уже в моем почтовом отделении меня ждут, прийдется наверно отложить ноль-первый и на них сначала поэкспериментировать. Жаль АЦП на них прийдется подпаивать опять же (когда заказвал еще не знал ни про АЦП ни про NodeMCU).
 
От практика...
ESP-07, NodeMCU последняя, index=1 это GPIO5. Работает на плюс на землю после нард после софт рестарта. Проверено неоднократно.
НОООООООООООООООООООООООООООООООО
На моем ESP-07 GPIO5 - это там где на плате написано GPIO4!!!!!!!!!!!!!!!!
Вероятно перепутано 4 и 5 , но GPIO4 не проверял...
 
  • Like
Реакции: TRO
Вдогонку к пред посту. САмый грамотный документ по поводу выводов (что можно что нельзя)
ESP8266_Module Application Design Guide.pdf
 
  • Like
Реакции: TRO

NeoroN

Member
Я вот искал как отправлять почту - чисто структуру заголовка. Нашол такой пример на www.esp8266.com

Код:
function gmail(subject,body)
   username = "base64username"
   password = "base64pwd"
   from="from@gmail.com"
   to="to@gmail.com"
   conn=net.createConnection(net.TCP, 1)
   conn:on("receive", function(conn, payload)
       print(payload)
       end)
  
   conn:on("disconnection", function(conn,payload)
        print("disconnect")
        conn:close()
   end)
  
   conn:on("connection", function(conn,payload)
   conn:send("EHLO\r\n");
   conn:send("AUTH LOGIN\r\n");
   conn:send(username.."\r\n");--username
   conn:send(password.."\r\n"); --password
   conn:send("MAIL FROM:<" .. from ..">\r\n");
   conn:send("RCPT TO:<" .. to .. ">\r\n");
   conn:send("DATA\r\n");
   conn:send("Subject:%s\r\n%s\r\n.",subject,body);
   conn:send("quit\r\n");
  
   end)
  
   conn:connect(465,"64.233.164.108")
   end)
end
 

SkyRzn

New member
Набросал модуль для получения данных от датчиков влажности/температуры SHT10. Должно работать на всей линейке SHT1x.
Код:
local moduleName = ...
local M = {}
_G[moduleName] = M

-- DHT1x SDA/SCL pins, defaults GPIO2/GPIO0
local sda = 4
local scl = 3

-- set SDA LOW
function dl()
   gpio.write(sda, gpio.LOW)
   gpio.mode(sda, gpio.OUTPUT)
end

-- set SDA HIGH
function dh()
   gpio.mode(sda, gpio.INPUT)
   gpio.write(sda, gpio.HIGH)
end

-- set SCL LOW
function cl()
   gpio.write(scl, gpio.LOW)
end

-- set SCL HIGH
function ch()
   gpio.write(scl, gpio.HIGH)
end

-- get SDA value
function dr()
   gpio.mode(sda, gpio.INPUT)
   return gpio.read(sda)
end

function wait()
   for i = 1, 100 do
     tmr.delay(10000)
     if dr() == gpio.LOW then
       return true
     end
   end
   return false
end

function read_byte()
   local val = 0
   for i = 0, 7 do
     ch()
     val = val * 2 + dr()
     cl()
   end
   return val
end

function write_byte(val)
   for i = 0, 7 do
     if bit.band(val, 2 ^ (7-i)) == 0 then
       dl()
     else
       dh()
     end
     ch(); cl()
   end
end

function read_cmd(cmd)
   dh() ch() dl() cl() ch() dh() cl() -- transmission start sequence

   write_byte(cmd)

   ch(); cl()

   if not wait() then
     return nil
   end

   dh()
   local val = read_byte()

   dh() dl() ch() cl() dh() -- ackhowledge

   val = val * 256 + read_byte()

   dh() ch() cl() -- skip crc
   return val
end

-- initialize bus
--parameters:
--d: sda
--l: scl
function M.init(d, l)
   if d ~= nil then
     sda = d
   end
   if l ~= nil then
     scl = l
   end
   gpio.mode(sda, gpio.INPUT)
   gpio.mode(scl, gpio.OUTPUT)
   print("SHT1x init done")
end

-- get temperature in raw format
function M.get_raw_temperature()
   return read_cmd(3)
end

-- get humidity in raw format
function M.get_raw_humidity()
   return read_cmd(5)
end

return M
Пример использования:
Код:
sht = require("sht1x")
sht.init(4, 3)
temp = sht.get_raw_temperature()
hum = sht.get_raw_humidity()
Был бы благодарен за советы по уменьшению потребления памяти. Пробовал обнулять переменную sht и запускать после collectgarbage(), но никакого эффекта не получил.
 

sevic

New member
Попробуйте переделать модуль в исполняемый lua файл, чтобы его можно было из основной программы выполнить через dofile(). Я тоже боролся с жором памяти после загрузки модуля d18b20.lua, переход на dofile помог радикально. При запуске файла можно ему передавать что мерять температуру или влажность, смотрите описание функции unpack, если не ошибаюсь. На выходе возвращать измеренное значение, основная программа его получит. Вариант конечно "костыль", но что делать если выгрузка модулей в прошивке кривовата. Я в итоге почти все операции раскидал по файлам, только так получилось "впихнуть невпихуемое", даже 4 КБ ещё осталось свободных при запуске того же измерения температуры.При таком подходе память надо держать свободной для запуска нужного файла и планировать программу так,чтобы запуски разных файлов не накладывались, а то ребутнется.
 
Последнее редактирование:

sevic

New member
А с датчиками dht1.. не будет работать Ваш модуль? sht дорогие нынче...
 

SkyRzn

New member
Попробуйте переделать модуль в исполняемый lua файл, чтобы его можно было из основной программы выполнить через dofile().
Спасибо большое, буду пробовать.

А с датчиками dht1.. не будет работать Ваш модуль? sht дорогие нынче...
Нет, у DHT другой протокол обмена. SHT использует I2C-подобный протокол, а у DHT протокол 1-wire.
В NodeMCU есть либа для работы с DHT22, надо только ее чуть-чуть переделать под DHT11. Вот здесь можно посмотреть различия в коде для разных датчиков. Или по даташитам глянуть.
Вообще, я бы не рекомендовал DHT. У меня было два таких датчика, оба не продержались и полугода, после чего начали всегда выдавать влажность 100%.
 

SkyRzn

New member
Нет, не помогло. Судя по node.heap(), память не возвращается.
Может это из-за старой прошивки (08.01.15), но на новой у меня флэш затирается после нескольких циклов работы-сна.
 

sevic

New member
Странно... Я когда перешел на dofile() память стала освобождаться практически полностью. Могу посоветовать следующие меры (знающие пусть поправят, у меня опыт маловат с ESP):
- проверить, не экспортирует ли исполняемый файл ничего (функции) в основной поток. Если так, они будут оставаться в памяти.
- тщательно остановить все таймеры, задействованные в модуле. Само собой, использовать разные таймеры в основной программе и в загружаемом файле.
- nil-ить переменные, обьявленные вне функций, стараться использовать переменные с обьявлением local
- после завершения файла позвать collectgarbage("collect"), но это скорее для самоуспокоения.
 

sevic

New member
Вот и чудненько. Кстати, нашел на странице http://www.esp8266.com/viewtopic.php?f=23&t=595&start=80 :
"Change log:
2015-02-13

  • add node.compile() api to compile lua text file into lua bytecode file.

  • this will reduce memory usage noticeably when require modules into NodeMCU.

  • raise internal LUA_BUFFERSIZE from 1024 to 4096.

  • lua require("mod") will load "mod.lc" file first if exist.

  • build latest pre_build bin." - звучит многообещающе, может теперь можно пользоваться модулями без костылей? Но вы говорите, последняя прошивка затирает flash, беда однако. А вы что-то пишете в память, или так, сама по себе слетает?
 
Сверху Снизу