I've been working on this project for the past few months and while it's far from being finished, I would like to share the current progress with all the Cemetechians and Cemetechnicians
The goal of this project is to integrate the ESP32-S3 with the Ti84+ CE to allow developers to utilize the powerful features that the ESP32 has to offer in their calculator programs while being completely seamless from the outside. I created an easy to use C library that can be utilized directly from the calculator to access the features of the ESP32 so that developers can keep everything organized in one code base and not have to touch the ESP32 firmware at all.
At the hardware level, it works by having a mounting PCB soldered to the calculators USB pads and a second PCB containing an esp32-s3 and other components soldered on top. The mounting PCB is an extension of the PCB I made about a year ago for my USB-C mod (https://www.cemetech.net/forum/viewtopic.php?t=19369) so this is also a Type C mod. Switching logic allows USB linking/charging functionality of the calculator to be retained while still allowing the mod to function. I plan to make a far more detailed and quality explanation/showcase in a YouTube video once I'm finished. Here are some photos:
Here is a compilation of some work-in-progress demo apps utilizing the esp32:
Currently, the features of the C library are:
Wi-Fi
- Provides functionality to scan, connect and disconnect from wifi access points.
- Query the current wifi connection status. Can be connecting, connected or disconnected.
- Sync calculators time with the current time by internally communicating with an NTP server.
ESP32 buffers
- Create, write and read buffers on the esp32
- Can be passed around to certain functions of this library using a buffer id given on buffer creation
HTTP client
- Supports both https and http.
- Can change method, url or headers of the client any amount of times after creation
- Can create multiple clients to send multiple requests at the same time
- Can send data located on a calculator buffer or inside an esp32 buffer (request data can also be written as a stream)
- Can receive response stream on the calculator or inside an esp32 buffer (or cancel the request and choose to not receive any response based on status code/response headers)
Images
- Ability to decode an image located in an esp32 buffer to a format that can be displayed on the calculator (currently supported input image formats are png, jpeg, and static gif)
- Can output 8bpp pixels that are quantized using a palette set using a function of the library (the palette can be changed at any time during runtime). 16bpp mode is also supported
- When decoding in 8bpp mode, dither level can be specified from a scale of 0-255.
- When decoding in 8bpp mode, the quantized, dithered result can be saved in a compressed buffer on the esp32 for fast reloading.
- Built in decoder function can display images in column or row major mode depending on the mode set during initialization of the image component.
Parsers
- Ability to parse large amounts of data quickly by offloading the parsing to the esp32.
- While traversing through some serialized data, you can specify to send only the data needed, for example
if traversing through a JSON object and there is a "description" key has a very large value, you can signal to skip sending the value.
- Currently supports JSON but will plan to add HTML too.
TCP Socket
- Nothing special here, it allows you to connect to a TCP server
- Ability to unload response into an esp32 buffer or onto calculator
- Ability to send buffer located inside esp32 buffer or on the calculator
- Ability to create multiple clients that run independently of each other
NVS (Non-Volatile Storage)
- Basic functionality to store and retrieve data stored inside an NVS namespace on the esp32
Debugging
- Ability to print data onto the esp32s serial port by providing the ESP_LOGI, ESP_LOGW & ESP_LOGE macros on the calculator.
- Option to replace all dbg_printf, dbg_sprintf calls with the esp macros.
The goal of this project is to integrate the ESP32-S3 with the Ti84+ CE to allow developers to utilize the powerful features that the ESP32 has to offer in their calculator programs while being completely seamless from the outside. I created an easy to use C library that can be utilized directly from the calculator to access the features of the ESP32 so that developers can keep everything organized in one code base and not have to touch the ESP32 firmware at all.
At the hardware level, it works by having a mounting PCB soldered to the calculators USB pads and a second PCB containing an esp32-s3 and other components soldered on top. The mounting PCB is an extension of the PCB I made about a year ago for my USB-C mod (https://www.cemetech.net/forum/viewtopic.php?t=19369) so this is also a Type C mod. Switching logic allows USB linking/charging functionality of the calculator to be retained while still allowing the mod to function. I plan to make a far more detailed and quality explanation/showcase in a YouTube video once I'm finished. Here are some photos:
Here is a compilation of some work-in-progress demo apps utilizing the esp32:
Currently, the features of the C library are:
Wi-Fi
- Provides functionality to scan, connect and disconnect from wifi access points.
- Query the current wifi connection status. Can be connecting, connected or disconnected.
- Sync calculators time with the current time by internally communicating with an NTP server.
ESP32 buffers
- Create, write and read buffers on the esp32
- Can be passed around to certain functions of this library using a buffer id given on buffer creation
HTTP client
- Supports both https and http.
- Can change method, url or headers of the client any amount of times after creation
- Can create multiple clients to send multiple requests at the same time
- Can send data located on a calculator buffer or inside an esp32 buffer (request data can also be written as a stream)
- Can receive response stream on the calculator or inside an esp32 buffer (or cancel the request and choose to not receive any response based on status code/response headers)
Images
- Ability to decode an image located in an esp32 buffer to a format that can be displayed on the calculator (currently supported input image formats are png, jpeg, and static gif)
- Can output 8bpp pixels that are quantized using a palette set using a function of the library (the palette can be changed at any time during runtime). 16bpp mode is also supported
- When decoding in 8bpp mode, dither level can be specified from a scale of 0-255.
- When decoding in 8bpp mode, the quantized, dithered result can be saved in a compressed buffer on the esp32 for fast reloading.
- Built in decoder function can display images in column or row major mode depending on the mode set during initialization of the image component.
Parsers
- Ability to parse large amounts of data quickly by offloading the parsing to the esp32.
- While traversing through some serialized data, you can specify to send only the data needed, for example
if traversing through a JSON object and there is a "description" key has a very large value, you can signal to skip sending the value.
- Currently supports JSON but will plan to add HTML too.
TCP Socket
- Nothing special here, it allows you to connect to a TCP server
- Ability to unload response into an esp32 buffer or onto calculator
- Ability to send buffer located inside esp32 buffer or on the calculator
- Ability to create multiple clients that run independently of each other
NVS (Non-Volatile Storage)
- Basic functionality to store and retrieve data stored inside an NVS namespace on the esp32
Debugging
- Ability to print data onto the esp32s serial port by providing the ESP_LOGI, ESP_LOGW & ESP_LOGE macros on the calculator.
- Option to replace all dbg_printf, dbg_sprintf calls with the esp macros.