cyberman54 / ESP32-Paxcounter

Wifi & BLE driven passenger flow metering with cheap ESP32 boards
https://cyberman54.github.io/ESP32-Paxcounter/
Other
1.72k stars 401 forks source link

BME680 and DISPLAY not working parallel #231

Closed cyberman54 closed 5 years ago

cyberman54 commented 5 years ago

BME680 sensor and OLED display both use i2c communication from separate parallel tasks. Since esp32 i2c hal is not thread safe, we need a mutex solution for this, otherwise the i2c bus driver crashes.

cyberman54 commented 5 years ago

fixed in v1.7.03 (currently in development-bme680-2 branch)

mcapani commented 3 years ago

good evening, I know that you have closed the trend, it is days that I have read everything, but I still have this problem, I have the ttgo t3 v 2.1 with display and a sensor bme 680. I have tried the various versions but I always have the probklema that together they don't work.

"Starting I2C bus scan ... 23: 06: 23.191> [I] [i2c.cpp: 78] i2c_scan (): 0 I2C device (s) found 23: 06: 23.494> [E] [display.cpp: 70] dp_setup (): FAILURE in src / display.cpp: 70 23: 06: 23.494> /home/runner/work/esp32-arduino-lib-builder/esp32-arduino-lib-builder/esp-idf/components/freertos/tasks.c:4826 (xTaskNotify) - assert failed! " can you please give me some advice ??? thank you

cyberman54 commented 3 years ago

@mcapani Looks like a non working i2c bus. Please show your platformio.ini and paxcounter.conf and double check your pin mappings for SDA/SCL.

mcapani commented 3 years ago

; PlatformIO Project Configuration File ; NOTE: PlatformIO v5 is needed! ; ; Please visit documentation for the other options and examples ; http://docs.platformio.org/page/projectconf.html

; ---> SELECT THE TARGET PLATFORM HERE! <--- [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 jfrog bintray repository ;default_envs = ota ; use latest versions of libraries ;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 = 2.4.0 ; 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@3.1.0 monitor_speed = 115200 upload_speed = 115200 ; set by build.py and taken from hal file display_library = ; set by build.py and taken from hal file lib_deps_lora = mcci-catena/MCCI LoRaWAN LMIC library @ ^3.3.0 lib_deps_display = bitbank2/OneBitDisplay @ 1.9.0 bitbank2/BitBang_I2C @ ^2.1.3 ricmoo/QRCode @ ^0.0.1 bodmer/TFT_eSPI @ ^2.3.51 lib_deps_ledmatrix = seeed-studio/Ultrathin_LED_Matrix @ ^1.0.0 lib_deps_rgbled = roboticsbrno/SmartLeds @ ^1.2.1 lib_deps_gps = mikalhart/TinyGPSPlus @ ^1.0.2 lib_deps_sensors = adafruit/Adafruit Unified Sensor @ ^1.1.4 adafruit/Adafruit BME280 Library @ ^2.1.1 adafruit/Adafruit BMP085 Library @ ^1.1.0 boschsensortec/BSEC Software Library @ 1.6.1480 https://github.com/ricki-z/SDS011.git lib_deps_basic = https://github.com/SukkoPera/Arduino-Rokkit-Hash.git bblanchon/ArduinoJson @ ^6 jchristensen/Timezone @ ^1.2.4 makuna/RTC @ ^2.3.5 spacehuhn/SimpleButton lewisxhe/AXP202X_Library @ ^1.1.3 geeksville/esp32-micro-sdcard @ ^0.1.1 256dpi/MQTT @ ^2.4.7 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/hal/${board.halfile}" -include "src/paxcounter.conf" '-DCORE_DEBUG_LEVEL=${common.debug_level}' '-DLOG_LOCAL_LEVEL=${common.debug_level}' '-DPROGVERSION="${common.release_version}"' '-Wno-unknown-pragmas' '-Wno-unused-variable' build_flags_sensors = -Llib/Bosch-BSEC/src/esp32/ -lalgobsec build_flags_all = ${common.build_flags_basic} ${common.build_flags_sensors} -mfix-esp32-psram-cache-issue

[env] lib_ldf_mode = deep ; #632 Fixes compiler error with OneBitDisplay library framework = arduino board = esp32dev board_build.partitions = min_spiffs.csv upload_speed = ${common.upload_speed} ;upload_port = COM3 platform = ${common.platform_espressif32} lib_deps = ${common.lib_deps_all} build_flags = ${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 build_type = debug platform = https://github.com/platformio/platform-espressif32.git#develop

paxcounter.conf // clang-format off

// ----- Paxcounter user config file ------ // // --> adapt to your needs and use case <-- // // Note: After editing, before "build", use "clean" button in PlatformIO!

// 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

// 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/2], 0 .. 255; 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

// MAC sniffing parameters

define MACFILTER 1 // set to 0 if you want to scan all devices, 1 to scan only devices with random MACs (aka smartphones) [default = 1]

define BLECOUNTER 1 // set to 0 if you do not want to install the BLE sniffer

define WIFICOUNTER 1 // set to 0 if you do not want to install the WIFI sniffer

define MAC_QUEUE_SIZE 50 // size of MAC processing buffer (number of MACs) [default = 50]

// 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

// Corona Exposure Notification Service(ENS) counter

define COUNT_ENS 1 // count found number of devices which advertise Exposure Notification Service

                                            // set to 1 if you want to enable this function [default=0]

// for additional sensors (added by some user)

define HAS_SENSOR_1 1 // set to 1 to enable data transfer of user sensor #1 (also used as ENS counter) [default=0]

define HAS_SENSOR_2 1 // set to 1 to enable data transfer of user sensor #2 [default=0]

define HAS_SENSOR_3 0 // set to 1 to enable data transfer of user sensor #3 [default=0]

/ Note: guide for setting bluetooth parameters

// WiFi scan parameters

define WIFI_CHANNEL_MIN 1 // start channel number where scan begings

define WIFI_CHANNEL_MAX 13 // total channel number to scan

define WIFI_MY_COUNTRY "EU" // select locale for Wifi RF settings

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]

