Weather station based on ESP32 and MicroPython with sending data to Google Sheets
This is a weather station based on ESP32 and MicroPython.
Here is a list of main features:
The sheet doesn't need to be publicly available on the Internet. The device doesn't require any middleman such as PushingBox or IFTTT.
This README contains a brief description how the project can be built. More details can be found in the following blogs:
Here is a circuit.
The project uses MicroPython 1.13. Older or newer versions may also work. The project uses the following tools:
esptool
for flashing ESP32mpfshell
for uploading files to ESP32minicom
for connecting to ESP32 for debugging purposesopenssl
and rsa
package for reading cryptographic keysTo access a Google sheet, the project needs a service account:
The key is encoded in PKCS1 format. Unfortunately, the project doesn't support PKCS1 yet. You need to convert the key to the format which the project undrstands:
$ cd scripts
$ sh extract_key.sh ../google_key.json ../key.json
You'll need key.json
and an email for the sercvice account.
Create a Google sheet and extract its ID from the URL
https://docs.google.com/spreadsheets/d/<ID_is_here>/edit#gid=0
Share the sheet with your service account. The sheet doesn't need to be publicly accessible from the Internet.
main.conf
contains a configuration for the device. Provide the following parameters:
ssid
and password
are credentials for your Wi-Fiaccess_point_ssid
and access_point_password
are credentials for a Wi-Fi access point
that is started by the device in the configuration mode.google_service_account_email
is an email for the Google's service accountgoogle_sheet_id
is the Google's sheet IDmeasurement_interval
is a mesurement interval in Xh Ym Zs
format, for example, 1h 2m 3s
co2_threshold
is a threshold for CO2 level. If the current CO2 level is higher than the threshold,
the yellow LED turns on.The following scripts may be used to upload MicroPython to ESP32:
$ sh scripts/erase.sh
$ sh scripts/flash.sh
$ sh scripts/verify.sh
You can run sh scripts/upload.sh
to upload the code, the configuration file and the key.
Before running the script, set the followin environment variables:
$ export SSID=ssid-for-your-wifi
$ export WIFI_PASSWORD=password-for-your-wifi
$ export ACCESS_POINT_SSID=esp32-weather-google-sheets
$ export ACCESS_POINT_PASSWORD=password-for-the-access-point
$ export GOOGLE_SERVICE_ACCOUNT_EMAIL=your-google-service-account-email
$ export GOOGLE_SHEET_ID=your-google-sheet-id
$ sh scripts/upload.sh
Then, you can connect to the board with sh scripts/minicon.sh
command to check if everything works fine.
The switch turns on the configuration mode. In this mode the device starts up a Wi-Fi access point, and runs an HTTP server on http://192.168.4.1. The server provides a web form for updating the configuration of the device.
Here is a list of possbile enhancements: