Версия 1.3.0
Проект в стадии доработки некоторых библиотек Lua под новый SDK.
###Lua для Wi-Fi модулей esp8266
Построен на частях от ESP8266 sdk 1.3.0 + Патчи с изменениями
Ядро Lua на основе eLua проекта
Сjson на основе lua-cjson
Файловая система основана на spiffs
Транслятор UDK GCC 5.1
- Для детей, поиграться на вечер
- Легкий доступ к беспроводному маршрутизатору
- Основа (ядро) на Lua 5.1.4
- Предпочтительно программирование событий-Драйв.
- Встроено json, file, timer, pwm, i2c, spi, 1-wire, net, mqtt, coap, gpio, wifi, adc, uart and system api.
- Используется индекс для доступа к gpio, i2c, pwm.
- Используются Integer и Float.
2015-08-13 - Добавка: net.createServer(net.TCP[,timeout[, options]]) / net.createConnection(net.TCP[, secure[, options]])
2015-08-09 - Переход на SDK ver 1.3.0
2015-07-21 - Новые команды =wifi.getchl() и =wifi.setchl(1..13)
2015-07-18 - Добавление SDRAM Optimization Patch for SDK_v1.2.0 ('Heap' больше 36 килобайт)
2015-07-17 - Замена п.п. ввода UART, ремонт spiffs
2015-07-15 - Перестройка вызовов задач (ets_ru(), wdt)
2015-07-10 - Переход на SDK ver 1.2.0
2015-07-03 - Добавлена первая весрия rapid_loader-а (ускоренного загрузчика)
2015-07-02 - Начато перераспределение констант и других данных только в 48 килобайтную область IRAM
2015-07-01 - Новые команды =wifi.sta.rssi() и wifi.max_tpw(0..82)
2015-06-27 - Исправления/дополнения + новая команда file.fsstat()
2015-06-25 - Начало проекта
#Стартовый лог c парой команд
EspLua.ru 1.3.0 build 20150809 powered by Lua 5.1.4
lua: cannot open init.lua
> =node.heap()
41576
##Таблица GPIO
IO index | ESP8266 pin | IO index | ESP8266 pin |
---|---|---|---|
0 [*] | GPIO16 | 8 | GPIO15 |
1 | GPIO5 | 9 | GPIO3 |
2 | GPIO4 | 10 | GPIO1 |
3 | GPIO0 | 11 | GPIO9 |
4 | GPIO2 | 12 | GPIO10 |
5 | GPIO14 | ||
6 | GPIO12 | ||
7 | GPIO13 |
#Прошивка Flash
0x00000.bin: 0x00000
0x0C000.bin: 0x0C000
esp_init_data_default.bin: 0x7C000
blank.bin: 0x7E000
- Flash любого размера прошивается c опциями как 512 килобайтная. Анализ реального размера производится в ходе исполнения прошивки.
#Cкорость передачи RS-232 TTL по умолчанию baudrate: 115200
#Начните игру
####Подключение к точке доступа
ip = wifi.sta.getip()
print(ip)
--nil
wifi.setmode(wifi.STATION)
wifi.sta.config("SSID","password")
ip = wifi.sta.getip()
print(ip)
--192.168.18.110
####Манипулирование оборудованием, как в Arduino
pin = 1
gpio.mode(pin,gpio.OUTPUT)
gpio.write(pin,gpio.HIGH)
print(gpio.read(pin))
####Простейший клиент HTTP в стиле nodejs
-- A simple http client
conn=net.createConnection(net.TCP, 0)
conn:on("receive", function(conn, payload) print(payload) end )
conn:connect(80,"115.239.210.27")
conn:send("GET / HTTP/1.1\r\nHost: www.baidu.com\r\n"
.."Connection: keep-alive\r\nAccept: */*\r\n\r\n")
####Или простейший HTTP-сервер
-- A simple http server
srv=net.createServer(net.TCP)
srv:listen(80,function(conn)
conn:on("receive",function(conn,payload)
print(payload)
conn:send("<h1> Hello, NodeMcu.</h1>")
end)
conn:on("sent",function(conn) conn:close() end)
end)
####Подключение к MQTT Брокеру
-- init mqtt client with keepalive timer 120sec
m = mqtt.Client("clientid", 120, "user", "password")
-- setup Last Will and Testament (optional)
-- Broker will publish a message with qos = 0, retain = 0, data = "offline"
-- to topic "/lwt" if client don't send keepalive packet
m:lwt("/lwt", "offline", 0, 0)
m:on("connect", function(con) print ("connected") end)
m:on("offline", function(con) print ("offline") end)
-- on publish message receive event
m:on("message", function(conn, topic, data)
print(topic .. ":" )
if data ~= nil then
print(data)
end
end)
-- for secure: m:connect("192.168.11.118", 1880, 1)
m:connect("192.168.11.118", 1880, 0, function(conn) print("connected") end)
-- subscribe topic with qos = 0
m:subscribe("/topic",0, function(conn) print("subscribe success") end)
-- or subscribe multiple topic (topic/0, qos = 0; topic/1, qos = 1; topic2 , qos = 2)
-- m:subscribe({["topic/0"]=0,["topic/1"]=1,topic2=2}, function(conn) print("subscribe success") end)
-- publish a message with data = hello, QoS = 0, retain = 0
m:publish("/topic","hello",0,0, function(conn) print("sent") end)
m:close();
-- you can call m:connect again
-- a udp server
s=net.createServer(net.UDP)
s:on("receive",function(s,c) print(c) end)
s:listen(5683)
-- a udp client
cu=net.createConnection(net.UDP)
cu:on("receive",function(cu,c) print(c) end)
cu:connect(5683,"192.168.18.101")
cu:send("hello")
####Сделайть что-нибудь с ШИМ
function led(r,g,b)
pwm.setduty(1,r)
pwm.setduty(2,g)
pwm.setduty(3,b)
end
pwm.setup(1,500,512)
pwm.setup(2,500,512)
pwm.setup(3,500,512)
pwm.start(1)
pwm.start(2)
pwm.start(3)
led(512,0,0) -- red
led(0,0,512) -- blue
####Мигать светодиодом
lighton=0
tmr.alarm(1,1000,1,function()
if lighton==0 then
lighton=1
led(512,512,512)
else
lighton=0
led(0,0,0)
end
end)
####Запустить что-то, при старте системы (авто-запускаемый файл при старте)
--init.lua will be excuted
file.open("init.lua","w")
file.writeline([[print("Hello, do this at the beginning.")]])
file.close()
node.restart() -- this will restart the module.
####Пародия на Telnet
-- a simple telnet server
s=net.createServer(net.TCP,180)
s:listen(2323,function(c)
function s_output(str)
if(c~=nil)
then c:send(str)
end
end
node.output(s_output, 0) -- re-direct output to function s_ouput.
c:on("receive",function(c,l)
node.input(l) -- works like pcall(loadstring(l)) but support multiple separate line
end)
c:on("disconnection",function(c)
node.output(nil) -- un-regist the redirect output function, output goes to serial
end)
print("Welcome to NodeMcu world.")
end)
####Использование DS18B20
-- read temperature with DS18B20
node.compile("ds18b20.lua") -- run this only once to compile and save to "ds18b20.lc"
t=require("ds18b20")
t.setup(9)
addrs=t.addrs()
-- Total DS18B20 numbers, assume it is 2
print(table.getn(addrs))
-- The first DS18B20
print(t.read(addrs[1],t.C))
print(t.read(addrs[1],t.F))
print(t.read(addrs[1],t.K))
-- The second DS18B20
print(t.read(addrs[2],t.C))
print(t.read(addrs[2],t.F))
print(t.read(addrs[2],t.K))
-- Just read
print(t.read())
-- Just read as centigrade
print(t.read(nil,t.C))
-- Don't forget to release it after use
t = nil
ds18b20 = nil
package.loaded["ds18b20"]=nil
####Работа с дисплеем через I2C с u8glib u8glib это графическая библиотека с поддержкой различных дисплеев. Интеграция в nodemcu разработана на SSD1306 основе дисплея подключенного через порт I2C. Другие виды отображения и подключения SPI будет добавлены по "просьбе трудящихся".
#####Соединение I2C
Подключите SDA и SCL на любые свободные GPIOs. Пример lua_examples/u8glib/graphics_test.lua
SDA=5 (GPIO14) и SCL=6 (GPIO12). Они используются для настройки драйвера I2C EspLua.ru перед доступом к дисплею:
sda = 5
scl = 6
i2c.setup(0, sda, scl, i2c.SLOW)
#####Соединение SPI Используется аппартный HSPI на конкретных выводах ESP8266:
- HSPI CLK = GPIO14
- HSPI MOSI = GPIO13
- HSPI MISO = GPIO12 (not used)
Другие выводы на любых доступных GPIO:
- CS
- D/C
- RES (опция для некоторых дисплеев)
Также обратитесь к последовательности инициализации, например в lua_examples/u8glib/graphics_test.lua
:
spi.setup(1, spi.MASTER, spi.CPOL_LOW, spi.CPHA_LOW, spi.DATABITS_8, 0)
Комментарии и остальное на форуме esp8266.ru