// time zone, see https://github.com/JChristensen/Timezone/blob/master/examples/WorldClock/WorldClock.ino

define DAYLIGHT_TIME {"CEST", Last, Sun, Mar, 2, 120} // Central European Summer Time

define STANDARD_TIME {"CET ", Last, Sun, Oct, 3, 60} // Central European Standard Time

// 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 BEACONPORT 6 // beacon alarms

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 0 // select PHY: set 0 for Wifi, 1 for ethernet

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

cyberman54 commented 3 years ago

@mcapani You selected ttgov21new.h board hal file. Are you sure you have this board? Please show a photo of your board to verify version is matching the selected hal file. Please show your modifications of this file for BME680 (you need to enable the external sensor in your board's hal file, see example in generic.h).

mcapani commented 3 years ago

IMG_7825 IMG_7826

cyberman54 commented 3 years ago

Which pins did you use to connect the BME680? Note: supply voltage of BME680 is 1,7 - 3,8 Volt. If you connected it to 5 Volt, you may have damaged it.

mcapani commented 3 years ago

I had the doubt .... in some guides I read that the module I purchased (photo1) can also be powered at 5v because the board adjusts the voltage automatically. in any case I connected 2 photos as shown in the attached diagram. 21/22 5v gdn

Schermata 2021-03-13 alle 09 18 09 Schermata 2021-03-13 alle 09 14 17
cyberman54 commented 3 years ago

Please show your hal file. Did you add/edit the BME680 settings in hal file?

PS: on your photo it looks like the black wire is not connected to GND, but to 3V3?

mcapani commented 3 years ago

now works!!!! I'm a bit ashamed :) you have hit the problem !! great i did a lot of tests and it was trivially a 3.3V pin soldering error. I apologize for having lost this time, probably yesterday I was "melted". Thanks again. now I do the other tests and maybe we will talk about something else ..... ps it also works to detect immune apps (covid-italia) thanks

cyberman54 commented 3 years ago

If you need support, please use discussion tab next time, not issue. Thx.

mcapani commented 3 years ago

ok thanks