From 3a78fec4564e21677c3be3e6e9979f49bfe97c38 Mon Sep 17 00:00:00 2001 From: arne Date: Mon, 6 Oct 2025 21:01:12 +0200 Subject: [PATCH] Add index.html with basic documentation --- README.md | 10 +- assets/http/index.html | 161 +++++++++++++++++++++++++++++ assets/{ => scripts}/boot.lua | 0 assets/{ => scripts}/post_test.lua | 0 main/inkpot.c | 12 +-- 5 files changed, 173 insertions(+), 10 deletions(-) create mode 100644 assets/http/index.html rename assets/{ => scripts}/boot.lua (100%) rename assets/{ => scripts}/post_test.lua (100%) diff --git a/README.md b/README.md index 819705f..26cf621 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ You need to give it a 2.4Ghz Wifi SSID and password by adjusting `main/settings. You can send scripts like this: ``` bash -cat assets/post_test.lua | curl -X POST --data-binary @- 10.0.0.100/draw +cat assets/scripts/post_test.lua | curl -X POST --data-binary @- 10.0.0.100/draw ``` The IP address of the display is logged to its serial output and can be read via `idf.py monitor` (see below). @@ -41,7 +41,9 @@ You can stop the monitor by pressing `Ctrl + ]`. - `main/` - `inkpot.c`: Main program containing embedded Lua script and file-based Lua execution. - `paper.c`: Defines the lua bindings to epdiy that can be used for drawing on the screen. -- `assets/`: Directory containing all Lua scripts; some are older example scripts that are not executed - - `boot.lua` contains the sketch that runs at startup - - `post_test.lua` contains another sketch +- `assets/` + - `http/`: Static assets to be served by the HTTP server + - `scripts/`: Directory containing all Lua scripts; some are older example scripts that are not executed + - `boot.lua` contains the sketch that runs at startup + - `post_test.lua` contains another sketch diff --git a/assets/http/index.html b/assets/http/index.html new file mode 100644 index 0000000..0e54714 --- /dev/null +++ b/assets/http/index.html @@ -0,0 +1,161 @@ + + + + + + Inkpot + + + + + + + +

inkblot

+

Welcome to your inkblot. You can use the text field below to enter and send Lua scripts that will change what is displayed on your screen. At the bottom of the screen you can get a short list of functions available for drawing.

+
+ + +
+

How to draw

+

Lua is a very simple language. Here is a brief overview of the syntax: Learn Lua in Y Minutes. You can find a description of the drawing library below.

+

The screen is monochrome and knows 16 shades. Whenever you see a color below, it can be set to values from 0 (black) to 255 (white). You can also use hexadecimal notation (from 0x00 to 0xFF) which means the same thing.

+

The coordinate system starts at (0,0) in the top left corner.

+
+
local paper = require "paper"
+
Loads the library to run drawing commands.
+ +
paper.init()
+
Initializes the screen. Needs to be called at least once.
+ +
paper.clear()
+
Clears the screen. If you don't call this, you will draw on top of your previous drawing.
+ +
paper.update()
+
Sends your drawing to the screen. Needs to be called after a sequence of drawing commands to display them..
+ +
paper.set_orientation(orientation)
+
Set the screen orientation. Allowed values for orientation are "portrait", "landscape", "inverse_portrait" and "inverse_landscape"
+ +
paper.get_orientation()
+
Get current screen orientation. Returned values are "portrait", "landscape", "inverse_portrait" and "inverse_landscape"
+ +
paper.get_width()
+
Get current screen width, according to orientation.
+ +
paper.get_height()
+
Get current screen height, according to orientation.
+ +
paper.draw_pixel(x, y, color)
+
Draw a single pixel at (x,y) in the given color.
+ +
paper.draw_line(x1, y1, x2, y2, color)
+
Draw a line from (x1,y1) to (x2,y2) in the given color.
+ +
paper.draw_hline(x, y, length, color)
+
Draw a horizontal line from (x,y) with the given length in the given color.
+ +
paper.draw_vline(x, y, length, color)
+
Draw a vertical line from (x,y) with the given length in the given color.
+ +
paper.draw_circle(x, y, radius, color) / paper.fill_circle(x, y, radius, color)
+
Draw an outline around a circle at (x,y) with the given radius in the given color. fill_circle draws the same circle with a solid filling.
+ +
paper.draw_rect(x1, y1, x2, y2, color) / paper.fill_rect(x1, y1, x2, y2, color)
+
Draw an outline around a rectangle with the upper left corner at (x1,y1) and lower right corner at (x2,y2) in the given color. fill_rect draws the same rectangle with a solid filling.
+ +
paper.draw_triangle(x1, y1, x2, y2, x3, y3, color) / paper.fill_triangle(x1, y1, x2, y2, x3, y3, color)
+
Draw an outline around a triangle with corners (x1,y1), (x2,y2) and (x3,y3) in the given color. fill_triangle draws the same triangle with a solid filling.
+
+

Have fun!

+ + diff --git a/assets/boot.lua b/assets/scripts/boot.lua similarity index 100% rename from assets/boot.lua rename to assets/scripts/boot.lua diff --git a/assets/post_test.lua b/assets/scripts/post_test.lua similarity index 100% rename from assets/post_test.lua rename to assets/scripts/post_test.lua diff --git a/main/inkpot.c b/main/inkpot.c index 57775c3..b149c6f 100644 --- a/main/inkpot.c +++ b/main/inkpot.c @@ -18,7 +18,7 @@ #include "server.h" #define WIFI_SCAN_LIST_SIZE 10 -#define LUA_FILE_PATH "/assets" +#define LFS_PATH "/assets" #ifndef MIN #define MIN(a, b) (((a) < (b)) ? (a) : (b)) @@ -40,7 +40,7 @@ void init_filesystem() { ESP_LOGI(TAG, "Initializing File System"); esp_vfs_littlefs_conf_t conf = { - .base_path = LUA_FILE_PATH, + .base_path = LFS_PATH, .partition_label = "assets", .format_if_mount_failed = false, .dont_mount = false, @@ -50,7 +50,7 @@ void init_filesystem() { if (err != ESP_OK) { ESP_LOGE(TAG, "Failed to mount or format filesystem"); } else { - ESP_LOGI(TAG, "Filesystem mounted at %s", LUA_FILE_PATH); + ESP_LOGI(TAG, "Filesystem mounted at %s", LFS_PATH); } } @@ -84,7 +84,7 @@ void run_lua_file(const char *file_name, const char *test_name) { // Construct the full file path char full_path[128]; - snprintf(full_path, sizeof(full_path), LUA_FILE_PATH"/%s", file_name); + snprintf(full_path, sizeof(full_path), LFS_PATH"/%s", file_name); if (luaL_dofile(L, full_path) == LUA_OK) { lua_pop(L, lua_gettop(L)); @@ -286,10 +286,10 @@ void app_main(void) { register_http_routes(server); } - // Run script in assets/boot.lua; this is executed as a FreeRTOS task + // Run script in assets/scripts/boot.lua; this is executed as a FreeRTOS task // that may not be interrupted void runLuaFile (void* arg) { - run_lua_file("boot.lua", "E-Paper Startup Script"); + run_lua_file("scripts/boot.lua", "E-Paper Startup Script"); vTaskDelete(NULL); } xTaskCreate(runLuaFile, "run_lua_file", 4096, NULL, tskIDLE_PRIORITY, NULL);