Amazon surprised the world yet again by unveiling its line of Amazon Dash Buttons on March 31, 2015. These handy little devices let you order your favorite products with the simple push of...get this...a button. You may not be able to change the batteries on these bad boys, but they do come in a variety of designs tailored to deliver more of the little things in life that we just can’t live without.

Dash Buttonはただの通過点、アマゾンが真に狙うは家電すべてとの連携ショッピング:ギズモード・ジャパン

The first Dash Buttons to hit the market were given to preferred customers on an invitation-only basis. After a successful trial run, these handy devices started selling at $4.99 a pop. By September 2015, Amazon officially announced plans to expand its booming Dash Button business.


One Button Devices: Benefits and Real-Life Applications

Amazon’s business model for the Dash Button line is interesting enough to fill a blog, but let’s stick to the device itself. These tricky little boogers are basically dry-cell battery-powered IoT devices comprised of a microcomputer and a wireless LAN module.
 

  

http://mpetroff.net/


Dash Buttons are stand-alone devices, making them extremely quick and easy to use in time of need—even handier than smartphone apps. The single-button interface makes these devices incredibly easy to operate. Combined with an immediacy that only simplicity can provide, the Dash Button’s UI is almost unbeatable in its field. However, on the flipside of all that simplicity lies an intricately-woven strategic approach born from a process of trial-and-error and tears of entire teams working to discover new and better ways to meet consumer needs.

Sure it may look like anyone could come up with the Dash Button, but Amazon surely deserves credit for actually going and making this thing. Everyone always sings the praises of smartphones as the culmination of all convenience, but the fact that this US-based company took a gamble on a dedicated piece of hardware provides an excellent object lesson to everyone in the IT industry.


The idea behind this device has the potential for a myriad of IoT uses that extend far beyond the finite walls of the business realm. The possibilities for what a simple “push of a button” could trigger are limited only by the bounds of our imagination. The allure of convenience brought about by the low-cost Dash Button is already giving birth to a world of new ideas that surpass the original purpose of the device. Here are a few examples that have caught the world’s attention so far.


This may very well be the first recorded example of someone using a Dash Button for something other than the originally intended purpose. Edward Benson was searching for a quick and easy way to record and keep track of what time his baby was going poo. After trying several options, he found it was far too much hassle to fumble around with the baby tracking smartphone apps in the middle of the night. The one-push Dash Button was love at first sight.


"...using your smart phone at night disrupts sleep. I want a simple button I can stick to the wall and push to record poops today, wake-ups tomorrow"


Forget about the initial setup required to create an account for ordering things on Amazon. We’re not going to hack the device either. Instead, let’s focus our attention on the ARP packets sent when the button is pushed and the device is starts up. We’ll use them to extract the MAC address from the device. The address will then be used to trigger a PC-based program in order to make this deceptively simple device do our bidding.



https://medium.com/


The article ends with a punchy, “The Internet of Things is already here.” While Amazon may not be particularly happy about customers taking their precious Dash Buttons and fiddling with their insides, it’s not like we’re mutilating the devices themselves. We’re just returning them to their original, “unregistered” state. If use-cases like these continue to spread, Amazon may be forced to implement some sort of anti-tampering system. However, at the moment, they haven’t said anything. Happy hunting!



Raymond Xie was super excited about the high cost performance of the Dash Button. The PiTFT he was using was getting super hot during use. He used the Dash Button as an easy way to turn his PiTFT on and off without wrecking the code. That’s when his wife chimed in with a suggestion. Why not use it to do something practical? Raymond decided to use the button to let his kids know when it’s time to eat. Both Raymond and his wife had a hard time getting the kids to come down for dinner as they were always on the second floor of the house playing games with headphones on. The Dash Button was wired to a Philips Hue light, and the push of the button made the lights flicker on and off, letting the kids know it’s time to eat. The button stays in the hands of the wife, stationed conveniently in the comfort of her own kitchen.


  • PizzaDash (2015ー09ー12) - github.com/bhberson


Inspired by Mr. Benson’s article, Brody Berson made his Dash Button into a one-stop Domino’s pizza delivery service (without Amazon being the wiser). Using the push-button as a trigger, Rasperry Pi calls the official Domino’s Pizza API to complete the order.


This led to the official adoption of the one-button ordering service in the Domino’s located in the UK (as of November 23, 2015).
 


