Close
0%
0%

Pocket Pad

Combines a PocketType keyboard and reflective displays in a prototype PDA - usable in bright sunlight to write its own software.

Similar projects worth following
I enjoy programming and get frustrated that tablets and laptops are not really usable in direct sunlight. The Pocket Pad prototype is my attempt to produce a small PDA like device that I can use in the great outdoors. To this end, I have combined a PocketType miniature 40% keyboard with two very low power ST7302 monochrome displays and a Nice!Nano NRF52840 based controller board. The brighter the ambient light the more readable these reflective displays become. Everything, apps, keyboard and display drivers, and system software is written in Gordon William's Espruino - a version of Javascript targeted at embedded devices. An editor app allows all of this software to be modified and updated on the device itself. Having two displays greatly facilitates program development with normal use having an app using the top display and the Espruino REPL used for debugging appearing in the bottom display.


Keyboard

The keyboard is a PocketType miniature ortholinear 40% keyboard kit available from  Mechboards - https://mechboards.co.uk  with numbers and symbols accessed by layer keys. It is microswitch based and OK for thumb based typing rather than touch typing. The kit requires a ProMicro format based controller, which is what attracted me, as I realised that I could install Espruino on the NRF52840 based [Nice!Nano](https://nicekeyboards.com/nice-nano/) controller which is combatible with the ProMicro pinout. The kit comes with blank keycaps, as pictured below. I have labelled these with transfers and then sealed them with clear nail varnish. The transfer set was for a standard set of characters - thus the creative use of orientation to label arrow keys etc.

The first software I implemented for the PockeType keyboard was a keyboard scanner written in Espruino. To save power this is normally quiescent but the first keypress activates it and it continues scanning for 5 seconds after the last key event. Espruino includes a module which makes it easy to get the keyboard to appear as a bluetooth HID keyboard to other computers.

To help me with using the keyboard layers, the mappings above are displayed when the bluetooth keyboard app **kbdble** is active.

Displays

Each display is a 2.13" (250 x 122 pixel ) reflective display with an ST7302 hardware driver. This display is similar to a Sharp Memory Display in that has no backlight and it permits much faster updates than Epaper displays. In low power mode with frame refresh set to 4Hz, each display uses on average 30 microamps. It is a versatile, in that, in high power mode it can update at a 32Hz frame rate with current consumption still less than 1 milliamp.

I developed the display driver using an Espruino Puck.js, as pictured above, which is powered by a CR2032 coin cell. The ST7302 permits display pixels to be updated in 24 pixels chunks, however, my driver only implements full screen updates since this takes just 10ms and partial updates might in fact be slower due to the quite complex mapping from the Espruino graphics buffer to display pixels. Consequently, the driver for each display uses a 4125 byte buffer with pixels stored in ST7302 order.

The Nice!Nano controller has 21 I/O pins. Scanning the keyboard requires 16 pins (4 rows and 12 columns) leaving 5 pins free which is just enough to drive the displays (clock, data, data/command and 2 x chip select pins - the reset pin is connected to a pullup resistor and I use S/W reset in the driver).

The low-power nature of the displays and the NRD52840 processor means that quiescent current is around 100uA. Consequently, the 1200mAH LIPO battery should only need to be charged once or twice a year - which has made solar charging less urgent, although it would be nice.

Software

All of the software is written in Gordon Williams's  Espruino https://www.espruino.com/ which is Javascript tailored for embedded applications. Espruino comes with extensive support for graphic operations and a huge set of support modules. It is interpreted which means that Espruino programs can be both written and executed on the Pocket Pad.

Pocket Pad's software is organised as a set of apps. Each app is an Espruino storage file with a name in the format *appname.app.js*. The system will display the app with an icon image if a file *appname.icon* exists, otherwise, it uses a default icon. Installing a new app is thus simply copying a file into the NRF52840 flash storage which is elegantly supported by the Espruino's   WebIDE.

Editor App

The only software needed to make the Pocket Pad a self contained Espruino program development device was an editor as pictured above. The editor can open and edit all of the Javascript files stored on the device. Of course, this means that it is possible to cause a crash that can only be repaired using the WebIDE, however, it also means the device...

