TiltBridge - Tilt-to-WiFi Device for Tilt Hydrometer

Homebrew Talk - Beer, Wine, Mead, & Cider Brewing Discussion Forum

Help Support Homebrew Talk - Beer, Wine, Mead, & Cider Brewing Discussion Forum:

This site may earn a commission from merchant affiliate links, including eBay, Amazon, and others.
@mwayne112 Did you ever get this sorted?

I'm having the exact same issue...my Tiltbridge is communicating on my network (I can hit the web interface) and it is bound to my Fermentrack instance, but it doesn't seem to be able to pass temp/gravity readings to the Fermentrack.View attachment 681027


I did not get this resolved, abandoned it and went back to the native TiltPi image.
 
I did not get this resolved, abandoned it and went back to the native TiltPi image.
I just took a look at my setup and immediately figured out where I made my mistake. I didn't specify the full URL of my Fermentrack instance in my Tiltbridge settings...I only had the IP address of the Fermentrack instance (in my case 192.168.2.233). I added the "/tiltbridge" (and added the http:// just for good measure) waited 30 seconds for a communication cycle and...boom...recording Tilt data on my Fermentrack.
TiltBridge.jpeg
 
What is the expected behavior of the TFT firmware Tiltbridge? If you recall, when I first tried to use it, it was determined that the code is waiting for an input from the TFT touch interface, and as a result, it was never fully booting and so the web interface never came up. Now that I have a TFT, I tried the firmware again and it's still behaving 'oddly'. After setting it to connect to my AP, it comes up with the 'Access your TiltBridge at:' message, but the Web interface still does not come up. I had stopped playing with it for a bit and just decided to give it a whirl with the latest firmware. Same thing - however, somehow, something made it start working - While I had it sitting here on my desk, I noticed all of a sudden it came up with the TiltBridge logo, followed by the headers for the Tilt info (It's not receiving any Tilt data because my Tilt is sleeping right now). The web interface was then accessible. I noticed in that time that it went back and forth between the logo and the headers. Is this normal?

But then after a power cycle, it was back to sitting at the 'Access your TiltBridge at:' message. So far it's been about 10 minutes and it still can't be reached. I have no idea what caused it to 'start working' before. Any thoughts?
 
What is the expected behavior of the TFT firmware Tiltbridge? If you recall, when I first tried to use it, it was determined that the code is waiting for an input from the TFT touch interface, and as a result, it was never fully booting and so the web interface never came up. Now that I have a TFT, I tried the firmware again and it's still behaving 'oddly'. After setting it to connect to my AP, it comes up with the 'Access your TiltBridge at:' message, but the Web interface still does not come up. I had stopped playing with it for a bit and just decided to give it a whirl with the latest firmware. Same thing - however, somehow, something made it start working - While I had it sitting here on my desk, I noticed all of a sudden it came up with the TiltBridge logo, followed by the headers for the Tilt info (It's not receiving any Tilt data because my Tilt is sleeping right now). The web interface was then accessible. I noticed in that time that it went back and forth between the logo and the headers. Is this normal?

But then after a power cycle, it was back to sitting at the 'Access your TiltBridge at:' message. So far it's been about 10 minutes and it still can't be reached. I have no idea what caused it to 'start working' before. Any thoughts?

That is definitely not the expected behavior.

Once your Tiltbridge is configured, it should come up within ~10 seconds. At boot, the TiltBridge connects to your wifi, displays the "access your tiltbridge" screen, waits 1 second then triggers the bluetooth scan and waits 5 additional seconds for the scan to complete (while the "Access your TiltBridge" screen is still visible). Then, it brings up the web interface.

When running, your TiltBridge should alternate between the headers and the logo.
 
That is definitely not the expected behavior.

Once your Tiltbridge is configured, it should come up within ~10 seconds. At boot, the TiltBridge connects to your wifi, displays the "access your tiltbridge" screen, waits 1 second then triggers the bluetooth scan and waits 5 additional seconds for the scan to complete (while the "Access your TiltBridge" screen is still visible). Then, it brings up the web interface.

