• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

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

Alanen

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

Код:
function gmail(subject,body)
   us
Немного поправил ваш код:

1)
Если прошивка скомпилирована с cripto то можно сделать так (на время тестирования)
Код:
username = crypto.toBase64("mail plain text")
password = crypto.toBase64("pass plain text")
После
Код:
conn:connect(465,"64.233.164.108") 
   end)
- лишний (строка 30 )

Функция
Код:
net.createConnection(net.TCP, 1)
Warning, deprecated API! net.createConnection with secure flag.
вместо неё надо писать
Код:
 conn=tls.createConnection()
А это вот отсыльщик который мне удалось найти на просторах, немного поправил его, но что-то с логином еще надо пошаманить (никак руки не дойдут) может кто-то все-же заставит его работать.

gamiltest.lua :

Код:
 -- Modifications for GMAIL by Andreas "Andy" Reischle: www.AReResearch.net 
 -- http://www.areresearch.net/2016/04/how-to-send-emails-via-gmail-from.html

-- configure ESP as a station 
local SSID = "AP name" 
local SSID_PASSWORD = "AP pass" 


wifi.setmode(wifi.STATION) 
wifi.sta.config{ssid=SSID, pwd=SSID_PASSWORD}
wifi.sta.autoconnect(1) 


-- The email and password from the account you want to send emails from
--If you have Firmware with crypto module 
local MY_EMAIL = crypto.toBase64("mailfrom@gmail.com")
local EMAIL_PASSWORD = crypto.toBase64("mailpass")
--or wo cripto , must be ecoded to base 64 somewere else
--local MY_EMAIL = "base64login"
--local EMAIL_PASSWORD = "base64password"

-- The SMTP server and port of your email provider.
-- If you don't know it google [my email provider] SMTP settings
local SMTP_SERVER = "smtp.gmail.com"
local SMTP_PORT = "465" --local SMTP_PORT = "993" --local SMTP_PORT = "587"

-- The account you want to send email to
local mail_to = "mailfrom@blabla.com"

 -- These are global variables. Don't change their values 
 -- they will be changed in the functions below 
 local email_subject = "" 
 local email_body = "" 
 local count = 0 
 local conn = nil -- will be used as socket to email server 
 -- The display() function will be used to print the SMTP server's response 
 function display(conn,response) 
    print("Got a response: ") 
    print(response) 
 end 
 -- The do_next() function is used to send the SMTP commands to the SMTP server in the required sequence. 
 -- I was going to use socket callbacks but the code would not run callbacks after the first 3. 
 function do_next() 
       if(count == 0)then 
         count = count+1 
         local IP_ADDRESS = wifi.sta.getip() 
         print ("Send my IP: " .. IP_ADDRESS) 
         --conn:send("EHLO\r\n"); 
         conn:send("HELO "..IP_ADDRESS.."\r\n") 
       elseif(count==1) then 
         count = count+1 
         conn:send("AUTH LOGIN\r\n") 
       elseif(count == 2) then 
         count = count + 1 
         conn:send(MY_EMAIL.."\r\n") 
       elseif(count == 3) then 
         conn:send(EMAIL_PASSWORD.."\r\n") 
         count = count + 1 
       elseif(count==4) then 
         count = count+1 
         conn:send("MAIL FROM:<" .. MY_EMAIL .. ">\r\n") 
       elseif(count==5) then 
         count = count+1 
         conn:send("RCPT TO:<" .. mail_to ..">\r\n") 
       elseif(count==6) then 
         count = count+1 
         conn:send("DATA\r\n") 
       elseif(count==7) then 
         count = count+1 
         local message = string.gsub( 
         "From: \"".. MY_EMAIL .."\"<"..MY_EMAIL..">\r\n" .. 
         "To: \"".. mail_to .. "\"<".. mail_to..">\r\n".. 
         "Subject: ".. email_subject .. "\r\n\r\n" .. 
         email_body,"\r\n.\r\n","") 
         conn:send(message.."\r\n.\r\n") 
       elseif(count==8) then 
         count = count+1 
          tmr.stop(0) 
          conn:send("QUIT\r\n") 
       else 
         conn:close() 
       end 
 end 
 -- The connectted() function is executed when the SMTP socket is connected to the SMTP server. 
 -- This function will create a timer to call the do_next function which will send the SMTP commands 
 -- in sequence, one by one, every 5000 seconds.   
 -- You can change the time to be smaller if that works for you, I used 5000ms just because. 
 function connected(conn) 
   print("Connected - Starting Timer") 
   tmr.alarm(0,2000,1,do_next) 
 end 
 -- @name send_email 
 -- @description Will initiated a socket connection to the SMTP server and trigger the connected() function 
 -- @param subject The email's subject 
 -- @param body The email's body 
 function send_email(subject,body) 
    count = 0 
    email_subject = subject 
    email_body = body 
    print ("Open Connection") 
    --conn = net.createConnection(net.TCP,1) 
    conn = tls.createConnection()
    conn:on("connection",connected) 
    conn:on("receive",display) 
    conn:connect(SMTP_PORT,SMTP_SERVER) 
 end 
 -- Send an email 
 print ("Sending started...") 
 send_email("ESP8266-GMailSender","Hi there!")
 