Read more »

  • 1 × PocketType Keyboard Kit 40% ortholinear keyboard available from MechBoards - https://mechboards.co.uk/products/pockettype
  • 2 × 2.13 inch 122x250 ST7302 reflective display Available fromAliExpress
  • 1 × Nice!Nano NRF5280 controller Available from Mechboards
  • 1 × 3mm clear acrylic sheet
  • 1 × M2 Brass Standoffs I got a set of various sizes from Amazon

  • Black on Black or White on Black

    jefmer03/07/2024 at 18:14 0 comments

    The display driver includes a command to invert the display and I have included a facility to choose an inverted display in the Settings app. I am still undecided as to which setting is more readable, however after implementing the analog clock app shown below, I noticed some ghosting of the second hand with black on a white background which is not visible in the inverted display.

    I had thought that having the clock display update every second might reduce battery life, however so far this has not been noticeable. The time to update the display for the second hand is 40ms so this represents only a 4% increase in CPU usage which is the only increase in power consumption. Unlike E-paper displays which take a lot of power to update but none when quiescent, the power used by these reflective displays is more or less constant.

  • Editor App - Video

    jefmer03/02/2024 at 13:30 0 comments


    Video shows creation and execution of the traditional Hello, World program. Executed first from Editor App and then as an App in its own right. Typing is painful as usually I use thumbs with this keyboard but to keep it in focus it had to be flat on a table. 

  • Monitor App

    jefmer02/29/2024 at 19:48 0 comments

    Monitor App

    The Pocket Pad does not have any spare pins for peripherals, however, it does have bluetooth which can be used to connect to external devices and sensors.

    I had already made a Seeed Studio XIAO NRF52840 based environment monitoring station with BMP280 (Atmospheric Pressure) and SCD41 (CO2, Humidity, Temp) sensors. This includes readings from its sensors in the bluetooth advertising broadcast message. The Pocket Pad Monitor App receives these sensor advertisements and can then connect to a selected device using its BLE UART service to access trend data stored on the device. The picture below shows the sensor device and Pocket Pad accessing the record of the last six days atmospheric pressure readings.

    The observant reader will notice some slight discrepancies in readings - these are caused by a loss of precision in the readings included in the Bluetooth advertisement messages - and some inconsistent treatment of rounding in my software :-(

    Further details of the environment monitor can be found in the Github repository here.

View all 3 project logs

Enjoy this project?

Share

Discussions

e64 wrote 04/22/2024 at 19:16 point

what You think about run fuzix ?

https://github.com/EtchedPixels/FUZIX

  Are you sure? yes | no

jefmer wrote 04/22/2024 at 19:36 point

Should be enough resources as FUZIX runs on 8 bit systems, however,  I think Espruino is much easier to program. 

  Are you sure? yes | no

e64 wrote 03/10/2024 at 16:13 point

I am frustrated by the very short run time of such devices on a single charge. Maybe add a solar panel and some sort of step up down converter from 1-24V to 3.3V device run time of say a week

  Are you sure? yes | no

jefmer wrote 03/10/2024 at 21:06 point

Solar charging is certainly possible but I last charged Pocket Pad three weeks ago and the battery is still at 91% after quite intensive use for program development and running CPU intensive apps like Conway’s Game of Life. So run time is currently much more than a week.  

  Are you sure? yes | no

e64 wrote 03/13/2024 at 15:21 point

You are planing add fuzix OS ? I like unix ;D

  Are you sure? yes | no

[deleted]

[this comment has been deleted]

jefmer wrote 03/07/2024 at 18:35 point

Glad you like it. 

  Are you sure? yes | no

Andreas Eriksen wrote 02/29/2024 at 06:43 point

Very nice!

  Are you sure? yes | no

jefmer wrote 02/29/2024 at 06:56 point

Similar goal, but I think PotatoP has a better keyboard:)

  Are you sure? yes | no

Andreas Eriksen wrote 02/29/2024 at 07:27 point

Oh, I'm flattered you've heard about it 😁 Hoping to build a "PotatoP pocket" edition too at some point. If only this AI revolution could let up so my day job quiets down 😅

  Are you sure? yes | no

Andy Piper wrote 02/28/2024 at 16:24 point

love the use of that keyboard!

  Are you sure? yes | no

jefmer wrote 02/28/2024 at 17:09 point

Thanks Andy,  putting it together certainly improved my soldering. 

  Are you sure? yes | no

jefmer wrote 02/28/2024 at 14:06 point

Thanks, I am having a lot of fun programming it. 

  Are you sure? yes | no

davedarko wrote 02/28/2024 at 14:01 point

great project :)

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates