book collections email follower instructable user

Wi-Fi Smart Scale (with ESP8266, Arduino IDE, and IFTTT)


If it's already summer where you live, it's probably a great time for outdoor fitness activities. Running, cycling, or jogging are awesome exerciser for you to get in shape.

And if you want to lose or control your current weight, it is essential to keep a record of your results. Using a sportsband (link / link / link) for instance, will allow you to verify whether you are on the right track and stay motivated. But it's essential to keep record of your weight progress. And with the right tools and using a little electronics and programming, you can make your own internet connected bathroom scale! You can find several bluetooth smart scales of different manufactures online (, and for instance). But instead of buying one, why not lose some weight by making your own gadget?

In this project I designed a smart bathroom scale, using some 3D printing, an ESP8266, IFTTT and Adafruit.IO. You can use this tutorial to practice several skills: 3d printing and laser cutting skills, soldering, electronics, programming, etc.
On the next steps I'll show you how I 3D printed it, wired the circuits, and made the code. In the end of this tutorial you'll be ready to measure your weight and log it online!

You can find new features in my new tutorial:! This time I added an integrated clock (synchronized with an internet server) and a buzzer. Once the alarm is triggered, it continues to ring until the user can gather enough courage to get out of the bed and stand for a few seconds on the scale. Check it out!

Some of the knowledges used here were based on Becky Stern awesome Internet of Things Class. It's highly recommended!

Liked that project? Please consider supporting my future projects with a small Bitcoin donation! :D BTC Deposit Address: 1FiWFYSjRaL7sLdr5wr6h86QkMA6pQxkXJ

Step 1: Tools and Materials

The following tools and materials were used in this project:

Tools and materials:

  • 3D printer (link / link / link). It was used for printing the case where the electronics are encloused.
  • Solder iron and wire. Some of the components (ESP8266 Firebeetle and LED matrix cover, for instance) doesn't come with soldered terminals. I needed to solder some wires or pins in order to connect those devices.
  • Shrinking tube. l also had to solder the wires of each load cell. A piece of shrinking tube might be used for a better isolation of the conductors.
  • Screwdriver. The structure is mounted using some screws. A set of screwdrivers was used.
  • Screws. I used some screws to attach the 3D printed parts to the base of the scale.
  • M2x6mm Bolts. They were used for mounting the electronics inside the case.
  • 1.75mm PLA (link / link / link) of any color you want.
  • FireBeetle ESP8266 dev board. It's really easy to use and program using Arduino IDE. It has built-in Wi-Fi module, so you can use it in a variaty of projects. It has a connector for a 3.7V battery, which was really usefull for assembling this project. I has also a built-in battery charger. It will recharge the battery when connected to an USB plug. You can also use other ESP8266 based boards (link / link / link) if you wish. Deppending on the board you choose, it would be a little more difficult to connect and recharge the battery, or to connect the LED matrix. The dimensions of the case will also need to be verified.
  • Firebeetle covers - 24x8 LED matrix. This module easilly fits on top of the Firebeetle ESP8266 dev board. I used it to display the values measured by microcontroller, display some status, etc. You can also use other kinds of display if you wish, like ordinary LCD displays (link / link / link) or OLED displays (link / link / link).
  • HX711 module (link / link / link). This works as a load cell amplifier. Four strain gauge load cells are connected to this module, and it communicates on a serial communication with the ESP8266 microcontroller.
  • 50kg load cell (x4); (link / link / link). They are used to measure the weight of the user. Four of them were used for a maximum weight of 200kg.
  • Micro USB cable;
  • 6 female-female jumper wires;
  • 2 x 15 mm plywood sheet (30 x 30 cm). It was used for the base of the scale.

The links described above are only a suggestion of where you can find the items used in this tutorial (and support my future hacks). Feel free to search for them elsewhere and buy at your favourite store.

