mirror of
https://github.com/meshtastic/firmware.git
synced 2025-12-23 19:20:41 +00:00
Compare commits
17 Commits
v2.1.10.7e
...
v2.1.11.5e
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5ec624d9c3 | ||
|
|
b4ff37104a | ||
|
|
81bfd69a41 | ||
|
|
57aaf7f6ee | ||
|
|
9b6ac98ae0 | ||
|
|
e1c4968c58 | ||
|
|
694fd04367 | ||
|
|
cdc8bf44e9 | ||
|
|
09d48f659e | ||
|
|
39aa756100 | ||
|
|
17e25babb1 | ||
|
|
7c9d0a022a | ||
|
|
313860c8a4 | ||
|
|
e360c62480 | ||
|
|
973b30fc0b | ||
|
|
a6385a522d | ||
|
|
b6ff80f0b7 |
@@ -124,6 +124,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#define MPU6050_ADDR 0x68
|
#define MPU6050_ADDR 0x68
|
||||||
#define LIS3DH_ADR 0x18
|
#define LIS3DH_ADR 0x18
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// LED
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
#define NCP5623_ADDR 0x38
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// Security
|
// Security
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ class ScanI2C
|
|||||||
PMSA0031,
|
PMSA0031,
|
||||||
MPU6050,
|
MPU6050,
|
||||||
LIS3DH,
|
LIS3DH,
|
||||||
|
NCP5623,
|
||||||
} DeviceType;
|
} DeviceType;
|
||||||
|
|
||||||
// typedef uint8_t DeviceAddress;
|
// typedef uint8_t DeviceAddress;
|
||||||
|
|||||||
@@ -213,6 +213,7 @@ void ScanI2CTwoWire::scanPort(I2CPort port)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
SCAN_SIMPLE_CASE(ST7567_ADDRESS, SCREEN_ST7567, "st7567 display found\n")
|
SCAN_SIMPLE_CASE(ST7567_ADDRESS, SCREEN_ST7567, "st7567 display found\n")
|
||||||
|
SCAN_SIMPLE_CASE(NCP5623_ADDR, NCP5623, "NCP5623 RGB LED found\n");
|
||||||
|
|
||||||
#ifdef HAS_PMU
|
#ifdef HAS_PMU
|
||||||
SCAN_SIMPLE_CASE(XPOWERS_AXP192_AXP2101_ADDRESS, PMU_AXP192_AXP2101, "axp192/axp2101 PMU found\n")
|
SCAN_SIMPLE_CASE(XPOWERS_AXP192_AXP2101_ADDRESS, PMU_AXP192_AXP2101, "axp192/axp2101 PMU found\n")
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
#include "NMEAWPL.h"
|
#include "NMEAWPL.h"
|
||||||
#include "GeoCoord.h"
|
#include "GeoCoord.h"
|
||||||
|
#include "RTC.h"
|
||||||
|
#include <time.h>
|
||||||
|
|
||||||
/* -------------------------------------------
|
/* -------------------------------------------
|
||||||
* 1 2 3 4 5 6
|
* 1 2 3 4 5 6
|
||||||
@@ -56,11 +58,17 @@ uint32_t printWPL(char *buf, size_t bufsz, const meshtastic_Position &pos, const
|
|||||||
uint32_t printGGA(char *buf, size_t bufsz, const meshtastic_Position &pos)
|
uint32_t printGGA(char *buf, size_t bufsz, const meshtastic_Position &pos)
|
||||||
{
|
{
|
||||||
GeoCoord geoCoord(pos.latitude_i, pos.longitude_i, pos.altitude);
|
GeoCoord geoCoord(pos.latitude_i, pos.longitude_i, pos.altitude);
|
||||||
uint32_t len =
|
tm *t = localtime((time_t *)&pos.timestamp);
|
||||||
snprintf(buf, bufsz, "$GNGGA,%06u.%03u,%02d%07.4f,%c,%03d%07.4f,%c,%u,%02u,%04u,%04d,%c,%04d,%c,%d,%04d", pos.time / 1000,
|
if (getRTCQuality() > 0) { // use the device clock if we got time from somewhere. If not, use the GPS timestamp.
|
||||||
pos.time % 1000, geoCoord.getDMSLatDeg(), (abs(geoCoord.getLatitude()) - geoCoord.getDMSLatDeg() * 1e+7) * 6e-6,
|
uint32_t rtc_sec = getValidTime(RTCQuality::RTCQualityDevice);
|
||||||
geoCoord.getDMSLatCP(), geoCoord.getDMSLonDeg(),
|
t = localtime((time_t *)&rtc_sec);
|
||||||
(abs(geoCoord.getLongitude()) - geoCoord.getDMSLonDeg() * 1e+7) * 6e-6, geoCoord.getDMSLonCP(), pos.fix_type,
|
}
|
||||||
|
|
||||||
|
uint32_t len = snprintf(
|
||||||
|
buf, bufsz, "$GNGGA,%02d%02d%02d.%02d,%02d%07.4f,%c,%03d%07.4f,%c,%u,%02u,%04u,%04d,%c,%04d,%c,%d,%04d", t->tm_hour,
|
||||||
|
t->tm_min, t->tm_sec, pos.timestamp_millis_adjust, geoCoord.getDMSLatDeg(),
|
||||||
|
(abs(geoCoord.getLatitude()) - geoCoord.getDMSLatDeg() * 1e+7) * 6e-6, geoCoord.getDMSLatCP(), geoCoord.getDMSLonDeg(),
|
||||||
|
(abs(geoCoord.getLongitude()) - geoCoord.getDMSLonDeg() * 1e+7) * 6e-6, geoCoord.getDMSLonCP(), pos.fix_quality,
|
||||||
pos.sats_in_view, pos.HDOP, geoCoord.getAltitude(), 'M', pos.altitude_geoidal_separation, 'M', 0, 0);
|
pos.sats_in_view, pos.HDOP, geoCoord.getAltitude(), 'M', pos.altitude_geoidal_separation, 'M', 0, 0);
|
||||||
|
|
||||||
uint32_t chk = 0;
|
uint32_t chk = 0;
|
||||||
|
|||||||
@@ -100,6 +100,8 @@ uint8_t kb_model;
|
|||||||
ScanI2C::DeviceAddress rtc_found = ScanI2C::ADDRESS_NONE;
|
ScanI2C::DeviceAddress rtc_found = ScanI2C::ADDRESS_NONE;
|
||||||
// The I2C address of the Accelerometer (if found)
|
// The I2C address of the Accelerometer (if found)
|
||||||
ScanI2C::DeviceAddress accelerometer_found = ScanI2C::ADDRESS_NONE;
|
ScanI2C::DeviceAddress accelerometer_found = ScanI2C::ADDRESS_NONE;
|
||||||
|
// The I2C address of the RGB LED (if found)
|
||||||
|
ScanI2C::FoundDevice rgb_found = ScanI2C::FoundDevice(ScanI2C::DeviceType::NONE, ScanI2C::ADDRESS_NONE);
|
||||||
|
|
||||||
#if !defined(ARCH_PORTDUINO) && !defined(ARCH_STM32WL)
|
#if !defined(ARCH_PORTDUINO) && !defined(ARCH_STM32WL)
|
||||||
ATECCX08A atecc;
|
ATECCX08A atecc;
|
||||||
@@ -234,8 +236,6 @@ void setup()
|
|||||||
|
|
||||||
fsInit();
|
fsInit();
|
||||||
|
|
||||||
router = new ReliableRouter();
|
|
||||||
|
|
||||||
#ifdef I2C_SDA1
|
#ifdef I2C_SDA1
|
||||||
Wire1.begin(I2C_SDA1, I2C_SCL1);
|
Wire1.begin(I2C_SDA1, I2C_SCL1);
|
||||||
#endif
|
#endif
|
||||||
@@ -346,6 +346,8 @@ void setup()
|
|||||||
* nodeTelemetrySensorsMap singleton. This wraps that logic in a temporary scope to declare the temporary field
|
* nodeTelemetrySensorsMap singleton. This wraps that logic in a temporary scope to declare the temporary field
|
||||||
* "found".
|
* "found".
|
||||||
*/
|
*/
|
||||||
|
// Only one supported RGB LED currently
|
||||||
|
rgb_found = i2cScanner->find(ScanI2C::DeviceType::NCP5623);
|
||||||
|
|
||||||
#if !defined(ARCH_PORTDUINO)
|
#if !defined(ARCH_PORTDUINO)
|
||||||
auto acc_info = i2cScanner->firstAccelerometer();
|
auto acc_info = i2cScanner->firstAccelerometer();
|
||||||
@@ -413,6 +415,8 @@ void setup()
|
|||||||
// If we're taking on the repeater role, use flood router
|
// If we're taking on the repeater role, use flood router
|
||||||
if (config.device.role == meshtastic_Config_DeviceConfig_Role_REPEATER)
|
if (config.device.role == meshtastic_Config_DeviceConfig_Role_REPEATER)
|
||||||
router = new FloodingRouter();
|
router = new FloodingRouter();
|
||||||
|
else
|
||||||
|
router = new ReliableRouter();
|
||||||
|
|
||||||
#if HAS_BUTTON
|
#if HAS_BUTTON
|
||||||
// Buttons. Moved here cause we need NodeDB to be initialized
|
// Buttons. Moved here cause we need NodeDB to be initialized
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ extern ScanI2C::DeviceAddress cardkb_found;
|
|||||||
extern uint8_t kb_model;
|
extern uint8_t kb_model;
|
||||||
extern ScanI2C::DeviceAddress rtc_found;
|
extern ScanI2C::DeviceAddress rtc_found;
|
||||||
extern ScanI2C::DeviceAddress accelerometer_found;
|
extern ScanI2C::DeviceAddress accelerometer_found;
|
||||||
|
extern ScanI2C::FoundDevice rgb_found;
|
||||||
|
|
||||||
extern bool eink_found;
|
extern bool eink_found;
|
||||||
extern bool pmu_found;
|
extern bool pmu_found;
|
||||||
|
|||||||
@@ -8,6 +8,17 @@
|
|||||||
#include "mesh/generated/meshtastic/rtttl.pb.h"
|
#include "mesh/generated/meshtastic/rtttl.pb.h"
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
|
|
||||||
|
#include "main.h"
|
||||||
|
|
||||||
|
#ifdef RAK4630
|
||||||
|
#include <NCP5623.h>
|
||||||
|
NCP5623 rgb;
|
||||||
|
|
||||||
|
uint8_t red = 0;
|
||||||
|
uint8_t green = 0;
|
||||||
|
uint8_t blue = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef PIN_BUZZER
|
#ifndef PIN_BUZZER
|
||||||
#define PIN_BUZZER false
|
#define PIN_BUZZER false
|
||||||
#endif
|
#endif
|
||||||
@@ -73,6 +84,15 @@ int32_t ExternalNotificationModule::runOnce()
|
|||||||
millis()) {
|
millis()) {
|
||||||
getExternal(2) ? setExternalOff(2) : setExternalOn(2);
|
getExternal(2) ? setExternalOff(2) : setExternalOn(2);
|
||||||
}
|
}
|
||||||
|
#ifdef RAK4630
|
||||||
|
if (rgb_found.type == ScanI2C::NCP5623) {
|
||||||
|
green = (green + 50) % 255;
|
||||||
|
red = abs(red - green) % 255;
|
||||||
|
blue = abs(blue / red) % 255;
|
||||||
|
|
||||||
|
rgb.setColor(red, green, blue);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// now let the PWM buzzer play
|
// now let the PWM buzzer play
|
||||||
@@ -84,6 +104,7 @@ int32_t ExternalNotificationModule::runOnce()
|
|||||||
rtttl::begin(config.device.buzzer_gpio, rtttlConfig.ringtone);
|
rtttl::begin(config.device.buzzer_gpio, rtttlConfig.ringtone);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 25;
|
return 25;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -106,6 +127,11 @@ void ExternalNotificationModule::setExternalOn(uint8_t index)
|
|||||||
digitalWrite(output, (moduleConfig.external_notification.active ? true : false));
|
digitalWrite(output, (moduleConfig.external_notification.active ? true : false));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
#ifdef RAK4630
|
||||||
|
if (rgb_found.type == ScanI2C::NCP5623) {
|
||||||
|
rgb.setColor(red, green, blue);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void ExternalNotificationModule::setExternalOff(uint8_t index)
|
void ExternalNotificationModule::setExternalOff(uint8_t index)
|
||||||
@@ -126,6 +152,15 @@ void ExternalNotificationModule::setExternalOff(uint8_t index)
|
|||||||
digitalWrite(output, (moduleConfig.external_notification.active ? false : true));
|
digitalWrite(output, (moduleConfig.external_notification.active ? false : true));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef RAK4630
|
||||||
|
if (rgb_found.type == ScanI2C::NCP5623) {
|
||||||
|
red = 0;
|
||||||
|
green = 0;
|
||||||
|
blue = 0;
|
||||||
|
rgb.setColor(red, green, blue);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ExternalNotificationModule::getExternal(uint8_t index)
|
bool ExternalNotificationModule::getExternal(uint8_t index)
|
||||||
@@ -200,6 +235,12 @@ ExternalNotificationModule::ExternalNotificationModule()
|
|||||||
LOG_INFO("Using Pin %i in PWM mode\n", config.device.buzzer_gpio);
|
LOG_INFO("Using Pin %i in PWM mode\n", config.device.buzzer_gpio);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#ifdef RAK4630
|
||||||
|
if (rgb_found.type == ScanI2C::NCP5623) {
|
||||||
|
rgb.begin();
|
||||||
|
rgb.setCurrent(10);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
} else {
|
} else {
|
||||||
LOG_INFO("External Notification Module Disabled\n");
|
LOG_INFO("External Notification Module Disabled\n");
|
||||||
disable();
|
disable();
|
||||||
@@ -300,7 +341,6 @@ ProcessMessage ExternalNotificationModule::handleReceived(const meshtastic_MeshP
|
|||||||
nagCycleCutoff = millis() + moduleConfig.external_notification.output_ms;
|
nagCycleCutoff = millis() + moduleConfig.external_notification.output_ms;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
setIntervalFromNow(0); // run once so we know if we should do something
|
setIntervalFromNow(0); // run once so we know if we should do something
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
static void pinModes(uint64_t mask, uint8_t mode)
|
static void pinModes(uint64_t mask, uint8_t mode)
|
||||||
{
|
{
|
||||||
for (uint64_t i = 0; i < NUM_GPIOS; i++) {
|
for (uint64_t i = 0; i < NUM_GPIOS; i++) {
|
||||||
if (mask & (1 << i)) {
|
if (mask & (1ULL << i)) {
|
||||||
pinMode(i, mode);
|
pinMode(i, mode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -29,13 +29,10 @@ static uint64_t digitalReads(uint64_t mask)
|
|||||||
{
|
{
|
||||||
uint64_t res = 0;
|
uint64_t res = 0;
|
||||||
|
|
||||||
// The Arduino docs show to run pinMode(). But, when testing, found it is best not to.
|
pinModes(mask, INPUT_PULLUP);
|
||||||
// If the line below is uncommented, read will flip the pin to the default of the second
|
|
||||||
// argument in pinModes(), which will make the read turn the PIN "on".
|
|
||||||
// pinModes(mask, INPUT_PULLUP);
|
|
||||||
|
|
||||||
for (uint64_t i = 0; i < NUM_GPIOS; i++) {
|
for (uint64_t i = 0; i < NUM_GPIOS; i++) {
|
||||||
uint64_t m = 1 << i;
|
uint64_t m = 1ULL << i;
|
||||||
if (mask & m) {
|
if (mask & m) {
|
||||||
if (digitalRead(i)) {
|
if (digitalRead(i)) {
|
||||||
res |= m;
|
res |= m;
|
||||||
@@ -64,7 +61,7 @@ bool RemoteHardwareModule::handleReceivedProtobuf(const meshtastic_MeshPacket &r
|
|||||||
screen->print("Write GPIOs\n");
|
screen->print("Write GPIOs\n");
|
||||||
|
|
||||||
for (uint8_t i = 0; i < NUM_GPIOS; i++) {
|
for (uint8_t i = 0; i < NUM_GPIOS; i++) {
|
||||||
uint64_t mask = 1 << i;
|
uint64_t mask = 1ULL << i;
|
||||||
if (p.gpio_mask & mask) {
|
if (p.gpio_mask & mask) {
|
||||||
digitalWrite(i, (p.gpio_value & mask) ? 1 : 0);
|
digitalWrite(i, (p.gpio_value & mask) ? 1 : 0);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -309,8 +309,13 @@ esp_sleep_wakeup_cause_t doLightSleep(uint64_t sleepMsec) // FIXME, use a more r
|
|||||||
// assert(esp_sleep_enable_uart_wakeup(0) == ESP_OK);
|
// assert(esp_sleep_enable_uart_wakeup(0) == ESP_OK);
|
||||||
#endif
|
#endif
|
||||||
#ifdef BUTTON_PIN
|
#ifdef BUTTON_PIN
|
||||||
|
#if SOC_PM_SUPPORT_EXT_WAKEUP
|
||||||
esp_sleep_enable_ext0_wakeup((gpio_num_t)(config.device.button_gpio ? config.device.button_gpio : BUTTON_PIN),
|
esp_sleep_enable_ext0_wakeup((gpio_num_t)(config.device.button_gpio ? config.device.button_gpio : BUTTON_PIN),
|
||||||
LOW); // when user presses, this button goes low
|
LOW); // when user presses, this button goes low
|
||||||
|
#else
|
||||||
|
esp_sleep_enable_gpio_wakeup();
|
||||||
|
gpio_wakeup_enable((gpio_num_t)BUTTON_PIN, GPIO_INTR_LOW_LEVEL);
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#if defined(LORA_DIO1) && (LORA_DIO1 != RADIOLIB_NC)
|
#if defined(LORA_DIO1) && (LORA_DIO1 != RADIOLIB_NC)
|
||||||
gpio_wakeup_enable((gpio_num_t)LORA_DIO1, GPIO_INTR_HIGH_LEVEL); // SX126x/SX128x interrupt, active high
|
gpio_wakeup_enable((gpio_num_t)LORA_DIO1, GPIO_INTR_HIGH_LEVEL); // SX126x/SX128x interrupt, active high
|
||||||
|
|||||||
@@ -2,7 +2,13 @@
|
|||||||
extends = esp32c3_base
|
extends = esp32c3_base
|
||||||
board = esp32-c3-devkitm-1
|
board = esp32-c3-devkitm-1
|
||||||
board_level = extra
|
board_level = extra
|
||||||
build_flags =
|
build_flags = ${esp32c3_base.build_flags}
|
||||||
${esp32_base.build_flags}
|
|
||||||
-D PRIVATE_HW
|
-D PRIVATE_HW
|
||||||
-I variants/ai-c3
|
-I variants/ai-c3
|
||||||
|
; as long as BSEC2 Software Library is not supported remove Sensors from build
|
||||||
|
build_src_filter = ${esp32c3_base.build_src_filter}
|
||||||
|
-<modules/Telemetry/EnvironmentTelemetry.cpp>
|
||||||
|
-<modules/Telemetry/AirQualityTelemetry.cpp>
|
||||||
|
-<modules/Telemetry/Sensor>
|
||||||
|
lib_ignore = ${esp32c3_base.lib_ignore}
|
||||||
|
BSEC Software Library
|
||||||
|
|||||||
@@ -1,26 +1,33 @@
|
|||||||
// #define BUTTON_NEED_PULLUP // if set we need to turn on the internal CPU pullup during sleep
|
#define HAS_TELEMETRY 0 // as long as BSEC2 is not supported
|
||||||
|
#define HAS_SENSOR 0 // as long as BSEC2 is not supported
|
||||||
|
|
||||||
#define I2C_SDA 8
|
#define SDA 0
|
||||||
#define I2C_SCL 9
|
#define SCL 1
|
||||||
|
#define I2C_SDA SDA
|
||||||
|
#define I2C_SCL SCL
|
||||||
|
|
||||||
#define BUTTON_PIN 0
|
#define BUTTON_PIN 9 // BOOT button
|
||||||
|
#define LED_PIN 30 // RGB LED
|
||||||
|
|
||||||
#define USE_RF95
|
#define USE_RF95
|
||||||
#undef RF95_SCK
|
|
||||||
#define RF95_SCK 4
|
#define RF95_SCK 4
|
||||||
#undef RF95_MISO
|
|
||||||
#define RF95_MISO 5
|
#define RF95_MISO 5
|
||||||
#undef RF95_MOSI
|
|
||||||
#define RF95_MOSI 6
|
#define RF95_MOSI 6
|
||||||
#undef RF95_NSS
|
|
||||||
#define RF95_NSS 7
|
#define RF95_NSS 7
|
||||||
|
|
||||||
#define LORA_DIO0 10 // a No connect on the SX1262 module
|
#define LORA_DIO0 10
|
||||||
#define LORA_DIO1 3 // a No connect on the SX1262 module
|
#define LORA_DIO1 3
|
||||||
#define LORA_RESET 2
|
#define LORA_RESET 2
|
||||||
|
|
||||||
|
// WaveShare Core1262-868M
|
||||||
|
// https://www.waveshare.com/wiki/Core1262-868M
|
||||||
|
#define USE_SX1262
|
||||||
|
#define SX126X_CS RF95_NSS
|
||||||
|
#define SX126X_DIO1 LORA_DIO1
|
||||||
|
#define SX126X_BUSY 10
|
||||||
|
#define SX126X_RESET LORA_RESET
|
||||||
|
#define SX126X_E22 // use DIO2 as RF switch
|
||||||
|
|
||||||
|
#define HAS_GPS 0
|
||||||
#undef GPS_RX_PIN
|
#undef GPS_RX_PIN
|
||||||
#undef GPS_TX_PIN
|
#undef GPS_TX_PIN
|
||||||
|
|
||||||
#define HAS_SCREEN 0
|
|
||||||
#define HAS_GPS 0
|
|
||||||
|
|||||||
@@ -38,8 +38,9 @@
|
|||||||
#define SX126X_DIO1 LORA_DIO1
|
#define SX126X_DIO1 LORA_DIO1
|
||||||
#define SX126X_BUSY LORA_DIO2
|
#define SX126X_BUSY LORA_DIO2
|
||||||
#define SX126X_RESET LORA_RESET
|
#define SX126X_RESET LORA_RESET
|
||||||
#define SX126X_RXEN 14
|
//#define SX126X_RXEN 14
|
||||||
#define SX126X_TXEN 13
|
//#define SX126X_TXEN 13
|
||||||
|
#define SX126X_POWER_EN (13)
|
||||||
|
|
||||||
// RX/TX for RFM95/SX127x
|
// RX/TX for RFM95/SX127x
|
||||||
#define RF95_RXEN 14
|
#define RF95_RXEN 14
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ lib_deps =
|
|||||||
${networking_base.lib_deps}
|
${networking_base.lib_deps}
|
||||||
melopero/Melopero RV3028@^1.1.0
|
melopero/Melopero RV3028@^1.1.0
|
||||||
https://github.com/RAKWireless/RAK13800-W5100S.git#1.0.2
|
https://github.com/RAKWireless/RAK13800-W5100S.git#1.0.2
|
||||||
|
rakwireless/RAKwireless NCP5623 RGB LED library@^1.0.2
|
||||||
debug_tool = jlink
|
debug_tool = jlink
|
||||||
; If not set we will default to uploading over serial (first it forces bootloader entry by talking 1200bps to cdcacm)
|
; If not set we will default to uploading over serial (first it forces bootloader entry by talking 1200bps to cdcacm)
|
||||||
;upload_protocol = jlink
|
;upload_protocol = jlink
|
||||||
@@ -8,6 +8,7 @@ lib_deps =
|
|||||||
${nrf52840_base.lib_deps}
|
${nrf52840_base.lib_deps}
|
||||||
zinggjm/GxEPD2@^1.4.9
|
zinggjm/GxEPD2@^1.4.9
|
||||||
melopero/Melopero RV3028@^1.1.0
|
melopero/Melopero RV3028@^1.1.0
|
||||||
|
rakwireless/RAKwireless NCP5623 RGB LED library@^1.0.2
|
||||||
debug_tool = jlink
|
debug_tool = jlink
|
||||||
; If not set we will default to uploading over serial (first it forces bootloader entry by talking 1200bps to cdcacm)
|
; If not set we will default to uploading over serial (first it forces bootloader entry by talking 1200bps to cdcacm)
|
||||||
;upload_protocol = jlink
|
;upload_protocol = jlink
|
||||||
@@ -10,6 +10,7 @@ lib_deps =
|
|||||||
${nrf52840_base.lib_deps}
|
${nrf52840_base.lib_deps}
|
||||||
zinggjm/GxEPD2@^1.5.1
|
zinggjm/GxEPD2@^1.5.1
|
||||||
melopero/Melopero RV3028@^1.1.0
|
melopero/Melopero RV3028@^1.1.0
|
||||||
|
rakwireless/RAKwireless NCP5623 RGB LED library@^1.0.2
|
||||||
debug_tool = jlink
|
debug_tool = jlink
|
||||||
; If not set we will default to uploading over serial (first it forces bootloader entry by talking 1200bps to cdcacm)
|
; If not set we will default to uploading over serial (first it forces bootloader entry by talking 1200bps to cdcacm)
|
||||||
;upload_protocol = jlink
|
;upload_protocol = jlink
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
[VERSION]
|
[VERSION]
|
||||||
major = 2
|
major = 2
|
||||||
minor = 1
|
minor = 1
|
||||||
build = 10
|
build = 11
|
||||||
|
|||||||
Reference in New Issue
Block a user