Merge branch 'master' into i18n

This commit is contained in:
Thomas Göttgens 2023-01-13 11:41:09 +01:00 committed by GitHub
commit 21a2a802ec
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
63 changed files with 1394 additions and 471 deletions

View file

@ -1,6 +1,6 @@
# Meshtastic
[![CI](https://img.shields.io/github/workflow/status/meshtastic/meshtastic/CI?label=actions&logo=github&color=yellow)](https://github.com/meshtastic/meshtastic/actions/workflows/ci.yml)
[![CI](https://img.shields.io/github/actions/workflow/status/meshtastic/meshtastic/ci.yml?branch=master&label=actions&logo=github&color=yellow)](https://github.com/meshtastic/meshtastic/actions/workflows/ci.yml)
[![CLA assistant](https://cla-assistant.io/readme/badge/meshtastic/meshtastic)](https://cla-assistant.io/meshtastic/repo)
[![Fiscal Contributors](https://opencollective.com/meshtastic/tiers/badge.svg?label=Fiscal%20Contributors&color=deeppink)](https://opencollective.com/meshtastic/)
[![Vercel](https://img.shields.io/static/v1?label=Powered%20by&message=Vercel&style=flat&logo=vercel&color=000000)](https://vercel.com?utm_source=meshtastic&utm_campaign=oss)

View file

@ -23,12 +23,13 @@ Everyone contributes in a different way. Join the [Meshtastic Discord](https://d
Minimum requirement is Android 5 (Lollipop 2014, first BLE support), however at least Android 6 (Marshmallow 2015) is recommended as Bluetooth is more stable. While Android 5/6 are officially supported by Meshtastic, it is *not* recommended that you purchase devices with these versions due to their limited OS support and limited battery life due to age. Many newer models exist that are very affordable. A good resource to use when researching affordable devices is the [LineageOS Supported Devices List](https://wiki.lineageos.org/devices/).
### What is the cloud icon next to the message?
### What does the icon next to the message mean?
- Empty Cloud - Queued on the device to be sent over the mesh.
- Up Arrow - Queued on the app to be sent to your device.
- Check Mark - At least one other node on the mesh acknowledged the message.
- Cross Mark - Not acknowledged or message error.
- Cloud with an up arrow - Queued on the app to be sent to your device.
- Cloud only - Queued on the device to be sent over the mesh.
- Cloud with a check mark - At least one other node on the mesh acknowledged the message.
- Person with a check mark - The intended recipient of your direct message acknowledged the message.
- Cloud crossed out - Not acknowledged or message error.
### How can I clear the message history?
@ -56,7 +57,7 @@ Try forgetting the Bluetooth connection from the iOS/iPadOS/macOS System Setting
### Do the Apple applications provide an indication if the message was acknowledged on the mesh?
Yes, when the message is sent you will first see a `Waiting to be acknowledged...` status beneath the message. If the message is acknowledged by a node on the mesh this will update to `Acknowledged`, but if no nodes have responded it will indicate `Max Retransmission Reached`. If there is an error, the status will update to the appropriate error. Additionally, you can long press on the message and select `Message Details` to view the date/time sent, if ack was received and the time ack was received or the error (if there was one).
Yes, when the message is sent you will first see a `Waiting to be acknowledged...` status beneath the message. If the message is acknowledged by a node on the mesh this will update to `Acknowledged` in orange, which turns into grey when sending a direct message and the intended recipient acknowledged it. If no nodes have responded it will indicate `Max Retransmission Reached`. If there is an error, the status will update to the appropriate error. Additionally, you can long press on the message and select `Message Details` to view the date/time sent, if ack was received and the time ack was received or the error (if there was one).
<!-- Channels -->
@ -119,6 +120,11 @@ Once the node wakes up from sleep, your phone will relay any delayed messages th
- Android instructions see: [Android Usage](/docs/software/android/usage#configuration-options)
- Python CLI instructions see: [Python Usage](/docs/software/python/cli/usage#changing-settings)
### I am in Europe and my device seems to stop transmitting after a while, what is going on?
Europe has an hourly duty cycle limit of 10% in the frequency band that Meshtastic uses. It might be that you hit this limit if you are sending a lot. You can confirm this by checking whether you see duty cycle limit errors in the serial log, Mesh Log (Apple apps) or Debug Panel (Android).
To limit traffic, you can consider setting the device metrics and position update intervals higher. Alternatively, the device can be configured to override the duty cycle limit, but then you will violate the regulations.
### Why does only one RAK Meshtastic Starter kit show up in my node list?
There was a bug where Meshtastic Starter kits were sent out with the same MAC address. With a single MAC address the devices all report as being the same device. Without the battery connected, flash the starter kit device(s) to any firmware > 1.2.59 and then do a factory reset, disconnect and reconnect the board and run `meshtastic --info`.

View file

@ -13,6 +13,7 @@ Meshtastic® is a project that enables you to use inexpensive LoRa radios as a l
- Long range ([_166km record by PuzzledPancake_](/docs/overview/range-tests#current-record))
- No phone required for mesh communication
- Decentralised communication - no dedicated router required
- Encrypted communication
- Excellent battery life
- Send and receive text messages between members of the mesh
@ -21,11 +22,11 @@ Meshtastic® is a project that enables you to use inexpensive LoRa radios as a l
## How it works
The underlying technology, LoRa, is a long range radio protocol available to most regions without requiring certification like HAM operators.
The underlying technology, LoRa, is a long range radio protocol available to most regions without requiring additional licensing or certification, like HAM operators.
The radios automatically rebroadcast messages they receive in order to create a mesh network so that everyone in the group can receive messages - even from the furthest member. Depending on settings used, the Meshtastic mesh can sustain up to 80 device nodes.
Radios can be paired to a single phone so that your friends and family are able to address a message to your specific radio. Each device supports a connection from a single user at a time.
Meshtastic radios can be paired to a single phone so that your friends and family are able to address a message to your specific radio. Each device supports a connection from a single user at a time.
If you are interested in a more technical overview of how Meshtastic works, visit the overview section below:

View file

@ -69,6 +69,7 @@ The default messaging provided by Layer 1 is extended by setting the `WantAck` f
> packet (because naive flooding algorithm). If it hears that, the odds (given typical LoRa topology) are very high that every node should eventually receive the message. So FloodingRouter.cpp generates an implicit ACK which is delivered to the original sender. If after some time we don't hear anyone rebroadcast our packet, we will timeout and re-transmit, using the regular resend logic.
If a transmitting node does not receive an ACK (or NAK) packet after a certain expiration time, it will use Layer 1 to attempt a re-transmission of the sent packet. A reliable packet (at this 'zero hop' level) will be resent a maximum of three times. If no ACK or NAK has been received by then the local node will internally generate a NAK (either for local consumption or use by higher layers of the protocol). The re-transmission expiration time is based on the maximum time it would take to receive an (implicit) ACK, taking the airtime of the sent packet and any processing delay into account.
For direct messages, the intended recipient will also send a real ACK all the way back to the original sender, but the device will only retransmit when it received no ACK at all.
### Layer 3: (Naive) Flooding for Multi-Hop Messaging

View file

@ -14,4 +14,8 @@
| `IN` | India |
| `NZ_865` | New Zealand 865MHz |
| `TH` | Thailand |
| `LORA_24` | 2.4 GHz band worldwide |
| `LORA_24` | 2.4 GHz band worldwide |
:::info
EU_433 and EU_868 have to adhere to an hourly duty cycle limitation of 10%. Your device will stop transmitting if you reach it, until it is allowed again.
:::

View file

@ -88,6 +88,16 @@ All Bluetooth module config options are available in the python CLI. Example com
| `bluetooth.mode` | `RANDOM_PIN`, `FIXED_PIN`, `NO_PIN` | `RANDOM_PIN` |
| `bluetooth.fixedPin` | `integer` (6 digits) | `123456` |
:::tip
Because the device will reboot after each command is sent via CLI, it is recommended when setting multiple values in a config section that commands be chained together as one.
```shell title="Example:"
meshtastic --set bluetooth.enabled true --set bluetooth.fixed_pin 111111
```
:::
```shell title="Enable/Disable Bluetooth Module"
meshtastic --set bluetooth.enabled true
meshtastic --set bluetooth.enabled false

View file

@ -130,6 +130,16 @@ Channel settings are only available on Apple platforms by scanning QR codes.
All Channel config options are available in the python CLI. Example commands are below:
:::
:::tip
Because the device will reboot after each command is sent via CLI, it is recommended when setting multiple values in a config section that commands be chained together as one.
```shell title="Example:"
meshtastic --ch-set name "My Channel" --ch-set psk random --ch-set uplink_enabled true --ch-index 4
```
:::
**Id**
```shell title="Set the PRIMARY channel ID"

View file

@ -28,12 +28,12 @@ Acceptable values:
### Serial Console
Acceptable values: `true` or `false`
Disabling this will disable the SerialConsole by not initializing the StreamAPI
Disabling this will disable the SerialConsole by not initializing the StreamAPI.
### Debug Log
Acceptable values: `true` or `false`
By default we turn off logging as soon as an API client connects Set this to true to leave the debug log outputting even when API is active.
By default we turn off logging as soon as an API client connects. Set this to true to leave the debug log outputting even when API is active.
## Device Config Client Availability
@ -44,7 +44,6 @@ values={[
{label: 'Android', value: 'android'},
{label: 'Apple', value: 'apple'},
{label: 'CLI', value: 'cli'},
{label: 'Flasher', value: 'flasher'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="android">
@ -68,8 +67,28 @@ All device config options other than NTP Server are available on iOS, iPadOS and
</TabItem>
<TabItem value="cli">
:::info
All device config options are available in the python CLI. Example commands are below:
:::
| Setting | Acceptable Values | Default |
|--------------------------|----------------------------------------------------|----------|
| device.debug_log_enabled | `true`, `false` | `false` |
| device.role | `CLIENT`, `CLIENT_MUTE`, `ROUTER`, `ROUTER_CLIENT` | `CLIENT` |
| device.serial_enabled | `true`, `false` | `true` |
:::tip
Because the device will reboot after each command is sent via CLI, it is recommended when setting multiple values in a config section that commands be chained together as one.
```shell title="Example:"
meshtastic --set device.role CLIENT --set device.debug_log_enabled true
```
:::
```shell title="Set the role to client"
meshtastic --set device.role CLIENT
```
@ -83,14 +102,7 @@ meshtastic --set device.debug_log_enabled true
```
</TabItem>
<TabItem value="flasher">
:::danger
No device config options are available in the Flasher.
:::
</TabItem>
<TabItem value="web">
<TabItem value="web">
:::info
All device config options are available in the Web UI.

View file

@ -61,7 +61,6 @@ values={[
{label: 'Android', value: 'android'},
{label: 'Apple', value: 'apple'},
{label: 'CLI', value: 'cli'},
{label: 'Flasher', value: 'flasher'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="android">
@ -85,8 +84,32 @@ All display config options are available on iOS, iPadOS and macOS at Settings >
</TabItem>
<TabItem value="cli">
:::info
All display config options are available in the python CLI. Example commands are below:
:::
| Setting | Acceptable Values | Default |
|-----------------------------------|--------------------------------------------|------------------------------|
| display.auto_screen_carousel_secs | `integer` | Default of `0` is 10 minutes |
| display.compass_north_top | `false`, `true` | `false` |
| display.flip_screen | `fasle`, `true` | `false` |
| display.gps_format | `DEC`, `DMS`, `UTM`, `MGRS`, `OLC`, `OSGR` | `DEC` |
| display.oled | `OLED_AUTO`, `OLED_SSD1306`, `OLED_SH1106` | `OLED_AUTO` |
| display.screen_on_secs | `integer` | Default of `0` is off. |
| display.units | `METRIC`, `IMPERIAL` | `METRIC` |
:::tip
Because the device will reboot after each command is sent via CLI, it is recommended when setting multiple values in a config section that commands be chained together as one.
```shell title="Example:"
meshtastic --set display.screen_on_secs 120 --set display.gps_format UTM
```
:::
```shell title="Set Screen On Duration (Default of 0 is 10 minutes)"
meshtastic --set display.screen_on_secs 0
meshtastic --set display.screen_on_secs 120
@ -103,14 +126,7 @@ meshtastic --set display.gps_format UTM
```
</TabItem>
<TabItem value="flasher">
:::info
No display config options are available in the Flasher.
:::
</TabItem>
<TabItem value="web">
<TabItem value="web">
:::info
All display config options are available in the Web UI.

View file

@ -67,6 +67,10 @@ This is controlling the actual hardware frequency the radio is transmitting on.
For testing it is useful sometimes to force a node to never listen to particular other nodes (simulating radio out of range). All nodenums listed in the ignore_incoming array will have packets they send dropped on receive (by router.cpp)
### Override Duty Cycle Limit
Setting this option to 'true' means the device will ignore the hourly duty cycle limit in Europe. This means that you might violate regulations if the device transmits too much. By default, this option is set to 'false,' which means the device will stop sending data when it reaches the hourly limit and will start again when it is allowed to do so.
## LoRa Config Client Availability
<Tabs
@ -100,22 +104,61 @@ Configuration of Region, Modem Preset and Hop Limit is available on iOS, iPadOS
</TabItem>
<TabItem value="cli">
:::info
LoRa config commands are available in the python CLI. Example commands are below:
:::
| Setting | Acceptable Values | Default |
| :----------: | :---------------------------------------------------------------------------: | :---------------: |
| lora.modem_preset | `LONG_FAST`, `LONG_SLOW`, `VERY_LONG_SLOW`, `MEDIUM_SLOW`, `MEDIUM_FAST`, `SHORT_SLOW`, `SHORT_FAST` | `LONG_FAST` |
| lora.region | `UNSET`, `US`, `EU_433`, `EU_868`, `CN`, `JP`, `ANZ`, `KR`, `TW`, `RU` ,`IN`, `NZ_865`, `TH`, `LORA_24` | `UNSET` |
| lora.hop_limit | `1`,`2`,`3`,`4`,`5`,`6`,`7` | `3` |
| lora.override_duty_cycle | `false`, `true` | `false` |
:::tip
Because the device will reboot after each command is sent via CLI, it is recommended when setting multiple values in a config section that commands be chained together as one.
```shell title="Example:"
meshtastic --set lora.region US --set lora.modem_preset LONG_FAST
```
:::
```shell title="Set Modem Preset"
meshtastic --set lora.modem_preset LONG_FAST
meshtastic --set lora.modem_preset MEDIUM_FAST
```
```shell title="Set Region"
meshtastic --set lora.region US
meshtastic --set lora.region EU_433
```
```shell title="Set Hop Limit"
meshtastic --set lora.hop_limit 2
```
```shell title="Override Duty Cycle"
meshtastic --set lora.override_duty_cycle true
meshtastic --set lora.override_duty_cycle false
```
</TabItem>
<TabItem value="flasher">
:::info
No LoRa config options are available in the Flasher.
Only `lora.region` can be set via the GUI flasher. Refer to other clients for any other config.
:::
</TabItem>
<TabItem value="web">
</TabItem>
<TabItem value="web">
:::info
All LoRa config options are available in the Web UI.

View file

@ -65,12 +65,11 @@ The first time your device restarts after enabling WiFi or Ethernet, it will tak
<Tabs
groupId="settings"
defaultValue="flasher"
defaultValue="cli"
values={[
{label: 'Android', value: 'android'},
{label: 'Apple', value: 'apple'},
{label: 'CLI', value: 'cli'},
{label: 'Flasher', value: 'flasher'},
{label: 'Web', value: 'web'},
]}>
@ -98,8 +97,12 @@ Network config is not available on Apple OS's.
<TabItem value="cli">
:::info
All Network config options are available in the python CLI.
:::
| Setting | Acceptable Values | Default |
| :-----------: | :---------------: | :-----: |
| network.ntp_server | string | `0.pool.ntp.org` |
@ -107,6 +110,16 @@ All Network config options are available in the python CLI.
| network.wifi_psk | string | `""` |
| network.wifi_ssid | string | `""` |
:::tip
Because the device will reboot after each command is sent via CLI, it is recommended when setting multiple values in a config section that commands be chained together as one.
```shell title="Example:"
meshtastic --set network.wifi_enabled true --set network.wifi_ssid "my network" --set network.wifi_psk mypassword
```
:::
```shell title="Set NTP Server"
meshtastic --set network.ntp_server "0.pool.ntp.org"
```
@ -131,14 +144,6 @@ meshtastic --set network.wifi_psk "my password"
</TabItem>
<TabItem value="flasher">
:::info
All Network config options are available in the Flasher.
:::
</TabItem>
<TabItem value="web">
:::info

View file

@ -83,7 +83,6 @@ values={[
{label: 'Android', value: 'android'},
{label: 'Apple', value: 'apple'},
{label: 'CLI', value: 'cli'},
{label: 'Flasher', value: 'flasher'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="android">
@ -107,8 +106,12 @@ All position config values are available on iOS, iPadOS and macOS at Settings >
</TabItem>
<TabItem value="cli">
:::info
All Position config commands are available in the python CLI. Example commands are below:
:::
| Setting | Acceptable Values | Default |
| :----------------------------: | :-----------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------: |
| position.gps_enabled | `true`, `false` | `true` |
@ -119,6 +122,15 @@ All Position config commands are available in the python CLI. Example commands a
| position.position_broadcast_secs | `integer` (seconds) | Default of `0` is 15 Minutes |
| position.flags | `UNSET`, `ALTITUDE`, `ALTITUDE_MSL`, `GEOIDAL_SEPARATION`, `DOP`, `HVDOP`, `PDOP`, `SATINVIEW`, `SEQ_NO`, `TIMESTAMP`, `HEADING`, `SPEED` | `UNSET` |
:::tip
Because the device will reboot after each command is sent via CLI, it is recommended when setting multiple values in a config section that commands be chained together as one. **This is especially important for position values to ensure they are set at the same time and avoid being overwritten by subsequent commands.**
```shell title="Example:"
meshtastic --set position.fixed_position true --setlat 37.8651 --setlon -119.5383
```
:::
```shell title="Set GPS update interval (Default of 0 is 30 seconds)"
meshtastic --set position.gps_update_interval 0
@ -160,30 +172,19 @@ meshtastic --set position.broadcast_secs 60
It may take some time to see that the change has taken effect. The GPS location is updated according to the value specified on `gps_update_interval` and the mesh will be notified of the new position in relation to the `position_broadcast_secs` value.
:::
:::tip
Include each flag desired separated by a single space.
:::
```shell title="Set / Unset Position Flags"
meshtastic --pos-fields ALTITUDE ALTITUDE_MSL
meshtastic --pos-fields UNSET
```
</TabItem>
<TabItem value="flasher">
:::info
No position config options are available in the Flasher.
:::
</TabItem>
<TabItem value="web">
<TabItem value="web">
:::info
All position config options are available in the Web UI.
:::
</TabItem>
</TabItem>
</Tabs>
:::caution

View file

@ -74,7 +74,6 @@ values={[
{label: 'Android', value: 'android'},
{label: 'Apple', value: 'apple'},
{label: 'CLI', value: 'cli'},
{label: 'Flasher', value: 'flasher'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="android">
@ -99,8 +98,12 @@ Power config is not available on Apple OS's.
</TabItem>
<TabItem value="cli">
:::info
All Power config options are available in the python CLI.
:::
| Setting | Acceptable Values | Default |
| :----------------------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------: |
| power.is_power_saving | `true`, `false` | `false` |
@ -112,6 +115,15 @@ All Power config options are available in the python CLI.
| power.ls_secs | `integer` (seconds) | Default of `0` is 1 hour |
| power.min_wake_secs | `integer` (seconds) | Default of `0` is 10 seconds |
:::tip
Because the device will reboot after each command is sent via CLI, it is recommended when setting multiple values in a config section that commands be chained together as one.
```shell title="Example:"
meshtastic --set power.is_power_saving true --set power.on_battery_shutdown_after_secs 120
```
:::
```shell title="Enable / Disable Power Saving"
meshtastic --set power.is_power_saving true
@ -150,14 +162,7 @@ meshtastic --set power.min_wake_secs 0
meshtastic --set power.min_wake_secs 120
```
</TabItem>
<TabItem value="flasher">
:::info
Power config is not available in the Flasher.
:::
</TabItem>
<TabItem value="web">
<TabItem value="web">
:::info
All power config options are available in the Web UI.

View file

@ -44,7 +44,6 @@ values={[
{label: 'Android', value: 'android'},
{label: 'Apple', value: 'apple'},
{label: 'CLI', value: 'cli'},
{label: 'Flasher', value: 'flasher'},
{label: 'Web', value: 'web'},
]}>
@ -71,10 +70,24 @@ User Config options are available for Android.
<TabItem value="cli">
:::info
All User config options are available in the python CLI. Example commands are below:
:::
Please see instructions for [Enabling HAM License](/docs/software/python/cli/usage#ham-radio-support)
:::tip
Because the device will reboot after each command is sent via CLI, it is recommended when setting multiple values in a config section that commands be chained together as one.
```shell title="Example:"
meshtastic --set-owner 'your node name' --set-owner-short 'NODE'
```
:::
```shell title="Set the LongName Value"
meshtastic --set-owner 'your node name'
```
@ -89,14 +102,6 @@ meshtastic --set-ham 'CALLSIGN'
</TabItem>
<TabItem value="flasher">
:::info
No User config options are available in the Flasher.
:::
</TabItem>
<TabItem value="web">
:::info

View file

@ -65,7 +65,6 @@ values={[
{label: 'Android', value: 'android'},
{label: 'Apple', value: 'apple'},
{label: 'CLI', value: 'cli'},
{label: 'Flasher', value: 'flasher'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="android">
@ -89,8 +88,12 @@ Audio module config is not available on iOS, iPadOS and macOS.
</TabItem>
<TabItem value="cli">
:::info
All audio module config options are available in the python CLI. Example commands are below:
:::
| Setting | Acceptable Values | Default |
| :-------------------: | :-----------------: | :-----: |
| audio.enabled | `true`, `false` | `false` |
@ -101,6 +104,15 @@ All audio module config options are available in the python CLI. Example command
| audio.i2s_din | GPIO Pin Number 1-34 | no Default |
| audio.i2s_sck | GPIO Pin Number 1-34 | no Default |
:::tip
Because the device will reboot after each command is sent via CLI, it is recommended when setting multiple values in a config section that commands be chained together as one.
```shell title="Example:"
meshtastic --set audio.enabled true --set audio.bitrate CODEC2_1400
```
:::
```shell title="Enable / Disable Module"
meshtastic --set audio.enabled true
@ -125,14 +137,7 @@ meshtastic --set audio.bitrate CODEC2_1400
```
</TabItem>
<TabItem value="flasher">
:::info
No audio module config options are available in the Flasher.
:::
</TabItem>
<TabItem value="web">
<TabItem value="web">
:::info
All audio module config options are available in the Web UI.
@ -142,7 +147,9 @@ All audio module config options are available in the Web UI.
</Tabs>
:::warning
GPIO access is fundamentally dangerous because invalid options can physically damage or destroy your hardware. Ensure that you fully understand the schematic for your particular device before trying this as we do not offer a warranty. Use at your own risk.
This module requires attaching a peripheral accessory to your device. It will not work without one.
:::

View file

@ -81,7 +81,6 @@ values={[
{label: 'Android', value: 'android'},
{label: 'Apple', value: 'apple'},
{label: 'CLI', value: 'cli'},
{label: 'Flasher', value: 'flasher'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="android">
@ -106,7 +105,9 @@ All canned message module config options are available on iOS, iPadOS and macOS
<TabItem value="cli">
:::info
All canned message module config options are available in the python CLI.
:::
Example commands are below:
@ -125,6 +126,16 @@ Example commands are below:
| canned_message.inputbroker_pin_b | `integer` | (not defined) |
| canned_message.inputbroker_pin_press | `integer` | (not defined) |
:::tip
Because the device will reboot after each command is sent via CLI, it is recommended when setting multiple values in a config section that commands be chained together as one.
```shell title="Example:"
meshtastic --set canned_message.enabled true --set canned_message.send_bell true
```
:::
```shell title="Enable/Disable the Canned Message Module"
meshtastic --set canned_message.enabled true
meshtastic --set canned_message.enabled false
@ -178,14 +189,7 @@ meshtastic --set canned_message.inputbroker_event_press KEY_SELECT
meshtastic --set canned_message.inputbroker_event_press ""
```
</TabItem>
<TabItem value="flasher">
:::info
No canned message test module config options are available in the Flasher.
:::
</TabItem>
<TabItem value="web">
<TabItem value="web">
:::info
All canned message module config options are available in the Web UI.

View file

@ -51,7 +51,6 @@ values={[
{label: 'Android', value: 'android'},
{label: 'Apple', value: 'apple'},
{label: 'CLI', value: 'cli'},
{label: 'Flasher', value: 'flasher'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="android">
@ -75,8 +74,12 @@ All external notification module config options are available on iOS, iPadOS and
</TabItem>
<TabItem value="cli">
:::info
All external notification module config options are available in the python CLI. Example commands are below:
:::
| Setting | Acceptable Values | Default |
| :----------------------------: | :----------------------: | :-----: |
| external_notification.enabled | `true`, `false` | `false` |
@ -86,6 +89,16 @@ All external notification module config options are available in the python CLI.
| external_notification.output | `integer` | `0` |
| external_notification.output_ms | `integer` (milliseconds) | `0` |
:::tip
Because the device will reboot after each command is sent via CLI, it is recommended when setting multiple values in a config section that commands be chained together as one.
```shell title="Example:"
meshtastic --set external_notification.enabled true --set external_notification.alert_bell true
```
:::
```shell title="Enable/Disable External Notification Module"
meshtastic --set external_notification.enabled true
meshtastic --set external_notification.enabled false
@ -115,20 +128,13 @@ meshtastic --set external_notification.output_ms 0
meshtastic --set external_notification.output_ms 1500
```
</TabItem>
<TabItem value="flasher">
:::info
External Notification module config is not available in the Flasher.
:::
</TabItem>
<TabItem value="web">
<TabItem value="web">
:::info
All External Notification module config is available for the Web UI.
:::
</TabItem>
</TabItem>
</Tabs>
:::warning

View file

@ -17,3 +17,4 @@ Modules are included in the firmware and allow users to extend the functionality
| [Range Test](/docs/settings/moduleconfig/range-test) | Send messages with GPS location at an interval to test the distance your devices can communicate. Requires (at least) one device set up as a sender and one as a receiver. The receiver(s) will log all incoming messages to a CSV. |
| [Serial Module](/docs/settings/moduleconfig/serial) | Send messages across the mesh by sending strings over a serial port. |
| [Telemetry](/docs/settings/moduleconfig/telemetry) | Attach sensors to the device and transmit readings on a regular interval to the mesh. |
| [Traceroute](/docs/settings/moduleconfig/traceroute) | Track which nodes are used to hop a message to a certain destination. |

View file

@ -49,7 +49,6 @@ values={[
{label: 'Android', value: 'android'},
{label: 'Apple', value: 'apple'},
{label: 'CLI', value: 'cli'},
{label: 'Flasher', value: 'flasher'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="android">
@ -73,8 +72,12 @@ MQTT module config is not available for Apple.
</TabItem>
<TabItem value="cli">
:::info
All MQTT module config options are available in the python CLI. Example commands are below:
:::
| Setting | Acceptable Values | Default |
| :--------------------------: | :----------------------: | :-----: |
| mqtt.enabled | `true`, `false` | `false` |
@ -84,9 +87,24 @@ All MQTT module config options are available in the python CLI. Example commands
| mqtt.encryption_enabled | `string` | |
| mqtt.json_enabled | `true`, `false` | `false` |
:::tip
Because the device will reboot after each command is sent via CLI, it is recommended when setting multiple values in a config section that commands be chained together as one.
```shell title="Example:"
meshtastic --set mqtt.enabled true --set mqtt.json_enabled true
```
:::
```shell title="Enable/Disable MQTT Module"
meshtastic --set mqtt.enabled true
meshtastic --set mqtt.enabled false
```
```shell title="Enable/Disable MQTT JSON"
meshtastic --set mqtt.json_enabled true
meshtastic --set mqtt.json_enabled false
```
</TabItem>

View file

@ -37,7 +37,6 @@ values={[
{label: 'Android', value: 'android'},
{label: 'Apple', value: 'apple'},
{label: 'CLI', value: 'cli'},
{label: 'Flasher', value: 'flasher'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="android">
@ -61,14 +60,28 @@ All range test module config options are available on iOS, iPadOS and macOS at S
</TabItem>
<TabItem value="cli">
:::info
Range Test module config options are available in the python CLI. Example commands are below:
:::
| Setting | Acceptable Values | Default |
| :-----------------------: | :-----------------: | :-----: |
| range_test.enabled | `true`, `false` | `false` |
| range_test.save | `true`, `false` | `false` |
| range_test.sender | `integer` (Seconds) | `0` |
:::tip
Because the device will reboot after each command is sent via CLI, it is recommended when setting multiple values in a config section that commands be chained together as one.
```shell title="Example:"
meshtastic --set range_test.enabled true --set range_test.save false
```
:::
```shell title="Enable / Disable the range test"
meshtastic --set range_test.enabled true
meshtastic --set range_test.enabled false
@ -88,20 +101,15 @@ meshtastic --set range_test.sender 0
```
</TabItem>
<TabItem value="flasher">
<TabItem value="web">
:::info
No range test module config options are available in the Flasher.
:::
</TabItem>
<TabItem value="web">
:::info
No range test module config options are available in the Web UI.
:::
</TabItem>
</TabItem>
</Tabs>
## Examples

View file

@ -33,7 +33,7 @@ Available Values:
* `DEFAULT`
* `SIMPLE` operate as an dumb UART tunnel. What goes in will come out, Requires a channel named 'serial'.
* `PROTO` not implemented yet, but will expose the Protobuf Client API on this serial port
* `PROTO` Exposes the Protobuf Client API on this serial port. You can use this to connect from another device. [API Reference](/docs/development/device/client-api)
* `TEXTMSG` Will send the string received over the serial port as a Text Message for Display on the other devices.
* `NMEA` Will output a NMEA 0183 Data stream containing the internal GPS or fixed position and other node locations as Waypoints (WPL).
@ -70,7 +70,6 @@ values={[
{label: 'Android', value: 'android'},
{label: 'Apple', value: 'apple'},
{label: 'CLI', value: 'cli'},
{label: 'Flasher', value: 'flasher'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="android">
@ -94,8 +93,12 @@ All serial module config options are available on iOS, iPadOS and macOS at Setti
</TabItem>
<TabItem value="cli">
:::info
All serial module config options are available in the python CLI. Example commands are below:
:::
| Setting | Acceptable Values | Default |
| :-------------------: | :-----------------: | :-----: |
| serial.enabled | `true`, `false` | `false` |
@ -106,6 +109,15 @@ All serial module config options are available in the python CLI. Example comman
| serial.baud | `BAUD_DEFAULT` `BAUD_110` `BAUD_300` `BAUD_600` `BAUD_1200` `BAUD_2400` `BAUD_4800` `BAUD_9600` `BAUD_19200` `BAUD_38400` `BAUD_57600` `BAUD_115200` `BAUD_230400` `BAUD_460800` `BAUD_576000` `BAUD_921600` | `BAUD_DEFAULT` |
| serial.timeout | `integer` (seconds) | `0` |
:::tip
Because the device will reboot after each command is sent via CLI, it is recommended when setting multiple values in a config section that commands be chained together as one.
```shell title="Example:"
meshtastic --set serial.enabled true --set serial.echo true
```
:::
```shell title="Enable / Disable Module"
meshtastic --set serial.enabled true
@ -140,20 +152,13 @@ meshtastic --set serial.timeout 15
```
</TabItem>
<TabItem value="flasher">
:::info
No serial module config options are available in the Flasher.
:::
</TabItem>
<TabItem value="web">
<TabItem value="web">
:::info
All serial module config options are available in the Web UI.
:::
</TabItem>
</TabItem>
</Tabs>
:::warning
@ -178,3 +183,51 @@ Default is to use RX GPIO 16 and TX GPIO 17.
With [tio](https://github.com/tio/tio) &ndash; `tio -e -b 38400 -f none /dev/myserialport`
7. Send a packet up to 237 bytes in length. This will get relayed over the mesh network.
8. (Optional) Set `serial.echo` to `1` and any message you send out will be echoed back to your device.
### Interfacing PIR Sensor With External Microcontroller
The following is an example of using a Raspberry Pi Pico connected to a PIR sensor to detect motion. When motion is detected, a message is sent via. serial to the T-Beam. The T-Beam transmits the message as text over the default channel by utilizing the serial module in TXTMSG mode.
#### BOM
- Raspberry Pi Pico running [CircuitPython](https://learn.adafruit.com/getting-started-with-raspberry-pi-pico-circuitpython)
- T-Beam V1.1 running Meshtastic
- PIR Sensor ([Adafruit Breadboard Model](https://www.adafruit.com/product/4871))
#### Meshtastic Software Configuration:
- Serial module enabled, mode: TXTMSG
- GPIO Pins (For T-Beam) RX 13, TX 14
- 38400 Baud
#### Wiring:
![image](https://user-images.githubusercontent.com/2799310/210852481-21ea76e5-ecaa-40c1-8f34-635ef2a1c95b.png)
- TX pin 14 on the T-Beam to RX pin 2 on the Pico
- RX pin 13 on the T-Beam to TX pin 1 on the Pico
- PIR sensor Vcc and GND pins to Vcc/GND on breadboard respectively
- PIR sensor trigger line to Pico GPIO28 (Pico pin 34)
- GND pin on T-Beam to GND pin 38 on the Pico
- GND pin 38 on the Pico to breadboard ground rail
- 3V3 pin 36 on the Pico to the breadboard positive voltage rail
- Optional, to power the Pico off of the T-Beam instead of USB:
- Connect 5V pin on T-Beam to Vbus pin 40 on the Pico
#### Circuit Python Code
```python
import time
import board
import busio
import digitalio
# Setup PIR sensor on GP28
pir = digitalio.DigitalInOut(board.GP28)
pir.direction = digitalio.Direction.INPUT
# Setup serial UART connection TX/RX on (GP0/GP1)
uart = busio.UART(board.GP0, board.GP1, baudrate=38400, timeout=0)
while True:
if(pir.value == True):
uart.write(bytes("Motion Detected", "ascii"))
time.sleep(30)
time.sleep(0.5)
```

View file

@ -26,10 +26,11 @@ The telemetry module config options are: Device Metrics Update Interval, Environ
| INA219 | 0x40, 0x41 | Current and Voltage |
| LPS22 | 0x5D, 0x5c | Barometric pressure |
| SHTC3 | 0x70 | Temperature and humidity |
| SHT31 | 0x44 | Temperature and humidity |
## Module Config Values
## Update Intervals
### Update Intervals
### Device Metrics Update Interval
@ -51,13 +52,13 @@ Enable the Environment Telemetry (Sensors)
### Show on device screen
Show the Telemetry Module on-device display.
Show the Telemetry Module on the device display.
### Display Fahrenheit
The sensor is always read in Celsius, but the user can opt to view the temperature display in Fahrenheit using this setting.
The sensor is always read in Celsius, but the user can opt to display in Fahrenheit using this setting.
Default is off
Default is `false`.
## Device Config Client Availability
@ -68,7 +69,6 @@ values={[
{label: 'Android', value: 'android'},
{label: 'Apple', value: 'apple'},
{label: 'CLI', value: 'cli'},
{label: 'Flasher', value: 'flasher'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="android">
@ -93,22 +93,36 @@ All telemetry module config options are available on iOS, iPadOS and macOS at Se
</TabItem>
<TabItem value="cli">
:::info
All telemetry module config options are available in the python CLI. Example commands are below:
:::
## Settings
| Setting | Acceptable Values | Default |
| :-----------------------------------------------------: | :-----------------: | :-----: |
| telemetry.device_update_interval | `integer` (seconds) | `0` |
| telemetry.device_update_interval | `integer` (seconds) | Default `0` is 15 minutes(`900` seconds). |
| telemetry.environment_display_fahrenheit | `true`, `false` | `false` |
| telemetry.environment_measurement_enabled | `true`, `false` | `false` |
| telemetry.environment_screen_enabled | `true`, `false` | `0` |
| telemetry.environment_update_interval | `integer` (seconds) | `0` |
| telemetry.environment_update_interval | `integer` (seconds) | Default `0` is 15 minutes(`900` seconds). |
:::tip
Because the device will reboot after each command is sent via CLI, it is recommended when setting multiple values in a config section that commands be chained together as one.
```shell title="Example:"
meshtastic --set telemetry.device_update_interval 0 --set telemetry.environment_update_interval 0
```
:::
```shell title="Set module update intervals (Default of 0 is 5 Minutes)"
meshtastic --set telemetry.device_update_interval 0
// Device Metrics Two Minutes
meshtastic --set telemetry.device_update_interval 120
meshtastic --set telemetry.device_update_interval 0
// Environment Metrics Two Minutes
meshtastic --set telemetry.environment_update_interval 120
````
@ -123,26 +137,21 @@ meshtastic --set telemetry.environment_screen_enabled true
meshtastic --set telemetry.environment_screen_enabled false
```
```shell title="Enable / Disable Display Farenheit"
```shell title="Enable / Disable Display Fahrenheit"
meshtastic --set telemetry.environment_display_fahrenheit true
meshtastic --set telemetry.environment_display_fahrenheit false
````
</TabItem>
<TabItem value="flasher">
<TabItem value="web">
:::info
No telemetry module config options are available in the Flasher.
:::
</TabItem>
<TabItem value="web">
:::info
All telemetry module config options are available in the Web UI.
:::
</TabItem>
</TabItem>
</Tabs>
## Examples
@ -163,15 +172,17 @@ Steps:
- configure the device:
```shell
meshtastic --set telemetry.measurement_enabled true --set telemetry.screen_enabled true --set telemetry.display_farenheit true
meshtastic --set telemetry.environment_measurement_enabled true --set telemetry.environment_screen_enabled true --set telemetry.environment_display_fahrenheit true
```
:::tip
You can change the values above to suit your needs. The commands can be run one at a time or in a group as show above.
You can change the values above to suit your needs but it is recommended that commands be chained together as one as shown.
:::
- Reboot/reset the device (press the button or unplug/plug in the device)
- When the device boots it should say "Telemetry" and it may show the sensor data
- Device will reboot after command is sent.
- When the device boots again it should say "Telemetry" and it may show the sensor data
- If this does not appear to have any effects, run:
```shell
@ -196,4 +207,3 @@ The environment metrics in the telemetry module supports a limited amount of fie
### Supporting Other Sensor types
For other interesting sensor types and use cases we need to add a portnum for more generic telemetry packets and a second MCU will be required to interact with the sensor and process the data to be sent over the mesh. This data will not be stored in the nodedb on the device.

View file

@ -0,0 +1,66 @@
---
id: traceroute
title: Traceroute Module Usage
slug: /settings/moduleconfig/traceroute
sidebar_label: Traceroute
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
Due to the limited bandwidth of LoRa, Meshtastic does not keep track of the nodes a message used to hop to the destination. However, from firmware 2.0.8 on, there is a Traceroute Module that can show you this.
Only nodes that know the encryption key of the channel you use can be tracked. Also note that a message may arrive via multiple routes due to duplication because of rebroadcasting. This module will only track the hops of the first packet containing the traceroute request that arrived at the destination.
In order to use it, make sure your devices use firmware version 2.0.8 or higher.
## Traceroute Module Client Availability
<Tabs
groupId="settings"
defaultValue="cli"
values={[
{label: 'Android', value: 'android'},
{label: 'Apple', value: 'apple'},
{label: 'CLI', value: 'cli'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="android">
Not yet implemented.
</TabItem>
<TabItem value="apple">
Make sure the app is at least version 2.0.9.
Under Contacts > Direct Messages, long hold a destination node and select 'Trace Route' to send the request. Depending on the amount of hops that is needed, this might take a while. The result will be shown in the Mesh Log.
</TabItem>
<TabItem value="cli">
Make sure the CLI is at least version 2.0.6. Then use this command:
```shell title="CLI traceroute command"
meshtastic --traceroute 'destinationId'
```
Where for `destinationId` you have to fill in the ID of the destination you want to track the hops to, which you can get from running `meshtastic --nodes`. Depending on your OS, you might need quotation marks around the ID. Then it will send a specific message to track the hops. For example, this is what you will get:
```shell title="Traceroute from !25048234 to !bff18ce4"
meshtastic --traceroute '!bff18ce4'
Connected to radio
Sending traceroute request to !bff18ce4 (this could take a while)
Route traced:
!25048234 --> !ba4bf9d0 --> !bff18ce4
```
The first ID shown is the device you are connected to with the CLI. As you can see, this packet went through one other node to get to its destination.
</TabItem>
<TabItem value="web">
Not yet implemented.
</TabItem>
</Tabs>

View file

@ -23,8 +23,10 @@ Repobeats images can be generated at [repobeats.axiom.co](https://repobeats.axio
# Repo name
<!--Project specific badges here-->
[![CI](https://img.shields.io/github/workflow/status/meshtastic/repo/CI?label=actions&logo=github&color=yellow)](https://github.com/meshtastic/repo/actions/workflows/ci.yml)
[![CLA assistant](https://cla-assistant.io/readme/badge/meshtastic/repo)](https://cla-assistant.io/meshtastic/repo)
<!--Crowdin Badge can be generated from https://crowdin.meshtastic.org/u/projects/<project_id>/crowdsource -->
[![Crowdin](https://badges.crowdin.net/e/<badge_id>/localized.svg)](https://crowdin.meshtastic.org/<project>)
[![CI](https://img.shields.io/github/actions/workflow/status/meshtastic/<repo>/ci.yml?branch=master&label=actions&logo=github&color=yellow)](https://github.com/meshtastic/<repo>/actions/workflows/ci.yml)
[![CLA assistant](https://cla-assistant.io/readme/badge/meshtastic/<repo>)](https://cla-assistant.io/meshtastic/<repo>)
[![Fiscal Contributors](https://opencollective.com/meshtastic/tiers/badge.svg?label=Fiscal%20Contributors&color=deeppink)](https://opencollective.com/meshtastic/)
[![Vercel](https://img.shields.io/static/v1?label=Powered%20by&message=Vercel&style=flat&logo=vercel&color=000000)](https://vercel.com?utm_source=meshtastic&utm_campaign=oss)
@ -41,11 +43,12 @@ A description about the project
<!--Repobeats image here-->
<!--If the repository is a library, include this section-->
## Installation & Usage
<!--You may optionally include brief install/update instructions here-->
<!--Any other pertenant sections-->
### Compatibility
```

View file

@ -9,14 +9,14 @@ import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
:::info
Before flashing confirm that you have [RAK4631](https://docs.rakwireless.com/Product-Categories/WisBlock/RAK4631/) and not a [RAK4631-R](https://docs.rakwireless.com/Product-Categories/WisBlock/RAK4631-R/) If this is not the case, fear not. The hardware is identical but requires changing the bootloader. Instructions on how to do this are located [here](/docs/guides/convert-rak4631r).
Before flashing confirm that you have [RAK4631](https://docs.rakwireless.com/Product-Categories/WisBlock/RAK4631/) and not a [RAK4631-R](https://docs.rakwireless.com/Product-Categories/WisBlock/RAK4631-R/) If this is not the case, fear not. The hardware is identical but requires changing the bootloader. Instructions on how to do this are located [here](/docs/getting-started/flashing-firmware/nrf52/convert-rak4631r).
:::
## Upgrading from a previous version of Meshtastic
If you are upgrading your NRF52 device from a previous version of Meshtastic rather than starting from scratch, you may need to do a full factory reset of the internal flash memory. Stale data saved by previous versions of the Meshtastic firmware can cause devices to get stuck in a crash loop at startup.
Follow the guide to [factory erase your NRF52](/docs/guides/nrf52-erase) device before continuing to [flash firmware](#flash-firmware).
Follow the guide to [factory erase your NRF52](/docs/getting-started/flashing-firmware/nrf52/nrf52-erase) device before continuing to [flash firmware](#flash-firmware).
## Flash Firmware

View file

@ -137,7 +137,7 @@ If you do not see your device:
## Flash Firmware
:::info
If you have a RAK4631-R (the RUI3 bootloader version of the RAK4631), you must [convert the bootloader](/docs/guides/convert-rak4631r) for use with the Arduino before flashing Meshtastic firmware.
If you have a RAK4631-R (the RUI3 bootloader version of the RAK4631), you must [convert the bootloader](/docs/getting-started/flashing-firmware/nrf52/convert-rak4631r) for use with the Arduino before flashing Meshtastic firmware.
:::
<div className="indexCtasBody">

View file

@ -1,7 +0,0 @@
label: Guides
collapsible: true
position: 3
link:
type: generated-index
title: Guides
slug: guides

View file

@ -1,10 +0,0 @@
---
id: setup-mqtt
title: Configuring MQTT
sidebar_label: Setup MQTT
sidebar_position: 1
---
import MQTT from '../software/mqtt/index.mdx'
<MQTT components={props.components} />

View file

@ -1,10 +0,0 @@
---
id: writing-modules
title: Creating New Modules
sidebar_label: Create a Module
sidebar_position: 5
---
import NewModule from '../development/device/module-api.mdx'
<NewModule components={props.components} />

View file

@ -1,10 +0,0 @@
---
id: remote-nodes
title: Remote Node Administration
sidebar_label: Administer Remote Nodes
sidebar_position: 2
---
import RemoteAdmin from '../configuration/remote-admin.mdx'
<RemoteAdmin components={props.components} />

View file

@ -9,7 +9,7 @@ import Tropho from '/img/enclosures/3dp-tropho-lora32.png';
## Created by tropho/TonyG
### TTGO LoRa32 v2.1.1.6 Case
### TTGO LoRa32 v2.1.1.6 Case (will also fit the SX1280/v2.1.1.8 variety)
Download from [Printables](https://www.printables.com/model/131389-ttgo-lora32-v2116-case-for-meshtastic) or purchase from the creator's [Etsy Store](https://www.etsy.com/listing/1285837219/ttgo-lora-21-16-case).

View file

@ -7,7 +7,7 @@ sidebar_position: 4
## GPIO IO12
For the Lora V2.1-1.6, Shorting IO12 to ground will progress through the screen pages and/or wake up the device. A simple push switch can be added for this purpose.
For the Lora V2.1-1.6 and V2.1-1.8, Shorting IO12 to ground will progress through the screen pages and/or wake up the device. A simple push switch can be added for this purpose.
<img src="/img/hardware/lora32-v2-1.6-button.jpg" width="400" align="left"/>

View file

@ -17,7 +17,9 @@ values={[
{label: 'Lora V1', value: 'v1'},
{label: 'Lora V1.3', value: 'v1.3'},
{label: 'Lora V2.0', value: 'v2.0'},
{label: 'Lora V2.1-1.6', value:'v2.1'}
{label: 'Lora V2.1-1.6', value:'v2.1'},
{label: 'Lora V2.1-1.8', value:'v2.1-1.8'},
{label: 'Lora T3S3-V1.0', value:'S3-v1'}
]}>
<TabItem value="v1">
@ -26,7 +28,7 @@ Not recommended with a battery! These boards contain the wrong component in the
:::
:::caution
This board is still in production but for various reasons not recommended for new purchases or for unattended installations. Firmware support is phased out. If in doubt, choose the Lora V2.1-1.6 board.
This board is still in production but for various reasons not recommended for new purchases or for unattended installations. Firmware support is phased out. If in doubt, choose the Lora V2.1-1.6 or Lora T3S3 board.
:::
- **MCU**
@ -58,7 +60,7 @@ Not recommended with a battery! These boards contain the wrong component in the
:::
:::caution
This board is still in production but for various reasons not recommended for new purchases or for unattended installations. Firmware support is phased out. If in doubt, choose the Lora V2.1-1.6 board.
This board is still in production but for various reasons not recommended for new purchases or for unattended installations. Firmware support is phased out. If in doubt, choose the Lora V2.1-1.6 or Lora T3S3 board.
:::
- **MCU**
@ -90,7 +92,7 @@ Not recommended with a battery! These boards contain the wrong component in the
:::
:::caution
This board is still in production but for various reasons not recommended for new purchases or for unattended installations. Firmware support is phased out. If in doubt, choose the Lora V2.1-1.6 board.
This board is still in production but for various reasons not recommended for new purchases or for unattended installations. Firmware support is phased out. If in doubt, choose the Lora V2.1-1.6 or Lora T3S3 board.
:::
- **MCU**
@ -151,4 +153,60 @@ Early versions of some of these boards contained the wrong component in the LiPo
![TTGO Lora V2.1-1.6](/img/hardware/lora-v2.1-1.6.png)
</TabItem>
<TabItem value="v2.1-1.8">
- **MCU**
- ESP32 (WiFi & Bluetooth)
- **LoRa Transceiver**
- Semtech SX1280 (Region LORA_24 worldwide use)
- **Frequency options**
- 2.4 GHz
- **Connectors**
- USB-C
- Antenna: SMA antenna connector
**Features**
- Built in 0.96 inch OLED display
- Power and Reset switches
- microSD connector
- No GPS
**Resources**
- Firmware file: `firmware-tlora-v2-1-1.8-X.X.X.xxxxxxx.bin`
- Purchase link: [Banggood](https://www.banggood.com/LILYGO-LORA-H570-V1_8-SX1280-ESP32-2_4G-Smart-WiFi-bluetooth-Wireless-Module-0_96inch-OLED-Display-Development-Board-with-Antenna-Type-C-p-1969395.html)
![TTGO Lora V2.1-1.8](/img/hardware/lora-v2.1-1.8.jpg)
</TabItem>
<TabItem value="S3-v1">
- **MCU**
- ESP32-S3 (WiFi & Bluetooth)
- **LoRa Transceiver**
- Semtech SX1262
- Semtech 1276
- Semtech SX1280 with PA (Region LORA_24 worldwide use)
- **Frequency options**
- 868 MHz
- 915 MHz
- 2.4 GHz
- **Connectors**
- USB-C
- Antenna: SMA antenna connector
**Features**
- Built in 0.96 inch OLED display
- Power and Reset switches, Boot / User Button
- microSD connector
- No GPS
**Resources**
- Firmware file: `firmware-tlora-t3s3-v1.xxxxxxx.bin`
- Purchase link: [AliExpress](https://www.aliexpress.com/item/1005004627139838.html)
![TTGO Lora T3S3 V1](/img/hardware/lora-t3s3.jpg)
</TabItem>
</Tabs>

View file

@ -23,7 +23,7 @@ values={[
### RAK4631
:::info
Please be aware of the difference between the RAK4631 (Arduino bootloader) and the RAK4631-R (RUI3 bootloader). Meshtastic requires the Arduino bootloader. If you have a RAK4631-R, please see the [instructions for converting the bootloader](/docs/guides/convert-rak4631r).
Please be aware of the difference between the RAK4631 (Arduino bootloader) and the RAK4631-R (RUI3 bootloader). Meshtastic requires the Arduino bootloader. If you have a RAK4631-R, please see the [instructions for converting the bootloader](/docs/getting-started/flashing-firmware/nrf52/convert-rak4631r).
:::
- [RAK4631](https://store.rakwireless.com/products/rak4631-lpwan-node?variant=37505443856582)

View file

@ -28,7 +28,8 @@ The [RAK1921 OLED display](https://store.rakwireless.com/products/rak1921-oled-d
This item requires soldering.
Further information on the RAK1921 can be found on the [RAK Documentation Center](https://docs.rakwireless.com/Product-Categories/WisBlock/RAK1921/Overview/#product-description).
Similar modules are widely available from other suppliers, but do check the boards as some have the VDD and GND pins swapped round.
Similar modules are widely available from other suppliers, but do check the boards as some have the VDD and GND pins swapped round. This will prevent directly soldering the display to the baseboard. The preferred order is VDD, GND, SCL, SDA.
If pin ordering on the OLED board are swapped, there are some tricks to allow either reconfiguring the pins of the OLED via soldered jumpers, or by carefully soldering wire for those pins that are out-of-sequence. The final option is to use longer wires between the board and display, which permits re-ordering the wires as required.
[<img alt="0.96 inch OLED display" src="/img/hardware/screen.png" style={{zoom:'25%'}} />](/img/hardware/screen.png)

View file

@ -8,7 +8,7 @@ sidebar_position: 3
## Functionality
- **Capacitive Touch Button (Top)**
- _**Short press**_ _currently no functionality_
- _**Short press**_ updates the e-ink display
- **Reset Button (Button 1)**
- _**Single press**_ resets the device.
- _**Double press**_ puts the device into bootloader mode ready to receive new firmware.

View file

@ -117,11 +117,12 @@ The message window operates like most messaging apps. Note that the `(All) Prima
- Long press contacts or messages for options, like delete.
- Long press a node from the Nodes tab to send Direct Messages.
With LoRa (or any radio) there is some uncertainty that the messages has been received, so there is a confirmation built-in to the protocol. There are small cloud icons shown to the right of the messages you send:
With LoRa (or any radio) there is some uncertainty that the messages has been received, so there is a confirmation built-in to the protocol. There are small icons shown to the right of the messages you send:
- Cloud with an up arrow: the message is queued in the app, waiting to be handed to the device.
- Cloud only: the device received the message from the app, and it has been sent and transmitted via LoRa.
- Cloud with a check mark: received at least one node's acknowledgement response. Confirmations could be from any one device.
- Person with a check mark - The intended recipient of your direct message acknowledged the message.
- Cloud crossed out: the initial sender did not receive any confirmation within a certain timeout.
By default there is no long-term store-and-forward of messages, so messages not received during transmission are lost.

View file

@ -252,7 +252,7 @@ meshtastic --ch-index 0 --ch-set downlink_enabled true
Step two: if you don't want to depend on JSON decoding on the device, you can decode the protobuf messages off-device. To do that you will need to get the .proto files from https://github.com/meshtastic/protobufs. They function as a schema and are required for decoding in Node-RED. Save the files where the node-RED application can access them and note the file path of the "mqtt.proto" file.
Step three: install Node-RED plug-ins to your node-RED application for an embedded MQQT server and a protobuf decoder.
Step three: install Node-RED plug-ins to your node-RED application for an embedded MQTT server and a protobuf decoder.
https://flows.nodered.org/node/node-red-contrib-aedes
https://flows.nodered.org/node/node-red-contrib-protobuf
@ -264,7 +264,7 @@ Drag, drop, and wire the nodes like this. For this example, I ran node-RED on a
The aedes broker must be set up on the same flow as the other nodes. By activating the Publish debug node, you can see all the published messages.
[<img src="/documents/mqtt/Broker1.jpg" style={{zoom:'50%'}} />](/documents/mqtt/Broker1.jpg)
Receiving a json mqqt message is very simple.
Receiving a json mqtt message is very simple.
[<img src="/documents/mqtt/Consume.jpg" style={{zoom:'50%'}} />](/documents/mqtt/Consume.jpg)
Injecting a json message to be sent by a device is also very simple. You do need the correct envelope.
[<img src="/documents/mqtt/Inject.jpg" style={{zoom:'50%'}} />](/documents/mqtt/Inject.jpg)

View file

@ -94,6 +94,19 @@ const config = {
colorMode: {
respectPrefersColorScheme: true,
},
mermaid: {
theme: {light: 'base', dark: 'base'},
options: {
themeVariables: {
primaryColor: '#67EA94',
primaryTextColor: 'var(--tw-prose-headings)',
primaryBorderColor: '#4D4D4D',
lineColor: '#EAD667',
secondaryColor: '#EA67BD',
tertiaryColor: '#677CEA'
},
},
}
},
plugins: [
() => {
@ -132,6 +145,10 @@ const config = {
defaultLocale: 'en',
locales: ['en', 'de'],
},
markdown: {
mermaid: true,
},
themes: ['@docusaurus/theme-mermaid'],
};
module.exports = config;

View file

@ -13,20 +13,20 @@
"lint": "eslint src/**/*.{ts,tsx}"
},
"dependencies": {
"@algolia/client-search": "^4.14.2",
"@algolia/client-search": "^4.14.3",
"@docusaurus/core": "2.2.0",
"@docusaurus/plugin-content-docs": "2.2.0",
"@docusaurus/preset-classic": "2.2.0",
"@headlessui/react": "^1.7.5",
"@docusaurus/theme-mermaid": "^2.2.0",
"@headlessui/react": "^1.7.7",
"@heroicons/react": "^2.0.13",
"@leenguyen/react-flip-clock-countdown": "^1.3.1",
"@mdx-js/react": "^1.6.22",
"@meshtastic/meshtasticjs": "^0.7.2",
"@meshtastic/meshtasticjs": "^0.9.7",
"autoprefixer": "^10.4.13",
"base64-js": "^1.5.1",
"dotenv": "^16.0.3",
"framer-motion": "^6.5.1",
"postcss": "^8.4.19",
"postcss": "^8.4.20",
"react": "^17.0.2",
"react-dom": "^17.0.2",
"react-icons": "^4.7.1",
@ -41,9 +41,9 @@
"@meshtastic/eslint-config": "^1.0.8",
"@tailwindcss/typography": "^0.5.8",
"@tsconfig/docusaurus": "^1.0.6",
"@types/node": "^18.11.12",
"@types/node": "^18.11.18",
"@types/react": "^18.0.26",
"@types/react-dom": "^18.0.9",
"@types/react-dom": "^18.0.10",
"prettier": "^2.8.1",
"typescript": "^4.9.4"
}

File diff suppressed because it is too large Load diff

11
src/data/region.ts Normal file
View file

@ -0,0 +1,11 @@
export interface IRegion {
name: string;
freqStart: number;
freqEnd: number;
dutyCycle: number;
spacing: number;
powerLimit: number;
audioPermitted: boolean;
frequencySwitching: boolean;
wideLora: boolean;
}

13
src/data/regions/anz.ts Normal file
View file

@ -0,0 +1,13 @@
import { IRegion } from '../region';
export const ANZ: IRegion = {
name: "ANZ",
freqStart: 915.0,
freqEnd: 928.0,
dutyCycle: 100,
spacing: 0,
powerLimit: 30,
audioPermitted: true,
frequencySwitching: false,
wideLora: false,
}

13
src/data/regions/cn.ts Normal file
View file

@ -0,0 +1,13 @@
import { IRegion } from '../region';
export const CN: IRegion = {
name: "CN",
freqStart: 470.0,
freqEnd: 510.0,
dutyCycle: 100,
spacing: 0,
powerLimit: 19,
audioPermitted: true,
frequencySwitching: false,
wideLora: false,
}

View file

@ -0,0 +1,13 @@
import { IRegion } from '../region';
export const EU_433: IRegion = {
name: "EU_433",
freqStart: 433.0,
freqEnd: 434.0,
dutyCycle: 10,
spacing: 0,
powerLimit: 12,
audioPermitted: true,
frequencySwitching: false,
wideLora: false,
}

View file

@ -0,0 +1,13 @@
import { IRegion } from '../region';
export const EU_868: IRegion = {
name: "EU_868",
freqStart: 869.4,
freqEnd: 869.65,
dutyCycle: 10,
spacing: 0,
powerLimit: 27,
audioPermitted: false,
frequencySwitching: false,
wideLora: false,
}

13
src/data/regions/in.ts Normal file
View file

@ -0,0 +1,13 @@
import { IRegion } from '../region';
export const IN: IRegion = {
name: "IN",
freqStart: 865.0,
freqEnd: 867.0,
dutyCycle: 100,
spacing: 0,
powerLimit: 30,
audioPermitted: true,
frequencySwitching: false,
wideLora: false,
}

13
src/data/regions/jp.ts Normal file
View file

@ -0,0 +1,13 @@
import { IRegion } from '../region';
export const JP: IRegion = {
name: "JP",
freqStart: 920.8,
freqEnd: 927.8,
dutyCycle: 100,
spacing: 0,
powerLimit: 16,
audioPermitted: true,
frequencySwitching: false,
wideLora: false,
}

13
src/data/regions/kr.ts Normal file
View file

@ -0,0 +1,13 @@
import { IRegion } from '../region';
export const KR: IRegion = {
name: "KR",
freqStart: 920.0,
freqEnd: 925.0,
dutyCycle: 100,
spacing: 0,
powerLimit: 0,
audioPermitted: true,
frequencySwitching: false,
wideLora: false,
}

View file

@ -0,0 +1,13 @@
import { IRegion } from '../region';
export const LORA_24: IRegion = {
name: "LORA_24",
freqStart: 2400.0,
freqEnd: 2483.5,
dutyCycle: 100,
spacing: 0,
powerLimit: 10,
audioPermitted: true,
frequencySwitching: false,
wideLora: true,
}

View file

@ -0,0 +1,13 @@
import { IRegion } from '../region';
export const NZ_865: IRegion = {
name: "NZ_865",
freqStart: 864.0,
freqEnd: 868.0,
dutyCycle: 100,
spacing: 0,
powerLimit: 36,
audioPermitted: true,
frequencySwitching: false,
wideLora: false,
}

13
src/data/regions/ru.ts Normal file
View file

@ -0,0 +1,13 @@
import { IRegion } from '../region';
export const RU: IRegion = {
name: "RU",
freqStart: 868.7,
freqEnd: 869.2,
dutyCycle: 100,
spacing: 0,
powerLimit: 20,
audioPermitted: true,
frequencySwitching: false,
wideLora: false,
}

13
src/data/regions/th.ts Normal file
View file

@ -0,0 +1,13 @@
import { IRegion } from '../region';
export const TH: IRegion = {
name: "TH",
freqStart: 920.0,
freqEnd: 925.0,
dutyCycle: 100,
spacing: 0,
powerLimit: 16,
audioPermitted: true,
frequencySwitching: false,
wideLora: false,
}

13
src/data/regions/tw.ts Normal file
View file

@ -0,0 +1,13 @@
import { IRegion } from '../region';
export const TW: IRegion = {
name: "TW",
freqStart: 920.0,
freqEnd: 925.0,
dutyCycle: 100,
spacing: 0,
powerLimit: 0,
audioPermitted: true,
frequencySwitching: false,
wideLora: false,
}

13
src/data/regions/unset.ts Normal file
View file

@ -0,0 +1,13 @@
import { IRegion } from '../region';
export const UNSET: IRegion = {
name: "UNSET",
freqStart: 902.0,
freqEnd: 928.0,
dutyCycle: 100,
spacing: 0,
powerLimit: 30,
audioPermitted: true,
frequencySwitching: false,
wideLora: false,
}

13
src/data/regions/us.ts Normal file
View file

@ -0,0 +1,13 @@
import { IRegion } from '../region';
export const US: IRegion = {
name: "US",
freqStart: 902.0,
freqEnd: 928.0,
dutyCycle: 100,
spacing: 0,
powerLimit: 30,
audioPrmitted: true,
frequencySwitching: false,
wideLora: false,
}

View file

@ -1,5 +1,3 @@
import '@leenguyen/react-flip-clock-countdown/dist/index.css';
import React from 'react';
import { FiTwitter } from 'react-icons/fi';
@ -7,6 +5,8 @@ import { FiTwitter } from 'react-icons/fi';
import { ChevronRightIcon } from '@heroicons/react/20/solid';
import FlipClockCountdown from '@leenguyen/react-flip-clock-countdown';
import Layout from '@theme/Layout';
import { Dark, Light } from '/src/components/ColorMode';
const TwoPointZero = (): JSX.Element => {
const stats = [
@ -43,19 +43,29 @@ const TwoPointZero = (): JSX.Element => {
];
return (
<Layout title="Meshtastic 2.0" description="Meshtastic 2.0 Landing Page">
<div className="bg-white">
<div>
<main>
{/* Hero section */}
<div className="overflow-hidden pt-8 sm:pt-12 lg:relative lg:py-24">
<div className="mx-auto max-w-md px-4 sm:max-w-3xl sm:px-6 lg:grid lg:max-w-7xl lg:grid-cols-2 lg:gap-24 lg:px-8">
<div>
<div>
<img
className="h-11 w-auto"
it
src="/design/logo/svg/Mesh_Logo_Black.svg"
alt="Your Company"
/>
<Dark>
<img
className="h-11 w-auto"
it
src="/design/logo/svg/Mesh_Logo_White.svg"
alt="Meshtastic Logo"
/>
</Dark>
<Light>
<img
className="h-11 w-auto"
it
src="/design/logo/svg/Mesh_Logo_Black.svg"
alt="Meshtastic Logo"
/>
</Light>
</div>
<div className="mt-20">
<div>
@ -73,23 +83,23 @@ const TwoPointZero = (): JSX.Element => {
</a>
</div>
<div className="mt-6 sm:max-w-xl">
<h1 className="text-4xl font-bold tracking-tight text-gray-900 sm:text-5xl">
<h1 className="text-4xl font-bold tracking-tight --ifm-heading-color sm:text-5xl">
Meshtastic 2.0 🎉🎉🎉
</h1>
<p className="mt-6 text-xl text-gray-500">
<p className="mt-6 text-xl --ifm-font-color-base">
After 9 months in the making, we present to you the next
milestone for the Meshtastic project.
</p>
</div>
<div className="mt-12 sm:w-full sm:max-w-lg">
<p className="mt-6 mb-4 text-xl text-gray-500">
<p className="mt-6 mb-4 text-xl --ifm-font-color-base">
As a part of the launch event, we are running a number of
giveaways, so jump in and win some prizes.
</p>
<div className="flex gap-2">
<a
href="#start"
className="flex w-full rounded-md border border-transparent bg-rose-500 px-5 py-3 text-base font-medium text-white shadow hover:bg-rose-600 hover:text-black hover:no-underline focus:outline-none focus:ring-2 focus:ring-rose-500 focus:ring-offset-2 sm:px-10"
className="flex w-full rounded-md border border-transparent bg-rose-500 px-5 py-3 font-medium text-white shadow hover:bg-rose-600 hover:text-black hover:no-underline focus:outline-none focus:ring-2 focus:ring-rose-500 focus:ring-offset-2 sm:px-10"
>
<span className="m-auto">Find Out More</span>
</a>
@ -258,12 +268,12 @@ const TwoPointZero = (): JSX.Element => {
>
{/* Content area */}
<div className="pt-12 sm:pt-16 lg:pt-20">
<h2 className="text-3xl font-bold tracking-tight text-gray-900 sm:text-4xl">
<h2 className="text-3xl font-bold tracking-tight --ifm-heading-color sm:text-4xl">
A brief overview of all the changes and improvements
</h2>
<div className="mt-6 space-y-6 text-gray-500">
<div className="mt-6 space-y-6 --ifm-font-color-base">
<h2>Monumental stuff!</h2>
<p className="text-base leading-7">
<p className="leading-7 --ifm-font-color-base">
<li>
Completely new LoRA band plan with faster messaging
</li>
@ -293,7 +303,7 @@ const TwoPointZero = (): JSX.Element => {
</li>
</p>
<h2>Nerd stuff!</h2>
<p className="text-base leading-7">
<p className="leading-7 --ifm-font-color-base">
<li>New filesystem for ESP32 (LittleFS)</li>
<li>
Upgraded Arduino framework for both NRF52 and ESP32
@ -322,10 +332,10 @@ const TwoPointZero = (): JSX.Element => {
key={stat.label}
className="border-t-2 border-gray-100 pt-6"
>
<dt className="text-base font-medium text-gray-500">
<dt className="font-medium --ifm-font-color-base">
{stat.label}
</dt>
<dd className="text-3xl font-bold tracking-tight text-gray-900">
<dd className="text-3xl font-bold tracking-tight --ifm-heading-color">
{stat.value}
</dd>
</div>
@ -341,10 +351,10 @@ const TwoPointZero = (): JSX.Element => {
<div className="mx-auto max-w-md px-4 sm:max-w-3xl sm:px-6 lg:max-w-7xl lg:px-8">
<div className="lg:grid lg:grid-cols-2 lg:items-center lg:gap-24">
<div>
<h2 className="text-3xl font-bold tracking-tight text-gray-900 sm:text-4xl">
<h2 className="text-3xl font-bold tracking-tight --ifm-heading-color sm:text-4xl">
All made possible by the amazing companies that support us.
</h2>
<p className="mt-6 max-w-3xl text-lg leading-7 text-gray-500">
<p className="mt-6 max-w-3xl text-lg leading-7 --ifm-font-color-base">
Running a project of this scale is no easy feat, without the
generosity of many of our vendors and providers, none of
this would be possible.
@ -433,13 +443,9 @@ const TwoPointZero = (): JSX.Element => {
<div className="flex flex-col gap-12">
<div className="sm:text-center">
<h2 className="text-3xl font-bold tracking-tight text-white sm:text-4xl">
Countdown to Prize Draw!
Congratulations to the winners!
</h2>
</div>
<FlipClockCountdown
className="m-auto"
to={new Date(2022, 11, 1).getTime()}
/>
</div>
</div>
</div>

View file

@ -176,7 +176,7 @@ function Home() {
</h1>
<p className="hero__subtitle">{siteConfig.tagline}</p>
<div className="indexCtas">
<Link className="button button--lg" to="/docs/about">
<Link className="button button--lg" to="/docs/introduction">
Learn More
</Link>
<Link className="button button--lg" to="/docs/getting-started">

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 366 KiB