It’s hard to tell how much of this has been inspired by “PizzaDash,” but Domino’s has shown itself to be a very resourceful, formidable early adopter of new IT resources and innovative online ordering systems.



Michael Donnelly was so excited about his rendition of the Dash Button that he posted it on YouTube. Here, we see Michael making the hallway light glow a menacing shade of red when he pushes the button to turn on the AC inside his parked car to cool off his vehicle to his preferred driving temperature. It also honks the horn for bonus points. Score!


Tony Dicola of Adafruit tries his hand at hacking the Dash Button head on. He overrides the firmware by writing over the original code for the LED with his own custom version. He leaves room for a sequel with the ominous-sounding, “...his guide didn’t touch on the Dash’s Wi-Fi module yet.” Only time will tell how far Tony will go.


Amazon Web Services (AWS), in conjunction with their October 2015 announcement of the beta version of the AWS IoT, released the beta version of the AWS IoT Button, which uses the exact same hardware as the Amazon Dash Button. At the AWS re: Invent 2015 conference which was held from October 6-9, participants were given the opportunity to experience the magic of AWS IoT firsthand. A simple push of the button sends a notification to the AWS IoT service, causing whatever task the user has prescribed to be performed.

   


Additionally, we’re starting to see more original button-based products produced by crowd-funding. It won’t be long before we start seeing more examples like the ones below.


    

These types of one-button IoT devices are catching the world’s eye with their expedient level of usability.


Engineering and Testing

