Code Monkey home page Code Monkey logo

clockwise's Introduction

News 90s GIF[2024-04-21] Version 1.4.2 released! Check the change log to see the fixes and new features added. Be part of the Clock Club and create your own clockface using Canvas.

Clockwise CI/CD

Logo

The DIY smart wall clock device

Clockwise was an idea I had while working with 64x64 LED matrices. These displays are about the size of a wall clock and with the ESP32, besides controlling the content presented on the display we also gain the functionality of WiFi, Bluetooth, touch buttons and other sensors, which gives us basically a smart wall clock. From there I started to develop a platform to create the Clockfaces, or skins that the clock can have. The possibilities are many and I hope that with help from contributors, we can grow the options even more.

⏰ New Clockfaces

Create a new custom Clockface starting from here or take a look at the Clock Club and discover how to create new ones using just a JSON file with no coding.

Available clockfaces

Mario Bros. Clock Time in Words
Mario Bros. Clockface Time in Words Clockface
https://github.com/jnthas/cw-cf-0x01 https://github.com/jnthas/cw-cf-0x02
World Map Clock Castlevania Clock Tower
World Map Clockface Castlevania Clockface
https://github.com/jnthas/cw-cf-0x03 https://github.com/jnthas/cw-cf-0x04
Pacman Pokedex
Pacman Clockface Pokedex Clockface
https://github.com/jnthas/cw-cf-0x05 https://github.com/jnthas/cw-cf-0x06
Canvas Description
Canvas Clockface Canvas is a special type of Clockface
that is capable of rendering different
themes described in a JSON file.
Find out more here.
https://github.com/jnthas/cw-cf-0x07

Driving the led matrix

The three main hardware components of Clockwise are:

  • HUB75/HUB75E compatible LED matrix 64x64
  • an ESP32; and
  • a power supply of 3A or more

With these components in hand, just follow the wiring instructions according to the library used, by default Clockwise uses the ESP32-HUB75-MatrixPanel-I2S-DMA but any Adafruit GFX compatible library should work. The default wiring connection is showed below.

ESP32-HUB75-MatrixPanel-I2S-DMA wiring

Full size

How to change the clockface (web flashing)

  1. Go to https://clockwise.page/ and select the desired clockface
  2. Connect the ESP32 device on your computer's USB port
  3. Click on the Flash button
  4. A dialog will appear, select the correct USB port and click in Connect (screenshot)
  5. Select the INSTALL and INSTALL again (screenshot)
  6. Wait while the flash tool uploads the firmware and finish (screenshot)
  7. From the version 1.1.0, click in NEXT on step 6, Improv will start looking for available WiFi networks to connect
  8. Select your local network (must be a 2.4GHz) and enter with your password (screenshot)
  9. If connection was successful, a message with button VISIT DEVICE will pop up and you can visit the Clockwise setting page (screenshot)

Configuring only WiFi

After flashing your clockface, you will have a step to configure the WiFi. But in case you change your access point or password, you can set up just the WiFi connecting the Clockwise on USB, opening https://clockwise.page and clicking in Flash button, a window will pop up with a few options where you can re-configure your WiFi network (screenshot) as well as open the Settings page to change preferences using button VISIT DEVICE. Remember: it is important to use a 2.4GHz WiFi, it will not work on 5GHz.

Settings page

The settings page have the following options

  • Timezone: The timezone must be in the format America/New_York, America/Sao_Paulo, Europe/Paris, Asia/Dubai, etc. so that the clock can connect to an NTP server to get the correct time.
  • NTP Server: By default the clock will sync with pool.ntp.org, but you can configure your own (local) NTP server to be used.
  • Swap Blue/Green pins: Some displays have the RGB order different, in this case RBG. You can use this options to change the order.
  • Display Bright: Change the display bright.
  • Use 24h format: You can choose between 20:00 or 8:00PM in your device.
  • Automatic Bright: Once you connect a LDR in the ESP32, Clockwise will be able to control the display bright based on the ambient light. Check the Wiki about that.
  • NTP Server: Configure your prefered NTP Server. You can use one of the NTP Pool Project pools or a local one. Default is time.google.com.
  • LDR Pin: The ESP32 GPIO pin where the LDR is connected to. The default is 35. There is a link there where you can read the current value of LDR and test if it's working.
  • Posix Timezone String: To avoid remote lookups of ezTime, provide a Posix string that corresponds to your timezone (explanation). Leave empty to obtain this automatically from the server.
  • Display Rotation: Allows you to rotate the display. This is useful if you need to adjust the direction in which cables protrude relative to the displayed image.

How to change the clockface (PlatformIO)

Clockwise uses PlatformIO as IDE, so the configuration is already done if you use the same. The Clockwise structure consists mainly of three folders

  • clockfaces: contains the collection of available clockfaces. This folder is not included when compiling
  • lib: contains the basic code for Clockwise to work and in addition a symbolic link to the current clockface
  • src: contains the entry point for the clock code
.
├── clockfaces
│   ├── cw-cf-0x01
│   ├── cw-cf-0x02
│   └── cw-cf-0x03
├── lib
│   ├── cw-commons
│   ├── cw-gfx-engine
│   └── timeinwords -> ../clockfaces/cw-cf-0x02/
└── src
    └── main.cpp

Clone this repository and then run the following command to clone the clockface submodules

.../clockwise$ git submodule update --init firmware/clockfaces

To create the symbolic link run the following command inside lib/ folder:

.../clockwise/firmware/lib$ ln -s ../clockfaces/cw-cf-0x02/ timeinwords

Or, if you prefer, you can get the same result by copying the desired clockface folder into lib/

The same way as web flashing, when connecting for the first time you will have to configure the wifi, follow the instructions in Configuring WiFi section above.

How to change the clockface (esp-idf)

You can use the official Esspressif IoT Development Framekwork (aka esp-idf) to build and upload this project to an ESP32 device, including the ESP32-Trinity board.

Install esp-idf

Follow the Step By Step installation instructions.

Setup the environment variables

Follow the instructions here.

Clone and build this project

  • git clone --recurse-submodules https://github.com/jnthas/clockwise.git
  • idf.py reconfigure
  • idf.py menuconfig (select Clockwise Configuration and choose the clockface)
  • idf.py flash
  • idf.py monitor

clockwise's People

Contributors

abrender avatar jeffwdh avatar jnthas avatar thegroundzero avatar vandalon avatar witnessmenow avatar xefan avatar yuan910715 avatar zombodotcom avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

clockwise's Issues

automatic brightness not stable

