mirror of
https://github.com/meshtastic/firmware.git
synced 2025-12-22 10:42:49 +00:00
Compare commits
14 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5d874cd43b | ||
|
|
9f6cdadd3e | ||
|
|
6a3853ef35 | ||
|
|
9ea65c6793 | ||
|
|
8d14e97dfa | ||
|
|
420b7d48d9 | ||
|
|
5915669f6f | ||
|
|
52b01db306 | ||
|
|
a0d6ecb331 | ||
|
|
0271b02d50 | ||
|
|
9f61c78c0e | ||
|
|
4b5cfaf9ba | ||
|
|
c014c1bafe | ||
|
|
96594516af |
20
README.md
20
README.md
@@ -4,7 +4,7 @@ This is the device side code for the [meshtastic.org](https://www.meshtastic.org
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
Meshtastic is a project that lets you use
|
Meshtastic™ is a project that lets you use
|
||||||
inexpensive GPS mesh radios as an extensible, super long battery life mesh GPS communicator. These radios are great for hiking, skiing, paragliding -
|
inexpensive GPS mesh radios as an extensible, super long battery life mesh GPS communicator. These radios are great for hiking, skiing, paragliding -
|
||||||
essentially any hobby where you don't have reliable internet access. Each member of your private mesh can always see the location and distance of all other
|
essentially any hobby where you don't have reliable internet access. Each member of your private mesh can always see the location and distance of all other
|
||||||
members and any text messages sent to your group chat.
|
members and any text messages sent to your group chat.
|
||||||
@@ -14,14 +14,16 @@ will optionally work with your phone, but no phone is required.
|
|||||||
|
|
||||||
Typical time between recharging the radios should be about eight days.
|
Typical time between recharging the radios should be about eight days.
|
||||||
|
|
||||||
This project is currently early-alpha, but if you have questions please [join our discussion forum](https://meshtastic.discourse.group/).
|
This project is is currently in beta-testing - if you have questions please [join our discussion forum](https://meshtastic.discourse.group/).
|
||||||
|
|
||||||
This software is 100% open source and developed by a group of hobbyist experimenters. No warranty is provided, if you'd like to improve it - we'd love your help. Please post in the chat.
|
This software is 100% open source and developed by a group of hobbyist experimenters. No warranty is provided, if you'd like to improve it - we'd love your help. Please post in the chat.
|
||||||
|
|
||||||
## Supported hardware
|
## Supported hardware
|
||||||
|
|
||||||
We currently support three models of radios.
|
We currently support three models of radios.
|
||||||
|
|
||||||
- TTGO T-Beam
|
- TTGO T-Beam
|
||||||
|
|
||||||
- [T-Beam V1.0 w/ NEO-M8N](https://www.aliexpress.com/item/33047631119.html) (Recommended)
|
- [T-Beam V1.0 w/ NEO-M8N](https://www.aliexpress.com/item/33047631119.html) (Recommended)
|
||||||
- [T-Beam V1.0 w/ NEO-6M](https://www.aliexpress.com/item/33050391850.html)
|
- [T-Beam V1.0 w/ NEO-6M](https://www.aliexpress.com/item/33050391850.html)
|
||||||
- 3D printable cases
|
- 3D printable cases
|
||||||
@@ -34,9 +36,10 @@ We currently support three models of radios.
|
|||||||
- [3D Printable case](https://www.thingiverse.com/thing:3125854)
|
- [3D Printable case](https://www.thingiverse.com/thing:3125854)
|
||||||
|
|
||||||
**Make sure to get the frequency for your country**
|
**Make sure to get the frequency for your country**
|
||||||
- US/JP/AU/NZ - 915MHz
|
|
||||||
- CN - 470MHz
|
- US/JP/AU/NZ - 915MHz
|
||||||
- EU - 870MHz
|
- CN - 470MHz
|
||||||
|
- EU - 870MHz
|
||||||
|
|
||||||
Getting a version that includes a screen is optional, but highly recommended.
|
Getting a version that includes a screen is optional, but highly recommended.
|
||||||
|
|
||||||
@@ -165,12 +168,7 @@ Hard resetting via RTS pin...
|
|||||||
|
|
||||||
# Meshtastic Android app
|
# Meshtastic Android app
|
||||||
|
|
||||||
The source code for the (optional) Meshtastic Android app is [here](https://github.com/meshtastic/Meshtastic-Android).
|
The companion (optional) Meshtastic Android app is [here](https://github.com/meshtastic/Meshtastic-Android). You can also download it on Google Play.
|
||||||
|
|
||||||
Alpha test builds available by opting into our alpha test group. See (www.meshtastic.org) for instructions.
|
|
||||||
|
|
||||||
If you don't want to live on the 'bleeding edge' you can opt-in to the beta-test or use the released version:
|
|
||||||
[](https://play.google.com/store/apps/details?id=com.geeksville.mesh&referrer=utm_source%3Dgithub%26utm_medium%3Desp32-readme%26utm_campaign%3Dmeshtastic-esp32%2520readme%26anid%3Dadmob&pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1)
|
|
||||||
|
|
||||||
# Python API
|
# Python API
|
||||||
|
|
||||||
|
|||||||
0
bin/nrf52-gdbserver.sh
Normal file → Executable file
0
bin/nrf52-gdbserver.sh
Normal file → Executable file
@@ -1,3 +1,3 @@
|
|||||||
|
|
||||||
|
|
||||||
export VERSION=0.6.7
|
export VERSION=0.6.8
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
# What is Meshtastic?
|
# What is Meshtastic?
|
||||||
|
|
||||||
Meshtastic is a project that lets you use
|
Meshtastic™ is a project that lets you use
|
||||||
inexpensive (\$30 ish) GPS radios as an extensible, long battery life, secure, mesh GPS communicator. These radios are great for hiking, skiing, paragliding - essentially any hobby where you don't have reliable internet access. Each member of your private mesh can always see the location and distance of all other members and any text messages sent to your group chat.
|
inexpensive (\$30 ish) GPS radios as an extensible, long battery life, secure, mesh GPS communicator. These radios are great for hiking, skiing, paragliding - essentially any hobby where you don't have reliable internet access. Each member of your private mesh can always see the location and distance of all other members and any text messages sent to your group chat.
|
||||||
|
|
||||||
The radios automatically create a mesh to forward packets as needed, so everyone in the group can receive messages from even the furthest member. The radios will optionally work with your phone, but no phone is required.
|
The radios automatically create a mesh to forward packets as needed, so everyone in the group can receive messages from even the furthest member. The radios will optionally work with your phone, but no phone is required.
|
||||||
@@ -24,14 +24,14 @@ Not all of these features are fully implemented yet - see **important** disclaim
|
|||||||
- Very long battery life (should be about eight days with the beta software)
|
- Very long battery life (should be about eight days with the beta software)
|
||||||
- Built in GPS and [LoRa](https://en.wikipedia.org/wiki/LoRa) radio, but we manage the radio automatically for you
|
- Built in GPS and [LoRa](https://en.wikipedia.org/wiki/LoRa) radio, but we manage the radio automatically for you
|
||||||
- Long range - a few miles per node but each node will forward packets as needed
|
- Long range - a few miles per node but each node will forward packets as needed
|
||||||
|
- Secure - channels are encrypted by AES256 (But see important disclaimers below wrt this feature)
|
||||||
- Shows direction and distance to all members of your channel
|
- Shows direction and distance to all members of your channel
|
||||||
- Directed or broadcast text messages for channel members
|
- Directed or broadcast text messages for channel members
|
||||||
- Open and extensible codebase supporting multiple hardware vendors - no lock in to one vendor
|
- Open and extensible codebase supporting multiple hardware vendors - no lock in to one vendor
|
||||||
- Communication API for bluetooth devices (such as our Android app) to use the mesh. So if you have some application that needs long range low power networking, this might work for you.
|
- Communication API for bluetooth devices (such as our Android app) to use the mesh. An iOS application is in the works. And [Meshtastic-python](https://pypi.org/project/meshtastic/) provides access from desktop computers.
|
||||||
- Eventually (within a couple of months) we should have a modified version of Signal that works with this project.
|
|
||||||
- Very easy sharing of private secured channels. Just share a special link or QR code with friends and they can join your encrypted mesh
|
- Very easy sharing of private secured channels. Just share a special link or QR code with friends and they can join your encrypted mesh
|
||||||
|
|
||||||
This project is currently in early alpha - if you have questions please [join our discussion forum](https://meshtastic.discourse.group/).
|
This project is currently in beta testing but it is fairly stable and feature complete - if you have questions please [join our discussion forum](https://meshtastic.discourse.group/).
|
||||||
|
|
||||||
This software is 100% open source and developed by a group of hobbyist experimenters. No warranty is provided, if you'd like to improve it - we'd love your help. Please post in the [forum](https://meshtastic.discourse.group/).
|
This software is 100% open source and developed by a group of hobbyist experimenters. No warranty is provided, if you'd like to improve it - we'd love your help. Please post in the [forum](https://meshtastic.discourse.group/).
|
||||||
|
|
||||||
@@ -39,6 +39,7 @@ This software is 100% open source and developed by a group of hobbyist experimen
|
|||||||
|
|
||||||
Note: Updates are happening almost daily, only major updates are listed below. For more details see our forum.
|
Note: Updates are happening almost daily, only major updates are listed below. For more details see our forum.
|
||||||
|
|
||||||
|
- 06/04/2020 - 0.6.7 Beta releases of both the application and the device code are released. Features are fairly solid now with a sizable number of users.
|
||||||
- 04/28/2020 - 0.6.0 [Python API](https://pypi.org/project/meshtastic/) released. Makes it easy to use meshtastic devices as "zero config / just works" mesh transport adapters for other projects.
|
- 04/28/2020 - 0.6.0 [Python API](https://pypi.org/project/meshtastic/) released. Makes it easy to use meshtastic devices as "zero config / just works" mesh transport adapters for other projects.
|
||||||
- 04/20/2020 - 0.4.3 Pretty solid now both for the android app and the device code. Many people have donated translations and code. Probably going to call it a beta soon.
|
- 04/20/2020 - 0.4.3 Pretty solid now both for the android app and the device code. Many people have donated translations and code. Probably going to call it a beta soon.
|
||||||
- 03/03/2020 - 0.0.9 of the Android app and device code is released. Still an alpha but fairly functional.
|
- 03/03/2020 - 0.0.9 of the Android app and device code is released. Still an alpha but fairly functional.
|
||||||
|
|||||||
4
gdbinit
4
gdbinit
@@ -6,8 +6,8 @@
|
|||||||
# mon exec SetMonModeDebug=1
|
# mon exec SetMonModeDebug=1
|
||||||
# mon exec SetMonModeVTableAddr=0x26000
|
# mon exec SetMonModeVTableAddr=0x26000
|
||||||
|
|
||||||
echo setting RTTAddr
|
# echo setting RTTAddr
|
||||||
eval "monitor exec SetRTTAddr %p", &_SEGGER_RTT
|
# eval "monitor exec SetRTTAddr %p", &_SEGGER_RTT
|
||||||
|
|
||||||
# the jlink debugger seems to want a pause after reset before we tell it to start running
|
# the jlink debugger seems to want a pause after reset before we tell it to start running
|
||||||
define restart
|
define restart
|
||||||
|
|||||||
@@ -114,7 +114,6 @@ void NodeDB::init()
|
|||||||
devicestate.has_my_node = true;
|
devicestate.has_my_node = true;
|
||||||
devicestate.has_radio = true;
|
devicestate.has_radio = true;
|
||||||
devicestate.has_owner = true;
|
devicestate.has_owner = true;
|
||||||
devicestate.has_radio = false;
|
|
||||||
devicestate.radio.has_channel_settings = true;
|
devicestate.radio.has_channel_settings = true;
|
||||||
devicestate.radio.has_preferences = true;
|
devicestate.radio.has_preferences = true;
|
||||||
devicestate.node_db_count = 0;
|
devicestate.node_db_count = 0;
|
||||||
@@ -137,16 +136,8 @@ void NodeDB::init()
|
|||||||
memcpy(owner.macaddr, ourMacAddr, sizeof(owner.macaddr));
|
memcpy(owner.macaddr, ourMacAddr, sizeof(owner.macaddr));
|
||||||
sprintf(owner.long_name, "Unknown %02x%02x", ourMacAddr[4], ourMacAddr[5]);
|
sprintf(owner.long_name, "Unknown %02x%02x", ourMacAddr[4], ourMacAddr[5]);
|
||||||
|
|
||||||
// Crummy guess at our nodenum
|
|
||||||
pickNewNodeNum();
|
|
||||||
|
|
||||||
sprintf(owner.short_name, "?%02X", myNodeInfo.my_node_num & 0xff);
|
sprintf(owner.short_name, "?%02X", myNodeInfo.my_node_num & 0xff);
|
||||||
|
|
||||||
// Include our owner in the node db under our nodenum
|
|
||||||
NodeInfo *info = getOrCreateNode(getNodeNum());
|
|
||||||
info->user = owner;
|
|
||||||
info->has_user = true;
|
|
||||||
|
|
||||||
if (!FSBegin()) // FIXME - do this in main?
|
if (!FSBegin()) // FIXME - do this in main?
|
||||||
{
|
{
|
||||||
DEBUG_MSG("ERROR filesystem mount Failed\n");
|
DEBUG_MSG("ERROR filesystem mount Failed\n");
|
||||||
@@ -157,6 +148,15 @@ void NodeDB::init()
|
|||||||
loadFromDisk();
|
loadFromDisk();
|
||||||
// saveToDisk();
|
// saveToDisk();
|
||||||
|
|
||||||
|
// Note! We do this after loading saved settings, so that if somehow an invalid nodenum was stored in preferences we won't
|
||||||
|
// keep using that nodenum forever. Crummy guess at our nodenum (but we will check against the nodedb to avoid conflicts)
|
||||||
|
pickNewNodeNum();
|
||||||
|
|
||||||
|
// Include our owner in the node db under our nodenum
|
||||||
|
NodeInfo *info = getOrCreateNode(getNodeNum());
|
||||||
|
info->user = owner;
|
||||||
|
info->has_user = true;
|
||||||
|
|
||||||
// We set these _after_ loading from disk - because they come from the build and are more trusted than
|
// We set these _after_ loading from disk - because they come from the build and are more trusted than
|
||||||
// what is stored in flash
|
// what is stored in flash
|
||||||
strncpy(myNodeInfo.region, optstr(HW_VERSION), sizeof(myNodeInfo.region));
|
strncpy(myNodeInfo.region, optstr(HW_VERSION), sizeof(myNodeInfo.region));
|
||||||
@@ -176,8 +176,11 @@ void NodeDB::init()
|
|||||||
*/
|
*/
|
||||||
void NodeDB::pickNewNodeNum()
|
void NodeDB::pickNewNodeNum()
|
||||||
{
|
{
|
||||||
// Pick an initial nodenum based on the macaddr
|
NodeNum r = myNodeInfo.my_node_num;
|
||||||
NodeNum r = sizeof(NodeNum) == 1 ? ourMacAddr[5]
|
|
||||||
|
// If we don't have a nodenum at app - pick an initial nodenum based on the macaddr
|
||||||
|
if (r == 0)
|
||||||
|
r = sizeof(NodeNum) == 1 ? ourMacAddr[5]
|
||||||
: ((ourMacAddr[2] << 24) | (ourMacAddr[3] << 16) | (ourMacAddr[4] << 8) | ourMacAddr[5]);
|
: ((ourMacAddr[2] << 24) | (ourMacAddr[3] << 16) | (ourMacAddr[4] << 8) | ourMacAddr[5]);
|
||||||
|
|
||||||
if (r == NODENUM_BROADCAST || r < NUM_RESERVED)
|
if (r == NODENUM_BROADCAST || r < NUM_RESERVED)
|
||||||
@@ -247,15 +250,18 @@ void NodeDB::saveToDisk()
|
|||||||
if (!pb_encode(&stream, DeviceState_fields, &devicestate)) {
|
if (!pb_encode(&stream, DeviceState_fields, &devicestate)) {
|
||||||
DEBUG_MSG("Error: can't write protobuf %s\n", PB_GET_ERROR(&stream));
|
DEBUG_MSG("Error: can't write protobuf %s\n", PB_GET_ERROR(&stream));
|
||||||
// FIXME - report failure to phone
|
// FIXME - report failure to phone
|
||||||
}
|
|
||||||
|
|
||||||
f.close();
|
f.close();
|
||||||
|
} else {
|
||||||
|
// Success - replace the old file
|
||||||
|
f.close();
|
||||||
|
|
||||||
// brief window of risk here ;-)
|
// brief window of risk here ;-)
|
||||||
if (!FS.remove(preffile))
|
if (!FS.remove(preffile))
|
||||||
DEBUG_MSG("Warning: Can't remove old pref file\n");
|
DEBUG_MSG("Warning: Can't remove old pref file\n");
|
||||||
if (!FS.rename(preftmp, preffile))
|
if (!FS.rename(preftmp, preffile))
|
||||||
DEBUG_MSG("Error: can't rename new pref file\n");
|
DEBUG_MSG("Error: can't rename new pref file\n");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
DEBUG_MSG("ERROR: can't write prefs\n"); // FIXME report to app
|
DEBUG_MSG("ERROR: can't write prefs\n"); // FIXME report to app
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,3 +34,17 @@ class UC1701Spi : public OLEDDisplay
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#include "variant.h"
|
||||||
|
#include <UC1701.h>
|
||||||
|
static UC1701 lcd(PIN_SPI_SCK, PIN_SPI_MOSI, ERC12864_CS, ERC12864_CD);
|
||||||
|
|
||||||
|
|
||||||
|
void testLCD() {
|
||||||
|
// PCD8544-compatible displays may have a different resolution...
|
||||||
|
lcd.begin();
|
||||||
|
|
||||||
|
// Write a piece of text on the first line...
|
||||||
|
lcd.setCursor(0, 0);
|
||||||
|
lcd.print("Hello, World!");
|
||||||
|
}
|
||||||
@@ -132,7 +132,7 @@ static const uint8_t SCK = PIN_SPI_SCK;
|
|||||||
#define SX1262_CS (10)
|
#define SX1262_CS (10)
|
||||||
#define SX1262_DIO1 (20)
|
#define SX1262_DIO1 (20)
|
||||||
#define SX1262_DIO2 (26)
|
#define SX1262_DIO2 (26)
|
||||||
#define SX1262_BUSY (18)
|
#define SX1262_BUSY (31) // Supposed to be P0.18 but because of reworks, now on P0.31 (18)
|
||||||
#define SX1262_RESET (17)
|
#define SX1262_RESET (17)
|
||||||
// #define SX1262_ANT_SW (32 + 10)
|
// #define SX1262_ANT_SW (32 + 10)
|
||||||
#define SX1262_RXEN (22)
|
#define SX1262_RXEN (22)
|
||||||
|
|||||||
Reference in New Issue
Block a user