# G1Tx: Transactions sans contact
## Terminal léger
G1Tx est destiné à réaliser des transactions sans contact entre 2 coffres ZEN / Ḡ1.
Il fonctionne en reconnaissant des QR Codes. Par camera et reconnaissance visuelle (OpenCV) ou scanner USB.
Il permet d'indiquer le destinataire, saisir et vérifier le montant à transférer puis déclencher la transaction entre les coffres identifiés.
Avec OpenCV, on peut envisager utiliser en plus des QRCode, la reconnaissance de signes, d'objets ou de visages... N'importe quel identifant unique en fait ([le cas du morceau de musique](https://www.copylaradio.com/blog/blog-1/post/jukebox-interplanetaire-9)).
Mix entre le [Polar01d](https://wikifab.org/wiki/Polar01d) et [G1sms](https://www.g1sms.fr/) une bonne partie du code est déjà disponible. Il sera raccordé et synchronisé avec [l'essaim de noeuds IPFS [G1sms+]](https://pad.p2p.legal/s/G1sms-install).
### Ingrédients du prototype
* Clavier numérique ( £2.92 )
https://shop.pimoroni.com/products/keypad-12-button-1
* ~~Ecran: Inky pHAT ( £18.75 )~~
https://shop.pimoroni.com/products/inky-phat
TROP LENT A RAFFRAICHIR, IL A ETE RECYCLE EN https://pwnagotchi.ai/
* Ecran: Four Letter pHAT ( €12,60 )
https://shop.pimoroni.com/products/four-letter-phat
* Raspberry Pi Zero WH ( £21.70 )
https://shop.pimoroni.com/products/raspberry-pi-zero-wh-with-pre-soldered-header
* ~~Camera Module for Raspberry Pi Zero ( £11.67 )~~
https://shop.pimoroni.com/products/raspberry-pi-zero-camera-module?variant=37751082058
ON PEUT UTILISER UNE CAMERA POUR LIRE LES QR CODE MAIS UN SCANNER MANUEL EST PLUS SIMPLE ET PEU COUTEUX...
### COMPOSANTS ET CABLAGE
#### ECRAN INKY
![](https://i.imgur.com/jK5Nesf.png)
L'écran pour fonctionner utilise les ports 8, 10, 11, 17, 22, 27 (https://pinout.xyz/pinout/inky_phat#)
https://learn.pimoroni.com/tutorial/sandyj/getting-started-with-inky-phat
Code: https://github.com/pimoroni/inky
#### FOUR LETTER PHAT
![](https://pinout.xyz/resources/boards/fourletter-phat.png)
L'écran pour fonctionner utilise les ports 2 et 3 https://pinout.xyz/pinout/four_letter_phat#
Code: https://github.com/pimoroni/fourletter-phat
#### CLAVIER
![](https://i.imgur.com/CEyJ3br.jpg)
Le clavier a besoin de 7 ports GPIO. On adaptera ceux utilisés dans ce document (4, ~~17~~, 18, ~~22~~, 23, 24, 25) pour éviter les conflits (https://www.securipi.co.uk/keypad.pdf)
On gardera les mêmes branchements pour les lignes, et nous utiliserons d'autre ports GPIO pour les colonnes
class keypad():
# CONSTANTS
KEYPAD = [
[1,2,3],
[4,5,6],
[7,8,9],
["*",0,"#"]
]
ROW = [18,23,24,25]
COLUMN = [5,6,13]
#### CAMERA
Elle comporte une petite nappe avec les composants soudés dessus. Il va falloir trouver un boitier pour ranger tout ça...
![](https://i.imgur.com/XjcUVKV.jpg)
### Install Raspbian Stretch Lite + OpenCV3
1. Téléchargez "[Raspbian Stretch Lite](https://www.raspberrypi.org/downloads/raspbian/)" et flashez l'image sur une carte microSD ([de qualité!](https://www.amazon.fr/dp/B073JYC4XM?tag=z0d-21))
2. Installez Raspbian ([comment faire sur un RaspberryPi Zero sans écran?](https://projetsdiy.fr/comment-installer-raspbian-raspberry-pi-zero-sans-ecran-clavier/)).
3.
# ADD amrhf OPENCV3 repository
echo 'deb [trusted=yes] http://dl.bintray.com/yoursunny/PiZero stretch-backports main' |\
sudo tee /etc/apt/sources.list.d/bintray-yoursunny-PiZero.list
# Install system apps
sudo apt update
sudo apt upgrade
sudo apt install wiringpi python3-pip git imagemagick libzbar0 python-zbar python3-lxml jq
sudo apt install python3-opencv
# OLD STYLE: curl https://get.pimoroni.com/inkyphat | bash
sudo pip install font_fredoka_one font_intuitive font_hanken_grotesk
sudo pip install requests geocoder beautifulsoup4
sudo pip3 install inky pyzbar
sudo pip install inky
# Activate GPIO & Camera
sudo raspi-config # Activer les ports Camera, SPI et I2C
# REBOOT !!
sudo -s
# Silkaj
apt install libssl-dev libffi-dev
pip3 install silkaj
# Duniterpy
apt install libsodium-dev
pip3 install duniterpy
### Capturer et afficher une image sur InkyPHAT
**nano inky_display.py**
from inky import InkyPHAT
from PIL import Image, ImageFont, ImageDraw
inky_display = InkyPHAT("yellow")
inky_display.set_border(inky_display.WHITE)
img = Image.open("/home/pi/result.png")
inky_display.set_image(img)
inky_display.show()
Test de prise de vue et affichage:
raspistill -n -th none -t 50 -fli auto -br 80 -co 80 -w 212 -h 104 -o ./photo.png -e png && convert photo.png -colors 3 PNG8:result.png && python inky_display.py
raspistill -n -th none -h 212 -w 104 -o ./photo.png -e png && convert photo.png -rotate 90 -colors 3 -treedepth 3 -dither FloydSteinberg +remap PNG8:result.png && python inky_display.py
## Reconnaissance de QRCode
sudo pip3 install inky pyzbar
## IPFS
Les noeuds pourront synchroniser leurs données dans un essaim IPFS. Les développements ont été testés avec ipfs, ipfs-cluster, il faut maintenant utiliser [**textile**](https://docs.textile.io/connectors/games/) pour gérer portefeuilles comme comptes, wallets, threads...
# ARRET DU PROJET (07/2019)
Le développement de G1Tx aura permis de constater la trop grande lenteur de l'affichage eInk (+10s de raffarichissement!!) qui ne permet pas d'interaction correcte avec l'utilisateur.
Il apparait que l'association d'un [RPi 3B+](https://www.amazon.fr/gp/product/B07BDR5PDW?tag=z0d-21), d'une [Rpi Camera](https://www.amazon.fr/gp/product/B01ER2SKFS?tag=z0d-21) et d'un [Ecran tactile](https://www.amazon.fr/gp/product/B07M8QFKHK?tag=z0d-21) permettra de gérer l'affichage et le clavier de façon plus agréable.
En cet été 2019, je n'ai pas les moyens d'investir pour fabriquer un environnement de test/prod nécessaire pour continuer dans de bonnes conditions...
Nous verrons comment les choses évolueront...
# REPRISE DU PROJET (12/2019)
G1Tx v0.1 réalisé avec le [FOUR-LETTER-PHAT](#FOUR-LETTER-PHAT)
https://www.youtube.com/watch?v=hr9PGw8vqa8&t=20s