pimoroni-pico/libraries/pico_explorer
Phil Howard 1b68e498d4 ST7789/PicoGraphics: Update docs. 2022-06-13 20:12:03 +01:00
..
CMakeLists.txt
README.md ST7789/PicoGraphics: Update docs. 2022-06-13 20:12:03 +01:00
pico_explorer.cmake
pico_explorer.cpp
pico_explorer.hpp

README.md

Pico Explorer Base

Pico Explorer Base straps a whole host of physical computing goodies to your Pico - a vibrant 1.14" (240x240) IPS LCD screen, four switches, a piezo buzzer/speaker and a DRV8833 motor driver, as well as handy accessible general purpose inputs and outputs and a built in breadboard.

We've included helper functions to handle every aspect of drawing to the screen and interfacing with the buttons, piezo and motor driver. See the library reference for details.

Example Program

The following example shows how to set up all of Pico Explorers functions:

#include "pico_explorer.hpp"
#include "drivers/st7789/st7789.hpp"
#include "libraries/pico_graphics/pico_graphics.hpp"
#include "button.hpp"
#include "motor.hpp"
#include "analog.hpp"

using namespace pimoroni;

// Display driver
ST7789 st7789(PicoExplorer::WIDTH, PicoExplorer::HEIGHT, ROTATE_0, false, get_spi_pins(BG_SPI_FRONT));

// Graphics library - in RGB332 mode you get 256 colours and optional dithering for ~56K RAM.
PicoGraphics_PenRGB332 graphics(st7789.width, st7789.height, nullptr);

// Buttons
Button button_a(PicoExplorer::A);
Button button_b(PicoExplorer::B);
Button button_x(PicoExplorer::X);
Button button_y(PicoExplorer::Y);

// Motors
Motor motor1(PicoExplorer::MOTOR1_PINS);
Motor motor2(PicoExplorer::MOTOR2_PINS);

// Analog
Analog adc0(PicoExplorer::ADC0_PIN);
Analog adc1(PicoExplorer::ADC1_PIN);
Analog adc2(PicoExplorer::ADC2_PIN);


int main() {
  motor1.init();
  motor2.init();

  while(true) {
    // update screen
    st7789.update(&graphics);
  }
}

Reference

PicoGraphics

Pico Explorer uses our Pico Graphics library to draw graphics and text. For more information read the Pico Graphics function reference..

Please note that the backlight on Pico Explorer is not dimmable (we needed the pins to hook up other functions) so the set_backlight function is not available for this board.

Constants

Buttons

The four buttons, A, B, X and Y have corresponding constants set to their respective GPIO pins.

PicoExplorer::A = 12;
PicoExplorer::B = 13;
PicoExplorer::X = 14;
PicoExplorer::Y = 15;

ADC Channels

The three ADC channels are defined as ADC0_PIN, ADC1_PIN and ADC2_PIN, and should be used with an instance of the Analog class:

PicoExplorer::ADC0_PIN = 26;
PicoExplorer::ADC1_PIN = 27;
PicoExplorer::ADC2_PIN = 28;

GPIO

The 8 general purpose IO pins on the lower Pico Explorer are GP0 through GP7, we've created constants for you to identify them easily.

PicoExplorer::GP0 = 0;
PicoExplorer::GP1 = 1;
PicoExplorer::GP2 = 2;
PicoExplorer::GP3 = 3;
PicoExplorer::GP4 = 4;
PicoExplorer::GP5 = 5;
PicoExplorer::GP6 = 6;
PicoExplorer::GP7 = 7;

You should use Pico SDK's gpio_get to read a pin, eg:

bool pin_state = gpio_get(pico_explorer.GP0);

Motors

The two motor channels are defined as pin pairs, and should be used with an instance of the Motor class:

  PicoExplorer::MOTOR1_PINS = {9, 8};
  PicoExplorer::MOTOR2_PINS = {11, 10};

Functions

Motors

Pico Explorer uses our Motor library to drive motors. Motors are driven by PWM via an onboard DRV8833. Constants are provided for both motors, so setup is as easy as:

#include "motor.hpp"

using namespace motor;

Motor motor1(PicoExplorer::MOTOR1_PINS);
Motor motor2(PicoExplorer::MOTOR2_PINS);

You should also init your motors to set up the required GPIO/PWM on their pins:

motor1.init();
motor2.init();

Speed should be given as a float between -1.0 and 1.0, eg:

motor1.speed(1.0)  // Full-speed forward
motor1.speed(-1.0) // Full-speed backward

And to stop the motor:

motor1.stop()

Analog

float get_adc(uint8_t channel);

Pico Explorer's ADC channels are connected to Pico's ADC-capable pins 26, 27 and 28 which correspond to channels 0, 1 and 2 respectively.

Constants are supplied for these in the PicoExplorer library, so you can create an Analog instance for each:

#include "analog.hpp"
Analog adc0(PicoExplorer::ADC0_PIN);
Analog adc1(PicoExplorer::ADC1_PIN);
Analog adc2(PicoExplorer::ADC2_PIN);

And read a voltage with:

adc0.read_voltage();

Buzzer

Note: You must bridge the pin you use over to the AUDIO pin on the Pico Explorer header in order to drive the onboard Piezo.

TODO document buzzer

Buttons

#include "button.hpp"
Button button_a(PicoExplorer::A);
Button button_b(PicoExplorer::B);
Button button_x(PicoExplorer::X);
Button button_y(PicoExplorer::Y);

ST7789

Pico Explorer uses the ST7789 display driver to handle the LCD. For more information read the ST7789 README..