M5Paper project with weather information from openweathermap

Overview

M5PaperWeather

**M5Paper project with weather information from openweathermap ***

M5PaperWeather

Description

Arduino project to show internal environment data and weather information from openweathermap https://openweathermap.org on the e-ink display of the M5Paper. Please edit the config.h file with your own data. You need an api key from openweathermap. The software shows the following information:

  • A header with version, city wifi strength and battery status
  • Sun section with sunrise and sunset
  • Moon section with moonrise and moonset
  • Wind section with wind direction and wind speed
  • The internal SH30 sensor data (temperature and humidity) with the current date and time
  • A hourly forecast with hour, temperature and a weather icon.
  • Some detailt forecast graphs with temperature, rain, humidity and pressure

Disclaimer

I don't take any responsibility nor liability for using this software nor for the installation or any tips, advice, videos, etc. given by any member of this site or any related site.

License

This program is licensed under GPL-3.0

Thanks

Issues
  • Arduino compile error

    Arduino compile error

    What libraries are required to get this to build?

    Currently have libraries: Time, Moonrise, M5GFX, M5EPD, ArduinoJson, Wifi

    Using Arduino IDE 1.8.6 on MacOS

    /Users/bfaist/Documents/Arduino/libraries/M5EPD/src/M5EPD.cpp: In member function 'void M5EPD::BatteryADCBegin()': /Users/bfaist/Documents/Arduino/libraries/M5EPD/src/M5EPD.cpp:5:25: error: 'ADC1_GPIO35_CHANNEL' was not declared in this scope #define BAT_ADC_CHANNEL ADC1_GPIO35_CHANNEL ^~~~~~~~~~~~~~~~~~~ /Users/bfaist/Documents/Arduino/libraries/M5EPD/src/M5EPD.cpp:90:31: note: in expansion of macro 'BAT_ADC_CHANNEL' adc1_config_channel_atten(BAT_ADC_CHANNEL, ADC_ATTEN_DB_11); ^~~~~~~~~~~~~~~ /Users/bfaist/Documents/Arduino/libraries/M5EPD/src/M5EPD.cpp:5:25: note: suggested alternative: 'ADC1_CHANNEL_7' #define BAT_ADC_CHANNEL ADC1_GPIO35_CHANNEL ^~~~~~~~~~~~~~~~~~~ /Users/bfaist/Documents/Arduino/libraries/M5EPD/src/M5EPD.cpp:90:31: note: in expansion of macro 'BAT_ADC_CHANNEL' adc1_config_channel_atten(BAT_ADC_CHANNEL, ADC_ATTEN_DB_11); ^~~~~~~~~~~~~~~ /Users/bfaist/Documents/Arduino/libraries/M5EPD/src/M5EPD.cpp: In member function 'uint32_t M5EPD::getBatteryRaw()': /Users/bfaist/Documents/Arduino/libraries/M5EPD/src/M5EPD.cpp:5:25: error: 'ADC1_GPIO35_CHANNEL' was not declared in this scope #define BAT_ADC_CHANNEL ADC1_GPIO35_CHANNEL ^~~~~~~~~~~~~~~~~~~ /Users/bfaist/Documents/Arduino/libraries/M5EPD/src/M5EPD.cpp:100:25: note: in expansion of macro 'BAT_ADC_CHANNEL' return adc1_get_raw(BAT_ADC_CHANNEL); ^~~~~~~~~~~~~~~ /Users/bfaist/Documents/Arduino/libraries/M5EPD/src/M5EPD.cpp:5:25: note: suggested alternative: 'ADC1_CHANNEL_7' #define BAT_ADC_CHANNEL ADC1_GPIO35_CHANNEL ^~~~~~~~~~~~~~~~~~~ /Users/bfaist/Documents/Arduino/libraries/M5EPD/src/M5EPD.cpp:100:25: note: in expansion of macro 'BAT_ADC_CHANNEL' return adc1_get_raw(BAT_ADC_CHANNEL); ^~~~~~~~~~~~~~~ /Users/bfaist/Documents/Arduino/libraries/M5EPD/src/M5EPD.cpp: In member function 'uint32_t M5EPD::getBatteryVoltage()': /Users/bfaist/Documents/Arduino/libraries/M5EPD/src/M5EPD.cpp:5:25: error: 'ADC1_GPIO35_CHANNEL' was not declared in this scope #define BAT_ADC_CHANNEL ADC1_GPIO35_CHANNEL ^~~~~~~~~~~~~~~~~~~ /Users/bfaist/Documents/Arduino/libraries/M5EPD/src/M5EPD.cpp:111:39: note: in expansion of macro 'BAT_ADC_CHANNEL' adc_raw_value += adc1_get_raw(BAT_ADC_CHANNEL); ^~~~~~~~~~~~~~~ /Users/bfaist/Documents/Arduino/libraries/M5EPD/src/M5EPD.cpp:5:25: note: suggested alternative: 'ADC1_CHANNEL_7' #define BAT_ADC_CHANNEL ADC1_GPIO35_CHANNEL ^~~~~~~~~~~~~~~~~~~ /Users/bfaist/Documents/Arduino/libraries/M5EPD/src/M5EPD.cpp:111:39: note: in expansion of macro 'BAT_ADC_CHANNEL' adc_raw_value += adc1_get_raw(BAT_ADC_CHANNEL); ^~~~~~~~~~~~~~~

    opened by bfaist 0
  • Arduino compile error

    Arduino compile error

    In file included from D:\Arduino\M5PaperWeather\weather\Data.h:24, from D:\Arduino\M5PaperWeather\weather\weather.ino:30: D:\Arduino\M5PaperWeather\weather\Weather.h: In member function 'bool Weather::Fill(const JsonObject&)': D:\Arduino\M5PaperWeather\weather\Weather.h:127:75: warning: 'typename ArduinoJson6185_91::enable_if<ArduinoJson6185_91::is_same<T, char*>::value, const char*>::type ArduinoJson6185_91::MemberProxy<TParent, TStringRef>::as() const [with T = char*; TObject = ArduinoJson6185_91::ElementProxy<ArduinoJson6185_91::MemberProxy<ArduinoJson6185_91::MemberProxy<ArduinoJson6185_91::ObjectRef, const char*>, const char*> >; TStringRef = const char*; typename ArduinoJson6185_91::enable_if<ArduinoJson6185_91::is_same<T, char*>::value, const char*>::type = const char*]' is deprecated: Replace as<char*>() with as<const char*>() [-Wdeprecated-declarations] hourlyMain[0] = root["current"]["weather"][0]["main"].as<char >(); ^ In file included from D:\Arduino\libraries\ArduinoJson\src/ArduinoJson/Document/JsonDocument.hpp:9, from D:\Arduino\libraries\ArduinoJson\src/ArduinoJson/Document/BasicJsonDocument.hpp:7, from D:\Arduino\libraries\ArduinoJson\src/ArduinoJson/Document/DynamicJsonDocument.hpp:7, from D:\Arduino\libraries\ArduinoJson\src/ArduinoJson.hpp:21, from D:\Arduino\libraries\ArduinoJson\src/ArduinoJson.h:9, from D:\Arduino\M5PaperWeather\weather\Weather.h:25, from D:\Arduino\M5PaperWeather\weather\Data.h:24, from D:\Arduino\M5PaperWeather\weather\weather.ino:30: D:\Arduino\libraries\ArduinoJson\src/ArduinoJson/Object/MemberProxy.hpp:79:7: note: declared here as() const { ^~ In file included from D:\Arduino\M5PaperWeather\weather\Data.h:24, from D:\Arduino\M5PaperWeather\weather\weather.ino:30: D:\Arduino\M5PaperWeather\weather\Weather.h:128:75: warning: 'typename ArduinoJson6185_91::enable_if<ArduinoJson6185_91::is_same<T, char>::value, const char*>::type ArduinoJson6185_91::MemberProxy<TParent, TStringRef>::as() const [with T = char*; TObject = ArduinoJson6185_91::ElementProxy<ArduinoJson6185_91::MemberProxy<ArduinoJson6185_91::MemberProxy<ArduinoJson6185_91::ObjectRef, const char*>, const char*> >; TStringRef = const char*; typename ArduinoJson6185_91::enable_if<ArduinoJson6185_91::is_same<T, char*>::value, const char*>::type = const char*]' is deprecated: Replace as<char*>() with as<const char*>() [-Wdeprecated-declarations] hourlyIcon[0] = root["current"]["weather"][0]["icon"].as<char >(); ^ In file included from D:\Arduino\libraries\ArduinoJson\src/ArduinoJson/Document/JsonDocument.hpp:9, from D:\Arduino\libraries\ArduinoJson\src/ArduinoJson/Document/BasicJsonDocument.hpp:7, from D:\Arduino\libraries\ArduinoJson\src/ArduinoJson/Document/DynamicJsonDocument.hpp:7, from D:\Arduino\libraries\ArduinoJson\src/ArduinoJson.hpp:21, from D:\Arduino\libraries\ArduinoJson\src/ArduinoJson.h:9, from D:\Arduino\M5PaperWeather\weather\Weather.h:25, from D:\Arduino\M5PaperWeather\weather\Data.h:24, from D:\Arduino\M5PaperWeather\weather\weather.ino:30: D:\Arduino\libraries\ArduinoJson\src/ArduinoJson/Object/MemberProxy.hpp:79:7: note: declared here as() const { ^~ In file included from D:\Arduino\M5PaperWeather\weather\Data.h:24, from D:\Arduino\M5PaperWeather\weather\weather.ino:30: D:\Arduino\M5PaperWeather\weather\Weather.h:133:84: warning: 'typename ArduinoJson6185_91::enable_if<ArduinoJson6185_91::is_same<T, char>::value, const char*>::type ArduinoJson6185_91::MemberProxy<TParent, TStringRef>::as() const [with T = char*; TObject = ArduinoJson6185_91::ElementProxy<ArduinoJson6185_91::MemberProxy<ArduinoJson6185_91::ElementProxy<ArduinoJson6185_91::ArrayRef>, const char*> >; TStringRef = const char*; typename ArduinoJson6185_91::enable_if<ArduinoJson6185_91::is_same<T, char*>::value, const char*>::type = const char*]' is deprecated: Replace as<char*>() with as<const char*>() [-Wdeprecated-declarations] hourlyMain[i] = hourly_list[i - 1]["weather"][0]["main"].as<char >(); ^ In file included from D:\Arduino\libraries\ArduinoJson\src/ArduinoJson/Document/JsonDocument.hpp:9, from D:\Arduino\libraries\ArduinoJson\src/ArduinoJson/Document/BasicJsonDocument.hpp:7, from D:\Arduino\libraries\ArduinoJson\src/ArduinoJson/Document/DynamicJsonDocument.hpp:7, from D:\Arduino\libraries\ArduinoJson\src/ArduinoJson.hpp:21, from D:\Arduino\libraries\ArduinoJson\src/ArduinoJson.h:9, from D:\Arduino\M5PaperWeather\weather\Weather.h:25, from D:\Arduino\M5PaperWeather\weather\Data.h:24, from D:\Arduino\M5PaperWeather\weather\weather.ino:30: D:\Arduino\libraries\ArduinoJson\src/ArduinoJson/Object/MemberProxy.hpp:79:7: note: declared here as() const { ^~ In file included from D:\Arduino\M5PaperWeather\weather\Data.h:24, from D:\Arduino\M5PaperWeather\weather\weather.ino:30: D:\Arduino\M5PaperWeather\weather\Weather.h:134:84: warning: 'typename ArduinoJson6185_91::enable_if<ArduinoJson6185_91::is_same<T, char>::value, const char*>::type ArduinoJson6185_91::MemberProxy<TParent, TStringRef>::as() const [with T = char*; TObject = ArduinoJson6185_91::ElementProxy<ArduinoJson6185_91::MemberProxy<ArduinoJson6185_91::ElementProxy<ArduinoJson6185_91::ArrayRef>, const char*> >; TStringRef = const char*; typename ArduinoJson6185_91::enable_if<ArduinoJson6185_91::is_same<T, char*>::value, const char*>::type = const char*]' is deprecated: Replace as<char*>() with as<const char*>() [-Wdeprecated-declarations] hourlyIcon[i] = hourly_list[i - 1]["weather"][0]["icon"].as<char *>(); ^ In file included from D:\Arduino\libraries\ArduinoJson\src/ArduinoJson/Document/JsonDocument.hpp:9, from D:\Arduino\libraries\ArduinoJson\src/ArduinoJson/Document/BasicJsonDocument.hpp:7, from D:\Arduino\libraries\ArduinoJson\src/ArduinoJson/Document/DynamicJsonDocument.hpp:7, from D:\Arduino\libraries\ArduinoJson\src/ArduinoJson.hpp:21, from D:\Arduino\libraries\ArduinoJson\src/ArduinoJson.h:9, from D:\Arduino\M5PaperWeather\weather\Weather.h:25, from D:\Arduino\M5PaperWeather\weather\Data.h:24, from D:\Arduino\M5PaperWeather\weather\weather.ino:30: D:\Arduino\libraries\ArduinoJson\src/ArduinoJson/Object/MemberProxy.hpp:79:7: note: declared here as() const { ^~ D:\Arduino\libraries\M5EPD\src\M5EPD.cpp: In member function 'void M5EPD::BatteryADCBegin()': D:\Arduino\libraries\M5EPD\src\M5EPD.cpp:5:25: error: 'ADC1_GPIO35_CHANNEL' was not declared in this scope #define BAT_ADC_CHANNEL ADC1_GPIO35_CHANNEL ^~~~~~~~~~~~~~~~~~~ D:\Arduino\libraries\M5EPD\src\M5EPD.cpp:90:31: note: in expansion of macro 'BAT_ADC_CHANNEL' adc1_config_channel_atten(BAT_ADC_CHANNEL, ADC_ATTEN_DB_11); ^~~~~~~~~~~~~~~ D:\Arduino\libraries\M5EPD\src\M5EPD.cpp:5:25: note: suggested alternative: 'ADC1_CHANNEL_7' #define BAT_ADC_CHANNEL ADC1_GPIO35_CHANNEL ^~~~~~~~~~~~~~~~~~~ D:\Arduino\libraries\M5EPD\src\M5EPD.cpp:90:31: note: in expansion of macro 'BAT_ADC_CHANNEL' adc1_config_channel_atten(BAT_ADC_CHANNEL, ADC_ATTEN_DB_11); ^~~~~~~~~~~~~~~ D:\Arduino\libraries\M5EPD\src\M5EPD.cpp: In member function 'uint32_t M5EPD::getBatteryRaw()': D:\Arduino\libraries\M5EPD\src\M5EPD.cpp:5:25: error: 'ADC1_GPIO35_CHANNEL' was not declared in this scope #define BAT_ADC_CHANNEL ADC1_GPIO35_CHANNEL ^~~~~~~~~~~~~~~~~~~ D:\Arduino\libraries\M5EPD\src\M5EPD.cpp:100:25: note: in expansion of macro 'BAT_ADC_CHANNEL' return adc1_get_raw(BAT_ADC_CHANNEL); ^~~~~~~~~~~~~~~ D:\Arduino\libraries\M5EPD\src\M5EPD.cpp:5:25: note: suggested alternative: 'ADC1_CHANNEL_7' #define BAT_ADC_CHANNEL ADC1_GPIO35_CHANNEL ^~~~~~~~~~~~~~~~~~~ D:\Arduino\libraries\M5EPD\src\M5EPD.cpp:100:25: note: in expansion of macro 'BAT_ADC_CHANNEL' return adc1_get_raw(BAT_ADC_CHANNEL); ^~~~~~~~~~~~~~~ D:\Arduino\libraries\M5EPD\src\M5EPD.cpp: In member function 'uint32_t M5EPD::getBatteryVoltage()': D:\Arduino\libraries\M5EPD\src\M5EPD.cpp:5:25: error: 'ADC1_GPIO35_CHANNEL' was not declared in this scope #define BAT_ADC_CHANNEL ADC1_GPIO35_CHANNEL ^~~~~~~~~~~~~~~~~~~ D:\Arduino\libraries\M5EPD\src\M5EPD.cpp:111:39: note: in expansion of macro 'BAT_ADC_CHANNEL' adc_raw_value += adc1_get_raw(BAT_ADC_CHANNEL); ^~~~~~~~~~~~~~~ D:\Arduino\libraries\M5EPD\src\M5EPD.cpp:5:25: note: suggested alternative: 'ADC1_CHANNEL_7' #define BAT_ADC_CHANNEL ADC1_GPIO35_CHANNEL ^~~~~~~~~~~~~~~~~~~ D:\Arduino\libraries\M5EPD\src\M5EPD.cpp:111:39: note: in expansion of macro 'BAT_ADC_CHANNEL' adc_raw_value += adc1_get_raw(BAT_ADC_CHANNEL);

    opened by dronix27 2
C++ wrapper library for global weather API - hyperlocal weather forecasts

meteosource_cpp - Weather API library C++ wrapper library for Meteosource weather API that provides detailed hyperlocal weather forecasts for any loca

Meteosource 4 Jun 23, 2022
LineaMeteoStazione is a complete weather station

LineaMeteoStazione is a complete weather station which can be interfaced with professional sensors from Sensirion as well as some Davis Instrument component (Rain Gauge, Anemometer) The project is aimed as DIY weather station but just requiring the assembly part, because the boards will already be given programmed by me as well as the complete PCB. The code will be shared Opensource for the people who wants to try to do it from the beginning or modify it!

Eugenio 14 Aug 18, 2021
Using the LilyGo EPD 4.7" display to show OWM Weather Data

LilyGo-EPD-4-7-OWM-Weather-Display Using the LilyGo EPD 4.7" display to show OWM Weather Data Version 2.72 Improved Icon shapes and positioning Adjust

G6EJD 13 Apr 2, 2021
Tiny weather station based on TTGO T5 V2.3.1 (ESP32 with 2.13

Tiny weather station based on TTGO T5 V2.3.1 (ESP32 with 2.13" e-ink display) Features wireless and rechargable weather description including temperat

Piotr Kubica 17 Apr 3, 2022
Weather clock with automatic time synchronization

Clock with weather and automatic time synchronization Features Display The numbers are written in a font similar to handwritten; The change of numbers

Anton Petrusevich 4 Apr 1, 2022
M5Core2 Weather Dashboard based on LVGL.

M5Core2 Weather Dashboard Demo Based on LVGL and X-TRACK. Before compile Because CPP does not support flexible array member, you need to modify the de

M5Stack 13 Jun 7, 2022
Example code for collecting weather data from an ESP32 and then uploading this data to InfluxDB in order to create a dashboard using Grafana.

InfluxGrafanaTutorial Example code for collecting weather data from an ESP32 and then uploading this data to InfluxDB in order to create a dashboard u

Michael Klements 5 May 12, 2022
This project contains information on the PC-Link hardware interface for some early 2000 Sony HiFi decks

pclink-i2c This project contains information on the PC-Link hardware interface for some early 2000 Sony HiFi decks, such as the CMT-DC500MD (also know

Sir68k 1 Jan 21, 2022
A Lilu plugin that makes System Information recognize your Realtek card reader as a native one

Realtek Card Reader Driver Friend Introduction A Lilu plugin that makes System Information recognize your Realtek card reader as a native one. Support

FireWolf 44 Jun 23, 2022
A handy little system information monitor using and ESP32 + ILI9488 TFT. Receives data over Serial Bluetooth.

Bluetooth-System-Monitor A handy little system information monitor using and ESP32 + ILI9488 TFT. Receives data over Serial Bluetooth and thus giving

Dustin Watts 24 May 28, 2022
Convert LLVM coverage information into HTML reports

llvm-coverage-to-html converter The clang compiler supports source based coverage tracking, but the default reporting options are very basic. This too

Thomas Neumann 2 Oct 11, 2021
ContactGot is an offline desktop app, where clients can leave their info, while an administrator can manage which information they need to gather on certain projects.

ContactGot Contents Description How to use Requirements Engineering Installation Documentation Design Architecture Demonstration 1. Description During

Elizaveta 16 Dec 17, 2021
Decoded Information from Radio Emissions for Windows Or Linux Fans

Dire Wolf is a software "soundcard" AX.25 packet modem/TNC and APRS encoder/decoder. It can be used stand-alone to observe APRS traffic, as a tracker, digipeater, APRStt gateway, or Internet Gateway (IGate).

null 1.1k Jul 3, 2022
A BOF for enumerating version information for DLLs associated for a Beacon process.

DLL Image Resource Version Enumeration BOF What is this? This is a Cobalt Strike BOF file (a mildly massaged port of @N4k3dTurtl3's existing PoC , mea

null 8 May 30, 2022
Information on my chord-based typing system

taipo A chord-based typing system: only needs 10 keys per hand (2 keys per finger) optimized to reduce finger usage, travel distance, and awkward patt

Michael 18 Mar 14, 2022
Steals plaguecheat.cc login information and sends them over Discord webhook

PlagueStealer DO NOT USE THIS!!! I TAKE NO RESPONSIBILITY FOR ANY DAMAGE CAUSED How to use: Make a Discord webhook (watch this if you dont know how: h

Sinner 3 Dec 28, 2021
Windows kernel information leakage POCs on Windows 10 RS1+

This repository covers various techniques and methods I write while conducting research into infoleaks, these are for leaking various Windows kernel a

null 2 Jun 15, 2022
Sysfex - Another system information tool written in C++

Sysfex Another neofetch-like system information fetching tool for linux-based systems written in C++ Installation To install this program using the pr

Mehedi Rahman Mahi 101 Jun 15, 2022