Sunday, 1 February 2026

Making an ESP32-C6-GEEK smart home monitor

I will use ESPHome to create a device that shows RED / YELLOW / GREEN depending on my Smart Home status posted to a MQTT topic.




First I will install docker. on my Linux Mint 22 laptop :

coderdojo@rhubarb:~$ cat /etc/os-release | grep PRETTY
PRETTY_NAME="Linux Mint 22"

https://itsfoss.gitlab.io/post/how-to-install-docker-on-linux-mint-22-or-21-step-by-step/

Next used docker to install ESPHome :

https://esphome.io/guides/getting_started_command_line/


oderdojo@rhubarb:~$ docker pull ghcr.io/esphome/esphome

Using default tag: latest



..
coderdojo@rhubarb:~$ 
coderdojo@rhubarb:~$ nano livingroom.yaml 
coderdojo@rhubarb:~$ 
coderdojo@rhubarb:~$ docker run --rm --privileged -v "${PWD}":/config --device=/dev/ttyACM0 -it ghcr.io/esphome/esphome run kitchen.yaml
INFO ESPHome 2026.1.3
INFO Reading configuration kitchen.yaml...
WARNING 'esp32c6geek_monitor': Using the '_' (underscore) character in the hostname is discouraged as it can cause problems with some DHCP and local name services. For more information, see https://esphome.io/guides/faq/#why-shouldnt-i-use-underscores-in-my-device-name
INFO Generating C++ source...
..


Hash of data verified.
Wrote 3072 bytes (134 compressed) at 0x00008000 in 0.0 seconds (934.8 kbit/s).
Hash of data verified.
Wrote 8192 bytes (31 compressed) at 0x00009000 in 0.0 seconds (2075.3 kbit/s).
Hash of data verified.

Hard resetting via RTS pin...
INFO Successfully uploaded program.
INFO Starting log output from /dev/ttyACM0 with baud rate 115200

[14:04:01.286][I][app:087]: Running through setup()
[14:04:01.286][C][wifi:475]: Starting
[14:04:01.286][D][wifi:1098]: Starting scan
[14:04:01.286][C][component:249]: Setup wifi took 70ms
[14:04:01.286][I][app:134]: setup() finished successfully!
[14:04:01.286][W][component:395]: wifi set Warning flag: scanning for networks
[14:04:04.028][D][wifi:1227]: Found networks:
[14:04:04.029][I][wifi:1188]: - 'Tola Park' (48:5D:35:F6:D1:AA) ▂▄▆█ Ch: 1 -66dB P:0
[14:04:04.030][D][wifi:1259]: - 7 non-matching (VERBOSE to show)
[14:04:04.031][D][wifi:1563]: Retry phase: INITIAL_CONNECT → SCAN_CONNECTING
[14:04:04.032][I][wifi:899]: Connecting to 'Tola Park' (48:5D:35:F6:D1:AA) (priority 0, attempt 1/2 in phase SCAN_CONNECTING)...
[14:04:04.227][W][component:543]: safe_mode took a long time for an operation (158 ms)
[14:04:04.227][W][component:546]: Components should block for at most 30 ms
[14:04:06.083][I][wifi:1329]: Connected
[14:04:06.083][D][wifi:1346]: Disabling AP
[14:04:06.084][C][wifi:1037]:   IP Address: 192.168.1.162
[14:04:06.084][C][wifi:1048]:   SSID: 'Tola Park'
[14:04:06.085][C][wifi:1048]:   BSSID: 48:5D:35:F6:D1:AA
[14:04:06.085][C][wifi:1048]:   Hostname: 'esp32c6geek_monitor'
[14:04:06.086][C][wifi:1048]:   Signal strength: -66 dB ▂▄▆█
[14:04:06.086][C][wifi:1048]:   Channel: 1
[14:04:06.086][C][wifi:1048]:   Subnet: 255.255.255.0
[14:04:06.086][C][wifi:1048]:   Gateway: 192.168.1.1
[14:04:06.086][C][wifi:1048]:   DNS1: 192.168.1.1
[14:04:06.087][C][wifi:1048]:   DNS2: 0.0.0.0
[14:04:06.087][W][component:426]: wifi cleared Warning flag
[14:05:00.962][I][safe_mode:066]: Boot seems successful; resetting boot loop counter
[14:05:02.204][D][esp32.preferences:155]: Writing 1 items: 0 cached, 1 written, 0 failed


This worked OK and I managed to program it. But I think Tasmota might be easier.. as Web interface and console log make it easier to modify, maintain and debug  :)

https://tasmota.github.io/install/  "Tasmota32 LVGL (english)"


Blast! ESP32-C6 not yet supported!
https://ota.tasmota.com/tasmota32/release/
https://ota.tasmota.com/tasmota32/release/tasmota32c6.bin


