From 466e49d998c6d64f016a24e050a6622fb41c1a3e Mon Sep 17 00:00:00 2001 From: Charles Date: Tue, 27 Mar 2018 01:51:48 +0200 Subject: [PATCH 1/7] Creation --- src/hal/lolin32_lora.h | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/hal/lolin32_lora.h diff --git a/src/hal/lolin32_lora.h b/src/hal/lolin32_lora.h new file mode 100644 index 00000000..1290401e --- /dev/null +++ b/src/hal/lolin32_lora.h @@ -0,0 +1,24 @@ +// Hardware related definitions for lolin32_lora shield +// See https://github.com/hallard/LoLin32-Lora + +#define HAS_DISPLAY U8X8_SSD1306_128X64_NONAME_HW_I2C // OLED-Display on board +#define HAS_LED GPIO_NUM_25 // white LED on board +#define HAS_BUTTON 15 // button "PROG" on board +#define CFG_sx1276_radio 1 + +// re-define pin definitions of pins_arduino.h +#define PIN_SPI_SS 5 // ESP32 GPIO5 (Pin18) -- SX1276 NSS (Pin19) SPI Chip Select Input +#define PIN_SPI_MOSI 23 // ESP32 GPIO27 (Pin27) -- SX1276 MOSI (Pin18) SPI Data Input +#define PIN_SPI_MISO 19 // ESP32 GPIO19 (Pin19) -- SX1276 MISO (Pin17) SPI Data Output +#define PIN_SPI_SCK 18 // ESP32 GPIO5 (Pin5) -- SX1276 SCK (Pin16) SPI Clock Input + +// non arduino pin definitions +#define RST 25 // ESP32 GPIO14 (Pin14) -- SX1276 NRESET (Pin7) Reset Trigger Input +#define DIO0 27 // ESP32 GPIO26 (Pin15) -- SX1276 DIO0 (Pin8) used by LMIC for detecting LoRa RX_Done & TX_Done +#define DIO1 26 // ESP32 GPIO33 (Pin13) -- SX1276 DIO1 (Pin9) used by LMIC for detecting LoRa RX_Timeout +#define DIO2 4 // ESP32 GPIO32 (Pin12) -- SX1276 DIO2 (Pin10) not used by LMIC for LoRa (Timeout for FSK only) + +// Hardware pin definitions for Heltec LoRa-32 Board with OLED SSD1306 I2C Display +#define OLED_RST NOT_A_PIN +#define OLED_SDA 21 // ESP32 GPIO4 (Pin4) -- SD1306 D1+D2 +#define OLED_SCL 22 // ESP32 GPIO15 (Pin15) -- SD1306 D0 From d035b62a6b7c0f1d835e39aa55d6125f20da9cea Mon Sep 17 00:00:00 2001 From: Charles Date: Tue, 27 Mar 2018 01:52:24 +0200 Subject: [PATCH 2/7] Added LoLin32 Lora --- platformio.ini | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/platformio.ini b/platformio.ini index 5be224b5..80c91ae1 100644 --- a/platformio.ini +++ b/platformio.ini @@ -15,6 +15,7 @@ env_default = heltec_wifi_lora_32 ;env_default = ttgov2 ;env_default = lopy ;env_default = lopy4 +;env_default = lolin32_lora [env:heltec_wifi_lora_32] platform = espressif32 @@ -123,4 +124,28 @@ build_flags = -include "src/main.h" -include "src/hal/lopy4.h" ;FreeRTOS single core operation, switches off core 1 (see arduino-esp32/cores/esp32/main.cpp) -; -DCONFIG_FREERTOS_UNICORE \ No newline at end of file +; -DCONFIG_FREERTOS_UNICORE + +[env:lolin32_lora] +platform = espressif32 +board = lolin32 +framework = arduino +monitor_baud = 115200 +upload_speed = 921600 +lib_deps = + U8g2 + ESP32 BLE Arduino@>=0.4.9 +build_flags = +;set log level, we need build_flag for this, otherwise we can't use ESP_LOGx in arduino framework + -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_VERBOSE +; -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_NONE +;needed for ESP32 BLE Ardunio v0.4.9 + -fexceptions + -std=c++11 +;override lora settings from LMiC library in lmic/config.h and use main.h instead + -D_lmic_config_h_ + -include "src/main.h" + -include "src/hal/lolin32_lora.h" +;FreeRTOS single core operation, switches off core 1 (see arduino-esp32/cores/esp32/main.cpp) +; -DCONFIG_FREERTOS_UNICORE + From fdcfcdadc0e942d15076f6b0b82bda3c231a7c85 Mon Sep 17 00:00:00 2001 From: Charles Date: Tue, 27 Mar 2018 02:07:10 +0200 Subject: [PATCH 3/7] updated comments --- src/hal/lolin32_lora.h | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/src/hal/lolin32_lora.h b/src/hal/lolin32_lora.h index 1290401e..82be56f8 100644 --- a/src/hal/lolin32_lora.h +++ b/src/hal/lolin32_lora.h @@ -1,24 +1,26 @@ -// Hardware related definitions for lolin32_lora shield +// Hardware related definitions for lolin32 loraNode32 shield // See https://github.com/hallard/LoLin32-Lora #define HAS_DISPLAY U8X8_SSD1306_128X64_NONAME_HW_I2C // OLED-Display on board -#define HAS_LED GPIO_NUM_25 // white LED on board -#define HAS_BUTTON 15 // button "PROG" on board +#define HAS_LED NOT_A_PIN // Led os on same pin than Lora SS pin, to avoid pb, we don't use it + // Anyway shield if on tap board, so we won't be able to see this LED +#define HAS_RGB_LED 13 // ESP32 GPIO13 (pin13) On Board Shield WS2812B RGB LED +#define HAS_BUTTON 15 // ESP32 GPIO15 (pin15) Button is on the LoraNode32 shield #define CFG_sx1276_radio 1 // re-define pin definitions of pins_arduino.h -#define PIN_SPI_SS 5 // ESP32 GPIO5 (Pin18) -- SX1276 NSS (Pin19) SPI Chip Select Input -#define PIN_SPI_MOSI 23 // ESP32 GPIO27 (Pin27) -- SX1276 MOSI (Pin18) SPI Data Input +#define PIN_SPI_SS 5 // ESP32 GPIO5 (Pin5) -- SX1276 NSS (Pin19) SPI Chip Select Input +#define PIN_SPI_MOSI 23 // ESP32 GPIO23 (Pin23) -- SX1276 MOSI (Pin18) SPI Data Input #define PIN_SPI_MISO 19 // ESP32 GPIO19 (Pin19) -- SX1276 MISO (Pin17) SPI Data Output -#define PIN_SPI_SCK 18 // ESP32 GPIO5 (Pin5) -- SX1276 SCK (Pin16) SPI Clock Input +#define PIN_SPI_SCK 18 // ESP32 GPIO18 (Pin18 -- SX1276 SCK (Pin16) SPI Clock Input // non arduino pin definitions -#define RST 25 // ESP32 GPIO14 (Pin14) -- SX1276 NRESET (Pin7) Reset Trigger Input -#define DIO0 27 // ESP32 GPIO26 (Pin15) -- SX1276 DIO0 (Pin8) used by LMIC for detecting LoRa RX_Done & TX_Done -#define DIO1 26 // ESP32 GPIO33 (Pin13) -- SX1276 DIO1 (Pin9) used by LMIC for detecting LoRa RX_Timeout -#define DIO2 4 // ESP32 GPIO32 (Pin12) -- SX1276 DIO2 (Pin10) not used by LMIC for LoRa (Timeout for FSK only) +#define RST 25 // ESP32 GPIO25 (Pin25) -- SX1276 NRESET (Pin7) Reset Trigger Input +#define DIO0 27 // ESP32 GPIO27 (Pin27) -- SX1276 DIO0 (Pin8) used by LMIC for detecting LoRa RX_Done & TX_Done +#define DIO1 26 // ESP32 GPIO26 (Pin26) -- SX1276 DIO1 (Pin9) used by LMIC for detecting LoRa RX_Timeout +#define DIO2 4 // ESP32 GPIO4 (Pin4) -- SX1276 DIO2 (Pin10) not used by LMIC for LoRa (Timeout for FSK only) -// Hardware pin definitions for Heltec LoRa-32 Board with OLED SSD1306 I2C Display -#define OLED_RST NOT_A_PIN -#define OLED_SDA 21 // ESP32 GPIO4 (Pin4) -- SD1306 D1+D2 -#define OLED_SCL 22 // ESP32 GPIO15 (Pin15) -- SD1306 D0 +// Hardware pin definitions for LoRaNode32 Board with OLED I2C Display +#define OLED_RST NOT_A_PIN // Not reset pin +#define OLED_SDA 21 // ESP32 GPIO21 (Pin21) -- OLED SDA +#define OLED_SCL 22 // ESP32 GPIO22 (Pin22) -- OLED SCL From 6e0ec1cb2a46357f5d72b1ad86e66dc30db8cbde Mon Sep 17 00:00:00 2001 From: Charles Date: Tue, 27 Mar 2018 11:05:06 +0200 Subject: [PATCH 4/7] Added brownout remove and pullup on button --- src/main.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index 416a0db0..b3d48896 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -323,6 +323,12 @@ void init_display(const char *Productname, const char *Version) { void setup() { + // disable brownout detection +#ifdef DISABLE_BROWNOUT + // Register with brownout is at address DR_REG_RTCCNTL_BASE + 0xd4 + (*((volatile uint32_t *)ETS_UNCACHED_ADDR((DR_REG_RTCCNTL_BASE+0xd4)))) = 0; +#endif + // setup debug output or silence device #ifdef VERBOSE Serial.begin(115200); @@ -362,9 +368,15 @@ void setup() { #endif #ifdef HAS_BUTTON - // install button interrupt +#ifdef BUTTON_PULLUP + // install button interrupt (pullup mode) + pinMode(HAS_BUTTON, INPUT_PULLUP); + attachInterrupt(digitalPinToInterrupt(HAS_BUTTON), isr_button_pressed, RISING); +#else + // install button interrupt (pulldown mode) pinMode(HAS_BUTTON, INPUT_PULLDOWN); attachInterrupt(digitalPinToInterrupt(HAS_BUTTON), isr_button_pressed, FALLING); +#endif #endif // initialize wifi antenna From ff85d908ac404749a6f313786859f42aaef60c78 Mon Sep 17 00:00:00 2001 From: Charles Date: Tue, 27 Mar 2018 11:05:33 +0200 Subject: [PATCH 5/7] default to disable brownout detection --- src/hal/lolin32_lora.h | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/hal/lolin32_lora.h b/src/hal/lolin32_lora.h index 82be56f8..632c5dda 100644 --- a/src/hal/lolin32_lora.h +++ b/src/hal/lolin32_lora.h @@ -1,15 +1,20 @@ // Hardware related definitions for lolin32 loraNode32 shield // See https://github.com/hallard/LoLin32-Lora +// disable brownout detection (avoid unexpected reset on some boards) +#define DISABLE_BROWNOUT 1 // comment out if you want to keep brownout feature + #define HAS_DISPLAY U8X8_SSD1306_128X64_NONAME_HW_I2C // OLED-Display on board -#define HAS_LED NOT_A_PIN // Led os on same pin than Lora SS pin, to avoid pb, we don't use it - // Anyway shield if on tap board, so we won't be able to see this LED -#define HAS_RGB_LED 13 // ESP32 GPIO13 (pin13) On Board Shield WS2812B RGB LED -#define HAS_BUTTON 15 // ESP32 GPIO15 (pin15) Button is on the LoraNode32 shield -#define CFG_sx1276_radio 1 +#define HAS_LED NOT_A_PIN // Led os on same pin than Lora SS pin, to avoid pb, we don't use it + // Anyway shield is on over the LoLin32 board, so we won't be able to see this LED +#define HAS_RGB_LED 13 // ESP32 GPIO13 (pin13) On Board Shield WS2812B RGB LED +#define HAS_BUTTON 15 // ESP32 GPIO15 (pin15) Button is on the LoraNode32 shield +#define BUTTON_PULLUP 1 // Button need pullup instead of default pulldown + +#define CFG_sx1276_radio 1 // RFM95 module // re-define pin definitions of pins_arduino.h -#define PIN_SPI_SS 5 // ESP32 GPIO5 (Pin5) -- SX1276 NSS (Pin19) SPI Chip Select Input +#define PIN_SPI_SS 5 // ESP32 GPIO5 (Pin5) -- SX1276 NSS (Pin19) SPI Chip Select Input #define PIN_SPI_MOSI 23 // ESP32 GPIO23 (Pin23) -- SX1276 MOSI (Pin18) SPI Data Input #define PIN_SPI_MISO 19 // ESP32 GPIO19 (Pin19) -- SX1276 MISO (Pin17) SPI Data Output #define PIN_SPI_SCK 18 // ESP32 GPIO18 (Pin18 -- SX1276 SCK (Pin16) SPI Clock Input @@ -18,9 +23,10 @@ #define RST 25 // ESP32 GPIO25 (Pin25) -- SX1276 NRESET (Pin7) Reset Trigger Input #define DIO0 27 // ESP32 GPIO27 (Pin27) -- SX1276 DIO0 (Pin8) used by LMIC for detecting LoRa RX_Done & TX_Done #define DIO1 26 // ESP32 GPIO26 (Pin26) -- SX1276 DIO1 (Pin9) used by LMIC for detecting LoRa RX_Timeout -#define DIO2 4 // ESP32 GPIO4 (Pin4) -- SX1276 DIO2 (Pin10) not used by LMIC for LoRa (Timeout for FSK only) +#define DIO2 4 // ESP32 GPIO4 (Pin4) -- SX1276 DIO2 (Pin10) not used by LMIC for LoRa (Timeout for FSK only) // Hardware pin definitions for LoRaNode32 Board with OLED I2C Display -#define OLED_RST NOT_A_PIN // Not reset pin -#define OLED_SDA 21 // ESP32 GPIO21 (Pin21) -- OLED SDA -#define OLED_SCL 22 // ESP32 GPIO22 (Pin22) -- OLED SCL +#define OLED_RST U8X8_PIN_NONE // Not reset pin +#define OLED_SDA 21 // ESP32 GPIO21 (Pin21) -- OLED SDA +#define OLED_SCL 22 // ESP32 GPIO22 (Pin22) -- OLED SCL + From 481c7d3325b7edf1c39cf6b2a4af9737e5e10a5c Mon Sep 17 00:00:00 2001 From: Charles Date: Tue, 27 Mar 2018 11:14:36 +0200 Subject: [PATCH 6/7] Added - LoraNode32 shield --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 4b759953..c2126706 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,7 @@ Currently supported IoT boards: - TTGOv2 - Pycom LoPy - Pycom LoPy4 +- LoLin32 with [LoraNode32 shield](https://github.com/hallard/LoLin32-Lora) Target platform must be selected in [platformio.ini](https://github.com/cyberman54/ESP32-Paxcounter/blob/master/platformio.ini).
Hardware dependent settings (pinout etc.) are stored in board files in /hal directory.
@@ -38,6 +39,7 @@ Hardware dependent settings (pinout etc.) are stored in board files in /hal dire - TTGOv2 ~670mW - LoPy with expansion board: ~530mW - LoPy pure, without expansion board: ~460mW +- LoLin32 with [LoraNode32 shield](https://github.com/hallard/LoLin32-Lora): TBD These results where metered with software version 1.2.0 during active wifi scan, no LoRa TX’ing, OLED display off, 5V USB powered. From 92cbaeeaa647194e944a9c146ed21768e72ab812 Mon Sep 17 00:00:00 2001 From: Klaus K Wilting Date: Tue, 27 Mar 2018 12:46:38 +0200 Subject: [PATCH 7/7] v1.2.5 --- platformio.ini | 4 ++-- src/blecount.cpp | 2 +- src/hal/ttgov2.h | 4 ++++ src/main.h | 2 +- src/rcommand.cpp | 20 ++++++++++---------- 5 files changed, 18 insertions(+), 14 deletions(-) diff --git a/platformio.ini b/platformio.ini index 80c91ae1..75a8b218 100644 --- a/platformio.ini +++ b/platformio.ini @@ -10,12 +10,12 @@ ; ---> SELECT TARGET PLATFORM HERE! <--- [platformio] -env_default = heltec_wifi_lora_32 +;env_default = heltec_wifi_lora_32 ;env_default = ttgov1 ;env_default = ttgov2 ;env_default = lopy ;env_default = lopy4 -;env_default = lolin32_lora +env_default = lolin32_lora [env:heltec_wifi_lora_32] platform = espressif32 diff --git a/src/blecount.cpp b/src/blecount.cpp index b2cd6c92..3872d360 100644 --- a/src/blecount.cpp +++ b/src/blecount.cpp @@ -19,7 +19,7 @@ class MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks { void BLECount() { u8x8.clearLine(3); u8x8.drawString(0,3,"BLE Scan..."); - BLEDevice::init("PaxCnt"); + BLEDevice::init(PROGNAME); BLEScan* pBLEScan = BLEDevice::getScan(); //create new scan pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks()); pBLEScan->setActiveScan(true); //active scan uses more power, but get results faster diff --git a/src/hal/ttgov2.h b/src/hal/ttgov2.h index ec0ec5de..beae5675 100644 --- a/src/hal/ttgov2.h +++ b/src/hal/ttgov2.h @@ -3,6 +3,10 @@ #define CFG_sx1276_radio 1 // HPD13A LoRa SoC #define HAS_DISPLAY U8X8_SSD1306_128X64_NONAME_HW_I2C +//#define HAS_LED NOT_A_PIN // on-board LED is wired to SCL (used by display) therefore totally useless + +// disable brownout detection (needed on TTGOv2 for battery powered operation) +#define DISABLE_BROWNOUT 1 // comment out if you want to keep brownout feature // re-define pin definitions of pins_arduino.h #define PIN_SPI_SS 18 // ESP32 GPIO18 (Pin18) -- HPD13A NSS/SEL (Pin4) SPI Chip Select Input diff --git a/src/main.h b/src/main.h index 36541f8d..a32c075b 100644 --- a/src/main.h +++ b/src/main.h @@ -1,5 +1,5 @@ // program version -#define PROGVERSION "1.2.41" // use max 10 chars here! +#define PROGVERSION "1.2.5" // use max 10 chars here! #define PROGNAME "PAXCNT" // Verbose enables serial output diff --git a/src/rcommand.cpp b/src/rcommand.cpp index 97b647a6..46fe8022 100644 --- a/src/rcommand.cpp +++ b/src/rcommand.cpp @@ -13,15 +13,6 @@ // Local logging tag static const char *TAG = "rcommand"; -// functions defined in configmanager.cpp -void eraseConfig(void); -void saveConfig(void); - -// defined in antenna.cpp -#ifdef HAS_ANTENNA_SWITCH - void antenna_select(const int8_t _ant); -#endif - // table of remote commands and assigned functions typedef struct { const int nam; @@ -29,7 +20,16 @@ typedef struct { const bool store; } cmd_t; -// help function to assign LoRa datarates to spreadfactor values +// functions defined in configmanager.cpp +void eraseConfig(void); +void saveConfig(void); + +// function defined in antenna.cpp +#ifdef HAS_ANTENNA_SWITCH + void antenna_select(const int8_t _ant); +#endif + +// help function to assign LoRa datarates to numeric spreadfactor values void switch_lora (int sf, int tx) { if ( tx > 20 ) return; cfg.txpower = tx;