SenseCAP Indicator
SenseCAP D1 Indicator
https://www.seeedstudio.com/SenseCAP-Indicator-D1-p-5643.html
This is a 4" LCD (480x480) with a RPi Pico and an ESP3-2S3.
I want to use it in my car as a Scangauge "work-alike". OBD-II CAN bus, I had a Garmin EcoRoute for a few years but it no longer works. I miss the gauge displays, especially for engine temperature. I want to try to calculate real-time MPG.
I would normally expect a product like the D1 to be Android/Debian/Ubuntu but this is lower level, that intrigues me. I want to know the architecture and how to program it.
Getting started: https://wiki.seeedstudio.com/SenseCAP_Indicator_Get_Started/
PDF user manual https://files.seeedstudio.com/products/SenseCAP/SenseCAP_Indicator/SenseCAP%20Indicator%20User%20Manual_2023.4.21.pdf
There are two USB-C ports and an internal USB hub. Both processors are attached to the USB hub, the ESP32 has a USB->UART interface.
Review with internal photos https://www.cnx-software.com/2023/05/27/sensecap-indicator-d1pro-review-an-esp32-s3-rp2040-iot-devkit-with-a-4-inch-display-lora-connectivity-sensors/
ESP32-S3
The ESP32 manages wireless (WiFi, BT 5 and LoRa) and the LCD/touch panel. My basic D1 does not include LoRa chip.
Looks like SEEED modeled the ESP portion of the D1 on this Espressif reference design. ESP32-S3 LCD EV Board It uses a 480x480 display but does not have the audio portion implemented. The ESP board has a screen connector, the 480x480 board uses a GC9503CV display driver and a FT5x06 touch interface. The system diagram shows the LCD controller as a "RGB565". I think that's a description of the pixel color depth? R=5 bits, G=6 bits, B=5 bits. 16 bits. I feel like I am back at the Magicsoft / Unison World days! Or perhaps the AT&T Truevision ICB board that I paid a fortune for.
RP2040
RP2040 has 2 Grove interfaces, one for I2C and one for analog. It supports up to a 32GB SD card. It has the speaker too.
Programming
Espressif is used to program the ESP32.
They suggest Arduino for the RP2040 but I plan to try CircuitPython.
Interprocessor communications
The ESP32 and RP2040 talk over a serial port using "COBS" = <nowiki> "Consistent Overhead Byte Stuffing", which I am hoping just works. I don't want to read about it.
COBS is just a convenient way to move bytes without worrying about punctuation. More or less. Anyway. It's a low level element like PHY not a useful application level protocol like MQTT.
I found this project for Python, https://pypi.org/project/cobs/ Might work with Circuit Python?
Programming the RP2040
Refer to this page: Raspberry Pi RP2040
What can I do with the RP2040?
Well, right off the bat, not much. But I want to try, so I note the buzzer is on port GPIO19. What do I need to get that working? I think I program it as a PWM output and see what happens. Ha ha ha supposedly I can play MP3 files on there? Seriously? Such a world. https://learn.adafruit.com/mp3-playback-rp2040/pico-mp3
I tried the sample and it kind of works. Sound came out. It's not like a Nakamichi Dragon Cassette Deck. When I tried a piano sample it locked up and I had to wipe and restore it. Go look at the RP2040 mentioned above. Okay so I won't play MP3 files through it ever again.
Programming the ESP32-S3
The "normal" approach using Espressif uses FreeRTOS.
LCD -- The example that Seeed provides uses LVGL graphics library and (optionally) Squareline Studio to design the UI. Squareline supports C/C++ and Micropython. Squareline appears to be built on SDL, "Simple Directmedia Library". In github, https://github.com/libsdl-org
Micropython on the ESP32-S3
Refer to the generic description, https://micropython.org/download/ESP32_GENERIC_S3/
Use esptool.py to wipe flash and then load mpython.
cd ~/Documents/source/esptool/ conda activate esphome
On my computer I see two ports in Device Manager, one is marked as "USB-SERIAL CH340 - Com7" and I think that's the ESP32. The other is marked "USB Serial Device Com8", probably the RP2040 (currently with CircuitPython loaded.) I tried using things like "--port com7" and "--port com7:" but it failed. I dropped the option and let the script find the port on its own. For some reason after erasing the flash it showed up on port COM3 instead of COM7, ah the vagaries of serial port drivers!
python esptool.py --chip esp32s3 erase_flash
At this point, my D1 screen has gone dark, which is probably what I want. :-)
Loading the binary looked like this.
python esptool.py --chip esp32s3 write_flash -z 0 GENERIC_S3-20230426-v1.20.0.bin esptool.py v4.1-dev Found 2 serial ports Serial port COM8 Connecting...................................... COM8 failed to connect: Failed to connect to ESP32-S3: No serial data received. For troubleshooting steps visit: https://docs.espressif.com/projects/esptool/en/latest/troubleshooting.html Serial port COM3 Connecting... Chip is ESP32-S3 Features: WiFi, BLE Crystal is 40MHz MAC: dc:54:75:d8:08:d0 Uploading stub... Running stub... Stub running... Configuring flash size... Flash will be erased from 0x00000000 to 0x00160fff... Compressed 1443040 bytes to 955816... Wrote 1443040 bytes (955816 compressed) at 0x00000000 in 84.3 seconds (effective 136.9 kbit/s)... Hash of data verified.
I connected using Putty to COM3, and I can see the REPL. Now finally it's Micropython time.