commit
ec024b4676
@ -31,6 +31,7 @@ This can all be done with a single small and cheap ESP32 board for less than $20
|
|||||||
- Pycom: LoPy, LoPy4, FiPy
|
- Pycom: LoPy, LoPy4, FiPy
|
||||||
- WeMos: LoLin32 + [LoraNode32 shield](https://github.com/hallard/LoLin32-Lora),
|
- WeMos: LoLin32 + [LoraNode32 shield](https://github.com/hallard/LoLin32-Lora),
|
||||||
LoLin32lite + [LoraNode32-Lite shield](https://github.com/hallard/LoLin32-Lite-Lora)
|
LoLin32lite + [LoraNode32-Lite shield](https://github.com/hallard/LoLin32-Lite-Lora)
|
||||||
|
- Adafruit ESP32 Feather + LoRa Wing + OLED Wing, #IoT Octopus32 (Octopus + ESP32 Feather)
|
||||||
|
|
||||||
*SPI only*: (code yet to come)
|
*SPI only*: (code yet to come)
|
||||||
|
|
||||||
|
39
include/readme.txt
Normal file
39
include/readme.txt
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
|
||||||
|
This directory is intended for project header files.
|
||||||
|
|
||||||
|
A header file is a file containing C declarations and macro definitions
|
||||||
|
to be shared between several project source files. You request the use of a
|
||||||
|
header file in your project source file (C, C++, etc) located in `src` folder
|
||||||
|
by including it, with the C preprocessing directive `#include'.
|
||||||
|
|
||||||
|
```src/main.c
|
||||||
|
|
||||||
|
#include "header.h"
|
||||||
|
|
||||||
|
int main (void)
|
||||||
|
{
|
||||||
|
...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Including a header file produces the same results as copying the header file
|
||||||
|
into each source file that needs it. Such copying would be time-consuming
|
||||||
|
and error-prone. With a header file, the related declarations appear
|
||||||
|
in only one place. If they need to be changed, they can be changed in one
|
||||||
|
place, and programs that include the header file will automatically use the
|
||||||
|
new version when next recompiled. The header file eliminates the labor of
|
||||||
|
finding and changing all the copies as well as the risk that a failure to
|
||||||
|
find one copy will result in inconsistencies within a program.
|
||||||
|
|
||||||
|
In C, the usual convention is to give header files names that end with `.h'.
|
||||||
|
It is most portable to use only letters, digits, dashes, and underscores in
|
||||||
|
header file names, and at most one dot.
|
||||||
|
|
||||||
|
Read more about using header files in official GCC documentation:
|
||||||
|
|
||||||
|
* Include Syntax
|
||||||
|
* Include Operation
|
||||||
|
* Once-Only Headers
|
||||||
|
* Computed Includes
|
||||||
|
|
||||||
|
https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html
|
@ -20,6 +20,7 @@ env_default = generic
|
|||||||
;env_default = lolin32litelora
|
;env_default = lolin32litelora
|
||||||
;env_default = lolin32lora
|
;env_default = lolin32lora
|
||||||
;env_default = lolin32lite
|
;env_default = lolin32lite
|
||||||
|
;env_default = octopus32
|
||||||
;env_default = ebox, heltec, ttgobeam, lopy4, lopy, ttgov21old, ttgov21new
|
;env_default = ebox, heltec, ttgobeam, lopy4, lopy, ttgov21old, ttgov21new
|
||||||
;
|
;
|
||||||
description = Paxcounter is a proof-of-concept ESP32 device for metering passenger flows in realtime. It counts how many mobile devices are around.
|
description = Paxcounter is a proof-of-concept ESP32 device for metering passenger flows in realtime. It counts how many mobile devices are around.
|
||||||
@ -255,6 +256,21 @@ upload_protocol = ${common.upload_protocol}
|
|||||||
extra_scripts = ${common.extra_scripts}
|
extra_scripts = ${common.extra_scripts}
|
||||||
monitor_speed = ${common.monitor_speed}
|
monitor_speed = ${common.monitor_speed}
|
||||||
|
|
||||||
|
[env:octopus32]
|
||||||
|
platform = ${common.platform_espressif32}
|
||||||
|
framework = arduino
|
||||||
|
board = esp32dev
|
||||||
|
board_build.partitions = ${common.board_build.partitions}
|
||||||
|
upload_speed = 921600
|
||||||
|
lib_deps =
|
||||||
|
${common.lib_deps_all}
|
||||||
|
${common.lib_deps_rgbled}
|
||||||
|
build_flags =
|
||||||
|
${common.build_flags}
|
||||||
|
upload_protocol = ${common.upload_protocol}
|
||||||
|
extra_scripts = ${common.extra_scripts}
|
||||||
|
monitor_speed = ${common.monitor_speed}
|
||||||
|
|
||||||
[env:generic]
|
[env:generic]
|
||||||
platform = ${common.platform_espressif32}
|
platform = ${common.platform_espressif32}
|
||||||
framework = arduino
|
framework = arduino
|
||||||
|
@ -128,7 +128,7 @@ void refreshtheDisplay() {
|
|||||||
u8x8.printf("Sats:%.2d", gps.satellites.value());
|
u8x8.printf("Sats:%.2d", gps.satellites.value());
|
||||||
u8x8.setInverseFont(0);
|
u8x8.setInverseFont(0);
|
||||||
} else
|
} else
|
||||||
u8x8.printf("Sats:%.d", gps.satellites.value());
|
u8x8.printf("Sats:%.2d", gps.satellites.value());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// update bluetooth counter + LoRa SF (line 3)
|
// update bluetooth counter + LoRa SF (line 3)
|
||||||
|
26
src/hal/heltecv2.h
Normal file
26
src/hal/heltecv2.h
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
// Hardware related definitions for Heltec V2 LoRa-32 Board
|
||||||
|
|
||||||
|
#define HAS_LORA 1 // comment out if device shall not send data via LoRa
|
||||||
|
#define HAS_SPI 1 // comment out if device shall not send data via SPI
|
||||||
|
#define CFG_sx1276_radio 1
|
||||||
|
|
||||||
|
#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 GPIO_NUM_0 // button "PROG" on board
|
||||||
|
|
||||||
|
// re-define pin definitions of pins_arduino.h
|
||||||
|
#define PIN_SPI_SS GPIO_NUM_18 // ESP32 GPIO18 -- SX1276 NSS (Pin19) SPI Chip Select Input
|
||||||
|
#define PIN_SPI_MOSI GPIO_NUM_27 // ESP32 GPIO27 -- SX1276 MOSI (Pin18) SPI Data Input
|
||||||
|
#define PIN_SPI_MISO GPIO_NUM_19 // ESP32 GPIO19 -- SX1276 MISO (Pin17) SPI Data Output
|
||||||
|
#define PIN_SPI_SCK GPIO_NUM_5 // ESP32 GPIO5 -- SX1276 SCK (Pin16) SPI Clock Input
|
||||||
|
|
||||||
|
// non arduino pin definitions
|
||||||
|
#define RST GPIO_NUM_14 // ESP32 GPIO18 -- SX1276 NRESET (Pin7) Reset Trigger Input
|
||||||
|
#define DIO0 GPIO_NUM_26 // ESP32 GPIO26 -- SX1276 DIO0 (Pin8) used by LMIC for detecting LoRa RX_Done & TX_Done
|
||||||
|
#define DIO1 GPIO_NUM_34 // ESP32 GPIO33 -- SX1276 DIO1 (Pin9) used by LMIC for detecting LoRa RX_Timeout
|
||||||
|
#define DIO2 GPIO_NUM_35 // 32 ESP32 GPIO32 -- 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 GPIO_NUM_16 // ESP32 GPIO16 -- SD1306 RST
|
||||||
|
#define I2C_SDA GPIO_NUM_4 // ESP32 GPIO4 -- SD1306 D1+D2
|
||||||
|
#define I2C_SCL GPIO_NUM_15 // ESP32 GPIO15 -- SD1306 D0
|
@ -17,7 +17,7 @@
|
|||||||
#define DIO2 GPIO_NUM_23 // Pin tied via diode to DIO0
|
#define DIO2 GPIO_NUM_23 // Pin tied via diode to DIO0
|
||||||
|
|
||||||
// select WIFI antenna (internal = onboard / external = u.fl socket)
|
// select WIFI antenna (internal = onboard / external = u.fl socket)
|
||||||
#define HAS_ANTENNA_SWITCH 16 // pin for switching wifi antenna
|
#define HAS_ANTENNA_SWITCH GPIO_NUM_16 // pin for switching wifi antenna
|
||||||
#define WIFI_ANTENNA 0 // 0 = internal, 1 = external
|
#define WIFI_ANTENNA 0 // 0 = internal, 1 = external
|
||||||
|
|
||||||
// uncomment this only if your LoPy runs on a PYTRACK BOARD
|
// uncomment this only if your LoPy runs on a PYTRACK BOARD
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
#define HAS_SPI 1 // comment out if device shall not send data via SPI
|
#define HAS_SPI 1 // comment out if device shall not send data via SPI
|
||||||
#define CFG_sx1276_radio 1
|
#define CFG_sx1276_radio 1
|
||||||
//#define HAS_LED NOT_A_PIN // LoPy4 has no on board mono LED, we use on board RGB LED
|
//#define HAS_LED NOT_A_PIN // LoPy4 has no on board mono LED, we use on board RGB LED
|
||||||
#define HAS_RGB_LED GPIO_NUM_0 // WS2812B RGB LED on GPIO0
|
#define HAS_RGB_LED GPIO_NUM_0 // WS2812B RGB LED on GPIO0 (P2)
|
||||||
#define BOARD_HAS_PSRAM // use extra 4MB extern RAM
|
#define BOARD_HAS_PSRAM // use extra 4MB extern RAM
|
||||||
|
|
||||||
// Hardware pin definitions for Pycom LoPy4 board
|
// Hardware pin definitions for Pycom LoPy4 board
|
||||||
@ -18,7 +18,7 @@
|
|||||||
#define DIO2 GPIO_NUM_23 // Pin tied via diode to DIO0
|
#define DIO2 GPIO_NUM_23 // Pin tied via diode to DIO0
|
||||||
|
|
||||||
// select WIFI antenna (internal = onboard / external = u.fl socket)
|
// select WIFI antenna (internal = onboard / external = u.fl socket)
|
||||||
#define HAS_ANTENNA_SWITCH 21 // pin for switching wifi antenna
|
#define HAS_ANTENNA_SWITCH GPIO_NUM_21 // pin for switching wifi antenna (P12)
|
||||||
#define WIFI_ANTENNA 0 // 0 = internal, 1 = external
|
#define WIFI_ANTENNA 0 // 0 = internal, 1 = external
|
||||||
|
|
||||||
// uncomment this only if your LoPy runs on a PYTRACK BOARD
|
// uncomment this only if your LoPy runs on a PYTRACK BOARD
|
||||||
|
41
src/hal/octopus32.h
Normal file
41
src/hal/octopus32.h
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
// Hardware related definitions for #IoT Octopus32 with the Adafruit LoRaWAN Wing
|
||||||
|
// You can use this configuration also with the Adafruit ESP32 Feather + the LoRaWAN Wing
|
||||||
|
// In this config we use the Adafruit OLED Wing which is only 128x32 pixel, need to find a smaller font
|
||||||
|
|
||||||
|
// disable brownout detection (avoid unexpected reset on some boards)
|
||||||
|
#define DISABLE_BROWNOUT 1 // comment out if you want to keep brownout feature
|
||||||
|
|
||||||
|
#define HAS_LED 13 // ESP32 GPIO12 (pin22) On Board LED
|
||||||
|
#define LED_ACTIVE_LOW 1 // Onboard LED is active when pin is LOW
|
||||||
|
//#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 HAS_LORA 1 // comment out if device shall not send data via LoRa
|
||||||
|
#define HAS_SPI 1 // comment out if device shall not send data via SPI
|
||||||
|
#define CFG_sx1276_radio 1 // RFM95 module
|
||||||
|
|
||||||
|
// re-define pin definitions of pins_arduino.h
|
||||||
|
#define PIN_SPI_SS 14 //14 // ESP32 GPIO5 (Pin5) -- SX1276 NSS (Pin19) SPI Chip Select Input
|
||||||
|
#define PIN_SPI_MOSI 18 // 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 5 // ESP32 GPIO18 (Pin18) -- SX1276 SCK (Pin16) SPI Clock Input
|
||||||
|
|
||||||
|
//GPIO_NUM_
|
||||||
|
// non arduino pin definitions
|
||||||
|
#define RST LMIC_UNUSED_PIN // ESP32 GPIO25 (Pin25) -- SX1276 NRESET (Pin7) Reset Trigger Input
|
||||||
|
#define DIO0 33 // ESP32 GPIO27 (Pin27) -- SX1276 DIO0 (Pin8) used by LMIC for detecting LoRa RX_Done & TX_Done
|
||||||
|
#define DIO1 33 // ESP32 GPIO26 (Pin26) -- SX1276 DIO1 (Pin9) used by LMIC for detecting LoRa RX_Timeout
|
||||||
|
#define DIO2 LMIC_UNUSED_PIN // 4 ESP32 GPIO4 (Pin4) -- SX1276 DIO2 (Pin10) not used by LMIC for LoRa (Timeout for FSK only)
|
||||||
|
#define DIO5 LMIC_UNUSED_PIN // 35 ESP32 GPIO35 (Pin35) -- SX1276 DIO5 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 HAS_DISPLAY U8X8_SSD1306_128X64_NONAME_HW_I2C // U8X8_SSD1306_128X32_UNIVISION_SW_I2C //
|
||||||
|
//#define DISPLAY_FLIP 1 // uncomment this for rotated display
|
||||||
|
#define I2C_SDA 23 //21 // ESP32 GPIO14 (Pin14) -- OLED SDA
|
||||||
|
#define I2C_SCL 22 //22 // ESP32 GPIO12 (Pin12) -- OLED SCL
|
||||||
|
|
||||||
|
// I2C config for Microchip 24AA02E64 DEVEUI unique address
|
||||||
|
//#define MCP_24AA02E64_I2C_ADDRESS 0x50 // I2C address for the 24AA02E64
|
||||||
|
//#define MCP_24AA02E64_MAC_ADDRESS 0xF8 // Memory adress of unique deveui 64 bits
|
@ -24,5 +24,5 @@
|
|||||||
#define RST LMIC_UNUSED_PIN // connected to ESP32 RST/EN
|
#define RST LMIC_UNUSED_PIN // connected to ESP32 RST/EN
|
||||||
#define DIO0 GPIO_NUM_26 // ESP32 GPIO26 <-> HPD13A IO0
|
#define DIO0 GPIO_NUM_26 // ESP32 GPIO26 <-> HPD13A IO0
|
||||||
#define DIO1 GPIO_NUM_32 // Lora1 <-> HPD13A IO1 // !! NEEDS EXTERNAL WIRING !!
|
#define DIO1 GPIO_NUM_32 // Lora1 <-> HPD13A IO1 // !! NEEDS EXTERNAL WIRING !!
|
||||||
//#define DIO1 GPIO_NUM_33 // Lora1 <-> HPD13A IO1 // for T-Beam T22_V05 only
|
//#define DIO1 GPIO_NUM_33 // Lora1 <-> HPD13A IO1 // for T-Beam T22_V05 and T22_V07, other versions may need external wiring
|
||||||
#define DIO2 LMIC_UNUSED_PIN // Lora2 <-> HPD13A IO2 // not needed for LoRa
|
#define DIO2 LMIC_UNUSED_PIN // Lora2 <-> HPD13A IO2 // not needed for LoRa
|
||||||
|
@ -114,7 +114,7 @@ bool mac_add(uint8_t *paddr, int8_t rssi, bool sniff_type) {
|
|||||||
} // added
|
} // added
|
||||||
|
|
||||||
// Log scan result
|
// Log scan result
|
||||||
ESP_LOGD(TAG,
|
ESP_LOGV(TAG,
|
||||||
"%s %s RSSI %ddBi -> MAC %s -> Hash %04X -> WiFi:%d BLTH:%d -> "
|
"%s %s RSSI %ddBi -> MAC %s -> Hash %04X -> WiFi:%d BLTH:%d -> "
|
||||||
"%d Bytes left",
|
"%d Bytes left",
|
||||||
added ? "new " : "known",
|
added ? "new " : "known",
|
||||||
|
@ -29,12 +29,12 @@ Task Core Prio Purpose
|
|||||||
====================================================================================
|
====================================================================================
|
||||||
wifiloop 0 4 rotates wifi channels
|
wifiloop 0 4 rotates wifi channels
|
||||||
ledloop 0 3 blinks LEDs
|
ledloop 0 3 blinks LEDs
|
||||||
gpsloop 0 2 reads data from GPS over serial or i2c
|
|
||||||
spiloop 0 2 reads/writes data on spi interface
|
spiloop 0 2 reads/writes data on spi interface
|
||||||
IDLE 0 0 ESP32 arduino scheduler -> runs wifi sniffer
|
IDLE 0 0 ESP32 arduino scheduler -> runs wifi sniffer
|
||||||
|
|
||||||
looptask 1 1 arduino core -> runs the LMIC LoRa stack
|
looptask 1 1 arduino core -> runs the LMIC LoRa stack
|
||||||
irqhandler 1 1 executes tasks triggered by irq
|
irqhandler 1 1 executes tasks triggered by irq
|
||||||
|
gpsloop 1 2 reads data from GPS over serial or i2c
|
||||||
IDLE 1 0 ESP32 arduino scheduler
|
IDLE 1 0 ESP32 arduino scheduler
|
||||||
|
|
||||||
ESP32 hardware timers
|
ESP32 hardware timers
|
||||||
@ -285,11 +285,11 @@ void setup() {
|
|||||||
ESP_LOGI(TAG, "Starting GPSloop...");
|
ESP_LOGI(TAG, "Starting GPSloop...");
|
||||||
xTaskCreatePinnedToCore(gps_loop, // task function
|
xTaskCreatePinnedToCore(gps_loop, // task function
|
||||||
"gpsloop", // name of task
|
"gpsloop", // name of task
|
||||||
1024, // stack size of task
|
2048, // stack size of task
|
||||||
(void *)1, // parameter of the task
|
(void *)1, // parameter of the task
|
||||||
2, // priority of the task
|
2, // priority of the task
|
||||||
&GpsTask, // task handle
|
&GpsTask, // task handle
|
||||||
0); // CPU core
|
1); // CPU core
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAS_SPI
|
#ifdef HAS_SPI
|
||||||
|
Loading…
Reference in New Issue
Block a user