mirror of
https://github.com/meshtastic/meshtastic.git
synced 2024-11-09 23:24:10 -08:00
Merge branch 'master' into android-usage2
This commit is contained in:
commit
2226f5afc3
|
@ -17,7 +17,7 @@
|
|||
Forum
|
||||
</a>
|
||||
<span> • </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>
|
||||
|
|
|
@ -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>
|
||||
:::
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
id: channels
|
||||
title: Channels
|
||||
sidebar_label: Channels
|
||||
sidebar_position: 3
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
id: clients
|
||||
title: Clients
|
||||
sidebar_label: Clients
|
||||
sidebar_position: 2
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
id: external-devices
|
||||
title: External Devices
|
||||
sidebar_label: External Devices
|
||||
sidebar_position: 5
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
---
|
||||
id: overview
|
||||
title: Meshtastic Concepts
|
||||
sidebar_label: Concepts Overview
|
||||
sidebar_label: Overview of Concepts
|
||||
sidebar_position: 1
|
||||
---
|
||||
|
||||
## Overview
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
---
|
||||
id: expectations
|
||||
title: Expectations
|
||||
sidebar_label: Expectations
|
||||
---
|
|
@ -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).
|
|
@ -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
|
|
@ -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)
|
||||
|
|
@ -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.
|
||||
|
|
@ -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,
|
||||
);
|
||||
};
|
||||
```
|
|
@ -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
15
docs/faq/device-tbeam.mdx
Normal 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.
|
11
docs/faq/device-wisblock.mdx
Normal file
11
docs/faq/device-wisblock.mdx
Normal 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`.
|
|
@ -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`.
|
||||
|
|
|
@ -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.
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
|
@ -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.
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
---
|
||||
id: antenna
|
||||
title: Antennas
|
||||
sidebar_label: Overview
|
||||
sidebar_label: Antennas
|
||||
sidebar_position: 2
|
||||
slug: /hardware/antenna
|
||||
---
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
id: battery
|
||||
title: Adding and sizing batteries
|
||||
sidebar_label: Batteries
|
||||
sidebar_position: 5
|
||||
---
|
||||
|
||||
import { BatteryCalculator } from '../../src/components/BatteryCalculator';
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
7
docs/hardware/supported/_category_.yml
Normal file
7
docs/hardware/supported/_category_.yml
Normal 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
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
id: linux
|
||||
title: Linux Compatible Hardware
|
||||
sidebar_label: Linux
|
||||
sidebar_position: 6
|
||||
---
|
||||
|
||||
This page is a place holder.
|
||||
|
|
|
@ -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>
|
|
@ -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°C to +85°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`
|
||||
|
|
|
@ -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)
|
|
@ -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)
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
---
|
||||
id: overview
|
||||
title: Legal
|
||||
sidebar_label: Legal
|
||||
slug: /legal
|
||||
sidebar_position: 7
|
||||
---
|
||||
|
||||
## Disclaimers
|
|
@ -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
|
||||
|
|
@ -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
|
||||
```
|
|
@ -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--->
|
|
@ -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>
|
|
@ -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
|
|
@ -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"
|
|
@ -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">
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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">
|
|
@ -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.
|
|
@ -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:
|
|
@ -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)
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
|
@ -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:
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 --->
|
|
@ -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'),
|
||||
|
|
|
@ -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": {
|
||||
|
|
|
@ -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
|
335
sidebars.js
335
sidebars.js
|
@ -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
16
src/components/Button.tsx
Normal 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>
|
||||
);
|
||||
};
|
13
src/components/ColorMode.tsx
Normal file
13
src/components/ColorMode.tsx
Normal 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>;
|
||||
};
|
|
@ -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
|
||||
|
|
|
@ -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"
|
||||
>
|
||||
​
|
||||
</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>
|
||||
);
|
||||
};
|
||||
|
|
|
@ -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>
|
||||
);
|
||||
};
|
||||
|
|
|
@ -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>
|
||||
);
|
||||
};
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
);
|
||||
};
|
||||
|
|
|
@ -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>
|
||||
);
|
||||
};
|
||||
|
|
|
@ -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" />
|
||||
|
|
|
@ -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" />
|
||||
|
|
|
@ -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)
|
||||
}
|
|
@ -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[];
|
||||
}
|
||||
|
|
|
@ -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
Loading…
Reference in a new issue