I've had a go at adapting my existing Ripple LoRa mesh project to come up with a standalone messenger device which doesn't need a companion Android device.
This device can be used either with other standalone messenger devices, or with Ripple mesh devices which use the Ripple Messenger app. They are interoperable, and they automatically form their own mesh network, with end-to-end ECC encryption. And, of course, they all can utilise dedicated repeater radios for better range/reliability.Getting started
You will need a micro SD memory card, which will hold your ID, settings, contacts and saved conversations. You have to prepare the SD card with a configuration file, which you typically only need to do just once.
Amongst the people you want to form a network with, you need to confer and assign unique ID's for each person, in the range of 1 to 254. There is no central server, no internet, so this is up to you to allocate.
On a computer, insert the SD card, and create a folder called 'ripple'. In that directory, create a plain text file called 'conf.txt' (Unix format, Not MS-DOS!) This file should end up looking like this:
The lines can be in any order, but the first 2 characters are the property name (eg. 'ID' is your ID) followed by the value, terminated with a newline.
The properties are:
- GR - Group ID (can just leave as 0)
- ID - Your unique ID (1..254)
- FQ - LoRa frequency to use
- SF - LoRa spreading factor to use (10..12)
- NM - Your display name (others see this)
- TZ - Your timezone in minutes ahead of GMT. (optional)
NOTE: everyone in your group must use the same GR, SF, and FQ values!!
Once you have configured your SD card, just insert into the right-side slot, and power up the device.
The 4-way direction keys are used to navigate. Up/Down to select a contact, Right to select. (Left or ESC is used to go back to previous screen).
To add another user, ie. a contact, you need to enter the special '-Exchange-' room. For this chat room, you need to agree on a 4-digit passcode with the other(s), type that in, then press ENTER.
Here you select the top item '-My Details-' and press ENTER to broadcast your ID, name, and public encryption key to everyone else in the room. When others do this, you will see their ID, name appear in the list. Use Up/Down keys to select, then Right or ENTER key to ADD that user to your contacts (saved to your SD card).
You can do this at any time, to add or update users to your contacts list.
From the main screen, use Up/Down keys to select a contact, then Right to enter the conversation screen.
Just use the keyboard to type in messages you wish to send, then press ENTER key. The text will flash on/off while the send is in progress. If successful, the message scrolls up into the conversation, otherwise if it failed to be delivered it will stop flashing and stay below the horizontal line.
The screen automatically turns off after 15 seconds if no keys are pressed. If a new message arrives, the screen turns on showing a full screen preview of the message and sender name, with the green LED flashing, and buzzer beeps.
From here, you can press Left key to go back to home screen, or Right key to enter the conversation screen.Wiring
Below is a wiring diagram for your reference. It is fairly simple, just involving two I2C slave modules (RTC clock, and keyboard), and a piezo buzzer.
The V2 (with Blackberry keyboard) is almost the same wiring, just the 4 wires to the keyboard go to control module pins:
Flashing the firmware
The firmware will be at the Ripple github page: https://github.com/spleenware/ripple
NOTE: remove the micro SD card before attempting to flash firmware! For some reason this interferes with the USB serial.
There are instructions on the site on how to flash the firmware onto the TTGO ERSP32 board.Setting the clock
To seed the RTC module, you need to create a special file on the SD card with your computer. In the 'ripple' folder, create a plain text file called 'clock.txt' (Unix format, Not MS-DOS). Edit the file and add the following date values on separate lines, in this order:
Save the file, eject the SD card, then slide it into the device. You will need to reboot the device for it to take effect. The RTC clock should now be set, and the home screen should be showing the correct time.Printing the case
See the attachments section of this article for the STL file for 3D printing the case.
The RTC module, buzzer and LiPo battery just go underneath the TTGO module, at the 'fat' end of the case. The keyboard should fit snugly into the bottom part, and a bit of hot glue will keep it in place.
The TTGO board is kept in place with 2x M2 bolts into the two supports. (unscrew the antenna first, to get into place).EDIT: New Design
I'm working in a new design, and modified firmware, for this cool little keyboard module lifted from an old Blackberry:
OK, here is the final design:
This one feels so much better, is much more compact and pocketable. The STL files are now attached, and the new firmware BIN file is on github.Donate
If you find this project useful and feel like throwing some Bitcoin my way, I'd be really grateful:
My BTC address: 1CspaTKKXZynVUviXQPrppGm45nBaAygmSFeedback
When SHTF happens, or the zombie apocalypse hits, or the asteroid, or whatever, and you need to chat with your family and friends, I hope this gadget comes in handy! :-)
Feel free to leave comments and ask me whatever questions you may have.