I used a FireBeetle ESP8266 dev board, which was kindly supplied by DFRobot. It worked perfectly! I also tested the code with a NodeMCU board. It also worked fine (although the time for connection was significately longer... I still don't know why...).

Did you know you can buy a Creality Ender 3D printer for only $169.99? Get yours!

mirandax2 months ago
Hi Igor,
I've found your Instructable and I am basing my project on yours. Very nice project yor scale by the way.
So, my objective is different, I want to build a scale to measure the volume of beer kegs.
My setup is very similar:
NodeMCU - ESP8266
HX711 - Amplifier
Load Combinators
4 x 50KG Load Cells
The only difference is that I don't have those load cells brackets which you 3D printed.
Yesterday I could wire them up and started my code (calibration, etc). I am having an issue and maybe you can help me.
I've found the factor and the scale seems to be calibrated, but when I place a 1kg object, the reading gives me a wrong number, like 400gr. So the difference is huge.
Do you think the problem is because the load cells are not touching the floor properly? Do you think without the brackets, the reading can be affected that much?
Thank you a lot in advance for any advice!
dman20134 months ago
I found this tutorial trying to find info on how to fix my veterinary platform scale . I need a simple format , animal gets on the scale, I measure weight . What steps from the tutorial should I omit. I also intend to use my examination table as scale so I will need an on off switch . Would that be possible? Thank you
IgorF2 (author)  dman20133 months ago
Hi there,
If you only need to see the weight locally, you should skip the parts where I deal with IFTTT and Adafruit IO. The device also won't need to connect internet.
Maybe you can try to comment that sections on the code and see what happens. Please let me know if it doesn't work.
Regardint the on off switch, you can use it in two fashions: use it to turn the whole circuit on/off, or use it as an input to the code to enable/disable the display.
lmperkins8 months ago
Here’s a pic of my version. The only real difference was the use of birch veneer on the sides rather than paint.
IgorF2 (author)  lmperkins8 months ago
Wow! It looks great!
Thanks for sharing! :)

great project, I am trying to make a set of 4 scales each weighing a max of 400kgs so is there anyway of using 8 load cells or a 1000kg s type load cell or similar as cannot find how to amplify the signal from the 1000kg load cell. I would love to output the signal to my android phone as 4 separate weights? I am a newbie to this stuff but ken to learn. Thanks

s type load cell.jpg
IgorF2 (author)  Racecaptain1 year ago

So far I've only worked with 50kg load cells. Once the weight is divided between four supports, although each cell is rated for 50kg, the whole setup can measure up to 4 times this (200kg). If you need to measure up to 400kg, you can use four 100kg cells. Or even eight 50kg (connected to two different amplifiers) and sum their values.

Matlek1 year ago

This is nicely done! That would be really cool to make a plot of the measurements, so you can see how the weight changes with time.

"so you can see how the weight changes with time"

Oh, come on now, we all know how our weight has changed over time ;)

IgorF2 (author)  charlessenf-gm1 year ago

Or at least determine how fast our weight increases! :D

IgorF2 (author)  Matlek1 year ago

Thanks Matlek! :D

I'll try to create a low resolution plot on the display. Currently I can track the weight changes on and on other IFTTT linked apps.

Thanks for the suggestion.

Wood working Contest! Or, did I read that wrong?

The WiFi aspect of this project piqued my interest. I have long labored under the impression that data from a device such as this one you've created (and the two commercial versions linked to - thanks) could be sent to a Google Apps Database on the net so that daily readings, for instance, might be stored over time and analyzed at will.

Is this essentially what you've programmed?

I read the specs provided by the Xiaomi and Lenovo units you provided links to. They seemed to depend upon a proprietary app as opposed to the sort of generic solution using freely available software tools I was hoping might be done.

Have you thought of how to program the device such that two or three uses might use the same scale? Husband and wife, perhaps. How to fix it so the device distinguished between the two and uploaded the data to the respective web app.

IgorF2 (author)  charlessenf-gm1 year ago