NOTE: I tried Tasmota WebInstaller https://tasmota.github.io/install/ and factory binary (tasmota32c6.factory.bin)  but it still just said waiting for download after a reset.

Ha! This was actually working and I could connect to its WiFi hotspot and configure it! Happy Days :)

Now how to I control the display? LVGL or Berry or both?
I see its menu offers "Tools > Extension Manager" with a "LVGL Panel v25.10.1.0" option.

https://tasmota.github.io/docs/Tasmota-Extension/

https://docs.waveshare.com/ESP32-C6-GEEK

But maybe I must define its GPIO first? I see "Tools > GPIO Viewer" looks good but no entry for this board. Do I make one?

Board schematic:
https://files.waveshare.com/wiki/ESP32-C6-GEEK/ESP32-C6-GEEK.pdf

https://documentation.espressif.com/esp32-c6_datasheet_en.pdf
https://files.waveshare.com/wiki/common/ST7789P3.pdf

The schematic shows 5 control pins for LCD1 (the ST 7789 P3 display?) named:

GPIO2 a red box shows this mapping LCD MOSI goes to display pin SDA
GPIO1                                                  LCD CLK                                  SCL
GPIO3                                                  LCD DC                                     RS
GPIO4                                                  LCD RST                                   RESET
GPIO5                                                  LCD CS                                     CS
and
GPIO6                                                  LCD BL    separate Back Light (BL) circuit

So first test is to toggle BL on/off using GPIO6


Yep. Defined GPIO6 ad a Relay using "Configuration > Module" menus (Module Type was "ESP32C6(1)"

Then after reset I had a TOGGLE button at 192.168.1.162 which toggled the very faint back light ON and OFF :)


Now trying ESP-IDF build following instructions at..

https://docs.espressif.com/projects/esp-idf/en/stable/esp32c6/get-started/linux-macos-setup.html

 1186  cd esp

 1187  ls

 1188  git status .

 1189  cd esp-idf/

 1190  git status .

 1191  ./install.sh esp32c6

 1192  ./install.sh all

 1193  . $HOME/esp/esp-idf/export.sh


(Tues 3rd Feb 2026 20:30) Tried Arduino IDE to program device and success!

I used Arduino 1.8.19 program on my Linux Mint 22 laptop, I selected "ESP32C6 Dev Module" and unzipped the demo software who's below link was on page https://docs.waveshare.com/ESP32-C6-GEEK/Resources-And-Documents

https://files.waveshare.com/wiki/ESP32-C6-GEEK/ESP32-C6-GEEK-Demo.zip

I then moved the two library folders (lvgl & PNGdec) from /home/coderdojo/Downloads/ESP32-C6-LCD-1.47-Demo/Arduino/libraries to /home/coderdojo/Arduino/libraries (but not the two examples (LVGL_Arduino & LVGL_Image) from directory /home/coderdojo/Downloads/ESP32-C6-LCD-1.47-Demo/Arduino/examples to /home/coderdojo/Arduino/ESP32_C8_GEEK/examples as it already has lots of examples!)

So selected Erase all Flash before Sketch Upload as "Enabled" under Tools in the IDE I then opened the 05_LCD_Button.ino file from the "05_LCD_Button" folder which opened 17 files in the IDE but it compiled and downloaded happily and display a different LCD picture each time I pressed the side button.

NOTE: I had to remove and re-insert the USB module to get the code to work and output debug :)


(Weds 4th Feb 2026 16:24) Next I opened the 16_MQTT_pub_sub.ino from the 16_MQTT_pub_pub folder..

I added my WiFi details and all compiled and ran. I can now use this to monitor my MQTT broker and paint colours depending on the system state..

"Tola/status/system" topic has string "{ "date":"04-FEB-2026", "time":"16:42", "status":"good" }"

So "good", "fair" or "bad" which updates every 10 secs. If no update after 30 then assume "bad"

Might also be nice to show outside and inside temperature :)


coderdojo@rhubarb:~$ mosquitto_pub -h 192.168.1.150 -p 1883 -u tola -P 2016TolaPark! -t Tola/status/system -m '{ "date":"04-FEB-2026", "time":"16:42", "status":"good" }'

coderdojo@rhubarb:~$ 


2026-02-04T16:49:59+0000{"tst":"2026-02-04T16:49:59.247456+0000","topic":"Tola/status/system","qos":0,"retain":0,"payloadlen":57,"payload":{"date":"04-FEB-2026","time":"16:42","status":"good"}}


Pin 18 - USB0 N - GPIO 12
Pin 19 - USB0 P - GPIO 13

Can I make the serial output appear on these?







  





No comments:

Post a Comment