alexch25

New member
У кого-нибудь есть скрипт на lua для датчика напряжения и тока на ina219?
 

Tantrum

New member
Недавно библиотека ds18b20 перекочевала из C modules в Lua modules. Кто знает как с ней теперь работать? Если в наглую пытаться залить файл ds18b20.lua в esp8266, выводится сообщение "недостаточно памяти"
 

LordMazy

New member
посмотрите тут:
Вы, конечно правы но, мне кажется, лучше начинать с начала. И в сборке NodeMCU должна быть поддержка 1-wire. Ошибка, про которую писал Tantrum появляется на дефолтной сборке ESP8266Flasher версии 0.9, так что нужна либо собственная, либо собранная в облаке.
 

LordMazy

New member
Приветствую форумчане, всех с прошедшими праздниками. Выдались длинные выходные и что-бы себя занять запилил два сканера, для шин 1-wire и i2c. Протестировал на ESP-01S - работает, скрипты заливаются через ESPlorer. 1-wire шину проверял с далласовским датчиком температуры DS18B20. i2c шину с LCD дисплеем. Кому интересно скрипты в архиве ;)
 

Вложения

INTRET

New member
Доброго времени всем
До недавних пор работал на сборке 2.2.0-master_20180608 , цели минималистичные и решения соответственные.
Вздумалось прикрутить DSS1306 ну и заодно сборку сменить 3.0.0-release_20210201.
Начал с проверки работоспособности старого кода на новой сборке не добавляя пока модуль 8ug2 и используя только те что исползовались с предыдущей сборкой.
Обнаружилось что таймеры сменились ну да ладно.
Подозрительно стало меньше памяти при одинаковом числе и типе используемых модулей.
Отказывается напрочь работать телнет сервер , при подключении контроллер ре стартует.
Код телнет сервера такой.

Код:
s=net.createServer(net.TCP)
s:listen(23,function(c)
   con_std = c
   function s_output(str)
      if(con_std~=nil)
         then
         con_std:send(" \r")
         con_std:send(str)
      end
   end
   node.output(s_output, 0)
   c:on("receive",function(c,l)
    node.input(l)
   end)
   c:on("disconnection",function(c)
      con_std = nil
      node.output(nil)
   end)
   print(("Connected to Node_T124 build 310321. (%d mem free, %s)"):format(node.heap(), wifi.sta.getip()))
end)
это несколько меньше чем присутствующий в сборке telnet.lua который хоть и работает, но при обращении к ds18b20 вызывает переполнение памяти.
Кроме того даже если б он не вызывал переполнение - текс в хипер терминал он выводит с какой-то непонятной табуляцией примерно так

Код:
                                                                              P1
: OFF
     P2: OFF
            LT: 19
                  HT: 20
                        (16200 mem free, 10.0.1.124)
                                                    19384
                                                         > Boiler Idle
                                                                      GMT: 2021/
04/01 05:58:37
              Uptime: 0395 Sec
                              T124: 99.123400
                                             P1: OFF
                                                    P2: OFF
                                                           LT: 19
                                                                 HT: 20
                                                                       (16200

в то время как приведённый код сервера на старом билде выводит его нормально и работает сколь угодно долго минимум 1час (раз в час делаю рестарт на всякий случай)

Код:
Connected to Node_T123 build 090321. (23896 mem free, 192.168.147.123)
Boiler Idle
GMT: 2021/04/01 10:26:40
Uptime: 0725 Sec
T123: 16.937500
P1: OFF
P2: OFF
LT: 6
HT: 7
(11216 mem free, 192.168.147.123)


В прикреплении весь код поделки.
Пожалуйста, подскажите кто может - что не нравится сборке 3.0.0 в старом коде нет.сервера?
 

Вложения

LordMazy

New member
Вздумалось прикрутить DSS1306 ну и заодно сборку сменить
Ну кто же так делает?
Новая сборка прошивки для проекта - это кладезь подводных камней... Как вариант - откатитесь на стабильную старую прошивку, проверьте DSS1306, а уж потом экскременты с новыми версиями.
УПС, тема притухла, так что Вы, скорее всего, один на один со своими эксперементами.
...
INTRET написал(а):
Отказывается напрочь работать телнет сервер , при подключении контроллер ре стартует.
А на что жалуется перед ребутом, может тут и есть корень проблемы?
 

INTRET

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

А на что жалуется перед ребутом, может тут и есть корень проблемы?

Ну я согласен, просто ожидал что камней этих будет минимум соразмерно с простотой моего проекта.
Также ожидал что если соберу 3.00 с теми же модулями 1 в 1 как в старой 2.2.0 и не меняя пока код протестирую старый и если всё будет нормально тогда начу эксперименты с добавлением дисплея итд...., но до этого дело пока не дошло.
А куда можно перепостить вопрос чтоб не быть тут один на один? кроме того как минимум вы тут уже хороше :)

