update EDP

This commit is contained in:
puppy 2024-01-12 16:40:53 +08:00
commit a61bb34e78
803 changed files with 491317 additions and 413 deletions

View file

@ -0,0 +1,154 @@
/*
RadioLib SX126x Receive with Interrupts Example
This example listens for LoRa transmissions and tries to
receive them. Once a packet is received, an interrupt is
triggered. To successfully receive data, the following
settings have to be the same on both transmitter
and receiver:
- carrier frequency
- bandwidth
- spreading factor
- coding rate
- sync word
Other modules from SX126x family can also be used.
For default module settings, see the wiki page
https://github.com/jgromes/RadioLib/wiki/Default-configuration#sx126x---lora-modem
For full API reference, see the GitHub Pages
https://jgromes.github.io/RadioLib/
*/
// include the library
#include <RadioLib.h>
#define RADIO_SCLK_PIN 6
#define RADIO_MISO_PIN 1
#define RADIO_MOSI_PIN 0
#define RADIO_CS_PIN 7
#define RADIO_DIO1_PIN 2
#define RADIO_BUSY_PIN 3
#define RADIO_RST_PIN 4
// SX1262 has the following connections:
// NSS pin: 10
// DIO1 pin: 2
// NRST pin: 3
// BUSY pin: 9
SX1262 radio = new Module(RADIO_CS_PIN, RADIO_DIO1_PIN, RADIO_RST_PIN, RADIO_BUSY_PIN);
// or using RadioShield
// https://github.com/jgromes/RadioShield
//SX1262 radio = RadioShield.ModuleA;
// or using CubeCell
//SX1262 radio = new Module(RADIOLIB_BUILTIN_MODULE);
void setup() {
Serial.begin(115200);
SPI.begin(RADIO_SCLK_PIN, RADIO_MISO_PIN, RADIO_MOSI_PIN);
// SPI.begin(5, 3, 6);
// initialize SX1262 with default settings
Serial.print(F("[SX1262] Initializing ... "));
int state = radio.begin(868);
if (state == RADIOLIB_ERR_NONE) {
Serial.println(F("success!"));
} else {
Serial.print(F("failed, code "));
Serial.println(state);
while (true);
}
// set the function that will be called
// when new packet is received
radio.setDio1Action(setFlag);
// start listening for LoRa packets
Serial.print(F("[SX1262] Starting to listen ... "));
state = radio.startReceive();
if (state == RADIOLIB_ERR_NONE) {
Serial.println(F("success!"));
} else {
Serial.print(F("failed, code "));
Serial.println(state);
while (true);
}
// if needed, 'listen' mode can be disabled by calling
// any of the following methods:
//
// radio.standby()
// radio.sleep()
// radio.transmit();
// radio.receive();
// radio.scanChannel();
}
// flag to indicate that a packet was received
volatile bool receivedFlag = false;
// this function is called when a complete packet
// is received by the module
// IMPORTANT: this function MUST be 'void' type
// and MUST NOT have any arguments!
#if defined(ESP8266) || defined(ESP32)
ICACHE_RAM_ATTR
#endif
void setFlag(void) {
// we got a packet, set the flag
receivedFlag = true;
}
void loop() {
// check if the flag is set
if(receivedFlag) {
// reset flag
receivedFlag = false;
// you can read received data as an Arduino String
String str;
int state = radio.readData(str);
// you can also read received data as byte array
/*
byte byteArr[8];
int numBytes = radio.getPacketLength();
int state = radio.readData(byteArr, numBytes);
*/
if (state == RADIOLIB_ERR_NONE) {
// packet was successfully received
Serial.println(F("[SX1262] Received packet!"));
// print data of the packet
Serial.print(F("[SX1262] Data:\t\t"));
Serial.println(str);
// print RSSI (Received Signal Strength Indicator)
Serial.print(F("[SX1262] RSSI:\t\t"));
Serial.print(radio.getRSSI());
Serial.println(F(" dBm"));
// print SNR (Signal-to-Noise Ratio)
Serial.print(F("[SX1262] SNR:\t\t"));
Serial.print(radio.getSNR());
Serial.println(F(" dB"));
// print frequency error
Serial.print(F("[SX1262] Frequency error:\t"));
Serial.print(radio.getFrequencyError());
Serial.println(F(" Hz"));
} else if (state == RADIOLIB_ERR_CRC_MISMATCH) {
// packet was received, but is malformed
Serial.println(F("CRC error!"));
} else {
// some other error occurred
Serial.print(F("failed, code "));
Serial.println(state);
}
}
}

View file

@ -0,0 +1,144 @@
/*
RadioLib SX126x Transmit with Interrupts Example
This example transmits LoRa packets with one second delays
between them. Each packet contains up to 256 bytes
of data, in the form of:
- Arduino String
- null-terminated char array (C-string)
- arbitrary binary data (byte array)
Other modules from SX126x family can also be used.
For default module settings, see the wiki page
https://github.com/jgromes/RadioLib/wiki/Default-configuration#sx126x---lora-modem
For full API reference, see the GitHub Pages
https://jgromes.github.io/RadioLib/
*/
// include the library
#include <RadioLib.h>
#define RADIO_SCLK_PIN 6
#define RADIO_MISO_PIN 1
#define RADIO_MOSI_PIN 0
#define RADIO_CS_PIN 7
#define RADIO_DIO1_PIN 2
#define RADIO_BUSY_PIN 3
#define RADIO_RST_PIN 4
// SX1262 has the following connections:
// NSS pin: 10
// DIO1 pin: 2
// NRST pin: 3
// BUSY pin: 9
SX1262 radio = new Module(RADIO_CS_PIN, RADIO_DIO1_PIN, RADIO_RST_PIN, RADIO_BUSY_PIN);
// or using RadioShield
// or using RadioShield
// https://github.com/jgromes/RadioShield
//SX1262 radio = RadioShield.ModuleA;
// or using CubeCell
//SX1262 radio = new Module(RADIOLIB_BUILTIN_MODULE);
// save transmission state between loops
int transmissionState = RADIOLIB_ERR_NONE;
void setup() {
Serial.begin(115200);
radio.setRfSwitchPins(15, 14);
SPI.begin(RADIO_SCLK_PIN, RADIO_MISO_PIN, RADIO_MOSI_PIN);
// initialize SX1262 with default settings
Serial.print(F("[SX1262] Initializing ... "));
int state = radio.begin(868.0);
if (state == RADIOLIB_ERR_NONE) {
Serial.println(F("success!"));
} else {
Serial.print(F("failed, code "));
Serial.println(state);
while (true);
}
// set the function that will be called
// when packet transmission is finished
radio.setDio1Action(setFlag);
// start transmitting the first packet
Serial.print(F("[SX1262] Sending first packet ... "));
// you can transmit C-string or Arduino string up to
// 256 characters long
transmissionState = radio.startTransmit("Hello World!");
// you can also transmit byte array up to 256 bytes long
/*
byte byteArr[] = {0x01, 0x23, 0x45, 0x67,
0x89, 0xAB, 0xCD, 0xEF};
state = radio.startTransmit(byteArr, 8);
*/
}
// flag to indicate that a packet was sent
volatile bool transmittedFlag = false;
// this function is called when a complete packet
// is transmitted by the module
// IMPORTANT: this function MUST be 'void' type
// and MUST NOT have any arguments!
#if defined(ESP8266) || defined(ESP32)
ICACHE_RAM_ATTR
#endif
void setFlag(void) {
// we sent a packet, set the flag
transmittedFlag = true;
}
// counter to keep track of transmitted packets
int count = 0;
void loop() {
// check if the previous transmission finished
if(transmittedFlag) {
// reset flag
transmittedFlag = false;
if (transmissionState == RADIOLIB_ERR_NONE) {
// packet was successfully sent
Serial.println(F("transmission finished!"));
// NOTE: when using interrupt-driven transmit method,
// it is not possible to automatically measure
// transmission data rate using getDataRate()
} else {
Serial.print(F("failed, code "));
Serial.println(transmissionState);
}
// clean up after transmission is finished
// this will ensure transmitter is disabled,
// RF switch is powered down etc.
radio.finishTransmit();
// wait a second before transmitting again
delay(1000);
// send another one
Serial.print(F("[SX1262] Sending another packet ... "));
// you can transmit C-string or Arduino string up to
// 256 characters long
String str = "Hello World! #" + String(count++);
transmissionState = radio.startTransmit(str);
// you can also transmit byte array up to 256 bytes long
/*
byte byteArr[] = {0x01, 0x23, 0x45, 0x67,
0x89, 0xAB, 0xCD, 0xEF};
transmissionState = radio.startTransmit(byteArr, 8);
*/
}
}

View file

