Records weight in the morning with MQTT if weight measurement above a threshold and exactly the same for 2.0 secs after adding 0.05 and then truncating digits to the right of 0.1 lb. Displays recorded weight then "Sent" when conditions met.
I highly recommend Adafruit MQTT for an HMI including remote recording. I use the free version. Once you get the hang of it it's very quick and easy compared to creating a local only web page hosted on the device. I often do both. https://io.adafruit.com/
I also record temp and humidity outside, upstairs and in the basement every minute. This is useful when we are away so I can check the furnace is operating OK.
Remember to check your weight under exactly the same conditions. Just the liquid in a cup of coffee is 0.6 lbs.
Total cost of components is around $20.
I followed this website and video for the wiring. https://circuitjournal.com/50kg-load-cells-with-HX711
For NodeMCU I used D6 and D7.
For programming I just added the HX711_basic_example applicable code to my typical NodeMCU program.
I created an equation to correct for the zero offset and scale to read in pounds. It reads -548358 unloaded. NodeMCU is 32 bit so big numbers are no problem.
weightlbsraw = scale.read_average(20); // average 20 readings
weightlbs = (548358 + weightlbsraw)/9431.7; // equation in my case - unloaded zero offset is first raw number
It updates the unloaded zero offset (tare function) at 4 a.m. every day to counter any drift. That doesn't seem to be necessary so far but humidity changes over the year may affect the weight of the wood a bit.
I mounted the load cells on rings of 0.2" plywood to allow the center to flex. 2.25" OD 1" ID. Cut with hole saws. Assembled with hot glue.
Small squares of plywood siliconed to the center of the load cell for mounting feet. A thin layer of silicone makes them anti-skid. The rings and feet raise the board enough to get all the components underneath as shown. Same total height as the old scale. 1.25". The rings are mounted inboard so it looks like the board is floating.
I usually use a free, zero I/O, colourful hi-res web page for the HMI but in this case the project needed a local display as well.
I used a $6 hi-res very bright OLED SSD1306 128X32 display. This is a small 0.91" display so to make it readable from 6 ft I used the largest font. Large OLED displays would be even better but they are not inexpensive. Dark 1.0 mm lexan is used in front of the display and dark foam rubber behind it. This hides the board except for the OLED display. When it's off all you see is black. The lexan is inset into the slot so you don't see the edges.
Make sure and use the u8g2 library not Adafruit and the u8g2_font_logisoso32_tr for a large, hi-res, smooth font.
Typical display commands to print " Inside".
u8g2.clearBuffer(); // clear the internal memory
u8g2.setFont(u8g2_font_logisoso32_tr); // choose a suitable font
u8g2.drawStr(0,32," Inside"); // write something to the internal memory
u8g2.sendBuffer(); // transfer internal memory to the display
I followed this video: https://www.youtube.com/watch?v=LLDdEcoh-oo
I have 9 NodeMCU controllers doing various home automation tasks and saving $1,000+/year. So far they all have a battery backed DS3231 real time clock that is set to internet time at 3 am to maintain accuracy and correct for daylight savings time or standard time. https://hackaday.io/project/174577-esp8266-time-and-date-from-internet
This time I used ESP-NOW to send time, date, inside temp and outside temp directly from another NodeMCU instead. Sending data this way does not use the router. I will use this method from now on.
Details on ESP-Now are here. https://hackaday.io/project/181289-esp-now-inexpensive-microcontroller-scada-system
This saves having that hardware attached on every controller. Time from the RTC is used instead of delays in the programs so response is very fast in spite of actions like MQTT and display updates that occur every few seconds. Same technique as the Blink Without Delay example using millis().
Analog read must not occur every scan either or it interferes with WiFi or web page display response. In this case I only read it once per second. https://arduino.stackexchange.com/questions/19787/esp8266-analog-read-interferes-with-wifi
Other NodeMCU automation projects are here: https://sites.google.com/site/nodemcu12e/
I only do wireless uploads now. This is very handy when the devices are scattered around the house.
I use Arduino IDE for programming configured for NodeMCU.
Many commercial bamboo scales like this one are available online.