Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/elenaf9/p2p-display
Writing to remote E-ink displays in a p2p-network
https://github.com/elenaf9/p2p-display
distributed-systems e-ink p2p-network raspberry-pi
Last synced: 5 days ago
JSON representation
Writing to remote E-ink displays in a p2p-network
- Host: GitHub
- URL: https://github.com/elenaf9/p2p-display
- Owner: elenaf9
- License: apache-2.0
- Created: 2022-05-02T09:19:40.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2022-09-28T12:57:59.000Z (over 2 years ago)
- Last Synced: 2024-04-22T20:36:13.905Z (9 months ago)
- Topics: distributed-systems, e-ink, p2p-network, raspberry-pi
- Language: C
- Homepage:
- Size: 954 KB
- Stars: 3
- Watchers: 2
- Forks: 0
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Digital Fax
_WIP project for the internet-communication course summer term 2022 at FU Berlin._
**Idea**: Control the content displayed on a E-Ink Display from remote via P2P Communication
- E-ink display connected to an IoT device that can write to the display
- Setup P2P node on the IoT device, nodes are connected in a mesh-network
- Displayed content can be changed by other (authorized) peers by sending messages to the node
- E-ink display has very low energy consumption - can be unplugged any time and will continue displaying content## Components
### Display
Displays a message on an E-Ink display:
- Interface with the display via SPI
- Uses bcm2835 driver files to access GPIO### Network
Responsible for sending and receiving data within the network:
- P2P network written in Rust using libp2p
- Peer discovery via MDNS, Pub/Sub communication via GossipSub
- Nodes connected in a mesh-network using B.A.T.M.A.N### Management
Interface between network, display and user:
- Embeds network component as library and display component via FFI.
- Implements protocol for messages, encoded with protobuf
- Authenticates messages## Hardware Setup
- Raspberry Pi 3/4
- Waveshare e-Paper Module### Cross Compilation
In order to cross-compile for ARM, you need to install a GCC compiler for ARM. On macOS this can be done using this GitHub repo: [macos-cross-toolchains](https://github.com/messense/homebrew-macos-cross-toolchains).
The compiler will probably have a name similar to `arm-unknown-linux-gnueabihf-gcc` and the archiver `arm-unknown-linux-gnueabihf-ar` but check this for your specific installation.Compile display component static library for ARM:
```sh
cd display
make lib CC= AR=
```Compile management component for ARM:
```sh
cargo build --release --target arm-unknown-linux-gnueabihf
cargo build --release --target arm-unknown-linux-gnueabihf --features display
```### Raspberry Pi
To set up a new Raspberry Pi, install your SSH key on it and then:
```sh
export CC= && export AR=
./scripts/build.sh # if you want to compile with display support, add --features display
./scripts/setup.sh
```## Scripts
There are some helper scripts to make stuff easier:
**Build for ARM with display support**: `./scripts/build.sh --features display`. (If you want to use a custom compiler and archiver use `export CC= && export AR=` before running the build script.)
**Setup a new Raspberry Pi**: `./scripts/setup.sh `