Programming the Pi2Go Mk 2
Preparing your Raspberry Pi
Before you can install the Pi2Go Mk 2 software, you will need to ensure that your Raspberry Pi is up and running and connected to the internet. You will need to be able to see the desktop or console (either using direct connections, or SSH or VNS over the network).
NOTE: Please use Raspberry Pi OS (Legacy, 32-bit) – i.e. Bullseye version
Setting up a Raspberry Pi is not covered here. It is best to get the information from the source at Raspberry Pi
You will also need to enable SPI and I2C. Do this from raspi-config
sudo raspi-config
Select interfaces and enable both SPI and I2C. Then reboot.
ScratchGPIO is not supported in recent RPi OS builds
Simplesi (Simon Walters) has generously included Pi2Go Mk2 in the list of directly supported devices in ScratchGPIO.
Visit this blog post for installation and coding tips
Installing the Pi2Go Mk2 Python2 Software
NB. Note that this software is still in Python 2. If you are using Python3, then note that Python 3 will not work in some of the scripts due to Print statements. You can easily change the code by following the porting guide here
First you will need to prepare your Pi for the Fireleds (fully compatible with neopixels). Install the rpi_ws281x package (this works with Raspberry Pi OS Legacy, 32-bit – i.e. Bullseye version):
Download the Python library module and example software for Pi2Go Mk2 with
wget https://4tronix.co.uk/pi2go2.sh -O pi2go2.sh
bash pi2go2.sh
This installs the following, which should be run in Python 2 for now (unless otherwise stated)
- ipd.desktop in home/pi/.config/autostart which will start the IP Display on boot. This will silently fail if the optional IP Display is not plugged into either port.
- Creates a folder home/pi/pi2go2 for all the example files and library module pi2go2.py (the main library module)
- motorTest.py to demonstrate driving the motors. Must be run in a terminal, not from an IDE like Idle or Thonny. Use LXTerminal for this
- stepTest.py to demonstrate running motors controlled by the wheel sensors. Must be run in a terminal, not from an IDE like Idle or Thonny. Use LXTerminal for this
- adc.py shows the light sensor values and raw battery voltage
- ledTest.py flashes all LEDs through Red, Green, Blue and White. This must be run using sudo. ie: sudo python3 ledTest.py
- rainbow.py sets the LEDs to rainbow colours (static, but flashes every 10 seconds). This must be run using sudo in Python 3. ie: sudo python3 rainbow.py
- lineTest.py shows the value of the line sensors
- lineFollower.py is very basic line follower program
- sonarTest.py shows the distance in cm for an obstacle using the optional ultrasonic breakout in either or both expansion slots
- ipd03.py this is the program run on boot up to display the IP address of the Pi to make it easy to connect to using VNC or SSH
Using the Pi2go2.py Library Module
To use this module, you must first import it into your program using
import pi2go2
Then, before using any other functions you should call the init ( ) function to initialise all the variables used by the library. The init ( ) function has an optional parameter which is the default brightness of the LEDs. If omitted, this defaults to 40. So the following call will initialise the library and set the default brightness to 100:
pi2go2.init (100)
Hot Tip:
As a special case, if you set the brightness to zero, then the LEDs are not initialised. As this would require use of the sudo command, it can be beneficial to call init (0) so that your program can be run without using sudo.
When your program has finished, it is good practice to close down everything tidily by calling:
pi2go2.cleanup ( )
Motor Functions
- stop ( ): Stops both motors – coast slowly to a halt
- brake ( ): Stops both motors – brakes quickly
- forward (speed): Sets both motors to move forward at speed. 0 <= speed <= 100
- reverse (speed): Sets both motors to reverse at speed. 0 <= speed <= 100
- spinLeft (speed): Sets motors to turn opposite directions at speed. 0 <= speed <= 100
- spinRight (speed): Sets motors to turn opposite directions at speed. 0 <= speed <= 100
- turnForward (leftSpeed, rightSpeed): Moves forwards in an arc by setting different speeds. 0 <= leftSpeed,rightSpeed <= 100
- turnreverse (leftSpeed, rightSpeed): Moves backwards in an arc by setting different speeds. 0 <= leftSpeed,rightSpeed <= 100
Wheel Sensor Functions
- stepForward (speed, steps): Moves forwards specified number of steps, then stops
- stepReverse (speed, steps): Reverses specified number of steps, then stops
- stepSpinL (speed, steps): Spins left specified number of steps, then stops
- stepSpinR (speed, steps): Spins right specified number of steps, then stops
RGB LED Functions
- setColor (color): Sets all LEDs to color – requires show()
- setPixel (ID, color): Sets pixel ID to color – requires show()
- show ( ): Updates the LEDs with state of LED array
- clear ( ): Clears all LEDs to off – requires show()
- rainbow ( ): Sets the LEDs to rainbow colors – requires show()
- fromRGB (red, green, blue): Creates a color value from R, G and B values
- toRGB (color): Converts a color value to separate R, G and B
- wheel (pos): Generates rainbow colors across 0-255 positions
IR Sensor Functions
- irLeft ( ): Returns state of Left IR Obstacle sensor
- irRight ( ): Returns state of Right IR Obstacle sensor
- irAll ( ): Returns true if either of the Obstacle sensors are triggered
- irLeftLine ( ): Returns state of Left IR Line sensor
- irRightLine ( ): Returns state of Right IR Line sensor
UltraSonic Function
- getDistance (sonar = 0). Returns the distance in cm to the nearest reflecting object. 0 == no object. Sonar 0 is the front connector, Sonar=1 is the side connector. If you don’t include the parameter it defaults to 0 (front)
Analog and Light Sensor Functions
- getLight (Sensor). Returns the value 0..1023 for the selected sensor, 0 <= Sensor <= 3
- getLightFL ( ). Returns the value 0..1023 for Front-Left light sensor
- getLightFR ( ). Returns the value 0..1023 for Front-Right light sensor
- getLightBL ( ). Returns the value 0..1023 for Back-Left light sensor
- getLightBR ( ). Returns the value 0..1023 for Back-Right light sensor
- getBattery ( ). Returns the voltage of the battery pack (>7.2V is good, less is bad)
Switch Function
- getSwitch ( ). Returns the value of the tact switch: True == pressed