After that healthy dose of history, it’s pretty natural for engineers such as myself to take everyday materials and create our very own one-touch device (example #1, example #2). As long as the device fits the overall description, it doesn’t really matter what the button actually does. I went for a design that hit home—a button that sent emails for me.


The Infamous Trial Run (30 Sec. Video)

     


The Device

Here are the materials and schematics I used for my test device. I started off with the resources that were so kindly made available via the Arduino IDE for ESP8266 project controlled by an ESP8266 Wi-Fi module I used as a stand-alone microcomputer.


(Prices are current as of October 2015)

  • ESP8226 module CDP-ESP8266 - Cerevo JPY 842 (tax not included)

  • Battery RW-111 (Phone battery: 3.6V 800mAh) - Rowa Japan JPY 780 (tax included) Amazon

            * Requires 3 AAA batteries

  • Breadboard EIC-15010 - Switch Science JPY 216 (tax included)

  • Jump wires, resistors, tact switch, red LED

  • Tupperware container, paper towels

 


Notes

  • The switch is created by taking a tact switch, cushioning it with paper towels, and then using the elastic snap of the Tupperware top to push the button. It may look cheap, but this extra layer of protection cradles the delicate switch and makes the entire device look presentable while acting as a shade for the LED.

  • I had a couple of Rowa batteries laying around the house for my house phone. (It’s this Uniden handset here, for those of you who are that interested in my private life.) The specs and size were perfect, but it had to be attached to my phone in order to charge the battery. I tried contacting the company to see if they had a separate charger unit available, but the answer was a pre-anticipated, “No.”

  • In order to control battery consumption, the ESP8266 module goes into deep sleep mode when it’s not being used. When the button is pushed, the device resets and the required process is called. Once the process is finished, the device goes back to sleep.

    • When in deep sleep mode, the ESP8266 uses a nominal 10μA. I verified that it actually used 11μA.

    • The operating voltage of the ESP8266EX is 3.0 to 3.6V. The operating current (average value) is a nominal 80mA (see datasheet below). I measured how much battery it used during my tests, and it turned out that a total of 60mA was used from the time the button was pushed to when the device went back to sleep (this includes making the LED lamp flicker). It took about 10 seconds to finish one complete cycle.


ESP8266EX Datasheet Version 4.4 (2015-08-01) Page 8

(Click to enlarge)
 

  • Next, I tested to see approximately how long the battery would last.

I set a few simple rules for this test. The user must activate and deactivate the device with a push of the button two times a day. If we take the values mentioned above into consideration, this leaves us with 10 seconds of 80mA for two cycles per day. The remaining 86,380 seconds are calculated using the 11μA (0.011mA) value, yielding an average of approx. 0.03mA. Ignoring any naturally occurring energy dispersion, we can use the battery life calculator found at www.digikey.jp to run a quick calculation for our 800mAh Rowa battery. The results are as follows:

800mAh / 0.03mA * 0.7 ≒ 18666.67 hours ≒ 777.78 days ≒ 25.1 months ≒ 2.1 years

  • Time for a bit of random trivia. The Amazon Dash Button uses one Ultimate Lithium Energizer battery. This battery claims to last up to 9 hours longer compared to alkaline alternatives, making it perhaps the best battery currently available in the market.

  • Amazon Dash Button Teardown - mpetroff.net

* A closer look at the black band on the positive pole of this tiny powerhouse reveals a cryptic message from the makers of this long-lasting powerhouse. 12-2034” and “12-2035” can be seen written in white. This number represents how long the battery will remain usable in its dormant state. That’s 20 years of pure deep-sleep power!

http://mpetroff.net/

  • According to this datasheet, Energizer’s Ultimate Lithium AAA has an extremely high capacity with the following specs: “Max Discharge: 1.5 Amps Continuous, 2.0 Amps Pulse (2 sec on / 8 sec off).” For devices like the Dash Button that occasionally requires electricity, one can take full advantage of the long-lasting benefits of this stamina-packed battery.

  • The mpetroff.net article includes the following statement. "The Dash Button operates at 3.3 V boosted from the battery’s nominal 1.5 V, drawing 200–300 mA from the battery when on and 2.3 μA when in sleep." At present, there is no official statement about the battery life of the Dash Button.

  • Energizer’s Ultimate Lithium battery excels in the high-performance category. The battery alone makes the $4.99 price tag on the Dash Button look extremely appealing.


Energizer L92BP-Energizer Ultimate Lithium AAA Battery (4-Pack):

$7.99 on www.amazon.com

  • If you don’t use the breadboard, you can make the wiring portion of the device even smaller. However, given the size of our device in this experiment, it’s more than acceptable.


About the Program

I used SendGrid for sending the email itself. SendGrid is very popular for this particular application. When signing up however, you’ll be required to submit a brief explanation that includes the intended purposes of use for the service. Such measures are taken in efforts to prevent the improper use of SendGrid. An employee will then review your application and decide whether or not to issue your account.


You can send up to 400 messages a day with their free plan, which is more than enough for what we want to do. The API documentation has everything you ever wanted to know and more about SendGrid.


We’ll be using the following straightforward Web API. It’s been available since the service first came out.


Like most cloud services out there, HTTPS is required for using SendGrid’s Web API. The Arduino IDE for ESP8266 Project includes support for TLS 1.0/1.1 as of August 31, 2015. As a user myself, I’ve been looking forward to this feature for a while now. However, at the present moment (early November 2015), it’s still under development. It’ll most likely take some time before it is stable enough to use effectively.



That should explain why I went with SendGrid. I played around with adding an SSL client feature to the ESP8266 module’s AT command earlier this year. I modified the HTTPS client code from a sample program provided by Espressif, using Arduino IDE as a library. This can easily be used for more than just email applications.

* The stable version of Arduino IDE for ESP8226 that i currently have on hand is from a July 23, 2015 release entitled 1.6.5-947-g39819f0. When I used the Espressif library included in this build to create a sketch for our program, I ran into a problem that caused irregular shutdowns when a connection request was sent to SendGrid’s “https://api.sendgrid.com/” API server. I was able to eliminate this problem by writing over the *.a portion of packages/esp8266/hardware/esp8266/1.6.5-947-g39819f0/tools/sdk/lib/ with the latest service provided here: esp_iot_sdk_v1.4.0_15_09_18.

I’ve posted my source code below so you can take a closer look. Take the EspHttpsClient library and save it inside your local library folder to get started.


Library: EspHttpClient
EspHttpClient.h - GitHub
EspHttpClient.cpp - GitHub

 

Sketch: OneButtonMailer
OneButtonMailer.h - GitHubsd
OneButtonMailer.ino


You may experience a little bit of a delay. Instead of using a dedicated service, you may want to go with IFTTT’s Maker Channel. If you’re trying to send emails, you can use the screenshots below to start cooking up your own recipe for success. (Click to enlarge)
 
 
OneButtonMailer_IFTTT.h - GitHub
  OneButtonMailer_IFTTT.ino


Appendix

I’ve included a few key sections about ESP8266’s sleep mode from the documentation provided by Espressif.


ESP8266EX Datasheet Version 4.4 (2015-08-01)

       

(Click to enlarge)

system_deep_sleep()
and system_deep_sleep_set_option() references from ESP8266 SDK API Guide Version 1.4 (2015-09-18)

   


Thanks for reading, and here’s to bright futures for one-push devices and the Internet of Things!


(tanabe)