8000 Merge pull request #10090 from SeanTheITGuy/heltec_vision_master_e290 · adafruit/circuitpython@6f938f8 · GitHub
[go: up one dir, main page]

Skip to content

Commit 6f938f8

Browse files
authored
Merge pull request #10090 from SeanTheITGuy/heltec_vision_master_e290
Heltec vision master e290
2 parents a8f5379 + f735454 commit 6f938f8

File tree

5 files changed

+246
-0
lines changed

5 files changed

+246
-0
lines changed
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
// This file is part of the CircuitPython project: https://circuitpython.org
2+
//
3+
// SPDX-FileCopyrightText: Copyright (c) 2020 Scott Shawcroft for Adafruit Industries
4+
//
5+
// SPDX-License-Identifier: MIT
6+
7+
#include "supervisor/board.h"
8+
#include "mpconfigboard.h"
9+
#include "shared-bindings/busio/SPI.h"
10+
#include "shared-bindings/fourwire/FourWire.h"
11+
#include "shared-bindings/microcontroller/Pin.h"
12+
#include "shared-module/displayio/__init__.h"
13+
#include "shared-module/displayio/mipi_constants.h"
14+
#include "shared-bindings/board/__init__.h"
15+
#include "shared-bindings/digitalio/DigitalInOut.h"
16+
17+
const uint8_t display_start_sequence[] = {
18+
0x12, 0x80, 0x14, // Soft reset and wait 20ms
19+
0x11, 0x01, 0x03, // Ram data entry mode
20+
0x3c, 0x01, 0x05, // border color
21+
0x2c, 0x01, 0x36, // set vcom voltage
22+
0x03, 0x01, 0x17, // Set gate voltage
23+
0x04, 0x03, 0x41, 0x00, 0x32, // Set source voltage
24+
0x4e, 0x01, 0x01, // ram x count
25+
0x4f, 0x02, 0x00, 0x00, // ram y count
26+
0x01, 0x03, 0x27, 0x01, 0x00, // set display size
27+
0x22, 0x01, 0xf4, // display update mode
28+
};
29+
30+
const uint8_t display_stop_sequence[] = {
31+
0x10, 0x81, 0x01, 0x64, // Deep sleep
32+
};
33+
34+
const uint8_t refresh_sequence[] = {
35+
0x20,
36+
};
37+
38+
void board_init(void) {
39+
40+
// Set vext high to enable EPD
41+
digitalio_digitalinout_obj_t vext_pin_obj;
42+
vext_pin_obj.base.type = &digitalio_digitalinout_type;
43+
common_hal_digitalio_digitalinout_construct(&vext_pin_obj, &pin_GPIO18);
44+
common_hal_digitalio_digitalinout_switch_to_output(&vext_pin_obj, true, DRIVE_MODE_PUSH_PULL);
45+
common_hal_digitalio_digitalinout_never_reset(&vext_pin_obj);
46+
47+
// Set up the SPI object used to control the display
48+
fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus;
49+
busio_spi_obj_t *spi = &bus->inline_bus;
50+
common_hal_busio_spi_construct(spi, &pin_GPIO2, &pin_GPIO1, NULL, false);
51+
common_hal_busio_spi_never_reset(spi);
52+
53+
// Set up the DisplayIO pin object
54+
bus->base.type = &fourwire_fourwire_type;
55+
common_hal_fourwire_fourwire_construct(bus,
56+
spi,
57+
&pin_GPIO4, // EPD_DC Command or data
58+
&pin_GPIO3, // EPD_CS Chip select
59+
&pin_GPIO5, // EPD_RST Reset
60+
1000000, // Baudrate
61+
0, // Polarity
62+
0); // Phase
63+
64+
// Set up the DisplayIO epaper object
65+
epaperdisplay_epaperdisplay_obj_t *display = &allocate_display()->epaper_display;
66+
display->base.type = &epaperdisplay_epaperdisplay_type;
67+
common_hal_epaperdisplay_epaperdisplay_construct(
68+
display,
69+
bus,
70+
display_start_sequence, sizeof(display_start_sequence),
71+
0, // start up time
72+
display_stop_sequence, sizeof(display_stop_sequence),
73+
296, // width
74+
128, // height
75+
250, // ram_width
76+
296, // ram_height
77+
8, // colstart
78+
0, // rowstart
79+
90, // rotation
80+
0x44, // set_column_window_command
81+
0x45, // set_row_window_command
82+
0x4E, // set_current_column_command
83+
0x4F, // set_current_row_command
84+
0x24, // write_black_ram_command
85+
false, // black_bits_inverted
86+
0x26, // write_color_ram_command
87+
false, // color_bits_inverted
88+
0xFF0000, // highlight_color
89+
refresh_sequence, sizeof(refresh_sequence), // refresh_display_command
90+
1.0, // refresh_time
91+
&pin_GPIO6, // busy_pin
92+
true, // busy_state
93+
2.0, // seconds_per_frame
94+
false, // always_toggle_chip_select
95+
false, // grayscale
96+
false, // acep
97+
false, // two_byte_sequence_length
98+
true); // address_little_endian
99+
}
100+
101+
void board_deinit(void) {
102+
epaperdisplay_epaperdisplay_obj_t *display = &displays[0].epaper_display;
103+
if (display->base.type == &epaperdisplay_epaperdisplay_type) {
104+
while (common_hal_epaperdisplay_epaperdisplay_get_busy(display)) {
105+
RUN_BACKGROUND_TASKS;
106+
}
107+
}
108+
common_hal_displayio_release_displays();
109+
}
110+
111+
// Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here.
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// This file is part of the CircuitPython project: https://circuitpython.org
2+
//
3+
// SPDX-FileCopyrightText: Copyright (c) 2019 Scott Shawcroft for Adafruit Industries
4+
//
5+
// SPDX-License-Identifier: MIT
6+
7+
#pragma once
8+
9+
// Micropython setup
10+
11+
#define MICROPY_HW_BOARD_NAME "Heltec Vison Master E290"
12+
#define MICROPY_HW_MCU_NAME "ESP32S3"
13+
14+
#define CIRCUITPY_BOOT_BUTTON (&pin_GPIO0)
15+
16+
#define CIRCUITPY_BOARD_SPI (2)
17+
#define CIRCUITPY_BOARD_SPI_PIN { \
18+
{.clock = &pin_GPIO2, .mosi = &pin_GPIO1, .miso = NULL}, \
19+
{.clock = &pin_GPIO9, .mosi = &pin_GPIO10, .miso = &pin_GPIO11}, \
20+
}
21+
22+
#define CIRCUITPY_BOARD_I2C (1)
23+
#define CIRCUITPY_BOARD_I2C_PIN { \
24+
{.scl = &pin_GPIO38, .sda = &pin_GPIO39}, \
25+
}
26+
27+
#define DEFAULT_UART_BUS_TX (&pin_GPIO43)
28+
#define DEFAULT_UART_BUS_RX (&pin_GPIO44)
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
USB_VID = 0x303A
2+
USB_PID = 0x82C9
3+
USB_PRODUCT = "Vision Master E290"
4+
USB_MANUFACTURER = "Heltec"
5+
6+
IDF_TARGET = esp32s3
7+
8+
CIRCUITPY_ESP_FLASH_SIZE = 16MB
9+
CIRCUITPY_ESP_FLASH_MODE = qio
10+
CIRCUITPY_ESP_FLASH_FREQ = 80m
11+
12+
CIRCUITPY_ESP_PSRAM_SIZE = 8MB
13+
CIRCUITPY_ESP_PSRAM_MODE = opi
14+
CIRCUITPY_ESP_PSRAM_FREQ = 80m
15+
16+
CIRCUITPY_ESPCAMERA = 0
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
// This file is part of the CircuitPython project: https://circuitpython.org
2+
//
3+
// SPDX-FileCopyrightText: Copyright (c) 2020 Scott Shawcroft for Adafruit Industries
4+
//
5+
// SPDX-License-Identifier: MIT
6+
7+
#include "shared-bindings/board/__init__.h"
8+
#include "shared-module/displayio/__init__.h"
9+
10+
CIRCUITPY_BOARD_BUS_SINGLETON(epd_spi, spi, 0)
11+
CIRCUITPY_BOARD_BUS_SINGLETON(lora_spi, spi, 1)
12+
13+
static const mp_rom_map_elem_t board_module_globals_table[] = {
14+
CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS
15+
16+
// User buttons
17+
{ MP_ROM_QSTR(MP_QSTR_BUTTON0), MP_ROM_PTR(&pin_GPIO0) },
18+
{ MP_ROM_QSTR(MP_QSTR_BUTTON1), MP_ROM_PTR(&pin_GPIO21) },
19+
20+
// LED
21+
{ MP_ROM_QSTR(MP_QSTR_LED0), MP_ROM_PTR(&pin_GPIO45) },
22+
23+
// ADC (When ADC_CTRL is high, VBAT is connected to ADC_IN with 390K/100K voltage divider)
24+
{ MP_ROM_QSTR(MP_QSTR_ADC_CTRL), MP_ROM_PTR(&pin_GPIO46) },
25+
{ MP_ROM_QSTR(MP_QSTR_ADC_IN), MP_ROM_PTR(&pin_GPIO7) },
26+
{ MP_ROM_QSTR(MP_QSTR_BATTERY), MP_ROM_PTR(&pin_GPIO7) },
27+
28+
// VEXT powers epd and lora antenna boost when high
29+
{ MP_ROM_QSTR(MP_QSTR_VEXT_CTRL), MP_ROM_PTR(&pin_GPIO18) },
30+
31+
// LORA SPI, Reset, and More
32+
{ MP_ROM_QSTR(MP_QSTR_LORA_CS), MP_ROM_PTR(&pin_GPIO8) },
33+
{ MP_ROM_QSTR(MP_QSTR_LORA_SCK), MP_ROM_PTR(&pin_GPIO9) },
34+
{ MP_ROM_QSTR(MP_QSTR_LORA_MOSI), MP_ROM_PTR(&pin_GPIO10) },
35+
{ MP_ROM_QSTR(MP_QSTR_LORA_MISO), MP_ROM_PTR(&pin_GPIO11) },
36+
{ MP_ROM_QSTR(MP_QSTR_LORA_RESET), MP_ROM_PTR(&pin_GPIO12) },
37+
{ MP_ROM_QSTR(MP_QSTR_LORA_BUSY), MP_ROM_PTR(&pin_GPIO13) },
38+
{ MP_ROM_QSTR(MP_QSTR_LORA_DIO1), MP_ROM_PTR(&pin_GPIO14) },
39+
40+
// eInk Display
41+
{ MP_ROM_QSTR(MP_QSTR_EPD_MOSI), MP_ROM_PTR(&pin_GPIO1) },
42+
{ MP_ROM_QSTR(MP_QSTR_EPD_SCK), MP_ROM_PTR(&pin_GPIO2) },
43+
{ MP_ROM_QSTR(MP_QSTR_EPD_CS), MP_ROM_PTR(&pin_GPIO3) },
44+
{ MP_ROM_QSTR(MP_QSTR_EPD_DC), MP_ROM_PTR(&pin_GPIO4) },
45+
{ MP_ROM_QSTR(MP_QSTR_EPD_RESET), MP_ROM_PTR(&pin_GPIO5) },
46+
{ MP_ROM_QSTR(MP_QSTR_EPD_BUSY), MP_ROM_PTR(&pin_GPIO6) },
47+
48+
// I2C on external connector P2
49+
{ MP_ROM_QSTR(MP_QSTR_SDA), MP_ROM_PTR(&pin_GPIO38) },
50+
{ MP_ROM_QSTR(MP_QSTR_SCL), MP_ROM_PTR(&pin_GPIO39) },
51+
52+
// UART
53+
{ MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO43) },
54+
{ MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_GPIO44) },
55+
56+
// User available pins on GPIO header
57+
{ MP_ROM_QSTR(MP_QSTR_IO0), MP_ROM_PTR(&pin_GPIO0) }, // BOOT pin (IO0) is on header
58+
{ MP_ROM_QSTR(MP_QSTR_IO17), MP_ROM_PTR(&pin_GPIO17) },
59+
{ MP_ROM_QSTR(MP_QSTR_IO38), MP_ROM_PTR(&pin_GPIO38) },
60+
{ MP_ROM_QSTR(MP_QSTR_IO39), MP_ROM_PTR(&pin_GPIO39) },
61+
{ MP_ROM_QSTR(MP_QSTR_IO40), MP_ROM_PTR(&pin_GPIO40) },
62+
{ MP_ROM_QSTR(MP_QSTR_IO41), MP_ROM_PTR(&pin_GPIO41) },
63+
{ MP_ROM_QSTR(MP_QSTR_IO42), MP_ROM_PTR(&pin_GPIO42) },
64+
{ MP_ROM_QSTR(MP_QSTR_IO45), MP_ROM_PTR(&pin_GPIO45) },
65+
{ MP_ROM_QSTR(MP_QSTR_IO47), MP_ROM_PTR(&pin_GPIO47) },
66+
{ MP_ROM_QSTR(MP_QSTR_IO48), MP_ROM_PTR(&pin_GPIO48) },
67+
68+
// objects
69+
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
70+
{ MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&board_uart_obj) },
71+
{ MP_ROM_QSTR(MP_QSTR_EPD_SPI), MP_ROM_PTR(&board_epd_spi_obj) },
72+
{ MP_ROM_QSTR(MP_QSTR_LORA_SPI), MP_ROM_PTR(&board_lora_spi_obj) },
73+
{ MP_ROM_QSTR(MP_QSTR_DISPLAY), MP_ROM_PTR(&displays[0].epaper_display)},
74+
75+
};
76+
77+
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#
2+
# Espressif IoT Development Framework Configuration
3+
#
4+
#
5+
# Component config
6+
#
7+
#
8+
# LWIP
9+
#
10+
# end of LWIP
11+
12+
# end of Component config
13+
14+
# end of Espressif IoT Development Framework Configuration

0 commit comments

Comments
 (0)
0