Stap 13: Raspberry Pi Server Code - instellen
In deze sectie gaan we over de code voor de server. De code is gekoppeld, maar laten we lopen door elk deel van de code, zodat u kunt aanpassen aan uw behoeften.
# Basic Pi librariesimport timefrom time import sleepimport termios, fcntl, sys, os # For PWMimport RPi.GPIO as GPIOfrom RPIO import PWM # For socket connectionsimport socket
Dit eerste deel is voor het importeren van de bibliotheken die we nodig hebben.
Stel we vervolgens op onze GPIO pinnen (Let op dat deze zijn gebaseerd op de Pi revisie-2 lay-outs. Controleer welke herziening u moet hier, en welke lay-out hebt hier). Zorg ervoor dat u hen aan te op de juiste pinnen sluiten, of veranderen van uw pin-configuratie correct hieronder:
# Set up pins# NOTE - THESE ARE BASED ON PI REVISION 2 GPIO PINOUTS PIN_RIGHT_POWER=7 # if this is on, then send power to the right treadPIN_RIGHT_DIRECTION=11 # if this is on, then relay for the right tread will be on (sending the tread into reverse) PIN_LEFT_POWER=13 # if this is on, then send power to the left treadPIN_LEFT_DIRECTION=15 # if this is on, then relay for the left tread will be on (sending the tread into reverse) # Initialize these GPIO pins as GPIO.OUTGPIO.setmode(GPIO.BOARD)GPIO.setup(7, GPIO.OUT)GPIO.setup(11, GPIO.OUT)GPIO.setup(13, GPIO.OUT)GPIO.setup(15, GPIO.OUT)
Na dat initialiseren we onze servomotoren (Let op het commentaar op de GPIO BCM-indeling):
# Initialize the servo libraryservo = PWM.Servo() # NOTE - the RPIO.PWM pin outs refer to the BCM GPIO layout numbers# See: <a href="http://www.hobbytronics.co.uk/raspberry-pi-gpio-pinout"> <a href="http://www.hobbytronics.co.uk/raspberry-pi-gpio-p...</a"> http://www.hobbytronics.co.uk/raspberry-pi-gpio-p...</a>># Example: Pin 18 is actually BCM GPIO 24 on the Revision 2 Pi (5th from bottom on the right) # Initialize the servo position for gunpos=1500
Dit volgende deel, we instelt aantal helper methodes zodat we niet nodig handmatig elke keer dat Bel pinnen. Dit helpt ons houden onze code droog en herbruikbare. We zullen alleen post een beknotte versie hier, aangezien het is redelijk duidelijk in de commentaar bij de code:
# Define functions for pins # Turn on a pindef powerOn(pin): GPIO.output(pin, GPIO.HIGH) return # Turn off a pindef powerOff(pin): GPIO.output(pin, GPIO.LOW) # time.sleep(1) return # Fire the gun. NOTE - RPIO PWM uses the def fireGun(): # See note about about BCM GPIO pin servo.set_servo(23, 1800) sleep(0.5) servo.set_servo(23, 1000) return # Set the turret to a position using PWMdef turretX(pos): servo.set_servo(24, pos) return # Set the right tread into forawrd modedef rightForward(): powerOff(PIN_RIGHT_DIRECTION) # time.sleep(0.5) sleep(0.5) return . . . . # Turn the vehicle leftdef spinLeft(duration=1): powerOn(PIN_LEFT_DIRECTION) sleep(0.2) powerOn(PIN_LEFT_POWER) sleep(duration) fullStop() return
Ten slotte, het laatste stukje van instellen voordat de echte pret: sockets. In dit project, zullen we een fundamentele TCP socket gebruiken voor het verzenden van opdrachten naar onze Pi. U hoeft niet te begrijpen te veel over hoe dit werkt, maar in feite, dit betekent dat iedereen op uw networkcan slechts een eenvoudige boodschap aan de host/poort van deze Pi, zolang zij de IP en poortnummer.
We liep dit project op onze eigen huiswifi. Als u het lokale IP-adres, voert u deze opdracht op uw Pi:
ifconfig/all
En het IP-adres gekoppeld aan WLAN moet uw wifi. Onze was 10.0.0.101. Vervang de 'host' variabele hieronder met uw ip-adres:
# SOCKET SET UP # We use TCP to communicate with the Pis = socket.socket() # Create a socket objects.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # Keep the socket open to re-usehost = '10.0.0.101' # The local IP address of your Pi. Run `ifconfig /all` to see your WiFi addressport = 12345 # Reserve a port for your service.s.bind(('', port)) # Bind to the port and accept connections from anywhere</p><p>s.listen(5) # Now wait for client connection, with a backlog queue size of 5</p><p># Establish connectionconnection, address = s.accept()print "Got a connection from", addressmessage = "Thanks for connecting to " + str(host) + " at port " + str(port)connection.send(message)
Dit concludeert het setup-gedeelte van de code. De volgende stap zal u via de werkelijke functioneel onderdeel van het programma lopen.