Sorry for making a new forum but I’m the last replier in CircuitPython with Pico 2 W (and I’ve hit the limit of replies)
But if anyone is still interested in Circuit Python, you could implement @BlairLeduc ’s drivers
I’ve done so in MicroPython and the syntax isn’t too different
Using C modules would fix this:
since the C module can handle text
int buffer_index = (y + row) * DISPLAY_WIDTH + (x + col);
static_framebuffer[buffer_index] = color_index;
}
}
}
return mp_const_none;
}
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(picoware_lcd_draw_char_obj, 4, 4, picoware_lcd_draw_char);
STATIC mp_obj_t picoware_lcd_draw_text(size_t n_args, const mp_obj_t *args)
{
// Arguments: x, y, text_string, color565
if (n_args != 4)
{
mp_raise_ValueError(MP_ERROR_TEXT("draw_text requires 4 arguments"));
}
int start_x = mp_obj_get_int(args[0]);
int start_y = mp_obj_get_int(args[1]);
const char *text = mp_obj_str_get_str(args[2]);
and images
}
}
}
return mp_const_none;
}
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(picoware_lcd_fill_triangle_obj, 7, 7, picoware_lcd_fill_triangle);
// Draw an 8-bit byte array image
// Args: x (int), y (int), width (int), height (int), byte_data (bytes/bytearray), invert (bool)
STATIC mp_obj_t picoware_lcd_draw_image_bytearray(size_t n_args, const mp_obj_t *args)
{
// Get position and size
int x = mp_obj_get_int(args[0]);
int y = mp_obj_get_int(args[1]);
int width = mp_obj_get_int(args[2]);
int height = mp_obj_get_int(args[3]);
// Get byte data
mp_buffer_info_t data_info;
mp_get_buffer_raise(args[4], &data_info, MP_BUFFER_READ);
2 Likes
After a cursory look, the problem with CircuitPython is that it wasn’t written to have the REPL run on the device except through the serial port and there was no way I could see to change this.
It is also quite the bear to create a new port.
1 Like
That’s actually a great point. I’ve only used it through Thonny so far, but I did notice that when using PicoDVI, the serial/REPL would display on the TV.
maple
October 27, 2025, 2:53am
4
Circuit Python puts the REPL on the device by initializing the screen as a busdisplayio, for example here for the M5Stack Cardputer circuitpython/ports/espressif/boards/m5stack_cardputer/board.c at main · adafruit/circuitpython · GitHub
1 Like