We thought that it would be fun to try and use an old PlayStation Portable (PSP) on some Arduino and Pi Projects. If you don’t a have PSP you can usually find a used one at a good price.
Some smart people were able to modify or “mod” the PSP firmware so that it is possible to run open source applications on the PSP. We tried using Python, Lua, sdlBasic and SSH to talk between our PSP and our Arduinos and Pi’s, but none of these methods were simple or 100% reliable. In the end we found that basic built-in PSP Web browser worked the best and it didn’t require a ‘moded’ PSP.
PSP Setup and Limitations
We were using an older PSP-1000 so if you have a newer PSP GO or PSP Vita you may not have the same limitation that we found. However we think if you stick to our ‘worst case’ setup you should be good to go.
Our recommended setup was:
- Simple Web Pages
- No Browser Cache
- Simple Wireless Network
For the PSP-1000 the web pages had to be very simple, no CSS (Cascading Style Sheets) and no advanced HTML tagging. We had hoped to show Node-Red Web pages from the PI but this was not possible.
In our testing we found that it was important to turn off the browser cache, otherwise we found that our commands would only work once. To turn off the PSP browser cache, go into the PSP browser and select “Tools”, then “Settings”, and “Cache Settings”.
Our older PSP-1000 had some problems with the newer WPA2 wireless encryption, so to simplify things we created a small standalone open network. For Arduino projects this isn’t a problem because the Arduino can be made into a standalone access point. On Pi projects where you are using an existing wireless network you might need to do some tweeking to add a guest account.
To add a new connection on the PSP go to the “Network Settings” and select “Infrastructure Mode”. Then select “[New Connection]” and “Scan”. The scan will only show networks that the PSP is able to connect to.
A Simple Web Form
An HTML form supports two types of action, a POST and a GET. The GET method is the simpler (but less secure) approach and it passes parameters on the URL command line.
Below is a simple Web form:
<html> <body> <h1>Click a button to control the car</h1> <form action='GO' method='GET' > <INPUT TYPE='submit' VALUE="GO" > </form> <form action='STOP' method='GET' > <INPUT TYPE="submit" VALUE="STOP" > </form> <form action='LEFT' method='GET' > <INPUT TYPE='submit' VALUE="LEFT" > </form> <form action='RIGHT' method='GET' > <INPUT TYPE="submit" VALUE="RIGHT" > </form> </body> </html>
An Arduino Web Server
To create Arduino WiFi projects the ESP8266 based modules are low cost way to go. There are some good ESP8266 libraries and the examples are fairly easy to follow. The ESP8266 module can be wired into an Arduino Uno/Nano/Mega module or you can by buy boards with the ESP8266 chip integrated in. For our testing we used an older WeMo board, but other options like the NodeMCU, Adafruit HUZZAH or even the Arduino Yún could be used.
The ESP8266WebServer library has a simple standalone access point example. We modified this example (WifiAccessPoint) to include HTML form tags for all our required action.
#include <ESP8266WiFi.h> #include <WiFiClient.h> #include <ESP8266WebServer.h> int pinleft = 12; int pinright = 13; int pinfront = 14; /* Set these to your desired credentials. */ const char *ssid = "MY8266"; const char *password = ""; char *webpage = "<html><head><title>My8266 Control</title> \ </head><body> \ <h1>Click a button to control the car</h1> <hr> \ <form action='/go' method='GET' > \ <input type='submit' style='font-size:150px;color:lime' value='GO'></form> \ <form action='/stop' method='GET'> \ <input type='submit' style='font-size:150px;color:red' value='STOP'></form> \ <form action='/left' method='GET'> \ <input type='submit' style='font-size:150px' value='LEFT'></form> \ <form action='/right' method='GET'> \ <input type='submit' style='font-size:150px' value='RIGHT'></form> \ </body></html>"; ESP8266WebServer server(80); /* Just a little test message. Go to http://192.168.4.1 in a web browser * connected to this access point to see it. */ void handleRoot() { Serial.println("Base page"); server.send(200, "text/html", webpage); } void go() { Serial.println("Go forward"); server.send(200, "text/html", webpage); digitalWrite(pinleft,LOW); digitalWrite(pinright,LOW); digitalWrite(pinfront,LOW); } void stop() { Serial.println("Stop"); server.send(200, "text/html", webpage); digitalWrite(pinleft,HIGH); digitalWrite(pinright,HIGH); digitalWrite(pinfront,HIGH); } void left() { Serial.println("Go left"); server.send(200, "text/html", webpage); digitalWrite(pinleft,HIGH); digitalWrite(pinright,LOW); digitalWrite(pinfront,HIGH); } void right() { Serial.println("Go right"); server.send(200, "text/html", webpage); digitalWrite(pinleft,LOW); digitalWrite(pinright,HIGH); digitalWrite(pinfront,HIGH); } void setup() { delay(1000); Serial.begin(115200); Serial.println(); pinMode(pinleft,OUTPUT); pinMode(pinright,OUTPUT); pinMode(pinfront,OUTPUT); digitalWrite(pinleft,HIGH); digitalWrite(pinright,HIGH); digitalWrite(pinfront,HIGH); Serial.print("Configuring access point..."); /* You can remove the password parameter if you want the AP to be open. */ WiFi.softAP(ssid, password); IPAddress myIP = WiFi.softAPIP(); Serial.print("AP IP address: "); Serial.println(myIP); server.on("/", handleRoot); server.on("/go",go); server.on("/stop",stop); server.on("/left",left); server.on("/right",right); server.begin(); Serial.println("HTTP server started"); } void loop() { server.handleClient(); }
One thought on “PSP Controlled Arduino Airboat”