Taula de continguts:

Capture the Box: 8 passos
Capture the Box: 8 passos

Vídeo: Capture the Box: 8 passos

Vídeo: Capture the Box: 8 passos
Vídeo: Hands-on Hacking Demo | CTF - Capture the Flag in 15 Minutes! 2024, Desembre
Anonim
Captura la caixa
Captura la caixa
Captura la caixa
Captura la caixa

Capture The Box és un joc de formació en equip que podeu jugar amb amics del vostre barri.

L'objectiu és capturar la caixa i mantenir-la en la seva possessió el major temps possible, mentre que altres jugadors intenten anar-la a escapar del seu porxo o jardí davanter.

Aquest joc utilitza GPS per localitzar la caixa i etiquetes RFID per identificar els jugadors. Es pot afegir un LDR opcional per fer coincidir la intensitat de la pantalla de matriu de punts amb el percentatge de llum de la zona.

Subministraments

Microcontroladors i ordinadors

  • Raspberry Pi
  • Arduino (Mega) He triat un Arduino Mega sobre un Uno normal, perquè té molts més pins. Això és necessari perquè estem utilitzant un escut Dragino LoRa, que ens deixaria massa pocs pins digitals en utilitzar un UNO. CONSELL: El millor és utilitzar-ne un de genuí, perquè els clons xinesos no sempre funcionen com s’esperava.

Sensors i mòduls

  • 4 mòduls MAX7219 Dot Matrix Connecteu DOUT a DIN, CS a CS, CLK a CLK …
  • Resistència dependent de la llum (10 K) + resistència (10 K)
  • Mòdul GPS NEO-7M (o similar) Estic fent servir el VMA430 de Velleman
  • Mòdul RFID RC522 + algunes targetes / insígnies RFID

Per utilitzar LoRa (tecnologia sense fils)

Escut Dragino Lora

Sensors i mòduls opcionals

Pantalla LCD Per mostrar l'adreça IP del Raspberry Pi

Per fer una configuració de prova

Una taula de treball i cables Dupont (home-home

Opcional (carcassa)

  • Soldador
  • Una antiga caixa d’eines
  • Materials per a la impressió 3D
  • Uns taulons de fusta prims
  • Alguns cargols i femelles (que poden cabre en forats Arduino). Els meus cargols tenen un diàmetre d’uns 3 mm.

Es pot trobar un preu estimat a la llista de materials (llista de materials), inclosa a continuació.

Pas 1: Configuració del Raspberry Pi

El Raspberry Pi és el cor del projecte.

Executarà el frontend, el backend i la base de dades. També s’encarregarà de la comunicació entre el backend i l’Arduino.

Per tal que puguem utilitzar el Raspberry Pi, haurem de fer el següent:

Primera part: instal·leu Raspbian en un Raspberry Pi

Aquí es pot trobar un tutorial sobre com fer-ho:

Part 2: Instal·leu Raspbian en un Raspberry Pi Configuració del WiFi de casa.

Això es pot fer amb wpa_passphrase "YourNetwork" "YourSSID" >> /etc/wpa_supplicant/wpa_supplicant.conf

Reinicieu el Pi i hauríeu de veure una adreça IP quan escriviu ifconfig

Part 3: Instal·leu el servidor web i la base de dades

Un cop tingueu el Pi en funcionament, és millor canviar la vostra contrasenya, cosa que es pot fer amb l’ordre passwd.

Un cop fet això, seguiu instal·lant Apache, PHP, MariaDB i PHPMyAdmin.

Apache, PHP sudo apt install apache2 -y sudo apt install php libapache2-mod-php -y

MariaDB sudo apt install mariadb-server mariadb-client -y sudo apt install php-mysql -y sudo systemctl reinicia apache2.service

PHPMyAdminsudo apt instal·la phpmyadmin -y

No oblideu establir una contrasenya segura de MySQL.

Part 4: Instal·lació de les biblioteques Python necessàries

Per al backend, necessitarem algunes biblioteques. Es poden instal·lar mitjançant l'ordre pip3.

pip3 instal·la mysql-connector-python

pip3 instal·la flask-socketio

pip3 instal·lar flask-cors

pip3 install geventpip3 install gevent-websocket

pip3 instal·la ttn

Pas 2: distribució de l'electrònica

Disposició de l'electrònica
Disposició de l'electrònica
Disposició de l'electrònica
Disposició de l'electrònica

Per fer funcionar aquest projecte, hem de connectar tota l’electrònica.

L'escut LoRa es pot posar fàcilment al seu lloc. Només cal alinear els pins amb els pins del vostre Arduino.

Les altres connexions es descriuen al meu esquema de Fritzing. Es pot descarregar aquí:

Pas 3: dissenyar la base de dades

Disseny de la base de dades
Disseny de la base de dades

Per poder emmagatzemar totes les dades del joc i dels sensors, he fet unes quantes taules:

mesurament i sensor Les mesures dels sensors, que es troben a les taules de sensors. Conté una referència al sensor, el valor de la mesura (per exemple, coordenades: 51.123456; 3.123456) i un identificador de joc opcional (si un joc estava actiu durant la mesura).

speler Els noms dels jugadors i l’ID de la seva insígnia RFID. S'afegeix un moderador de camp opcional, aquesta persona pot modificar el joc (per exemple, aturar-lo abans de l'hora).

