TRMNL ePaper 设备固件
created for the TRMNL e-ink display.
[!IMPORTANT] the
mainbranch is under constant development and may contain breaking changes. flash at your own risk.to access production-ready firmware, check out the tagged releases or use the Flash Assistant.
…
following Wifi connection via the captive portal, device swaps its Mac Address for an API Key and Friendly ID from the server (which get saved on device).
GET /api/setup
headers = {
'ID' => 'XX:XX:XX:XX:XX' # mac address
}
response example (success):
{ "status": 200, "api_key": "2r--SahjsAKCFksVcped2Q", "friendly_id": "917F0B", "image_url": "https://trmnl.com/images/setup/setup-logo.bmp", "filename": "empty_state" }
response example (fail, device with this Mac Address not found)
{ "status" => 404, "api_key" => nil, "friendly_id" => nil, "image_url" => nil, "filename" => nil }
assuming the Setup endpoint responded successfully, future requests are made solely for image / display content:
…
if device detects an issue with response data from the api/display endpoint, logs are sent to server.
POST /api/log
# example request tbd
A bit of background first. The ESP32-C3 inside the TRMNL OG is one of Espressif's newer, more efficient microcontrollers. For battery powered applications, it's designed to be put to sleep to conserve power when your project doesn't need it to be active. There are two sleep modes - light and deep. Deep sleep conserves the most power, but at the cost of losing the contents of the main memory. The lowest possible power consumption is about 4uA @ 3V with a timed wakeup, but TRMNL needs to be able to wake up with a button press. Keeping the GPIO active during deep sleep (to detect the button press) uses about 100uA on average (see power profile below). This means that a 2500mAh battery could theoretically keep the TRMNL powered in this state for approximately 25,000 hours.
Of course its not very useful to have a device that's permanently sleeping, so shown below is the power profile of TRMNL doing a normal display update (timed wake up, send device status, fetch new image, show it on the e-paper display):
The peaks and valleys you see above represent the variation in electrical current (power) drawn by the ESP32-C3 at different points during the ~10.5 second update cycle. The majority of energy is used while WiFi is active (between the 3 and 9 second marks). The last portion of the graph with higher frequency peaks is from the e-paper display cycling through its update (average power is quite low). The total electrical charge needed for the update is shown in the lower right corner (0.67c). This value is in Coulombs and represents the number of electrons that have moved through the circuit.
0.67 C = 0.186111 mAh
If we ignore the ESP32 sleep periods, the energy used in each display update would allow 2500/0.186111 = 13433 updates. If we configure our TRMNL account to update the information every 15 minutes, we'll be requesting 96 updates per day and the battery charge could last for 140 days (13433 / 96). This isn't too far off from real world results. The battery voltage will drop below a safe threshold before it has released its full energy and in the equation above, we haven't counted the energy used during the sleep periods nor the energy lost in the TRMNL's power supply (between the battery and the ESP32). The real world result will be closer to 120 days on a full charge.
We can extend the battery life further by disabling updates during our sleeping hours. In the TRMNL web portal there is a setting for “Sleep Mode” (see screenshot below):
For example - by reducing the total active time each day by 8 hours, the number of updates per day (set to a 15-minute interval like above) changes from 96 to 64. With sleep mode set to 8 hours, our battery life is extended:
13433 / 64 = 210 days (theoretical maximum)
Designed for Efficiency
Lithium batteries deliver between 3.7 and 4.2 volts depending on their charge state. The ESP32 operates between 2.8V and 3.3V. In order to power the ESP32 from the battery, the voltage needs to be reduced.
There are two main types of power regulators - buck converters, and linear regulators. Many ESP32 products use linear regulators since they are less expensive. This savings comes at a cost - they throw away up to 20% of the battery's energy as waste heat. Your TRMNL was designed with a buck converter to safely and efficiently power the ESP32. This ensures the best use of the battery's energy. At TRMNL we are always looking for additional software optimizations that improve battery life.
Lithium ion batteries are ubiquitous in our lives; they're in nearly everyone's pocket/purse and many other devices you use daily. They bring a host of benefits, some risks and require care to keep them working at their best. Your TRMNL protects the battery against overcharging, but your help is needed to prevent problems when the battery is low. There are two main problems that arise with dead Li-Ion batteries:
The conditions above are to be avoided, but #2 can be dangerous as well. If your battery is puffy, dispose of it safely at a local recycling spot and contact TRMNL support to get a new one.
Even when your TRMNL is disconnected (power switch in the off position), its battery will slowly self-discharge. To keep your TRMNL's battery running at peak performance:
See releases. For older versions go here.
There are technical and non-technical options to flashing firmware.
pio run -e TRMNL_X_devpio run -e TRMNL_X_dev -t uploadpio device list # make sure JTAG device is visible
pio run -e TRMNL_X_dev -t upload --upload-port /dev/cu.usbmodem1234
pio device monitor -e TRMNL_X_dev
pio device monitor -e trmnl
When switching between TRMNL X and OG/BWRY, run pio pkg install once for the environment you are about to build (use the same -e value as pio run):
pio pkg install -e TRMNL_X_dev # TRMNL X
pio pkg install -e trmnl # TRMNL OG
pio pkg install -e trmnl_4clr # TRMNL BWRY
If you skip this step, the build may fail with Error: Missing Arduino framework directory 'None'.
Install VS Code: https://code.visualstudio.com
Install PlatformIO: https://platformio.org/install/ide?install=vscode
Install Git: https://git-scm.com/book/en/v2/Appendix-A%3A-Git-in-Other-Environments-Git-in-Visual-Studio-Code
Clone this repository: https://github.com/usetrmnl/trmnl-firmware
Open project in VS Code workspace
After configuring the project, click the PlatformIO -> Build button located at the bottom of the screen
After the compilation process is complete, you should expect to see a message in the console.
You can find the compiled file in the folder shown in the picture.
Put the TRMNL into flashing mode.
Mac/Windows: Select the proper COM port from drop-down list (or leave on "Auto"). Ubuntu: Look for something like "/dev/ttyACMO USB JTAG/serial debug unit" or "Espressif USB JTAG/serial debug unit" via lsusb.
Click on "PlatformIO: Upload" button.
Tools required:
bootloader.bin, firmware.bin, partitions.bin (see Compilation Guide above)boot_app0.bin, found in ~/.platformio/packages/framework-arduinoespressif32/tools/partitions/)open the Flash Tool (executable file), select these parameters, then click OK:
“0x00000000” in the far right space and check the box.
“0x00008000” in the far right space and check the box.
“0x0000e000” in the far right space and check the box.
“0x00010000” in the far right space and check the box.
finally, set the following parameters at the bottom of the Flash Tool interface:
Open the Windows “Device Manager” program and scroll to the bottom where the USB devices can be found. each machine will have different available devices, but look for a section like this:
Next, connect the PCB to the Windows machine with a USB-C cable. make sure the USB port is on the right, and that the PCB’s on/off switch is toggled DOWN for “off.”
While holding the BOOT button (below the on/off toggle), toggle the device ON by flipping the above switch UP. you may hear a sound from your Windows machine Inspect the Device Manager connections at the bottom of the interface, and a new device should appear. it may be “USB Component {{ Num }},” or something like below:
Take note of this device’s name, that is our TRMNL PCB. then back inside the Flash Tool, click to open the “COM” dropdown in the bottom right and choose the TRMNL PCB. finally, click the “START” button.
Inside the Flash Tool click the “STOP” button.
Next turn off (toggle DOWN) and unplug the PCB. you are now ready to flash another device - see Step 1.
If you would like to run local tests, you'll need to have g++/gcc installed (f.e., as part of MinGW) in PATH:
bin from installed folder (f.e. c:\mingw64\bin) to your PATHNow you can switch from "env:esp32..." to "esp:native" clicking at the bottom of the studio (point 1):
And then run platformio tests by clicking test button (point 2).
There is a suite of on-device hardware tests written with the Unity test framework, defined in test/integration/test_all. They compile into a single firmware image that is uploaded to the device, runs the tests sequentially in setup(), and prints results o
暂无开放 Issues,或尚未同步最近议题。