A library to provide a Scenic framework driver implementation for the display HAT for Raspberry PI from Waveshare. Inspired by Inky driver and Bonnet driver.
Currently supports:
- 128x128, 1.44inch LCD display HAT for Raspberry Pi
- SKU: 13891
- Part Number: 1.44inch LCD HAT
- Brand: Waveshare
This driver only runs on RPi devices as far as we know as it is based on the scenic rpi driver generating a frame buffer we can use.
The package can be installed by adding scenic_driver_waveshare
to your list of dependencies in mix.exs
:
def deps do
[
{:scenic_driver_waveshare, "~> 0.8.2"}
]
end
Run mix deps.get
to get the new dependency.
This library provides the Scenic.Driver.Nerves.Waveshare
driver module.
An usage example is provided in alexiob/sample_scenic_driver_waveshare.
The driver configuration, to be placed in config/target.exs
:
config :waveshare, :viewport, %{
name: :main_viewport,
default_scene: {Waveshare.Scene.Main, nil},
# Match these to your display
size: {128, 128},
opts: [scale: 1.0],
drivers: [
%{
module: Scenic.Driver.Nerves.Waveshare,
opts: [
# only :sku138191 at the moment
device_sku: :sku138191,
# :color18bit (default) | :color16bit | :color12bit
color_depth: :color18bit,
# :rgb | :bgr (default)
color_order: :bgr,
# :l2r_u2d | :l2r_d2u | :r2l_u2d | :r2l_d2u | :u2d_l2r | :u2d_r2l (default) | :d2u_l2r | :d2u_r2l
scan_dir: :u2d_r2l,
# :ppm | :rgb24 (default) | :rgb565 | :mono | :mono_column_scan
capture_format: :rgb24,
refresh_interval: 50,
spi_speed_hz: 20_000_000,
# remapping input keys
input_mappings: %{
button_3: "button_3_text"
}
],
name: :waveshare
}
]
}
I strongly suggest to use the default values provided above.
For development on host, we recommend just using the glfw
driver for Scenic.
The HAT inputs generate Scenic :key
events:
def handle_input(
{:key, {key, action, _something}} = event,
_context,
_state
) do
Logger.debug(
"handle_input: received event #{inspect(event)} state=#{inspect(state)}"
)
case {key, action} do
{:joystick_1_up, :press} -> ...
{:joystick_1_down, :press} -> ...
{:joystick_1_right, :press} -> ...
{:joystick_1_left, :press} -> ...
{:joystick_1_button, :press} -> ...
{:button_1, :press} -> ...
{:button_2, :press} -> ...
{:button_3, :press} -> ...
end
end