Skip to content

mwafa/seluna

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Seluna

A Lua-powered system for ESP32 with clean, modular architecture.

Project Structure

seluna/
├── include/
│   ├── config.h                    # Global configuration
│   ├── core/
│   │   └── LuaRunner.h             # Lua interpreter wrapper
│   └── filesystem/
│       └── FileSystemManager.h     # SPIFFS file operations
├── src/
│   ├── main.cpp                    # Application entry point
│   ├── core/
│   │   └── LuaRunner.cpp
│   └── filesystem/
│       └── FileSystemManager.cpp
├── data/                           # Files uploaded to SPIFFS
│   ├── main.lua                    # Main Lua script
│   └── lib/                        # Lua modules
└── lib/
    └── lua/                        # Lua 5.4 source

Features

  • ✅ Clean separation of concerns (Core, FileSystem, Config)
  • ✅ Lua 5.4 interpreter integration
  • ✅ Custom require() loader for SPIFFS modules
  • ✅ File system manager for easy file operations
  • Raspberry Pi style GPIO - Familiar RPi.GPIO interface (C++ implementation)
  • PWM support - Hardware PWM dengan API simple
  • IntelliSense support - Autocomplete untuk semua fungsi
  • ✅ Configurable via config.h
  • ✅ Module search paths: /, /lib/, /modules/

Quick Start

1. Write Lua Scripts

data/main.lua:

-- Raspberry Pi style GPIO control
local GPIO = require("gpio")

-- Simple LED blink
GPIO.setup(2, GPIO.OUT)
GPIO.output(2, GPIO.HIGH)
GPIO.sleep(1)
GPIO.output(2, GPIO.LOW)

-- PWM for LED dimming
local pwm = GPIO.PWM(2, 1000)
pwm:start(50)  -- 50% brightness

data/lib/helper.lua:

local M = {}
function M.greet(name)
    print("Hello, " .. name .. "!")
end
return M

2. Build & Upload

# Upload filesystem
pio run --target uploadfs

# Upload code
pio run --target upload

# Monitor
pio device monitor

Configuration

Edit include/config.h:

#define SERIAL_BAUD_RATE 115200
#define LUA_MAIN_SCRIPT "/main.lua"
#define DEBUG_ENABLED true

API Reference

LuaRunner

LuaRunner runner;
runner.init();                      // Initialize
runner.executeFile("/script.lua");  // Load & run
runner.cleanup();                   // Clean up

FileSystemManager

FileSystemManager::init();
FileSystemManager::readFile("/file");
FileSystemManager::writeFile("/file", "content");
FileSystemManager::listFiles("/");

GPIO Functions (Lua)

Raspberry Pi Style (Recommended):

local GPIO = require("gpio")
Seluna menggunakan **Raspberry Pi style GPIO API** (implementasi C++ untuk performa optimal):

```lua
local GPIO = require("gpio")

-- Setup and control
GPIO.setup(2, GPIO.OUT)
GPIO.output(2, GPIO.HIGH)  -- or GPIO.output(2, true)
GPIO.toggle(2)

-- Input
GPIO.setup(4, GPIO.IN)
value = GPIO.input(4)

-- PWM control
local pwm = GPIO.PWM(2, 1000)  -- Pin 2, 1kHz
pwm:start(50)                  -- 50% duty cycle
pwm:ChangeDutyCycle(75)
pwm:stop()

-- Timing
GPIO.sleep(1)  -- 1 second

Lihat docs/RPI_GPIO.md dan docs/CPP_GPIO_BINDINGS.md untuk dokumentasi lengkap

  1. Install Lua Extension:

    • Open VS Code Extensions (Cmd+Shift+X)
    • Search "Lua" by sumneko
    • Click Install
  2. Start typing in any .lua file:

    pin-- Autocomplete shows: pinMode, etc.
  3. See parameter hints as you type:

    pinMode(█)
           ^-- Shows: pin: number, mode: number

See docs/INTELLISENSE.md for complete setup guide.

Examples

Contoh penggunaan GPIO dengan Raspberry Pi style API:

-- LED blink
local GPIO = require("gpio")
GPIO.setup(2, GPIO.OUT)
for i = 1, 5 do
  GPIO.output(2, true)
  GPIO.sleep(0.5)
  GPIO.output(2, false)
  GPIO.sleep(0.5)
end

-- PWM LED dimming
local pwm = GPIO.PWM(2, 1000)
pwm:start(0)
for duty = 0, 100, 5 do
  pwm:ChangeDutyCycle(duty)
  GPIO.sleep(0.1)
end
pwm:stop()

-- Button input
GPIO.setup(4, GPIO.IN)
if GPIO.input(4) == GPIO.HIGH then
  print("Button pressed!")
end

Architecture

└──────────────┬─────────────────────────┘ │ ┌──────────────▼─────────────────────────┐ │ ESP32 Hardware (Arduino API) │ │ - pinMode, digitalWrite │ │ - ledcSetup, ledcWrite │ └────────────────────────────────────────┘


**Components:**
- **Core**: Lua interpreter (LuaRunner)
- **FileSystem**: SPIFFS file operations
- **Bindings**: C++ GPIO dengan Raspberry Pi style API
- **Config**: Centralized setting

About

A lightweight graphical operating system for ESP32, powered by Lua.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages