local example
This commit is contained in:
@@ -0,0 +1,18 @@
|
|||||||
|
; Self-contained PlatformIO project for the "echo" example.
|
||||||
|
;
|
||||||
|
; Unlike `pio ci`, this is a normal project you can build, upload and monitor
|
||||||
|
; right here. It pulls in the library from the repo root (two levels up) via a
|
||||||
|
; relative symlink dependency, so there is no copy of the source -- the library's
|
||||||
|
; library.json compiles src/meshcore_companion.c + src/MeshCoreCompanion.cpp.
|
||||||
|
;
|
||||||
|
; cd examples/echo
|
||||||
|
; pio run # compile
|
||||||
|
; pio run -t upload # flash over USB
|
||||||
|
; pio device monitor # serial console (115200)
|
||||||
|
|
||||||
|
[env:esp32-s3]
|
||||||
|
platform = espressif32
|
||||||
|
board = esp32-s3-devkitc-1
|
||||||
|
framework = arduino
|
||||||
|
monitor_speed = 115200
|
||||||
|
lib_deps = symlink://../..
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
/*
|
||||||
|
* echo example -- decode a MeshCore channel to the USB serial console.
|
||||||
|
*
|
||||||
|
* Listens to a companion radio on a hardware UART (Serial1) and echoes every
|
||||||
|
* decoded channel message and data frame to the USB serial monitor (Serial).
|
||||||
|
* A read-only "what's on the mesh" window: no sending, no heartbeat.
|
||||||
|
*
|
||||||
|
* Built as a self-contained PlatformIO project (see platformio.ini next to this
|
||||||
|
* file) that depends on the library at the repo root via a relative symlink.
|
||||||
|
*
|
||||||
|
* cd examples/echo && pio run -t upload && pio device monitor
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
* Author: Scott Penrose / Digital Dimensions.
|
||||||
|
*/
|
||||||
|
#include <Arduino.h>
|
||||||
|
#include "MeshCoreCompanion.h"
|
||||||
|
|
||||||
|
// --- UART to the companion radio (CHANGE to free GPIOs on your S3 board) ---
|
||||||
|
static const int UART_RX_PIN = 16; // host RX <- companion TX
|
||||||
|
static const int UART_TX_PIN = 17; // host TX -> companion RX
|
||||||
|
static const uint32_t UART_BAUD = 115200;
|
||||||
|
|
||||||
|
// Channel to listen on. The radio decodes channel traffic, so it needs the PSK;
|
||||||
|
// we program it on connect. Replace with your real 16-byte PSK (32 hex chars).
|
||||||
|
static const uint8_t CHANNEL_IDX = 2;
|
||||||
|
static const char* CHANNEL_NAME = "sensors";
|
||||||
|
static const char* CHANNEL_PSK_HEX = "000102030405060708090a0b0c0d0e0f";
|
||||||
|
|
||||||
|
MeshCoreCompanion mc(Serial1);
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
Serial.begin(115200);
|
||||||
|
Serial1.begin(UART_BAUD, SERIAL_8N1, UART_RX_PIN, UART_TX_PIN);
|
||||||
|
|
||||||
|
mc.onDeviceInfo([](const mc_device_info_t& d) {
|
||||||
|
Serial.printf("[radio] %s fw=%d channels=%u build=%s\n",
|
||||||
|
d.model, d.fw_ver, d.max_channels, d.build_date);
|
||||||
|
// Make sure the radio is on the channel we want to echo.
|
||||||
|
mc.setChannelHexSecret(CHANNEL_IDX, CHANNEL_NAME, CHANNEL_PSK_HEX);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Decoded channel TEXT -> serial. Body is "SenderName: message".
|
||||||
|
mc.onChannelMessage([](const mc_channel_msg_t& m) {
|
||||||
|
Serial.printf("[ch %d] %s\n", m.channel_idx, m.text);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Decoded channel DATA -> serial, with link metadata.
|
||||||
|
mc.onChannelData([](const mc_channel_data_t& d) {
|
||||||
|
Serial.printf("[ch %d] %u bytes type=0x%04X snr=%.1f dB %s\n",
|
||||||
|
d.channel_idx, d.data_len, d.data_type,
|
||||||
|
MC_SNR_DB(d.snr_q4),
|
||||||
|
d.path_len == MC_PATH_DIRECT ? "direct" : "flood");
|
||||||
|
});
|
||||||
|
|
||||||
|
mc.begin(); // resets RX, sends AppStart + DeviceQuery
|
||||||
|
Serial.println("echo: listening...");
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
mc.loop(); // pump serial; auto-drains the radio queue on MsgWaiting
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user