When running, your TiltBridge should alternate between the headers and the logo.

Any thoughts why it's sitting at the 'Access your TiltBridge at:' screen? As of now, it's been sitting there since I last posted... This is on one of my Lolin D32 Pro units. Originally, I thought maybe something was goofy with the touch portion of the screen based on the previous issue of it not completing the boot without a screen (I have been looking for but failed to find some sort of 'demo' sketch or binary to load that would allow me to test the touch functionality of the display), but it seems that's fine as I discovered by accident that when you touch the screen while the TiltBridge logo is up, it gave me the 'Touch screen again to reset wifi' screen.

There doesn't seem to be anything useful coming out of the serial interface - when I reset it, I get:
Code:
rst:0x1 (POWERON_RESET),boot:0x17 (SPI_FAST_FLASH_BOOT)
flash read err, 1000
ets_main.c 371 
ets Jun  8 2016 00:22:57

rst:0x10 (RTCWDT_RTC_RESET),boot:0x17 (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:10044
load:0x40080400,len:5872
entry 0x400806ac

Seems like once it boots, it stops sending any data out the serial port.
 
Any thoughts why it's sitting at the 'Access your TiltBridge at:' screen? As of now, it's been sitting there since I last posted... This is on one of my Lolin D32 Pro units. Originally, I thought maybe something was goofy with the touch portion of the screen based on the previous issue of it not completing the boot without a screen (I have been looking for but failed to find some sort of 'demo' sketch or binary to load that would allow me to test the touch functionality of the display), but it seems that's fine as I discovered by accident that when you touch the screen while the TiltBridge logo is up, it gave me the 'Touch screen again to reset wifi' screen.

There doesn't seem to be anything useful coming out of the serial interface - when I reset it, I get:
Code:
rst:0x1 (POWERON_RESET),boot:0x17 (SPI_FAST_FLASH_BOOT)
flash read err, 1000
ets_main.c 371
ets Jun  8 2016 00:22:57

rst:0x10 (RTCWDT_RTC_RESET),boot:0x17 (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:10044
load:0x40080400,len:5872
entry 0x400806ac

Seems like once it boots, it stops sending any data out the serial port.
I’ll build you firmware with the serial debug turned on. Give me a bit.
 
I've successfully installed TiltBridge on a TTGO T-Display ESP32 from Amazon:

https://www.amazon.com/gp/product/B07XQ5G279
WiFi is configured, set it up to post to my brewstat.us page using the google sheets proxy, and tested with one of my tilts. Everything looks good, so it's doing what I need, thanks!

The only niggle is that nothing is displayed on the board's display. The display is working as it showed the manufacturer's splash screen when I first powered it up, but after flashing with the TiltBridge firmware and rebooting, it's blank.

I flashed from the files in the bin directory at commit 2e0c5e75b8110a84fddad0363192ff6fb29ad15e using the command:
Bash:
esptool.py --chip esp32 --before default_reset --after hard_reset write_flash 0x10000 firmware.bin 0x8000 partitions.bin 0x3D1000 spiffs.bin

Any ideas what I need to poke to get it working?

Edit: Ack, my old iPad was in the basement running the Tilt app. Looks like that's what was broadcasting to brewstat.us.

The web page is up and updating with my tilt's data, but not updating the display or sending data to brewstat.us. Time for some debugging...

Edit 2: I used platformio to install a TTGO Hello world test program on the board and confirmed that the display is working. I then re-built the TiltBridge code from commit 2e0c5e by patching the 2e0c5e by patching the platformio.ini file for my board:
Diff:
diff --git a/platformio.ini b/platformio.ini
index 2a5803f..f407a74 100644
--- a/platformio.ini
+++ b/platformio.ini

@@ -11,14 +11,17 @@


 [common]
-;platform = espressif32
-platform = https://github.com/platformio/platform-espressif32.git#feature/stage
+platform = [email protected]
+;platform = https://github.com/platformio/platform-espressif32.git#feature/stage
 ;platform = https://github.com/platformio/platform-espressif32.git
 ;platform = https://github.com/thorrak/platform-espressif32.git#feature/stage
-board = lolin32
+board = esp32dev
 framework = arduino
 board_build.partitions = min_spiffs.csv

+monitor_speed = 115200
+upload_speed = 921600
+

 ; -D_GLIBCXX_USE_C99 is to fix an issue with the xtensa toolchain that precludes the use of std::to_string
 ; See: https://github.com/espressif/esp-idf/issues/1445
 build_flags =

and reinstalling with

Bash:
/Users/dbrown/.platformio/penv/bin/platformio run --target upload

This seemed to work:
Code:
Wrote 1933536 bytes (1109981 compressed) at 0x00010000 in 18.2 seconds (effective 847.6 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting via RTS pin...
==== [SUCCESS] Took 72.36 seconds ====

However, the display is still blank.

I confirmed that it is also not uploading to the proxy. I ran Wireshark to sniff packets from the ESP board's IP and I see the traffic between my laptop and the board, but there are no packets going from my network to the proxy on tiltbridge.org. Here's a HTTP/200 packet from the board to my laptop showing that the board is seeing my tilt and communicating with my browser:
JSON:
{"Red":{"color":"Red","gravity":"1.139","gsheets_name":"Red","temp":73}}

So Tilt->TiltBridge works, but the display does not work.
Browser<->TiltBridge works, but the TiltBridge is not sending to the proxy.

This looks like a weekend debugging project now...
 
Last edited:
I've successfully installed TiltBridge on a TTGO T-Display ESP32 from Amazon:

https://www.amazon.com/gp/product/B07XQ5G279
WiFi is configured, set it up to post to my brewstat.us page using the google sheets proxy, and tested with one of my tilts. Everything looks good, so it's doing what I need, thanks!

The only niggle is that nothing is displayed on the board's display. The display is working as it showed the manufacturer's splash screen when I first powered it up, but after flashing with the TiltBridge firmware and rebooting, it's blank.

I flashed from the files in the bin directory at commit 2e0c5e75b8110a84fddad0363192ff6fb29ad15e using the command:
Bash:
esptool.py --chip esp32 --before default_reset --after hard_reset write_flash 0x10000 firmware.bin 0x8000 partitions.bin 0x3D1000 spiffs.bin

Any ideas what I need to poke to get it working?

Edit: Ack, my old iPad was in the basement running the Tilt app. Looks like that's what was broadcasting to brewstat.us.

The web page is up and updating with my tilt's data, but not updating the display or sending data to brewstat.us. Time for some debugging...

Edit 2: I used platformio to install a TTGO Hello world test program on the board and confirmed that the display is working. I then re-built the TiltBridge code from commit 2e0c5e by patching the 2e0c5e by patching the platformio.ini file for my board:
Diff:
diff --git a/platformio.ini b/platformio.ini
index 2a5803f..f407a74 100644
--- a/platformio.ini
+++ b/platformio.ini

@@ -11,14 +11,17 @@


[common]
-;platform = espressif32
-platform = https://github.com/platformio/platform-espressif32.git#feature/stage
+platform = [email protected]
+;platform = https://github.com/platformio/platform-espressif32.git#feature/stage
;platform = https://github.com/platformio/platform-espressif32.git
;platform = https://github.com/thorrak/platform-espressif32.git#feature/stage
-board = lolin32
+board = esp32dev
framework = arduino
board_build.partitions = min_spiffs.csv

+monitor_speed = 115200
+upload_speed = 921600
+

; -D_GLIBCXX_USE_C99 is to fix an issue with the xtensa toolchain that precludes the use of std::to_string
; See: https://github.com/espressif/esp-idf/issues/1445
build_flags =

and reinstalling with

Bash:
/Users/dbrown/.platformio/penv/bin/platformio run --target upload

This seemed to work:
Code:
Wrote 1933536 bytes (1109981 compressed) at 0x00010000 in 18.2 seconds (effective 847.6 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting via RTS pin...
==== [SUCCESS] Took 72.36 seconds ====

However, the display is still blank.

I confirmed that it is also not uploading to the proxy. I ran Wireshark to sniff packets from the ESP board's IP and I see the traffic between my laptop and the board, but there are no packets going from my network to the proxy on tiltbridge.org. Here's a HTTP/200 packet from the board to my laptop showing that the board is seeing my tilt and communicating with my browser:
JSON:
{"Red":{"color":"Red","gravity":"1.139","gsheets_name":"Red","temp":73}}

So Tilt->TiltBridge works, but the display does not work.
Browser<->TiltBridge works, but the TiltBridge is not sending to the proxy.

This looks like a weekend debugging project now...

ACK! I am so sorry for missing this.

Without drilling into the commit IDs you linked, what branch are you using? Whatever you're doing, make sure you are on the d32_pro branch. I was actually able to eliminate the need for the proxy entirely with that branch, as well as incorporate a number of fixes.

That branch will become master as soon as LOLIN actually restocks their damn store (or I find an alternative board to use where TiltBridges can be built consistently - ideally with touchscreens - consistently without soldering).
 
Thanks! I was on the master branch, not the d32_pro branch. I spent some time hacking master to get the display on my board working. i2c_device_at_address() wasn't seeing the display on my TTGO T-Display board, so I switched to using the TFT_eSPI library to drive the display. The display is now working and I hacked the code to show gravity and temperature, and use the font color to identify the tilt.

My display code is in a fork at duncan-brown/tiltbridge

I'll check out the d32_pro branch and try that to see if pushes to brewstat.us are working. If the display doesn't work on that branch, I'll port my display changes and put in a pull request.
 

Attachments

  • IMG_6012.jpg
    IMG_6012.jpg
    987.9 KB · Views: 47
Thanks! I was on the master branch, not the d32_pro branch. I spent some time hacking master to get the display on my board working. i2c_device_at_address() wasn't seeing the display on my TTGO T-Display board, so I switched to using the TFT_eSPI library to drive the display. The display is now working and I hacked the code to show gravity and temperature, and use the font color to identify the tilt.

My display code is in a fork at duncan-brown/tiltbridge

I'll check out the d32_pro branch and try that to see if pushes to brewstat.us are working. If the display doesn't work on that branch, I'll port my display changes and put in a pull request.

Oh - You have the USB-C version - that explains it. Happy to take a PR for that into the d32_pro branch if you send one through - I'll get it set up as an additional firmware target and we should be good to go. From looking at your branch, we'd probably need to break out the new display into its own #ifdef blocks similar to how the ILI9341 TFT support was added, but that should be easy enough to do in order to support all 3 targets.

Brewstat.us support was never something I designed support/tested for, so I'd be curious how it works for you depending on which target type you use. It's easy enough add support for a new target if it needs custom code - now that I've switched bluetooth drivers there's a lot more flash space available.
 
Happy to take a PR for that into the d32_pro branch if you send one through

I added the code with proper #defines and created a pull request at Add support for the TTGO T-Display board using TFT_eSPI by duncan-brown · Pull Request #25 · thorrak/tiltbridge

The display now works fine and sees my three tilts, but now I can't access the web server. When I try and connect to the IP displayed on the Tilt (which is correct according to my router) it closes the connection without responding. I tried to see the index page manually and the board closes the connection as soon as I start typing GET:

Code:
[dbrown@Duncans-MacBook-Pro tiltbridge]$ telnet 10.0.1.118 80
Trying 10.0.1.118...
Connected to 10.0.1.118.
Escape character is '^]'.
GET Connection closed by foreign host.

I'll keep hacking, but I'm making progress.
 
nvm, I forgot to update the SPIFFs after changing the partitioning on the card so the web server couldn't find any files to server. Fixed with a --target uploadfs. Now on to debugging brewstat.us
 
The pull request Implement pushing to BrewStatus by duncan-brown · Pull Request #27 · thorrak/tiltbridge implements the ability to push to Brew Status

@Thorrak one additional question: have you implemented code to add calibration points to the tilts? One of my tilts has a different battery so it's way off the factory calibration and so I use the two-point calibration in the Tilt app to correct this.

At the moment I do not, but it should be easy to add.

I’m out of the city at the moment so I can’t test your PRs, but I’ll take a look at them when I get back this weekend. Thank you!
 
At the moment I do not, but it should be easy to add.

I started an implementation in my fork and opened a pull request to keep track of the progress:

https://github.com/thorrak/tiltbridge/pull/29
The hard part is done: I based the calibration coefficient calculation off the code used by iSpindle. I just need to add the C++ code to save and implement it, which is easy. Will get back to this when I get a few minutes.
 
I’ll build you firmware with the serial debug turned on. Give me a bit.

So just a quick update, for grins, I loaded up the TFT firmware and disconnected the LCD, and it's been sitting for a week and the web interface still hasn't come up, yet with the LCD attached, it sits that way for a random amount of time and then for whatever reason finally comes up and starts working. So there seems to be one expected behavior based on your testing and feedback (The WebUI not coming up without a LCD) and one unexpected behavior (The WebUI not coming up in a 'reasonable' amount of time with the LCD attached)
 
@Thorrak the calibration code in

https://github.com/thorrak/tiltbridge/pull/29
should be ready for you to test and merge, if you're happy with it.

The JavaScript in calibration.htm isn't particularly elegant (I didn't use vue.js) but it gets the job done. You can create calibration corrections up to cubic order for each tilt individually. There's a global option to turn calibration on and off.

I also added an option to temperature correct the tilt to a reference of 60F (which is what all my hydrometers are referenced to).
 
I made a few minor tweaks to the pull to fix some things I noticed when I calibrated all my Tilts this morning, but it seems to be working fine now:

https://www.homebrewtalk.com/threads/tilt-tlc.680916/
I'm looking forward to the results of this experiment now! :)

Hah, alright. Now that you have the calibration code out there, let me get it merged, and I'll run the experiment, on both TiltBridge and otherwise. ;)

iSpindel 1 vs. iSpindel 2 vs. Tilt v1 vs. Tilt v2 vs. Tilt v3 (vs. digital hydrometer)
 
I keep seeing reference to the Lolin store but don‘t recall seeing a link.

I keep seeing reference to the Lolin TFT but don’t recall seeing a part number and/or the chipset/resolution.

can someone post any/all of the above?.

TK
 
Last edited:
I keep seeing reference to the Lolin store don‘t recall seeing a link.

I keep seeing reference to the Lolin TFT but don’t recall seeing a part number or the chipset/resolution.

can someone both any/all of the above?.

TK

LOLIN TFT: US $5.9 |TFT 2.4 Touch Shield V1.0.0 for LOLIN (WEMOS) D1 mini 2.4
D32 Pro: US $8.8 |LOLIN D32 Pro V2.0.0 wifi & bluetooth board based ESP 32 esp32 Rev1 ESP32 WROVER 16MB 8MB 4MB FLASH PSRAM MicroPython|Integrated Circuits| - AliExpress

Problem is, the TFT screen has been out of stock for ~1.5 mos now, and the D32 Pro only has the "LED" model in stock, which blinks like crazy when not hooked up to a battery.

I've reached out to LOLIN a few times to ask when it's being restocked, but the best I've gotten back from them is "soon". I'm contemplating picking up a stash of Heltec OLED boards since they are in stock, but that's not ideal as the shipping is ~$26.
 
I'm using the Heltec Wifi 32 for my TiltBridge. Works great, only downside is getting a case for it. I'm currently prototyping a case for it and should have something, hopefully, later on today that works. Only downside is it is a bit expensive but no problems, if you have Amazon Prime I got it for 16 with free one day shipping.
 
Have at it. I just realized that the sliding dovetail lid may need to be adjusted per printer, depending on how well you printer is calibrated. I left enough gap for myself but others may want a tighter fit.
 
ACK! I am so sorry for missing this.

Without drilling into the commit IDs you linked, what branch are you using? Whatever you're doing, make sure you are on the d32_pro branch. I was actually able to eliminate the need for the proxy entirely with that branch, as well as incorporate a number of fixes.

That branch will become master as soon as LOLIN actually restocks their damn store (or I find an alternative board to use where TiltBridges can be built consistently - ideally with touchscreens - consistently without soldering).
@Thorrak have you updated the documentation anywhere that explains how to setup TiltBridge without the use of the proxy? I looked here Cloud Service Setup — TiltBridge documentation ,but it still lists the steps for using your proxy at tiltbridge.com.
 
For those that are waiting the TFT touch screen (aliexpress) is finally back in stock it appears.

https://h5.aliexpress.com/item/32919729730.html
TFT 2.4 Touch Shield V1.0.0 for LOLIN (WEMOS) D1 mini 2.4" inch 320X240 SPI Touch Screen ILI9341 XPT2046

200.gif


For anyone ordering, You need three things:


For the controller, there are three versions. Ideally, you want the "16MB FLASH" version, but the "16MB FLASH (LED)" will work. The only downside to the "LED" version is that it has an LED on it that will flash constantly when not connected to a battery. If you hide it in a case though... ;)
 
Now that the TFT screens are back in stock, it’s time to pull the trigger and officially release the latest version of TiltBridge. I’m finalizing the documentation and doing the last few checks on the firmware now. I’ll post the formal announcement within the next few days.

There haven’t been many material changes to the firmware over the past few weeks, so if you’re happy with what you’ve got stick with it post-announcement. Thanks to @Duncan-brown ‘s work this release will have added support for both brewstatus and the USB-C-style “TTGO” boards.
 
Have at it. I just realized that the sliding dovetail lid may need to be adjusted per printer, depending on how well you printer is calibrated. I left enough gap for myself but others may want a tighter fit.

Thanks for developing this, I'm going to print this enclose for a project I'm working on with this board.
 
So I'm at about 97% connected between Tiltbridge and Fermentrack. Fermentrack has been up and running for several months. I flashed the ESP32 a few months back with Brewflasher, found the WiFi and finished the set up Tiltbridge from the web interface. I updated the tiltbridge software through the interface a couple months ago as well. It reads the tilt nicely on the ESP 32 screen and web page. It sends data to Google Sheets. Have never gotten it to talk to Fermentrack. I looked back at previous posts that had the same problem and confirmed I have the right address linking the two softwares. I saw that @H0phead "restarted" tiltbridge after an update and that seemed to work. Obvious noob question: Do I need to stop and start a script at the command prompt or do I need to do something else?
 
So I'm at about 97% connected between Tiltbridge and Fermentrack. Fermentrack has been up and running for several months. I flashed the ESP32 a few months back with Brewflasher, found the WiFi and finished the set up Tiltbridge from the web interface. I updated the tiltbridge software through the interface a couple months ago as well. It reads the tilt nicely on the ESP 32 screen and web page. It sends data to Google Sheets. Have never gotten it to talk to Fermentrack. I looked back at previous posts that had the same problem and confirmed I have the right address linking the two softwares. I saw that @H0phead "restarted" tiltbridge after an update and that seemed to work. Obvious noob question: Do I need to stop and start a script at the command prompt or do I need to do something else?
If the last update you did to the ESP32 was a few months back, I would recommend updating to the most recent firmware and then re-adding the TiltBridge to Fermentrack.

Fermentrack should be able - if pointed at your TiltBridge - to “send” the necessary configuration to the TiltBridge (and therefore configure it almost automatically). TiltBridge doesn’t require any scripts to be running on your Pi to communicate with Fermentrack - starting/stopping scripts shouldn’t impact any of the TiltBridge-specific functionality.
 
Back
Top