mirror of
https://github.com/meshtastic/firmware.git
synced 2025-06-09 06:32:06 +00:00
(3/3) Add variant for pico with waveshare and GPS hat (#3412)
* (3/3) Add variant for pico with waveshare and GPS hat, utilizing slow clock. * Not everybody has Serial2 * Trunk * Push it real gud * No init --------- Co-authored-by: Ben Meadors <benmmeadors@gmail.com>
This commit is contained in:
parent
54a2a4bcc6
commit
13cc1b0252
@ -111,6 +111,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#define MCP9808_ADDR 0x18
|
#define MCP9808_ADDR 0x18
|
||||||
#define INA_ADDR 0x40
|
#define INA_ADDR 0x40
|
||||||
#define INA_ADDR_ALTERNATE 0x41
|
#define INA_ADDR_ALTERNATE 0x41
|
||||||
|
#define INA_ADDR_WAVESHARE_UPS 0x43
|
||||||
#define INA3221_ADDR 0x42
|
#define INA3221_ADDR 0x42
|
||||||
#define QMC6310_ADDR 0x1C
|
#define QMC6310_ADDR 0x1C
|
||||||
#define QMI8658_ADDR 0x6B
|
#define QMI8658_ADDR 0x6B
|
||||||
|
@ -183,8 +183,13 @@ void ScanI2CTwoWire::scanPort(I2CPort port)
|
|||||||
|
|
||||||
#if !defined(ARCH_PORTDUINO) && !defined(ARCH_STM32WL)
|
#if !defined(ARCH_PORTDUINO) && !defined(ARCH_STM32WL)
|
||||||
case ATECC608B_ADDR:
|
case ATECC608B_ADDR:
|
||||||
type = ATECC608B;
|
#ifdef RP2040_SLOW_CLOCK
|
||||||
if (atecc.begin(addr.address) == true) {
|
if (atecc.begin(addr.address, Wire, Serial2) == true)
|
||||||
|
#else
|
||||||
|
if (atecc.begin(addr.address) == true)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
{
|
||||||
LOG_INFO("ATECC608B initialized\n");
|
LOG_INFO("ATECC608B initialized\n");
|
||||||
} else {
|
} else {
|
||||||
LOG_WARN("ATECC608B initialization failed\n");
|
LOG_WARN("ATECC608B initialization failed\n");
|
||||||
@ -254,6 +259,7 @@ void ScanI2CTwoWire::scanPort(I2CPort port)
|
|||||||
|
|
||||||
case INA_ADDR:
|
case INA_ADDR:
|
||||||
case INA_ADDR_ALTERNATE:
|
case INA_ADDR_ALTERNATE:
|
||||||
|
case INA_ADDR_WAVESHARE_UPS:
|
||||||
registerValue = getRegisterValue(ScanI2CTwoWire::RegisterLocation(addr, 0xFE), 2);
|
registerValue = getRegisterValue(ScanI2CTwoWire::RegisterLocation(addr, 0xFE), 2);
|
||||||
LOG_DEBUG("Register MFG_UID: 0x%x\n", registerValue);
|
LOG_DEBUG("Register MFG_UID: 0x%x\n", registerValue);
|
||||||
if (registerValue == 0x5449) {
|
if (registerValue == 0x5449) {
|
||||||
|
@ -4,6 +4,10 @@
|
|||||||
#include "configuration.h"
|
#include "configuration.h"
|
||||||
#include <Adafruit_INA219.h>
|
#include <Adafruit_INA219.h>
|
||||||
|
|
||||||
|
#ifndef INA219_MULTIPLIER
|
||||||
|
#define INA219_MULTIPLIER 1.0f
|
||||||
|
#endif
|
||||||
|
|
||||||
INA219Sensor::INA219Sensor() : TelemetrySensor(meshtastic_TelemetrySensorType_INA219, "INA219") {}
|
INA219Sensor::INA219Sensor() : TelemetrySensor(meshtastic_TelemetrySensorType_INA219, "INA219") {}
|
||||||
|
|
||||||
int32_t INA219Sensor::runOnce()
|
int32_t INA219Sensor::runOnce()
|
||||||
@ -26,7 +30,7 @@ void INA219Sensor::setup() {}
|
|||||||
bool INA219Sensor::getMetrics(meshtastic_Telemetry *measurement)
|
bool INA219Sensor::getMetrics(meshtastic_Telemetry *measurement)
|
||||||
{
|
{
|
||||||
measurement->variant.environment_metrics.voltage = ina219.getBusVoltage_V();
|
measurement->variant.environment_metrics.voltage = ina219.getBusVoltage_V();
|
||||||
measurement->variant.environment_metrics.current = ina219.getCurrent_mA();
|
measurement->variant.environment_metrics.current = ina219.getCurrent_mA() * INA219_MULTIPLIER;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
28
variants/rpipico-slowclock/platformio.ini
Normal file
28
variants/rpipico-slowclock/platformio.ini
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
[env:pico_slowclock]
|
||||||
|
extends = rp2040_base
|
||||||
|
board = rpipico
|
||||||
|
upload_protocol = jlink
|
||||||
|
# debug settings for external openocd with RP2040 support (custom build)
|
||||||
|
debug_tool = custom
|
||||||
|
debug_init_cmds =
|
||||||
|
target extended-remote localhost:3333
|
||||||
|
$INIT_BREAK
|
||||||
|
monitor reset halt
|
||||||
|
$LOAD_CMDS
|
||||||
|
monitor init
|
||||||
|
monitor reset halt
|
||||||
|
|
||||||
|
# add our variants files to the include and src paths
|
||||||
|
build_flags = ${rp2040_base.build_flags}
|
||||||
|
-DRPI_PICO
|
||||||
|
-Ivariants/rpipico_slowclock
|
||||||
|
-DDEBUG_RP2040_PORT=Serial2
|
||||||
|
-DHW_SPI1_DEVICE
|
||||||
|
-L "${platformio.libdeps_dir}/${this.__env__}/BSEC2 Software Library/src/cortex-m0plus"
|
||||||
|
-g
|
||||||
|
-DNO_USB
|
||||||
|
lib_deps =
|
||||||
|
${rp2040_base.lib_deps}
|
||||||
|
debug_build_flags = ${rp2040_base.build_flags}
|
||||||
|
-g
|
||||||
|
-DNO_USB
|
87
variants/rpipico-slowclock/variant.h
Normal file
87
variants/rpipico-slowclock/variant.h
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
#define ARDUINO_ARCH_AVR
|
||||||
|
|
||||||
|
// Build with slow system clock enabled to reduce power consumption.
|
||||||
|
#define RP2040_SLOW_CLOCK
|
||||||
|
|
||||||
|
#ifdef RP2040_SLOW_CLOCK
|
||||||
|
// Redefine UART1 serial log output to avoid collision with UART0 for GPS.
|
||||||
|
#define SERIAL2_TX 4
|
||||||
|
#define SERIAL2_RX 5
|
||||||
|
// Reroute log output in SensorLib when USB is not available
|
||||||
|
#define log_e(...) Serial2.printf(__VA_ARGS__)
|
||||||
|
#define log_i(...) Serial2.printf(__VA_ARGS__)
|
||||||
|
#define log_d(...) Serial2.printf(__VA_ARGS__)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Expecting the Waveshare Pico GPS hat
|
||||||
|
#define HAS_GPS 1
|
||||||
|
|
||||||
|
// Enable OLED Screen
|
||||||
|
#define HAS_SCREEN 1
|
||||||
|
#define USE_SH1106 1
|
||||||
|
#define RESET_OLED 13
|
||||||
|
|
||||||
|
// Redefine I2C0 pins to avoid collision with UART1/Serial2.
|
||||||
|
#define I2C_SDA 8
|
||||||
|
#define I2C_SCL 9
|
||||||
|
|
||||||
|
// Redefine Waveshare UPS-A/B I2C_1 pins:
|
||||||
|
#define I2C_SDA1 6
|
||||||
|
#define I2C_SCL1 7
|
||||||
|
// Waveshare UPS-A/B uses a 0.01 Ohm shunt for the INA219 sensor
|
||||||
|
#define INA219_MULTIPLIER 10.0f
|
||||||
|
|
||||||
|
// Waveshare Pico GPS L76B pins:
|
||||||
|
#define GPS_RX_PIN 1
|
||||||
|
#define GPS_TX_PIN 0
|
||||||
|
|
||||||
|
// Wakeup from backup mode
|
||||||
|
// #define PIN_GPS_FORCE_ON 14
|
||||||
|
// No GPS reset available
|
||||||
|
#undef PIN_GPS_RESET
|
||||||
|
/*
|
||||||
|
* For PPS output the resistor R20 needs to be populated with 0 Ohm
|
||||||
|
* on the Waveshare Pico GPS board.
|
||||||
|
*/
|
||||||
|
#define PIN_GPS_PPS 16
|
||||||
|
/*
|
||||||
|
* For standby mode switching the resistor R18 needs to be populated
|
||||||
|
* with 0 Ohm on the Waveshare Pico GPS board.
|
||||||
|
*/
|
||||||
|
#define PIN_GPS_STANDBY 17
|
||||||
|
|
||||||
|
#define BUTTON_PIN 18
|
||||||
|
#define EXT_NOTIFY_OUT 22
|
||||||
|
#define LED_PIN PIN_LED
|
||||||
|
|
||||||
|
#define BATTERY_PIN 26
|
||||||
|
// ratio of voltage divider = 3.0 (R17=200k, R18=100k)
|
||||||
|
#define ADC_MULTIPLIER 3.1 // 3.0 + a bit for being optimistic
|
||||||
|
#define BATTERY_SENSE_RESOLUTION_BITS ADC_RESOLUTION
|
||||||
|
|
||||||
|
#define USE_SX1262
|
||||||
|
|
||||||
|
#undef LORA_SCK
|
||||||
|
#undef LORA_MISO
|
||||||
|
#undef LORA_MOSI
|
||||||
|
#undef LORA_CS
|
||||||
|
|
||||||
|
#define LORA_SCK 10
|
||||||
|
#define LORA_MISO 12
|
||||||
|
#define LORA_MOSI 11
|
||||||
|
#define LORA_CS 3
|
||||||
|
|
||||||
|
#define LORA_DIO0 RADIOLIB_NC
|
||||||
|
#define LORA_RESET 15
|
||||||
|
#define LORA_DIO1 20
|
||||||
|
#define LORA_DIO2 2
|
||||||
|
#define LORA_DIO3 RADIOLIB_NC
|
||||||
|
|
||||||
|
#ifdef USE_SX1262
|
||||||
|
#define SX126X_CS LORA_CS
|
||||||
|
#define SX126X_DIO1 LORA_DIO1
|
||||||
|
#define SX126X_BUSY LORA_DIO2
|
||||||
|
#define SX126X_RESET LORA_RESET
|
||||||
|
#define SX126X_DIO2_AS_RF_SWITCH
|
||||||
|
#define SX126X_DIO3_TCXO_VOLTAGE 1.8
|
||||||
|
#endif
|
Loading…
Reference in New Issue
Block a user