Compare commits
5 Commits
Author | SHA1 | Date |
---|---|---|
Jannik Beyerstedt | d1e4e6f17e | |
Jannik Beyerstedt | 28a862681e | |
Jannik Beyerstedt | 30402d41d3 | |
Jannik Beyerstedt | e80fd40194 | |
Jannik Beyerstedt | d22963e249 |
55
README.md
55
README.md
|
@ -1,9 +1,24 @@
|
|||
# Readme
|
||||
# ESP32-based Environmental Sensor
|
||||
Author: Jannik Beyerstedt
|
||||
**license:** GNU GPL v3
|
||||
|
||||
A simple temperature and humidity sensor node using an ESP32 and a Si7021 sensor element running of a 18650 LiIon battery cell.
|
||||
The sensor outputs the data to an influxDB instance, which must be reachable via HTTP.
|
||||
|
||||
To save energy, we use a lower CPU frequency.
|
||||
But this requires compiling the core framework again with the changed settings (see below).
|
||||
|
||||
This repository contains the code running on the ESP32, as well as the PCB and case design.
|
||||
|
||||
|
||||
|
||||
## Dependencies
|
||||
The [esp32-idf](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/index.html#installation-step-by-step) is needed to compile software for the ESP32.
|
||||
The following sections will install to `~/Development/esp32` as an example.
|
||||
|
||||
Prepare toolchain (macOS):
|
||||
```
|
||||
cd ~/JBeyerstedt-Projekte/
|
||||
cd ~/Development/
|
||||
mkdir ./esp32
|
||||
cd esp32
|
||||
curl https://dl.espressif.com/dl/xtensa-esp32-elf-osx-1.22.0-80-g6c4433a-5.2.0.tar.gz -o xtensa-esp32-elf-osx-1.22.0-80-g6c4433a-5.2.0.tar.gz
|
||||
|
@ -11,7 +26,7 @@ tar -xzf xtensa-esp32-elf-osx-1.22.0-80-g6c4433a-5.2.0.tar.gz
|
|||
rm xtensa-esp32-elf-osx-1.22.0-80-g6c4433a-5.2.0.tar.gz
|
||||
```
|
||||
|
||||
Prepare toolchain (Debian, Ubuntu) (ubuntu devel vm):
|
||||
Prepare toolchain (Debian, Ubuntu):
|
||||
```
|
||||
sudo apt-get install git wget make libncurses-dev flex bison gperf python python-serial
|
||||
|
||||
|
@ -25,30 +40,23 @@ rm xtensa-esp32-elf-linux64-1.22.0-73-ge28a011-5.2.0.tar.gz
|
|||
|
||||
Add to your bash profile, zshrc or other:
|
||||
```
|
||||
export PATH=$PATH:$HOME/JBeyerstedt-Projekte/esp32/xtensa-esp32-elf/bin
|
||||
export IDF_PATH = $HOME/JBeyerstedt-Projekte/esp32/esp-idf
|
||||
```
|
||||
or for ubuntu devel vm:
|
||||
```
|
||||
export PATH=$PATH:$HOME/Development/esp32/xtensa-esp32-elf/bin
|
||||
export IDF_PATH = $HOME/Development/esp32/esp-idf
|
||||
```
|
||||
|
||||
Install esp-idf:
|
||||
```
|
||||
cd ~/Development/esp32
|
||||
git clone --recursive https://github.com/espressif/esp-idf.git
|
||||
```
|
||||
|
||||
|
||||
## Checkout this project and configure arduino-es32 with esp-idf:
|
||||
```
|
||||
TODO!!
|
||||
|
||||
mkdir -p components && \
|
||||
cd components && \
|
||||
git clone https://github.com/espressif/arduino-esp32.git arduino && \
|
||||
cd arduino && \
|
||||
git submodule update --init --recursive && \
|
||||
## Checkout this project and configure arduino-esp32 with esp-idf:
|
||||
```
|
||||
mkdir -p components && cd components
|
||||
git clone https://github.com/espressif/arduino-esp32.git arduino && cd arduino
|
||||
git submodule update --init --recursive
|
||||
cd ../..
|
||||
```
|
||||
|
||||
|
@ -68,3 +76,18 @@ make all
|
|||
make flash
|
||||
```
|
||||
You would probably have to adapt the `UPLOAD_PORT` in the `Makefile` or set it via an environment variable.
|
||||
|
||||
|
||||
|
||||
## Battery Life
|
||||
The hardware was designed with two options to drop the battery voltage to a level, which can be fed to the ESP32: A voltage regulator or a simple diode.
|
||||
|
||||
A test with increased data rate (for a shorter test duration) resulted in a slightly better battery life using the voltage regulator.
|
||||
Using a measurement interval of 30 seconds and a WiFi connection interval of 3 minutes, the 2500mAh LiIon (3.7V) battery lasted 30 days with the diode and 36 days using the voltage regulator.
|
||||
In real-world application, a battery life of about 9 months can be expected (with good WLAN reception).
|
||||
|
||||
The selected voltage regulator has a quite low drop-out voltage and more importantly a low leaking current during the deep-sleep phases, which have a very low current needed by the ESP32.
|
||||
In comparison a diode has no leaking current at all, but a more or less fixed voltage drop.
|
||||
|
||||
The benefit of the voltage regulator is, that the battery voltage range can be exploited further than what can be done with the diode.
|
||||
The lowest operational battery level was 3.2 V using the diode and 2.8 V using the voltage regulator.
|
||||
|
|
|
@ -31,11 +31,11 @@
|
|||
#define BOARD 4 /* IMPORTANT: select one of the BOARD_* types */
|
||||
#endif
|
||||
|
||||
#define DB_HOSTNAME "ursaminor.fra80"
|
||||
#define DB_HOSTNAME "influx-iot.fra80"
|
||||
#define DB_PASSWD "c2Vuc29yczpTZW5zb3JzLXcuaW5mbHV4QGhvbWU" // BasicAuth String
|
||||
|
||||
#if BOARD == BOARD_ESP32
|
||||
#define BATT_FULL 3800 // 4.3V Battery
|
||||
#define BATT_FULL 3700 // 4.2V Battery
|
||||
#define BATT_CUTOFF 2500 // 2.8V Battery
|
||||
#else
|
||||
#error "unsupported board chosen"
|
||||
|
@ -68,9 +68,9 @@ String serviceUri = "/write?db=test";
|
|||
#endif
|
||||
|
||||
/* GLOBAL VARIABLES */
|
||||
const uint16_t wlanConnectCheckInterval = 250; // milli seconds: poll wifi.state after wifi.begin()
|
||||
const uint16_t wlanConnectTimeout = 15000; // milli seconds
|
||||
RTC_DATA_ATTR uint8_t wlanConnectFailCnt = 0;
|
||||
const uint16_t wlanConnectCheckInterval = 250; // milli seconds: poll wifi.state after wifi.begin()
|
||||
const uint16_t wlanConnectTimeout = 15000; // milli seconds
|
||||
RTC_DATA_ATTR uint8_t wlanConnectFailCnt = 0;
|
||||
|
||||
Si7021 si7021 = Si7021();
|
||||
float temp = 0.0;
|
||||
|
|
Loading…
Reference in New Issue