• Please visit and share your knowledge at our sister communities:
  • If you have not, please join our official Homebrewing Facebook Group!

    Homebrewing Facebook Group

TiltBridge - Tilt-to-WiFi Device for Tilt Hydrometer

Homebrew Talk

Help Support Homebrew Talk:

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
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.
 

Latest posts

Back
Top