Over the last couple of weeks, I’ve become interested in off-grid communication, and I am currently looking into creating a simple communication protocol wherein multiple raspberry pi’s are able to send and receive messages to each over a long range (approximately 10-15km) in a mesh network configuration. This would be beneficial in a developing context, where the cost of data is prohibitive and locals have a desire to access localised services and chat within their context in an intranet-like setting. It could empower them to create their own decentralised communication networks, which are a lot cheaper to set up and owned by the individuals, as opposed to relying on telecom infrastructure which can be censored.
The system would be used as follows:
The user first connects to raspberry pi device via Bluetooth from their mobile phone (in an ideal setting, each user would own their own device and carry it around their pocket, so the device itself needs to be relatively inexpensive).
The user opens up a messaging app which works offline, the app checks for the required connectivity to the raspberry pi device.
The app allows users to send and receive encrypted text messages. Whenever the user presses send, it transfers the message to the radio device and that is broadcasted to the network. In order to send and receive messages, the recipient must be connected to nearby radio device so that they can listen for a message with a specific wave signature. Once they receive the message, it is decrypted automatically and available for them to consume. In order to ensure that the recipient is online, the sender’s radio sends out a handshake message to the recipient. Once the recipient consumes the message, they respond with an affirmation message, which then creates a communication channel between both sender/recipient which expires after 24 hrs, or when either participant goes offline.
If a participant has internet access, then they can act as en exit nodes. Exit nodes can earn money by making calls to the “outside world” for network participants. For example, if a participant wants to find out the USD-GBP FX rate, they can ping the network to find out who has that information. If no one has it, then they can pay the exit node a small fee (0.01 cents) to retrieve the data on their behalf.
I was just wondering how I would go about achieving this with the raspberry pi. What kind of hardware would I need to get started?