spelLa informació del joc (hora d’inici i finalització).

spel_has_speler La relació entre spel i speler. Aquí és on els jugadors estan assignats a un joc.

bezit En aquesta taula, es desa la puntuació. Conté la identificació del joc, la identificació del jugador, el temps en què va robar la caixa i el temps en què la va perdre (quan algú la roba o quan finalitza la partida). Restant l'hora d'inici de l'hora final, podeu calcular la puntuació que va obtenir d'aquesta captura.

Es pot trobar una exportació de la base de dades al meu GitHub (https://github.com/BoussonKarel/CaptureTheBox)

Obriu el sql a PHPMyAdmin / MySQL Workbench i executeu-lo. Ara s’hauria d’importar la base de dades.

Pas 4: configurar un compte a TTN

Pas 1: registreu-vos per obtenir un compte a TTN i creeu una aplicació

Registreu-vos per obtenir un compte a TheThingsNetwork i, a continuació, aneu a Consola> Afegeix aplicació.

Trieu un nom per a la vostra aplicació i feu clic a Afegeix una aplicació.

Pas 2: registreu un dispositiu

Quan hàgiu fet la sol·licitud, aneu a Registrar dispositiu.

Trieu un identificador de dispositiu, pot ser el que vulgueu (sempre que sigui un cas de serp) i feu clic a Registra.

Feu clic a la icona Generar a Dispositiu EUI, de manera que TTN en generarà una.

Pas 3: escriviu les vostres credencials

Ara aneu al dispositiu i feu clic a la icona de codi al costat de Dispositiu EUI, Aplicació EUI i Clau d'aplicació. Ara hauria d'aparèixer com una matriu de bytes.

Abans de copiar, feu clic al botó Canvia i assegureu-vos que el Dev EUI i l'aplicació EUI siguin LSB FIRST.

La vostra clau d'aplicació hauria de romandre MSB FIRST (no canvieu això).

Necessitareu aquestes claus al següent pas: Configuració de l'Arduino.

Pas 4: escriviu la clau d'accés a l'aplicació

Ara necessitarem una clau més per configurar MQTT al nostre Raspberry Pi.

Aneu a la vostra aplicació i desplaceu-vos cap avall fins a Tecles d'accés.

Ho necessitareu al pas de Backend.

Pas 5: Configuració de l'Arduino

El codi Arduino també es pot trobar al meu GitHub, a Arduino (https://github.com/BoussonKarel/CaptureTheBox)

Aquest codi es divideix en diverses pestanyes per mantenir-lo organitzat.

main.ino El codi principal: declaracions de pins, setup () i loop ()

0_LoRa.ino Aquest codi gestiona la comunicació mitjançant LoRa.

Posa les dades de les etiquetes LDR, GPS i RFID en una matriu de 13 bytes i les envia a TheThingsNetwork.

1_LDR.ino Utilitzant analogRead (), mesura la quantitat de voltatge sobre la resistència dependent de la llum.

Tot seguit, es converteix en un percentatge de llum (0 no és res, 100 és una llanterna de mòbil).

2_GPS.ino: utilitza la comunicació sèrie mitjançant TX1 i RX1 (Serial1).

Utilitza missatges NMEA (els missatges $ GPRMC per ser precisos) per trobar la latitud i la longitud del quadre.

3_RFID.ino Utilitzant la biblioteca MFRC522, aquest codi busca noves etiquetes RFID. Sempre que n’hi hagi, s’emmagatzema com a RFID_lastUID.

4_DotMatrix.inoAquest codi s'utilitza per inicialitzar i configurar la visualització de matriu de punts. Conté definicions per a l'animació de càrrega, etc.

Configuració

Abans de poder carregar aquest codi al vostre Arduino, haureu d’instal·lar algunes biblioteques.

La biblioteca Arduino-LMIC de matthijskooijman (https://github.com/matthijskooijman/arduino-lmic)

La biblioteca MFRC522 per al lector RFID (https://github.com/miguelbalboa/rfid)

Ara aneu a main.ino i canvieu DEVEUI, APPEUI i APPKEY per les que heu copiat el darrer pas.

Pas 6: Configuració del backend

El backend d’aquest projecte es pot trobar al meu GitHub, a RPI> Backend (https://github.com/BoussonKarel/CaptureTheBox).

Com funciona?

  1. Cada 10 segons, el codi busca un joc actiu. Si se’n troba un, es desa en una variable anomenada huidigSpel (currentGame)
  2. Si el mode s’estableix en sèrie, s’utilitzarà un cable entre l’Arduino i el Pi. El Pi examina els valors del LDR i del GPS. L'Arduino respon amb un format JSON. Les etiquetes RFID s'envien sempre que es presenten. Aquest mode només s'ha utilitzat amb finalitats de desenvolupament i ja no és necessari.
  3. Si el mode s'estableix en LoRa, es crea un client MQTT que activa una devolució de trucada sempre que TTN rep dades LoRa. Conté dades LDR, GPS i RFID.
  4. El frontend pot recuperar dades mitjançant els punts finals de l'API. La majoria de les dades es recuperen mitjançant huidigSpel.id. Les dades es retornen en format JSON mitjançant jsonify ()

Modifiqueu la configuració Aneu a secrets.py i empleneu el nom de la vostra aplicació LoRa i la vostra clau d’accés (heu anotat anteriorment).

Aneu a config.py i empleneu les vostres credencials de base de dades (com ara contrasenya, usuari …)

Configurar-lo com a servei Proveu d’executar app.py, un cop hàgiu confirmat que funciona, el podem utilitzar com a servei. Això iniciarà automàticament el codi en segon pla quan inicieu el vostre pi.

Per fer-ho, còpia ctb_service.service a /etc/systemd/system/ctb_service.service. sudo cp ctb_service.service /etc/systemd/system/ctb_service.service

Ara activeu-lo mitjançant systemctl enable ctb_service.service

Si heu de fer alguns canvis al codi, podeu aturar-lo fàcilment mitjançant systemctl stop (es reiniciarà en reiniciar-lo) o desactivar-lo (impedir que s’iniciï automàticament) mitjançant la desactivació de systemctl.

Si heu de consultar els registres (a causa d’errors), podeu utilitzar journalctl -u ctb_service.service.

Podeu trobar més informació sobre els serveis aquí:

Pas 7: Configuració del frontend

Com és habitual, frontend es pot trobar al meu GitHub, a RPI> Frontend (https://github.com/BoussonKarel/CaptureTheBox)

Enganxeu-lo a la carpeta / var / html del vostre Raspberry Pi.

Conté totes les pàgines web necessàries per al joc.

També conté un script per comunicar-se amb el backend (tant en temps real com mitjançant l'ús dels punts finals de l'API).

Pas 8: afegir una carcassa

Afegir una carcassa
Afegir una carcassa
Afegir una carcassa
Afegir una carcassa

Per al cas, he utilitzat una caixa d’eines antiga, juntament amb els següents materials / tècniques:

  • Impressió 3D
  • Escuma per mantenir la bateria al seu lloc
  • Taulons de fusta reciclats
  • Cola calenta
  • Cargols i femelles

El que feu amb el vostre cas és la vostra elecció! Et donaré llibertat artística.

Per inspiració, he afegit algunes fotografies del meu cas (acabat).

Recomanat: