Merge branch 'master' into android-usage2

This commit is contained in:
mkinney 2022-05-04 09:44:15 -07:00 committed by GitHub
commit 2226f5afc3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
113 changed files with 1808 additions and 899 deletions

View file

@ -17,7 +17,7 @@
Forum
</a>
<span>&nbsp;&nbsp;&nbsp;&nbsp;</span>
<a href="https://discord.gg/UQJ5QuM7vq" target="_blank">
<a href="https://discord.gg/ktMAKGBnBs" target="_blank">
<img src="static/img/readme/discord.svg" width="16" />
Discord
</a>

View file

@ -1,3 +1,8 @@
:::important
<span>The name of this option changed between Meshtastic 1.2 and 1.3. This documentaton already reflects the 1.3 syntax. Please substitute '{props.name}' prefix with '{props.rename}' to get the 1.2 compatible command name.</span>
:::
:::important
<span>
The name of ths option changed between Meshtastic 1.2 and 1.3. This
documentaton already reflects the 1.3 syntax. Please substitute '{props.name}'
prefix with '{props.rename}' to get the 1.2 compatible command name.
</span>
:::

View file

@ -2,6 +2,7 @@
id: channels
title: Channels
sidebar_label: Channels
sidebar_position: 3
---
## Overview

View file

@ -2,6 +2,7 @@
id: clients
title: Clients
sidebar_label: Clients
sidebar_position: 2
---
## Overview

View file

@ -2,6 +2,7 @@
id: external-devices
title: External Devices
sidebar_label: External Devices
sidebar_position: 5
---
## Overview

View file

@ -1,7 +1,9 @@
---
id: overview
title: Meshtastic Concepts
sidebar_label: Concepts Overview
sidebar_label: Overview of Concepts
sidebar_position: 1
---
## Overview

View file

@ -2,11 +2,12 @@
id: internet
title: Internet Connectivity
sidebar_label: Internet Connectivity
sidebar_position: 4
---
## Overview
Captive Portal: Using Meshtastic, you can create a separate Wifi network for you join your phone or computer on a mesh network. See [Web Interface](/docs/software/web/web-app-software) for more info. This is ideal in a situation where you are remote, such as in the forest, on a mountain, or if there is a major power/internet outage such as in a storm or other disaster.
Captive Portal: Using Meshtastic, you can create a separate Wifi network for you join your phone or computer on a mesh network. See [Web Interface](/docs/software/web) for more info. This is ideal in a situation where you are remote, such as in the forest, on a mountain, or if there is a major power/internet outage such as in a storm or other disaster.
## Features using Internet Connectivity

View file

@ -2,12 +2,15 @@
id: mesh
title: Mesh Routing
sidebar_label: Mesh Routing
sidebar_position: 1
---
## Overview
Mesh Networking: An interconnected network by using [low-power radios](/docs/hardware) to connect other low-power radios using LoRa to be able to send and receive messages and data. This can be completely separate from any other networks such as the internet. You can start small and get two devices to start experimenting. Do not expect to stream music or videos as LoRa is intended for smaller, lower bandwidth type uses such as text communication.
As of 1.2 you can connect up to 32 devices to the network. In 1.3 we are working on having 64-80 devices connected to the network.
## Devices
## Routers

View file

@ -1,5 +0,0 @@
---
id: expectations
title: Expectations
sidebar_label: Expectations
---

View file