дело в том что стандартных жалоб как если ошибки в коде таких нет, просто перегружается с козом и бут мод номерами как только я пытаюсь подключиться терминалом на порт 23

Код:
Boiler Idle
GMT: 2021/04/01 13:20:46
Uptime: 0405 Sec
T124: 21.812500
P1: OFF
P2: OFF
LT: 18
HT: 19
(13352 mem free, 10.0.1.124)

 ets Jan  8 2013,rst cause:2, boot mode:(3,7)

load 0x40100000, len 28252, room 16
tail 12
chksum 0xbc
ho 0 tail 12 room 4
load 0x3ffe8000, len 2568, room 12
tail 12
chksum 0x51
ho 0 tail 12 room 4
load 0x3ffe8a08, len 8, room 12
tail 8
chksum 0xce
csum 0xce
Ћ{ѓ››oд“lЊ�Њ

может я могу собрать прошивку с каким-нибудь включенным дебаг режимом и попробую получить какуюто инфу более подробную с ним?
вот юзер конфиг в котором дебуг опция в 2 выставлена
попробую включить 0 или 1 пересобрать.

// LUAI_OPTIMIZE_DEBUG 0 = Keep all debug; 1 = keep line number info; 2 = remove all debug
#define LUAI_OPTIMIZE_DEBUG 2


со сборкой старого билда 2.2.0 у меня возникли проблемы
исходник старый есть но как его пересобрать с одним дополнительным модулем я не знаю точнее пока не пробовал, пробовал на виртуалке дебиан собирать новый, но мейк затыкается на строке 334:
Пришлось откопать докер контейнер на котором собирал старый билд, но не сохранил его слепок :-(
новый 3.0.0 собираю на этом же докер контейнере, но он обновил билд на 3.0.0 от marcelstoer https://hub.docker.com/r/marcelstoer/nodemcu-build/,
при попытке оттуда же собрать старый исходник ругается
такая котовасия :)
 

Вложения

INTRET

New member
2.2.0 пересобрать отсюда : git clone --branch 2.2.0-master_20180608 --recurse-submodules https://github.com/nodemcu/nodemcu-firmware.git
не удалось
но 2.2.1 kоторый 2.2.0 но с SDK 2.2.1 отсюда: git clone --branch 2.2.1-master_20190405 --recurse-submodules https://github.com/nodemcu/nodemcu-firmware.git
собралось! использован VBox с Debian 10

код маленького телнет сервера приведённого выше , на нем работает.
 

OlegRnD

New member
Уважаемые, подскажите...
В 2017 на продолговатой борде темного цвета с нодемцу на lua (благодаря коду товарища с амперки) сделал поделку, работающую до сих пор по замеру с дс18б20 и дхт22, получение через мктт. Модуль в слое пыли/штукатурки на объекте работает до сих пор, трогать не хочу. После на модуле от вемоса баловался дисплейчиками, пвм, реле - каждый раз генерил новую прошивку от нодемцу и в курсе про изменения в подключении к вайфай и работе с u8gt и т.д.
Короче, понадобилось на этот вемос два дс18б20: взял прошивку 20-го года с ним (стоял крыжик на ds18b20 при генерации прошивки), взял официальный пример (почему-то 2014 года) и получил ошибку вызова read_temp. Не стал вникать, подгрузил файл ds18b20.lua и олдскульный вариант на базе амперки, и... тоже получил уже другую ошибку (что-то про Си). Нашел старую прошивку, залил - все работает. Но есть минус - нужно помнить, что старые команды подключения к вайфай (а у меня там контроль самого вайфая и контроль наличия интернета на 4Г свистке, и пересброс всего этого хозяйства) и если захочу дисплейчики, опять же старые команды u8gt нужно в голове держать.
Вопрос, как на свежих прошивках nodemcu ОБЫЧНЫЕ!!! ds18b20 использовать?
З.Ы. спасибо, что дочитали до конца)
 

OlegRnD

New member
Разобрался, не работало на прошивке из облака сделанной в январе 2019 еще на sdk 2... и с выбранным модулем для ds18b20, причину не понял. На более старой прошивке (sdk 2.0.0) без выбранного модуля и на свежей с sdk 3.0.1 все работает норм, с предварительно загруженным на esp файлом ds18b20.lua.
З.Ы. на последней sdk еще и работа с таймерами несколько изменилась.
 
Сверху Снизу