mirror of
https://github.com/meshtastic/firmware.git
synced 2025-02-01 02:09:57 +00:00
[BOARD] Adds Waveshare ESP32-S3-PICO (#3081)
* Update architecture.h * Add files via upload * Add files via upload * Update EInkDisplay2.cpp * Update platformio.ini * Update architecture.h * Update EInkDisplay2.cpp * Update platformio.ini * Update EInkDisplay2.cpp * Update platformio.ini * Update EInkDisplay2.cpp --------- Co-authored-by: Ben Meadors <benmmeadors@gmail.com> Co-authored-by: Thomas Göttgens <tgoettgens@gmail.com>
This commit is contained in:
parent
7a1c565701
commit
23df6ddf01
40
boards/esp32-s3-pico.json
Normal file
40
boards/esp32-s3-pico.json
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"build": {
|
||||||
|
"arduino": {
|
||||||
|
"ldscript": "esp32s3_out.ld",
|
||||||
|
"partitions": "default_16MB.csv"
|
||||||
|
},
|
||||||
|
"core": "esp32",
|
||||||
|
"extra_flags": [
|
||||||
|
"-DARDUINO_ESP32S3_DEV",
|
||||||
|
"-DARDUINO_USB_MODE=1",
|
||||||
|
"-DARDUINO_RUNNING_CORE=1",
|
||||||
|
"-DARDUINO_EVENT_RUNNING_CORE=1"
|
||||||
|
],
|
||||||
|
"f_cpu": "240000000L",
|
||||||
|
"f_flash": "80000000L",
|
||||||
|
"flash_mode": "qio",
|
||||||
|
"hwids": [["0x303A", "0x1001"]],
|
||||||
|
"mcu": "esp32s3",
|
||||||
|
"variant": "esp32s3"
|
||||||
|
},
|
||||||
|
"connectivity": ["wifi", "bluetooth", "lora"],
|
||||||
|
"debug": {
|
||||||
|
"default_tool": "esp-builtin",
|
||||||
|
"onboard_tools": ["esp-builtin"],
|
||||||
|
"openocd_target": "esp32s3.cfg"
|
||||||
|
},
|
||||||
|
"frameworks": ["arduino", "espidf"],
|
||||||
|
"name": "Waveshare ESP32-S3-Pico (16 MB FLASH, 2 MB PSRAM)",
|
||||||
|
"upload": {
|
||||||
|
"flash_size": "16MB",
|
||||||
|
"maximum_ram_size": 327680,
|
||||||
|
"maximum_size": 16777216,
|
||||||
|
"use_1200bps_touch": true,
|
||||||
|
"wait_for_upload_port": true,
|
||||||
|
"require_upload_port": true,
|
||||||
|
"speed": 921600
|
||||||
|
},
|
||||||
|
"url": "https://www.waveshare.com/esp32-s3-pico.htm",
|
||||||
|
"vendor": "Waveshare"
|
||||||
|
}
|
@ -109,6 +109,12 @@ EInkDisplay::EInkDisplay(uint8_t address, int sda, int scl, OLEDDISPLAY_GEOMETRY
|
|||||||
setGeometry(GEOMETRY_RAWMODE, 296, 128);
|
setGeometry(GEOMETRY_RAWMODE, 296, 128);
|
||||||
LOG_DEBUG("GEOMETRY_RAWMODE, 296, 128\n");
|
LOG_DEBUG("GEOMETRY_RAWMODE, 296, 128\n");
|
||||||
|
|
||||||
|
#elif defined(ESP32_S3_PICO)
|
||||||
|
|
||||||
|
// GxEPD2_290_T94_V2
|
||||||
|
setGeometry(GEOMETRY_RAWMODE, EPD_WIDTH, EPD_HEIGHT);
|
||||||
|
LOG_DEBUG("GEOMETRY_RAWMODE, 296, 128\n");
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
// setGeometry(GEOMETRY_RAWMODE, 128, 64); // old resolution
|
// setGeometry(GEOMETRY_RAWMODE, 128, 64); // old resolution
|
||||||
// setGeometry(GEOMETRY_128_64); // We originally used this because I wasn't sure if rawmode worked - it does
|
// setGeometry(GEOMETRY_128_64); // We originally used this because I wasn't sure if rawmode worked - it does
|
||||||
@ -176,10 +182,11 @@ bool EInkDisplay::forceDisplay(uint32_t msecLimit)
|
|||||||
#elif defined(HELTEC_WIRELESS_PAPER_V1_0)
|
#elif defined(HELTEC_WIRELESS_PAPER_V1_0)
|
||||||
adafruitDisplay->nextPage();
|
adafruitDisplay->nextPage();
|
||||||
#elif defined(HELTEC_WIRELESS_PAPER)
|
#elif defined(HELTEC_WIRELESS_PAPER)
|
||||||
adafruitDisplay->nextPage();
|
adafruitDisplay->nextPage();
|
||||||
|
#elif defined(ESP32_S3_PICO)
|
||||||
|
adafruitDisplay->nextPage();
|
||||||
#elif defined(PRIVATE_HW) || defined(my)
|
#elif defined(PRIVATE_HW) || defined(my)
|
||||||
adafruitDisplay->nextPage();
|
adafruitDisplay->nextPage();
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Put screen to sleep to save power (possibly not necessary because we already did poweroff inside of display)
|
// Put screen to sleep to save power (possibly not necessary because we already did poweroff inside of display)
|
||||||
@ -248,11 +255,8 @@ bool EInkDisplay::connect()
|
|||||||
{
|
{
|
||||||
if (eink_found) {
|
if (eink_found) {
|
||||||
auto lowLevel = new TECHO_DISPLAY_MODEL(PIN_EINK_CS, PIN_EINK_DC, PIN_EINK_RES, PIN_EINK_BUSY);
|
auto lowLevel = new TECHO_DISPLAY_MODEL(PIN_EINK_CS, PIN_EINK_DC, PIN_EINK_RES, PIN_EINK_BUSY);
|
||||||
|
|
||||||
adafruitDisplay = new GxEPD2_BW<TECHO_DISPLAY_MODEL, TECHO_DISPLAY_MODEL::HEIGHT>(*lowLevel);
|
adafruitDisplay = new GxEPD2_BW<TECHO_DISPLAY_MODEL, TECHO_DISPLAY_MODEL::HEIGHT>(*lowLevel);
|
||||||
|
|
||||||
adafruitDisplay->init(115200, true, 10, false, SPI1, SPISettings(4000000, MSBFIRST, SPI_MODE0));
|
adafruitDisplay->init(115200, true, 10, false, SPI1, SPISettings(4000000, MSBFIRST, SPI_MODE0));
|
||||||
|
|
||||||
// RAK14000 2.13 inch b/w 250x122 does actually now support partial updates
|
// RAK14000 2.13 inch b/w 250x122 does actually now support partial updates
|
||||||
adafruitDisplay->setRotation(3);
|
adafruitDisplay->setRotation(3);
|
||||||
// Partial update support for 1.54, 2.13 RAK14000 b/w , 2.9 and 4.2
|
// Partial update support for 1.54, 2.13 RAK14000 b/w , 2.9 and 4.2
|
||||||
@ -321,12 +325,12 @@ bool EInkDisplay::connect()
|
|||||||
adafruitDisplay->setPartialWindow(0, 0, displayWidth, displayHeight);
|
adafruitDisplay->setPartialWindow(0, 0, displayWidth, displayHeight);
|
||||||
}
|
}
|
||||||
#elif defined(M5_COREINK)
|
#elif defined(M5_COREINK)
|
||||||
auto lowLevel = new TECHO_DISPLAY_MODEL(PIN_EINK_CS, PIN_EINK_DC, PIN_EINK_RES, PIN_EINK_BUSY);
|
auto lowLevel = new TECHO_DISPLAY_MODEL(PIN_EINK_CS, PIN_EINK_DC, PIN_EINK_RES, PIN_EINK_BUSY);
|
||||||
adafruitDisplay = new GxEPD2_BW<TECHO_DISPLAY_MODEL, TECHO_DISPLAY_MODEL::HEIGHT>(*lowLevel);
|
adafruitDisplay = new GxEPD2_BW<TECHO_DISPLAY_MODEL, TECHO_DISPLAY_MODEL::HEIGHT>(*lowLevel);
|
||||||
adafruitDisplay->init(115200, true, 40, false, SPI, SPISettings(4000000, MSBFIRST, SPI_MODE0));
|
adafruitDisplay->init(115200, true, 40, false, SPI, SPISettings(4000000, MSBFIRST, SPI_MODE0));
|
||||||
adafruitDisplay->setRotation(0);
|
adafruitDisplay->setRotation(0);
|
||||||
adafruitDisplay->setPartialWindow(0, 0, EPD_WIDTH, EPD_HEIGHT);
|
adafruitDisplay->setPartialWindow(0, 0, EPD_WIDTH, EPD_HEIGHT);
|
||||||
#elif defined(my)
|
#elif defined(my) || defined(ESP32_S3_PICO)
|
||||||
{
|
{
|
||||||
auto lowLevel = new TECHO_DISPLAY_MODEL(PIN_EINK_CS, PIN_EINK_DC, PIN_EINK_RES, PIN_EINK_BUSY);
|
auto lowLevel = new TECHO_DISPLAY_MODEL(PIN_EINK_CS, PIN_EINK_DC, PIN_EINK_RES, PIN_EINK_BUSY);
|
||||||
adafruitDisplay = new GxEPD2_BW<TECHO_DISPLAY_MODEL, TECHO_DISPLAY_MODEL::HEIGHT>(*lowLevel);
|
adafruitDisplay = new GxEPD2_BW<TECHO_DISPLAY_MODEL, TECHO_DISPLAY_MODEL::HEIGHT>(*lowLevel);
|
||||||
@ -340,7 +344,6 @@ bool EInkDisplay::connect()
|
|||||||
// adafruitDisplay->fillScreen(UNCOLORED);
|
// adafruitDisplay->fillScreen(UNCOLORED);
|
||||||
// adafruitDisplay->drawCircle(100, 100, 20, COLORED);
|
// adafruitDisplay->drawCircle(100, 100, 20, COLORED);
|
||||||
// adafruitDisplay->display(false);
|
// adafruitDisplay->display(false);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -470,4 +473,4 @@ bool EInkDisplay::determineRefreshMode()
|
|||||||
|
|
||||||
#endif // End USE_EINK_DYNAMIC_PARTIAL
|
#endif // End USE_EINK_DYNAMIC_PARTIAL
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -125,8 +125,8 @@
|
|||||||
#define HW_VENDOR meshtastic_HardwareModel_BETAFPV_900_NANO_TX
|
#define HW_VENDOR meshtastic_HardwareModel_BETAFPV_900_NANO_TX
|
||||||
#elif defined(PICOMPUTER_S3)
|
#elif defined(PICOMPUTER_S3)
|
||||||
#define HW_VENDOR meshtastic_HardwareModel_PICOMPUTER_S3
|
#define HW_VENDOR meshtastic_HardwareModel_PICOMPUTER_S3
|
||||||
#elif defined(HELTEC_HT62)
|
#elif defined(ESP32_S3_PICO)
|
||||||
#define HW_VENDOR meshtastic_HardwareModel_HELTEC_HT62
|
#define HW_VENDOR meshtastic_HardwareModel_ESP32_S3_PICO
|
||||||
#elif defined(SENSELORA_S3)
|
#elif defined(SENSELORA_S3)
|
||||||
#define HW_VENDOR meshtastic_HardwareModel_SENSELORA_S3
|
#define HW_VENDOR meshtastic_HardwareModel_SENSELORA_S3
|
||||||
#elif defined(HELTEC_HT62)
|
#elif defined(HELTEC_HT62)
|
||||||
@ -155,4 +155,4 @@
|
|||||||
#define LORA_CS 18
|
#define LORA_CS 18
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define SERIAL0_RX_GPIO 3 // Always GPIO3 on ESP32 // FIXME: may be different on ESP32-S3, etc.
|
#define SERIAL0_RX_GPIO 3 // Always GPIO3 on ESP32 // FIXME: may be different on ESP32-S3, etc.
|
||||||
|
36
variants/esp32-s3-pico/pins_arduino.h
Normal file
36
variants/esp32-s3-pico/pins_arduino.h
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
#ifndef Pins_Arduino_h
|
||||||
|
#define Pins_Arduino_h
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#define USB_VID 0x303a
|
||||||
|
#define USB_PID 0x1001
|
||||||
|
|
||||||
|
#define EXTERNAL_NUM_INTERRUPTS 46
|
||||||
|
#define NUM_DIGITAL_PINS 48
|
||||||
|
#define NUM_ANALOG_INPUTS 20
|
||||||
|
|
||||||
|
#define analogInputToDigitalPin(p) (((p) < 20) ? (analogChannelToDigitalPin(p)) : -1)
|
||||||
|
#define digitalPinToInterrupt(p) (((p) < 48) ? (p) : -1)
|
||||||
|
#define digitalPinHasPWM(p) (p < 46)
|
||||||
|
|
||||||
|
// The default Wire will be mapped to PMU and RTC
|
||||||
|
static const uint8_t SDA = 15;
|
||||||
|
static const uint8_t SCL = 16;
|
||||||
|
|
||||||
|
// Default SPI will be mapped to Radio
|
||||||
|
static const uint8_t MISO = 37;
|
||||||
|
static const uint8_t SCK = 35;
|
||||||
|
static const uint8_t MOSI = 36;
|
||||||
|
static const uint8_t SS = 14;
|
||||||
|
|
||||||
|
static const uint8_t BAT_ADC_PIN = 26;
|
||||||
|
|
||||||
|
// #define SPI_MOSI (11)
|
||||||
|
// #define SPI_SCK (14)
|
||||||
|
// #define SPI_MISO (2)
|
||||||
|
// #define SPI_CS (13)
|
||||||
|
|
||||||
|
// #define SDCARD_CS SPI_CS
|
||||||
|
|
||||||
|
#endif /* Pins_Arduino_h */
|
25
variants/esp32-s3-pico/platformio.ini
Normal file
25
variants/esp32-s3-pico/platformio.ini
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
[env:ESP32-S3-Pico]
|
||||||
|
|
||||||
|
board_level = extra
|
||||||
|
extends = esp32s3_base
|
||||||
|
upload_protocol = esptool
|
||||||
|
board = esp32-s3-pico
|
||||||
|
|
||||||
|
board_upload.use_1200bps_touch = yes
|
||||||
|
board_upload.wait_for_upload_port = yes
|
||||||
|
board_upload.require_upload_port = yes
|
||||||
|
|
||||||
|
;upload_port = /dev/ttyACM0
|
||||||
|
|
||||||
|
build_flags = ${esp32_base.build_flags}
|
||||||
|
-DESP32_S3_PICO
|
||||||
|
;-DPRIVATE_HW
|
||||||
|
-Ivariants/esp32-s3-pico
|
||||||
|
-DBOARD_HAS_PSRAM
|
||||||
|
-DTECHO_DISPLAY_MODEL=GxEPD2_290_T94_V2
|
||||||
|
-DEPD_HEIGHT=128
|
||||||
|
-DEPD_WIDTH=296
|
||||||
|
|
||||||
|
lib_deps = ${esp32s3_base.lib_deps}
|
||||||
|
zinggjm/GxEPD2@^1.5.3
|
||||||
|
;adafruit/Adafruit NeoPixel@^1.10.7
|
77
variants/esp32-s3-pico/variant.h
Normal file
77
variants/esp32-s3-pico/variant.h
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
*/
|
||||||
|
#define HAS_GPS 0
|
||||||
|
#undef GPS_RX_PIN
|
||||||
|
#undef GPS_TX_PIN
|
||||||
|
|
||||||
|
#define EXT_NOTIFY_OUT 22
|
||||||
|
#define BUTTON_PIN 0 // 17
|
||||||
|
|
||||||
|
// #define LED_PIN PIN_LED
|
||||||
|
// Board has RGB LED 21
|
||||||
|
|
||||||
|
//The usbPower state is revered ?
|
||||||
|
//DEBUG | ??:??:?? 365 [Power] Battery: usbPower=0, isCharging=0, batMv=4116, batPct=90
|
||||||
|
//DEBUG | ??:??:?? 385 [Power] Battery: usbPower=1, isCharging=1, batMv=4243, batPct=0
|
||||||
|
|
||||||
|
// https://www.waveshare.com/img/devkit/ESP32-S3-Pico/ESP32-S3-Pico-details-inter-1.jpg
|
||||||
|
// digram is incorrect labeled as battery pin is getting readings on GPIO7_CH1?
|
||||||
|
#define BATTERY_PIN 7
|
||||||
|
#define ADC_CHANNEL ADC1_GPIO7_CHANNEL
|
||||||
|
// #define ADC_CHANNEL ADC1_GPIO6_CHANNEL
|
||||||
|
// ratio of voltage divider = 3.0 (R17=200k, R18=100k)
|
||||||
|
#define ADC_MULTIPLIER 3.1 // 3.0 + a bit for being optimistic
|
||||||
|
|
||||||
|
#define I2C_SDA 15
|
||||||
|
#define I2C_SCL 16
|
||||||
|
|
||||||
|
// Enable secondary bus for external periherals
|
||||||
|
// https://www.waveshare.com/wiki/Pico-OLED-1.3
|
||||||
|
// #define USE_SH1107_128_64
|
||||||
|
// Not working
|
||||||
|
#define I2C_SDA1 17
|
||||||
|
#define I2C_SCL1 18
|
||||||
|
|
||||||
|
#define BUTTON_PIN 0 // This is the BOOT button
|
||||||
|
#define BUTTON_NEED_PULLUP
|
||||||
|
|
||||||
|
// #define USE_RF95 // RFM95/SX127x
|
||||||
|
#define USE_SX1262
|
||||||
|
// #define USE_SX1280
|
||||||
|
|
||||||
|
#define LORA_MISO 37
|
||||||
|
#define LORA_SCK 35
|
||||||
|
#define LORA_MOSI 36
|
||||||
|
#define LORA_CS 14
|
||||||
|
|
||||||
|
#define LORA_RESET 40
|
||||||
|
#define LORA_DIO1 4
|
||||||
|
#define LORA_DIO2 13
|
||||||
|
|
||||||
|
#ifdef USE_SX1262
|
||||||
|
#define SX126X_CS LORA_CS
|
||||||
|
#define SX126X_DIO1 LORA_DIO1
|
||||||
|
#define SX126X_BUSY LORA_DIO2
|
||||||
|
#define SX126X_RESET LORA_RESET
|
||||||
|
#define SX126X_DIO2_AS_RF_SWITCH
|
||||||
|
#define SX126X_DIO3_TCXO_VOLTAGE 1.8
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_SX1280
|
||||||
|
#define SX128X_CS LORA_CS
|
||||||
|
#define SX128X_DIO1 LORA_DIO1
|
||||||
|
#define SX128X_BUSY 9
|
||||||
|
#define SX128X_RESET LORA_RESET
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define USE_EINK
|
||||||
|
/*
|
||||||
|
* eink display pins
|
||||||
|
*/
|
||||||
|
#define PIN_EINK_CS 34
|
||||||
|
#define PIN_EINK_BUSY 38
|
||||||
|
#define PIN_EINK_DC 33
|
||||||
|
#define PIN_EINK_RES 42 // 37 //(-1) // cant be MISO Waveshare ??)
|
||||||
|
#define PIN_EINK_SCLK 35
|
||||||
|
#define PIN_EINK_MOSI 36
|
Loading…
Reference in New Issue
Block a user