Anodynous / stenogotchi

Portable stenography using Plover and bluetooth keyboard emulation on a Raspberry Pi Zero W
GNU Affero General Public License v3.0
172 stars 11 forks source link

installation on GamePi 20? #3

Closed robert-winkler closed 3 years ago

robert-winkler commented 3 years ago

Hi, your project is great!

Inspired by stenogotchi I built a Raspberry Pi Z with a 7-inch touchscreen https://www.thingiverse.com/thing:4860013. The energy consumption of the system is very low. Now I plan to build a stenogotchi, but have problems finding the components.

Thus, I intend to use a GamePi20 https://www.waveshare.com/wiki/GamePi20.

Could you please give me some advice, if A) this makes sense, and B) things I need to consider; For example in the configuration of the buttons and the screen?

Ideally, I also would install the https://github.com/psethwick/plover_console_ui and switch between the stenogotchi and the Plover Console UI; e.g. to look up words.

Best regards, Robert

Anodynous commented 3 years ago

Hi Robert,

Thanks for your interest in the project. The GamePi expansion board is not supported nor on the roadmap.

You are of course more than welcome to extend support for it yourself. It would require a new input plugin (see buttonshim.py for an example) and support for the screen module itself (see the hw folder for the current implementation).

The stenogotchi doesn't have a GUI handled by a window manager, it instead writes directly to the frame-buffer of the eINK display. Even with an external display connected to the RPI you would therefore not be able to swap between the stenogotchi UI and some other program like you may expect would work. That said, the UI is made available as a web version, which can be accessed locally or on a remote device connected to the same wifi. The web-GUI hasn't been given much work yet (buttons don't work for example), but plan is to make it possible to interact with the stenogotchi without a need for either buttonshim or eINK display using for example your phone. Only the RPI0W and microSD card are required hardware to run the stenogotchi, although it does lose a bit of its charm set up this way.

robert-winkler commented 3 years ago

Hi Anodynous,

Thanks for your quick reply!

Of course, the version without any screen would be very portable.

But the gotchi is very cute, and a little screen is always useful. I am still learning, and the Plover console UI suggestions are extremely helpful.

A web interface seems too complicated to me.

I can get the GamePi starting the Plover console UI. But how can I pass the output to the BlueTooth of the other device? Could you give me a hint please, on how this is done?

Reprogramming the buttons could be fun; for example for switching dictionaries, and for displaying help (lookup of words, Emily symbols,...).

Best regards, Robert

Anodynous commented 3 years ago

There are three core parts you needed to get in place to achieve this.

  1. A way to capture Plover output.
  2. A way to simulate a bluetooth HID device.
  3. A way to transmit the captured output as individual characters over the established BT connection.

The parts of the stenogotchi that are responsible for this are:

  1. The stenogotchi_link plugin hooks into the Plover engine and forwards the output in suitable format to the stenogotchi.
  2. HumanInterfaceDeviceProfile and BtKbDevice create the BT HID device and manages the connection.
  3. StenogotchiService communicates with plover_plugin and forwards the output through the above.

I'm also working on adding dictionary lookup functionality directly on the stenogotchi. The dev branch already has support for this, but it is being rewritten as the current solution doesn't play nicely with dictionaries that include command keys or that are in python format. Below is an example of it recorded from the web-gui. Stenogotchi_lookup

robert-winkler commented 3 years ago

I think I understand my homework ;-).

Plover is running on my Pi 0 W (see photograph), but I have to pass the output through BT. I will review your code how you managed this.

For starting, I will try to write a Python program that I can fire up for connecting to external devices. Then, I can replace my huge 7-inch display with a more portable one.

IMG_20210908_184111

Finally, I need a good idea to start/stop the service. I like the buttons. But keystrokes also could work. All my Steno compatible keyboards (4?) use a key combination to switch between Colemark-DH and Steno layout.

Of course, a 'blind' steno Pi would be possible, but a little display with suggestions and some information about the system is always helpful.

Is there any good reference on writing Plover plug-ins? Just to make it later available to the community.

Anodynous commented 3 years ago

I'd suggest looking into the Plover API reference. It has recently been updated and now gives a good overview of the parts of the program exposed to plugins. The Plover discord server is also full of helpful people.