Merge pull request #11 from cyberman54/development

LoLin support added, thanks to Charles Hallard
This commit is contained in:
Verkehrsrot 2018-03-27 12:49:12 +02:00 committed by GitHub
commit 3453a62eff
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 92 additions and 17 deletions

View File

@ -23,6 +23,7 @@ Currently supported IoT boards:
- TTGOv2 - TTGOv2
- Pycom LoPy - Pycom LoPy
- Pycom LoPy4 - 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).<br> Target platform must be selected in [platformio.ini](https://github.com/cyberman54/ESP32-Paxcounter/blob/master/platformio.ini).<br>
Hardware dependent settings (pinout etc.) are stored in board files in /hal directory.<br> Hardware dependent settings (pinout etc.) are stored in board files in /hal directory.<br>
@ -37,6 +38,7 @@ Hardware dependent settings (pinout etc.) are stored in board files in /hal dire
- TTGOv2 ~670mW - TTGOv2 ~670mW
- LoPy with expansion board: ~530mW - LoPy with expansion board: ~530mW
- LoPy pure, without expansion board: ~460mW - 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 TXing, OLED display off, 5V USB powered. These results where metered with software version 1.2.0 during active wifi scan, no LoRa TXing, OLED display off, 5V USB powered.

View File

@ -10,11 +10,12 @@
; ---> SELECT TARGET PLATFORM HERE! <--- ; ---> SELECT TARGET PLATFORM HERE! <---
[platformio] [platformio]
env_default = heltec_wifi_lora_32 ;env_default = heltec_wifi_lora_32
;env_default = ttgov1 ;env_default = ttgov1
;env_default = ttgov2 ;env_default = ttgov2
;env_default = lopy ;env_default = lopy
;env_default = lopy4 ;env_default = lopy4
env_default = lolin32_lora
[env:heltec_wifi_lora_32] [env:heltec_wifi_lora_32]
platform = espressif32 platform = espressif32
@ -123,4 +124,28 @@ build_flags =
-include "src/main.h" -include "src/main.h"
-include "src/hal/lopy4.h" -include "src/hal/lopy4.h"
;FreeRTOS single core operation, switches off core 1 (see arduino-esp32/cores/esp32/main.cpp) ;FreeRTOS single core operation, switches off core 1 (see arduino-esp32/cores/esp32/main.cpp)
; -DCONFIG_FREERTOS_UNICORE ; -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

View File

@ -19,7 +19,7 @@ class MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks {
void BLECount() { void BLECount() {
u8x8.clearLine(3); u8x8.clearLine(3);
u8x8.drawString(0,3,"BLE Scan..."); u8x8.drawString(0,3,"BLE Scan...");
BLEDevice::init("PaxCnt"); BLEDevice::init(PROGNAME);
BLEScan* pBLEScan = BLEDevice::getScan(); //create new scan BLEScan* pBLEScan = BLEDevice::getScan(); //create new scan
pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks()); pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks());
pBLEScan->setActiveScan(true); //active scan uses more power, but get results faster pBLEScan->setActiveScan(true); //active scan uses more power, but get results faster

32
src/hal/lolin32_lora.h Normal file
View File

@ -0,0 +1,32 @@
// 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 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_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
// non arduino pin definitions
#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 LoRaNode32 Board with OLED I2C Display
#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

View File

@ -3,6 +3,10 @@
#define CFG_sx1276_radio 1 // HPD13A LoRa SoC #define CFG_sx1276_radio 1 // HPD13A LoRa SoC
#define HAS_DISPLAY U8X8_SSD1306_128X64_NONAME_HW_I2C #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 // re-define pin definitions of pins_arduino.h
#define PIN_SPI_SS 18 // ESP32 GPIO18 (Pin18) -- HPD13A NSS/SEL (Pin4) SPI Chip Select Input #define PIN_SPI_SS 18 // ESP32 GPIO18 (Pin18) -- HPD13A NSS/SEL (Pin4) SPI Chip Select Input

View File

@ -323,6 +323,12 @@ void init_display(const char *Productname, const char *Version) {
void setup() { 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 // setup debug output or silence device
#ifdef VERBOSE #ifdef VERBOSE
Serial.begin(115200); Serial.begin(115200);
@ -361,10 +367,16 @@ void setup() {
digitalWrite(HAS_LED, LOW); digitalWrite(HAS_LED, LOW);
#endif #endif
// install button interrupt
#ifdef HAS_BUTTON #ifdef HAS_BUTTON
pinMode(HAS_BUTTON, INPUT_PULLDOWN); #ifdef BUTTON_PULLUP
attachInterrupt(digitalPinToInterrupt(HAS_BUTTON), isr_button_pressed, FALLING); // 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 #endif
// initialize wifi antenna // initialize wifi antenna

View File

@ -1,5 +1,5 @@
// program version // 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" #define PROGNAME "PAXCNT"
// Verbose enables serial output // Verbose enables serial output

View File

@ -13,15 +13,6 @@
// Local logging tag // Local logging tag
static const char *TAG = "rcommand"; 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 // table of remote commands and assigned functions
typedef struct { typedef struct {
const int nam; const int nam;
@ -29,7 +20,16 @@ typedef struct {
const bool store; const bool store;
} cmd_t; } 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) { void switch_lora (int sf, int tx) {
if ( tx > 20 ) return; if ( tx > 20 ) return;
cfg.txpower = tx; cfg.txpower = tx;