Finally got this beautiful clock running. But run into another little problem. Got an ldr connected to gpio 34. In the clockwise settings changed the pin to 34. But whatever value I put in the settings page at automatic bright. The brightness keeps switching back and forth when I turn off the lights. The display changes brightness every couple off seconds. What am I doing wrong? Maybe a wrong ldr? Have tried several types. But get stuck every time.

Feature Request : Add WiFi PEAP Auth

I'm not expert of IdF but better with ESP32 Arduino package, would it be complicated to add option to have PEAP WiFi option?

We're in a company building where wifi is not open but works with PEAP, on Arduino ESP32 we just do something like that and it's working fine, not sure how to do with IDF.

  // we got PEAP Auth config?
  if (EAPname!="" && EAPuser!="" && EAPpass!="" ) {
    WiFi.begin(EAPname, WPA2_AUTH_PEAP, EAPuser, EAPuser, EAPpass);
    // wait 30s to connect
    if (!checkAPConnection(30)) {
      Serial.print("Failed to connect using PEAP Auth, fallback to classic");
    }
  }

  // in case PEAP failed or not configured, just use classic WiFi SSID/Pass
  if (WiFi.status() != WL_CONNECTED) {
    WiFi.begin(APname, APpass);
    connected = checkAPConnection(45);
  }

Thanks

Turn the display on/off (or adjust brightness) remotely

I built this last week for my 6yo son and he LOVES it - thankyou for an amazing project.

It would be awesome if it could be controlled remotely - maybe via MQTT? He isn't in his room most of the day (while as school!) and i could set up an automation in home assistant/node red to turn it off/on.

Unfortunately I do not have the programming skills to add this feature and have no idea how big the task would be to know if its even reasonable to ask!

Some pics of the build for anyone interested (i used a photo frame from IKEA and 3D printed a bezel):

20230531_131747

20230531_132021

20230531_131959

20230531_132038

Timezone broken?

Now with 1.3.0 installed, my Clockwise still doesn't show the correct time.
At first I blamed it being on a non-internet network, as it did work on my 1 installation on an internet-connected network.
However, it still appears to be stuck on UTC, thus being 2 hours off.

I tried configuring my own NTP server as well as reverting back to pool.ntp.org and opening up the firewall for NTP requests comming from my Clockwise.

image

API endpoint to change brightness / turn on/off the screen.

Hi, Thanks for this amazing peace of ready made software!

I'm wondering if it would be possible to create and API endpoint to set the brightness and/or turn on/off the display for use with home automation. I would like to hang a couple of these clocks in the kids bedrooms but it would be nice if they would dim in the evening and turn off when it's time to sleep :)

Thanks again for all the effort already put in this project!

defined night time switched off during night time

Hello Jonathas, thank you very much for the new SW 1.1.0. I have installed it and everything works perfectly. Especially good for me is the regulation of the display brightness because at night in the dark the display brightness is disturbing.
It would be very practical for me if the display could be switched off completely at a defined time of night. Alternatively, an LDR ABC (automatic brightness control) would also help.
Best regards
Burkhard

API endpoints list

Hey @jnthas

I was wondering if you have a list of endpoints available via HTTP?

The issue I have is that my ESP32 board seems to have very bad Wi-Fi signal, the web UI barely ever loads but when using the /set?displayBright=, I noticed I can make it work much more reliably.

Thanks

[Feature Request] Light Sensor

AM / PM label in 24 H mode

Hello Jonathas. Thank you for the new clockface. I have installed it and it works. But I have a question about the display of the time in 24-hour format: Why is there still the "A" or the "P"? You don't need that. And then it would be better and visually nicer if the 24-hour format didn't say 8:24 but 08:24. Otherwise everything is great as always and maybe with a new release my wish for the display OFF night switch or an ABC control will come true.
best regards
Burkhard

Feature request more 64x32 options

Hi.

I am very new to esp32 boards. I've been using matrix 64x32 and 64x64 boards for a year or so with raspberry pi pico. But I'm completely dumb as anything and have a really really hard time getting a simple project to work😪. I found your project and wow it's so simple to plug, install and play. Downside to clockwise atm is it only has one (Tetris) 64x32 option. Can anyone please add to the 64x32 library please please please. A simple clock, and/or clock & date possibly with a brightness slider and colour picker.

If not I completely understand and thanks anyhow 😊.

Side note, my 64x64 matrix panel doesn't have a D pin, just labeled GND, so I can't get it to work. I followed the pin out and I get the image but,(if split in 4 top to bottom) the top and 3rd only showing the image.

I just have the esp32, jumper wires and the matrix, nothing else and I can't buy other hardware for a while as I've spent way too much already. TMI, but in case it was going to be suggested.

Thanks!!!!

Ruins the AP functionality

with the new Improv library, it no longer can be setup standalone without wifi credentials. No AP is emitted if it cannot connect to wifi and needs to be setup on the computer.

Color mapping issue

My display seems to work in BGR instead of RGB:
This simple code show the attacched image

  uint16_t myRED = dma_display->color565(255, 0, 0);
  uint16_t myGREEN = dma_display->color565(0, 255, 0);
  uint16_t myBLUE = dma_display->color565(0, 0, 255);
  dma_display->setTextSize(1);
  dma_display->setTextColor(myRED);
  dma_display->setCursor(0, 0);
  dma_display->println("This is RED");
  dma_display->setTextColor(myBLUE);
  dma_display->setCursor(0, 32);
  dma_display->print("This is BLUE");  
  dma_display->setTextColor(myGREEN);
  dma_display->setCursor(0, 50);
  dma_display->print("This is GREEN"); 

color test

Is there a simple fix to manage that? Of course I could just switch the channels in color565 function, but when I use mariobros clock, the assets are RGB565 hardcoded.
Maybe there is a config flag?
Another option would be shitch channels i MatrixPanel_I2S_DMA::updateMatrixDMABuffer method....

[Feature Request] - Not Require Wireless Access

This might not even be possible, but I wish there was a way to setup the clock to not need internet access. I was wanting to take this into my office at work and dont want to connect it to the corporate Wi-Fi!

Possible to rotate clock face

Is it possible to rotate the clock face ? The mounting screws on my display don’t line up with the orientation of the clock when powered on … thanks

Web installation page

Hi longtime no speak.
The webpage for the download is not working. When I click the Connect button nothing happens. I also sometimes get a this browser is not compatable for web serial API message and im using chrome as well as Edge on my pc.

error when I try to build pacman clockface

I put PNGdec in clockwise\components and add a CMakeLists.txt file as below

cmake_minimum_required(VERSION 3.15)

if(ESP_PLATFORM)
	# Build ArduinoJson as an ESP-IDF component
	idf_component_register(INCLUDE_DIRS src)
	return()
endif()