@ -1,8 +1,8 @@
---
id: overview
title: About Meshtastic
sidebar_label: About Meshtastic
sidebar_label: About
slug: /about
sidebar_position: 1
---
:::info
@ -29,4 +29,4 @@ For each message a radio rebroadcasts, it marks the "hop limit" down by one. Whe
<!--- FIXME add Github organization list/contributor list --->
Meshtastic is an open source project available on GitHub. Our generous volunteers donate their personal time to write and maintain this codebase. If you would like to contribute see our [GitHub](https://github.com/meshtastic), join our [Discord server](https://discord.com/invite/UQJ5QuM7vq), and read up on our [forum](https://meshtastic.discourse.group).
Meshtastic is an open source project available on GitHub. Our generous volunteers donate their personal time to write and maintain this codebase. If you would like to contribute see our [GitHub](https://github.com/meshtastic), join our [Discord server](https://discord.gg/ktMAKGBnBs), and read up on our [forum](https://meshtastic.discourse.group).

View file

@ -1,15 +0,0 @@
---
id: academy
title: Meshtastic Academy
sidebar_label: Welcome
slug: /academy
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
I want something that just works.
Tinkerer
Maker

View file

@ -29,34 +29,33 @@ Meshtastic uses the [PlatformIO](https://platformio.org) development environment
## Adding your own Hardware
The build system is modular. Adding a new board variant for an already supported architecture is straigtforward.
The build system is modular. Adding a new board variant for an already supported architecture is straigtforward.
### Building for your own DIY hardware or mod that you don't want to distribute
1. go to the `variants` folder in the Meshtastic-device sourcecode and make a new directory for your hardware, let's call it `m5stack_core` and copy an existing configuration you wanna modify
```shell
cd variants; mkdir m5stack_core
cp ../heltec_v1/* m5stack_core
cd m5stack_core
```
2. modify the `platformio.ini` *in this subdirectory* from the canonical define of the hardware variant (`HELTEC_V1` in this case) to `PRIVATE_HW` and make the `-I` on the `build_flags` point to the newly created dir.
2. modify the `platformio.ini` _in this subdirectory_ from the canonical define of the hardware variant (`HELTEC_V1` in this case) to `PRIVATE_HW` and make the `-I` on the `build_flags` point to the newly created dir.
```shell
[env:m5stack-core]
extends = esp32_base
board = m5stack-core-esp32
monitor_filters = esp32_exception_decoder
build_flags =
build_flags =
${esp32_base.build_flags} -D PRIVATE_HW -I variants/m5stack_core
lib_deps =
lib_deps =
${esp32_base.lib_deps}
```
3. edit the `variant.h` file *in this subdirectory* to reflect the defines and configurations for your board. The example is very well commented.
3. build, run and debug until you are satisfied with the result.
3. edit the `variant.h` file _in this subdirectory_ to reflect the defines and configurations for your board. The example is very well commented.
4. build, run and debug until you are satisfied with the result.
### Adding a new off-the-shelf or DIY hardware that you want to distribute (e.g. add a new canon board)

View file

@ -1,8 +1,7 @@
---
id: overview
title: Contribute to Meshtastic
sidebar_label: Contribute to Meshtastic
slug: /developers
id: contributing
title: Contributing
slug: /developers/contributing
---
# How to Help
@ -17,7 +16,7 @@ Meshtastic is a team of volunteers, and as such there is always plenty of ways t
- If you're into Ham Radio and LoRa, then this is a great project for you!
- ... basically... we would love to have your help and feedback
There are several developers, testers, and active users on [Discord](https://discord.gg/UQJ5QuM7vq).
There are several developers, testers, and active users on [Discord](https://discord.gg/ktMAKGBnBs).
There are many technologies (and repositories) used in creating the Meshtastic ecosystem. Below is a breakdown:
@ -29,17 +28,17 @@ Most communication and interactions happen with protocol buffers. The [Meshtasti
The [Meshtastic-device](https://github.com/meshtastic/Meshtastic-device) is where all of the firmware development happens. This is where the code for the ESP32 and nRF52 based devices is developed. It is mainly C and C++ code.Think Arduino. It is where the first level of hardware interaction begins and ends.
## modules
## Modules
[Modules](/docs/software/modules) are also implemented mainly in the Meshtastic-device repo above. Typically, you would add functionality in the protobufs repo and the device repo to implement module functionality. You probably also want to have some client/device use/interact with the module and that is where the Device support comes into play.
## Device Support
The [Meshtastic-python](https://github.com/meshtastic/Meshtastic-python) is typically where the first device interaction takes place, but that is not a requirement. This repo has a command line utility that allows you to interact with most functionality with the devices. This python library can also be consumed for other applications. See [Community applications](/docs/software/community/community-overview) for other Meshtastic applications.
The [Meshtastic-python](https://github.com/meshtastic/Meshtastic-python) is typically where the first device interaction takes place, but that is not a requirement. This repo has a command line utility that allows you to interact with most functionality with the devices. This python library can also be consumed for other applications. See [Community applications](/docs/software/community) for other Meshtastic applications.
## Web Application
The [Meshtastic-web](https://github.com/meshtastic/meshtastic-web) is where the hosted web server on the ESP32 devices in Typescript is developed. See the [Web interface overview](/docs/software/web/web-app-software) for more details.
The [Meshtastic-web](https://github.com/meshtastic/meshtastic-web) is where the hosted web server on the ESP32 devices in Typescript is developed. See the [Web interface overview](/docs/software/web) for more details.
The [meshtastic.js](https://github.com/meshtastic/meshtastic.js) is a JavaScript library that provides an interface for Meshtastic devices.

View file

@ -0,0 +1,83 @@
---
id: markdown-features
title: Style Guide - Markdown Features
sidebar_label: Markdown Features
---
import { Dark, Light } from '/src/components/ColorMode';
## Overview
We have developed several [React](https://reactjs.org/) components for assisting with writing documentation.
## Features
### Light/Dark Mode Switch
#### Usage:
```jsx
import { Dark, Light } from '/src/components/ColorMode';
<Dark>
<p>Dark</p>
</Dark>
<Light>
<p>Light</p>
</Light>
```
#### Demo:
<Dark>
<div className="not-prose rounded-lg bg-primary shadow-md">
<p className="p-2 text-lg font-medium">This is only shown in dark mode.</p>
<img
src="https://picsum.photos/id/101/600/200"
className="w-full rounded-lg shadow-md"
/>
</div>
</Dark>
<Light>
<div className="not-prose rounded-lg border bg-primary shadow-md">
<p className="p-2 text-lg font-medium">This is only shown in light mode.</p>
<img
src="https://picsum.photos/id/1028/600/200"
className="w-full rounded-lg shadow-md"
/>
</div>
</Light>
### Code Blocks
#### Usage:
Always specify the language used directly after the start of the code block (```).
:::note
For command line examples, please use `shell` and not any of the other aliases.
:::
for further information please see the relevant [Docusaurus page](https://docusaurus.io/docs/markdown-features/code-blocks)
````
```ts title="Demo"
export const typedArrayToBuffer = (array: Uint8Array): ArrayBuffer => {
return array.buffer.slice(
array.byteOffset,
array.byteLength + array.byteOffset
);
};
```
````
#### Demo:
```ts title="Demo"
export const typedArrayToBuffer = (array: Uint8Array): ArrayBuffer => {
return array.buffer.slice(
array.byteOffset,
array.byteLength + array.byteOffset,
);
};
```

View file

@ -12,4 +12,8 @@ The now-in-beta iOS app requires iOS v15.
### How do I get the Meshtastic iOS App?
See [iOS App](/docs/software/apple/ios-development)
See [iOS App](/docs/software/apple)
### After updating firmware, my node is not connecting via Bluetooth. What should I do?
Try forgetting the Bluetooth connection from the iOS System Settings. Re-pair and try again.

15
docs/faq/device-tbeam.mdx Normal file
View file

@ -0,0 +1,15 @@
---
id: device-tbeam
title: FAQs - T-Beam Device
sidebar_label: T-Beam Device
---
## Overview
### How do I turn off an ESP32 t-beam based device?
Hold down the left PWR button for about 10 seconds and the display should turn off.
### How do I turn on an ESP32 t-beam based device?
Push the left PWR button for about 1 second.

View file

@ -0,0 +1,11 @@
---
id: device-wisblock
title: FAQs - WisBlock Device
sidebar_label: RAK WisBlock Devices
---
## Overview
### 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 1.2.59 and then do a factory reset, disconnect and reconnect the board and run `meshtastic --info`.

View file

@ -38,3 +38,7 @@ Push the left PWR button for about 1 second.
- Android instructions see: [Android Usage](/docs/software/android/android-usage#configuration-options)
- Python CLI instructions see: [Python Usage](/docs/software/python/python-cli#changing-device-settings)
### 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 1.2.59 and then do a [factory reset](/docs/settings/misc#factory_reset), disconnect and reconnect the board and run `meshtastic --info`.

View file

@ -1,8 +1,8 @@
---
id: faq
title: FAQs - General
sidebar_label: General
title: FAQs
slug: /faq
sidebar_position: 6
---
<!---
@ -30,8 +30,8 @@ Meshtastic is the most awesome long range, low power communications service on t
### Where can I get additional help, ask questions, or bond with the Meshtastic community?
After reading this FAQ and checking out the links on the left, there are two places... The preferred place is to check out the [Forum](https://meshtastic.discourse.group). There you can be part of our growing community and search for previous posts that may be similar to what you're looking for. We also have the [Meshtastic Discord](https://discord.com/invite/UQJ5QuM7vq) server where you may connect with like-minded people.
After reading this FAQ and checking out the links on the left, there are two places... The preferred place is to check out the [Forum](https://meshtastic.discourse.group). There you can be part of our growing community and search for previous posts that may be similar to what you're looking for. We also have the [Meshtastic Discord](https://discord.gg/ktMAKGBnBs) server where you may connect with like-minded people.
### How can I contribute to Meshtastic?
Everyone contributes in a different way. Join the [Forum](https://meshtastic.discourse.group) and/or the [Meshtastic Discord](https://discord.com/invite/UQJ5QuM7vq) and introduce yourself. We're all very friendly. If you'd like to pitch in some code, check out the [Developers](/docs/developers) menu on the left.
Everyone contributes in a different way. Join the [Forum](https://meshtastic.discourse.group) and/or the [Meshtastic Discord](https://discord.gg/ktMAKGBnBs) and introduce yourself. We're all very friendly. If you'd like to pitch in some code, check out the [Developers](/docs/developers) menu on the left.

View file

@ -5,3 +5,15 @@ sidebar_label: Mesh
---
## Overview
### Does Meshtastic use LoRaWAN?
Meshtastic uses LoRa peer to peer (p2p), which allows much more flexibility in how LoRa is utilized. Our messaging and position updates are far too "random" compared to LoRaWAN requirements.
### Will Meshtastic work with (insert LoRa service)
Meshtastic uses LoRa peer to peer (p2p), which has allowed us to customize how we use the protocol. Likely it will not work with the service you have in mind, but it may be possible to build a bridge between services using MQTT. That will require further development outside the scope of this project to implement.
### Can I locate a device via triangulation?
There is a [community project](https://github.com/a-f-G-U-C/Meshtastic-ZPS) that has worked out how to accomplish this.

View file

@ -13,3 +13,7 @@ sidebar_label: WiFi
### When I turn on WiFi, Bluetooth turns off. Why is this?
Currently WiFi and Bluetooth can not be enabled at the same time.
### Why does my device lose connection to WiFi?
It could be a couple of things. First, check that the node connects to WiFi on battery power. There are sometimes issues if your power supply is not compatible. Another possibility is [misconfigured DTIM](https://homenetworkadmin.com/what-is-dtim/) on the WiFi network.

View file

@ -36,6 +36,7 @@ The Android app is currently more robust than the iOS app. But, they both should
- Start Meshtastic app
- Connect to radio(s) from inside the app
- Pair with radio(s). A paring code should show on the radio. Enter that value when prompted to pair a Bluetooth device.
- In the event you don't have a screen. double press the io button and the value will be set to 123456. (on the tbeam this is the center button)
- Send message(s) from inside the app.
- Note: The radio connected via Bluetooth will not show messages sent.
- Verify that all other radios are receiving the message(s). Might have to click on the button on the radio to see most recent message.
@ -53,4 +54,4 @@ The Android app is currently more robust than the iOS app. But, they both should
## Troubleshooting
Hopefully your "getting started" experience has been straight forward and headache free. If you've had issues, please consider updating our documentation to improve future user experiences. If you're still having issues. Reach out on the [forum](https://meshtastic.discourse.group) or [Discord](https://discord.com/invite/UQJ5QuM7vq). Our support is 100% volunteer based. We are passionate about the project hope to help newcomers become Meshtastic experts.
Hopefully your "getting started" experience has been straight forward and headache free. If you've had issues, please consider updating our documentation to improve future user experiences. If you're still having issues. Reach out on the [forum](https://meshtastic.discourse.group) or [Discord](https://discord.gg/ktMAKGBnBs). Our support is 100% volunteer based. We are passionate about the project hope to help newcomers become Meshtastic experts.

View file

@ -3,6 +3,7 @@ id: overview
title: Getting Started
sidebar_label: Getting Started
slug: /getting-started
sidebar_position: 2
---
import Link from '@docusaurus/Link';
@ -114,4 +115,4 @@ This is the best part of Meshtastic. Deploying, testing, and optimizing your per
## Troubleshooting
Hopefully your "getting started" experience has been straight forward and headache free. If you've had issues, please consider updating our documentation to improve future user experiences. If you're still having issues. Reach out on the [forum](https://meshtastic.discourse.group) or [Discord](https://discord.com/invite/UQJ5QuM7vq). Our support is 100% volunteer based. We are passionate about the project hope to help newcomers become Meshtastic experts.
Hopefully your "getting started" experience has been straight forward and headache free. If you've had issues, please consider updating our documentation to improve future user experiences. If you're still having issues. Reach out on the [forum](https://meshtastic.discourse.group) or [Discord](https://discord.gg/ktMAKGBnBs). Our support is 100% volunteer based. We are passionate about the project hope to help newcomers become Meshtastic experts.

View file

@ -3,6 +3,7 @@ id: aerials
title: Aerial selection
sidebar_label: Aerial selection
slug: /hardware/aerials
sidebar_position: 1
---
The stock aerials provided bundled with the t-Beam and other boards are a 'mixed bag'. They may not have been designed or tuned for your given frequency range, and they may not be of a quality design.

View file

@ -1,7 +1,8 @@
---
id: antenna
title: Antennas
sidebar_label: Overview
sidebar_label: Antennas
sidebar_position: 2
slug: /hardware/antenna
---

View file

@ -3,6 +3,7 @@ id: non-aerial
title: Non-aerial factors affecting transmission
sidebar_label: Non-aerial factors
slug: /hardware/non-aerial
sidebar_position: 2
---
Unless you're using your devices in a vacuum, with clear line of sight between aerials the following will have an effect:

View file

@ -3,6 +3,7 @@ id: resources
title: Antenna resources
sidebar_label: Resources
slug: /hardware/resources
sidebar_position: 4
---
### More antenna information
@ -10,32 +11,35 @@ slug: /hardware/resources
- [Hackaday's Introduction to Antenna Basics](https://www.youtube.com/playlist?list=PL_tws4AXg7authztKFg5ZN5qWGtq3N_nI)
- An excellent series of presentations on the basics of antenna design and function, presented by spacecraft radio engineer Karen Rucker.
### Coverage prediction
- [Tower Coverage.com](https://www.towercoverage.com)
- Commercial, but has free options
- [HeyWhat'sThat](http://www.heywhatsthat.com)
- [HeyWhat'sThat](http://www.heywhatsthat.com)
- Free with path profiling options
- [Radio Mobile Online](https://www.ve2dbe.com/rmonline_s.asp)
- Radio Mobile Online is a radio wave propagation prediction tool dedicated to amateur radio
### RF Tools
- [Times Microwave Systems](https://www.timesmicrowave.com/calculator/?Product=RG-6&RunLength=10&Frequency=868)
- Coaxial Cable Attenuation & Power Handling Calculator
- [Solwise Link Budget Calculator](https://www.solwise.co.uk/link-budget.htm)
- [Solwise Link Budget Calculator](https://www.solwise.co.uk/link-budget.htm)
- Predict the received signal strength
- [Amateur Radio Toolkit](https://play.google.com/store/apps/details?id=com.daveyhollenberg.amateurradiotoolkit)
- Android app with lots of antenna information
### Antenna designs
- [1/4 Wave Ground Plane Antenna Calculator](https://m0ukd.com/calculators/quarter-wave-ground-plane-antenna-calculator)

View file

@ -2,6 +2,7 @@
id: antenna-testing
title: Antenna testing
sidebar_label: Testing
sidebar_position: 3
---
Testing of antennas can be both simple and complex. At its simplest, testing involves sending messages from different locations and seeing which ones are received, and then comparing the results against other antennas. At the complex end, this can be using expensive test chambers and equipment to measure the signal strength, gain, and radiation patterns. However, it seems that a reasonable job can be done with cheaper methods.

View file

@ -2,6 +2,7 @@
id: battery
title: Adding and sizing batteries
sidebar_label: Batteries
sidebar_position: 5
---
import { BatteryCalculator } from '../../src/components/BatteryCalculator';

View file

@ -2,6 +2,7 @@
id: buttons
title: Modifying devices to add buttons
sidebar_label: Buttons
sidebar_position: 4
---
Many of the TTGO Lora32 devices do not have a program button to navigate the displayed pages. It is possible to add a button to the following device:

View file

@ -2,6 +2,7 @@
id: gpsmodule
title: External GPS Module
sidebar_label: GPS Module
sidebar_position: 3
---
:::warning
@ -11,6 +12,7 @@ GPIO access is fundamentally dangerous because invalid options can physically da
External GPS modules can be installed to extend the capabilities of simple boards.
## GY-GPS6MV2 GPS module
- Based on the ublox/u-blox NEO-6M module
- Input: 3 to 5V
- Interface: RS232 TTL
@ -19,17 +21,16 @@ External GPS modules can be installed to extend the capabilities of simple board
[<img src="/img/hardware/gy-gps6mv2.jpg" alt="GY-GPS6MV2" style={{zoom:'50%'}} />](/img/hardware/gy-gps6mv2.jpg)
### LILYGO TTGO Lora32 v2.1-1.6
- Wiring instructions:
| GPS Module Pin | TTGO Lora32 v2.1-1.6 Pin |
| :-----: | :---------------: |
| VCC | 3.3V |
| RX | IO13 |
| TX | IO15 |
| GND | GND |
| :------------: | :----------------------: |
| VCC | 3.3V |
| RX | IO13 |
| TX | IO15 |
| GND | GND |
- Once the module is connected, it should be detected automatically by the firmware.
@ -38,11 +39,11 @@ External GPS modules can be installed to extend the capabilities of simple board
- Wiring instructions:
| GPS Module Pin | TTGO Lora32 v2.0 Pin |
| :-----: | :---------------: |
| VCC | 3.3V |
| RX | 13 |
| TX | 36 |
| GND | GND |
| :------------: | :------------------: |
| VCC | 3.3V |
| RX | 13 |
| TX | 36 |
| GND | GND |
- Once the module is connected, it should be detected automatically by the firmware.
@ -50,12 +51,12 @@ External GPS modules can be installed to extend the capabilities of simple board
- Wiring instructions:
| GPS Module Pin | TTGO Lora32 v1.3 Pin|
| :-----: | :---------------: |
| VCC | 3.3V |
| RX | 13 |
| TX | 36 |
| GND | GND |
| GPS Module Pin | TTGO Lora32 v1.3 Pin |
| :------------: | :------------------: |
| VCC | 3.3V |
| RX | 13 |
| TX | 36 |
| GND | GND |
- Once the module is connected, it should be detected automatically by the firmware.
@ -63,12 +64,12 @@ External GPS modules can be installed to extend the capabilities of simple board
- Wiring instructions:
| GPS Module Pin | TTGO Lora32 v1.0 Pin|
| :-----: | :---------------: |
| VCC | 3.3V |
| RX | 37 |
| TX | 36 |
| GND | GND |
| GPS Module Pin | TTGO Lora32 v1.0 Pin |
| :------------: | :------------------: |
| VCC | 3.3V |
| RX | 37 |
| TX | 36 |
| GND | GND |
- Once the module is connected, it should be detected automatically by the firmware.
@ -76,14 +77,11 @@ External GPS modules can be installed to extend the capabilities of simple board
- Wiring instructions:
| GPS Module Pin | Heltec Lora32 Pin|
| :-----: | :---------------: |
| VCC | 3.3V |
| RX | 37 |
| TX | 36 |
| GND | GND |
| GPS Module Pin | Heltec Lora32 Pin |
| :------------: | :---------------: |
| VCC | 3.3V |
| RX | 37 |
| TX | 36 |
| GND | GND |
- Once the module is connected, it should be detected automatically by the firmware.

View file

@ -1,15 +1,15 @@
---
id: overview
title: Hardware
sidebar_label: Hardware
slug: /hardware
sidebar_position: 3
---
We currently support devices that use the ESP32 and the nRF52 microcontrollers. Both of these offer low power consumption and long battery life, but each come with their own advantages:
## ESP32
The ESP32 devices have the advantage of having a Wifi interface. This allows you to connect to an access point, or run the device as an access point, and host the [web interface](/docs/software/web/web-app-software).
The ESP32 devices have the advantage of having a Wifi interface. This allows you to connect to an access point, or run the device as an access point, and host the [web interface](/docs/software/web).
The following ESP32 devices are supported:

View file

@ -0,0 +1,7 @@
position: 1 # float position is supported
label: 'Supported Hardware'
collapsible: true # make the category collapsible
link:
type: generated-index
title: Supported Hardware

View file

@ -2,6 +2,7 @@
id: heltec
title: Heltec device
sidebar_label: Heltec
sidebar_position: 5
---
## WiFi LoRa 32 (V2)
@ -18,14 +19,16 @@ sidebar_label: Heltec
- Reset and Program switches
- No GPS
- Firmware file: `firmware-heltec-1.x.x.bin`
- [Purchase link](https://heltec.org/project/wifi-lora-32)
[<img src="Heltec WiFi LoRa 32 (V2)" src="/img/hardware/heltec-v2.png" style={{zoom:'25%'}} />](/img/hardware/heltec-v2.png)
[<img src="Heltec WiFi LoRa 32 (V2) Pinouts" src="/img/hardware/heltec_v2_pinmap.png" style={{zoom:'25%'}} />](/img/hardware/heltec_v2_pinmap.png)
- There are two versions of the Heltec (V2). Below is a picture highlighting the visual differences:
There are two versions of the Heltec (V2). Below is a picture highlighting the visual differences:
[<img src="Heltec WiFi LoRa 32 (V2)" src="/img/hardware/heltec_v2_vs_v21.png" style={{zoom:'25%'}} />](/img/hardware/heltec_v2_vs_v21.png)

View file

@ -2,6 +2,7 @@
id: linux
title: Linux Compatible Hardware
sidebar_label: Linux
sidebar_position: 6
---
This page is a place holder.

View file

@ -2,9 +2,23 @@
id: lora
title: LILYGO® TTGO Lora devices
sidebar_label: LILYGO® Lora
sidebar_position: 2
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
## Lora V1
There are several versions of the LILYGO® Lora
<Tabs
groupId="t-lora"
defaultValue="v1"
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'}
]}>
<TabItem value="v1">
- ESP32 - Wifi & Bluetooth
- SX1276 - LoRa Transceiver
@ -16,12 +30,15 @@ sidebar_label: LILYGO® Lora
- Reset and Program switches
- No GPS
- Firmware file: `firmware-tlora-v1-1.x.x.bin`
- [Purchase link](https://www.aliexpress.com/item/32840238513.html)
[<img alt="LILYGO® TTGO Lora V1" src="/img/hardware/lora-v1.png" style={{zoom:'25%'}} />](/img/hardware/lora-v1.png)
## Lora V1.3
</TabItem>
<TabItem value="v1.3">
- ESP32 - Wifi & Bluetooth
- SX127x - LoRa Transceiver
@ -33,13 +50,16 @@ sidebar_label: LILYGO® Lora
- Reset and Program switches
- No GPS
- Firmware file: `firmware-tlora_v1_3-1.x.x.bin`
- [Purchase link](https://www.aliexpress.com/item/4000628100802.html)
[<img alt="LILYGO® TTGO Lora V1.3" src="/img/hardware/lora-v1.3.png" style={{zoom:'25%'}} />](/img/hardware/lora-v1.3.png)
[<img alt="LILYGO® TTGO Lora V1.3 pin map" src="/img/hardware/lora-v1.3_pinmap.webp" style={{zoom:'25%'}} />](/img/hardware/lora-v1.3_pinmap.webp)
## Lora V2.0
</TabItem>
<TabItem value="v2.0">
- ESP32 - Wifi & Bluetooth
- SX127x - LoRa Transceiver
@ -53,12 +73,15 @@ sidebar_label: LILYGO® Lora
- microSD connector
- No GPS
- Firmware file: `firmware-tlora-v2-1.x.x.bin`
- [Purchase link](https://www.aliexpress.com/item/32846302183.html)
[<img alt="LILYGO® TTGO Lora V2" src="/img/hardware/lora-v2.0.png" style={{zoom:'25%'}} />](/img/hardware/lora-v2.0.png)
## Lora V2.1-1.6
</TabItem>
<TabItem value="v2.1">
- ESP32 - Wifi & Bluetooth
- SX127x - LoRa Transceiver
@ -72,11 +95,17 @@ sidebar_label: LILYGO® Lora
- microSD connector
- No GPS
- Firmware file: `firmware-tlora-v2-1-1.6-1.x.x.bin`
- [Purchase link](https://www.aliexpress.com/item/32915894264.html)
:::warning
Some of these boards contained the wrong component in the LiPo battery charging circuit allowing the battery to be overcharged. While this does appear to have been fixed recently, please see the [warning](https://www.thethingsnetwork.org/community/berlin/post/warning-attention-users-of-ttgo21-v16-boards-labeled-t3_v16-on-pcb-battery-exploded-and-got-on-fire) on The Things Network for more information.
:::
[<img src="/img/hardware/lora-v2.1-1.6.png" alt="LILYGO® TTGO Lora V2.1-1.6" style={{zoom:'25%'}} />](/img/hardware/lora-v2.1-1.6.png)
</TabItem>
</Tabs>

View file

@ -1,28 +1,161 @@
---
id: wisBlock
title: RAK WisBlock 4631
title: RAK WisBlock
sidebar_label: RAK WisBlock
sidebar_position: 3
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
The RAK WisBlock is a low power modular hardware system that can be used to build Meshtastic devices. Soldering is only required for the optional OLED screen.
As of February 6, 2022, there is a [Meshtastic Getting Started kit](https://store.rakwireless.com/products/wisblock-meshtastic-starter-kit) that has the minimum you need to get started.
RAK Wireless currently sell a [Meshtastic Starter kit](https://store.rakwireless.com/products/wisblock-meshtastic-starter-kit) that has the minimum you need to get started. If you wish to purchase parts separately, you will need a [base board](https://store.rakwireless.com/collections/wisblock-base), a [core 4631 LPWAN module](https://store.rakwireless.com/collections/wisblock-core/products/rak4631-lpwan-node), and optionally a GPS Sensor, screen or other module to build a Meshtastic device. Please ensure you choose the correct operating frequency for your country when purchasing.
You will need a [base board](https://store.rakwireless.com/collections/wisblock-base), a [core 4631 LPWAN module](https://store.rakwireless.com/collections/wisblock-core/products/rak4631-lpwan-node), and optionally a GPS Sensor to build a Meshtastic device.
Please see the RAK documentation for the correct way to connect your hardware to ensure that you do not damage the device. There is currently no pin required to pair RAK devices via BLE.
Both available base boards ([5005](https://store.rakwireless.com/collections/wisblock-base/products/rak5005-o-base-board) & [19003](https://store.rakwireless.com/collections/wisblock-base/products/wisblock-base-board-rak19003)) have a reset button, support an OLED screen, and have built in connectors for a 3.7V LIPO battery (max 4.3V) and 5V Solar panel (max 5.5V)
## RAK base boards
<Tabs
groupId="rakbase board"
defaultValue="RAK5005-O"
values={[
{label: 'RAK5005-O', value: 'RAK5005-O'},
{label: 'RAK19003', value: 'RAK19003'},
{label: 'RAK19001', value: 'RAK19001'},
{label: 'RAK19007', value:'RAK19007'}
]}>
<TabItem value="RAK5005-O">
A user button is not possible with the 19003 base board. It may be possible to add a user button to the 5005 base board using the [13002 IO module](https://store.rakwireless.com/collections/wisblock-interface/products/adapter-module-rak13002).
[RAK5005-O](https://store.rakwireless.com/products/rak5005-o-base-board) - The original WisBlock Base Board
To add a GPS to the 5005 base board, you need the [1910 GPS sensor](https://store.rakwireless.com/collections/wisblock-sensor/products/rak1910-max-7q-gnss-location-sensor). It is supported on slot A of the 5005 board via UART.
- Reset button
- OLED screen support (OLED screen sold separately)
- Connector for 3.7v LiPo battery (with charge controller)
- Connector for 5v solar panel (max 5.5v)
- 1x Core Module slot
- 1x WisBlock IO Module slot
- 4x WisBlock Sensor Module slots
- I2C, UART, GPIOs and analog input accessible with solder contacts
- Micro USB port for debugging and power
To add a GPS to the 19003 base board, you need the [12500 GPS sensor](https://store.rakwireless.com/products/wisblock-gnss-location-module-rak12500). It is supported via I2C on slot B for firmware versions 1.49 and above.
Flashing the firmware is a simple process. Connect your device via USB, click the reset button twice, and a drive will appear. On Windows, Linux, or Mac, drag the appropriate .uf2 firmware file onto the root of the drive and the firmware will be updated. Or, you can use [Meshtastic-flasher](https://github.com/meshtastic/Meshtastic-gui-installer)
Further information on the RAK5005-O can be found on the [RAK Documentation Center](https://docs.rakwireless.com/Product-Categories/WisBlock/RAK5005-O/Overview/#product-description).
There is currently no pin required to pair RAK devices via BLE.
It may be possible to add a user button using the [13002 IO module](https://store.rakwireless.com/collections/wisblock-interface/products/adapter-module-rak13002).
- nRF52840 - Bluetooth BLE 5.0 and very low power consumption
- [Update the bootloader](https://docs.rakwireless.com/Product-Categories/WisBlock/RAK4631/Quickstart/#updating-the-bootloader) on first use! This can be done easily with [Meshtastic-flasher](https://github.com/meshtastic/Meshtastic-gui-installer).
- Firmware for 5005 base board: [`firmware-rak4631_5005-1.x.x.uf2`](/downloads)
<img
alt="RAK4631 5005"
src="/img/hardware/rak4631_5005.png"
style={{ zoom: '50%' }}
/>
</TabItem>
<TabItem value="RAK19003">
[RAK19003](https://store.rakwireless.com/products/wisblock-base-board-rak19003) - WisBlock Mini Base Board
- Reset button
- OLED screen support (OLED screen sold separately)
- Connector for 3.7v LiPo battery (with charge controller)
- Connector for 5v solar panel (max 5.5v)
- 1x Core Module slot
- 2x WisBlock Sensor Module slots
- I2C, UART and BOOT headers accessible with solder contacts
- Micro USB port for debugging and power
Further information on the RAK19003 can be found on the [RAK Documentation Center](https://docs.rakwireless.com/Product-Categories/WisBlock/RAK19003/Overview/#product-description).
It is currently not possible to add a user button to this board.
- [Update the bootloader](https://docs.rakwireless.com/Product-Categories/WisBlock/RAK4631/Quickstart/#updating-the-bootloader) on first use! This can be done easily with [Meshtastic-flasher](https://github.com/meshtastic/Meshtastic-gui-installer).
- Firmware for 19003 base board: [`firmware-rak4631_19003-1.x.x.uf2`](/downloads)
<img
alt="RAK4631 19003"
src="/img/hardware/rak4631_19003.png"
style={{ zoom: '50%' }}
/>
</TabItem>
<TabItem value="RAK19001">
[RAK19001](https://store.rakwireless.com/products/rak19001-wisblock-dual-io-base-board) - WisBlock Dual IO Base Board
:::caution
This board should work with the RAK5005-O firmware, however this is currently uncomfirmed.
:::
- Reset and user definable buttons
- OLED screen support (OLED screen sold separately)
- Connector for 3.7v LiPo battery (with charge controller)
- Separate connector for non-rechargeable batteries
- Connector for 5v solar panel (max 5.5v)
- 1x Core Module slot
- 2x WisBlock IO Module slot
- 6x WisBlock Sensor Module slots
- I2C, SPI, UART, BOOT and GPIOs accessible with solder contacts
- USB-C port for debugging and power
- Battery selector switch
Further information on the RAK19001 can be found on the [RAK Documentation Center](https://docs.rakwireless.com/Product-Categories/WisBlock/RAK19001/Overview/#product-description).
It may be possible to add a user button using the [13002 IO module](https://store.rakwireless.com/collections/wisblock-interface/products/adapter-module-rak13002).
</TabItem>
<TabItem value="RAK19007">
[RAK19007](https://store.rakwireless.com/products/rak19007-wisblock-base-board-2nd-gen) - WisBlock Base Board - 2nd Generation
This is an upgrade to the original RAK5005-O base board.
:::caution
This board should work with the RAK5005-O firmware, however this is currently uncomfirmed.
:::
- Reset button
- OLED screen support (OLED screen sold separately)
- Connector for 3.7v LiPo battery (with charge controller)
- Connector for 5v solar panel (max 5.5v)
- 1x Core Module slot
- 1x WisBlock IO Module slot
- 4x WisBlock Sensor Module slots
- I2C, UART, BOOT and GPIOs accessible with solder contacts
- USB-C port for debugging and power
Further information on the RAK19007 can be found on the [RAK Documentation Center](https://docs.rakwireless.com/Product-Categories/WisBlock/RAK19007/Overview/#product-description).
It may be possible to add a user button using the [13002 IO module](https://store.rakwireless.com/collections/wisblock-interface/products/adapter-module-rak13002).
</TabItem>
</Tabs>
Flashing the firmware is a simple process. Connect your device to your computer via USB, click the reset button twice, and a drive will appear. On Windows, Linux, or Mac, drag the appropriate .uf2 firmware file onto the root of the drive and the device will restart and the firmware will be updated. Or, you can use [Meshtastic-flasher](https://github.com/meshtastic/Meshtastic-gui-installer). RAK have also provided [Installation instructions](https://docs.rakwireless.com/Product-Categories/WisBlock/RAK4631/Quickstart/#rak4631-lora-mesh-via-meshtastic) for Meshtastic.
## Core Module
There are two core modules supported by Meshtastic:
<Tabs
groupId="rakcore"
defaultValue="RAK4631"
values={[
{label: 'RAK4631', value: 'RAK4631'},
{label: 'RAK11200', value: 'RAK11200'}
]}>
<TabItem value="RAK4631">
The main supported code is the [WisBlock LPWAN Module RAK4631](https://store.rakwireless.com/products/rak4631-lpwan-node).
(Please note this is different to the RAK4631-R which uses different firmware incompatible with Meshtastic).
- nRF52840 microprocessor - Bluetooth BLE 5.0 and very low power consumption
- SX1262 - LoRa transceiver
- Frequency options:
- 433 MHz
@ -33,26 +166,8 @@ There is currently no pin required to pair RAK devices via BLE.
- 915 MHz
- 920 MHz
- 923 MHz
- Optional GPS
- U.FL antenna connector
- Optional switches
- Optional screen
- Firmware for 5005 base board: [`firmware-rak4631_5005-1.x.x.uf2`](/downloads)
<img alt="RAK4631 5005" src="/img/hardware/rak4631_5005.png" style={{zoom:'50%'}} />
- Firmware for 19003 base board: [`firmware-rak4631_19003-1.x.x.uf2`](/downloads)
<img alt="RAK4631 19003" src="/img/hardware/rak4631_19003.png" style={{zoom:'50%'}} />
- Firmware for 5005 with RAK14000 epaper: [`firmware-rak4631_19003-epaper-1.3.x.uf2`](/downloads)
<img alt="RAK4631 5005 14000" src="/img/hardware/rak4631_5005_epaper.jpg" style={{zoom:'50%'}} />
- Firmware for 5005 with 11200: [`firmware-11200-1.3.x.bin`](/downloads)
<img alt="RAK4631 5005 11200" src="/img/hardware/rak11200.jpg" style={{zoom:'50%'}} />
- [Installation instructions](https://docs.rakwireless.com/Product-Categories/WisBlock/RAK4631/Quickstart/#rak4631-lora-mesh-via-meshtastic)
- Don't forget to [update the bootloader](https://docs.rakwireless.com/Product-Categories/WisBlock/RAK4631/Quickstart/#updating-the-bootloader) first! This can be done easily with [Meshtastic-flasher](https://github.com/meshtastic/Meshtastic-gui-installer)
- RAK's [GitHub Page](https://github.com/RAKWireless/WisBlock) for the WisBlock
<img
alt="RAK4631 Core Module"
@ -60,4 +175,176 @@ There is currently no pin required to pair RAK devices via BLE.
style={{ zoom: '50%' }}
/>
There is development activity to get sensors added in Meshtastic core. For example, the Environment Sensor.
Further information on the RAK4631 can be found on the [RAK Documentation Center](https://docs.rakwireless.com/Product-Categories/WisBlock/RAK4631/Overview/#product-description).
</TabItem>
<TabItem value="RAK11200">
The [RAK11200](https://store.rakwireless.com/products/wiscore-esp32-module-rak11200) is currently only supported on the RAK5005-O base board. This provides the benefits of WiFi, but sacrifices the very low power consumption of the nRF microprocessor used on the RAK4631.
- ESP32-WROVER microprocessor - Bluetooth 4.2 & WiFi 802.11 b/g/n
Further information on the RAK11200 can be found on the [RAK Documentation Center](https://docs.rakwireless.com/Product-Categories/WisBlock/RAK11200/Overview/#product-description).
The RAK11200 does not contain a LoRa transceiver, and this needs to be added separately in the form of the [RAK13300 LPWAN module](https://store.rakwireless.com/products/rak13300-wisblock-lpwan). This occupies the IO Port of the base board.
The RAK13300 has the following specifications:
- SX1262 - LoRa transceiver
- Frequency options:
- 433 MHz
- 470 MHz
- 864 MHz
- 865 MHz
- 868 MHz
- 915 MHz
- 920 MHz
- 923 MHz
- U.FL antenna connector
Further information on the RAK13300 can be found on the [RAK Documentation Center](https://docs.rakwireless.com/Product-Categories/WisBlock/RAK13300/Overview/#product-description).
- Firmware for 5005 with 11200: [`firmware-11200-1.3.x.bin`](/downloads)
<img
alt="RAK4631 5005 11200"
src="/img/hardware/rak11200.jpg"
style={{ zoom: '50%' }}
/>
</TabItem>
</Tabs>
## Screens
There are currently two different screens supported by the RAK WisBlock system:
<Tabs
groupId="rakscreens"
defaultValue="OLED"
values={[
{label: 'OLED Display', value: 'OLED'},
{label: 'E-Ink Display', value: 'E-Ink'}
]}>
<TabItem value="OLED">
The [RAK1921 OLED display](https://store.rakwireless.com/products/rak1921-oled-display-panel) is a 0.96 inch monocrome display.
- 0.96 inch OLED display
- Resolution 128 x 64 pixels
- I2C interface
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.
[<img alt="0.96 inch OLED display" src="/img/hardware/screen.png" style={{zoom:'25%'}} />](/img/hardware/screen.png)
</TabItem>
<TabItem value="E-Ink">
The [RAK1400 EPD module](https://store.rakwireless.com/products/wisblock-epd-module-rak14000) is an ultra low power E-Ink display with three user buttons.
- 2.13 inch black and white E-Ink display
- Three button module
- Resolution 212 x 104 pixels
- Occupies the IO Port of a Wisblock Base
- Firmware for 5005 with RAK14000 epaper: [`firmware-rak4631_19003-epaper-1.3.x.uf2`](/downloads)
<img
alt="RAK4631 5005 14000"
src="/img/hardware/rak4631_5005_epaper.jpg"
style={{ zoom: '50%' }}
/>
Please note only the white-black display is supported at this time, the white-black-red display may work, but is not supported.
Further information on the RAK14000 can be found on the [RAK Documentation Center](https://docs.rakwireless.com/Product-Categories/WisBlock/RAK14000/Overview/#product-description).
</TabItem>
</Tabs>
## Supported modules
<Tabs
groupId="rakmodules"
defaultValue="GPS"
values={[
{label: 'GPS Module', value: 'GPS'},
{label: 'Buzzer', value: 'Buzzer'},
{label: 'I/O Module', value: 'IO'},
{label: 'Environmental Sensor', value:'BME680'}
]}>
<TabItem value="GPS">
To add a GPS to the RAK5005-O base board, you need the [RAK1910 GPS sensor](https://store.rakwireless.com/collections/wisblock-sensor/products/rak1910-max-7q-gnss-location-sensor). It is supported on slot A of the 5005 board via UART.
- uBlox MAX-7Q GPS module
- GPS and GLONASS satelite support
Further information on the RAK1910 can be found on the [RAK Documentation Center](https://docs.rakwireless.com/Product-Categories/WisBlock/RAK1910/Overview/#product-description).
To add a GPS to the RAK19003 base board, you need the [RAK12500 GPS sensor](https://store.rakwireless.com/products/wisblock-gnss-location-module-rak12500). It is supported via I2C on slot B for firmware versions 1.49 and above.
- uBlox Zoe-M8Q GNSS receiver
- GPS, GLONASS, QZSS and BeiDou satelite support
Further information on the RAK12500 can be found on the [RAK Documentation Center](https://docs.rakwireless.com/Product-Categories/WisBlock/RAK12500/Overview/#product-description).
</TabItem>
<TabItem value="Buzzer">
The [RAK18001 Buzzer Module](https://store.rakwireless.com/products/wisblock-buzzer-module-rak18001) is currently being tested for integration with the External Notifications plugin. There is currently a known conflict with buzzer if the module is placed in Slot D, although other slots should work.
Further information on the RAK18001 can be found on the [RAK Documentation Center](https://docs.rakwireless.com/Product-Categories/WisBlock/RAK18001/Overview/#product-description).
</TabItem>
<TabItem value="IO">
The [RAK13002 IO Module](https://store.rakwireless.com/collections/wisblock-interface/products/adapter-module-rak13002) can be used to, amongst other things, add a user button to the RAK base boards (excluding the RAK19003 Mini base board). It features a number of different interface options:
- 2x I2C interfaces
- 2x UART interfaces
- 1x SPI interface
- Upto 6x GPIOs
- 2x ADC interfaces
- 3.3v Power rails
There is development activity in progress to get sensors such as this added to the Meshtastic Core.
Further information on the RAK13002 can be found on the [RAK Documentation Center](https://docs.rakwireless.com/Product-Categories/WisBlock/RAK13002/Overview).
</TabItem>
<TabItem value="BME680">
The [RAK1906 Environmental Sensor](https://store.rakwireless.com/products/rak1906-bme680-environment-sensor) is based on the Bosch BME680 module and has the following features:
- Temperature measurement (Range -40&deg;C to +85&deg;C)
- Humidity measurement (Range 0% to 100%)
- Barometer measurement (Range 300 to 1100 hPa)
- Air Quality measurement
There is development activity in progress to get sensors such as this added to the Meshtastic Core.
Further information on the RAK1906 can be found on the [RAK Documentation Center](https://docs.rakwireless.com/Product-Categories/WisBlock/RAK1906/Overview/#product-description).
</TabItem>
</Tabs>
## RAK Wireless' Resources
- RAK's Wisblock [Documentation Center](https://docs.rakwireless.com/Product-Categories/WisBlock)
- RAK's [GitHub Page](https://github.com/RAKWireless/WisBlock) for the WisBlock
## MAC Address Conflict
Some of the RAK Meshtastic starter kits that come pre-installed with Meshtastic have an error where the same MAC address is applied to more than one unit. If you have a number of RAK devices but are unable to connect to more than one of them, or they will not talk to each other despite being on the same mesh, please try a [factory reset](/docs/settings/misc#factory_reset) using the Meshtastic CLI, and then restart the device. This reset will wipe all settings on the device back to their defaults including the stored MAC address. If you have already configured your node and wish to keep the configuration, then please export it first:
- `meshtastic --export-config > settings_file.txt` - This will save the node's settings to the file `settings_file.txt`
- `meshtastic --set factory_reset true` - This will reset the device and wipe the configuration
- Power cycle the device
- `meshtastic --configure settings_files.txt` - This will restore the settings saved in the file `settings_file.txt`

View file

@ -2,9 +2,24 @@
id: tbeam
title: LILYGO® TTGO T-Beam devices
sidebar_label: LILYGO® T-Beam
sidebar_position: 1
---
## T-Beam - Meshtastic - v1.1
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
There are several versions of the T-Beam
<Tabs
groupId="t-beam"
defaultValue="1.1"
values={[
{label: 'T-Beam v1.1', value: '1.1'},
{label: 'T-Beam with M8N', value: 'm8n'},
{label: 'T-Beam with M8N & SX1262', value: 'sx1262'},
{label: 'T-Beam v0.7', value:'0.7'}
]}>
<TabItem value="1.1">
- Meshtastic pre-installed
- ESP32 - Wifi & Bluetooth
@ -19,14 +34,17 @@ sidebar_label: LILYGO® T-Beam
- Power, Program and Reset switches
- **Comes with 0.96 inch OLED display (some soldering required to assemble)**
- Firmware file: `firmware-tbeam-1.x.x.bin`
- [Purchase link](https://www.aliexpress.com/item/4001178678568.html)
[<img alt="LILYGO® TTGO T-Beam Meshtastic" src="/img/hardware/t-beam-meshtastic.png" style={{zoom:'25%'}} />](/img/hardware/t-beam-meshtastic.png)
[<img alt="LILYGO® TTGO T-Beam v1.1" src="/img/hardware/t-beam-v1.1.png" style={{zoom:'35%'}} />](/img/hardware/t-beam-v1.1.png)
<!--[<img alt="LILYGO® TTGO T-Beam v1.1" src="/img/hardware/t-beam-v1.1.png" style={{zoom:'35%'}} />](/img/hardware/t-beam-v1.1.png)-->
[<img alt="LILYGO® TTGO T-Beam v1.1 pinmap" src="/img/hardware/t-beam_v1.1_pinmap.webp" style={{zoom:'35%'}} />](/img/hardware/t-beam_v1.1_pinmap.webp)
## T-Beam - M8N
</TabItem>
<TabItem value="m8n">
- ESP32 - Wifi & Bluetooth
- SX1276 - LoRa Transceiver
@ -40,12 +58,15 @@ sidebar_label: LILYGO® T-Beam
- Power, Program and Reset switches
- Screen sold separately
- Firmware file: `firmware-tbeam-1.x.x.bin`
- [Purchase link](https://www.aliexpress.com/item/33047631119.html)
[<img alt="LILYGO® TTGO T-Beam M8N" src="/img/hardware/t-beam-m8n.png" style={{zoom:'25%'}} />](/img/hardware/t-beam-m8n.png)
## T-Beam - M8N & SX1262
</TabItem>
<TabItem value="sx1262">
- ESP32 - Wifi & Bluetooth
- **SX1262 - LoRa Transceiver - improved performance**
@ -59,12 +80,15 @@ sidebar_label: LILYGO® T-Beam
- Power, Program and Reset switches
- Screen sold separately
- Firmware file: `firmware-tbeam-1.x.x.bin`
- [Purchase link](https://www.aliexpress.com/item/4001287221970.html)
[<img alt="LILYGO® TTGO T-Beam M8N & SX1262" src="/img/hardware/t-beam-sx1262.png" style={{zoom:'25%'}} />](/img/hardware/t-beam-sx1262.png)
## T-Beam - v0.7
</TabItem>
<TabItem value="0.7">
:::note
This is an earlier version of the T-Beam board, and due to changes in the design in subsequent iterations this board uses a specific firmware file different from the other T-Beam boards.
@ -75,6 +99,7 @@ This is an earlier version of the T-Beam board, and due to changes in the design
- ESP32 - Wifi & Bluetooth
- SX1276 - LoRa Transceiver
- Frequency options:
- 433 MHz
- 868 MHz
- 915 MHz
- NEO-6M - GPS receiver
@ -83,15 +108,24 @@ This is an earlier version of the T-Beam board, and due to changes in the design
- No GPS
- Screen sold separately
- Firmware file: `firmware-tbeam0.7-1.x.x.bin`
- [Purchase link](https://www.aliexpress.com/item/4000469332610.html)
[<img alt="LILYGO TTGO T-Beam v0.7" src="/img/hardware/t-beam-v0.7.png" style={{zoom:'25%'}} />](/img/hardware/t-beam-v0.7.png)
[<img alt="LILYGO TTGO T-Beam v0.7 pinmap" src="/img/hardware/t-beam_v0.7_pinmap.jpeg" style={{zoom:'25%'}} />](/img/hardware/t-beam_v0.7_pinmap.jpeg)
</TabItem>
</Tabs>
## Screen
- 0.96 inch OLED i<sup>2</sup>c display
- [Purchase link](https://www.aliexpress.com/item/32922106384.html)
[<img alt="0.96 inch OLED display" src="/img/hardware/screen.png" style={{zoom:'25%'}} />](/img/hardware/screen.png)
To attach the screen, connect VCC to 3v3, GND to GND, SCL to pin 22, and SDA to pin 21 as per the below image.
[<img alt="Connecting the OLED screen to a T-Beam" src="/img/hardware/t-beam-screen.jpg" style={{zoom:'50%'}} />](/img/hardware/t-beam-screen.jpg)

View file

@ -2,9 +2,10 @@
id: techo
title: LILYGO® TTGO T-Echo devices
sidebar_label: LILYGO® T-Echo
sidebar_position: 4
---
The T-Echo has been in development by LILYGO® over the past few months and has now been released.
The T-Echo is the latest device to be release by LILYGO® supporting a low power consumption microcontroller.
### See [Getting Started](/docs/getting-started/flashing-nrf52)
@ -20,11 +21,26 @@ The T-Echo has been in development by LILYGO® over the past few months and has
- L76K - GNSS receiver - Supporting GPS, BeiDou, GLONASS & QZSS
- Reset, Program and capacitive touch buttons
- U.FL antenna connector
<!-- * BME280 - Humidity and Pressure Sensor -->
- Optional case and battery
- Optional BME280 - Humidity and Pressure Sensor
- Comes with a case and battery
<img
alt="LILYGO T-Echo"
src="/img/hardware/t-echo.png"
style={{ zoom: '15%' }}
/>
### T-Echo button functions
- Capacitive top button
- A short press refreshes the current screen
- Button 1
- A single press resets the device
- A double press puts the device into bootloader mode ready to receive a new firmware
- Button 2
- A single press changes the page displayed on the device
- A double press turns the screen backlight on/off
- A long press turns the device off
[<img alt="LILYGO T-Echo" src="/img/hardware/t-echo-lilygo.jpg" style={{zoom:'25%'}} />](/img/hardware/t-echo-lilygo.jpg)

View file

@ -1,8 +1,8 @@
---
id: overview
title: Legal
sidebar_label: Legal
slug: /legal
sidebar_position: 7
---
## Disclaimers

View file

@ -1,8 +1,8 @@
---
id: overview
title: Device Settings
sidebar_label: Device Settings
slug: /settings
sidebar_position: 5
---
import Tabs from '@theme/Tabs';
@ -28,7 +28,7 @@ For most, GPS is a really cool, desirable feature. Knowing where everyone on you
### WiFi Settings
Whether you're using the upcoming [web interface](software/web/web-app-software) or you're interested in broadcasting messages to/from the internet using [MQTT](settings/mqtt), the [WiFi settings](settings/wifi) are your first stop towards an IoT radio.
Whether you're using the upcoming [web interface](software/web) or you're interested in broadcasting messages to/from the internet using [MQTT](settings/mqtt), the [WiFi settings](settings/wifi) are your first stop towards an IoT radio.
## Examples

View file

@ -3,6 +3,7 @@ id: canned-message-module
title: Canned Message Module
sidebar_label: Canned Message Module
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import PluginModule from '@site/docs/_blocks/_plugin_module.mdx';
@ -35,7 +36,7 @@ Once module settings are changed, a **reset** is required for them to take effec
| canned_message_module_enabled | `true`, `false` | `false` |
| canned_message_module_messages | `string` | `""` |
| canned_message_module_send_bell | `true`, `false` | `false` |
| (Messages)* | `string` | `""` |
| (Messages)\* | `string` | `""` |
- Messages can be set with a dedicated option:
@ -170,7 +171,6 @@ values={[
]}>
<TabItem value="cli">
```shell title="Enable Bell Character"
meshtastic --set canned_message_module_send_bell true
```

View file

@ -8,10 +8,10 @@ import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import PluginModule from '@site/docs/_blocks/_plugin_module.mdx';
:::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.
:::
<PluginModule name="ext_notification_module" rename="ext_notification_plugin" />
<!--- TODO add link to hardware setup to admonition--->

View file

@ -12,7 +12,7 @@ import PluginModule from '@site/docs/_blocks/_plugin_module.mdx';
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.
:::
<PluginModule name="inputbroker_" rename="rotary1_"/>
<PluginModule name="inputbroker_" rename="rotary1_" />
<!--- TODO add link to hardware setup to admonition--->
@ -34,15 +34,15 @@ Once module settings are changed, a **reset** is required for them to take effec
| Setting | Acceptable Values | Default |
| :-----------------: | :---------------: | :-----------: |
| rotary1_enabled | `true`, `false` | `false` |
| rotary1_event_cw | `InputEventChar` | (not defined) |
| rotary1_event_ccw | `InputEventChar` | (not defined) |
| rotary1_event_press | `InputEventChar` | (not defined) |
| rotary1_pin_a | `integer` | (not defined) |
| rotary1_pin_b | `integer` | (not defined) |
| rotary1_pin_press | `integer` | (not defined) |
| inputbroker_enabled | `true`, `false` | `false` |
| inputbroker_event_cw | `InputEventChar` | (not defined) |
| inputbroker_event_ccw | `InputEventChar` | (not defined) |
| inputbroker_event_press | `InputEventChar` | (not defined) |
| inputbroker_pin_a | `integer` | (not defined) |
| inputbroker_pin_b | `integer` | (not defined) |
| inputbroker_pin_press | `integer` | (not defined) |
### rotary1_enabled
### inputbroker_enabled
Enable the rotary encoder #1
@ -60,11 +60,11 @@ values={[
<TabItem value="cli">
```shell title="Enable rotary1"
meshtastic --set rotary1_enabled true
meshtastic --set inputbroker_enabled true
```
```shell title="Disable rotary1"
meshtastic --set rotary1_enabled true
meshtastic --set inputbroker_enabled true
```
</TabItem>
@ -91,7 +91,7 @@ Configuring this setting is not yet available for the selected platform. If this
</TabItem>
</Tabs>
### rotary1_event_cw
### inputbroker_event_cw
Generate input event on CW of this kind.
@ -113,11 +113,11 @@ values={[
<TabItem value="cli">
```shell title="Set rotary1 event cw to 'KEY_UP'"
meshtastic --set rotary1_event_press KEY_UP
meshtastic --set inputbroker_event_press KEY_UP
```
```shell title="Unset rotary1 event cw"
meshtastic --set rotary1_event_press ""
meshtastic --set inputbroker_event_press ""
```
</TabItem>
@ -144,7 +144,7 @@ Configuring this setting is not yet available for the selected platform. If this
</TabItem>
</Tabs>
### rotary1_event_ccw
### inputbroker_event_ccw
Generate input event on CCW of this kind.
@ -166,11 +166,11 @@ values={[
<TabItem value="cli">
```shell title="Set rotary1 event ccw to 'KEY_DOWN'"
meshtastic --set rotary1_event_ccw KEY_DOWN
meshtastic --set inputbroker_event_ccw KEY_DOWN
```
```shell title="Unset rotary1 event ccw"
meshtastic --set rotary1_event_ccw ""
meshtastic --set inputbroker_event_ccw ""
```
</TabItem>
@ -197,7 +197,7 @@ Configuring this setting is not yet available for the selected platform. If this
</TabItem>
</Tabs>
### rotary1_event_press
### inputbroker_event_press
Generate input event on Press of this kind.
@ -219,11 +219,11 @@ values={[
<TabItem value="cli">
```shell title="Set rotary1 event press to 'KEY_SELECT'"
meshtastic --set rotary1_event_press KEY_SELECT
meshtastic --set inputbroker_event_press KEY_SELECT
```
```shell title="Unset rotary1 event press"
meshtastic --set rotary1_event_press ""
meshtastic --set inputbroker_event_press ""
```
</TabItem>
@ -250,7 +250,7 @@ Configuring this setting is not yet available for the selected platform. If this
</TabItem>
</Tabs>
### rotary1_pin_a
### inputbroker_pin_a
GPIO pin for rotary encoder A port.
@ -276,7 +276,7 @@ Replace `GPIO` below with the GPIO number from hardware setup.
:::
```shell title="Specify rotary1 pin a"
meshtastic --set rotary1_pin_a GPIO
meshtastic --set inputbroker_pin_a GPIO
```
</TabItem>
@ -303,7 +303,7 @@ Configuring this setting is not yet available for the selected platform. If this
</TabItem>
</Tabs>
### rotary1_pin_b
### inputbroker_pin_b
GPIO pin for rotary encoder B port.
@ -329,7 +329,7 @@ Replace `GPIO` below with the GPIO number from hardware setup.
:::
```shell title="Specify rotary1 pin b"
meshtastic --set rotary1_pin_b GPIO
meshtastic --set inputbroker_pin_b GPIO
```
</TabItem>
@ -356,7 +356,7 @@ Configuring this setting is not yet available for the selected platform. If this
</TabItem>
</Tabs>
### rotary1_pin_press
### inputbroker_pin_press
GPIO pin for rotary encoder Press port.
@ -382,7 +382,7 @@ Replace `GPIO` below with the GPIO number from hardware setup.
:::
```shell title="Specify rotary1 pin press"
meshtastic --set rotary1_pin_press GPIO
meshtastic --set inputbroker_pin_press GPIO
```
</TabItem>
@ -435,13 +435,13 @@ Replace each `GPIO` (x3) below with the GPIO numbers from hardware setup.
:::
```shell title="Canned Message Module - Required Rotary Encoder Module Settings"
meshtastic --set rotary1_pin_a GPIO
meshtastic --set rotary1_pin_b GPIO
meshtastic --set rotary1_pin_press GPIO
meshtastic --set rotary1_event_cw KEY_UP
meshtastic --set rotary1_event_ccw KEY_DOWN
meshtastic --set rotary1_event_press KEY_SELECT
meshtastic --set rotary1_enabled True
meshtastic --set inputbroker_pin_a GPIO
meshtastic --set inputbroker_pin_b GPIO
meshtastic --set inputbroker_pin_press GPIO
meshtastic --set inputbroker_event_cw KEY_UP
meshtastic --set inputbroker_event_ccw KEY_DOWN
meshtastic --set inputbroker_event_press KEY_SELECT
meshtastic --set inputbroker_enabled True
```
</TabItem>

View file

@ -11,6 +11,7 @@ import PluginModule from '@site/docs/_blocks/_plugin_module.mdx';
## Overview
This module allows you to test the range of your Meshtastic nodes. It requires at least two nodes, a sender and a receiver. The receiving node then saves the messages along with the GPS coordinates at which they were received into a .csv file. This .csv file can then be integrated into [Google Earth](https://earth.google.com), [Google Maps - My Maps](https://mymaps.google.com), or any other program capable of processing .csv files. This can enable you to visualize your mesh.
<PluginModule name="range_test_module" rename="range_test_plugin" />
:::tip
@ -186,7 +187,7 @@ Leaving this module on can slow down your mesh. Currently, the messages are sent
### Accessing your CSV
Connect to your device over WiFi, either using the [software access point](wifi#software-access-point) or [WiFi Client](wifi#wifi-client). Then navigate to `meshtastic.local` (or your IP address) `/static/rangetest.csv` where your file will be available for download.
Connect to your device over WiFi, either using the [software access point](/docs/settings/wifi#software-access-point) or [WiFi Client](/docs/settings/wifi#wifi-client). Then navigate to `meshtastic.local` (or your IP address) `/static/rangetest.csv` where your file will be available for download.
```plaintext title="Example URLs"
http://meshtastic.local/static/rangetest.csv

View file

@ -11,7 +11,7 @@ import PluginModule from '@site/docs/_blocks/_plugin_module.mdx';
:::info
Currently only available for ESP32 based devices with external PSRAM. Requires the device to be set as a router.
**Don't enable Store and Forward Module on multiple [routers](router).**
**Don't enable Store and Forward Module on multiple [routers](/docs/settings/router).**
:::
## Overview
@ -312,7 +312,7 @@ With an aftermarket coaxial antenna or moxon antenna, that will give you roughly
Don't enable the Store and Forward module on multiple routers!
:::
- Configure your device as a [meshtastic router](router).
- Configure your device as a [meshtastic router](/docs/settings/router).
- Name your router node something that makes it easily identifiable, aka "Router".
- Configure the Store and Forward module
```shell title="Required - Enable the module"

View file

@ -12,7 +12,10 @@ import PluginModule from '@site/docs/_blocks/_plugin_module.mdx';
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.
:::
<PluginModule name="telemetry_module_environment" rename="environmental_measurement_plugin"/>
<PluginModule
name="telemetry_module_environment"
rename="environmental_measurement_plugin"
/>
<!--- TODO add link to hardware setup to admonition--->
@ -30,8 +33,8 @@ Once module settings are changed, a **reset** is required for them to take effec
## Settings
| Setting | Acceptable Values | Default |
| :-----------------------------------------: | :-----------------: | :-----: |
| Setting | Acceptable Values | Default |
| :-----------------------------------------------------: | :-----------------: | :-----: |
| telemetry_module_device_update_interval | `integer` (seconds) | `0` |
| telemetry_module_environment_display_fahrenheit | `true`, `false` | `false` |
| telemetry_module_environment_measurement_enabled | `true`, `false` | `false` |
@ -60,6 +63,7 @@ values={[
```shell title="Set module update interval to default"
meshtastic --set telemetry_module_device_update_interval 0
```
```shell title="Set module update interval to 120 seconds"
meshtastic --set telemetry_module_device_update_interval 120
```
@ -88,7 +92,6 @@ Configuring this setting is not yet available for the selected platform. If this
</TabItem>
</Tabs>
### telemetry_module_environment_display_fahrenheit
The sensor is always read in Celsius, but the user can opt to view the temperature display in Fahrenheit using this setting.
@ -106,21 +109,12 @@ values={[
]}>
<TabItem value="cli">
<<<<<<< HEAD:docs/settings/environmental-measurment-module.mdx
```shell title="Display Farenheit"
meshtastic --set telemetry_module_display_farenheit true
```
```shell title="Display Celsius"
meshtastic --set telemetry_module_display_farenheit false
=======
```shell title="Display Farenheit"
meshtastic --set telemetry_module_environment_display_fahrenheit true
```
````
```shell title="Display Celsius"
meshtastic --set telemetry_module_environment_display_fahrenheit false
>>>>>>> master:docs/settings/telemetry-module.md
```
</TabItem>
@ -164,21 +158,12 @@ values={[
]}>
<TabItem value="cli">
<<<<<<< HEAD:docs/settings/environmental-measurment-module.mdx
```shell title="Enable Module"
meshtastic --set telemetry_module_measurement_enabled true
```
```shell title="Disable Module"
meshtastic --set telemetry_module_measurement_enabled false
=======
```shell title="Enable Module"
meshtastic --set telemetry_module_environment_measurement_enabled true
```
````
```shell title="Disable Module"
meshtastic --set telemetry_module_environment_measurement_enabled false
>>>>>>> master:docs/settings/telemetry-module.md
```
</TabItem>
@ -222,14 +207,9 @@ values={[
]}>
<TabItem value="cli">
<<<<<<< HEAD:docs/settings/environmental-measurment-module.mdx
```shell title="Configure telemetry_module_read_error_count_threshold to 3 tries"
meshtastic --set telemetry_module_read_error_count_threshold 3
=======
```shell title="Configure telemetry_module_environment_read_error_count_threshold to 3 tries"
meshtastic --set telemetry_module_environment_read_error_count_threshold 3
>>>>>>> master:docs/settings/telemetry-module.md
```
````
</TabItem>
<TabItem value="android">
@ -272,14 +252,9 @@ values={[
]}>
<TabItem value="cli">
<<<<<<< HEAD:docs/settings/environmental-measurment-module.mdx
```shell title="Configure telemetry_module_recovery_interval to 120 seconds"
meshtastic --set telemetry_module_recovery_interval 120
=======
```shell title="Configure telemetry_module_environment_recovery_interval to 120 seconds"
meshtastic --set telemetry_module_environment_recovery_interval 120
>>>>>>> master:docs/settings/telemetry-module.md
```
````
</TabItem>
<TabItem value="android">
@ -322,21 +297,12 @@ values={[
]}>
<TabItem value="cli">
<<<<<<< HEAD:docs/settings/environmental-measurment-module.mdx
```shell title="Enable on device screen"
meshtastic --set telemetry_module_screen_enabled true
```
```shell title="Disable on device screen"
meshtastic --set telemetry_module_screen_enabled false
=======
```shell title="Enable on device screen"
meshtastic --set telemetry_module_environment_screen_enabled true
```
````
```shell title="Disable on device screen"
meshtastic --set telemetry_module_environment_screen_enabled false
>>>>>>> master:docs/settings/telemetry-module.md
```
</TabItem>
@ -388,14 +354,9 @@ values={[
]}>
<TabItem value="cli">
<<<<<<< HEAD:docs/settings/environmental-measurment-module.mdx
```shell title="Set module sensor pin"
meshtastic --set telemetry_module_sensor_pin PINNUMBER
=======
```shell title="Set module sensor pin"
meshtastic --set telemetry_module_environment_sensor_pin PINNUMBER
>>>>>>> master:docs/settings/telemetry-module.md
```
````
</TabItem>
<TabItem value="android">
@ -461,21 +422,12 @@ values={[
The CLI is able to take the `value` or the `name` of the sensor from the table above.
:::
<<<<<<< HEAD:docs/settings/environmental-measurment-module.mdx
```shell title="Set sensor type to DS18B20"
meshtastic --set telemetry_module_sensor_type 1
```
```shell title="Set sensor type to DS18B20"
meshtastic --set telemetry_module_sensor_type DS18B20
=======
```shell title="Set sensor type to DS18B20"
meshtastic --set telemetry_module_environment_sensor_type 2
```
````
```shell title="Set sensor type to DS18B20"
meshtastic --set telemetry_module_environment_sensor_type DS18B20
>>>>>>> master:docs/settings/telemetry-module.md
```
</TabItem>
@ -515,14 +467,9 @@ values={[
]}>
<TabItem value="cli">
<<<<<<< HEAD:docs/settings/environmental-measurment-module.mdx
```shell title="Set module update interval to 15 seconds"
meshtastic --set telemetry_module_update_interval 15
=======
```shell title="Set module update interval to 120 seconds"
meshtastic --set telemetry_module_environment_update_interval 120
>>>>>>> master:docs/settings/telemetry-module.md
```
````
</TabItem>
<TabItem value="android">

View file

@ -25,7 +25,6 @@ For a description and more information on what exactly all of these mean, please
| mesh_sds_timeout_secs | `integer` (seconds) | `0` |
| min_wake_secs | `integer` (seconds) | `0` |
| on_battery_shutdown_after_secs | `integer` (seconds) | `0` |
| phone_sds_timeout_sec | `integer` (seconds) | `0` |
| phone_timeout_secs | `integer` (seconds) | `0` |
| screen_on_secs | `integer` (seconds) | `0` |
| sds_secs | `integer` (seconds) | `0` |
@ -38,7 +37,6 @@ When you change the following settings to `0` they assume the following defaults
- `ls_secs`: 1 hour
- `mesh_sds_timeout_secs`: 2 hours
- `min_wake_secs`: 10 seconds
- `phone_sds_timeout_sec`: 2 hours
- `phone_timeout_secs`: 15 minutes
- `screen_on_secs`: 1 minute
- `sds_secs`: 1 year
@ -352,47 +350,6 @@ Configuring this setting is not yet available for the selected platform. If this
</TabItem>
</Tabs>
### phone_sds_timeout_sec
Power management state machine option. See the [power page](/docs/software/other/power) for details. 0 for default of two hours, use the MAXUINT or 4294967295 to disable.
#### Enable/Disable phone_sds_timeout_sec
<Tabs
groupId="settings"
defaultValue="cli"
values={[
{label: 'CLI', value: 'cli'},
{label: 'Android', value: 'android'},
{label: 'iOS', value: 'iOS'},
{label: 'Web', value: 'web'},
]}>
<TabItem value="cli">
```shell title="Set phone_sds_timeout_sec to default (2 hours)"
meshtastic --set phone_sds_timeout_sec 0
```
```shell title="Disable phone_sds_timeout_sec"
meshtastic --set phone_sds_timeout_sec 4294967295
```
```shell title="Set phone_sds_timeout_sec to 120 seconds"
meshtastic --set phone_sds_timeout_sec 120
```
</TabItem>
<TabItem value="android">
Configuring this setting is not yet available for the selected platform. If this is incorrect please update the documentation for this page.
</TabItem>
<TabItem value="iOS">
Configuring this setting is not yet available for the selected platform. If this is incorrect please update the documentation for this page.
</TabItem>
<TabItem value="web">
Configuring this setting is not yet available for the selected platform. If this is incorrect please update the documentation for this page.
</TabItem>
</Tabs>
### phone_timeout_secs
Power management state machine option. See the [power page](/docs/software/other/power) for details. 0 for default of 15 minutes.
@ -504,8 +461,6 @@ Configuring this setting is not yet available for the selected platform. If this
</TabItem>
</Tabs>
For instance the default interval of 4 will send the node owner information for every 4 mesh network pings. This information is also transmitted after the node first boots up.
### wait_bluetooth_secs
Wait number of seconds for Bluetooth - Power management state machine option. See the [power page](/docs/software/other/power) for details. 0 for default of 1 minute.

View file

@ -73,7 +73,6 @@ Toggling `is_router` changes your device settings in the following ways.
| `position_broadcast_secs` | 12 hours | 15 minutes |
| `wait_bluetooth_secs` | 1 | 60 |
| `mesh_sds_timeout_secs` | NODE_DELAY_FOREVER | 2 hours |
| `phone_sds_timeout_sec` | NODE_DELAY_FOREVER | 2 hours |
| `ls_secs` | 1 day | 5 minutes |
### Altered Behaviors

View file

@ -1,10 +1,10 @@
---
id: android-installation
title: Android application installation
sidebar_label: Installation
sidebar_label: Android app
---
Our Android application is available to download on Google Play Store.
Our Android application is available to download on Google Play Store. This allows you to connect to your Meshtastic® device from your Android phone.
<p align="center">
<a href="https://play.google.com/store/apps/details?id=com.geeksville.mesh">

View file

@ -1,7 +1,7 @@
---
id: ios-development
title: iOS application development
sidebar_label: App development
sidebar_label: iOS & MacOS Apps
---
The Meshtastic iOS app is currently available in TestFlight as a public beta with a projected App Store release in early 2022.

View file

@ -2,6 +2,7 @@
id: device-firmware
title: Device firmware
sidebar_label: Device firmware
sidebar_position: 1
---
The device firmware runs on the nodes to build the mesh for communication. Each different make and model of device requires a different build of the Meshtastic firmware in order to run properly. Thankfully, due to the design of Meshtastic, it is possible to port the firmware to new devices as they become available. The firmware currently runs on a range of ESP32 based devices, but there is also increasing support for the nRF52 microprocessor with some more recent devices coming to market.
@ -10,6 +11,10 @@ The current firmware has support for a screen to display received messages, alon
The latest firmware can be downloaded from the [Downloads](/downloads) page. If you wish to view the code or contribute to development of the firmware, please visit the device code <a href="https://github.com/meshtastic/Meshtastic-device">GitHub page</a>.
:::info
Please be aware that there are significant changes between version branches 1.2.x and 1.3.x which mean that devices need to be running the same branch of firmware to be able to talk to each other. Python, Android, and other software applications will also need to be running the same branch to be able to talk to the device.
:::
### Buttons
A number of devices have buttons that can be used to interact with the firmware. These buttons have a number of different functions:

View file

@ -1,18 +1,18 @@
---
id: overview
title: Software
sidebar_label: Software
slug: /software
sidebar_position: 4
---
The following applications are available to support your Meshtastic network:
- The [firmware](/docs/software/device/device-firmware) to run on the devices
- Connect to the devices with our [Android app](/docs/software/android/android-installation)
- An [iOS application](/docs/software/apple/ios-development) is in the works
- The [firmware](/docs/software/device) to run on the devices
- Connect to the devices with our [Android app](/docs/software/android)
- An [iOS application](/docs/software/apple) is in the works
- [Meshtastic.js](/docs/software/js/getting-started) provides a JavaScript library to interface with devices
- [Meshtastic-python](/docs/software/python/python-installation) provides access from desktop computers including a command line interface
- A [web interface](/docs/software/web/web-app-software) can be accessed over Wifi on ESP32 devices
- A [web interface](/docs/software/web) can be accessed over Wifi on ESP32 devices
- Pre-installed device modules for:
- [Range testing](/docs/software/modules/range-test-module)
- [External notifications](/docs/software/modules/ext-notif-module)

View file

@ -2,7 +2,9 @@
id: canned-message-module
title: Canned messages
sidebar_label: Canned messages
sidebar_position: 3
---
import PluginModule from '@site/docs/_blocks/_plugin_module.mdx';
## About
@ -97,7 +99,7 @@ The rotary encoder #1 will send input events under name "rotEnc1".
## Configuration of the module
<PluginModule name="canned_message_" rename="canned_message_" />
<PluginModule name="canned_message_plugin" rename="canned_message_module" />
Following configuration can be set for the module.

View file

@ -2,7 +2,9 @@
id: ext-notif-module
title: External notifications
sidebar_label: External notifications
sidebar_position: 2
---
import PluginModule from '@site/docs/_blocks/_plugin_module.mdx';
## About
@ -11,7 +13,7 @@ The ExternalNotification Module will allow you to connect a speaker, LED or othe
## Configuration
<PluginModule name="ext_notification_" rename="ext_notification_"/>
<PluginModule name="ext_notification_plugin" rename="ext_notification_module" />
These are the settings that can be configured.

View file

@ -1,7 +1,7 @@
---
id: modules
title: Modules overview
sidebar_label: Overview
sidebar_label: Built-in modules
---
There are a number of modules that have been integrated into the device firmware. These can be turned on using the Meshtastic python command line program. Please note that these modules require the device to be rebooted once they have been enabled for them to start running.

View file

@ -2,14 +2,16 @@
id: range-test-module
title: Range Test Module
sidebar_label: Range Test
sidebar_position: 1
---
import PluginModule from '@site/docs/_blocks/_plugin_module.mdx';
This module allows you to test the range of your Meshtastic nodes. It uses two nodes, one to send a message every minute, and another to receive the messages. The receiving node then saves the messages along with the GPS coordinates at which they were received into a .csv file. This .csv file can then be integrated into, for example, Google Earth, allowing you to see where you have coverage.
## Configuration
<PluginModule name="range_test_" rename="range_test_" />
<PluginModule name="range_test_module_" rename="range_test_plugin_" />
These are the settings that can be configured.

View file

@ -2,7 +2,9 @@
id: serial-module
title: Serial communication module
sidebar_label: Serial communication
sidebar_position: 4
---
import PluginModule from '@site/docs/_blocks/_plugin_module.mdx';
## About
@ -11,7 +13,7 @@ This is a simple interface to send messages over the mesh network by sending str
Default is to use RX GPIO 16 and TX GPIO 17.
<PluginModule name="serial_" rename="serial_" />
<PluginModule name="serial_plugin" rename="serial_module" />
## Basic Usage:

View file

@ -2,7 +2,9 @@
id: store-forward-module
title: Store and Forward Module
sidebar_label: Store and Forward
sidebar_position: 5
---
import PluginModule from '@site/docs/_blocks/_plugin_module.mdx';
## About
@ -51,7 +53,7 @@ With an aftermarket coaxial antenna or moxon antenna, that will give you roughly
### Router setup
<PluginModule name="store_forward_" rename="store_forward_" />
<PluginModule name="store_forward_module" rename="store_forward_plugin" />
- Configure your device as a [Meshtastic router](/docs/settings/router).
- Configure the Store and Forward Module

View file

@ -2,10 +2,12 @@
id: telemetry-module
title: Telemetry
sidebar_label: Telemetry
sidebar_position: 6
---
import PluginModule from '@site/docs/_blocks/_plugin_module.mdx';
<PluginModule name="telemetry_" rename="environmental_measurment_"/>
<PluginModule name="telemetry_module_environment" rename="environmental_measurement_plugin" />
## About

View file

@ -36,24 +36,25 @@ The payload is a raw protobuf. Looking at the MQTT traffic with a program like `
ShortFast !937bed1c
```
Packets from the following [port numbers](docs/developers/firmware/portnum) are serialized to JSON and then forwarded to the `msh/1/json/CHANNELID/DEVICEID` topic: `TEXT_MESSAGE_APP`, `ENVIRONMENTAL_MEASUREMENT_APP`, `NODEINFO_APP` and `POSITION_APP`.
Packets from the following [port numbers](/docs/developers/Firmware/portnum) are serialized to JSON and then forwarded to the `msh/1/json/CHANNELID/DEVICEID` topic: `TEXT_MESSAGE_APP`, `ENVIRONMENTAL_MEASUREMENT_APP`, `NODEINFO_APP` and `POSITION_APP`.
An example of a received `NODEINFO_APP` message:
```json
{
"id":452664778,
"channel":0,
"from":2130636288,
"payload":{
"hardware":10,
"id":"!7efeee00",
"longname":"base0",
"shortname":"BA0"
},
"sender":"!7efeee00",
"timestamp":1646832724,
"to":-1,
"type":"nodeinfo"
"id": 452664778,
"channel": 0,
"from": 2130636288,
"payload": {
"hardware": 10,
"id": "!7efeee00",
"longname": "base0",
"shortname": "BA0"
},
"sender": "!7efeee00",
"timestamp": 1646832724,
"to": -1,
"type": "nodeinfo"
}
```
@ -73,7 +74,6 @@ If the message received contains valid JSON in the payload, the JSON is deserial
`sender` and `payload` fields are required for a valid envelope. If a valid MQTT message is found, the message is sent over the radio as a message of type `TEXT_MESSAGE_APP` with the serialized `payload` value in the message payload.
### Basic Configuration
Check out [MQTT Settings](/docs/settings/mqtt) for full information. For quick start instructions, read on.

View file

@ -55,7 +55,7 @@ From lower to higher power consumption.
- At cold boot: The initial state (after setup() has run) is DARK
- While in DARK: if we receive EVENT_BOOT, transition to ON (and show the bootscreen). This event will be sent if we detect we woke due to reset (as opposed to deep sleep)
- While in LS: Once every position_broadcast_secs (default 15 mins) - the unit will wake into DARK mode and broadcast a "networkPing" (our position) and stay alive for wait_bluetooth_secs (default 60 seconds). This allows other nodes to have a record of our last known position if we go away and allows a paired phone to hear from us and download messages.
- While in LS: Every one hour, when we wake to send our position we \_also* broadcast our owner. This lets new nodes on the network find out about us or correct duplicate node number assignments.
- While in LS: Every one hour, when we wake to send our position we \_also\* broadcast our owner. This lets new nodes on the network find out about us or correct duplicate node number assignments.
- While in LS/NB/DARK: If the user presses a button (EVENT_PRESS) we go to full ON mode for screen_on_secs (default 30 seconds). Multiple presses keeps resetting this timeout
- While in LS/NB/DARK: If we receive new text messages (EVENT_RECEIVED_TEXT_MSG), we go to full ON mode for screen_on_secs (same as if user pressed a button)
- While in LS: while we receive packets on the radio (EVENT_RECEIVED_PACKET) we will wake and handle them and stay awake in NB mode for min_wake_secs (default 10 seconds)
@ -74,8 +74,7 @@ From lower to higher power consumption.
- While in ON: If it has been more than screen_on_secs since a press, lower to DARK
- While in DARK: If time since last contact by our phone exceeds phone_timeout_secs (15 minutes), we transition down into NB mode
- While in DARK or NB: If nothing above is forcing us to stay in a higher mode (wait_bluetooth_secs, min_wake_secs) we will lower down to LS state
- While in LS: If either phone_sds_timeout_secs (default 2 hr) or mesh_sds_timeout_secs (default 2 hr) are exceeded we will lower into SDS mode for sds_secs (default 1 yr) (or a button press). (Note: phone_sds_timeout_secs is currently disabled for now, because most users
are using without a phone)
- While in LS: If mesh_sds_timeout_secs (default 2 hr) are exceeded we will lower into SDS mode for sds_secs (default 1 yr) (or a button press).
- Any time we enter LS mode: We stay in that until an interrupt, button press or other state transition. Every ls_secs (default 1 hr) and let the Arduino loop() run one iteration (FIXME, not sure if we need this at all), and then immediately reenter lightsleep mode on the CPU.
TODO: Eventually these scheduled intervals should be synchronized to the GPS clock, so that we can consider leaving the LoRa receiver off to save even more power.

View file

@ -170,7 +170,7 @@ values={[
<TabItem value="termux">
:::note
Wifi connection is currently under development and may not be working properly just yet. If you would like to provide feedback or test this feature, please visit our [forum](https://meshtastic.discourse.group) or join our [Discord server](https://discord.gg/RjQKWHmzPZ) for more information.
Wifi connection is currently under development and may not be working properly just yet. If you would like to provide feedback or test this feature, please visit our [forum](https://meshtastic.discourse.group) or join our [Discord server](https://discord.gg/ktMAKGBnBs) for more information.
:::
- Install [Termux](https://f-droid.org/en/packages/com.termux) from the F-Droid app store (Google play does not currently support the latest builds)

View file

@ -1,7 +1,7 @@
---
id: web-app-software
title: Web interface overview
sidebar_label: Overview
sidebar_label: Web Interface
---
<!--- FIXME add self hosting details link --->

View file

@ -56,6 +56,7 @@ const config = {
colorMode: {
respectPrefersColorScheme: true,
},
autoCollapseSidebarCategories: true,
navbar: {
title: 'Meshtastic',
hideOnScroll: true,
@ -66,90 +67,50 @@ const config = {
},
items: [
/*
{
label: "Start Here",
to: "docs/academy",
activeBasePath: "docs/academy",
},
*/
{
label: 'About Meshtastic',
to: 'docs/about',
activeBasePath: 'docs/about',
},
/*
{
label: "Showcase",
to: "showcase",
activeBasePath: "showcase",
},
*/
{
label: 'Documentation',
label: 'Docs',
items: [
{
label: 'Getting Started',
to: 'docs/getting-started',
},
// FIXME create configuration & settings landing page and adjust path below
{
label: 'Configuration & Settings',
label: 'Configuration',
to: 'docs/settings',
},
{
label: 'Hardware Details',
label: 'Hardware',
to: 'docs/hardware',
},
/*
{
label: "Mesh Radio Details",
to: "docs/mesh"
},
*/
{
label: 'Meshtastic Software',
label: 'Software',
to: 'docs/software',
},
],
},
{
label: 'Contribute',
label: 'Developers',
to: 'docs/developers',
},
{
label: 'Other',
items: [
{
label: 'Developers',
to: 'docs/developers',
label: 'Downloads',
to: 'downloads',
activeBasePath: 'downloads',
},
{
label: 'Maintaining Documentation',
to: 'docs/developers/maintaining-documentation/overview',
},
{
label: 'Legal',
to: 'docs/legal',
label: 'Showcase',
to: 'showcase',
activeBasePath: 'showcase',
},
],
},
{
label: 'Downloads',
to: 'downloads',
activeBasePath: 'downloads',
},
{
href: 'https://meshtastic.discourse.group',
label: 'Forum',
position: 'left',
},
{
href: 'https://github.com/meshtastic/meshtastic',
position: 'right',
className: 'header-github-link',
'aria-label': 'GitHub repository',
},
],
},
footer: {
copyright: `<a href="https://vercel.com/?utm_source=meshtastic&utm_campaign=oss" style="color: var(--ifm-footer-color)">Powered by ▲ Vercel</a> | Meshtastic® is a registered trademark of Geeksville Industries LLC`,
copyright: `<a href="https://vercel.com/?utm_source=meshtastic&utm_campaign=oss">Powered by ▲ Vercel</a> | Meshtastic® is a registered trademark of Geeksville Industries LLC. | <a href="/docs/legal">Legal Information</a>.`,
},
algolia: {
appId: 'IG2GQB8L3V',
@ -180,6 +141,8 @@ const config = {
docs: {
sidebarPath: require.resolve('./sidebars.js'),
editUrl: 'https://github.com/meshtastic/meshtastic/edit/master/',
breadcrumbs: false,
showLastUpdateAuthor: true,
},
theme: {
customCss: require.resolve('./src/css/custom.css'),

View file

@ -15,11 +15,13 @@
"dependencies": {
"@algolia/client-search": "^4.13.0",
"@docusaurus/core": "^2.0.0-beta.18",
"@docusaurus/plugin-content-docs": "^2.0.0-beta.18",
"@docusaurus/preset-classic": "^2.0.0-beta.18",
"@headlessui/react": "^1.5.0",
"@mdx-js/react": "^1.6.22",
"autoprefixer": "^10.4.4",
"dotenv": "^16.0.0",
"framer-motion": "^6.2.8",
"postcss": "^8.4.12",
"react": "^17.0.2",
"react-dom": "^17.0.2",
@ -29,6 +31,7 @@
"swr": "^1.2.2",
"tailwindcss": "^3.0.23",
"url-search-params-polyfill": "^8.1.1",
"use-breakpoint": "^3.0.2",
"victory": "^36.3.1"
},
"devDependencies": {

View file

@ -4,6 +4,7 @@ specifiers:
'@algolia/client-search': ^4.13.0
'@docusaurus/core': ^2.0.0-beta.18
'@docusaurus/module-type-aliases': ^2.0.0-beta.18
'@docusaurus/plugin-content-docs': ^2.0.0-beta.18
'@docusaurus/preset-classic': ^2.0.0-beta.18
'@headlessui/react': ^1.5.0
'@mdx-js/react': ^1.6.22
@ -16,6 +17,7 @@ specifiers:
'@types/w3c-web-serial': ^1.0.2
autoprefixer: ^10.4.4
dotenv: ^16.0.0
framer-motion: ^6.2.8
postcss: ^8.4.12
prettier: ^2.6.1
react: ^17.0.2
@ -27,16 +29,19 @@ specifiers:
tailwindcss: ^3.0.23
typescript: ^4.6.3
url-search-params-polyfill: ^8.1.1
use-breakpoint: ^3.0.2
victory: ^36.3.1
dependencies:
'@algolia/client-search': 4.13.0
'@docusaurus/core': 2.0.0-beta.18_28e7016540b0a32b5f8d7be755522ab7
'@docusaurus/plugin-content-docs': 2.0.0-beta.18_28e7016540b0a32b5f8d7be755522ab7
'@docusaurus/preset-classic': 2.0.0-beta.18_cd2ecee38e568e94b4890eebc445da58
'@headlessui/react': 1.5.0_react-dom@17.0.2+react@17.0.2
'@mdx-js/react': 1.6.22_react@17.0.2
autoprefixer: 10.4.4_postcss@8.4.12
dotenv: 16.0.0
framer-motion: 6.2.8_react-dom@17.0.2+react@17.0.2
postcss: 8.4.12
react: 17.0.2
react-dom: 17.0.2_react@17.0.2
@ -46,6 +51,7 @@ dependencies:
swr: 1.2.2_react@17.0.2
tailwindcss: 3.0.23_autoprefixer@10.4.4
url-search-params-polyfill: 8.1.1
use-breakpoint: 3.0.2_react-dom@17.0.2+react@17.0.2
victory: 36.3.1_react@17.0.2
devDependencies:
@ -638,7 +644,7 @@ packages:
'@babel/core': ^7.0.0-0
dependencies:
'@babel/core': 7.12.9
'@babel/helper-plugin-utils': 7.10.4
'@babel/helper-plugin-utils': 7.16.7
'@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.12.9
'@babel/plugin-transform-parameters': 7.16.7_@babel+core@7.12.9
dev: false
@ -2182,6 +2188,19 @@ packages:
- webpack-cli
dev: false
/@emotion/is-prop-valid/0.8.8:
resolution: {integrity: sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==}
requiresBuild: true
dependencies:
'@emotion/memoize': 0.7.4
dev: false
optional: true
/@emotion/memoize/0.7.4:
resolution: {integrity: sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==}
dev: false
optional: true
/@eslint/eslintrc/1.2.1:
resolution: {integrity: sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@ -5182,6 +5201,29 @@ packages:
resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==}
dev: false
/framer-motion/6.2.8_react-dom@17.0.2+react@17.0.2:
resolution: {integrity: sha512-4PtBWFJ6NqR350zYVt9AsFDtISTqsdqna79FvSYPfYDXuuqFmiKtZdkTnYPslnsOMedTW0pEvaQ7eqjD+sA+HA==}
peerDependencies:
react: '>=16.8 || ^17.0.0 || ^18.0.0'
react-dom: '>=16.8 || ^17.0.0 || ^18.0.0'
dependencies:
framesync: 6.0.1
hey-listen: 1.0.8
popmotion: 11.0.3
react: 17.0.2
react-dom: 17.0.2_react@17.0.2
style-value-types: 5.0.0
tslib: 2.3.1
optionalDependencies:
'@emotion/is-prop-valid': 0.8.8
dev: false
/framesync/6.0.1:
resolution: {integrity: sha512-fUY88kXvGiIItgNC7wcTOl0SNRCVXMKSWW2Yzfmn7EKNc+MpCzcz9DhdHcdjbrtN3c6R4H5dTY2jiCpPdysEjA==}
dependencies:
tslib: 2.3.1
dev: false
/fresh/0.5.2:
resolution: {integrity: sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=}
engines: {node: '>= 0.6'}
@ -5519,6 +5561,10 @@ packages:
hasBin: true
dev: false
/hey-listen/1.0.8:
resolution: {integrity: sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==}
dev: false
/history/4.10.1:
resolution: {integrity: sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==}
dependencies:
@ -6976,6 +7022,15 @@ packages:
find-up: 3.0.0
dev: false
/popmotion/11.0.3:
resolution: {integrity: sha512-Y55FLdj3UxkR7Vl3s7Qr4e9m0onSnP8W7d/xQLsoJM40vs6UKHFdygs6SWryasTZYqugMjm3BepCF4CWXDiHgA==}
dependencies:
framesync: 6.0.1
hey-listen: 1.0.8
style-value-types: 5.0.0
tslib: 2.3.1
dev: false
/portfinder/1.0.28:
resolution: {integrity: sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==}
engines: {node: '>= 0.12.0'}
@ -8567,6 +8622,13 @@ packages:
inline-style-parser: 0.1.1
dev: false
/style-value-types/5.0.0:
resolution: {integrity: sha512-08yq36Ikn4kx4YU6RD7jWEv27v4V+PUsOGa4n/as8Et3CuODMJQ00ENeAVXAeydX4Z2j1XHZF1K2sX4mGl18fA==}
dependencies:
hey-listen: 1.0.8
tslib: 2.3.1
dev: false
/stylehacks/5.1.0_postcss@8.4.12:
resolution: {integrity: sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q==}
engines: {node: ^10 || ^12 || >=14.0}
@ -9005,6 +9067,17 @@ packages:
resolution: {integrity: sha512-KmkCs6SjE6t4ihrfW9JelAPQIIIFbJweaaSLTh/4AO+c58JlDcb+GbdPt8yr5lRcFg4rPswRFRRhBGpWwh0K/Q==}
dev: false
/use-breakpoint/3.0.2_react-dom@17.0.2+react@17.0.2:
resolution: {integrity: sha512-O7qfp6QOOQI3CqLnJg6e5TgV2lSuLv3jQT48RAtScYTPbYjuGogPDQUS+Bz/MC0ZCYdZge262rKBi+jgZgCSHw==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
peerDependencies:
react: '>=16.8'
react-dom: '>=16.8'
dependencies:
react: 17.0.2
react-dom: 17.0.2_react@17.0.2
dev: false
/use-composed-ref/1.2.1_react@17.0.2:
resolution: {integrity: sha512-6+X1FLlIcjvFMAeAD/hcxDT8tmyrWnbSPMU0EnxQuDLIxokuFzWliXBiYZuGIx+mrAMLBw0WFfCkaPw8ebzAhw==}
peerDependencies:

@ -1 +1 @@
Subproject commit c6abcf8d6b9c9dec630381c50198bed92258d4e8
Subproject commit 521620ba14862d541f85e1eee7445eccb6a6b92a

View file

@ -1,312 +1,29 @@
module.exports = {
About: {
"About Meshtastic": [
"about/overview",
{
Concepts: [
"about/concepts/overview",
"about/concepts/channels",
"about/concepts/clients",
"about/concepts/external-devices",
"about/concepts/internet",
"about/concepts/mesh",
],
},
"about/expectations",
{
FAQs: [
"faq/faq",
"faq/antenna",
"faq/bluetooth",
"faq/channel",
{
Clients: [
"faq/client-android",
"faq/client-python-cli",
"faq/client-ios",
"faq/client-web",
],
},
"faq/device",
{
"Flashing Firmware": ["faq/m-flasher"],
},
"faq/mesh",
"faq/mqtt",
"faq/modules",
"faq/wifi",
],
},
],
},
Software: {
Software: [
"software/overview",
{
"Meshtastic device": [
"software/device/device-firmware",
"software/device/device-channels",
"software/device/device-remote-admin",
"software/device/remote-hardware-service",
"software/device/device-power",
"software/device/critical-error-codes",
"software/device/ham",
],
},
{
"Meshtastic Android": [
"software/android/android-installation",
"software/android/android-usage",
],
},
{
"Meshtastic Apple": [
"software/apple/ios-development",
"software/apple/ios",
"software/apple/ipados",
"software/apple/macos",
],
},
{
"Meshtastic.js": [
"software/js/getting-started",
"software/js/connecting",
"software/js/events",
"software/js/http-api",
{
type: "link",
label: "API Docs",
href: "https://js.meshtastic.org",
},
],
},
{
"Meshtastic-python": [
"software/python/python-installation",
"software/python/python-standalone",
"software/python/python-cli",
"software/python/python-uses",
"software/python/python-stream",
{
type: "link",
label: "API Docs",
href: "https://python.meshtastic.org/",
},
],
},
{
Modules: [
"software/modules/modules",
"software/modules/range-test-module",
"software/modules/ext-notif-module",
"software/modules/canned-message-module",
"software/modules/serial-module",
"software/modules/store-forward-module",
"software/modules/telemetry-module",
],
},
{
"Web interface": [
"software/web/web-app-software",
"software/web/web-partitions-software",
"software/web/web-development-software",
],
},
{
"Community projects": [
"software/community/community-overview",
"software/community/community-atak",
"software/community/community-pygui",
"software/community/community-go",
],
},
{
Other: [
"software/other/sw-design",
"software/other/remote-hardware-service",
"software/other/rak815",
"software/other/power",
"software/other/pinetab",
"software/other/nrf52-TODO",
"software/other/mqtt",
"software/other/install-OSX",
"software/other/esp32-arduino-build",
"software/other/ant",
"software/other/docker",
],
},
],
"Additional Documentation": [
{ type: "ref", id: "getting-started/overview" },
{ type: "ref", id: "settings/overview" },
{ type: "ref", id: "hardware/overview" },
{ type: "ref", id: "developers/overview" },
{ type: "ref", id: "developers/maintaining-documentation/overview" },
{ type: "ref", id: "legal/overview" },
],
},
Configuration: {
"Getting Started": [
"getting-started/overview",
{
"Flashing firmware": [
"getting-started/flashing-firmware",
"getting-started/meshtastic-flasher",
{
"Manual Method": [
"getting-started/flashing-esp32",
"getting-started/flashing-nrf52",
],
},
],
},
{
"Connect to Device": ["getting-started/clients"],
},
"getting-started/first-steps",
],
// @ts-check
"Device Settings": [
"settings/overview",
"settings/channel",
"settings/gps",
"settings/ham",
"settings/mqtt",
"settings/power",
"settings/router",
"settings/wifi",
{
Modules: [
"settings/canned-message-module",
"settings/input-broker-module",
"settings/external-notification-module",
"settings/range-test-module",
"settings/serial-module",
"settings/store-and-forward-module",
"settings/telemetry-module",
],
Advanced: ["settings/channel-advanced", "settings/misc"],
/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */
module.exports = {
Sidebar: [
{
type: 'autogenerated',
dirName: '.',
},
],
developers: [
{
type: 'category',
label: 'Developers',
link: {
type: 'generated-index',
title: 'Developer Documentation',
description: 'Meshtastic developer resources',
slug: '/developers',
},
],
"Additional Documentation": [
{ type: "ref", id: "hardware/overview" },
{ type: "ref", id: "software/overview" },
{ type: "ref", id: "developers/overview" },
{ type: "ref", id: "developers/maintaining-documentation/overview" },
{ type: "ref", id: "legal/overview" },
],
},
Hardware: {
Hardware: [
"hardware/overview",
{
type: "link",
label: "Hardware List",
href: "/hardware",
},
{
"Supported Hardware": [
"hardware/supported/tbeam",
"hardware/supported/lora",
"hardware/supported/heltec",
"hardware/supported/techo",
"hardware/supported/wisBlock",
"hardware/supported/linux",
],
},
"hardware/buttons",
"hardware/battery",
"hardware/gpsmodule",
{
Antennas: [
"hardware/antenna/antenna",
"hardware/antenna/aerials",
"hardware/antenna/non-aerial",
"hardware/antenna/antenna-testing",
"hardware/antenna/resources",
],
},
],
"Additional Documentation": [
{ type: "ref", id: "getting-started/overview" },
{ type: "ref", id: "settings/overview" },
{ type: "ref", id: "software/overview" },
{ type: "ref", id: "developers/overview" },
{ type: "ref", id: "developers/maintaining-documentation/overview" },
{ type: "ref", id: "legal/overview" },
],
},
Contribute: {
Developers: [
"developers/overview",
{
Protobufs: ["developers/protobufs/api"],
},
"developers/api",
"developers/publish",
{
Firmware: [
"developers/firmware/build",
"developers/firmware/stacktrace-decode",
"developers/firmware/device-api",
"developers/firmware/radio-settings",
"developers/firmware/mesh-alg",
"developers/firmware/encryption",
"developers/firmware/portnum",
"developers/firmware/module-api",
"developers/firmware/http-api",
"developers/firmware/documents",
],
},
{
"Android App": [
"developers/android/build-app",
"developers/android/mapbox",
],
"Maintaining Documentation": [
"developers/maintaining-documentation/overview",
{
Dependencies: [
"developers/maintaining-documentation/docusaurus",
"developers/maintaining-documentation/github",
"developers/maintaining-documentation/vercel",
],
},
{
Examples: [
"developers/maintaining-documentation/serve-docs-locally",
],
},
{
"Style Guides": [
"developers/maintaining-documentation/style-guides/style-guide-settings",
],
},
],
},
],
"Additional Documentation": [
{ type: "ref", id: "getting-started/overview" },
{ type: "ref", id: "settings/overview" },
{ type: "ref", id: "hardware/overview" },
{ type: "ref", id: "software/overview" },
{ type: "ref", id: "legal/overview" },
{ type: "ref", id: "developers/overview" },
],
},
Legal: {
Legal: [
"legal/overview",
"legal/licensing",
"legal/trademark",
"legal/privacy",
],
"Additional Documentation": [
{ type: "ref", id: "getting-started/overview" },
{ type: "ref", id: "settings/overview" },
{ type: "ref", id: "hardware/overview" },
{ type: "ref", id: "software/overview" },
{ type: "ref", id: "developers/overview" },
],
},
items: [
{
type: 'autogenerated',
dirName: 'developers',
},
],
},
],
};

16
src/components/Button.tsx Normal file
View file

@ -0,0 +1,16 @@
import React from 'react';
import { HTMLMotionProps, motion } from 'framer-motion';
export const Button = ({ children, ...props }: HTMLMotionProps<'div'>) => {
return (
<motion.div
{...props}
whileHover={{ scale: 1.1, backgroundColor: 'var(--tertiary)' }}
whileTap={{ scale: 1.0 }}
className="m-auto flex cursor-pointer rounded-full bg-secondary p-3 shadow-md"
>
<div className="m-auto">{children}</div>
</motion.div>
);
};

View file

@ -0,0 +1,13 @@
import React from 'react';
export interface ColorModeProps {
children: React.ReactNode;
}
export const Dark = ({ children }: ColorModeProps): JSX.Element => {
return <div className="hideLight">{children}</div>;
};
export const Light = ({ children }: ColorModeProps): JSX.Element => {
return <div className="hideDark">{children}</div>;
};

View file

@ -98,7 +98,7 @@
// </tr>
// <tr>
// <td style={{align: "center"}}>
// Module - Telemetry (aka Environmental Measurment)
// Module - Telemetry (aka Environmental Measurement)
// </td>
// <td style={{align: "center"}}>
// VALUE

View file

@ -1,6 +1,8 @@
import React, { Fragment } from 'react';
import React from 'react';
import { Dialog, Transition } from '@headlessui/react';
import { AnimatePresence, motion } from 'framer-motion';
import { Dialog } from '@headlessui/react';
export interface ModalProps {
open: boolean;
@ -10,45 +12,38 @@ export interface ModalProps {
export const Modal = ({ open, onClose, children }: ModalProps): JSX.Element => {
return (
<Transition appear show={open} as={Fragment}>
<AnimatePresence initial={false} exitBeforeEnter={true}>
<Dialog
as="div"
className="fixed inset-0 z-10 overflow-y-auto"
open={open}
onClose={onClose}
>
<div className="min-h-screen px-4 text-center">
<Transition.Child
as={Fragment}
enter="ease-out duration-100"
enterFrom="opacity-0"
enterTo="opacity-100"
leave="ease-in duration-100"
leaveFrom="opacity-100"
leaveTo="opacity-0"
<div className="min-h-screen px-0.5 text-center md:px-4">
<motion.div
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
exit={{ opacity: 0 }}
>
<Dialog.Overlay className="fixed inset-0 backdrop-blur-md" />
</Transition.Child>
</motion.div>
{/* This element is to trick the browser into centering the modal contents. */}
<span
className="inline-block h-screen align-middle"
aria-hidden="true"
>
&#8203;
</span>
<Transition.Child
as={Fragment}
enter="ease-out duration-100"
enterFrom="opacity-0 scale-95"
enterTo="opacity-100 scale-100"
leave="ease-in duration-200"
leaveFrom="opacity-100 scale-100"
leaveTo="opacity-0 scale-95"
>
{children}
</Transition.Child>
<div className="inline-block w-full transform text-left align-middle transition-all 2xl:max-w-7xl">
<div className="group relative">
<div className="animate-tilt absolute -inset-0.5 rotate-2 rounded-lg bg-accent shadow-md transition duration-1000 group-hover:opacity-100 group-hover:duration-200"></div>
<div className="relative flex flex-col overflow-hidden rounded-2xl bg-base shadow-md md:aspect-[2/1] md:flex-row md:bg-primary">
{children}
</div>
</div>
</div>
</div>
</Dialog>
</Transition>
</AnimatePresence>
);
};

View file

@ -11,8 +11,8 @@ export const Badge = ({ name, color, icon }: BadgeProps): JSX.Element => {
<div
className={`flex h-min cursor-pointer gap-1 rounded-md px-1 text-white shadow-md hover:opacity-80 ${color}`}
>
<div className="m-auto">{icon}</div>
<span>{name}</span>
<div className="my-1">{icon}</div>
<span className="hidden truncate md:flex">{name}</span>
</div>
);
};

View file

@ -1,67 +1,58 @@
import React, { useState } from 'react';
import React from 'react';
import { IDevice, Stability } from '@site/src/data/device';
import { HardwareModal } from './HardwareModal';
export interface HardwareCardProps {
device: IDevice;
setDevice: () => void;
}
export const HardwareCard = ({ device }: HardwareCardProps): JSX.Element => {
const [open, setOpen] = useState(false);
export const HardwareCard = ({
device,
setDevice,
}: HardwareCardProps): JSX.Element => {
return (
<>
<li
className="group relative"
onClick={() => {
setOpen(true);
}}
>
<div className="overflow-hidden rounded-lg">
<div
className={`flex aspect-[4/3] overflow-hidden ${device.misc.Gradient}`}
>
<img
src={device.misc.ImagePath}
alt=""
className="pointer-events-none m-auto max-h-full max-w-full object-cover p-2 group-hover:opacity-75"
<li
className="group relative"
onClick={() => {
setDevice();
}}
>
<div className="overflow-hidden rounded-lg">
<div
className={`flex aspect-[4/3] overflow-hidden ${device.misc.Gradient}`}
>
<img
src={device.images.Front}
alt=""
className="pointer-events-none m-auto max-h-full max-w-full object-cover p-2 group-hover:opacity-75"
/>
</div>
<button type="button" className="absolute inset-0 focus:outline-none">
<span className="sr-only">View details for {device.name}</span>
</button>
</div>
<div className="flex">
<div>
<p className="pointer-events-none mt-2 block truncate text-sm font-medium text-primaryInv">
{device.name}
</p>
<p className="pointer-events-none flex gap-1 text-sm font-medium text-mute">
<div
className={`my-auto h-3 w-3 rounded-full ${
device.misc.Stability === Stability.Broken
? 'bg-red-500'
: device.misc.Stability === Stability.Unstable
? 'bg-orange-500'
: device.misc.Stability === Stability.Semi
? 'bg-cyan-500'
: 'bg-green-500'
}`}
/>
</div>
<button type="button" className="absolute inset-0 focus:outline-none">
<span className="sr-only">View details for {device.name}</span>
</button>
<div className="my-auto">{Stability[device.misc.Stability]}</div>
</p>
</div>
<div className="flex">
<div>
<p className="pointer-events-none mt-2 block truncate text-sm font-medium text-primaryInv">
{device.name}
</p>
<p className="pointer-events-none flex gap-1 text-sm font-medium text-mute">
<div
className={`my-auto h-3 w-3 rounded-full ${
device.misc.Stability === Stability.Broken
? 'bg-red-500'
: device.misc.Stability === Stability.Unstable
? 'bg-orange-500'
: device.misc.Stability === Stability.Semi
? 'bg-cyan-500'
: 'bg-green-500'
}`}
/>
<div className="my-auto">{Stability[device.misc.Stability]}</div>
</p>
</div>
</div>
</li>
<HardwareModal
open={open}
close={() => {
setOpen(false);
}}
device={device}
/>
</>
</div>
</li>
);
};

View file

@ -1,10 +1,14 @@
import React, { useState } from 'react';
import { AnimatePresence, motion } from 'framer-motion';
import { FiBluetooth, FiChevronRight, FiWifi, FiX } from 'react-icons/fi';
import { useBreakpoint } from 'use-breakpoint';
import { Tab, Transition } from '@headlessui/react';
import { Tab } from '@headlessui/react';
import type { IDevice } from '@site/src/data/device';
import { Button } from '../../components/Button';
import { BREAKPOINTS } from '../../utils/breakpoints';
import { Modal } from '../Modal';
import { Badge } from './Badge';
import { CardTab } from './CardTab';
@ -24,102 +28,144 @@ export const HardwareModal = ({
open,
close,
}: HardwareModal): JSX.Element => {
const colors = ['#428517', '#77D200', '#D6D305', '#EC8E19', '#C92B05'];
const [hideDetails, setHideDetails] = useState(false);
const { breakpoint } = useBreakpoint(BREAKPOINTS, 'md');
return (
<Modal open={open} onClose={close}>
<div className="inline-block w-full max-w-md transform overflow-hidden rounded-2xl bg-base text-left align-middle transition-all md:max-w-2xl md:bg-primary lg:max-w-4xl xl:max-w-6xl">
<div className="flex aspect-[3/2] flex-col md:aspect-[2/1] md:flex-row">
<div
className={`relative flex h-full rounded-t-2xl md:rounded-l-2xl md:rounded-tr-none ${
device.misc.Gradient
} ${hideDetails ? 'w-full' : ''}`}
<div className="absolute right-0 z-20 m-2 md:flex">
<Button onClick={close}>
<FiX />
</Button>
</div>
<div className="absolute inset-0">
<motion.div
layout
animate={
breakpoint === 'sm'
? hideDetails
? 'hiddenSm'
: 'visibleSm'
: hideDetails
? 'hidden'
: 'visible'
}
variants={{
hidden: { width: '100%', height: '100%' },
hiddenSm: { height: '100%', width: '100%' },
visible: { width: '20%', height: '100%' },
visibleSm: { height: '33%', width: '100%' },
}}
transition={{
type: 'just',
}}
className="flex flex-col md:h-full md:flex-row"
>
<motion.div
layout
className={`relative z-10 flex h-full w-full rounded-t-2xl md:rounded-l-2xl md:rounded-tr-none ${device.misc.Gradient}`}
>
<img
src={device.misc.ImagePath}
<motion.img
layout
src={device.images.Front}
alt=""
className="pointer-events-none m-auto object-cover p-2 group-hover:opacity-75"
className="pointer-events-none m-auto max-h-full max-w-full object-cover p-2"
/>
<div className="absolute -bottom-4 flex w-full md:bottom-auto md:-right-4 md:h-full md:w-auto ">
<div
<div className="absolute -bottom-5 z-20 flex w-full md:bottom-auto md:-right-5 md:h-full md:w-auto">
<Button
animate={
breakpoint === 'sm'
? hideDetails
? 'hiddenSm'
: 'visibleSm'
: hideDetails
? 'hidden'
: 'visible'
}
variants={{
hidden: { rotate: 180 },
hiddenSm: { rotate: -90 },
visible: { rotate: 0 },
visibleSm: { rotate: 90 },
}}
onClick={() => {
setHideDetails(!hideDetails);
}}
className="m-auto flex cursor-pointer rounded-full bg-secondary p-2 shadow-md hover:bg-tertiary"
>
<FiChevronRight
className={`m-auto ${
hideDetails
? 'rotate-90 md:rotate-180'
: '-rotate-90 md:rotate-0'
}`}
/>
</div>
<FiChevronRight />
</Button>
</div>
{!hideDetails && (
<div className="absolute -bottom-3 right-0 m-auto mr-2 ml-auto flex gap-2 md:bottom-2 md:mr-14 md:mt-2">
{device.features.BLE && (
<Badge
name="Bluetooth"
color="bg-blue-500"
icon={<FiBluetooth />}
/>
)}
{device.features.WiFi && (
<Badge name="WiFi" color="bg-orange-500" icon={<FiWifi />} />
)}
</div>
)}
</div>
<div
className="absolute right-0 mr-2 flex cursor-pointer rounded-b-full bg-secondary p-3 shadow-md hover:bg-tertiary md:mt-2 md:rounded-full"
onClick={close}
>
<FiX className="m-auto" />
</div>
<div
className={`transition-[all] duration-100 ease-linear ${
hideDetails ? 'h-7 bg-base md:h-auto md:w-7' : 'w-full'
}`}
>
<Transition
appear
as={'div'}
className="flex h-full flex-col"
show={!hideDetails}
enter="ease-out duration-100 delay-100"
enterFrom="opacity-0"
enterTo="opacity-100"
leave="ease-in duration-100 delay-100"
leaveFrom="opacity-100"
leaveTo="opacity-0"
>
<>
<div className="flex shadow-md md:pb-2">
<VariantSelectButton options={device.variants} />
</div>
<div className="flex h-full bg-base p-2 md:p-4">
<Tab.Group
as="div"
className="flex-grow rounded-2xl bg-primary p-2"
<AnimatePresence>
{!hideDetails && (
<>
<motion.div
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
exit={{ opacity: 0 }}
className={`absolute -bottom-5 z-20 flex md:mt-0 md:hidden md:pb-2 ${
hideDetails ? 'opacity-0' : 'opacity-100'
}`}
>
<Tab.List className="flex gap-2">
<CardTab title="Info" />
<CardTab title="Power" />
<CardTab title="Pinout" />
</Tab.List>
<Tab.Panels as="div" className="">
<InfoTab device={device} />
<PowerTab device={device} />
<PinoutTab device={device} />
</Tab.Panels>
</Tab.Group>
</div>
</>
</Transition>
</div>
<VariantSelectButton options={device.variants} />
</motion.div>
<motion.div
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
exit={{ opacity: 0 }}
className="absolute -bottom-3 right-0 m-auto mr-2 ml-auto flex md:inset-x-1 md:bottom-4 md:mt-2"
>
<div className="m-auto flex gap-2">
{device.features.BLE && (
<Badge
name="Bluetooth"
color="bg-blue-500"
icon={<FiBluetooth />}
/>
)}
{device.features.WiFi && (
<Badge
name="WiFi"
color="bg-orange-500"
icon={<FiWifi />}
/>
)}
</div>
</motion.div>
</>
)}
</AnimatePresence>
</motion.div>
<div
className={`h-7 bg-base opacity-0 md:h-auto md:w-7 ${
hideDetails ? 'flex' : 'hidden'
}`}
/>
</motion.div>
</div>
<div className="z-[1] mt-[25%] flex h-full flex-col md:ml-[20%] md:mt-0 md:w-4/5">
<div className="z-0 hidden pb-2 md:flex">
<VariantSelectButton options={device.variants} />
</div>
<div
className={`mt-1 flex flex-grow rounded-2xl bg-base p-2 shadow-inner transition-opacity duration-100 ease-linear md:mt-0 md:rounded-l-none md:rounded-r-2xl md:p-4 ${
hideDetails ? 'opacity-0' : 'opacity-100'
}`}
>
<Tab.Group
as="div"
className="flex flex-grow flex-col rounded-2xl bg-primary p-2"
>
<Tab.List className="flex gap-2">
<CardTab title="Info" />
<CardTab title="Power" />
<CardTab title="Pinout" />
</Tab.List>
<Tab.Panels as="div" className="flex-grow overflow-y-auto">
<InfoTab device={device} />
<PowerTab device={device} />
<PinoutTab device={device} />
</Tab.Panels>
</Tab.Group>
</div>
</div>
</Modal>

View file

@ -9,5 +9,40 @@ export interface InfoTabProps {
}
export const InfoTab = ({ device }: InfoTabProps): JSX.Element => {
return <Tab.Panel className="h-32">Content 1</Tab.Panel>;
return (
<Tab.Panel>
<div className="px-4 py-5 sm:p-0">
<dl className="sm:divide-y sm:divide-gray-200">
<div className="py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5 sm:px-6">
<dt className="text-sm font-medium text-secondaryInv">
BLE/WiFi Version
</dt>
<dd className="mt-1 flex gap-1 text-sm text-tertiaryInv sm:col-span-2 sm:mt-0">
<span className="rounded-md bg-secondary px-0.5">
{device.specifications.BLEVersion}
</span>
/
<span className="rounded-md bg-secondary px-0.5">
{device.specifications.WiFiVersion}
</span>
</dd>
</div>
<div className="py-4 sm:grid sm:grid-cols-3 sm:gap-4 sm:py-5 sm:px-6">
<dt className="text-sm font-medium text-secondaryInv">
BLE/WiFi Antenna
</dt>
<dd className="mt-1 flex gap-1 text-sm text-tertiaryInv sm:col-span-2 sm:mt-0">
<span className="rounded-md bg-secondary px-0.5">
{device.specifications.BLEAntenna}
</span>
/
<span className="rounded-md bg-secondary px-0.5">
{device.specifications.WiFiAntenna}
</span>
</dd>
</div>
</dl>
</div>
</Tab.Panel>
);
};

View file

@ -9,5 +9,28 @@ export interface PinoutTabProps {
}
export const PinoutTab = ({ device }: PinoutTabProps): JSX.Element => {
return <Tab.Panel className="h-32">Content 1</Tab.Panel>;
return (
<Tab.Panel className="flex">
<div className="m-auto flex gap-4 rounded-lg bg-slate-700 px-2 py-1 shadow-md">
{[
device.pinout.slice(0, device.misc.pinoutSplit),
device.pinout.slice(device.misc.pinoutSplit, device.pinout.length),
].map((group, index) => (
<div key={index}>
{group.map((pin, pinIndex) => (
<div
className={`flex gap-1 ${
index === 0 ? 'flex-row' : 'flex-row-reverse'
}`}
key={pinIndex}
>
<div className="m-auto h-3 w-3 rounded-full border bg-yellow-500" />
<span className="m-auto font-mono text-white">{pin.label}</span>
</div>
))}
</div>
))}
</div>
</Tab.Panel>
);
};

View file

@ -1,5 +1,6 @@
import React, { Fragment, useState } from 'react';
import { motion } from 'framer-motion';
import { FiCheck } from 'react-icons/fi';
import { HiSelector } from 'react-icons/hi';
@ -19,15 +20,21 @@ export const VariantSelectButton = ({
<Listbox value={selected} onChange={setSelected}>
{({ open }) => (
<>
<div className="relative">
<Listbox.Button className="relative -mt-5 ml-2 flex w-fit gap-1 rounded-lg bg-secondary p-2 py-2 pl-3 pr-10 text-lg font-medium leading-6 shadow-md hover:bg-tertiary md:mt-2">
<span className="block truncate">{selected.name}</span>
<span className="pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2">
<HiSelector
className="h-5 w-5 text-gray-400"
aria-hidden="true"
/>
</span>
<div className="relative select-none">
<Listbox.Button as={Fragment}>
<motion.button
whileHover={{ backgroundColor: 'var(--tertiary)' }}
whileTap={{ scale: 0.99 }}
className="relative -mt-5 ml-2 flex w-fit gap-1 rounded-lg bg-secondary p-2 py-2 pl-3 pr-10 text-lg font-medium leading-6 shadow-md md:mt-2"
>
<span className="block truncate">{selected.name}</span>
<span className="pointer-events-none absolute inset-y-0 right-0 flex items-center pr-2">
<HiSelector
className="h-5 w-5 text-gray-400"
aria-hidden="true"
/>
</span>
</motion.button>
</Listbox.Button>
<Transition
@ -37,13 +44,13 @@ export const VariantSelectButton = ({
leaveFrom="opacity-100"
leaveTo="opacity-0"
>
<Listbox.Options className="absolute z-10 mt-1 max-h-60 w-full overflow-auto rounded-md bg-primary py-1 shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none sm:text-sm">
<Listbox.Options className="absolute z-10 mt-1 max-h-60 w-full overflow-auto rounded-md bg-primary py-1 shadow-md ring-1 ring-black ring-opacity-5 focus:outline-none sm:text-sm">
{options.map((variant, index) => (
<Listbox.Option
key={index}
className={({ active }) =>
`relative cursor-default select-none py-2 pl-3 pr-9 ${
active ? 'bg-indigo-600' : ''
active ? 'bg-secondary' : ''
}`
}
value={variant}
@ -61,7 +68,7 @@ export const VariantSelectButton = ({
{selected ? (
<span
className={`absolute inset-y-0 right-0 flex items-center pr-4 ${
active ? '' : 'text-indigo-600'
active ? '' : 'text-primaryInv'
}`}
>
<FiCheck className="h-5 w-5" aria-hidden="true" />

View file

@ -19,8 +19,9 @@ export const SocialCard = ({
>
{children}
<a
className="absolute top-0 left-0 right-0 bottom-0 hidden rounded-xl border border-accent bg-secondaryDark bg-opacity-95 text-2xl shadow-xl group-hover:flex"
className="absolute top-0 left-0 right-0 bottom-0 hidden rounded-xl border border-accent bg-secondary bg-opacity-95 text-2xl shadow-xl group-hover:flex"
href={link}
rel="noreferrer"
target="_blank"
>
<FiExternalLink className="m-auto" />

View file

@ -11,6 +11,7 @@
--ifm-color-primary-light: rgb(70, 203, 174);
--ifm-color-primary-lighter: rgb(102, 212, 189);
--ifm-color-primary-lightest: rgb(146, 224, 208);
--ifm-list-item-margin: 0;
--ifm-code-font-size: 95%;
--ifm-z-index-fixed: 1;
--accent: #67ea94;
@ -135,8 +136,60 @@ a + .navbar__link > svg {
.markdown {
@apply prose prose-lg;
}
.markdown img {
@apply rounded-lg mx-auto;
}
[data-theme="dark"] .markdown {
@apply prose-invert;
@apply prose-invert;
}
[data-theme="dark"] .hideDark {
@apply hidden
}
[data-theme="dark"] .hideLight {
@apply block
}
.hideLight {
@apply hidden
}
.hideDark {
@apply block
}
}
.markdown :where(li):not(:where([class~=not-prose] *)){
margin-bottom:0;
margin-top:0;
}
.markdown :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose] *)){
margin-bottom:0;
margin-top: 0;
}
h1, h2, h3, h4, h5, h6 {
font-weight: var(--ifm-heading-font-weight)
}
h1 {
font-size: var(--ifm-h1-font-size)
}
h2 {
font-size: var(--ifm-h2-font-size)
}
h3 {
font-size: var(--ifm-h3-font-size)
}
h4 {
font-size: var(--ifm-h4-font-size)
}
h5 {
font-size: var(--ifm-h5-font-size)
}
h6 {
font-size: var(--ifm-h6-font-size)
}

View file

@ -10,6 +10,21 @@ export enum UseCase {
Portable,
}
enum PinUsage {
LoRa,
GNSS,
}
export interface Pin {
offset: {
x: number;
y: number;
};
name: string;
label: string;
usage?: PinUsage;
}
export type DeviceName = 'tbeam' | 'techo';
export type BLEVersion = '4.2' | '5.0';
@ -48,8 +63,12 @@ export interface IDevice {
misc: {
SuggestedUse: UseCase[];
Stability: Stability;
ImagePath: string;
Gradient: string;
pinoutSplit: number;
};
images: {
Front: string;
Back: string;
};
features: {
BLE: boolean;
@ -70,5 +89,6 @@ export interface IDevice {
PSRAM: number;
RAM?: number;
};
pinout: Pin[];
variants: Variant[];
}

View file

@ -5,8 +5,11 @@ export const heltec: IDevice = {
misc: {
Stability: Stability.Unstable,
SuggestedUse: [UseCase.Portable],
ImagePath: '/img/hardware/heltec-v2.png',
Gradient: 'from-pink-300 via-purple-300 to-indigo-400',
Gradient: 'bg-gradient-to-r from-pink-300 via-purple-300 to-indigo-400',
},
images: {
Front: '/img/hardware/heltec-v2.png',
Back: '',
},
features: {
BLE: true,

Some files were not shown because too many files have changed in this diff Show more