Skip to content

Instantly share code, notes, and snippets.

@t-huyeng
Created December 2, 2022 09:18
Show Gist options
  • Save t-huyeng/42e08a22ca2a7f71ea00f681dded2d9f to your computer and use it in GitHub Desktop.
Save t-huyeng/42e08a22ca2a7f71ea00f681dded2d9f to your computer and use it in GitHub Desktop.
10:13:31.034 > I (32) src/configmanager.cpp: Loading device configuration from NVRAM...
10:13:31.034 > E (32) C:/Users/x/.platformio/packages/framework-arduinoespressif32/libraries/Preferences/src/Preferences.cpp: nvs_open failed: NOT_FOUND
10:13:31.034 > I (40) src/configmanager.cpp: NVRAM initialized, device starts with factory settings
10:13:31.034 > I (47) src/configmanager.cpp: Storing settings to NVRAM...
10:13:31.034 > I (54) src/configmanager.cpp: Resetting device to factory settings
10:13:31.034 > I (69) src/configmanager.cpp: Device settings saved
10:13:31.034 > I (70) src/configmanager.cpp: Runtime configuration v3.4.4 loaded
10:13:31.034 > I (70) src/main.cpp: Starting paxcounter_69d8ce73 v3.4.4 (runmode=0 / restarts=0)
10:13:31.034 > I (76) src/main.cpp: code build date: 1669972308
10:13:31.034 > I (81) src/main.cpp: This is ESP32 chip with 2 CPU cores, WiFi/BT/BLE, silicon revision 1, 8MB external Flash
10:13:31.034 > I (90) src/main.cpp: Internal Total heap 226944, internal Free Heap 198840
10:13:31.034 > I (97) src/main.cpp: ChipRevision 1, Cpu Freq 240, SDK Version v4.4.2
10:13:31.034 > I (103) src/main.cpp: Flash Size 8388608, Flash Speed 40000000
10:13:31.034 > I (108) src/main.cpp: Wifi/BT software coexist version 1.2.0
10:13:31.034 > I (114) src/main.cpp: IBM LMIC version 1.6.1468577746
10:13:31.034 > I (119) src/main.cpp: Arduino LMIC version 4.1.1.0
10:13:31.034 > I (123) src/lorawan.cpp: AppEUI: xxxxxxxxxx
10:13:31.034 > I (128) src/lorawan.cpp: DevEUI: xxxxxxxxxx
10:13:31.034 > I (132) src/lorawan.cpp: AppKey: xxxxxxxxxxxxxxxx
10:13:31.034 > I (138) C:/Users/x/.platformio/packages/framework-arduinoespressif32/cores/esp32/esp32-hal-i2c.c: Initialising I2C Master: sda=4 scl=15 freq=100000
10:13:31.034 > I (153) src/i2c.cpp: Starting I2C bus scan...
10:13:31.034 > W (155) C:/Users/x/.platformio/packages/framework-arduinoespressif32/libraries/Wire/src/Wire.cpp: Bus already started in Master Mode.
10:13:31.034 > I (285) src/i2c.cpp: 0 I2C device(s) found
10:13:31.034 > W (285) C:/Users/x/.platformio/packages/framework-arduinoespressif32/libraries/Wire/src/Wire.cpp: Bus already started in Master Mode.
10:13:33.393 > I (10444) src/main.cpp: Starting LED Controller...
10:13:33.399 > I (10445) src/power.cpp: ADC characterization based on reference voltage stored in eFuse
10:13:33.406 > I (10448) src/main.cpp: Starting libpax...
10:13:33.411 > I (10449) src/main.cpp: WIFISCAN: on
10:13:33.413 > I (10452) src/main.cpp: BLESCAN: on
10:13:33.562 > I (10612) .pio/libdeps/usb/libpax/lib/libpax/blescan.cpp: Initializing bluetooth scanner ...
10:13:34.175 > I (11226) .pio/libdeps/usb/libpax/lib/libpax/blescan.cpp: BLE Scanning started
10:13:34.375 > I (11426) .pio/libdeps/usb/libpax/lib/libpax/blescan.cpp: Bluetooth scanner started
10:13:34.383 > I (11426) src/main.cpp: Starting rcommand interpreter...
10:13:34.388 > I (11428) src/rcommand.cpp: Rcommand send queue created, size 55 Bytes
10:13:34.394 > I (11434) src/lorawan.cpp: LORA send queue created, size 530 Bytes
10:13:34.406 > I (11457) src/lorawan.cpp: Starting LMIC...
10:13:34.411 > I (11458) src/main.cpp: Starting Interrupt Handler...
10:13:34.415 > I (11458) src/main.cpp: Starting Timers...
10:13:34.442 > I (11493) src/button.cpp: Starting button Controller...
10:13:34.447 > I (11494) src/timekeeper.cpp: Starting time pulse...
10:13:34.452 > I (11494) src/timekeeper.cpp: Timepulse: internal (ESP32 hardware timer)
10:13:35.448 > I (12498) src/main.cpp: Features: VEXT DISP LED BATT OTA LORA PACKED BTN_PU TIME
10:13:35.475 > I (12525) src/timesync.cpp: [12.639] Timeserver sync request started, seqNo#66
10:13:44.740 > I (21788) src/lorawan.cpp: DEVaddr: 0x0162FF2F | Network ID: 0x000000 | Network Type: 0
10:13:44.748 > I (21789) src/lorawan.cpp: RSSI: -18 | SNR: 7
10:13:44.752 > I (21790) src/lorawan.cpp: Radio parameters: SF7 | BW125 | CR 4/5
10:13:48.707 > I (25757) src/timekeeper.cpp: [25.871] UTC time: 1669972428.000 sec
10:14:08.921 > I (45970) src/lorawan.cpp: 1 byte(s) sent to LORA
10:14:33.437 > I (70486) src/lorawan.cpp: 4 byte(s) sent to LORA
10:15:33.439 > I (130487) src/lorawan.cpp: 4 byte(s) sent to LORA
// clang-format off
// ----- Paxcounter user config file ------
//
// --> adapt to your needs and use case <--
//
// Notes:
// 1. After editing, before "build", use "clean" button in PlatformIO!
// 2. Clear NVRAM of the board to delete previous stored runtime settings (pio run -t erase)
// Device options
#define VERBOSE 1 // set to 0 to silence the device, 1 enables additional debug output
#define BOOTMENU 0 // 0 = no bootmenu, 1 = device brings up boot menu before starting application
#define BOOTDELAY 30 // time [seconds] while devices waits in boot menue for input
#define BOOTTIMEOUT 300 // time [seconds] while devices waits to finish upload a firmware file
#define SDLOGGING 0 // set to 1 for system logging to SD card (if device has one)
// Payload send cycle and encoding
#define SENDCYCLE 30 // payload send cycle [seconds/2], 0 .. 255
#define SLEEPCYCLE 0 // sleep time after a send cycle [seconds/10], 0 .. 65535; 0 means no sleep [default = 0]
#define PAYLOAD_ENCODER 2 // payload encoder: 1=Plain, 2=Packed, 3=Cayenne LPP dynamic, 4=Cayenne LPP packed
#define COUNTERMODE 0 // 0=cyclic, 1=cumulative, 2=cyclic confirmed
// default settings for transmission of sensor data (first list = data on / second line = data off)
#define PAYLOADMASK \
((GPS_DATA | MEMS_DATA | COUNT_DATA | SENSOR1_DATA | SENSOR2_DATA | SENSOR3_DATA) & \
(~BATT_DATA) & (~RESERVED_DATA))
// MAC sniffing settings
#define BLECOUNTER 1 // set to 0 if you do not want to start the BLE sniffer
#define WIFICOUNTER 1 // set to 0 if you do not want to start the WIFI sniffer
#define RSSILIMIT 0 // 0...-128, set to 0 if you do not want to filter signals
// BLE scan parameters
#define BLESCANTIME 0 // [seconds] scan duration, 0 means infinite [default], see note below
#define BLESCANWINDOW 80 // [milliseconds] scan window, see below, 3 .. 10240, default 80ms
#define BLESCANINTERVAL 80 // [illiseconds] scan interval, see below, 3 .. 10240, default 80ms = 100% duty cycle
/* Note: guide for setting bluetooth parameters
*
* |< Scan Window > |< Scan Window > | ... |< Scan Window > |
* |< Scan Interval >|< Scan Interval >| ... |< Scan Interval >|
* |< Scan duration >|
*
* Scan duration sets how long scanning should be going on, before starting a new scan cycle. 0 means infinite (default).
* Scan window sets how much of the interval should be occupied by scanning. Should be >= BLESCANINTERVAL.
* Scan interval is how long scanning should be done on each channel. BLE uses 3 channels for advertising.
* -> Adjust these values with power consumption in mind if power is limited.
* -> Scan interval can be changed during runtime by remote comammand.
*/
// WiFi scan parameters
#define WIFI_MY_COUNTRY "01" // select 2-letter locale for Wifi RF settings, e.g. "DE"; use "01" for world safe mode
#define WIFI_CHANNEL_SWITCH_INTERVAL 50 // [seconds/100] -> 0,5 sec.
// LoRa payload default parameters
#define MEM_LOW 2048 // [Bytes] low memory threshold triggering a send cycle
#define RETRANSMIT_RCMD 5 // [seconds] wait time before retransmitting rcommand results
#define PAYLOAD_BUFFER_SIZE 51 // maximum size of payload block per transmit
#define PAYLOAD_OPENSENSEBOX 0 // send payload compatible to sensebox.de (swap geo position and pax data)
#define LORADRDEFAULT 5 // 0 .. 15, LoRaWAN datarate, according to regional LoRaWAN specs [default = 5]
#define LORATXPOWDEFAULT 14 // 0 .. 255, LoRaWAN TX power in dBm [default = 14]
#define MAXLORARETRY 500 // maximum count of TX retries if LoRa busy
#define SEND_QUEUE_SIZE 10 // maximum number of messages in payload send queue [1 = no queue]
// Hardware settings
#define RGBLUMINOSITY 30 // RGB LED luminosity [default = 30%]
#define DISPLAYREFRESH_MS 40 // OLED refresh cycle in ms [default = 40] -> 1000/40 = 25 frames per second
#define DISPLAYCONTRAST 80 // 0 .. 255, OLED display contrast [default = 80]
#define DISPLAYCYCLE 3 // Auto page flip delay in sec [default = 2] for devices without button
#define HOMECYCLE 30 // house keeping cycle in seconds [default = 30 secs]
// Settings for BME680 environmental sensor
#define BME_TEMP_OFFSET 5.0f // Offset sensor on chip temp <-> ambient temp [default = 5°C]
#define STATE_SAVE_PERIOD UINT32_C(360 * 60 * 1000) // update every 360 minutes = 4 times a day
#define BMECYCLE 1 // bme sensor read cycle in seconds [default = 1 secs]
// OTA settings
#define USE_OTA 1 // set to 0 to disable OTA update
#define WIFI_MAX_TRY 5 // maximum number of wifi connect attempts for OTA update [default = 20]
#define OTA_MAX_TRY 5 // maximum number of attempts for OTA download and write to flash [default = 3]
#define OTA_MIN_BATT 50 // minimum battery level for OTA [percent]
#define RESPONSE_TIMEOUT_MS 60000 // firmware binary server connection timeout [milliseconds]
// settings for syncing time of node with a time source (network / gps / rtc / timeserver)
#define TIME_SYNC_LORAWAN 1 // set to 1 to use LORA network as time source, 0 means off [default = 1]
#define TIME_SYNC_LORASERVER 0 // set to 1 to use LORA timeserver as time source, 0 means off [default = 0]
#define TIME_SYNC_INTERVAL 60 // sync time attempt each .. minutes from time source [default = 60], 0 means off
#define TIME_SYNC_INTERVAL_RETRY 10 // retry time sync after lost sync each .. minutes [default = 10], 0 means off
#define TIME_SYNC_SAMPLES 1 // number of time requests for averaging, max. 255
#define TIME_SYNC_CYCLE 60 // delay between two time samples [seconds]
#define TIME_SYNC_TIMEOUT 400 // timeout waiting for timeserver answer [seconds]
#define TIME_SYNC_COMPILEDATE 0 // set to 1 to use compile date to initialize RTC after power outage [default = 0]
#define TIME_SYNC_TIMEZONE "CET-1CEST,M3.4.0/2,M10.4.0/3" // Timezone in POSIX format (example shows Germany/Berlin)
// Ports on which the device sends and listenes on LoRaWAN and SPI
#define COUNTERPORT 1 // counts
#define MACPORT 0 // network commands
#define RCMDPORT 2 // remote commands
#define STATUSPORT 2 // remote command results
#define CONFIGPORT 3 // config query results
#define GPSPORT 4 // gps - NOTE: set to 1 to send combined GPS+COUNTERPORT payload
#define BUTTONPORT 5 // button pressed signal
#define RESERVEDPORT 6 // reserved (unused)
#define BMEPORT 7 // BME680 sensor
#define BATTPORT 8 // battery voltage
#define TIMEPORT 9 // time query and response
#define SENSOR1PORT 10 // user sensor #1
#define SENSOR2PORT 11 // user sensor #2
#define SENSOR3PORT 12 // user sensor #3
// Cayenne LPP Ports, see https://community.mydevices.com/t/cayenne-lpp-2-0/7510
#define CAYENNE_LPP1 1 // dynamic sensor payload (LPP 1.0)
#define CAYENNE_LPP2 2 // packed sensor payload (LPP 2.0)
#define CAYENNE_GPS 3 // full scale GPS payload
#define CAYENNE_ACTUATOR 10 // actuator commands
#define CAYENNE_DEVICECONFIG 11 // device period configuration
#define CAYENNE_SENSORREAD 13 // sensor period configuration
#define CAYENNE_SENSORENABLE 14 // sensor enable configuration
// MQTT settings, only needed if MQTT is used (#define HAS_MQTT in board hal file)
#define MQTT_ETHERNET 1 // select PHY: set 0 for Wifi, 1 for ethernet (Wifi not yet implemented!)
#define MQTT_INTOPIC "paxin"
#define MQTT_OUTTOPIC "paxout"
#define MQTT_PORT 1883
#define MQTT_SERVER "public.cloud.shiftr.io"
#define MQTT_USER "public"
#define MQTT_PASSWD "public"
#define MQTT_RETRYSEC 20 // retry reconnect every 20 seconds
#define MQTT_KEEPALIVE 10 // keep alive interval in seconds
//#define MQTT_CLIENTNAME "my_paxcounter" // generated by default
; ---> SELECT ONE TARGET BOARD FROM FOLLOWING ROWS <---
;
; Note: For "LILYGO TTGO ESP32-Paxcounter LoRa32 V2.1 1.6.1" select board ttgov21new.h
;
;
[board]
;halfile = generic.h
;halfile = ebox.h
;halfile = eboxtube.h
;halfile = ecopower.h
;halfile = heltec.h
;halfile = heltecv2.h
halfile = heltecv21.h
;halfile = ttgov1.h
;halfile = ttgov2.h
;halfile = ttgov21old.h
;halfile = ttgov21new.h
;halfile = ttgofox.h
;halfile = ttgobeam.h
;halfile = ttgobeam10.h
;halfile = ttgotdisplay.h
;halfile = ttgotwristband.h
;halfile = fipy.h
;halfile = lopy.h
;halfile = lopy4.h
;halfile = lolin32litelora.h
;halfile = lolin32lora.h
;halfile = lolin32lite.h
;halfile = wemos32oled.h
;halfile = wemos32matrix.h
;halfile = octopus32.h
;halfile = tinypico.h
;halfile = tinypicomatrix.h
;halfile = m5core.h
;halfile = m5fire.h
;halfile = olimexpoeiso.h
[platformio]
; upload firmware to board with usb cable
default_envs = usb
; upload firmware to a paxexpress repository
;default_envs = ota
; use upstream version of arduino-espressif32 framework
;default_envs = dev
description = Paxcounter is a device for metering passenger flows in realtime. It counts how many mobile devices are around.
[common]
; for release_version use max. 10 chars total, use any decimal format like "a.b.c"
release_version = 3.4.4
; DEBUG LEVEL: For production run set to 0, otherwise device will leak RAM while running!
; 0=None, 1=Error, 2=Warn, 3=Info, 4=Debug, 5=Verbose
debug_level = 3
extra_scripts = pre:build.py
otakeyfile = ota.conf
lorakeyfile = loraconf.h
lmicconfigfile = lmic_config.h
platform_espressif32 = espressif32@5.2.0
monitor_speed = 115200
upload_speed = 115200 ; set by build.py and taken from hal file
lib_deps_lora =
mcci-catena/MCCI LoRaWAN LMIC library @ ^4.1.1
lib_deps_display =
bitbank2/OneBitDisplay @ ^2.2.1
bitbank2/bb_spi_lcd @ ^2.4.0
ricmoo/QRCode @ ^0.0.1
lib_deps_ledmatrix =
seeed-studio/Ultrathin_LED_Matrix @ ^1.0.0
lib_deps_rgbled =
fastled/FastLED @ ^3.5.0
lib_deps_gps =
mikalhart/TinyGPSPlus @ ^1.0.3
lib_deps_sensors =
adafruit/Adafruit Unified Sensor @ ^1.1.6
adafruit/Adafruit BME280 Library @ ^2.2.2
adafruit/Adafruit BMP085 Library @ ^1.2.1
boschsensortec/BSEC Software Library @ 1.6.1480
lewapek/Nova Fitness Sds dust sensors library @ ^1.5.1
lib_deps_basic =
;greyrook/libpax @ ^1.0.1
https://github.com/cyberman54/libpax.git
https://github.com/SukkoPera/Arduino-Rokkit-Hash.git
bblanchon/ArduinoJson @ ^6
makuna/RTC @ ^2.3.5
mathertel/OneButton @ ^2.0.3
lewisxhe/XPowersLib @ ^0.1.4
256dpi/MQTT @ ^2.5.0
lib_deps_all =
${common.lib_deps_basic}
${common.lib_deps_lora}
${common.lib_deps_display}
${common.lib_deps_rgbled}
${common.lib_deps_gps}
${common.lib_deps_sensors}
${common.lib_deps_ledmatrix}
build_flags_basic =
-include "src/paxcounter.conf"
'-DCORE_DEBUG_LEVEL=${common.debug_level}'
'-DLOG_LOCAL_LEVEL=${common.debug_level}'
'-DPROGVERSION="${common.release_version}"'
'-D LIBPAX_WIFI'
'-D LIBPAX_BLE'
'-D LIBPAX_ARDUINO'
'-DUSE_ESP_IDF_LOG'
'-DTAG=__FILE__'
build_flags_all =
${common.build_flags_basic}
-mfix-esp32-psram-cache-issue
[env]
framework = arduino
board = esp32dev
board_build.partitions = min_spiffs.csv
build_type = release
upload_speed = ${common.upload_speed}
;upload_port = COM12
platform = ${common.platform_espressif32}
lib_deps = ${common.lib_deps_all}
build_flags =
-include "src/hal/${board.halfile}"
${common.build_flags_all}
upload_protocol = ${common.upload_protocol}
extra_scripts = ${common.extra_scripts}
monitor_speed = ${common.monitor_speed}
monitor_filters = time, esp32_exception_decoder, default
[env:ota]
upload_protocol = custom
[env:usb]
upload_protocol = esptool
[env:dev]
upload_protocol = esptool
platform = https://github.com/platformio/platform-espressif32.git#feature/arduino-upstream
platform_packages = framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git
[env:ci]
build_flags =
-include "src/hal/${sysenv.CI_HALFILE}" ; set by CI
${common.build_flags_all}
upload_protocol = esptool
➜ ESP32-Paxcounter (master) ✔ cp platformio_orig.ini platformio.ini
➜ ESP32-Paxcounter (master) ✔ cp src/paxcounter_orig.conf src/paxcounter.conf
➜ ESP32-Paxcounter (master) ✔ cp src/loraconf_sample.h src/loraconf.h
➜ ESP32-Paxcounter (master) ✔ cp src/ota_sample.conf src/ota.conf
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment