Postscapes is an independent review site. We may earn money when you click on links on our site. Learn more.

Smart Lock Scout

Smart Home Scout

The source for smart home buying advice.

Bluetooth and Wifi Smart Bathroom Body Scales Image

Bluetooth and Wifi Smart Bathroom Body Scales

Find and compare smart body scales, including consumer options and DIY projects. Quickly narrow your choices based on integrations, price and app reviews.

The bathroom scale has become an important data point in the trend toward consumer-level health and fitness tracking. Many wellness-focused tech companies now make scales that automatically share weight, BMI and other vital stats with mobile apps to give an improved picture of the user’s overall health. And if the retail options don’t measure up, you can easily make your own connected scale.

This Channel Guide will help you:

  • Determine which wireless connectivity type you will need (Bluetooth vs. Wi-Fi).
  • Explore DIY totorials and project examples using Arduino or Raspberry Pi.
  • Compare features between consumer body scales, including integrations with fitness trackers and other smart home hubs.

11/01/2019

Smart Scales

These smart scales measure not just weight and BMI, but heart rate, indoor air quality, and other health markers. Combine the data with other fitness-monitoring products or services like Fitbit or Apple's HealthKit to get a comprehensive view of your own wellbeing.​

Aria Wifi Scale

Aria Wifi Scale Image

Highlights

  • WiFi Connectivity
    • Track weight, body mass index (BMI), lean mass & body fat percentage
      • Works with up to 8 users and integrates with Fitbit data

QardioBase

QardioBase Image

Highlights

  • Works with Apple Health
    • WiFi and Bluetooth Connectivity
      • Multi-user and Weight, BMI, % body fat, muscle, bone, water composition data

Quick Links


Merchant

$134.99 - Direct

Online Pricing

- Amazon More

Withings Internet Scale and weight tracker

Withings Internet Scale and weight tracker Image

Highlights

  • Heart rate measurement and indoor air quality tracking
    • WiFi and Bluetooth connectivity
      • Track your weight and body composition (BMI)

DIY & Open Source Smart Scales

Ready to hack your own smart scale using an Arduino or Raspberry Pi? Check out these projects and tutorials to get started building a DIY scale with wireless connectivity, and learn how to integrate the data with fitness-tracking apps.

HOMY ARDUINO SCALE

HOMY ARDUINO SCALE

By Dušan Stojković the project uses an off the shelf Ikea GRUNDTAL scale, an Arduino Pro Mini and RFM12B radio module.

CASAINHO DIY SMART SCALE

CASAINHO DIY SMART SCALE

By casainho this DIY scale uses a cheap digital bathroom scale: $20 an ARM LPC2103 microcontroller board: $15.6 and Bluetooth serial module:...

WIFI PYTHON DIY SCALE

WIFI PYTHON DIY SCALE