project(PNGdec VERSION 1.0.1)
add_subdirectory(src)
cmd.exe /C "cd . && D:\Espressif\tools\xtensa-esp32-elf\esp-2021r2-patch5-8.4.0\xtensa-esp32-elf\bin\xtensa-esp32-elf-g++.exe -mlongcalls -Wno-frame-address  @CMakeFiles\clockwise.elf.rsp -o clockwise.elf  && cd ."
d:/espressif/tools/xtensa-esp32-elf/esp-2021r2-patch5-8.4.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: esp-idf/cw-cf-0x07/libcw-cf-0x07.a(Clockface.cpp.obj):(.literal._ZL9openImagePKc+0x10): undefined reference to `PNG::openRAM(unsigned char*, int, void (*)(png_draw_tag*))'
d:/espressif/tools/xtensa-esp32-elf/esp-2021r2-patch5-8.4.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: esp-idf/cw-cf-0x07/libcw-cf-0x07.a(Clockface.cpp.obj):(.literal._ZL18getImageDimensionsPKcRhS1_+0x0): undefined reference to `PNG::getWidth()'
d:/espressif/tools/xtensa-esp32-elf/esp-2021r2-patch5-8.4.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: esp-idf/cw-cf-0x07/libcw-cf-0x07.a(Clockface.cpp.obj):(.literal._ZL18getImageDimensionsPKcRhS1_+0x4): undefined reference to `PNG::getHeight()'
d:/espressif/tools/xtensa-esp32-elf/esp-2021r2-patch5-8.4.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: esp-idf/cw-cf-0x07/libcw-cf-0x07.a(Clockface.cpp.obj):(.literal._ZL18getImageDimensionsPKcRhS1_+0x8): undefined reference to `PNG::close()'
d:/espressif/tools/xtensa-esp32-elf/esp-2021r2-patch5-8.4.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: esp-idf/cw-cf-0x07/libcw-cf-0x07.a(Clockface.cpp.obj):(.literal._ZL7PNGDrawP12png_draw_tag+0x0): undefined reference to `PNG::getLineAsRGB565(png_draw_tag*, unsigned short*, int, unsigned int)'
d:/espressif/tools/xtensa-esp32-elf/esp-2021r2-patch5-8.4.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: esp-idf/cw-cf-0x07/libcw-cf-0x07.a(Clockface.cpp.obj):(.literal._ZL11renderImagePKchh+0x0): undefined reference to `PNG::decode(void*, int)'
d:/espressif/tools/xtensa-esp32-elf/esp-2021r2-patch5-8.4.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: esp-idf/cw-cf-0x07/libcw-cf-0x07.a(Clockface.cpp.obj): in function `openImage(char const*)':
D:/github/clockwise/firmware/clockfaces/cw-cf-0x07/PNGRender.h:35: undefined reference to `PNG::openRAM(unsigned char*, int, void (*)(png_draw_tag*))'
d:/espressif/tools/xtensa-esp32-elf/esp-2021r2-patch5-8.4.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: esp-idf/cw-cf-0x07/libcw-cf-0x07.a(Clockface.cpp.obj): in function `getImageDimensions(char const*, unsigned char&, unsigned char&)':
D:/github/clockwise/firmware/clockfaces/cw-cf-0x07/PNGRender.h:59: undefined reference to `PNG::getWidth()'
d:/espressif/tools/xtensa-esp32-elf/esp-2021r2-patch5-8.4.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: D:/github/clockwise/firmware/clockfaces/cw-cf-0x07/PNGRender.h:59: undefined reference to `PNG::getHeight()'
d:/espressif/tools/xtensa-esp32-elf/esp-2021r2-patch5-8.4.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: D:/github/clockwise/firmware/clockfaces/cw-cf-0x07/PNGRender.h:60: undefined reference to `PNG::close()'
d:/espressif/tools/xtensa-esp32-elf/esp-2021r2-patch5-8.4.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: esp-idf/cw-cf-0x07/libcw-cf-0x07.a(Clockface.cpp.obj): in function `PNGDraw(png_draw_tag*)':
D:/github/clockwise/firmware/clockfaces/cw-cf-0x07/PNGRender.h:25: undefined reference to `PNG::getLineAsRGB565(png_draw_tag*, unsigned short*, int, unsigned int)'
d:/espressif/tools/xtensa-esp32-elf/esp-2021r2-patch5-8.4.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: esp-idf/cw-cf-0x07/libcw-cf-0x07.a(Clockface.cpp.obj): in function `renderImage(char const*, unsigned char, unsigned char)':
D:/github/clockwise/firmware/clockfaces/cw-cf-0x07/PNGRender.h:49: undefined reference to `PNG::decode(void*, int)'
d:/espressif/tools/xtensa-esp32-elf/esp-2021r2-patch5-8.4.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: D:/github/clockwise/firmware/clockfaces/cw-cf-0x07/PNGRender.h:49: undefined reference to `PNG::close()'
d:/espressif/tools/xtensa-esp32-elf/esp-2021r2-patch5-8.4.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: esp-idf/arduino/libarduino.a(WiFiClientSecure.cpp.obj):(.literal._ZN16WiFiClientSecure4stopEv+0x4): undefined reference to `stop_ssl_socket(sslclient_context*, char const*, char const*, char const*)'
d:/espressif/tools/xtensa-esp32-elf/esp-2021r2-patch5-8.4.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: esp-idf/arduino/libarduino.a(WiFiClientSecure.cpp.obj):(.literal._ZN16WiFiClientSecure5writeEPKhj+0x0): undefined reference to `send_ssl_data(sslclient_context*, unsigned char const*, unsigned int)'
d:/espressif/tools/xtensa-esp32-elf/esp-2021r2-patch5-8.4.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: esp-idf/arduino/libarduino.a(WiFiClientSecure.cpp.obj):(.literal._ZN16WiFiClientSecure4readEPhj+0x0): undefined reference to `get_ssl_receive(sslclient_context*, unsigned char*, int)'
d:/espressif/tools/xtensa-esp32-elf/esp-2021r2-patch5-8.4.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: esp-idf/arduino/libarduino.a(WiFiClientSecure.cpp.obj):(.literal._ZN16WiFiClientSecure9availableEv+0x0): undefined reference to `data_to_read(sslclient_context*)'
d:/espressif/tools/xtensa-esp32-elf/esp-2021r2-patch5-8.4.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: esp-idf/arduino/libarduino.a(WiFiClientSecure.cpp.obj):(.literal._ZN16WiFiClientSecureC2Ev+0x4): undefined reference to `ssl_init(sslclient_context*)'
d:/espressif/tools/xtensa-esp32-elf/esp-2021r2-patch5-8.4.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: esp-idf/arduino/libarduino.a(WiFiClientSecure.cpp.obj):(.literal._ZN16WiFiClientSecure7connectEPKctS1_S1_S1_+0xc): undefined reference to `start_ssl_client(sslclient_context*, char const*, unsigned int, int, char const*, bool, char const*, char const*, char const*, char const*, bool, char const**)'
d:/espressif/tools/xtensa-esp32-elf/esp-2021r2-patch5-8.4.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: esp-idf/arduino/libarduino.a(WiFiClientSecure.cpp.obj): in function `WiFiClientSecure::stop()':
D:/github/clockwise/components/arduino/libraries/WiFiClientSecure/src/WiFiClientSecure.cpp:98: undefined reference to `stop_ssl_socket(sslclient_context*, char const*, char const*, char const*)'
d:/espressif/tools/xtensa-esp32-elf/esp-2021r2-patch5-8.4.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: esp-idf/arduino/libarduino.a(WiFiClientSecure.cpp.obj): in function `WiFiClientSecure::write(unsigned char const*, unsigned int)':
D:/github/clockwise/components/arduino/libraries/WiFiClientSecure/src/WiFiClientSecure.cpp:188: undefined reference to `send_ssl_data(sslclient_context*, unsigned char const*, unsigned int)'
d:/espressif/tools/xtensa-esp32-elf/esp-2021r2-patch5-8.4.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: esp-idf/arduino/libarduino.a(WiFiClientSecure.cpp.obj): in function `WiFiClientSecure::read(unsigned char*, unsigned int)':
D:/github/clockwise/components/arduino/libraries/WiFiClientSecure/src/WiFiClientSecure.cpp:218: undefined reference to `get_ssl_receive(sslclient_context*, unsigned char*, int)'
d:/espressif/tools/xtensa-esp32-elf/esp-2021r2-patch5-8.4.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: esp-idf/arduino/libarduino.a(WiFiClientSecure.cpp.obj): in function `WiFiClientSecure::available()':
D:/github/clockwise/components/arduino/libraries/WiFiClientSecure/src/WiFiClientSecure.cpp:232: undefined reference to `data_to_read(sslclient_context*)'
d:/espressif/tools/xtensa-esp32-elf/esp-2021r2-patch5-8.4.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: esp-idf/arduino/libarduino.a(WiFiClientSecure.cpp.obj): in function `WiFiClientSecure::WiFiClientSecure()':
D:/github/clockwise/components/arduino/libraries/WiFiClientSecure/src/WiFiClientSecure.cpp:37: undefined reference to `ssl_init(sslclient_context*)'
d:/espressif/tools/xtensa-esp32-elf/esp-2021r2-patch5-8.4.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: esp-idf/arduino/libarduino.a(WiFiClientSecure.cpp.obj): in function `WiFiClientSecure::connect(char const*, unsigned short, char const*, char const*, char const*)':
D:/github/clockwise/components/arduino/libraries/WiFiClientSecure/src/WiFiClientSecure.cpp:132: undefined reference to `start_ssl_client(sslclient_context*, char const*, unsigned int, int, char const*, bool, char const*, char const*, char const*, char const*, bool, char const**)'
d:/espressif/tools/xtensa-esp32-elf/esp-2021r2-patch5-8.4.0/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: esp-idf/arduino/libarduino.a(WiFiClientSecure.cpp.obj): in function `WiFiClientSecure::connect(char const*, unsigned short, char const*, char const*)':
D:/github/clockwise/components/arduino/libraries/WiFiClientSecure/src/WiFiClientSecure.cpp:149: undefined reference to `start_ssl_client(sslclient_context*, char const*, unsigned int, int, char const*, bool, char const*, char const*, char const*, char const*, bool, char const**)'

Task watchdog got triggered

Hi @jnthas , I build the project and flash it, but it run exception。

clockwise v1.4.1 and esd-idf v4.4.7

there are 2 issus:
1: NOT_FOUND log

[  1060][V][Preferences.cpp:352] getUChar(): nvs_get_u8 fail: swapBlueGreen NOT_FOUND
[  1061][V][Preferences.cpp:352] getUChar(): nvs_get_u8 fail: use24hFormat NOT_FOUND
[  1067][V][Preferences.cpp:400] getUInt(): nvs_get_u32 fail: displayBright NOT_FOUND
[  1075][V][Preferences.cpp:400] getUInt(): nvs_get_u32 fail: autoBrightMin NOT_FOUND
[  1084][V][Preferences.cpp:400] getUInt(): nvs_get_u32 fail: autoBrightMax NOT_FOUND
[  1092][V][Preferences.cpp:400] getUInt(): nvs_get_u32 fail: ldrPin NOT_FOUND
[  1100][E][Preferences.cpp:483] getString(): nvs_get_str len fail: timeZone NOT_FOUND
[  1109][E][Preferences.cpp:483] getString(): nvs_get_str len fail: wifiSsid NOT_FOUND
[  1117][E][Preferences.cpp:483] getString(): nvs_get_str len fail: wifiPwd NOT_FOUND
[  1126][E][Preferences.cpp:483] getString(): nvs_get_str len fail: ntpServer NOT_FOUND
[  1135][E][Preferences.cpp:483] getString(): nvs_get_str len fail: canvasFile NOT_FOUND
[  1143][E][Preferences.cpp:483] getString(): nvs_get_str len fail: canvasServer NOT_FOUND
[  1152][E][Preferences.cpp:483] getString(): nvs_get_str len fail: manualPosix NOT_FOUND

2: wdt trigger, log

E (10916) task_wdt: Task watchdog got triggered. The following tasks did not reset the watchdog in time:
E (10916) task_wdt:  - IDLE1 (CPU 1)
E (10916) task_wdt: Tasks currently running:
E (10916) task_wdt: CPU 0: IDLE0
E (10916) task_wdt: CPU 1: loopTask
E (10916) task_wdt: Print CPU 0 (current core) backtrace

full log:

Serial port /dev/ttyS6
Connecting....
Detecting chip type... Unsupported detection protocol, switching and trying again...
Connecting.....
Detecting chip type... ESP32
Running idf_monitor in directory /home/wuguowei/WorkSpace/clockwise
Executing "/home/wuguowei/.espressif/python_env/idf4.4_py3.10_env/bin/python /home/wuguowei/WorkSpace/esp32/esp-idf/tools/idf_monitor.py -p /dev/ttyS6 -b 115200 --toolchain-prefix xtensa-esp32-elf- --target esp32 --revision 0 /home/wuguowei/WorkSpace/clockwise/build/clockwise.elf -m '/home/wuguowei/.espressif/python_env/idf4.4_py3.10_env/bin/python' '/home/wuguowei/WorkSpace/esp32/esp-idf/tools/idf.py' '-b' '115200'"...
--- idf_monitor on /dev/ttyS6 115200 ---
--- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
ets Jun  8 2016 00:22:57

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0030,len:6652
ho 0 tail 12 room 4
load:0x40078000,len:15052
load:0x40080400,len:3836
0x40080400: _init at ??:?

entry 0x4008069c
I (29) boot: ESP-IDF v4.4.7 2nd stage bootloader
I (29) boot: compile time 19:49:27
I (29) boot: Multicore bootloader
I (32) boot: chip revision: v1.0
I (36) boot.esp32: SPI Speed      : 40MHz
I (40) boot.esp32: SPI Mode       : DIO
I (45) boot.esp32: SPI Flash Size : 2MB
I (49) boot: Enabling RNG early entropy source...
I (55) boot: Partition Table:
I (58) boot: ## Label            Usage          Type ST Offset   Length
I (66) boot:  0 nvs              WiFi data        01 02 00009000 00006000
I (73) boot:  1 phy_init         RF data          01 01 0000f000 00001000
I (81) boot:  2 factory          factory app      00 00 00010000 00100000
I (88) boot: End of partition table
I (92) esp_image: segment 0: paddr=00010020 vaddr=3f400020 size=2b8e4h (178404) map
I (165) esp_image: segment 1: paddr=0003b90c vaddr=3ffb0000 size=03890h ( 14480) load
I (171) esp_image: segment 2: paddr=0003f1a4 vaddr=40080000 size=00e74h (  3700) load
I (173) esp_image: segment 3: paddr=00040020 vaddr=400d0020 size=ac454h (705620) map
I (435) esp_image: segment 4: paddr=000ec47c vaddr=40080e74 size=153cch ( 86988) load
I (482) boot: Loaded app from partition at offset 0x10000
I (482) boot: Disabling RNG early entropy source...
I (493) cpu_start: Multicore app
I (493) cpu_start: Pro cpu up.
I (494) cpu_start: Starting app cpu, entry point is 0x40081378
0x40081378: call_start_cpu1 at /home/wuguowei/WorkSpace/esp32/esp-idf/components/esp_system/port/cpu_start.c:151

I (0) cpu_start: App cpu up.
I (511) cpu_start: Pro cpu start user code
I (511) cpu_start: cpu freq: 160000000
I (512) cpu_start: Application information:
I (516) cpu_start: Project name:     clockwise
I (521) cpu_start: App version:      v1.4.1
I (526) cpu_start: Compile time:     Mar 19 2024 14:44:10
I (532) cpu_start: ELF file SHA256:  7282974ac27cedba...
I (538) cpu_start: ESP-IDF:          v4.4.7
I (543) cpu_start: Min chip rev:     v0.0
I (548) cpu_start: Max chip rev:     v3.99 
I (552) cpu_start: Chip rev:         v1.0
I (557) heap_init: Initializing. RAM available for dynamic allocation:
I (565) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM
I (570) heap_init: At 3FFB8B88 len 00027478 (157 KiB): DRAM
I (577) heap_init: At 3FFE0440 len 00003AE0 (14 KiB): D/IRAM
I (583) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM
I (589) heap_init: At 40096240 len 00009DC0 (39 KiB): IRAM
I (597) spi_flash: detected chip: generic
I (600) spi_flash: flash io: dio
W (604) spi_flash: Detected size(4096k) larger than the size in the binary image header(2048k). Using the size in the binary image header.
[    22][V][WiFiServer.h:42] WiFiServer(): WiFiServer::WiFiServer(port=80, ...)
I (626) cpu_start: Starting scheduler on PRO CPU.
I (0) cpu_start: Starting scheduler on APP CPU.
I (2I (25) gpio: GPIO[2]| InputEn: 1| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 
[  1060][V][Preferences.cpp:352] getUChar(): nvs_get_u8 fail: swapBlueGreen NOT_FOUND
[  1061][V][Preferences.cpp:352] getUChar(): nvs_get_u8 fail: use24hFormat NOT_FOUND
[  1067][V][Preferences.cpp:400] getUInt(): nvs_get_u32 fail: displayBright NOT_FOUND
[  1075][V][Preferences.cpp:400] getUInt(): nvs_get_u32 fail: autoBrightMin NOT_FOUND
[  1084][V][Preferences.cpp:400] getUInt(): nvs_get_u32 fail: autoBrightMax NOT_FOUND
[  1092][V][Preferences.cpp:400] getUInt(): nvs_get_u32 fail: ldrPin NOT_FOUND
[  1100][E][Preferences.cpp:483] getString(): nvs_get_str len fail: timeZone NOT_FOUND
[  1109][E][Preferences.cpp:483] getString(): nvs_get_str len fail: wifiSsid NOT_FOUND
[  1117][E][Preferences.cpp:483] getString(): nvs_get_str len fail: wifiPwd NOT_FOUND
[  1126][E][Preferences.cpp:483] getString(): nvs_get_str len fail: ntpServer NOT_FOUND
[  1135][E][Preferences.cpp:483] getString(): nvs_get_str len fail: canvasFile NOT_FOUND
[  1143][E][Preferences.cpp:483] getString(): nvs_get_str len fail: canvasServer NOT_FOUND
[  1152][E][Preferences.cpp:483] getString(): nvs_get_str len fail: manualPosix NOT_FOUND
I (1126) gpio: GPIO[35]| InputEn: 1| OutputEn: 0| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 
[  1171][I][ESP32-HUB75-MatrixPanel-I2S-DMA.h:414] begin(): [begin()] Using GPIO 25 for R1_PIN
[  1180][I][ESP32-HUB75-MatrixPanel-I2S-DMA.h:415] begin(): [begin()] Using GPIO 26 for G1_PIN
[  1189][I][ESP32-HUB75-MatrixPanel-I2S-DMA.h:416] begin(): [begin()] Using GPIO 27 for B1_PIN
[  1198][I][ESP32-HUB75-MatrixPanel-I2S-DMA.h:417] begin(): [begin()] Using GPIO 14 for R2_PIN
[  1208][I][ESP32-HUB75-MatrixPanel-I2S-DMA.h:418] begin(): [begin()] Using GPIO 12 for G2_PIN
[  1217][I][ESP32-HUB75-MatrixPanel-I2S-DMA.h:419] begin(): [begin()] Using GPIO 13 for B2_PIN
[  1226][I][ESP32-HUB75-MatrixPanel-I2S-DMA.h:420] begin(): [begin()] Using GPIO 23 for A_PIN
[  1235][I][ESP32-HUB75-MatrixPanel-I2S-DMA.h:421] begin(): [begin()] Using GPIO 19 for B_PIN
[  1245][I][ESP32-HUB75-MatrixPanel-I2S-DMA.h:422] begin(): [begin()] Using GPIO 5 for C_PIN
[  1254][I][ESP32-HUB75-MatrixPanel-I2S-DMA.h:423] begin(): [begin()] Using GPIO 17 for D_PIN
[  1263][I][ESP32-HUB75-MatrixPanel-I2S-DMA.h:424] begin(): [begin()] Using GPIO 18 for E_PIN
[  1272][I][ESP32-HUB75-MatrixPanel-I2S-DMA.h:425] begin(): [begin()] Using GPIO 4 for LAT_PIN
[  1281][I][ESP32-HUB75-MatrixPanel-I2S-DMA.h:426] begin(): [begin()] Using GPIO 15 for OE_PIN
[  1291][I][ESP32-HUB75-MatrixPanel-I2S-DMA.h:427] begin(): [begin()] Using GPIO 16 for CLK_PIN
[  1300][I][ESP32-HUB75-MatrixPanel-I2S-DMA.cpp:38] allocateDMAmemory(): [I2S-DMA] Free heap: 303968
[  1310][I][ESP32-HUB75-MatrixPanel-I2S-DMA.cpp:39] allocateDMAmemory(): [I2S-DMA] Free SPIRAM: 0
[  1319][I][ESP32-HUB75-MatrixPanel-I2S-DMA.cpp:43] allocateDMAmemory(): [I2S-DMA] allocating rowBitStructs with pixel_color_depth_bits of 8
[  1333][I][ESP32-HUB75-MatrixPanel-I2S-DMA.cpp:70] allocateDMAmemory(): [I2S-DMA] Allocating 32768 bytes memory for DMA BCM framebuffer(s).
[  1346][I][ESP32-HUB75-MatrixPanel-I2S-DMA.cpp:78] allocateDMAmemory(): [I2S-DMA] Minimum visual refresh rate (scan rate from panel top to bottom) requested: 60 Hz
[  1361][W][ESP32-HUB75-MatrixPanel-I2S-DMA.cpp:96] allocateDMAmemory(): [I2S-DMA] lsbMsbTransitionBit of 0 gives 28 Hz refresh rate.
[  1374][W][ESP32-HUB75-MatrixPanel-I2S-DMA.cpp:96] allocateDMAmemory(): [I2S-DMA] lsbMsbTransitionBit of 1 gives 57 Hz refresh rate.
[  1387][W][ESP32-HUB75-MatrixPanel-I2S-DMA.cpp:96] allocateDMAmemory(): [I2S-DMA] lsbMsbTransitionBit of 2 gives 112 Hz refresh rate.
[  1399][W][ESP32-HUB75-MatrixPanel-I2S-DMA.cpp:109] allocateDMAmemory(): [I2S-DMA] lsbMsbTransitionBit of 2 used to achieve refresh rate of 60 Hz. Percieved colour depth to the eye may be reduced.
[  1418][I][ESP32-HUB75-MatrixPanel-I2S-DMA.cpp:112] allocateDMAmemory(): [I2S-DMA] DMA has pixel_color_depth_bits of 6
[  1429][I][ESP32-HUB75-MatrixPanel-I2S-DMA.cpp:126] allocateDMAmemory(): [I2S-DMA] Recalculated number of DMA descriptors per row: 32
[  1442][I][esp32_i2s_parallel_dma.cpp:430] allocate_dma_desc_memory(): [ESP32/S2] Allocating memory for 1024 DMA descriptors.
[  1454][D][esp32_i2s_parallel_dma.cpp:460] allocate_dma_desc_memory(): [ESP32/S2] Allocating 12288 bytes of memory for DMA descriptors.
[  1477][W][esp32_i2s_parallel_dma.cpp:516] create_dma_desc_link(): [ESP32/S2] Creating final DMA descriptor and linking back to 0.
[  1479][I][ESP32-HUB75-MatrixPanel-I2S-DMA.cpp:262] configureDMA(): [I2S-DMA] 1024 DMA descriptors linked to buffer data.
[  1491][I][esp32_i2s_parallel_dma.cpp:113] config(): [ESP32/S2] Performing config for ESP32 or ESP32-S2
[  1501][I][esp32_i2s_parallel_dma.cpp:120] init(): [ESP32/S2] Performing DMA bus init() for ESP32 or ESP32-S2
[  1512][D][esp32_i2s_parallel_dma.cpp:202] init(): [ESP32/S2] Requested output clock frequency: 15 Mhz
[  1522][D][esp32_i2s_parallel_dma.cpp:259] init(): [ESP32] i2s pll_d2_clock clkm_div_num is: 2
[  1531][I][esp32_i2s_parallel_dma.cpp:272] init(): [ESP32/S2] Output frequency is 20 Mhz??
[  1541][D][esp32_i2s_parallel_dma.cpp:393] init(): [ESP32-ORIG] init() GPIO and clock configuration set for ESP32
[  1551][I][ESP32-HUB75-MatrixPanel-I2S-DMA.cpp:302] configureDMA(): [I2S-DMA] DMA setup completed
I (2548) wifi:wifi driver task: 3ffcfcbc, prio:23, stack:6656, core=0
I (5736) wifi:wifi firmware version: 1fd20f4
I (5737) wifi:wifi certification version: v7.0
I (5737) wifi:config NVS flash: enabled
I (5739) wifi:config nano formating: disabled
I (5743) wifi:Init data frame dynamic rx buffer num: 32
I (5748) wifi:Init static rx mgmt buffer num: 5
I (5752) wifi:Init management short buffer num: 32
I (5757) wifi:Init dynamic tx buffer num: 32
I (5761) wifi:Init static rx buffer size: 1600
I (5765) wifi:Init static rx buffer num: 4
I (5769) wifi:Init dynamic rx buffer num: 32
I (5774) wifi_init: rx ba win: 6
I (5777) wifi_init: tcpip mbox: 32
I (5781) wifi_init: udp mbox: 6
I (5785) wifi_init: tcp mbox: 6
I (5788) wifi_init: tcp tx win: 5760
I (5793) wifi_init: tcp rx win: 5760
I (5797) wifi_init: tcp mss: 1440
I (5801) wifi_init: WiFi IRAM OP enabled
I (5806) wifi_init: WiFi RX IRAM OP enabled
[  2662][D][WiFiGeneric.cpp:929] _eventCallback(): Arduino Event: 0 - WIFI_READY
I (5820) phy_init: phy_version 4791,2c4672b,Dec 20 2023,16:06:06
I (5912) wifi:mode : sta (84:cc:a8:7f:24:ac)
I (5913) wifi:enable tsf
[  2765][V][WiFiGeneric.cpp:338] _arduino_event_cb(): STA Started
[  2766][V][Preferences.cpp:352] getUChar(): nvs_get_u8 fail: swapBlueGreen NOT_FOUND
[  2766][D][WiFiGeneric.cpp:929] _eventCallback(): Arduino Event: 2 - STA_START
[  2782][V][Preferences.cpp:352] getUChar(): nvs_get_u8 fail: use24hFormat NOT_FOUND
I[  2791][V][Preferences.cpp:400] getUInt(): nvs_get_u32 fail: displayBright NOT_FOUND
[  2799][V][Preferences.cpp:400] getUInt(): nvs_get_u32 fail: autoBrightMin NOT_FOUND
[  2808][V][Preferences.cpp:400] getUInt(): nvs_get_u32 fail: autoBrightMax NOT_FOUND
[  2816][V][Preferences.cpp:400] getUInt(): nvs_get_u32 fail: ldrPin NOT_FOUND
 ([  2824][E][Preferences.cpp:483] getString(): nvs_get_str len fail: timeZone NOT_FOUND
59[  2833][E][Preferences.cpp:483] getString(): nvs_get_str len fail: wifiSsid NOT_FOUND
3[  2842][E][Preferences.cpp:483] getString(): nvs_get_str len fail: wifiPwd NOT_FOUND
[  2850][E][Preferences.cpp:483] getString(): nvs_get_str len fail: ntpServer NOT_FOUND
1[  2859][E][Preferences.cpp:483] getString(): nvs_get_str len fail: canvasFile NOT_FOUND
0;31m[  2868][E][Preferences.cpp:483] getString(): nvs_get_str len fail: canvasServer NOT_FOUND
 [  2877][E][Preferences.cpp:483] getString(): nvs_get_str len fail: manualPosix NOT_FOUND
wifi:Set ps type: 1

E (10916) task_wdt: Task watchdog got triggered. The following tasks did not reset the watchdog in time:
E (10916) task_wdt:  - IDLE1 (CPU 1)
E (10916) task_wdt: Tasks currently running:
E (10916) task_wdt: CPU 0: IDLE0
E (10916) task_wdt: CPU 1: loopTask
E (10916) task_wdt: Print CPU 0 (current core) backtrace


Backtrace: 0x4010AB6E:0x3FFB0B90 0x40082FD9:0x3FFB0BB0 0x40177023:0x3FFBB9A0 0x400D3C46:0x3FFBB9C0 0x4008B4F1:0x3FFBB9E0 0x4008D18D:0x3FFBBA00
0x4010ab6e: task_wdt_isr at /home/wuguowei/WorkSpace/esp32/esp-idf/components/esp_system/task_wdt.c:183 (discriminator 3)

0x40082fd9: _xt_lowint1 at /home/wuguowei/WorkSpace/esp32/esp-idf/components/freertos/port/xtensa/xtensa_vectors.S:1118

0x40177023: cpu_ll_waiti at /home/wuguowei/WorkSpace/esp32/esp-idf/components/hal/esp32/include/hal/cpu_ll.h:183
 (inlined by) esp_pm_impl_waiti at /home/wuguowei/WorkSpace/esp32/esp-idf/components/esp_pm/pm_impl.c:853

0x400d3c46: esp_vApplicationIdleHook at /home/wuguowei/WorkSpace/esp32/esp-idf/components/esp_system/freertos_hooks.c:63

0x4008b4f1: prvIdleTask at /home/wuguowei/WorkSpace/esp32/esp-idf/components/freertos/tasks.c:4099 (discriminator 1)

0x4008d18d: vPortTaskWrapper at /home/wuguowei/WorkSpace/esp32/esp-idf/components/freertos/port/xtensa/port.c:142


E (10916) task_wdt: Print CPU 1 backtrace


Backtrace: 0x4008536D:0x3FFB1190 0x40082FD9:0x3FFB11B0 0x4000BFED:0x3FFBE740 0x4008D43E:0x3FFBE750 0x4010516B:0x3FFBE770 0x400D836C:0x3FFBE7A0 0x400ECA5D:0x3FFBE7D0 0x400E8C86:0x3FFBE7F0 0x400DE999:0x3FFBE810 0x400D8005:0x3FFBE830 0x4008D18D:0x3FFBE850
0x4008536d: esp_crosscore_isr at /home/wuguowei/WorkSpace/esp32/esp-idf/components/esp_system/crosscore_int.c:92

0x40082fd9: _xt_lowint1 at /home/wuguowei/WorkSpace/esp32/esp-idf/components/freertos/port/xtensa/xtensa_vectors.S:1118

0x4008d43e: vPortClearInterruptMaskFromISR at /home/wuguowei/WorkSpace/esp32/esp-idf/components/freertos/port/xtensa/include/freertos/portmacro.h:571
 (inlined by) vPortExitCritical at /home/wuguowei/WorkSpace/esp32/esp-idf/components/freertos/port/xtensa/port.c:332

0x4010516b: uart_get_buffered_data_len at /home/wuguowei/WorkSpace/esp32/esp-idf/components/driver/uart.c:1362 (discriminator 2)

0x400d836c: uartAvailable at /home/wuguowei/WorkSpace/clockwise/components/arduino/cores/esp32/esp32-hal-uart.c:269

0x400eca5d: HardwareSerial::available() at /home/wuguowei/WorkSpace/clockwise/components/arduino/cores/esp32/HardwareSerial.cpp:429

0x400e8c86: ImprovWiFi::handleSerial() at /home/wuguowei/WorkSpace/clockwise/components/Improv-WiFi-Library/src/ImprovWiFiLibrary.cpp:6

0x400de999: WiFiController::handleImprovWiFi() at /home/wuguowei/WorkSpace/clockwise/firmware/lib/cw-commons/WiFiController.h:56
 (inlined by) loop() at /home/wuguowei/WorkSpace/clockwise/main/../firmware/src/main.cpp:109

0x400d8005: loopTask(void*) at /home/wuguowei/WorkSpace/clockwise/components/arduino/cores/esp32/main.cpp:50

0x4008d18d: vPortTaskWrapper at /home/wuguowei/WorkSpace/esp32/esp-idf/components/freertos/port/xtensa/port.c:142



Automatic Brightness

I'm having difficulty with the automatic brightness setting. I believe the feature should operate in this way. When the room is dark, the panel will dim to prevent eye strain. When the room is bright, the panel with increase brightness to be easier seen. With the settings I've experimented with, I'm experiencing the opposite effect. When the room is dark, the panel brightens.

I've tried many settings for min and max values. I've even tried swapping the values. If set too low for the min value, the panel will turn off all together.
I'm using version 1.4.1. For hardware I'm using the Trinity board. Below is a screenshot of my current settings. Any help would be greatly appreciated.

image

Doesn't seem to be working for P3 matrix

image

This turns on the board and displays correctly during setup.

With

HUB75_I2S_CFG::i2s_pins _pins={R1_PIN, G1_PIN, B1_PIN, R2_PIN, G2_PIN, B2_PIN, A_PIN, B_PIN, C_PIN, D_PIN, E_PIN, LAT_PIN, OE_PIN, CLK_PIN};
HUB75_I2S_CFG mxconfig(
                      64,   // width
                      64,   // height
                      2,   // chain length
                   _pins
);

this setup also works for SmartMatrix and ESP32-HUB75-MatrixPanel-I2S-DMA

it's connected and saying collision detected but nothing is being drawn. I am using the mario sketch. and included the clockface.h and stuff from that folder.

image

I have also gotten the wifi to work. Nothing works past the initial test that the panel Pinout is working.

Feature Request: Show firmware version on Settings page

To make it easier to identify which firmware version you have, it would be nice to see it displayed on the settings page.

Would also be nice if this version could be exposed via an API so I could read it in e.g. Home Assistant, where I can match it against the latest release of this Github repo so I know an update is available.

Feature Request: Allow setting custom NTP servers

I prefer to keep IoT devices on a non-internet VLAN where possible.
I also run my own NTP server on the local network and communicate its address via DHCP to clients.

It would be nice to be able to configure my own NTP server either in the Settings page or have the device follow the DHCP options for NTP servers.

WifiConnect Password not documented

Hi,

Thank you for this awesome project! I tried to flash the examples over the web interface, and everything went fine. However, the ClockwiseWifi has a password set that is not documented everywhere and is not printed in the console. I found it somewhere in the code and would suggest adding the SSID and password to the clockwise.page.

Best,
Thilo

Port Mario Clock to the Cheap-Yellow-Display

I picked up a Cheap-Yellow-Display and a configurable clock for it would be amazing. The display is 320 x 240, so it should be spot on for a 1:1 (or 1:2 zoom) recreation of Mario. Is something like this feasible? I'd be happy to work with you to get it tested and off the ground.

New version 17/05

I am encountering problems still with the Access point on the clocks. I finally got the Pac Man clock with the shortened days but now the web interface seems broken. I download the file and eventually get it to accept my wifi password but it say connected but the display does not reset. I cannot get the web page to display and when i reset my screen it seems to log onto my network and hang on NTP server.
I have tried different downloads and two different ESP devices.

how to convert png to base64 string?

hi, what tool do you use to convert the png to base64? i tried different online converters but i get this error when running.

rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0018,len:4
load:0x3fff001c,len:1044
load:0x40078000,len:10124
load:0x40080400,len:5828
entry 0x400806a8
E (456) esp_core_dump_flash: No core d�f.�partition found!
E (457) esp_core_dump_flash: No core dump partition found!
[WiFi] Connected to ASUS-RT-AX56U-2.4G, IP address 192.168.50.112
[Time] NTP Server: time.google.com, Timezone: America/Sao_Paulo
[HTTP] GET request to '192.168.50.10/peach-gomo1.json' on port 4443
deserializeJson() failed: InvalidInput

thanks

Build fails with ESP-IDF 4.4.4 because of missing files

Hi!

Building with ESP-IDF 4.4.4 fails. There seems to be some files missing in the tree:
C:/Development/ESP32/clockwise/firmware/lib/cw-commons/WiFiController.h:3:10: fatal error: ImprovWiFiLibrary.h: No such file or directory
#include "ImprovWiFiLibrary.h"
^~~~~~~~~~~~~~~~~~~~~

I am using the main branch.

Add audio visualizer?

Hi is it possible to add an audio visualizer? Like using an inmp441 for sound input? Thanks

[Feature Request] Web firmware updates

I think most people use this project for a clock that sits on a shelf, wall, or other location that may not be near a computer. It would be handy to have the ability to upload new firmware to the device without physically connecting to it.

Fortunately, this is pretty easy on an ESP32 using Arduino:
https://github.com/espressif/arduino-esp32/blob/master/libraries/ArduinoOTA/examples/OTAWebUpdater/OTAWebUpdater.ino

A prerequisite for this IMO would be to implement some sort of authentication on the web interface. We wouldn't want any unauthenticated user to have access to change settings / potentially upload malicious code.

@jnthas what are your thoughts on this?

Configure Wi-Fi Scanning for networks never completed

Hi, I just took a fresh ESP32 Trinity out of the box. The flash tool found it and paired to it and installed the firmware but the Scan button never finds any wifi networks.
I can connect to the serial and reset the device and see the device complain at lack of wifi and timezone settings.

Unsure if i got a bad device or this is a firmware bug. Can i run an older version?

Can i set the WIFI AP and Password via the console?

I tried Mario clock and PacMan face so far. same behaviour and i've flashed each a few times.

tried two USB cables in case it was a power issue on different USB ports on my laptop.

=========================
ets Jun 8 2016 00:22:57

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0018,len:4
load:0x3fff001c,len:1044
load:0x40078000,len:10124
load:0x40080400,len:5828
entry 0x400806a8
E (401) esp_core_dump_flash: No core dff��partition found!
E (401) esp_core_dump_flash: No core dump partition found!
[ 1023][E][Preferences.cpp:483] getString(): nvs_get_str len fail: timeZone NOT_FOUND
[ 1024][E][Preferences.cpp:483] getString(): nvs_get_str len fail: wifiSsid NOT_FOUND
[ 1028][E][Preferences.cpp:483] getString(): nvs_get_str len fail: wifiPwd NOT_FOUND
[ 2168][E][Preferences.cpp:483] getString(): nvs_get_str len fail: timeZone NOT_FOUND
[ 2168][E][Preferences.cpp:483] getString(): nvs_get_str len fail: wifiSsid NOT_FOUND
[ 2172][E][Preferences.cpp:483] getString(): nvs_get_str len fail: wifiPwd NOT_FOUND

Allow `espressif/esp-idf-ci-action` action

Hi @jnthas,

I'd like to use the esp-idf-ci-action action for integration tests when new PRs come in for the project.

If you'd like to allow this to work, please use the following steps:
(1) Go to the Repo "Settings" page
(2) Click Actions -> General
(3) Select "Allow jnthas, and select non-jnthas, actions and reusable workflows"
(4) Add this entry for "Allow specified actions and reusable workflows": espressif/esp-idf-ci-action@*

Thanks!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.