Hi there! I tried to submit it to Microcontrollers contest, but it was denied. But it was accepted on Woodworking contest, because at least part of it is made of wood. :)

Almost all smart scales on the market rely on proprietary apps. In this project I store my data on database, and IFTTT app is able to move it to other plaforms that work with fitness data (Apple Health, Fitbit, Misfit and Strava for instance).

This setup ( + IFTTT) also makes it easy to move the data to a Google Spreadsheet, and thus consumed by other apps.

Regarding a mutilple user configuration, I'm using a logic, base on the expected weight of each user, that select in which feed the value might be stored. For instance, suppose my weight is 70 kg and my wife's 50 kg. If measured weight is above 60 kg, the scale will assume that value belongs to my feed. Else, it belongs to my wife.

It works for a small number of user, with very distinct body weights.

I hope it helps.

"logic, base on the expected weight of each user,"

Yes, that was the best solution I came up with as well.

If you place the screen up high enough, a user could select his (or her) colored button or digit I suppose.

Difficult to implant a chip in a customer via Amazon, so I had to scrap that idea right off the bat.

IgorF2 (author)  charlessenf-gm1 year ago

I think that, depending on the application, one might use some other kind of user identification (RFID card, fingerprint, etc.).

1. Were those the smallest sensors you could find?

2. If you moved the display or eliminated it entirely, how small could you make the transmitting circuitry? (not looking for the theoretical limit, rather what you could do with the parts available - off the shelf - as was done here)

IgorF2 (author)  charlessenf-gm1 year ago

Hi there!

1. I didn't look for smaller sensors. But I believe 50kg sensor usually come in that size. You can find smaller ones for other loads (there are sensor for a multitude of ranges).

2. Using the board I've used (a ESP8266 Firebeetle), removing the display wouldn't reduce much. The display is almos the same size of the board, and adds only a few millimiters on top of it. There are differente boards one could use (if size iis a limitation), like the ESP8266-01, for instance.

I hope it helps.

"RFID card, fingerprint"

First is Passive

Second is Active, Opt-in

Application requires differentiating as between two members of the same household using the same scale.

crkirkwood1 year ago
I'm unbalanced :) what happens when all or most of my weight is in a corner or single side? Is it compensated, added and di used by four???
IgorF2 (author)  crkirkwood1 year ago
I’ll test what happens if the weight is concentrated on one side. Ideally the weight is divided on the four supports, and the average weight is measured. The more it’s concentrated on the center the best.
Anyway, I believe you can compensate that during the calibration. :)
juropeki1 year ago

A great post, chapeau and thanks for sharing ! I would put it into the microcontrollers contest. Can you enter it there too, I wonder. Cheers !

IgorF2 (author)  juropeki1 year ago

Thanks! :D

Unfortunatelly Microcontrollers Contest was already closed :/

ssamc1 year ago

great instructable

I am curious about your anet A8 extruder head. Can you provide more details about your setup (thingiverse link or image)?

Thank you

IgorF2 (author)  ssamc1 year ago
In my video I used another printer (my A8 was unavailable). I used a Voolt3D (a printer from a Brazilian company). It’s heads has a servo and a switch for leveling the table.
I hope it helps! :)
ssamc IgorF21 year ago

thank you

How do you handle power? Is it always on or does it sleep at some point?
IgorF2 (author)  cnguyen03201 year ago

Hi there. For now, it stays on all the time (although the display is off while there's nothing happening).

One might add a switch and use it as an interrupt. The ESP will deep sleep until that switch is activated, for instance. I'm tring to do it with an ESP32 and one of it's touch pins, as I did in this project:

This way, the scale might be able to work on batteries.

Tarantula31 year ago

Good work bro

IgorF2 (author)  Tarantula31 year ago
Thanks, Bro! I’m glad you liked it. :)
Ortzinator1 year ago

Your logo looks like the Steelseries logo

IgorF2 (author)  Ortzinator1 year ago
I didn’t know this brand (and it’s logo). But they really look like! :-o