add README.md
This commit is contained in:
@@ -0,0 +1,105 @@
|
|||||||
|
# WijiBoard 👻
|
||||||
|
|
||||||
|
WijiBoard is a **5-bar parallel linkage SCARA robot** designed as a spirit-board / planchette mover, controlled wirelessly from a browser via **Web Bluetooth**.
|
||||||
|
|
||||||
|
There is **no mobile app, no WiFi, and no server backend** needed for operation. The ESP32 firmware communicates directly with a local web Single Page Application (SPA) using BLE.
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- **Kinematics Engine**: Custom Inverse and Forward Kinematics for a 5-bar linkage SCARA arm.
|
||||||
|
- **Web Bluetooth**: Direct browser-to-hardware communication, eliminating complex networking.
|
||||||
|
- **Interactive UI**:
|
||||||
|
- **Stepper Test**: Interactive SVG arm visualiser with jog controls and IK movement.
|
||||||
|
- **Board Control**: Clickable points of interest on various board layouts.
|
||||||
|
- **Input Text**: Keyboard-to-board automatic spelling.
|
||||||
|
- **Sequence Editor**: Record, playback, and export custom movement sequences.
|
||||||
|
- **Serverless**: The Web SPA operates purely on client-side JS (requires a Chromium-based browser).
|
||||||
|
|
||||||
|
## Hardware Overview
|
||||||
|
|
||||||
|
- **MCU**: ESP32-C3 / ESP32-S3 (PlatformIO + Arduino core)
|
||||||
|
- **Motors**: 2× 28BYJ-48 stepper motors with ULN2003 drivers
|
||||||
|
- **Mechanism**: 5-bar parallel SCARA linkage
|
||||||
|
|
||||||
|
## How to Use
|
||||||
|
|
||||||
|
1. **Power up the board**: Plug in the ESP32.
|
||||||
|
2. **Open the App**: Navigate to the hosted web application or serve it locally (e.g., `python -m http.server 8080`).
|
||||||
|
3. **Connect**: Click the Bluetooth icon in the UI to pair with `WijiBoard`.
|
||||||
|
- *Note: Web Bluetooth requires a Chromium-based browser (Chrome, Edge, Opera, etc.) and does not work in Firefox.*
|
||||||
|
4. **Home the Arm**: The robot must be homed before precise movements. You can trigger homing from the "Stepper Test" section.
|
||||||
|
5. **Control**: Use the interactive maps, test section, or text inputs to control the planchette.
|
||||||
|
|
||||||
|
## Development & Building
|
||||||
|
|
||||||
|
### 1. Building the MCU Firmware (PlatformIO)
|
||||||
|
|
||||||
|
The firmware is located in the `src/` directory and is built using [PlatformIO](https://platformio.org/).
|
||||||
|
|
||||||
|
To build and flash the ESP32:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Navigate to the project root
|
||||||
|
cd esp32s3-wiji
|
||||||
|
|
||||||
|
# Compile the firmware
|
||||||
|
pio run
|
||||||
|
|
||||||
|
# Flash the firmware to the ESP32 via USB
|
||||||
|
pio run --target upload
|
||||||
|
|
||||||
|
# Open serial monitor for debugging (115200 baud)
|
||||||
|
pio device monitor
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Serving the Web App (Local Development)
|
||||||
|
|
||||||
|
For quick local development, serve the files from the root directory:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python -m http.server 8080
|
||||||
|
```
|
||||||
|
Then open `http://localhost:8080` in your browser.
|
||||||
|
|
||||||
|
### 3. Containerized Deployment (Production)
|
||||||
|
|
||||||
|
The project includes a complete containerized setup to serve the static web application in a production-like environment using Docker or Podman. The configuration is found in the `deploy/` directory.
|
||||||
|
|
||||||
|
#### Building the Image
|
||||||
|
|
||||||
|
To build the Docker image using the provided `Dockerfile`:
|
||||||
|
```bash
|
||||||
|
cd deploy
|
||||||
|
docker build -t wiji-web:latest .
|
||||||
|
```
|
||||||
|
*(This uses a multi-stage build: first generating any dynamic assets using Python, then serving the static files via Nginx).*
|
||||||
|
|
||||||
|
#### Running with Docker Compose
|
||||||
|
|
||||||
|
To start the application using `docker-compose`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd deploy
|
||||||
|
docker-compose up -d
|
||||||
|
```
|
||||||
|
The application will be served by Nginx on the configured port.
|
||||||
|
|
||||||
|
#### Running with Podman (Quadlet)
|
||||||
|
|
||||||
|
If you are using Podman, you can deploy the container using the provided systemd quadlet file:
|
||||||
|
|
||||||
|
1. Copy the quadlet file to your user's systemd directory:
|
||||||
|
```bash
|
||||||
|
mkdir -p ~/.config/containers/systemd/
|
||||||
|
cp deploy/wiji-web.container ~/.config/containers/systemd/
|
||||||
|
```
|
||||||
|
2. Reload systemd and start the service:
|
||||||
|
```bash
|
||||||
|
systemctl --user daemon-reload
|
||||||
|
systemctl --user start wiji-web.service
|
||||||
|
systemctl --user enable wiji-web.service
|
||||||
|
```
|
||||||
|
|
||||||
|
## Acknowledgments
|
||||||
|
|
||||||
|
The initial 5-bar IK mechanism and lookup tables were inspired by `nerd-sniped/WijiBoard`. The firmware, sequence architecture, UI, and BLE protocol were built from scratch.
|
||||||
Reference in New Issue
Block a user