By Saulius Lukse this scale uses a Maxim 29-66SH infrared bathroom scale an Carambola 2 WiFi Module along with JavaScript, SocketIO and Tornado (a...

WIIBALANCE BOARD AND RASPBERRY PI SMART SCALE

WIIBALANCE BOARD AND RASPBERRY PI SMART SCALE

Created by InitialState this project combines a Wii balance board, a Raspberry Pi, and an online data analytics platform...

[gravityform id="38" title="false" description="false" ajax="true" tabindex="49"]
<div class='gf_browser_chrome gform_wrapper' id='gform_wrapper_38' ><div id='gf_38' class='gform_anchor' tabindex='-1'></div><form method='post' enctype='multipart/form-data' target='gform_ajax_frame_38' id='gform_38' action='/arduino-wifi-body-scale/#gf_38'> <div class='gform_body'><ul id='gform_fields_38' class='gform_fields top_label form_sublabel_below description_below'><li id='field_38_2' class='gfield field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label gfield_label_before_complex' >Your Name</label><div class='ginput_complex ginput_container no_prefix has_first_name no_middle_name no_last_name no_suffix gf_name_has_1 ginput_container_name' id='input_38_2'> <span id='input_38_2_3_container' class='name_first' > <input type='text' name='input_2.3' id='input_38_2_3' value='' aria-label='First name' tabindex='50' aria-invalid="false" /> <label for='input_38_2_3' >First</label> </span> </div></li><li id='field_38_3' class='gfield field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label' for='input_38_3' >Can you share a high level overview of what you are looking for?</label><div class='ginput_container ginput_container_textarea'><textarea name='input_3' id='input_38_3' class='textarea medium' tabindex='54' aria-invalid="false" rows='10' cols='50'></textarea></div></li><li id='field_38_4' class='gfield field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label' for='input_38_4' >Best way to reach you?</label><div class='ginput_container ginput_container_text'><input name='input_4' id='input_38_4' type='text' value='' class='medium' tabindex='55' aria-invalid="false" /></div></li> </ul></div> <div class='gform_footer top_label'> <input type='submit' id='gform_submit_button_38' class='gform_button button' value='Submit' tabindex='56' onclick='if(window["gf_submitting_38"]){return false;} window["gf_submitting_38"]=true; ' onkeypress='if( event.keyCode == 13 ){ if(window["gf_submitting_38"]){return false;} window["gf_submitting_38"]=true; jQuery("#gform_38").trigger("submit",[true]); }' /> <input type='hidden' name='gform_ajax' value='form_id=38&amp;title=&amp;description=&amp;tabindex=49' /> <input type='hidden' class='gform_hidden' name='is_submit_38' value='1' /> <input type='hidden' class='gform_hidden' name='gform_submit' value='38' /> <input type='hidden' class='gform_hidden' name='gform_unique_id' value='' /> <input type='hidden' class='gform_hidden' name='state_38' value='WyJbXSIsIjI0MzNjYTY3YTUxNWM5ZTM5NmFkOWNiZWJiMjkyMDYyIl0=' /> <input type='hidden' class='gform_hidden' name='gform_target_page_number_38' id='gform_target_page_number_38' value='0' /> <input type='hidden' class='gform_hidden' name='gform_source_page_number_38' id='gform_source_page_number_38' value='1' /> <input type='hidden' name='gform_field_values' value='' /> </div> </form> </div> <iframe style='display:none;width:0px;height:0px;' src='about:blank' name='gform_ajax_frame_38' id='gform_ajax_frame_38'>This iframe contains the logic required to handle Ajax powered Gravity Forms.</iframe> <script type='text/javascript'>jQuery(document).ready(function($){gformInitSpinner( 38, 'https://www.postscapes.com/wp-content/plugins/gravityforms/images/spinner.gif' );jQuery('#gform_ajax_frame_38').on('load',function(){var contents = jQuery(this).contents().find('*').html();var is_postback = contents.indexOf('GF_AJAX_POSTBACK') >= 0;if(!is_postback){return;}var form_content = jQuery(this).contents().find('#gform_wrapper_38');var is_confirmation = jQuery(this).contents().find('#gform_confirmation_wrapper_38').length > 0;var is_redirect = contents.indexOf('gformRedirect(){') >= 0;var is_form = form_content.length > 0 && ! is_redirect && ! is_confirmation;var mt = parseInt(jQuery('html').css('margin-top'), 10) + parseInt(jQuery('body').css('margin-top'), 10) + 100;if(is_form){jQuery('#gform_wrapper_38').html(form_content.html());if(form_content.hasClass('gform_validation_error')){jQuery('#gform_wrapper_38').addClass('gform_validation_error');} else {jQuery('#gform_wrapper_38').removeClass('gform_validation_error');}setTimeout( function() { /* delay the scroll by 50 milliseconds to fix a bug in chrome */ jQuery(document).scrollTop(jQuery('#gform_wrapper_38').offset().top - mt); }, 50 );if(window['gformInitDatepicker']) {gformInitDatepicker();}if(window['gformInitPriceFields']) {gformInitPriceFields();}var current_page = jQuery('#gform_source_page_number_38').val();gformInitSpinner( 38, 'https://www.postscapes.com/wp-content/plugins/gravityforms/images/spinner.gif' );jQuery(document).trigger('gform_page_loaded', [38, current_page]);window['gf_submitting_38'] = false;}else if(!is_redirect){var confirmation_content = jQuery(this).contents().find('.GF_AJAX_POSTBACK').html();if(!confirmation_content){confirmation_content = contents;}setTimeout(function(){jQuery('#gform_wrapper_38').replaceWith(confirmation_content);jQuery(document).scrollTop(jQuery('#gf_38').offset().top - mt);jQuery(document).trigger('gform_confirmation_loaded', [38]);window['gf_submitting_38'] = false;}, 50);}else{jQuery('#gform_38').append(contents);if(window['gformRedirect']) {gformRedirect();}}jQuery(document).trigger('gform_post_render', [38, current_page]);} );} );</script><script type='text/javascript'> jQuery(document).bind('gform_post_render', function(event, formId, currentPage){if(formId == 38) {} } );jQuery(document).bind('gform_post_conditional_logic', function(event, formId, fields, isInit){} );</script><script type='text/javascript'> jQuery(document).ready(function(){jQuery(document).trigger('gform_post_render', [38, 1]) } ); </script>
[gravityform id="38" title="false" description="false" ajax="true" tabindex="49"]
<div class='gf_browser_chrome gform_wrapper' id='gform_wrapper_38' ><div id='gf_38' class='gform_anchor' tabindex='-1'></div><form method='post' enctype='multipart/form-data' target='gform_ajax_frame_38' id='gform_38' action='/arduino-wifi-body-scale/#gf_38'> <div class='gform_body'><ul id='gform_fields_38' class='gform_fields top_label form_sublabel_below description_below'><li id='field_38_2' class='gfield field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label gfield_label_before_complex' >Your Name</label><div class='ginput_complex ginput_container no_prefix has_first_name no_middle_name no_last_name no_suffix gf_name_has_1 ginput_container_name' id='input_38_2'> <span id='input_38_2_3_container' class='name_first' > <input type='text' name='input_2.3' id='input_38_2_3' value='' aria-label='First name' tabindex='50' aria-invalid="false" /> <label for='input_38_2_3' >First</label> </span> </div></li><li id='field_38_3' class='gfield field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label' for='input_38_3' >Can you share a high level overview of what you are looking for?</label><div class='ginput_container ginput_container_textarea'><textarea name='input_3' id='input_38_3' class='textarea medium' tabindex='54' aria-invalid="false" rows='10' cols='50'></textarea></div></li><li id='field_38_4' class='gfield field_sublabel_below field_description_below gfield_visibility_visible' ><label class='gfield_label' for='input_38_4' >Best way to reach you?</label><div class='ginput_container ginput_container_text'><input name='input_4' id='input_38_4' type='text' value='' class='medium' tabindex='55' aria-invalid="false" /></div></li> </ul></div> <div class='gform_footer top_label'> <input type='submit' id='gform_submit_button_38' class='gform_button button' value='Submit' tabindex='56' onclick='if(window["gf_submitting_38"]){return false;} window["gf_submitting_38"]=true; ' onkeypress='if( event.keyCode == 13 ){ if(window["gf_submitting_38"]){return false;} window["gf_submitting_38"]=true; jQuery("#gform_38").trigger("submit",[true]); }' /> <input type='hidden' name='gform_ajax' value='form_id=38&amp;title=&amp;description=&amp;tabindex=49' /> <input type='hidden' class='gform_hidden' name='is_submit_38' value='1' /> <input type='hidden' class='gform_hidden' name='gform_submit' value='38' /> <input type='hidden' class='gform_hidden' name='gform_unique_id' value='' /> <input type='hidden' class='gform_hidden' name='state_38' value='WyJbXSIsIjI0MzNjYTY3YTUxNWM5ZTM5NmFkOWNiZWJiMjkyMDYyIl0=' /> <input type='hidden' class='gform_hidden' name='gform_target_page_number_38' id='gform_target_page_number_38' value='0' /> <input type='hidden' class='gform_hidden' name='gform_source_page_number_38' id='gform_source_page_number_38' value='1' /> <input type='hidden' name='gform_field_values' value='' /> </div> </form> </div> <iframe style='display:none;width:0px;height:0px;' src='about:blank' name='gform_ajax_frame_38' id='gform_ajax_frame_38'>This iframe contains the logic required to handle Ajax powered Gravity Forms.</iframe> <script type='text/javascript'>jQuery(document).ready(function($){gformInitSpinner( 38, 'https://www.postscapes.com/wp-content/plugins/gravityforms/images/spinner.gif' );jQuery('#gform_ajax_frame_38').on('load',function(){var contents = jQuery(this).contents().find('*').html();var is_postback = contents.indexOf('GF_AJAX_POSTBACK') >= 0;if(!is_postback){return;}var form_content = jQuery(this).contents().find('#gform_wrapper_38');var is_confirmation = jQuery(this).contents().find('#gform_confirmation_wrapper_38').length > 0;var is_redirect = contents.indexOf('gformRedirect(){') >= 0;var is_form = form_content.length > 0 && ! is_redirect && ! is_confirmation;var mt = parseInt(jQuery('html').css('margin-top'), 10) + parseInt(jQuery('body').css('margin-top'), 10) + 100;if(is_form){jQuery('#gform_wrapper_38').html(form_content.html());if(form_content.hasClass('gform_validation_error')){jQuery('#gform_wrapper_38').addClass('gform_validation_error');} else {jQuery('#gform_wrapper_38').removeClass('gform_validation_error');}setTimeout( function() { /* delay the scroll by 50 milliseconds to fix a bug in chrome */ jQuery(document).scrollTop(jQuery('#gform_wrapper_38').offset().top - mt); }, 50 );if(window['gformInitDatepicker']) {gformInitDatepicker();}if(window['gformInitPriceFields']) {gformInitPriceFields();}var current_page = jQuery('#gform_source_page_number_38').val();gformInitSpinner( 38, 'https://www.postscapes.com/wp-content/plugins/gravityforms/images/spinner.gif' );jQuery(document).trigger('gform_page_loaded', [38, current_page]);window['gf_submitting_38'] = false;}else if(!is_redirect){var confirmation_content = jQuery(this).contents().find('.GF_AJAX_POSTBACK').html();if(!confirmation_content){confirmation_content = contents;}setTimeout(function(){jQuery('#gform_wrapper_38').replaceWith(confirmation_content);jQuery(document).scrollTop(jQuery('#gf_38').offset().top - mt);jQuery(document).trigger('gform_confirmation_loaded', [38]);window['gf_submitting_38'] = false;}, 50);}else{jQuery('#gform_38').append(contents);if(window['gformRedirect']) {gformRedirect();}}jQuery(document).trigger('gform_post_render', [38, current_page]);} );} );</script><script type='text/javascript'> jQuery(document).bind('gform_post_render', function(event, formId, currentPage){if(formId == 38) {} } );jQuery(document).bind('gform_post_conditional_logic', function(event, formId, fields, isInit){} );</script><script type='text/javascript'> jQuery(document).ready(function(){jQuery(document).trigger('gform_post_render', [38, 1]) } ); </script>