Dear Jesse, Version Zero

To: My Website Visitors

Jesse and I are writing back and forth about a project he’s working on to build a screenless qwerty note-taking device.
Jesse is a very capable software hacker with some hardware tinkering behind him. If you’re following along, your mileage may vary, but feel free to write with your own questions and ideas.
You can find me below or at dearissac@issackelly.com


To: Jesse Andrews
@anotherjesse
https://m4ke.org/

Dear Jesse,

You mentioned that you’re into an iterative approach. I am too! One of the things that I like to do early-on for iterative projects is to define the main blocks and their interfaces.

Defining the blocks means you can focus on one part of a problem at a time.

Defining the interfaces means that you can trade out different blocks and likely get similar results.

Down to the brass tacks then! I’m going to focus on Hardware for now. I really like the idea of a pocket-sized qwerty with all the bells and whistles. I think it’s possible with maybe 3 or 4 jumps from my “Version 0” as described below.

I suggest that you take this project in three parts that can be iterated almost totally independently from one another.

  • Power System
  • Compute, Network & Storage
  • Keyboard
  • Sync/Cloud/Export functionality (probably not hardware!)

Once we’ve defined the main bits, the next thing to do is to list the interface between them.

If I were gonna go out on a limb, I’d guess that we can make “USB” the interface at each point for the hardware bits. We have to do a little math to figure out if I’m going to recommend USB 2 or USB 3. The biggest difference for you is that USB 3 has many more options for the amount of power you can draw.

If things stay below 500mA of power draw, then sticking with USB 2 is probably a good idea. It’s a much more simple protocol. If they don’t, then we can make some adjustments.

Interface Suggestions

Power System < USB > Computer

Between the Computery-bits (whatever they are, to be discussed below) and the power bits, we’ll use USB.

This makes it easy to source a wall-wart power supply, or to use a USB battery pack, in a few dozen or more available sizes and form factors.

If you want to learn more about power management, you can DIY a USB-compatible power supply as well. You could probably make one from lemons or potatoes.

Computer < USB > Keyboard

This is a bit of a tricky suggestion because it puts a constraint on both your keyboard and your computery bits.

Your computer needs to support some kind of USB host mode. This is easy to do with any raspberry pi or x86 kind of computer. It gets a little more complicated with microcontrollers, but not a lot.

We can find a microcontroller that supports USB On The Go (OTG) directly in the hardware.

Computer < Network or Mobile Storage > Sync/Cloud/Export

Honestly I trust you to come up with something useful here. I’d suggest we plan on both wifi and removable storage. I think you should save onto “disk” in some durable-but-readable format. I’d suggest line-formatted JSON or protobufs for serialization and deserialization of your notes.

Version 0

Build something quickly and figure out what you like about it.

  • Computer: Raspberry Pi.
    • I’d use a headless raspian or ubuntu with SSH access configured
    • You might want to connect up a couple LEDs to the GPIO ports for feedback.
    • You might want to use double-stick tape to put it on the back of your keyboard.
  • Keyboard: Any USB Keyboard
  • Power: Wall Wart
  • Software: Python/JavaScript/C/whatever program that
    • Starts on boot via systemd or /etc/init.d
    • Toggles a GPIO attached light on (or on and off, if you don’t want the distraction) when it starts successfully.
    • Accepts text
    • Serializes that text any time you hit “return” or after 5 minutes of inactivity if it has something in the buffer.
    • Writes that serialized buffer to some kind of queue /var/log/notes/pending.json.txt
    • Starts another program to read things off the queue and save them to… slack? Whenever you can.
    • This probably puts a race condition on that file. I trust you to figure it out. I’d use redis as the queue, but you’re really unlikely to port this to a microcontroller directly this way.

Version 1

Make this mobile. Battery-backed RPI should be pretty straight forward to use a USB backup battery.

Version 2

Use a keyboard you like better. I like using the Atreus because it’s a pretty good open-source base to keep growing from too.
This is a fun time to iterate on the keyboard and the eventual form factor.

Version 3

Let’s swap the raspberry pi for something a little slimmer?

We can investigate a raspberry pi zero, or any number of microcontrollers with USB-OTG support.

Version 4

Let’s consider collapsing the computer/power system blocks into one integrated “compute & power” unit. Maybe we custom design/fabricate this?

Version 5

Let’s collapse the keyboard, power, and compute blocks into one custom project, based on all the stuff we learned above.


Comments and Messages

I won't ever give out your email address. I don't publish comments but if you'd like to write to me then you could use this form.

Issac Kelly