@ -16,13 +16,11 @@
https://jgromes.github.io/RadioLib/
*/
#include <RadioLib.h>
#include "boards.h"
SX1262 radio = new Module(RADIO_CS_PIN, RADIO_DIO1_PIN, RADIO_RST_PIN, RADIO_BUSY_PIN);
// flag to indicate that a packet was received
volatile bool receivedFlag = false;
@ -36,7 +34,8 @@ volatile bool enableInterrupt = true;
void setFlag(void)
{
// check if the interrupt is enabled
if (!enableInterrupt) {
if (!enableInterrupt)
{
return;
}
@ -49,13 +48,15 @@ void setup()
initBoard();
// When the power is turned on, a delay is required.
delay(1500);
// initialize SX1262 with default settings
Serial.print(F("[SX1262] Initializing ... "));
int state = radio.begin(LoRa_frequency);
if (state == RADIOLIB_ERR_NONE) {
if (state == RADIOLIB_ERR_NONE)
{
Serial.println(F("success!"));
} else {
}
else
{
Serial.print(F("failed, code "));
Serial.println(state);
while (true);
@ -68,9 +69,33 @@ void setup()
// start listening for LoRa packets
Serial.print(F("[SX1262] Starting to listen ... "));
state = radio.startReceive();
if (state == RADIOLIB_ERR_NONE) {
#ifdef HAS_DISPLAY
if (u8g2) {
if (state != RADIOLIB_ERR_NONE) {
u8g2->clearBuffer();
u8g2->drawStr(0, 12, "Initializing: FAIL!");
u8g2->sendBuffer();
}
}
#endif
#ifdef EDP_DISPLAY
if (state != RADIOLIB_ERR_NONE)
{
display.setRotation(1);
display.fillScreen(GxEPD_WHITE);
display.setTextColor(GxEPD_BLACK);
display.setFont(&FreeMonoBold9pt7b);
display.setCursor(0, 15);
display.println("Initializing: FAIL!");
display.update();
}
#endif
if (state == RADIOLIB_ERR_NONE)
{
Serial.println(F("success!"));
} else {
}
else
{
Serial.print(F("failed, code "));
Serial.println(state);
while (true);
@ -87,11 +112,12 @@ void setup()
// radio.scanChannel();
}
void loop()
{
// check if the flag is set
if (receivedFlag) {
if (receivedFlag)
{
// disable the interrupt service routine while
// processing the data
enableInterrupt = false;
@ -109,7 +135,8 @@ void loop()
int state = radio.readData(byteArr, 8);
*/
if (state == RADIOLIB_ERR_NONE) {
if (state == RADIOLIB_ERR_NONE)
{
// packet was successfully received
Serial.println(F("[SX1262] Received packet!"));
@ -127,9 +154,9 @@ void loop()
Serial.print(radio.getSNR());
Serial.println(F(" dB"));
#ifdef HAS_DISPLAY
if (u8g2) {
if (u8g2)
{
u8g2->clearBuffer();
char buf[256];
u8g2->drawStr(0, 12, "Received OK!");
@ -142,16 +169,38 @@ void loop()
u8g2->sendBuffer();
}
#endif
} else if (state == RADIOLIB_ERR_CRC_MISMATCH) {
#ifdef EDP_DISPLAY
display.setRotation(3);
display.fillScreen(GxEPD_WHITE);
display.setTextColor(GxEPD_BLACK);
display.setFont(&FreeMonoBold9pt7b);
display.setCursor(0, 15);
display.println("[SX1262] Received:");
display.setCursor(0, 35);
display.println("DATA:");
display.setCursor(55, 35);
display.println(str);
display.setCursor(0, 55);
display.println("RSSI:");
display.setCursor(55, 55);
display.println(radio.getRSSI());
display.setCursor(0, 75);
display.println("SNR :");
display.setCursor(55, 75);
display.println(radio.getSNR());
display.update();
#endif
}
else if (state == RADIOLIB_ERR_CRC_MISMATCH)
{
// packet was received, but is malformed
Serial.println(F("CRC error!"));
} else {
}
else
{
// some other error occurred
Serial.print(F("failed, code "));
Serial.println(state);
}
// put module back to listen mode

View file

@ -7,7 +7,7 @@
#include <SD.h>
#include <FS.h>
#endif
SPIClass SDSPI(HSPI);
#ifdef HAS_DISPLAY
#include <U8g2lib.h>
@ -16,6 +16,21 @@
#endif
DISPLAY_MODEL *u8g2 = nullptr;
#elif defined(EDP_DISPLAY)
#include "Adafruit_GFX.h"
#include <Fonts/FreeMonoBold12pt7b.h>
#include <Fonts/FreeMonoBold18pt7b.h>
#include <Fonts/FreeMonoBold24pt7b.h>
#include <Fonts/FreeMonoBold9pt7b.h>
#include <GxEPD.h>
#include <GxIO/GxIO_SPI/GxIO_SPI.h>
#include <GxDEPG0213BN/GxDEPG0213BN.h> // 2.13" b/w form DKE GROUP
#include GxEPD_BitmapExamples
GxIO_Class io(SDSPI, EDP_CS_PIN, EDP_DC_PIN, EDP_RSET_PIN);
GxEPD_Class display(io, EDP_RSET_PIN, EDP_BUSY_PIN);
#endif
#ifndef OLED_WIRE_PORT
@ -25,15 +40,12 @@ DISPLAY_MODEL *u8g2 = nullptr;
#if defined(HAS_PMU)
#include "XPowersLib.h"
XPowersLibInterface *PMU = NULL;
#ifndef PMU_WIRE_PORT
#define PMU_WIRE_PORT Wire
#define PMU_WIRE_PORT Wire
#endif
bool pmuInterrupt;
void setPmuFlag()
@ -41,32 +53,40 @@ void setPmuFlag()
pmuInterrupt = true;
}
bool initPMU()
{
if (!PMU) {
if (!PMU)
{
PMU = new XPowersAXP2101(PMU_WIRE_PORT);
if (!PMU->init()) {
if (!PMU->init())
{
Serial.println("Warning: Failed to find AXP2101 power management");
delete PMU;
PMU = NULL;
} else {
}
else
{
Serial.println("AXP2101 PMU init succeeded, using AXP2101 PMU");
}
}
if (!PMU) {
if (!PMU)
{
PMU = new XPowersAXP192(PMU_WIRE_PORT);
if (!PMU->init()) {
if (!PMU->init())
{
Serial.println("Warning: Failed to find AXP192 power management");
delete PMU;
PMU = NULL;
} else {
}
else
{
Serial.println("AXP192 PMU init succeeded, using AXP192 PMU");
}
}
if (!PMU) {
if (!PMU)
{
return false;
}
@ -75,7 +95,8 @@ bool initPMU()
pinMode(PMU_IRQ, INPUT_PULLUP);
attachInterrupt(PMU_IRQ, setPmuFlag, FALLING);
if (PMU->getChipModel() == XPOWERS_AXP192) {
if (PMU->getChipModel() == XPOWERS_AXP192)
{
PMU->setProtectedChannel(XPOWERS_DCDC3);
@ -89,14 +110,14 @@ bool initPMU()
PMU->enablePowerOutput(XPOWERS_LDO2);
PMU->enablePowerOutput(XPOWERS_LDO3);
//protected oled power source
// protected oled power source
PMU->setProtectedChannel(XPOWERS_DCDC1);
//protected esp32 power source
// protected esp32 power source
PMU->setProtectedChannel(XPOWERS_DCDC3);
// enable oled power
PMU->enablePowerOutput(XPOWERS_DCDC1);
//disable not use channel
// disable not use channel
PMU->disablePowerOutput(XPOWERS_DCDC2);
PMU->disableIRQ(XPOWERS_AXP192_ALL_IRQ);
@ -107,13 +128,13 @@ bool initPMU()
XPOWERS_AXP192_BAT_CHG_START_IRQ |
XPOWERS_AXP192_BAT_REMOVE_IRQ |
XPOWERS_AXP192_BAT_INSERT_IRQ |
XPOWERS_AXP192_PKEY_SHORT_IRQ
);
} else if (PMU->getChipModel() == XPOWERS_AXP2101) {
XPOWERS_AXP192_PKEY_SHORT_IRQ);
}
else if (PMU->getChipModel() == XPOWERS_AXP2101)
{
#if defined(CONFIG_IDF_TARGET_ESP32)
//Unuse power channel
// Unuse power channel
PMU->disablePowerOutput(XPOWERS_DCDC2);
PMU->disablePowerOutput(XPOWERS_DCDC3);
PMU->disablePowerOutput(XPOWERS_DCDC4);
@ -129,27 +150,26 @@ bool initPMU()
PMU->setPowerChannelVoltage(XPOWERS_VBACKUP, 3300);
PMU->enablePowerOutput(XPOWERS_VBACKUP);
//ESP32 VDD 3300mV
// ! No need to set, automatically open , Don't close it
// PMU->setPowerChannelVoltage(XPOWERS_DCDC1, 3300);
// PMU->setProtectedChannel(XPOWERS_DCDC1);
// ESP32 VDD 3300mV
// ! No need to set, automatically open , Don't close it
// PMU->setPowerChannelVoltage(XPOWERS_DCDC1, 3300);
// PMU->setProtectedChannel(XPOWERS_DCDC1);
PMU->setProtectedChannel(XPOWERS_DCDC1);
// LoRa VDD 3300mV
PMU->setPowerChannelVoltage(XPOWERS_ALDO2, 3300);
PMU->enablePowerOutput(XPOWERS_ALDO2);
//GNSS VDD 3300mV
// GNSS VDD 3300mV
PMU->setPowerChannelVoltage(XPOWERS_ALDO3, 3300);
PMU->enablePowerOutput(XPOWERS_ALDO3);
#endif /*CONFIG_IDF_TARGET_ESP32*/
#if defined(LILYGO_TBeamS3_SUPREME_V3_0)
//t-beam m.2 inface
//gps
// t-beam m.2 inface
// gps
PMU->setPowerChannelVoltage(XPOWERS_ALDO4, 3300);
PMU->enablePowerOutput(XPOWERS_ALDO4);
@ -158,7 +178,8 @@ bool initPMU()
PMU->enablePowerOutput(XPOWERS_ALDO3);
// In order to avoid bus occupation, during initialization, the SD card and QMC sensor are powered off and restarted
if (ESP_SLEEP_WAKEUP_UNDEFINED == esp_sleep_get_wakeup_cause()) {
if (ESP_SLEEP_WAKEUP_UNDEFINED == esp_sleep_get_wakeup_cause())
{
Serial.println("Power off and restart ALDO BLDO..");
PMU->disablePowerOutput(XPOWERS_ALDO1);
PMU->disablePowerOutput(XPOWERS_ALDO2);
@ -173,7 +194,7 @@ bool initPMU()
PMU->setPowerChannelVoltage(XPOWERS_ALDO2, 3300);
PMU->enablePowerOutput(XPOWERS_ALDO2);
//Sdcard
// Sdcard
PMU->setPowerChannelVoltage(XPOWERS_BLDO1, 3300);
PMU->enablePowerOutput(XPOWERS_BLDO1);
@ -181,7 +202,7 @@ bool initPMU()
PMU->setPowerChannelVoltage(XPOWERS_BLDO2, 3300);
PMU->enablePowerOutput(XPOWERS_BLDO2);
//face m.2
// face m.2
PMU->setPowerChannelVoltage(XPOWERS_DCDC3, 3300);
PMU->enablePowerOutput(XPOWERS_DCDC3);
@ -191,8 +212,7 @@ bool initPMU()
PMU->setPowerChannelVoltage(XPOWERS_DCDC5, 3300);
PMU->enablePowerOutput(XPOWERS_DCDC5);
//not use channel
// not use channel
PMU->disablePowerOutput(XPOWERS_DCDC2);
// PMU->disablePowerOutput(XPOWERS_DCDC4);
// PMU->disablePowerOutput(XPOWERS_DCDC5);
@ -212,10 +232,10 @@ bool initPMU()
PMU->clearIrqStatus();
// Enable the required interrupt function
PMU->enableIRQ(
XPOWERS_AXP2101_BAT_INSERT_IRQ | XPOWERS_AXP2101_BAT_REMOVE_IRQ | //BATTERY
XPOWERS_AXP2101_VBUS_INSERT_IRQ | XPOWERS_AXP2101_VBUS_REMOVE_IRQ | //VBUS
XPOWERS_AXP2101_PKEY_SHORT_IRQ | XPOWERS_AXP2101_PKEY_LONG_IRQ | //POWER KEY
XPOWERS_AXP2101_BAT_CHG_DONE_IRQ | XPOWERS_AXP2101_BAT_CHG_START_IRQ //CHARGE
XPOWERS_AXP2101_BAT_INSERT_IRQ | XPOWERS_AXP2101_BAT_REMOVE_IRQ | // BATTERY
XPOWERS_AXP2101_VBUS_INSERT_IRQ | XPOWERS_AXP2101_VBUS_REMOVE_IRQ | // VBUS
XPOWERS_AXP2101_PKEY_SHORT_IRQ | XPOWERS_AXP2101_PKEY_LONG_IRQ | // POWER KEY
XPOWERS_AXP2101_BAT_CHG_DONE_IRQ | XPOWERS_AXP2101_BAT_CHG_START_IRQ // CHARGE
// XPOWERS_AXP2101_PKEY_NEGATIVE_IRQ | XPOWERS_AXP2101_PKEY_POSITIVE_IRQ | //POWER KEY
);
@ -230,60 +250,77 @@ bool initPMU()
PMU->disableTSPinMeasure();
Serial.printf("=========================================\n");
if (PMU->isChannelAvailable(XPOWERS_DCDC1)) {
Serial.printf("DC1 : %s Voltage: %04u mV \n", PMU->isPowerChannelEnable(XPOWERS_DCDC1) ? "+" : "-", PMU->getPowerChannelVoltage(XPOWERS_DCDC1));
if (PMU->isChannelAvailable(XPOWERS_DCDC1))
{
Serial.printf("DC1 : %s Voltage: %04u mV \n", PMU->isPowerChannelEnable(XPOWERS_DCDC1) ? "+" : "-", PMU->getPowerChannelVoltage(XPOWERS_DCDC1));
}
if (PMU->isChannelAvailable(XPOWERS_DCDC2)) {
Serial.printf("DC2 : %s Voltage: %04u mV \n", PMU->isPowerChannelEnable(XPOWERS_DCDC2) ? "+" : "-", PMU->getPowerChannelVoltage(XPOWERS_DCDC2));
if (PMU->isChannelAvailable(XPOWERS_DCDC2))
{
Serial.printf("DC2 : %s Voltage: %04u mV \n", PMU->isPowerChannelEnable(XPOWERS_DCDC2) ? "+" : "-", PMU->getPowerChannelVoltage(XPOWERS_DCDC2));
}
if (PMU->isChannelAvailable(XPOWERS_DCDC3)) {
Serial.printf("DC3 : %s Voltage: %04u mV \n", PMU->isPowerChannelEnable(XPOWERS_DCDC3) ? "+" : "-", PMU->getPowerChannelVoltage(XPOWERS_DCDC3));
if (PMU->isChannelAvailable(XPOWERS_DCDC3))
{
Serial.printf("DC3 : %s Voltage: %04u mV \n", PMU->isPowerChannelEnable(XPOWERS_DCDC3) ? "+" : "-", PMU->getPowerChannelVoltage(XPOWERS_DCDC3));
}
if (PMU->isChannelAvailable(XPOWERS_DCDC4)) {
Serial.printf("DC4 : %s Voltage: %04u mV \n", PMU->isPowerChannelEnable(XPOWERS_DCDC4) ? "+" : "-", PMU->getPowerChannelVoltage(XPOWERS_DCDC4));
if (PMU->isChannelAvailable(XPOWERS_DCDC4))
{
Serial.printf("DC4 : %s Voltage: %04u mV \n", PMU->isPowerChannelEnable(XPOWERS_DCDC4) ? "+" : "-", PMU->getPowerChannelVoltage(XPOWERS_DCDC4));
}
if (PMU->isChannelAvailable(XPOWERS_DCDC5)) {
Serial.printf("DC5 : %s Voltage: %04u mV \n", PMU->isPowerChannelEnable(XPOWERS_DCDC5) ? "+" : "-", PMU->getPowerChannelVoltage(XPOWERS_DCDC5));
if (PMU->isChannelAvailable(XPOWERS_DCDC5))
{
Serial.printf("DC5 : %s Voltage: %04u mV \n", PMU->isPowerChannelEnable(XPOWERS_DCDC5) ? "+" : "-", PMU->getPowerChannelVoltage(XPOWERS_DCDC5));
}
if (PMU->isChannelAvailable(XPOWERS_LDO2)) {
Serial.printf("LDO2 : %s Voltage: %04u mV \n", PMU->isPowerChannelEnable(XPOWERS_LDO2) ? "+" : "-", PMU->getPowerChannelVoltage(XPOWERS_LDO2));
if (PMU->isChannelAvailable(XPOWERS_LDO2))
{
Serial.printf("LDO2 : %s Voltage: %04u mV \n", PMU->isPowerChannelEnable(XPOWERS_LDO2) ? "+" : "-", PMU->getPowerChannelVoltage(XPOWERS_LDO2));
}
if (PMU->isChannelAvailable(XPOWERS_LDO3)) {
Serial.printf("LDO3 : %s Voltage: %04u mV \n", PMU->isPowerChannelEnable(XPOWERS_LDO3) ? "+" : "-", PMU->getPowerChannelVoltage(XPOWERS_LDO3));
if (PMU->isChannelAvailable(XPOWERS_LDO3))
{
Serial.printf("LDO3 : %s Voltage: %04u mV \n", PMU->isPowerChannelEnable(XPOWERS_LDO3) ? "+" : "-", PMU->getPowerChannelVoltage(XPOWERS_LDO3));
}
if (PMU->isChannelAvailable(XPOWERS_ALDO1)) {
Serial.printf("ALDO1: %s Voltage: %04u mV \n", PMU->isPowerChannelEnable(XPOWERS_ALDO1) ? "+" : "-", PMU->getPowerChannelVoltage(XPOWERS_ALDO1));
if (PMU->isChannelAvailable(XPOWERS_ALDO1))
{
Serial.printf("ALDO1: %s Voltage: %04u mV \n", PMU->isPowerChannelEnable(XPOWERS_ALDO1) ? "+" : "-", PMU->getPowerChannelVoltage(XPOWERS_ALDO1));
}
if (PMU->isChannelAvailable(XPOWERS_ALDO2)) {
Serial.printf("ALDO2: %s Voltage: %04u mV \n", PMU->isPowerChannelEnable(XPOWERS_ALDO2) ? "+" : "-", PMU->getPowerChannelVoltage(XPOWERS_ALDO2));
if (PMU->isChannelAvailable(XPOWERS_ALDO2))
{
Serial.printf("ALDO2: %s Voltage: %04u mV \n", PMU->isPowerChannelEnable(XPOWERS_ALDO2) ? "+" : "-", PMU->getPowerChannelVoltage(XPOWERS_ALDO2));
}
if (PMU->isChannelAvailable(XPOWERS_ALDO3)) {
Serial.printf("ALDO3: %s Voltage: %04u mV \n", PMU->isPowerChannelEnable(XPOWERS_ALDO3) ? "+" : "-", PMU->getPowerChannelVoltage(XPOWERS_ALDO3));
if (PMU->isChannelAvailable(XPOWERS_ALDO3))
{
Serial.printf("ALDO3: %s Voltage: %04u mV \n", PMU->isPowerChannelEnable(XPOWERS_ALDO3) ? "+" : "-", PMU->getPowerChannelVoltage(XPOWERS_ALDO3));
}
if (PMU->isChannelAvailable(XPOWERS_ALDO4)) {
Serial.printf("ALDO4: %s Voltage: %04u mV \n", PMU->isPowerChannelEnable(XPOWERS_ALDO4) ? "+" : "-", PMU->getPowerChannelVoltage(XPOWERS_ALDO4));
if (PMU->isChannelAvailable(XPOWERS_ALDO4))
{
Serial.printf("ALDO4: %s Voltage: %04u mV \n", PMU->isPowerChannelEnable(XPOWERS_ALDO4) ? "+" : "-", PMU->getPowerChannelVoltage(XPOWERS_ALDO4));
}
if (PMU->isChannelAvailable(XPOWERS_BLDO1)) {
Serial.printf("BLDO1: %s Voltage: %04u mV \n", PMU->isPowerChannelEnable(XPOWERS_BLDO1) ? "+" : "-", PMU->getPowerChannelVoltage(XPOWERS_BLDO1));
if (PMU->isChannelAvailable(XPOWERS_BLDO1))
{
Serial.printf("BLDO1: %s Voltage: %04u mV \n", PMU->isPowerChannelEnable(XPOWERS_BLDO1) ? "+" : "-", PMU->getPowerChannelVoltage(XPOWERS_BLDO1));
}
if (PMU->isChannelAvailable(XPOWERS_BLDO2)) {
Serial.printf("BLDO2: %s Voltage: %04u mV \n", PMU->isPowerChannelEnable(XPOWERS_BLDO2) ? "+" : "-", PMU->getPowerChannelVoltage(XPOWERS_BLDO2));
if (PMU->isChannelAvailable(XPOWERS_BLDO2))
{
Serial.printf("BLDO2: %s Voltage: %04u mV \n", PMU->isPowerChannelEnable(XPOWERS_BLDO2) ? "+" : "-", PMU->getPowerChannelVoltage(XPOWERS_BLDO2));
}
Serial.printf("=========================================\n");
// Set the time of pressing the button to turn off
PMU->setPowerKeyPressOffTime(XPOWERS_POWEROFF_4S);
uint8_t opt = PMU->getPowerKeyPressOffTime();
Serial.print("PowerKeyPressOffTime:");
switch (opt) {
case XPOWERS_POWEROFF_4S: Serial.println("4 Second");
switch (opt)
{
case XPOWERS_POWEROFF_4S:
Serial.println("4 Second");
break;
case XPOWERS_POWEROFF_6S: Serial.println("6 Second");
case XPOWERS_POWEROFF_6S:
Serial.println("6 Second");
break;
case XPOWERS_POWEROFF_8S: Serial.println("8 Second");
case XPOWERS_POWEROFF_8S:
Serial.println("8 Second");
break;
case XPOWERS_POWEROFF_10S: Serial.println("10 Second");
case XPOWERS_POWEROFF_10S:
Serial.println("10 Second");
break;
default:
break;
@ -300,54 +337,53 @@ void disablePeripherals()
#define disablePeripherals()
#endif
SPIClass SDSPI(HSPI);
void initBoard()
{
Serial.begin(115200);
Serial.println("initBoard");
SPI.begin(RADIO_SCLK_PIN, RADIO_MISO_PIN, RADIO_MOSI_PIN);
#if defined(HAS_DISPLAY)
Wire.begin(I2C_SDA, I2C_SCL);
#endif
#ifdef I2C1_SDA
Wire1.begin(I2C1_SDA, I2C1_SCL);
#endif
#ifdef HAS_GPS
Serial1.begin(GPS_BAUD_RATE, SERIAL_8N1, GPS_RX_PIN, GPS_TX_PIN);
#endif
#if OLED_RST
pinMode(OLED_RST, OUTPUT);
digitalWrite(OLED_RST, HIGH); delay(20);
digitalWrite(OLED_RST, LOW); delay(20);
digitalWrite(OLED_RST, HIGH); delay(20);
digitalWrite(OLED_RST, HIGH);
delay(20);
digitalWrite(OLED_RST, LOW);
delay(20);
digitalWrite(OLED_RST, HIGH);
delay(20);
#endif
initPMU();
#ifdef BOARD_LED
/*
* T-BeamV1.0, V1.1 LED defaults to low level as trun on,
* so it needs to be forced to pull up
* * * * */
* T-BeamV1.0, V1.1 LED defaults to low level as trun on,
* so it needs to be forced to pull up
* * * * */
#if LED_ON == LOW
gpio_hold_dis(GPIO_NUM_4);
#endif
pinMode(BOARD_LED, OUTPUT);
digitalWrite(BOARD_LED, LED_ON);
#endif
#endif
#ifdef HAS_DISPLAY
Wire.beginTransmission(0x3C);
if (Wire.endTransmission() == 0) {
if (Wire.endTransmission() == 0)
{
Serial.println("Started OLED");
u8g2 = new DISPLAY_MODEL(U8G2_R0, U8X8_PIN_NONE);
u8g2->begin();
@ -357,7 +393,8 @@ void initBoard()
u8g2->setDrawColor(1);
u8g2->setFontDirection(0);
u8g2->firstPage();
do {
do
{
u8g2->setFont(u8g2_font_inb19_mr);
u8g2->drawStr(0, 30, "LilyGo");
u8g2->drawHLine(2, 35, 47);
@ -366,65 +403,98 @@ void initBoard()
u8g2->drawVLine(46, 33, 12);
u8g2->setFont(u8g2_font_inb19_mf);
u8g2->drawStr(58, 60, "LoRa");
} while ( u8g2->nextPage() );
} while (u8g2->nextPage());
u8g2->sendBuffer();
u8g2->setFont(u8g2_font_fur11_tf);
delay(3000);
}
#endif
#ifdef HAS_SDCARD
if (u8g2) {
#ifdef HAS_DISPLAY
if (u8g2)
{
u8g2->setFont(u8g2_font_ncenB08_tr);
}
#endif
pinMode(SDCARD_MISO, INPUT_PULLUP);
SDSPI.begin(SDCARD_SCLK, SDCARD_MISO, SDCARD_MOSI, SDCARD_CS);
if (u8g2) {
#ifdef EDP_DISPLAY
display.init();
display.setTextColor(GxEPD_BLACK);
delay(10);
display.setRotation(2);
delay(10);
display.fillScreen(GxEPD_WHITE);
delay(10);
display.drawExampleBitmap(gImage_pkq, 0, 0, GxEPD_WIDTH, GxEPD_HEIGHT, GxEPD_WHITE);
display.update();
delay(1000);
display.drawExampleBitmap(gImage_wine, 0, 0, GxEPD_WIDTH, GxEPD_HEIGHT, GxEPD_BLACK);
display.update();
delay(1000);
display.drawExampleBitmap(LILYGO_logo, 0, 0, GxEPD_WIDTH, GxEPD_HEIGHT, GxEPD_BLACK);
display.update();
Serial.println("EDP_MODE");
#endif
#ifdef HAS_DISPLAY
if (u8g2)
{
u8g2->clearBuffer();
}
if (!SD.begin(SDCARD_CS, SDSPI)) {
#endif
if (!SD.begin(SDCARD_CS, SDSPI))
{
Serial.println("setupSDCard FAIL");
if (u8g2) {
do {
u8g2->setCursor(0, 16);
u8g2->println( "SDCard FAILED");;
} while ( u8g2->nextPage() );
}
} else {
#ifdef HAS_DISPLAY
if (u8g2)
{
do
{
u8g2->setCursor(0, 16);
u8g2->println("SDCard FAILED");
;
} while (u8g2->nextPage());
}
#endif
}
else{
uint32_t cardSize = SD.cardSize() / (1024 * 1024);
if (u8g2) {
do {
u8g2->setCursor(0, 16);
u8g2->print( "SDCard:");;
u8g2->print(cardSize / 1024.0);;
u8g2->println(" GB");;
} while ( u8g2->nextPage() );
}
Serial.print("setupSDCard PASS . SIZE = ");
Serial.print(cardSize / 1024.0);
Serial.println(" GB");
#ifdef HAS_DISPLAY
if (u8g2)
{
do
{
u8g2->setCursor(0, 16);
u8g2->print("SDCard:");
u8g2->print(cardSize / 1024.0);
u8g2->println(" GB");
} while (u8g2->nextPage());
}
if (u8g2) {
if (u8g2)
{
u8g2->sendBuffer();
}
delay(3000);
#endif
}
delay(3000);
#ifdef HAS_DISPLAY
if (u8g2) {
if (u8g2)
{
u8g2->clearBuffer();
do {
do
{
u8g2->setCursor(0, 16);
u8g2->println( "Waiting to receive data");;
} while ( u8g2->nextPage() );
u8g2->println("Waiting to receive data");
;
} while (u8g2->nextPage());
}
#endif
#endif
}

View file

@ -12,6 +12,7 @@
// #define LILYGO_T3_V1_6
// #define LILYGO_T3_V2_0
// #define LILYGO_T3_S3_V1_0
#define LILYGO_T3_S3_E_PAPER_V_1_0
/*
* The default program uses 868MHz,
* if you need to change it,
@ -257,6 +258,49 @@
#define HAS_SDCARD
#define HAS_DISPLAY
#elif defined(LILYGO_T3_S3_E_PAPER_V_1_0)
#define I2C_SDA 18
#define I2C_SCL 17
#define OLED_RST UNUSE_PIN
#define EDP_BUSY_PIN 48
#define EDP_RSET_PIN 47
#define EDP_DC_PIN 16
#define EDP_CS_PIN 15
#define EDP_CLK_PIN 14 // CLK
#define EDP_MOSI_PIN 11 // MOSI
#define EDP_MISO_PIN -1
#define RADIO_SCLK_PIN 5
#define RADIO_MISO_PIN 3
#define RADIO_MOSI_PIN 6
#define RADIO_CS_PIN 7
#define RADIO_DIO1_PIN 33
#define RADIO_BUSY_PIN 34
#define RADIO_RST_PIN 8
//! SX1276/78 module only
#define RADIO_DIO0_PIN 9
#define RADIO_DIO3_PIN 21
#define RADIO_DIO4_PIN 10
#define RADIO_DIO5_PIN 36
//! end
#define SDCARD_MOSI EDP_MOSI_PIN
#define SDCARD_SCLK EDP_CLK_PIN
#define SDCARD_MISO 2
#define SDCARD_CS 13
#define BOARD_LED 37
#define LED_ON HIGH
#define BAT_ADC_PIN 1
#define BUTTON_PIN 0
#define HAS_SDCARD
#define EDP_DISPLAY
// #define HAS_DISPLAY
#else
#error "For the first use, please define the board version and model in <utilities. h>"

View file

@ -27,7 +27,7 @@ SX1262 radio = new Module(RADIO_CS_PIN, RADIO_DIO1_PIN, RADIO_RST_PIN, RADIO_BUS
int transmissionState = RADIOLIB_ERR_NONE;
// flag to indicate that a packet was sent
volatile bool transmittedFlag = false;
int count = 0;
// disable interrupt when it's not needed
volatile bool enableInterrupt = true;
@ -65,6 +65,17 @@ void setup()
u8g2->sendBuffer();
}
}
#endif
#ifdef EDP_DISPLAY
if (state != RADIOLIB_ERR_NONE) {
display.setRotation(1);
display.fillScreen(GxEPD_WHITE);
display.setTextColor(GxEPD_BLACK);
display.setFont(&FreeMonoBold9pt7b);
display.setCursor(0, 15);
display.println("Initializing: FAIL!");
display.update();
}
#endif
if (state == RADIOLIB_ERR_NONE) {
Serial.println(F("success!"));
@ -93,7 +104,6 @@ void setup()
*/
}
void loop()
{
// check if the previous transmission finished
@ -119,6 +129,15 @@ void loop()
u8g2->drawStr(0, 12, "Transmitting: OK!");
u8g2->sendBuffer();
}
#endif
#ifdef EDP_DISPLAY
display.setRotation(1);
display.fillScreen(GxEPD_WHITE);
display.setTextColor(GxEPD_BLACK);
display.setFont(&FreeMonoBold9pt7b);
display.setCursor(0, 15);
display.println("Transmitting: OK!");
display.update();
#endif
} else {
Serial.print(F("failed, code "));
@ -134,7 +153,8 @@ void loop()
// you can transmit C-string or Arduino string up to
// 256 characters long
transmissionState = radio.startTransmit("Hello World!");
String str = "Hello ! #" + String(count++);
transmissionState = radio.startTransmit(str);
// you can also transmit byte array up to 256 bytes long
/*
byte byteArr[] = {0x01, 0x23, 0x45, 0x67,

View file

@ -7,8 +7,9 @@
#include <SD.h>
#include <FS.h>
#endif
SPIClass SDSPI(HSPI);
#ifdef HAS_DISPLAY
#if defined(HAS_DISPLAY) && !defined(EDP_DISPLAY)
#include <U8g2lib.h>
#ifndef DISPLAY_MODEL
@ -16,6 +17,20 @@
#endif
DISPLAY_MODEL *u8g2 = nullptr;
#elif defined(EDP_DISPLAY)
#include "Adafruit_GFX.h"
#include <Fonts/FreeMonoBold12pt7b.h>
#include <Fonts/FreeMonoBold18pt7b.h>
#include <Fonts/FreeMonoBold24pt7b.h>
#include <Fonts/FreeMonoBold9pt7b.h>
#include <GxEPD.h>
#include <GxIO/GxIO_SPI/GxIO_SPI.h>
#include <GxDEPG0213BN/GxDEPG0213BN.h> // 2.13" b/w form DKE GROUP
#include GxEPD_BitmapExamples
GxIO_Class io(SDSPI, EDP_CS_PIN, EDP_DC_PIN, EDP_RSET_PIN);
GxEPD_Class display(io, EDP_RSET_PIN, EDP_BUSY_PIN);
#endif
#ifndef OLED_WIRE_PORT
@ -300,7 +315,7 @@ void disablePeripherals()
#define disablePeripherals()
#endif
SPIClass SDSPI(HSPI);
void initBoard()
@ -309,9 +324,9 @@ void initBoard()
Serial.println("initBoard");
SPI.begin(RADIO_SCLK_PIN, RADIO_MISO_PIN, RADIO_MOSI_PIN);
#if defined(HAS_DISPLAY)
Wire.begin(I2C_SDA, I2C_SCL);
#endif
#ifdef I2C1_SDA
Wire1.begin(I2C1_SDA, I2C1_SCL);
@ -380,27 +395,48 @@ void initBoard()
#ifdef HAS_SDCARD
#ifdef HAS_DISPLAY
if (u8g2) {
u8g2->setFont(u8g2_font_ncenB08_tr);
}
#endif
pinMode(SDCARD_MISO, INPUT_PULLUP);
SDSPI.begin(SDCARD_SCLK, SDCARD_MISO, SDCARD_MOSI, SDCARD_CS);
#ifdef EDP_DISPLAY
display.init();
display.setTextColor(GxEPD_BLACK);
delay(10);
display.setRotation(0);
delay(10);
display.fillScreen(GxEPD_WHITE);
delay(10);
display.drawExampleBitmap(BitmapExample1, 0, 0, GxEPD_WIDTH, GxEPD_HEIGHT, GxEPD_BLACK);
display.update();
Serial.println("EDP_MODE");
#endif
#ifdef HAS_DISPLAY
if (u8g2) {
u8g2->clearBuffer();
}
#endif
if (!SD.begin(SDCARD_CS, SDSPI)) {
Serial.println("setupSDCard FAIL");
#ifdef HAS_DISPLAY
if (u8g2) {
do {
u8g2->setCursor(0, 16);
u8g2->println( "SDCard FAILED");;
} while ( u8g2->nextPage() );
}
#endif
} else {
uint32_t cardSize = SD.cardSize() / (1024 * 1024);
Serial.print("setupSDCard PASS . SIZE = ");
Serial.print(cardSize / 1024.0);
Serial.println(" GB");
#ifdef HAS_DISPLAY
if (u8g2) {
do {
u8g2->setCursor(0, 16);
@ -409,16 +445,13 @@ void initBoard()
u8g2->println(" GB");;
} while ( u8g2->nextPage() );
}
Serial.print("setupSDCard PASS . SIZE = ");
Serial.print(cardSize / 1024.0);
Serial.println(" GB");
}
if (u8g2) {
u8g2->sendBuffer();
}
delay(3000);
#endif
delay(3000);
#ifdef HAS_DISPLAY
if (u8g2) {
@ -429,7 +462,7 @@ void initBoard()
} while ( u8g2->nextPage() );
}
#endif
#endif
}

View file

@ -12,6 +12,7 @@
// #define LILYGO_T3_V1_6
// #define LILYGO_T3_V2_0
// #define LILYGO_T3_S3_V1_0
#define LILYGO_T3_S3_E_PAPER_V_1_0
/*
* The default program uses 868MHz,
* if you need to change it,
@ -257,6 +258,49 @@
#define HAS_SDCARD
#define HAS_DISPLAY
#elif defined(LILYGO_T3_S3_E_PAPER_V_1_0)
#define I2C_SDA 18
#define I2C_SCL 17
#define OLED_RST UNUSE_PIN
#define EDP_BUSY_PIN 48
#define EDP_RSET_PIN 47
#define EDP_DC_PIN 16
#define EDP_CS_PIN 15
#define EDP_CLK_PIN 14 // CLK
#define EDP_MOSI_PIN 11 // MOSI
#define EDP_MISO_PIN -1
#define RADIO_SCLK_PIN 5
#define RADIO_MISO_PIN 3
#define RADIO_MOSI_PIN 6
#define RADIO_CS_PIN 7
#define RADIO_DIO1_PIN 33
#define RADIO_BUSY_PIN 34
#define RADIO_RST_PIN 8
//! SX1276/78 module only
#define RADIO_DIO0_PIN 9
#define RADIO_DIO3_PIN 21
#define RADIO_DIO4_PIN 10
#define RADIO_DIO5_PIN 36
//! end
#define SDCARD_MOSI EDP_MOSI_PIN
#define SDCARD_SCLK EDP_CLK_PIN
#define SDCARD_MISO 2
#define SDCARD_CS 13
#define BOARD_LED 37
#define LED_ON HIGH
#define BAT_ADC_PIN 1
#define BUTTON_PIN 0
#define HAS_SDCARD
#define EDP_DISPLAY
// #define HAS_DISPLAY
#else
#error "For the first use, please define the board version and model in <utilities. h>"

View file

@ -7,7 +7,7 @@
#include <SD.h>
#include <FS.h>
#endif
SPIClass SDSPI(HSPI);
#ifdef HAS_DISPLAY
#include <U8g2lib.h>
@ -16,6 +16,21 @@
#endif
DISPLAY_MODEL *u8g2 = nullptr;
#elif defined(EDP_DISPLAY)
#include "Adafruit_GFX.h"
#include <Fonts/FreeMonoBold12pt7b.h>
#include <Fonts/FreeMonoBold18pt7b.h>
#include <Fonts/FreeMonoBold24pt7b.h>
#include <Fonts/FreeMonoBold9pt7b.h>
#include <GxEPD.h>
#include <GxIO/GxIO_SPI/GxIO_SPI.h>
#include <GxDEPG0213BN/GxDEPG0213BN.h> // 2.13" b/w form DKE GROUP
#include GxEPD_BitmapExamples
GxIO_Class io(SDSPI, EDP_CS_PIN, EDP_DC_PIN, EDP_RSET_PIN);
GxEPD_Class display(io, EDP_RSET_PIN, EDP_BUSY_PIN);
#endif
#ifndef OLED_WIRE_PORT
@ -300,7 +315,7 @@ void disablePeripherals()
#define disablePeripherals()
#endif
SPIClass SDSPI(HSPI);
void initBoard()
@ -309,9 +324,9 @@ void initBoard()
Serial.println("initBoard");
SPI.begin(RADIO_SCLK_PIN, RADIO_MISO_PIN, RADIO_MOSI_PIN);
#if defined(HAS_DISPLAY)
Wire.begin(I2C_SDA, I2C_SCL);
#endif
#ifdef I2C1_SDA
Wire1.begin(I2C1_SDA, I2C1_SCL);
@ -377,55 +392,88 @@ void initBoard()
#ifdef HAS_SDCARD
if (u8g2) {
#ifdef HAS_DISPLAY
if (u8g2)
{
u8g2->setFont(u8g2_font_ncenB08_tr);
}
#endif
pinMode(SDCARD_MISO, INPUT_PULLUP);
SDSPI.begin(SDCARD_SCLK, SDCARD_MISO, SDCARD_MOSI, SDCARD_CS);
if (u8g2) {
#ifdef EDP_DISPLAY
display.init();
display.setTextColor(GxEPD_BLACK);
delay(10);
display.setRotation(0);
delay(10);
display.fillScreen(GxEPD_WHITE);
delay(10);
display.drawExampleBitmap(BitmapExample1, 0, 0, GxEPD_WIDTH, GxEPD_HEIGHT, GxEPD_BLACK);
display.update();
Serial.println("EDP_MODE");
#endif
#ifdef HAS_DISPLAY
if (u8g2)
{
u8g2->clearBuffer();
}
if (!SD.begin(SDCARD_CS, SDSPI)) {
#endif
if (!SD.begin(SDCARD_CS, SDSPI))
{
Serial.println("setupSDCard FAIL");
if (u8g2) {
do {
u8g2->setCursor(0, 16);
u8g2->println( "SDCard FAILED");;
} while ( u8g2->nextPage() );
}
} else {
#ifdef HAS_DISPLAY
if (u8g2)
{
do
{
u8g2->setCursor(0, 16);
u8g2->println("SDCard FAILED");
;
} while (u8g2->nextPage());
}
#endif
}
else{
uint32_t cardSize = SD.cardSize() / (1024 * 1024);
if (u8g2) {
do {
u8g2->setCursor(0, 16);
u8g2->print( "SDCard:");;
u8g2->print(cardSize / 1024.0);;
u8g2->println(" GB");;
} while ( u8g2->nextPage() );
}
Serial.print("setupSDCard PASS . SIZE = ");
Serial.print(cardSize / 1024.0);
Serial.println(" GB");
#ifdef HAS_DISPLAY
if (u8g2)
{
do
{
u8g2->setCursor(0, 16);
u8g2->print("SDCard:");
u8g2->print(cardSize / 1024.0);
u8g2->println(" GB");
} while (u8g2->nextPage());
}
if (u8g2) {
if (u8g2)
{
u8g2->sendBuffer();
}
delay(3000);
#endif
}
delay(3000);
#ifdef HAS_DISPLAY
if (u8g2) {
if (u8g2)
{
u8g2->clearBuffer();
do {
do
{
u8g2->setCursor(0, 16);
u8g2->println( "Waiting to receive data");;
} while ( u8g2->nextPage() );
u8g2->println("Waiting to receive data");
;
} while (u8g2->nextPage());
}
#endif
#endif
}

View file

@ -161,6 +161,49 @@
#define HAS_DISPLAY
#define HAS_SDCARD
#elif defined(LILYGO_T3_S3_E_PAPER_V_1_0)
#define I2C_SDA 18
#define I2C_SCL 17
#define OLED_RST UNUSE_PIN
#define EDP_BUSY_PIN 48
#define EDP_RSET_PIN 47
#define EDP_DC_PIN 16
#define EDP_CS_PIN 15
#define EDP_CLK_PIN 14 // CLK
#define EDP_MOSI_PIN 11 // MOSI
#define EDP_MISO_PIN -1
#define RADIO_SCLK_PIN 5
#define RADIO_MISO_PIN 3
#define RADIO_MOSI_PIN 6
#define RADIO_CS_PIN 7
#define RADIO_DIO1_PIN 33
#define RADIO_BUSY_PIN 34
#define RADIO_RST_PIN 8
//! SX1276/78 module only
#define RADIO_DIO0_PIN 9
#define RADIO_DIO3_PIN 21
#define RADIO_DIO4_PIN 10
#define RADIO_DIO5_PIN 36
//! end
#define SDCARD_MOSI EDP_MOSI_PIN
#define SDCARD_SCLK EDP_CLK_PIN
#define SDCARD_MISO 2
#define SDCARD_CS 13
#define BOARD_LED 37
#define LED_ON HIGH
#define BAT_ADC_PIN 1
#define BUTTON_PIN 0
#define HAS_SDCARD
#define EDP_DISPLAY
// #define HAS_DISPLAY
#else
#error "For the first use, please define the board version and model in <utilities. h>"
#endif

View file

@ -66,13 +66,27 @@ void setup()
int state = radio.begin(LoRa_frequency);
#endif
#ifdef HAS_DISPLAY
if (u8g2) {
if (state != RADIOLIB_ERR_NONE) {
if (u8g2)
{
if (state != RADIOLIB_ERR_NONE)
{
u8g2->clearBuffer();
u8g2->drawStr(0, 12, "Initializing: FAIL!");
u8g2->sendBuffer();
}
}
#endif
#ifdef EDP_DISPLAY
if (state != RADIOLIB_ERR_NONE)
{
display.setRotation(1);
display.fillScreen(GxEPD_WHITE);
display.setTextColor(GxEPD_BLACK);
display.setFont(&FreeMonoBold9pt7b);
display.setCursor(0, 15);
display.println("Initializing: FAIL!");
display.update();
}
#endif
if (state == RADIOLIB_ERR_NONE) {
Serial.println(F("success!"));
@ -160,6 +174,15 @@ void loop()
u8g2->drawStr(0, 30, buf);
u8g2->sendBuffer();
}
#endif
#ifdef EDP_DISPLAY
display.setRotation(1);
display.fillScreen(GxEPD_WHITE);
display.setTextColor(GxEPD_BLACK);
display.setFont(&FreeMonoBold9pt7b);
display.setCursor(0, 15);
display.println("Transmitting: OK!");
display.update();
#endif
} else {
Serial.print(F("failed, code "));

View file

@ -7,8 +7,9 @@
#include <SD.h>
#include <FS.h>
#endif
SPIClass SDSPI(HSPI);
#ifdef HAS_DISPLAY
#if defined(HAS_DISPLAY) && !defined(EDP_DISPLAY)
#include <U8g2lib.h>
#ifndef DISPLAY_MODEL
@ -16,6 +17,20 @@
#endif
DISPLAY_MODEL *u8g2 = nullptr;
#elif defined(EDP_DISPLAY)
#include "Adafruit_GFX.h"
#include <Fonts/FreeMonoBold12pt7b.h>
#include <Fonts/FreeMonoBold18pt7b.h>
#include <Fonts/FreeMonoBold24pt7b.h>
#include <Fonts/FreeMonoBold9pt7b.h>
#include <GxEPD.h>
#include <GxIO/GxIO_SPI/GxIO_SPI.h>
#include <GxDEPG0213BN/GxDEPG0213BN.h> // 2.13" b/w form DKE GROUP
#include GxEPD_BitmapExamples
GxIO_Class io(SDSPI, EDP_CS_PIN, EDP_DC_PIN, EDP_RSET_PIN);
GxEPD_Class display(io, EDP_RSET_PIN, EDP_BUSY_PIN);
#endif
#ifndef OLED_WIRE_PORT
@ -310,8 +325,9 @@ void initBoard()
SPI.begin(RADIO_SCLK_PIN, RADIO_MISO_PIN, RADIO_MOSI_PIN);
#if defined(HAS_DISPLAY)
Wire.begin(I2C_SDA, I2C_SCL);
#endif
#ifdef I2C1_SDA
Wire1.begin(I2C1_SDA, I2C1_SCL);
@ -319,7 +335,6 @@ void initBoard()
#ifdef HAS_GPS
Serial1.begin(GPS_BAUD_RATE, SERIAL_8N1, GPS_RX_PIN, GPS_TX_PIN);
#endif
@ -377,27 +392,48 @@ void initBoard()
#ifdef HAS_SDCARD
#ifdef HAS_DISPLAY
if (u8g2) {
u8g2->setFont(u8g2_font_ncenB08_tr);
}
#endif
pinMode(SDCARD_MISO, INPUT_PULLUP);
SDSPI.begin(SDCARD_SCLK, SDCARD_MISO, SDCARD_MOSI, SDCARD_CS);
#ifdef EDP_DISPLAY
display.init();
display.setTextColor(GxEPD_BLACK);
delay(10);
display.setRotation(0);
delay(10);
display.fillScreen(GxEPD_WHITE);
delay(10);
display.drawExampleBitmap(BitmapExample1, 0, 0, GxEPD_WIDTH, GxEPD_HEIGHT, GxEPD_BLACK);
display.update();
Serial.println("EDP_MODE");
#endif
#ifdef HAS_DISPLAY
if (u8g2) {
u8g2->clearBuffer();
}
#endif
if (!SD.begin(SDCARD_CS, SDSPI)) {
Serial.println("setupSDCard FAIL");
#ifdef HAS_DISPLAY
if (u8g2) {
do {
u8g2->setCursor(0, 16);
u8g2->println( "SDCard FAILED");;
} while ( u8g2->nextPage() );
}
#endif
} else {
uint32_t cardSize = SD.cardSize() / (1024 * 1024);
Serial.print("setupSDCard PASS . SIZE = ");
Serial.print(cardSize / 1024.0);
Serial.println(" GB");
#ifdef HAS_DISPLAY
if (u8g2) {
do {
u8g2->setCursor(0, 16);
@ -406,17 +442,24 @@ void initBoard()
u8g2->println(" GB");;
} while ( u8g2->nextPage() );
}
Serial.print("setupSDCard PASS . SIZE = ");
Serial.print(cardSize / 1024.0);
Serial.println(" GB");
}
if (u8g2) {
u8g2->sendBuffer();
}
delay(3000);
#endif
delay(3000);
#ifdef HAS_DISPLAY
if (u8g2) {
u8g2->clearBuffer();
do {
u8g2->setCursor(0, 16);
u8g2->println( "Waiting to receive data");;
} while ( u8g2->nextPage() );
}
#endif
#endif
}
@ -426,3 +469,5 @@ void initBoard()

View file

@ -161,6 +161,52 @@
#define HAS_DISPLAY
#define HAS_SDCARD
#elif defined(LILYGO_T3_S3_E_PAPER_V_1_0)
#define I2C_SDA 18
#define I2C_SCL 17
#define OLED_RST UNUSE_PIN
#define EDP_BUSY_PIN 48
#define EDP_RSET_PIN 47
#define EDP_DC_PIN 16
#define EDP_CS_PIN 15
#define EDP_CLK_PIN 14 // CLK
#define EDP_MOSI_PIN 11 // MOSI
#define EDP_MISO_PIN -1
#define RADIO_SCLK_PIN 5
#define RADIO_MISO_PIN 3
#define RADIO_MOSI_PIN 6
#define RADIO_CS_PIN 7
#define RADIO_DIO1_PIN 33
#define RADIO_BUSY_PIN 34
#define RADIO_RST_PIN 8
//! SX1276/78 module only
#define RADIO_DIO0_PIN 9
#define RADIO_DIO3_PIN 21
#define RADIO_DIO4_PIN 10
#define RADIO_DIO5_PIN 36
//! end
#define SDCARD_MOSI EDP_MOSI_PIN
#define SDCARD_SCLK EDP_CLK_PIN
#define SDCARD_MISO 2
#define SDCARD_CS 13
#define BOARD_LED 37
#define LED_ON HIGH
#define BAT_ADC_PIN 1
#define BUTTON_PIN 0
#define HAS_SDCARD
#define EDP_DISPLAY
// #define HAS_DISPLAY
#else
#error "For the first use, please define the board version and model in <utilities. h>"
#endif

View file

@ -85,6 +85,18 @@ void setup()
u8g2->sendBuffer();
}
}
#endif
#ifdef EDP_DISPLAY
if (state != RADIOLIB_ERR_NONE)
{
display.setRotation(1);
display.fillScreen(GxEPD_WHITE);
display.setTextColor(GxEPD_BLACK);
display.setFont(&FreeMonoBold9pt7b);
display.setCursor(0, 15);
display.println("Initializing: FAIL!");
display.update();
}
#endif
if (state == RADIOLIB_ERR_NONE) {
Serial.println(F("success!"));
@ -162,6 +174,27 @@ void loop()
u8g2->drawStr(0, 54, buf);
u8g2->sendBuffer();
}
#endif
#ifdef EDP_DISPLAY
display.setRotation(1);
display.fillScreen(GxEPD_WHITE);
display.setTextColor(GxEPD_BLACK);
display.setFont(&FreeMonoBold9pt7b);
display.setCursor(0, 15);
display.println("[SX1262] Received:");
display.setCursor(0, 35);
display.println("DATA:");
display.setCursor(55, 35);
display.println(str);
display.setCursor(0, 55);
display.println("RSSI:");
display.setCursor(55, 55);
display.println(radio.getRSSI());
display.setCursor(0, 75);
display.println("SNR :");
display.setCursor(55, 75);
display.println(radio.getSNR());
display.update();
#endif
} else if (state == RADIOLIB_ERR_CRC_MISMATCH) {
// packet was received, but is malformed

View file

@ -7,7 +7,7 @@
#include <SD.h>
#include <FS.h>
#endif
SPIClass SDSPI(HSPI);
#ifdef HAS_DISPLAY
#include <U8g2lib.h>
@ -15,7 +15,23 @@
#define DISPLAY_MODEL U8G2_SSD1306_128X64_NONAME_F_HW_I2C
#endif
DISPLAY_MODEL *u8g2 = nullptr;
#elif defined(EDP_DISPLAY)
#include "Adafruit_GFX.h"
#include <Fonts/FreeMonoBold12pt7b.h>
#include <Fonts/FreeMonoBold18pt7b.h>
#include <Fonts/FreeMonoBold24pt7b.h>
#include <Fonts/FreeMonoBold9pt7b.h>
#include <GxEPD.h>
#include <GxIO/GxIO_SPI/GxIO_SPI.h>
#include <GxDEPG0213BN/GxDEPG0213BN.h> // 2.13" b/w form DKE GROUP
#include GxEPD_BitmapExamples
GxIO_Class io(SDSPI, EDP_CS_PIN, EDP_DC_PIN, EDP_RSET_PIN);
GxEPD_Class display(io, EDP_RSET_PIN, EDP_BUSY_PIN);
#endif
#ifndef OLED_WIRE_PORT
@ -309,9 +325,9 @@ void initBoard()
Serial.println("initBoard");
SPI.begin(RADIO_SCLK_PIN, RADIO_MISO_PIN, RADIO_MOSI_PIN);
#if defined(HAS_DISPLAY)
Wire.begin(I2C_SDA, I2C_SCL);
#endif
#ifdef I2C1_SDA
Wire1.begin(I2C1_SDA, I2C1_SCL);
@ -385,56 +401,87 @@ void initBoard()
#ifdef HAS_SDCARD
if (u8g2) {
#ifdef HAS_DISPLAY
if (u8g2)
{
u8g2->setFont(u8g2_font_ncenB08_tr);
}
#endif
pinMode(SDCARD_MISO, INPUT_PULLUP);
SDSPI.begin(SDCARD_SCLK, SDCARD_MISO, SDCARD_MOSI, SDCARD_CS);
if (u8g2) {
#ifdef EDP_DISPLAY
display.init();
display.setTextColor(GxEPD_BLACK);
delay(10);
display.setRotation(0);
delay(10);
display.fillScreen(GxEPD_WHITE);
delay(10);
display.drawExampleBitmap(BitmapExample1, 0, 0, GxEPD_WIDTH, GxEPD_HEIGHT, GxEPD_BLACK);
display.update();
Serial.println("EDP_MODE");
#endif
#ifdef HAS_DISPLAY
if (u8g2)
{
u8g2->clearBuffer();
}
if (!SD.begin(SDCARD_CS, SDSPI)) {
#endif
if (!SD.begin(SDCARD_CS, SDSPI))
{
Serial.println("setupSDCard FAIL");
if (u8g2) {
do {
u8g2->setCursor(0, 16);
u8g2->println( "SDCard FAILED");;
} while ( u8g2->nextPage() );
}
} else {
#ifdef HAS_DISPLAY
if (u8g2)
{
do
{
u8g2->setCursor(0, 16);
u8g2->println("SDCard FAILED");
;
} while (u8g2->nextPage());
}
#endif
}
else{
uint32_t cardSize = SD.cardSize() / (1024 * 1024);
if (u8g2) {
do {
u8g2->setCursor(0, 16);
u8g2->print( "SDCard:");;
u8g2->print(cardSize / 1024.0);;
u8g2->println(" GB");;
} while ( u8g2->nextPage() );
}
Serial.print("setupSDCard PASS . SIZE = ");
Serial.print(cardSize / 1024.0);
Serial.println(" GB");
#ifdef HAS_DISPLAY
if (u8g2)
{
do
{
u8g2->setCursor(0, 16);
u8g2->print("SDCard:");
u8g2->print(cardSize / 1024.0);
u8g2->println(" GB");
} while (u8g2->nextPage());
}
if (u8g2) {
if (u8g2)
{
u8g2->sendBuffer();
}
delay(3000);
#endif
}
delay(3000);
#ifdef HAS_DISPLAY
if (u8g2) {
if (u8g2)
{
u8g2->clearBuffer();
do {
do
{
u8g2->setCursor(0, 16);
u8g2->println( "Waiting to receive data");;
} while ( u8g2->nextPage() );
u8g2->println("Waiting to receive data");
;
} while (u8g2->nextPage());
}
#endif
#endif
}

View file

@ -233,6 +233,50 @@
#define HAS_SDCARD
#define HAS_DISPLAY
#elif defined(LILYGO_T3_S3_E_PAPER_V_1_0)
#define I2C_SDA 18
#define I2C_SCL 17
#define OLED_RST UNUSE_PIN
#define EDP_BUSY_PIN 48
#define EDP_RSET_PIN 47
#define EDP_DC_PIN 16
#define EDP_CS_PIN 15
#define EDP_CLK_PIN 14 // CLK
#define EDP_MOSI_PIN 11 // MOSI
#define EDP_MISO_PIN -1
#define RADIO_SCLK_PIN 5
#define RADIO_MISO_PIN 3
#define RADIO_MOSI_PIN 6
#define RADIO_CS_PIN 7
#define RADIO_DIO1_PIN 33
#define RADIO_BUSY_PIN 34
#define RADIO_RST_PIN 8
//! SX1276/78 module only
#define RADIO_DIO0_PIN 9
#define RADIO_DIO3_PIN 21
#define RADIO_DIO4_PIN 10
#define RADIO_DIO5_PIN 36
//! end
#define SDCARD_MOSI EDP_MOSI_PIN
#define SDCARD_SCLK EDP_CLK_PIN
#define SDCARD_MISO 2
#define SDCARD_CS 13
#define BOARD_LED 37
#define LED_ON HIGH
#define BAT_ADC_PIN 1
#define BUTTON_PIN 0
#define HAS_SDCARD
#define EDP_DISPLAY
// #define HAS_DISPLAY
#else
#error "For the first use, please define the board version and model in <utilities. h>"

View file

@ -66,6 +66,18 @@ void setup()
u8g2->sendBuffer();
}
}
#endif
#ifdef EDP_DISPLAY
if (state != RADIOLIB_ERR_NONE)
{
display.setRotation(1);
display.fillScreen(GxEPD_WHITE);
display.setTextColor(GxEPD_BLACK);
display.setFont(&FreeMonoBold9pt7b);
display.setCursor(0, 15);
display.println("Initializing: FAIL!");
display.update();
}
#endif
if (state == RADIOLIB_ERR_NONE) {
Serial.println(F("success!"));
@ -154,7 +166,15 @@ void loop()
u8g2->sendBuffer();
}
#endif
#ifdef EDP_DISPLAY
display.setRotation(1);
display.fillScreen(GxEPD_WHITE);
display.setTextColor(GxEPD_BLACK);
display.setFont(&FreeMonoBold9pt7b);
display.setCursor(0, 15);
display.println("Transmitting: OK!");
display.update();
#endif
// we're ready to send more packets,
// enable interrupt service routine

View file

@ -7,8 +7,9 @@
#include <SD.h>
#include <FS.h>
#endif
SPIClass SDSPI(HSPI);
#ifdef HAS_DISPLAY
#if defined(HAS_DISPLAY) && !defined(EDP_DISPLAY)
#include <U8g2lib.h>
#ifndef DISPLAY_MODEL
@ -16,6 +17,20 @@
#endif
DISPLAY_MODEL *u8g2 = nullptr;
#elif defined(EDP_DISPLAY)
#include "Adafruit_GFX.h"
#include <Fonts/FreeMonoBold12pt7b.h>
#include <Fonts/FreeMonoBold18pt7b.h>
#include <Fonts/FreeMonoBold24pt7b.h>
#include <Fonts/FreeMonoBold9pt7b.h>
#include <GxEPD.h>
#include <GxIO/GxIO_SPI/GxIO_SPI.h>
#include <GxDEPG0213BN/GxDEPG0213BN.h> // 2.13" b/w form DKE GROUP
#include GxEPD_BitmapExamples
GxIO_Class io(SDSPI, EDP_CS_PIN, EDP_DC_PIN, EDP_RSET_PIN);
GxEPD_Class display(io, EDP_RSET_PIN, EDP_BUSY_PIN);
#endif
#ifndef OLED_WIRE_PORT
@ -300,7 +315,6 @@ void disablePeripherals()
#define disablePeripherals()
#endif
SPIClass SDSPI(HSPI);
void initBoard()
@ -309,8 +323,9 @@ void initBoard()
Serial.println("initBoard");
SPI.begin(RADIO_SCLK_PIN, RADIO_MISO_PIN, RADIO_MOSI_PIN);
#if defined(HAS_DISPLAY)
Wire.begin(I2C_SDA, I2C_SCL);
#endif
#ifdef I2C1_SDA
@ -384,27 +399,48 @@ void initBoard()
#ifdef HAS_SDCARD
#ifdef HAS_DISPLAY
if (u8g2) {
u8g2->setFont(u8g2_font_ncenB08_tr);
}
#endif
pinMode(SDCARD_MISO, INPUT_PULLUP);
SDSPI.begin(SDCARD_SCLK, SDCARD_MISO, SDCARD_MOSI, SDCARD_CS);
#ifdef EDP_DISPLAY
display.init();
display.setTextColor(GxEPD_BLACK);
delay(10);
display.setRotation(0);
delay(10);
display.fillScreen(GxEPD_WHITE);
delay(10);
display.drawExampleBitmap(BitmapExample1, 0, 0, GxEPD_WIDTH, GxEPD_HEIGHT, GxEPD_BLACK);
display.update();
Serial.println("EDP_MODE");
#endif
#ifdef HAS_DISPLAY
if (u8g2) {
u8g2->clearBuffer();
}
#endif
if (!SD.begin(SDCARD_CS, SDSPI)) {
Serial.println("setupSDCard FAIL");
#ifdef HAS_DISPLAY
if (u8g2) {
do {
u8g2->setCursor(0, 16);
u8g2->println( "SDCard FAILED");;
} while ( u8g2->nextPage() );
}
#endif
} else {
uint32_t cardSize = SD.cardSize() / (1024 * 1024);
Serial.print("setupSDCard PASS . SIZE = ");
Serial.print(cardSize / 1024.0);
Serial.println(" GB");
#ifdef HAS_DISPLAY
if (u8g2) {
do {
u8g2->setCursor(0, 16);
@ -413,18 +449,23 @@ void initBoard()
u8g2->println(" GB");;
} while ( u8g2->nextPage() );
}
Serial.print("setupSDCard PASS . SIZE = ");
Serial.print(cardSize / 1024.0);
Serial.println(" GB");
}
if (u8g2) {
u8g2->sendBuffer();
}
delay(3000);
#endif
delay(3000);
#ifdef HAS_DISPLAY
if (u8g2) {
u8g2->clearBuffer();
do {
u8g2->setCursor(0, 16);
u8g2->println( "Waiting to receive data");;
} while ( u8g2->nextPage() );
}
#endif
#endif
}

View file

@ -233,6 +233,51 @@
#define HAS_SDCARD
#define HAS_DISPLAY
#elif defined(LILYGO_T3_S3_E_PAPER_V_1_0)
#define I2C_SDA 18
#define I2C_SCL 17
#define OLED_RST UNUSE_PIN
#define EDP_BUSY_PIN 48
#define EDP_RSET_PIN 47
#define EDP_DC_PIN 16
#define EDP_CS_PIN 15
#define EDP_CLK_PIN 14 // CLK
#define EDP_MOSI_PIN 11 // MOSI
#define EDP_MISO_PIN -1
#define RADIO_SCLK_PIN 5
#define RADIO_MISO_PIN 3
#define RADIO_MOSI_PIN 6
#define RADIO_CS_PIN 7
#define RADIO_DIO1_PIN 33
#define RADIO_BUSY_PIN 34
#define RADIO_RST_PIN 8
//! SX1276/78 module only
#define RADIO_DIO0_PIN 9
#define RADIO_DIO3_PIN 21
#define RADIO_DIO4_PIN 10
#define RADIO_DIO5_PIN 36
//! end
#define SDCARD_MOSI EDP_MOSI_PIN
#define SDCARD_SCLK EDP_CLK_PIN
#define SDCARD_MISO 2
#define SDCARD_CS 13
#define BOARD_LED 37
#define LED_ON HIGH
#define BAT_ADC_PIN 1
#define BUTTON_PIN 0
#define HAS_SDCARD
#define EDP_DISPLAY
// #define HAS_DISPLAY
#else
#error "For the first use, please define the board version and model in <utilities. h>"

View file

@ -67,6 +67,18 @@ void setup()
u8g2->sendBuffer();
}
}
#endif
#ifdef EDP_DISPLAY
if (state != RADIOLIB_ERR_NONE)
{
display.setRotation(1);
display.fillScreen(GxEPD_WHITE);
display.setTextColor(GxEPD_BLACK);
display.setFont(&FreeMonoBold9pt7b);
display.setCursor(0, 15);
display.println("Initializing: FAIL!");
display.update();
}
#endif
if (state == RADIOLIB_ERR_NONE) {
Serial.println(F("success!"));
@ -160,6 +172,27 @@ void loop()
u8g2->drawStr(0, 54, buf);
u8g2->sendBuffer();
}
#endif
#ifdef EDP_DISPLAY
display.setRotation(1);
display.fillScreen(GxEPD_WHITE);
display.setTextColor(GxEPD_BLACK);
display.setFont(&FreeMonoBold9pt7b);
display.setCursor(0, 15);
display.println("[SX1262] Received:");
display.setCursor(0, 35);
display.println("DATA:");
display.setCursor(55, 35);
display.println(str);
display.setCursor(0, 55);
display.println("RSSI:");
display.setCursor(55, 55);
display.println(radio.getRSSI());
display.setCursor(0, 75);
display.println("SNR :");
display.setCursor(55, 75);
display.println(radio.getSNR());
display.update();
#endif
} else if (state == RADIOLIB_ERR_CRC_MISMATCH) {
// packet was received, but is malformed

View file

@ -7,7 +7,7 @@
#include <SD.h>
#include <FS.h>
#endif
SPIClass SDSPI(HSPI);
#ifdef HAS_DISPLAY
#include <U8g2lib.h>
@ -16,6 +16,21 @@
#endif
DISPLAY_MODEL *u8g2 = nullptr;
#elif defined(EDP_DISPLAY)
#include "Adafruit_GFX.h"
#include <Fonts/FreeMonoBold12pt7b.h>
#include <Fonts/FreeMonoBold18pt7b.h>
#include <Fonts/FreeMonoBold24pt7b.h>
#include <Fonts/FreeMonoBold9pt7b.h>
#include <GxEPD.h>
#include <GxIO/GxIO_SPI/GxIO_SPI.h>
#include <GxDEPG0213BN/GxDEPG0213BN.h> // 2.13" b/w form DKE GROUP
#include GxEPD_BitmapExamples
GxIO_Class io(SDSPI, EDP_CS_PIN, EDP_DC_PIN, EDP_RSET_PIN);
GxEPD_Class display(io, EDP_RSET_PIN, EDP_BUSY_PIN);
#endif
#ifndef OLED_WIRE_PORT
@ -300,7 +315,7 @@ void disablePeripherals()
#define disablePeripherals()
#endif
SPIClass SDSPI(HSPI);
void initBoard()
@ -309,9 +324,9 @@ void initBoard()
Serial.println("initBoard");
SPI.begin(RADIO_SCLK_PIN, RADIO_MISO_PIN, RADIO_MOSI_PIN);
#if defined(HAS_DISPLAY)
Wire.begin(I2C_SDA, I2C_SCL);
#endif
#ifdef I2C1_SDA
Wire1.begin(I2C1_SDA, I2C1_SCL);
@ -376,57 +391,89 @@ void initBoard()
#endif
#ifdef HAS_SDCARD
if (u8g2) {
#ifdef HAS_DISPLAY
if (u8g2)
{
u8g2->setFont(u8g2_font_ncenB08_tr);
}
#endif
pinMode(SDCARD_MISO, INPUT_PULLUP);
SDSPI.begin(SDCARD_SCLK, SDCARD_MISO, SDCARD_MOSI, SDCARD_CS);
if (u8g2) {
#ifdef EDP_DISPLAY
display.init();
display.setTextColor(GxEPD_BLACK);
delay(10);
display.setRotation(0);
delay(10);
display.fillScreen(GxEPD_WHITE);
delay(10);
display.drawExampleBitmap(BitmapExample1, 0, 0, GxEPD_WIDTH, GxEPD_HEIGHT, GxEPD_BLACK);
display.update();
Serial.println("EDP_MODE");
#endif
#ifdef HAS_DISPLAY
if (u8g2)
{
u8g2->clearBuffer();
}
if (!SD.begin(SDCARD_CS, SDSPI)) {
#endif
if (!SD.begin(SDCARD_CS, SDSPI))
{
Serial.println("setupSDCard FAIL");
if (u8g2) {
do {
u8g2->setCursor(0, 16);
u8g2->println( "SDCard FAILED");;
} while ( u8g2->nextPage() );
}
} else {
#ifdef HAS_DISPLAY
if (u8g2)
{
do
{
u8g2->setCursor(0, 16);
u8g2->println("SDCard FAILED");
;
} while (u8g2->nextPage());
}
#endif
}
else{
uint32_t cardSize = SD.cardSize() / (1024 * 1024);
if (u8g2) {
do {
u8g2->setCursor(0, 16);
u8g2->print( "SDCard:");;
u8g2->print(cardSize / 1024.0);;
u8g2->println(" GB");;
} while ( u8g2->nextPage() );
}
Serial.print("setupSDCard PASS . SIZE = ");
Serial.print(cardSize / 1024.0);
Serial.println(" GB");
#ifdef HAS_DISPLAY
if (u8g2)
{
do
{
u8g2->setCursor(0, 16);
u8g2->print("SDCard:");
u8g2->print(cardSize / 1024.0);
u8g2->println(" GB");
} while (u8g2->nextPage());
}
if (u8g2) {
if (u8g2)
{
u8g2->sendBuffer();
}
delay(3000);
#endif
}
delay(3000);
#ifdef HAS_DISPLAY
if (u8g2) {
if (u8g2)
{
u8g2->clearBuffer();
do {
do
{
u8g2->setCursor(0, 16);
u8g2->println( "Waiting to receive data");;
} while ( u8g2->nextPage() );
u8g2->println("Waiting to receive data");
;
} while (u8g2->nextPage());
}
#endif
#endif
}

View file

@ -153,6 +153,51 @@
#define HAS_DISPLAY
#define HAS_SDCARD
#elif defined(LILYGO_T3_S3_E_PAPER_V_1_0)
#define I2C_SDA 18
#define I2C_SCL 17
#define OLED_RST UNUSE_PIN
#define EDP_BUSY_PIN 48
#define EDP_RSET_PIN 47
#define EDP_DC_PIN 16
#define EDP_CS_PIN 15
#define EDP_CLK_PIN 14 // CLK
#define EDP_MOSI_PIN 11 // MOSI
#define EDP_MISO_PIN -1
#define RADIO_SCLK_PIN 5
#define RADIO_MISO_PIN 3
#define RADIO_MOSI_PIN 6
#define RADIO_CS_PIN 7
#define RADIO_DIO1_PIN 33
#define RADIO_BUSY_PIN 34
#define RADIO_RST_PIN 8
//! SX1276/78 module only
#define RADIO_DIO0_PIN 9
#define RADIO_DIO3_PIN 21
#define RADIO_DIO4_PIN 10
#define RADIO_DIO5_PIN 36
//! end
#define SDCARD_MOSI EDP_MOSI_PIN
#define SDCARD_SCLK EDP_CLK_PIN
#define SDCARD_MISO 2
#define SDCARD_CS 13
#define BOARD_LED 37
#define LED_ON HIGH
#define BAT_ADC_PIN 1
#define BUTTON_PIN 0
#define HAS_SDCARD
#define EDP_DISPLAY
// #define HAS_DISPLAY
#else
#error "For the first use, please define the board version and model in <utilities. h>"
#endif

View file

@ -62,6 +62,8 @@ void setup()
#else
int state = radio.begin(LoRa_frequency);
#endif
#ifdef HAS_DISPLAY
if (u8g2) {
if (state != RADIOLIB_ERR_NONE) {
u8g2->clearBuffer();
@ -69,7 +71,19 @@ void setup()
u8g2->sendBuffer();
}
}
#endif
#ifdef EDP_DISPLAY
if (state != RADIOLIB_ERR_NONE)
{
display.setRotation(1);
display.fillScreen(GxEPD_WHITE);
display.setTextColor(GxEPD_BLACK);
display.setFont(&FreeMonoBold9pt7b);
display.setCursor(0, 15);
display.println("Initializing: FAIL!");
display.update();
}
#endif
if (state == RADIOLIB_ERR_NONE) {
Serial.println(F("success!"));
radio.setOutputPower(17);
@ -165,7 +179,27 @@ void loop()
u8g2->sendBuffer();
}
#endif
#ifdef EDP_DISPLAY
display.setRotation(1);
display.fillScreen(GxEPD_WHITE);
display.setTextColor(GxEPD_BLACK);
display.setFont(&FreeMonoBold9pt7b);
display.setCursor(0, 15);
display.println("[SX1262] Received:");
display.setCursor(0, 35);
display.println("DATA:");
display.setCursor(55, 35);
display.println(str);
display.setCursor(0, 55);
display.println("RSSI:");
display.setCursor(55, 55);
display.println(radio.getRSSI());
display.setCursor(0, 75);
display.println("SNR :");
display.setCursor(55, 75);
display.println(radio.getSNR());
display.update();
#endif
} else if (state == RADIOLIB_ERR_CRC_MISMATCH) {
// packet was received, but is malformed
Serial.println(F("[SX1278] CRC error!"));

View file

@ -7,7 +7,7 @@
#include <SD.h>
#include <FS.h>
#endif
SPIClass SDSPI(HSPI);
#ifdef HAS_DISPLAY
#include <U8g2lib.h>
@ -16,6 +16,21 @@
#endif
DISPLAY_MODEL *u8g2 = nullptr;
#elif defined(EDP_DISPLAY)
#include "Adafruit_GFX.h"
#include <Fonts/FreeMonoBold12pt7b.h>
#include <Fonts/FreeMonoBold18pt7b.h>
#include <Fonts/FreeMonoBold24pt7b.h>
#include <Fonts/FreeMonoBold9pt7b.h>
#include <GxEPD.h>
#include <GxIO/GxIO_SPI/GxIO_SPI.h>
#include <GxDEPG0213BN/GxDEPG0213BN.h> // 2.13" b/w form DKE GROUP
#include GxEPD_BitmapExamples
GxIO_Class io(SDSPI, EDP_CS_PIN, EDP_DC_PIN, EDP_RSET_PIN);
GxEPD_Class display(io, EDP_RSET_PIN, EDP_BUSY_PIN);
#endif
#ifndef OLED_WIRE_PORT
@ -309,9 +324,9 @@ void initBoard()
Serial.println("initBoard");
SPI.begin(RADIO_SCLK_PIN, RADIO_MISO_PIN, RADIO_MOSI_PIN);
#if defined(HAS_DISPLAY)
Wire.begin(I2C_SDA, I2C_SCL);
#endif
#ifdef I2C1_SDA
Wire1.begin(I2C1_SDA, I2C1_SCL);
@ -377,56 +392,87 @@ void initBoard()
#ifdef HAS_SDCARD
if (u8g2) {
#ifdef HAS_DISPLAY
if (u8g2)
{
u8g2->setFont(u8g2_font_ncenB08_tr);
}
#endif
pinMode(SDCARD_MISO, INPUT_PULLUP);
SDSPI.begin(SDCARD_SCLK, SDCARD_MISO, SDCARD_MOSI, SDCARD_CS);
if (u8g2) {
#ifdef EDP_DISPLAY
display.init();
display.setTextColor(GxEPD_BLACK);
delay(10);
display.setRotation(0);
delay(10);
display.fillScreen(GxEPD_WHITE);
delay(10);
display.drawExampleBitmap(BitmapExample1, 0, 0, GxEPD_WIDTH, GxEPD_HEIGHT, GxEPD_BLACK);
display.update();
Serial.println("EDP_MODE");
#endif
#ifdef HAS_DISPLAY
if (u8g2)
{
u8g2->clearBuffer();
}
if (!SD.begin(SDCARD_CS, SDSPI)) {
#endif
if (!SD.begin(SDCARD_CS, SDSPI))
{
Serial.println("setupSDCard FAIL");
if (u8g2) {
do {
u8g2->setCursor(0, 16);
u8g2->println( "SDCard FAILED");;
} while ( u8g2->nextPage() );
}
} else {
#ifdef HAS_DISPLAY
if (u8g2)
{
do
{
u8g2->setCursor(0, 16);
u8g2->println("SDCard FAILED");
;
} while (u8g2->nextPage());
}
#endif
}
else{
uint32_t cardSize = SD.cardSize() / (1024 * 1024);
if (u8g2) {
do {
u8g2->setCursor(0, 16);
u8g2->print( "SDCard:");;
u8g2->print(cardSize / 1024.0);;
u8g2->println(" GB");;
} while ( u8g2->nextPage() );
}
Serial.print("setupSDCard PASS . SIZE = ");
Serial.print(cardSize / 1024.0);
Serial.println(" GB");
#ifdef HAS_DISPLAY
if (u8g2)
{
do
{
u8g2->setCursor(0, 16);
u8g2->print("SDCard:");
u8g2->print(cardSize / 1024.0);
u8g2->println(" GB");
} while (u8g2->nextPage());
}
if (u8g2) {
if (u8g2)
{
u8g2->sendBuffer();
}
delay(3000);
#endif
}
delay(3000);
#ifdef HAS_DISPLAY
if (u8g2) {
if (u8g2)
{
u8g2->clearBuffer();
do {
do
{
u8g2->setCursor(0, 16);
u8g2->println( "Waiting to receive data");;
} while ( u8g2->nextPage() );
u8g2->println("Waiting to receive data");
;
} while (u8g2->nextPage());
}
#endif
#endif
}

View file

@ -153,6 +153,51 @@
#define HAS_DISPLAY
#define HAS_SDCARD
#elif defined(LILYGO_T3_S3_E_PAPER_V_1_0)
#define I2C_SDA 18
#define I2C_SCL 17
#define OLED_RST UNUSE_PIN
#define EDP_BUSY_PIN 48
#define EDP_RSET_PIN 47
#define EDP_DC_PIN 16
#define EDP_CS_PIN 15
#define EDP_CLK_PIN 14 // CLK
#define EDP_MOSI_PIN 11 // MOSI
#define EDP_MISO_PIN -1
#define RADIO_SCLK_PIN 5
#define RADIO_MISO_PIN 3
#define RADIO_MOSI_PIN 6
#define RADIO_CS_PIN 7
#define RADIO_DIO1_PIN 33
#define RADIO_BUSY_PIN 34
#define RADIO_RST_PIN 8
//! SX1276/78 module only
#define RADIO_DIO0_PIN 9
#define RADIO_DIO3_PIN 21
#define RADIO_DIO4_PIN 10
#define RADIO_DIO5_PIN 36
//! end
#define SDCARD_MOSI EDP_MOSI_PIN
#define SDCARD_SCLK EDP_CLK_PIN
#define SDCARD_MISO 2
#define SDCARD_CS 13
#define BOARD_LED 37
#define LED_ON HIGH
#define BAT_ADC_PIN 1
#define BUTTON_PIN 0
#define HAS_SDCARD
#define EDP_DISPLAY
// #define HAS_DISPLAY
#else
#error "For the first use, please define the board version and model in <utilities. h>"
#endif

View file

@ -43,6 +43,18 @@ void setup()
u8g2->sendBuffer();
}
}
#endif
#ifdef EDP_DISPLAY
if (state != RADIOLIB_ERR_NONE)
{
display.setRotation(1);
display.fillScreen(GxEPD_WHITE);
display.setTextColor(GxEPD_BLACK);
display.setFont(&FreeMonoBold9pt7b);
display.setCursor(0, 15);
display.println("Initializing: FAIL!");
display.update();
}
#endif
if (state == RADIOLIB_ERR_NONE) {
Serial.println(F("success!"));
@ -91,6 +103,15 @@ void loop()
u8g2->drawStr(5, 30, buf);
u8g2->sendBuffer();
}
#endif
#ifdef EDP_DISPLAY
display.setRotation(1);
display.fillScreen(GxEPD_WHITE);
display.setTextColor(GxEPD_BLACK);
display.setFont(&FreeMonoBold9pt7b);
display.setCursor(0, 15);
display.println("Transmitting: OK!");
display.update();
#endif
} else if (state == RADIOLIB_ERR_PACKET_TOO_LONG) {
// the supplied packet was longer than 256 bytes

View file

@ -7,8 +7,8 @@
#include <SD.h>
#include <FS.h>
#endif
#ifdef HAS_DISPLAY
SPIClass SDSPI(HSPI);
#if defined(HAS_DISPLAY) && !defined(EDP_DISPLAY)
#include <U8g2lib.h>
#ifndef DISPLAY_MODEL
@ -16,6 +16,19 @@
#endif
DISPLAY_MODEL *u8g2 = nullptr;
#elif defined(EDP_DISPLAY)
#include "Adafruit_GFX.h"
#include <Fonts/FreeMonoBold12pt7b.h>
#include <Fonts/FreeMonoBold18pt7b.h>
#include <Fonts/FreeMonoBold24pt7b.h>
#include <Fonts/FreeMonoBold9pt7b.h>
#include <GxEPD.h>
#include <GxIO/GxIO_SPI/GxIO_SPI.h>
#include <GxDEPG0213BN/GxDEPG0213BN.h> // 2.13" b/w form DKE GROUP
#include GxEPD_BitmapExamples
GxIO_Class io(SDSPI, EDP_CS_PIN, EDP_DC_PIN, EDP_RSET_PIN);
GxEPD_Class display(io, EDP_RSET_PIN, EDP_BUSY_PIN);
#endif
#ifndef OLED_WIRE_PORT
@ -300,8 +313,6 @@ void disablePeripherals()
#define disablePeripherals()
#endif
SPIClass SDSPI(HSPI);
void initBoard()
{
@ -309,9 +320,9 @@ void initBoard()
Serial.println("initBoard");
SPI.begin(RADIO_SCLK_PIN, RADIO_MISO_PIN, RADIO_MOSI_PIN);
#if defined(HAS_DISPLAY)
Wire.begin(I2C_SDA, I2C_SCL);
#endif
#ifdef I2C1_SDA
Wire1.begin(I2C1_SDA, I2C1_SCL);
@ -377,27 +388,48 @@ void initBoard()
#ifdef HAS_SDCARD
#ifdef HAS_DISPLAY
if (u8g2) {
u8g2->setFont(u8g2_font_ncenB08_tr);
}
#endif
pinMode(SDCARD_MISO, INPUT_PULLUP);
SDSPI.begin(SDCARD_SCLK, SDCARD_MISO, SDCARD_MOSI, SDCARD_CS);
#ifdef EDP_DISPLAY
display.init();
display.setTextColor(GxEPD_BLACK);
delay(10);
display.setRotation(0);
delay(10);
display.fillScreen(GxEPD_WHITE);
delay(10);
display.drawExampleBitmap(BitmapExample1, 0, 0, GxEPD_WIDTH, GxEPD_HEIGHT, GxEPD_BLACK);
display.update();
Serial.println("EDP_MODE");
#endif
#ifdef HAS_DISPLAY
if (u8g2) {
u8g2->clearBuffer();
}
#endif
if (!SD.begin(SDCARD_CS, SDSPI)) {
Serial.println("setupSDCard FAIL");
#ifdef HAS_DISPLAY
if (u8g2) {
do {
u8g2->setCursor(0, 16);
u8g2->println( "SDCard FAILED");;
} while ( u8g2->nextPage() );
}
} else {
#endif
} else {
uint32_t cardSize = SD.cardSize() / (1024 * 1024);
Serial.print("setupSDCard PASS . SIZE = ");
Serial.print(cardSize / 1024.0);
Serial.println(" GB");
#ifdef HAS_DISPLAY
if (u8g2) {
do {
u8g2->setCursor(0, 16);
@ -406,14 +438,11 @@ void initBoard()
u8g2->println(" GB");;
} while ( u8g2->nextPage() );
}
Serial.print("setupSDCard PASS . SIZE = ");
Serial.print(cardSize / 1024.0);
Serial.println(" GB");
}
if (u8g2) {
u8g2->sendBuffer();
}
#endif
delay(3000);
#endif

View file

@ -188,6 +188,49 @@
#define HAS_SDCARD
#define HAS_DISPLAY
#elif defined(LILYGO_T3_S3_E_PAPER_V_1_0)
#define I2C_SDA 18
#define I2C_SCL 17
#define OLED_RST UNUSE_PIN
#define EDP_BUSY_PIN 48
#define EDP_RSET_PIN 47
#define EDP_DC_PIN 16
#define EDP_CS_PIN 15
#define EDP_CLK_PIN 14 // CLK
#define EDP_MOSI_PIN 11 // MOSI
#define EDP_MISO_PIN -1
#define RADIO_SCLK_PIN 5
#define RADIO_MISO_PIN 3
#define RADIO_MOSI_PIN 6
#define RADIO_CS_PIN 7
#define RADIO_DIO1_PIN 33
#define RADIO_BUSY_PIN 34
#define RADIO_RST_PIN 8
//! SX1276/78 module only
#define RADIO_DIO0_PIN 9
#define RADIO_DIO3_PIN 21
#define RADIO_DIO4_PIN 10
#define RADIO_DIO5_PIN 36
//! end
#define SDCARD_MOSI EDP_MOSI_PIN
#define SDCARD_SCLK EDP_CLK_PIN
#define SDCARD_MISO 2
#define SDCARD_CS 13
#define BOARD_LED 37
#define LED_ON HIGH
#define BAT_ADC_PIN 1
#define BUTTON_PIN 0
#define HAS_SDCARD
#define EDP_DISPLAY
// #define HAS_DISPLAY
#else
#error "For the first use, please define the board version and model in <utilities. h>"
@ -198,6 +241,3 @@

View file

@ -68,6 +68,17 @@ void setup()
u8g2->sendBuffer();
}
}
#endif
#ifdef EDP_DISPLAY
if (state != RADIOLIB_ERR_NONE) {
display.setRotation(1);
display.fillScreen(GxEPD_WHITE);
display.setTextColor(GxEPD_BLACK);
display.setFont(&FreeMonoBold9pt7b);
display.setCursor(0, 15);
display.println("Initializing: FAIL!");
display.update();
}
#endif
if (state == RADIOLIB_ERR_NONE) {
Serial.println(F("success!"));
@ -129,7 +140,15 @@ void loop()
u8g2->sendBuffer();
}
#endif
#ifdef EDP_DISPLAY
display.setRotation(1);
display.fillScreen(GxEPD_WHITE);
display.setTextColor(GxEPD_BLACK);
display.setFont(&FreeMonoBold9pt7b);
display.setCursor(0, 15);
display.println("Transmitting: OK!");
display.update();
#endif
} else {
Serial.print(F("failed, code "));
Serial.println(transmissionState);

View file

@ -7,8 +7,9 @@
#include <SD.h>
#include <FS.h>
#endif
SPIClass SDSPI(HSPI);
#ifdef HAS_DISPLAY
#if defined(HAS_DISPLAY) && !defined(EDP_DISPLAY)
#include <U8g2lib.h>
#ifndef DISPLAY_MODEL
@ -16,8 +17,21 @@
#endif
DISPLAY_MODEL *u8g2 = nullptr;
#endif
#elif defined(EDP_DISPLAY)
#include "Adafruit_GFX.h"
#include <Fonts/FreeMonoBold12pt7b.h>
#include <Fonts/FreeMonoBold18pt7b.h>
#include <Fonts/FreeMonoBold24pt7b.h>
#include <Fonts/FreeMonoBold9pt7b.h>
#include <GxEPD.h>
#include <GxIO/GxIO_SPI/GxIO_SPI.h>
#include <GxDEPG0213BN/GxDEPG0213BN.h> // 2.13" b/w form DKE GROUP
#include GxEPD_BitmapExamples
GxIO_Class io(SDSPI, EDP_CS_PIN, EDP_DC_PIN, EDP_RSET_PIN);
GxEPD_Class display(io, EDP_RSET_PIN, EDP_BUSY_PIN);
#endif
#ifndef OLED_WIRE_PORT
#define OLED_WIRE_PORT Wire
#endif
@ -309,9 +323,9 @@ void initBoard()
Serial.println("initBoard");
SPI.begin(RADIO_SCLK_PIN, RADIO_MISO_PIN, RADIO_MOSI_PIN);
#if defined(HAS_DISPLAY)
Wire.begin(I2C_SDA, I2C_SCL);
#endif
#ifdef I2C1_SDA
Wire1.begin(I2C1_SDA, I2C1_SCL);
@ -319,7 +333,6 @@ void initBoard()
#ifdef HAS_GPS
Serial1.begin(GPS_BAUD_RATE, SERIAL_8N1, GPS_RX_PIN, GPS_TX_PIN);
#endif
@ -376,28 +389,50 @@ void initBoard()
#endif
#ifdef HAS_SDCARD
#ifdef HAS_DISPLAY
if (u8g2) {
u8g2->setFont(u8g2_font_ncenB08_tr);
}
#endif
pinMode(SDCARD_MISO, INPUT_PULLUP);
SDSPI.begin(SDCARD_SCLK, SDCARD_MISO, SDCARD_MOSI, SDCARD_CS);
#ifdef EDP_DISPLAY
display.init();
display.setTextColor(GxEPD_BLACK);
delay(10);
display.setRotation(0);
delay(10);
display.fillScreen(GxEPD_WHITE);
delay(10);
display.drawExampleBitmap(BitmapExample1, 0, 0, GxEPD_WIDTH, GxEPD_HEIGHT, GxEPD_BLACK);
display.update();
Serial.println("EDP_MODE");
#endif
#ifdef HAS_DISPLAY
if (u8g2) {
u8g2->clearBuffer();
}
#endif
if (!SD.begin(SDCARD_CS, SDSPI)) {
Serial.println("setupSDCard FAIL");
#ifdef HAS_DISPLAY
if (u8g2) {
do {
u8g2->setCursor(0, 16);
u8g2->println( "SDCard FAILED");;
} while ( u8g2->nextPage() );
}
#endif
} else {
uint32_t cardSize = SD.cardSize() / (1024 * 1024);
Serial.print("setupSDCard PASS . SIZE = ");
Serial.print(cardSize / 1024.0);
Serial.println(" GB");
#ifdef HAS_DISPLAY
if (u8g2) {
do {
u8g2->setCursor(0, 16);
@ -406,14 +441,11 @@ void initBoard()
u8g2->println(" GB");;
} while ( u8g2->nextPage() );
}
Serial.print("setupSDCard PASS . SIZE = ");
Serial.print(cardSize / 1024.0);
Serial.println(" GB");
}
if (u8g2) {
u8g2->sendBuffer();
}
#endif
delay(3000);
#endif

View file

@ -188,6 +188,49 @@
#define HAS_SDCARD
#define HAS_DISPLAY
#elif defined(LILYGO_T3_S3_E_PAPER_V_1_0)
#define I2C_SDA 18
#define I2C_SCL 17
#define OLED_RST UNUSE_PIN
#define EDP_BUSY_PIN 48
#define EDP_RSET_PIN 47
#define EDP_DC_PIN 16
#define EDP_CS_PIN 15
#define EDP_CLK_PIN 14 // CLK
#define EDP_MOSI_PIN 11 // MOSI
#define EDP_MISO_PIN -1
#define RADIO_SCLK_PIN 5
#define RADIO_MISO_PIN 3
#define RADIO_MOSI_PIN 6
#define RADIO_CS_PIN 7
#define RADIO_DIO1_PIN 33
#define RADIO_BUSY_PIN 34
#define RADIO_RST_PIN 8
//! SX1276/78 module only
#define RADIO_DIO0_PIN 9
#define RADIO_DIO3_PIN 21
#define RADIO_DIO4_PIN 10
#define RADIO_DIO5_PIN 36
//! end
#define SDCARD_MOSI EDP_MOSI_PIN
#define SDCARD_SCLK EDP_CLK_PIN
#define SDCARD_MISO 2
#define SDCARD_CS 13
#define BOARD_LED 37
#define LED_ON HIGH
#define BAT_ADC_PIN 1
#define BUTTON_PIN 0
#define HAS_SDCARD
#define EDP_DISPLAY
// #define HAS_DISPLAY
#else
#error "For the first use, please define the board version and model in <utilities. h>"
@ -200,4 +243,3 @@

View file

@ -9,13 +9,29 @@
#include <FS.h>
#endif
SPIClass SDSPI(HSPI);
#ifdef HAS_DISPLAY
#include <U8g2lib.h>
U8G2_SSD1306_128X64_NONAME_F_HW_I2C *u8g2 = nullptr;
#elif defined(EDP_DISPLAY)
#include "Adafruit_GFX.h"
#include <Fonts/FreeMonoBold12pt7b.h>
#include <Fonts/FreeMonoBold18pt7b.h>
#include <Fonts/FreeMonoBold24pt7b.h>
#include <Fonts/FreeMonoBold9pt7b.h>
#include <GxEPD.h>
#include <GxIO/GxIO_SPI/GxIO_SPI.h>
#include <GxDEPG0213BN/GxDEPG0213BN.h> // 2.13" b/w form DKE GROUP
#include GxEPD_BitmapExamples
GxIO_Class io(SDSPI, EDP_CS_PIN, EDP_DC_PIN, EDP_RSET_PIN);
GxEPD_Class display(io, EDP_RSET_PIN, EDP_BUSY_PIN);
#endif
Ticker ledTicker;
SPIClass SDSPI(HSPI);
void initBoard()
@ -23,8 +39,9 @@ void initBoard()
Serial.begin(115200);
Serial.println("initBoard");
SPI.begin(RADIO_SCLK_PIN, RADIO_MISO_PIN, RADIO_MOSI_PIN);
#if defined(HAS_DISPLAY)
Wire.begin(I2C_SDA, I2C_SCL);
#endif
#ifdef HAS_GPS
Serial1.begin(GPS_BAUD_RATE, SERIAL_8N1, GPS_RX_PIN, GPS_TX_PIN);
@ -84,48 +101,77 @@ void initBoard()
#ifdef HAS_SDCARD
if (u8g2) {
#ifdef HAS_DISPLAY
if (u8g2)
{
u8g2->setFont(u8g2_font_ncenB08_tr);
}
#endif
pinMode(SDCARD_MISO, INPUT_PULLUP);
SDSPI.begin(SDCARD_SCLK, SDCARD_MISO, SDCARD_MOSI, SDCARD_CS);
if (u8g2) {
#ifdef EDP_DISPLAY
display.init();
display.setTextColor(GxEPD_BLACK);
delay(10);
display.setRotation(2);
delay(10);
display.fillScreen(GxEPD_WHITE);
delay(10);
display.drawExampleBitmap(gImage_pkq, 0, 0, GxEPD_WIDTH, GxEPD_HEIGHT, GxEPD_WHITE);
display.update();
delay(1000);
display.drawExampleBitmap(gImage_wine, 0, 0, GxEPD_WIDTH, GxEPD_HEIGHT, GxEPD_BLACK);
display.update();
delay(1000);
display.drawExampleBitmap(LILYGO_logo, 0, 0, GxEPD_WIDTH, GxEPD_HEIGHT, GxEPD_BLACK);
display.update();
Serial.println("EDP_MODE");
#endif
#ifdef HAS_DISPLAY
if (u8g2)
{
u8g2->clearBuffer();
}
#endif
if (!SD.begin(SDCARD_CS, SDSPI)) {
Serial.println("setupSDCard FAIL");
if (u8g2) {
do {
#ifdef HAS_DISPLAY
if (u8g2)
{
do
{
u8g2->setCursor(0, 16);
u8g2->println( "SDCard FAILED");;
} while ( u8g2->nextPage() );
u8g2->println("SDCard FAILED");
;
} while (u8g2->nextPage());
}
} else {
#endif
} else {
uint32_t cardSize = SD.cardSize() / (1024 * 1024);
if (u8g2) {
do {
u8g2->setCursor(0, 16);
u8g2->print( "SDCard:");;
u8g2->print(cardSize / 1024.0);;
u8g2->println(" GB");;
} while ( u8g2->nextPage() );
}
Serial.print("setupSDCard PASS . SIZE = ");
Serial.print(cardSize / 1024.0);
Serial.println(" GB");
}
if (u8g2) {
u8g2->sendBuffer();
}
#ifdef HAS_DISPLAY
if (u8g2)
{
do
{
u8g2->setCursor(0, 16);
u8g2->print("SDCard:");
u8g2->print(cardSize / 1024.0);
u8g2->println(" GB");
} while (u8g2->nextPage());
}
if (u8g2)
{
u8g2->sendBuffer();
}
#endif
delay(3000);
#endif
}
}

View file

@ -59,6 +59,7 @@ void setup()
// initialize SX1280 with default settings
Serial.print(F("[SX1280] Initializing ... "));
int state = radio.begin();
#ifdef HAS_DISPLAY
if (u8g2) {
if (state != RADIOLIB_ERR_NONE) {
u8g2->clearBuffer();
@ -66,6 +67,19 @@ void setup()
u8g2->sendBuffer();
}
}
#endif
#ifdef EDP_DISPLAY
if (state != RADIOLIB_ERR_NONE)
{
display.setRotation(1);
display.fillScreen(GxEPD_WHITE);
display.setTextColor(GxEPD_BLACK);
display.setFont(&FreeMonoBold9pt7b);
display.setCursor(0, 15);
display.println("Initializing: FAIL!");
display.update();
}
#endif
if (state == RADIOLIB_ERR_NONE) {
Serial.println(F("success!"));
@ -177,11 +191,12 @@ void loop()
Serial.println(F(" dB"));
#ifdef HAS_DISPLAY
if (u8g2) {
if (u8g2)
{
u8g2->clearBuffer();
char buf[256];
u8g2->drawStr(0, 12, "Received OK!");
snprintf(buf, sizeof(buf), "RX:%u", counter);
snprintf(buf, sizeof(buf), "RX:%s", str);
u8g2->drawStr(0, 26, buf);
snprintf(buf, sizeof(buf), "RSSI:%.2f", radio.getRSSI());
u8g2->drawStr(0, 40, buf);
@ -190,6 +205,27 @@ void loop()
u8g2->sendBuffer();
}
#endif
#ifdef EDP_DISPLAY
display.setRotation(1);
display.fillScreen(GxEPD_WHITE);
display.setTextColor(GxEPD_BLACK);
display.setFont(&FreeMonoBold9pt7b);
display.setCursor(0, 15);
display.println("[SX1262] Received:");
display.setCursor(0, 35);
display.println("DATA:");
display.setCursor(55, 35);
display.println(counter);
display.setCursor(0, 55);
display.println("RSSI:");
display.setCursor(55, 55);
display.println(radio.getRSSI());
display.setCursor(0, 75);
display.println("SNR :");
display.setCursor(55, 75);
display.println(radio.getSNR());
display.update();
#endif
} else if (state == RADIOLIB_ERR_CRC_MISMATCH) {
// packet was received, but is malformed

View file

@ -8,12 +8,33 @@
#include <SD.h>
#include <FS.h>
#endif
SPIClass SDSPI(HSPI);
#ifdef HAS_DISPLAY
#include <U8g2lib.h>
U8G2_SSD1306_128X64_NONAME_F_HW_I2C *u8g2 = nullptr;
#ifndef DISPLAY_MODEL
#define DISPLAY_MODEL U8G2_SSD1306_128X64_NONAME_F_HW_I2C
#endif
DISPLAY_MODEL *u8g2 = nullptr;
#elif defined(EDP_DISPLAY)
#include "Adafruit_GFX.h"
#include <Fonts/FreeMonoBold12pt7b.h>
#include <Fonts/FreeMonoBold18pt7b.h>
#include <Fonts/FreeMonoBold24pt7b.h>
#include <Fonts/FreeMonoBold9pt7b.h>
#include <GxEPD.h>
#include <GxIO/GxIO_SPI/GxIO_SPI.h>
#include <GxDEPG0213BN/GxDEPG0213BN.h> // 2.13" b/w form DKE GROUP
#include GxEPD_BitmapExamples
GxIO_Class io(SDSPI, EDP_CS_PIN, EDP_DC_PIN, EDP_RSET_PIN);
GxEPD_Class display(io, EDP_RSET_PIN, EDP_BUSY_PIN);
#endif
Ticker ledTicker;
#if defined(LILYGO_TBeam_V1_X)
#include <axp20x.h>
@ -100,7 +121,10 @@ void initBoard()
Serial.begin(115200);
Serial.println("initBoard");
SPI.begin(RADIO_SCLK_PIN, RADIO_MISO_PIN, RADIO_MOSI_PIN);
#if defined(HAS_DISPLAY)
Wire.begin(I2C_SDA, I2C_SCL);
#endif
#ifdef HAS_GPS
@ -164,55 +188,87 @@ void initBoard()
#ifdef HAS_SDCARD
if (u8g2) {
#ifdef HAS_DISPLAY
if (u8g2)
{
u8g2->setFont(u8g2_font_ncenB08_tr);
}
#endif
pinMode(SDCARD_MISO, INPUT_PULLUP);
SDSPI.begin(SDCARD_SCLK, SDCARD_MISO, SDCARD_MOSI, SDCARD_CS);
if (u8g2) {
#ifdef EDP_DISPLAY
display.init();
display.setTextColor(GxEPD_BLACK);
delay(10);
display.setRotation(0);
delay(10);
display.fillScreen(GxEPD_WHITE);
delay(10);
display.drawExampleBitmap(BitmapExample1, 0, 0, GxEPD_WIDTH, GxEPD_HEIGHT, GxEPD_BLACK);
display.update();
Serial.println("EDP_MODE");
#endif
#ifdef HAS_DISPLAY
if (u8g2)
{
u8g2->clearBuffer();
}
if (!SD.begin(SDCARD_CS, SDSPI)) {
#endif
if (!SD.begin(SDCARD_CS, SDSPI))
{
Serial.println("setupSDCard FAIL");
if (u8g2) {
do {
u8g2->setCursor(0, 16);
u8g2->println( "SDCard FAILED");;
} while ( u8g2->nextPage() );
}
} else {
#ifdef HAS_DISPLAY
if (u8g2)
{
do
{
u8g2->setCursor(0, 16);
u8g2->println("SDCard FAILED");
;
} while (u8g2->nextPage());
}
#endif
}
else{
uint32_t cardSize = SD.cardSize() / (1024 * 1024);
if (u8g2) {
do {
u8g2->setCursor(0, 16);
u8g2->print( "SDCard:");;
u8g2->print(cardSize / 1024.0);;
u8g2->println(" GB");;
} while ( u8g2->nextPage() );
}
Serial.print("setupSDCard PASS . SIZE = ");
Serial.print(cardSize / 1024.0);
Serial.println(" GB");
#ifdef HAS_DISPLAY
if (u8g2)
{
do
{
u8g2->setCursor(0, 16);
u8g2->print("SDCard:");
u8g2->print(cardSize / 1024.0);
u8g2->println(" GB");
} while (u8g2->nextPage());
}
if (u8g2) {
if (u8g2)
{
u8g2->sendBuffer();
}
delay(3000);
#endif
if (u8g2) {
u8g2->clearBuffer();
do {
u8g2->setCursor(0, 16);
u8g2->println( "Waiting to receive data");;
} while ( u8g2->nextPage() );
}
delay(3000);
#ifdef HAS_DISPLAY
if (u8g2)
{
u8g2->clearBuffer();
do
{
u8g2->setCursor(0, 16);
u8g2->println("Waiting to receive data");
;
} while (u8g2->nextPage());
}
#endif
#endif
}

View file

@ -238,6 +238,51 @@
#define HAS_SDCARD
#define HAS_DISPLAY
#elif defined(LILYGO_T3_S3_E_PAPER_V_1_0)
#define I2C_SDA 18
#define I2C_SCL 17
#define OLED_RST UNUSE_PIN
#define EDP_BUSY_PIN 48
#define EDP_RSET_PIN 47
#define EDP_DC_PIN 16
#define EDP_CS_PIN 15
#define EDP_CLK_PIN 14 // CLK
#define EDP_MOSI_PIN 11 // MOSI
#define EDP_MISO_PIN -1
#define RADIO_SCLK_PIN 5
#define RADIO_MISO_PIN 3
#define RADIO_MOSI_PIN 6
#define RADIO_CS_PIN 7
#define RADIO_DIO1_PIN 33
#define RADIO_BUSY_PIN 34
#define RADIO_RST_PIN 8
//! SX1276/78 module only
#define RADIO_DIO0_PIN 9
#define RADIO_DIO3_PIN 21
#define RADIO_DIO4_PIN 10
#define RADIO_DIO5_PIN 36
//! end
#define SDCARD_MOSI EDP_MOSI_PIN
#define SDCARD_SCLK EDP_CLK_PIN
#define SDCARD_MISO 2
#define SDCARD_CS 13
#define BOARD_LED 37
#define LED_ON HIGH
#define BAT_ADC_PIN 1
#define BUTTON_PIN 0
#define HAS_SDCARD
#define EDP_DISPLAY
// #define HAS_DISPLAY
#else
#error "For the first use, please define the board version and model in <utilities. h>"
#endif

View file

@ -66,6 +66,17 @@ void setup()
u8g2->sendBuffer();
}
}
#endif
#ifdef EDP_DISPLAY
if (state != RADIOLIB_ERR_NONE) {
display.setRotation(1);
display.fillScreen(GxEPD_WHITE);
display.setTextColor(GxEPD_BLACK);
display.setFont(&FreeMonoBold9pt7b);
display.setCursor(0, 15);
display.println("Initializing: FAIL!");
display.update();
}
#endif
if (state == RADIOLIB_ERR_NONE) {
Serial.println(F("success!"));
@ -165,6 +176,15 @@ void loop()
u8g2->drawStr(0, 30, ("TX:" + String(counter)).c_str());
u8g2->sendBuffer();
}
#endif
#ifdef EDP_DISPLAY
display.setRotation(1);
display.fillScreen(GxEPD_WHITE);
display.setTextColor(GxEPD_BLACK);
display.setFont(&FreeMonoBold9pt7b);
display.setCursor(0, 15);
display.println("Transmitting: OK!");
display.update();
#endif
} else {
Serial.print(F("failed, code "));

View file

@ -8,10 +8,28 @@
#include <SD.h>
#include <FS.h>
#endif
#ifdef HAS_DISPLAY
SPIClass SDSPI(HSPI);
#if defined(HAS_DISPLAY) && !defined(EDP_DISPLAY)
#include <U8g2lib.h>
U8G2_SSD1306_128X64_NONAME_F_HW_I2C *u8g2 = nullptr;
#ifndef DISPLAY_MODEL
#define DISPLAY_MODEL U8G2_SSD1306_128X64_NONAME_F_HW_I2C
#endif
DISPLAY_MODEL *u8g2 = nullptr;
#elif defined(EDP_DISPLAY)
#include "Adafruit_GFX.h"
#include <Fonts/FreeMonoBold12pt7b.h>
#include <Fonts/FreeMonoBold18pt7b.h>
#include <Fonts/FreeMonoBold24pt7b.h>
#include <Fonts/FreeMonoBold9pt7b.h>
#include <GxEPD.h>
#include <GxIO/GxIO_SPI/GxIO_SPI.h>
#include <GxDEPG0213BN/GxDEPG0213BN.h> // 2.13" b/w form DKE GROUP
#include GxEPD_BitmapExamples
GxIO_Class io(SDSPI, EDP_CS_PIN, EDP_DC_PIN, EDP_RSET_PIN);
GxEPD_Class display(io, EDP_RSET_PIN, EDP_BUSY_PIN);
#endif
Ticker ledTicker;
@ -92,7 +110,7 @@ void disablePeripherals()
#define disablePeripherals()
#endif
SPIClass SDSPI(HSPI);
void initBoard()
@ -100,7 +118,10 @@ void initBoard()
Serial.begin(115200);
Serial.println("initBoard");
SPI.begin(RADIO_SCLK_PIN, RADIO_MISO_PIN, RADIO_MOSI_PIN);
#if defined(HAS_DISPLAY)
Wire.begin(I2C_SDA, I2C_SCL);
#endif
#ifdef HAS_GPS
@ -163,28 +184,50 @@ void initBoard()
#endif
#
#ifdef HAS_SDCARD
#ifdef HAS_DISPLAY
if (u8g2) {
u8g2->setFont(u8g2_font_ncenB08_tr);
}
#endif
pinMode(SDCARD_MISO, INPUT_PULLUP);
SDSPI.begin(SDCARD_SCLK, SDCARD_MISO, SDCARD_MOSI, SDCARD_CS);
#ifdef EDP_DISPLAY
display.init();
display.setTextColor(GxEPD_BLACK);
delay(10);
display.setRotation(0);
delay(10);
display.fillScreen(GxEPD_WHITE);
delay(10);
display.drawExampleBitmap(BitmapExample1, 0, 0, GxEPD_WIDTH, GxEPD_HEIGHT, GxEPD_BLACK);
display.update();
Serial.println("EDP_MODE");
#endif
#ifdef HAS_DISPLAY
if (u8g2) {
u8g2->clearBuffer();
}
#endif
if (!SD.begin(SDCARD_CS, SDSPI)) {
Serial.println("setupSDCard FAIL");
#ifdef HAS_DISPLAY
if (u8g2) {
do {
u8g2->setCursor(0, 16);
u8g2->println( "SDCard FAILED");;
} while ( u8g2->nextPage() );
}
#endif
} else {
uint32_t cardSize = SD.cardSize() / (1024 * 1024);
Serial.print("setupSDCard PASS . SIZE = ");
Serial.print(cardSize / 1024.0);
Serial.println(" GB");
#ifdef HAS_DISPLAY
if (u8g2) {
do {
u8g2->setCursor(0, 16);
@ -193,18 +236,13 @@ void initBoard()
u8g2->println(" GB");;
} while ( u8g2->nextPage() );
}
Serial.print("setupSDCard PASS . SIZE = ");
Serial.print(cardSize / 1024.0);
Serial.println(" GB");
}
if (u8g2) {
u8g2->sendBuffer();
}
#endif
delay(3000);
#endif
}

View file

@ -238,6 +238,50 @@
#define HAS_SDCARD
#define HAS_DISPLAY
#elif defined(LILYGO_T3_S3_E_PAPER_V_1_0)
#define I2C_SDA 18
#define I2C_SCL 17
#define OLED_RST UNUSE_PIN
#define EDP_BUSY_PIN 48
#define EDP_RSET_PIN 47
#define EDP_DC_PIN 16
#define EDP_CS_PIN 15
#define EDP_CLK_PIN 14 // CLK
#define EDP_MOSI_PIN 11 // MOSI
#define EDP_MISO_PIN -1
#define RADIO_SCLK_PIN 5
#define RADIO_MISO_PIN 3
#define RADIO_MOSI_PIN 6
#define RADIO_CS_PIN 7
#define RADIO_DIO1_PIN 33
#define RADIO_BUSY_PIN 34
#define RADIO_RST_PIN 8
//! SX1276/78 module only
#define RADIO_DIO0_PIN 9
#define RADIO_DIO3_PIN 21
#define RADIO_DIO4_PIN 10
#define RADIO_DIO5_PIN 36
//! end
#define SDCARD_MOSI EDP_MOSI_PIN
#define SDCARD_SCLK EDP_CLK_PIN
#define SDCARD_MISO 2
#define SDCARD_CS 13
#define BOARD_LED 37
#define LED_ON HIGH
#define BAT_ADC_PIN 1
#define BUTTON_PIN 0
#define HAS_SDCARD
#define EDP_DISPLAY
// #define HAS_DISPLAY
#else
#error "For the first use, please define the board version and model in <utilities. h>"
#endif
@ -250,3 +294,4 @@