Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
c45a35b
ESP-NOW to mesh bridge
themelisx Jan 22, 2026
6d486e1
basic UI (testing)
themelisx Jan 22, 2026
3682e98
UI fixes
themelisx Jan 23, 2026
e7468a6
improve rx for heltec
themelisx Jan 24, 2026
3ba7f19
Merge branch 'improve_rx_for_heltec_v4' into elecrow_panel_5_and_7_in…
themelisx Jan 24, 2026
7f53a21
greek fonts
themelisx Jan 24, 2026
e968594
code cleanup
themelisx Jan 24, 2026
af50ff3
code cleanup
themelisx Jan 24, 2026
95fb9d6
Update main.cpp
themelisx Jan 24, 2026
aae6113
tasks
themelisx Jan 24, 2026
b294611
Create user_setup.h.example
themelisx Jan 24, 2026
46b1e76
UI updates
themelisx Jan 24, 2026
994aa0f
ui changes
themelisx Jan 24, 2026
b66fddd
contacts list fixes
themelisx Jan 26, 2026
395114d
keyboard
themelisx Jan 27, 2026
a0bfad2
refactor
themelisx Jan 27, 2026
be7999c
Update .gitignore
themelisx Jan 30, 2026
3e46199
public chat bug fix
themelisx Jan 31, 2026
673f952
ui fixes
themelisx Jan 31, 2026
1e3a790
Merge remote-tracking branch 'upstream/main' into elecrow_panel_ui
themelisx Feb 1, 2026
ce8add2
Update main.cpp
themelisx Feb 1, 2026
8bdbda0
powersaving
themelisx Feb 6, 2026
7e08502
ui helpers
themelisx Feb 6, 2026
b15285f
new ui helpers
themelisx Feb 8, 2026
3c0928b
Seeed sensecap indicator initial support
themelisx Feb 20, 2026
f862dd1
wip
themelisx Feb 20, 2026
f0561c7
wip
themelisx Mar 17, 2026
4636a88
wip
themelisx Mar 17, 2026
92ffc5c
wip
themelisx Mar 17, 2026
42d812d
Update SenseCapHAL.h
themelisx Mar 17, 2026
fc8a932
Update SenseCapHAL.h
themelisx Mar 17, 2026
da3d734
wip
themelisx Mar 18, 2026
1f40e62
wip
themelisx Apr 14, 2026
6836015
Add LilyGo T-ETH Elite board support
web-flow Apr 24, 2026
528bf3f
add FUNDING.yml
liamcottle Apr 25, 2026
34db931
Removed links to outdated resources and links
LitBomb Apr 27, 2026
b948369
Update script link in FAQ 4.7
keithtweed Apr 27, 2026
fed8d36
Merge pull request #2412 from LitBomb/patch-25
ripplebiz Apr 27, 2026
03a13ae
Merge pull request #2413 from keithtweed/patch-1
liamcottle Apr 27, 2026
1a7b361
Merge pull request #2388 from OhYou-0/lilygo-teth-elite-board-support
ripplebiz Apr 28, 2026
8686286
UI updates
themelisx May 2, 2026
25cbc6c
basic fq
themelisx May 2, 2026
f535687
wip
themelisx May 2, 2026
cbc4cab
wip
themelisx May 2, 2026
f6be2bf
Display fixes
themelisx May 3, 2026
2b70e34
display & touch rotation fixed
themelisx May 3, 2026
6e9b148
public chat receive fix
themelisx May 3, 2026
f3a3e0b
ui fixes
themelisx May 3, 2026
8d998ad
ui fixes
themelisx May 3, 2026
0a38fd4
ui and settings fixes
themelisx May 4, 2026
2b2834b
crash fix
themelisx May 4, 2026
3a0b0a4
ui fixes
themelisx May 4, 2026
12ed55d
ui fixes
themelisx May 6, 2026
4df54ac
Merge remote-tracking branch 'upstream/main' into meshcore_seeed_sens…
themelisx May 10, 2026
581dc52
Merge remote-tracking branch 'upstream/dev' into meshcore_seeed_sense…
themelisx May 10, 2026
1afd65e
v.1.15
themelisx May 10, 2026
9778690
screenshots
themelisx May 10, 2026
e632c52
code cleanup
themelisx May 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/FUNDING.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
github: meshcore-dev
51 changes: 51 additions & 0 deletions boards/esp32-s3-devkitc-1-myboard.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
{
"build": {
"arduino":{
"ldscript": "esp32s3_out.ld",
"memory_type": "qio_opi",
"partitions": "elecrow_partitions.csv"
},
"core": "esp32",
"extra_flags": [
"-DBOARD_HAS_PSRAM",
"-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"
],
"debug": {
"default_tool": "esp-builtin",
"onboard_tools": [
"esp-builtin"
],
"openocd_target": "esp32s3.cfg"
},
"frameworks": [
"arduino",
"espidf"
],
"name": "Espressif ESP32-S3-DevKitC-1-N8 -ELECROW",
"upload": {
"flash_size": "4MB",
"maximum_ram_size": 327680,
"maximum_size": 8388608,
"require_upload_port": true,
"speed": 921600
},
"url": "https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/hw-reference/esp32s3/user-guide-devkitc-1.html",
"vendor": "Espressif"
}
10 changes: 1 addition & 9 deletions docs/faq.md
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,6 @@ Anyone is able to build anything they like on top of MeshCore without paying any
- MeshCore Firmware on GitHub: [https://github.com/meshcore-dev/MeshCore](https://github.com/meshcore-dev/MeshCore)
- MeshCore Companion Web App: [https://app.meshcore.nz](https://app.meshcore.nz)
- MeshCore Map: [https://map.meshcore.io](https://map.meshcore.io)
- Andy Kirby's [MeshCore Intro Video](https://www.youtube.com/watch?v=t1qne8uJBAc)
- Liam Cottle's [MeshCore Technical Presentation](https://www.youtube.com/watch?v=OwmkVkZQTf4)

You need LoRa hardware devices to run MeshCore firmware as clients or server (repeater and room server).
Expand Down Expand Up @@ -402,10 +401,7 @@ Another way to download map tiles is to use this Python script to get the tiles
<https://github.com/fistulareffigy/MTD-Script>

There is also a modified script that adds additional error handling and parallel downloads:
<https://discord.com/channels/826570251612323860/1330643963501351004/1338775811548905572>

UK map tiles are available separately from Andy Kirby on his discord server:
<https://discord.com/channels/826570251612323860/1330643963501351004/1331346597367386224>
<https://github.com/TheBestJohn/MTD-Script>

### 4.8. Q: Where do the map tiles go?
Once you have the tiles downloaded, copy the `\tiles` folder to the root of your T-Deck's SD card.
Expand Down Expand Up @@ -563,10 +559,6 @@ pio run -e RAK_4631_Repeater
```
then you'll find `firmware.zip` in `.pio/build/RAK_4631_Repeater`

Andy also has a video on how to build using VS Code:
*How to build and flash Meshcore repeater firmware | Heltec V3*
<https://www.youtube.com/watch?v=WJvg6dt13hk> *(Link referenced in the Discord post)*

### 5.10. Q: Are there other MeshCore related open source projects?

**A:** [Liam Cottle](https://liamcottle.net)'s MeshCore web client and MeshCore Javascript library are open source under MIT license.
Expand Down
6 changes: 6 additions & 0 deletions elecrow_partitions.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 0x5000,
otadata, data, ota, 0xe000, 0x2000,
app0, app, ota_0, 0x10000, 0x300000,
spiffs, data, spiffs, 0x310000,0xE0000,
coredump, data, coredump,0x3F0000,0x10000,
22 changes: 21 additions & 1 deletion examples/companion_radio/MyMesh.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -382,7 +382,7 @@ void MyMesh::onDiscoveredContact(ContactInfo &contact, bool is_new, uint8_t path
p->path_len = mesh::Packet::copyPath(p->path, path, path_len);
}

if (!is_new) dirty_contacts_expiry = futureMillis(LAZY_CONTACTS_WRITE_DELAY); // only schedule lazy write for contacts that are in contacts[]
dirty_contacts_expiry = futureMillis(LAZY_CONTACTS_WRITE_DELAY); // contact is in contacts[], schedule lazy write
}

static int sort_by_recent(const void *a, const void *b) {
Expand Down Expand Up @@ -970,6 +970,10 @@ void MyMesh::begin(bool has_display) {
const char *MyMesh::getNodeName() {
return _prefs.node_name;
}

const char* MyMesh::getFirmwareVer() { return FIRMWARE_VERSION; }
const char* MyMesh::getBuildDate() { return FIRMWARE_BUILD_DATE; }

NodePrefs *MyMesh::getNodePrefs() {
return &_prefs;
}
Expand Down Expand Up @@ -1975,6 +1979,22 @@ void MyMesh::enterCLIRescue() {
Serial.println("========= CLI Rescue =========");
}

void MyMesh::handleCommand(const char* command) {
while (*command == ' ') command++; // skip leading space
if (strcmp(command, "erase") == 0) {
bool success = _store->formatFileSystem();
if (success) {
Serial.println(" > erase done");
} else {
Serial.println(" Error: erase failed");
}
} else if (strcmp(command, "reboot") == 0) {
board.reboot(); // doesn't return
} else {
Serial.println(" Error: unknown command");
}
}

void MyMesh::checkCLIRescueCmd() {
int len = strlen(cli_command);
while (Serial.available() && len < sizeof(cli_command)-1) {
Expand Down
3 changes: 3 additions & 0 deletions examples/companion_radio/MyMesh.h
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,8 @@ class MyMesh : public BaseChatMesh, public DataStoreHost {
void startInterface(BaseSerialInterface &serial);

const char *getNodeName();
const char *getFirmwareVer();
const char *getBuildDate();
NodePrefs *getNodePrefs();
uint32_t getBLEPin();

Expand Down Expand Up @@ -165,6 +167,7 @@ class MyMesh : public BaseChatMesh, public DataStoreHost {

public:
void savePrefs() { _store->savePrefs(_prefs, sensors.node_lat, sensors.node_lon); }
void handleCommand(const char* command);

#if ENV_INCLUDE_GPS == 1
void applyGpsPrefs() {
Expand Down
25 changes: 25 additions & 0 deletions examples/companion_radio/task_clock.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#include <Arduino.h>

#include "esp_log.h"
#include "uiDefines.h"
#include "uiVars.h"

#define TAG "clock_task"

void clock_task(void *pvParameters) {

vTaskSuspend(NULL);

ESP_LOGI(TAG, "Clock manager: Task running on core %d", xPortGetCoreID());

uiManager->clearDateTime();

// TODO: sync clock
while (1) {
// uiManager->updateDateTime(
// myClock->getTimeStruct()
// );
// uiManager->updateValues();
vTaskDelay(DELAY_CLOCK_TASK / portTICK_PERIOD_MS);
}
}
19 changes: 19 additions & 0 deletions examples/companion_radio/task_lvgl.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#include <Arduino.h>

#include "esp_log.h"
#include "uiDefines.h"
#include "uiVars.h"

#define TAG "lvgl_task"

void lvgl_task(void *pvParameters) {

vTaskSuspend(NULL);

ESP_LOGI(TAG, "UI manager: Task running on core %d", xPortGetCoreID());

while (1) {
lv_timer_handler();
vTaskDelay(DELAY_LVGL_TASK / portTICK_PERIOD_MS);
}
}
2 changes: 1 addition & 1 deletion examples/companion_radio/ui-new/UITask.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -698,7 +698,7 @@ void UITask::shutdown(bool restart){
_board->reboot();
} else {
_display->turnOff();
radio_driver.powerOff();
//radio_driver.powerOff();
_board->powerOff();
}
}
Expand Down
Loading