Roboten Counter-Strike (13 / 16 steg)
Steg 13: Raspberry Pi Server kod - ställa in
I det här avsnittet ska vi gå över koden för servern. Koden är ansluten, men låt oss gå igenom varje del av koden så att du kan ändra den för att passa dina behov.
# Grundläggande Pi bibliotek
Importera tid
från att importera sömn
importera termios, fcntl, sys, os
# För PWM
importera RPi.GPIO som GPIO
från RPIO importera PWM
# För socketanslutningar
import socket
Denna första del är för att importera bibliotek vi behöver.
Nästa, vi ska ställa upp våra GPIO stift (Observera att dessa är baserade på Pi revidering-2 layouter. Kontrollera vilken ändring du har här, och vilken layout du har här). Se till att du sätter dem i rätt stift eller ändra din pin konfigurationer korrekt nedan:
# Ställ in stift
# OBSERVERA - DESSA ÄR BASERADE PÅ PI REVIDERING 2 GPIO STIFTTILLDELNINGAR
PIN_RIGHT_POWER = 7 # om detta, så skicka ström till höger trampa
PIN_RIGHT_DIRECTION = 11 # om detta, då relä för rätt slitbanan blir på (skicka slitbanan i backen)
PIN_LEFT_POWER = 13 # om detta, och sedan skicka ström till vänster trampa
PIN_LEFT_DIRECTION = 15 # om detta, då relä för vänster slitbanan blir på (skicka slitbanan i backen)
# Initiera dessa GPIO pins som GPIO. UTE
GPIO.setmode (GPIO. STYRELSEN)
GPIO.setup (7, GPIO. OUT)
GPIO.setup (11, GPIO. OUT)
GPIO.setup (13, GPIO. OUT)
GPIO.setup (15, GPIO. OUT)
Efter det ska vi initiera våra servomotorer (Observera kommentera GPIO BCM layout):
# Starta servo-biblioteket
servo = PWM. Servo()
# Observera - RPIO. PWM pin outs hänvisa till BCM GPIO layout nummer
# Se: < en href = "http://www.hobbytronics.co.uk/raspberry-pi-gpio-pinout" >< en href = "http://www.hobbytronics.co.uk/raspberry-pi-gpio-p... < / a" > http://www.hobbytronics.co.uk/raspberry-pi-gpio-p...</a>>
# Exempel: Pin 18 är faktiskt BCM GPIO 24 på revidering 2 Pi (5th från botten till höger)
# Initiera servo positionen för pistol
POS = 1500
Denna nästa avsnitt, vi ställer in några hjälpare metoder så att vi inte behöver manuellt ringa stift varje gång. Detta hjälper oss att hålla vår kod torr och återanvändbara. Vi kommer bara lägga en stympad version här, eftersom det är ganska självförklarande i koden kommentarerna:
# Definiera funktioner för stift
# Slå på en PIN-kod
def powerOn(pin):
GPIO.output (pin, GPIO. HÖG)
returnera
# Inaktivera en PIN-kod
def powerOff(pin):
GPIO.output (pin, GPIO. LÅG)
# time.sleep(1)
returnera
# Eld pistolen. Observera - RPIO PWM används den
def fireGun():
# Se anmärkning om BCM GPIO pin
servo.set_servo (23, 1800)
Sleep(0.5)
servo.set_servo (23, 1000)
returnera
# Set tornet till en position med PWM
def turretX(pos):
servo.set_servo (24, pos)
returnera
# Ställ in rätt slitbanan i forawrd läge
def rightForward():
powerOff(PIN_RIGHT_DIRECTION)
# time.sleep(0.5)
Sleep(0.5)
returnera
.
.
.
.
# Vända fordonet vänster
def spinLeft(duration=1):
powerOn(PIN_LEFT_DIRECTION)
Sleep(0.2)
powerOn(PIN_LEFT_POWER)
Sleep(duration)
fullStop()
returnera
Slutligen, den sista biten av inrättats innan roligt: sockets. I detta projekt, kommer att vi använda en grundläggande TCP-socket för att skicka kommandon till våra Pi. Du behöver inte att förstå så mycket om hur detta fungerar, men i grund och botten innebär detta att någon på din networkcan bara skicka ett meddelande till värd/port här Pi, så länge de har IP och portnummer.
Vi körde detta projekt på våra egna hem Wifi. För att få den lokala IP-adressen, kör detta kommando på din Pi:
ifconfig/alla
Och IP-adress kopplad till WLAN bör din wifi. Vår var 10.0.0.101. Ersätt variabeln "värd" nedan med din IP-adress:
# HYLSNYCKELSATS UPP
# Vi använder TCP för att kommunicera med Pi
s = socket.socket() # skapa ett socket objekt
s.Setsockopt (socket. SOL_SOCKET, uttag. SO_REUSEADDR, 1) # hålla uttaget öppen att återanvända
Host = "10.0.0.101" # lokala IP-adress din Pi. Kör ' ifconfig/all "att se din WiFi-adress
Port = 12345 # reservera en port för din tjänst.
s.BIND (('', port)) # binda till port och acceptera anslutningar från någonstans < /p >< p > s.listen(5) # nu vänta för klientanslutning, med en eftersläpning köns storlek av 5 < /p >< p > # upprätta anslutning
anslutning, adress = s.accept()
skriva ut "Fick en anslutning från", adress
meddelande = "Tack för att ansluta till" + str(host) + "port" + str(port)
Connection.send(Message)
Detta avslutar setup del av koden. Nästa steg kommer att gå igenom den faktiska funktionell del av programmet.